From 6b7026cdd1ed472941339c9e5a69a17d541e6661 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Tue, 9 Feb 2021 21:02:38 +0100 Subject: [PATCH 0001/1130] refactor(hold-tap): simplify flavor enum --- app/src/behaviors/behavior_hold_tap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index ab25c3cdbed..ad604e71c8e 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -31,9 +31,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define ZMK_BHV_HOLD_TAP_POSITION_NOT_USED 9999 enum flavor { - ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED = 0, - ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED = 1, - ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED = 2, + FLAVOR_HOLD_PREFERRED, + FLAVOR_BALANCED, + FLAVOR_TAP_PREFERRED, }; struct behavior_hold_tap_config { @@ -273,11 +273,11 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio static inline char *flavor_str(enum flavor flavor) { switch (flavor) { - case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED: + case FLAVOR_HOLD_PREFERRED: return "hold-preferred"; - case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED: + case FLAVOR_BALANCED: return "balanced"; - case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED: + case FLAVOR_TAP_PREFERRED: return "tap-preferred"; } return "UNKNOWN FLAVOR"; @@ -294,11 +294,11 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome } switch (hold_tap->config->flavor) { - case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED: + case FLAVOR_HOLD_PREFERRED: decide_hold_preferred(hold_tap, event_type); - case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED: + case FLAVOR_BALANCED: decide_balanced(hold_tap, event_type); - case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED: + case FLAVOR_TAP_PREFERRED: decide_tap_preferred(hold_tap, event_type); } From 200c6cabeaed2101f136a0ab844657e592f12d09 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Thu, 4 Feb 2021 13:42:45 +0100 Subject: [PATCH 0002/1130] refactor(hold-tap): use enum for hold-tap status --- app/src/behaviors/behavior_hold_tap.c | 84 ++++++++++++++------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index ad604e71c8e..8df401b16d6 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -36,6 +36,12 @@ enum flavor { FLAVOR_TAP_PREFERRED, }; +enum status { + STATUS_UNDECIDED, + STATUS_TAP, + STATUS_HOLD, +}; + struct behavior_hold_tap_config { int tapping_term_ms; char *hold_behavior_dev; @@ -50,8 +56,7 @@ struct active_hold_tap { uint32_t param_hold; uint32_t param_tap; int64_t timestamp; - bool is_decided; - bool is_hold; + enum status status; const struct behavior_hold_tap_config *config; struct k_delayed_work work; bool work_is_cancelled; @@ -186,8 +191,7 @@ static struct active_hold_tap *store_hold_tap(uint32_t position, uint32_t param_ continue; } active_hold_taps[i].position = position; - active_hold_taps[i].is_decided = false; - active_hold_taps[i].is_hold = false; + active_hold_taps[i].status = STATUS_UNDECIDED; active_hold_taps[i].config = config; active_hold_taps[i].param_hold = param_hold; active_hold_taps[i].param_tap = param_tap; @@ -199,8 +203,7 @@ static struct active_hold_tap *store_hold_tap(uint32_t position, uint32_t param_ static void clear_hold_tap(struct active_hold_tap *hold_tap) { hold_tap->position = ZMK_BHV_HOLD_TAP_POSITION_NOT_USED; - hold_tap->is_decided = false; - hold_tap->is_hold = false; + hold_tap->status = STATUS_UNDECIDED; hold_tap->work_is_cancelled = false; } @@ -215,18 +218,15 @@ enum decision_moment { static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_moment event) { switch (event) { case HT_KEY_UP: - hold_tap->is_hold = 0; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_TAP; + return; case HT_OTHER_KEY_UP: case HT_TIMER_EVENT: - hold_tap->is_hold = 1; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_HOLD; + return; case HT_QUICK_TAP: - hold_tap->is_hold = 0; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_TAP; + return; default: return; } @@ -235,17 +235,14 @@ static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_mome static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) { switch (event) { case HT_KEY_UP: - hold_tap->is_hold = 0; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_TAP; + return; case HT_TIMER_EVENT: - hold_tap->is_hold = 1; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_HOLD; + return; case HT_QUICK_TAP: - hold_tap->is_hold = 0; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_TAP; + return; default: return; } @@ -254,24 +251,21 @@ static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) { switch (event) { case HT_KEY_UP: - hold_tap->is_hold = 0; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_TAP; + return; case HT_OTHER_KEY_DOWN: case HT_TIMER_EVENT: - hold_tap->is_hold = 1; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_HOLD; + return; case HT_QUICK_TAP: - hold_tap->is_hold = 0; - hold_tap->is_decided = true; - break; + hold_tap->status = STATUS_TAP; + return; default: return; } } -static inline char *flavor_str(enum flavor flavor) { +static inline const char *flavor_str(enum flavor flavor) { switch (flavor) { case FLAVOR_HOLD_PREFERRED: return "hold-preferred"; @@ -283,8 +277,20 @@ static inline char *flavor_str(enum flavor flavor) { return "UNKNOWN FLAVOR"; } +static inline const char *status_str(enum status status) { + switch (status) { + case STATUS_UNDECIDED: + return "undecided"; + case STATUS_HOLD: + return "hold"; + case STATUS_TAP: + return "tap"; + } + return "UNKNOWN STATUS"; +} + static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event_type) { - if (hold_tap->is_decided) { + if (hold_tap->status != STATUS_UNDECIDED) { return; } @@ -302,11 +308,11 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome decide_tap_preferred(hold_tap, event_type); } - if (!hold_tap->is_decided) { + if (hold_tap->status == STATUS_UNDECIDED) { return; } - LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, hold_tap->is_hold ? "hold" : "tap", + LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, status_str(hold_tap->status), flavor_str(hold_tap->config->flavor), event_type); undecided_hold_tap = NULL; @@ -316,7 +322,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome }; struct zmk_behavior_binding binding; - if (hold_tap->is_hold) { + if (hold_tap->status == STATUS_HOLD) { binding.behavior_dev = hold_tap->config->hold_behavior_dev; binding.param1 = hold_tap->param_hold; binding.param2 = 0; @@ -391,7 +397,7 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, }; struct zmk_behavior_binding sub_behavior_binding; - if (hold_tap->is_hold) { + if (hold_tap->status == STATUS_HOLD) { sub_behavior_binding.behavior_dev = hold_tap->config->hold_behavior_dev; sub_behavior_binding.param1 = hold_tap->param_hold; sub_behavior_binding.param2 = 0; From abc60fc7cb5c145bff9029a1aadd73c5adbf4a7b Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Thu, 4 Feb 2021 13:50:13 +0100 Subject: [PATCH 0003/1130] refactor(hold-tap): split hold state into interrupt and timer --- app/src/behaviors/behavior_hold_tap.c | 23 ++++++++++++------- .../2-dn-timer-up/keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../many-nested/keycode_events.snapshot | 8 +++---- .../2-dn-timer-up/keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../2-dn-timer-up/keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- 23 files changed, 40 insertions(+), 33 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 8df401b16d6..6c5adc57580 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -39,7 +39,8 @@ enum flavor { enum status { STATUS_UNDECIDED, STATUS_TAP, - STATUS_HOLD, + STATUS_HOLD_INTERRUPT, + STATUS_HOLD_TIMER, }; struct behavior_hold_tap_config { @@ -221,8 +222,10 @@ static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_mome hold_tap->status = STATUS_TAP; return; case HT_OTHER_KEY_UP: + hold_tap->status = STATUS_HOLD_INTERRUPT; + return; case HT_TIMER_EVENT: - hold_tap->status = STATUS_HOLD; + hold_tap->status = STATUS_HOLD_TIMER; return; case HT_QUICK_TAP: hold_tap->status = STATUS_TAP; @@ -238,7 +241,7 @@ static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision hold_tap->status = STATUS_TAP; return; case HT_TIMER_EVENT: - hold_tap->status = STATUS_HOLD; + hold_tap->status = STATUS_HOLD_TIMER; return; case HT_QUICK_TAP: hold_tap->status = STATUS_TAP; @@ -254,8 +257,10 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio hold_tap->status = STATUS_TAP; return; case HT_OTHER_KEY_DOWN: + hold_tap->status = STATUS_HOLD_INTERRUPT; + return; case HT_TIMER_EVENT: - hold_tap->status = STATUS_HOLD; + hold_tap->status = STATUS_HOLD_TIMER; return; case HT_QUICK_TAP: hold_tap->status = STATUS_TAP; @@ -281,8 +286,10 @@ static inline const char *status_str(enum status status) { switch (status) { case STATUS_UNDECIDED: return "undecided"; - case STATUS_HOLD: - return "hold"; + case STATUS_HOLD_TIMER: + return "hold-timer"; + case STATUS_HOLD_INTERRUPT: + return "hold-interrupt"; case STATUS_TAP: return "tap"; } @@ -322,7 +329,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome }; struct zmk_behavior_binding binding; - if (hold_tap->status == STATUS_HOLD) { + if (hold_tap->status & STATUS_HOLD) { binding.behavior_dev = hold_tap->config->hold_behavior_dev; binding.param1 = hold_tap->param_hold; binding.param2 = 0; @@ -397,7 +404,7 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, }; struct zmk_behavior_binding sub_behavior_binding; - if (hold_tap->status == STATUS_HOLD) { + if (hold_tap->status & STATUS_HOLD) { sub_behavior_binding.behavior_dev = hold_tap->config->hold_behavior_dev; sub_behavior_binding.param1 = hold_tap->param_hold; sub_behavior_binding.param2 = 0; diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot index f83b408686e..8df025c0bfd 100644 --- a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) +ht_decide: 0 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index c2bddc2698e..8a4db9bb41f 100644 --- a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) +ht_decide: 0 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index 5354ff74f3a..2f77cd276d1 100644 --- a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold (balanced event 3) +ht_decide: 0 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 10380651ff9..fd512fea2eb 100644 --- a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) +ht_decide: 0 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (balanced event 0) diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 9d5a9e83e4b..a557f559982 100644 --- a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) +ht_decide: 0 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 190d95e080a..8bc8048e3cc 100644 --- a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 2) +ht_decide: 0 decided hold-interrupt (balanced event 2) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 190d95e080a..8bc8048e3cc 100644 --- a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 2) +ht_decide: 0 decided hold-interrupt (balanced event 2) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot b/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot index 4bd40a91858..2de45f99d91 100644 --- a/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot @@ -1,16 +1,16 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) +ht_decide: 0 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided hold (balanced event 3) +ht_decide: 1 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 2 new undecided hold_tap ht_binding_released: 0 cleaning up hold-tap -ht_decide: 2 decided hold (balanced event 3) +ht_decide: 2 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 3 new undecided hold_tap ht_binding_released: 1 cleaning up hold-tap -ht_decide: 3 decided hold (balanced event 3) +ht_decide: 3 decided hold-timer (balanced event 3) kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot index 291d17b181f..22497247dbf 100644 --- a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 3) +ht_decide: 0 decided hold-timer (hold-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index 73308626089..f368f667b37 100644 --- a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 3) +ht_decide: 0 decided hold-timer (hold-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index 5d6d637e5f0..32c99f2e0fd 100644 --- a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold (hold-preferred event 3) +ht_decide: 0 decided hold-timer (hold-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 92886a8c2ff..4275a3db156 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred event 1) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (hold-preferred event 0) diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index e2feeefcf68..8164f95cfb8 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred event 1) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index e2feeefcf68..8164f95cfb8 100644 --- a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred event 1) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot index e2feeefcf68..8164f95cfb8 100644 --- a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred event 1) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot index da5b8265991..6f580e0535c 100644 --- a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred event 1) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot index 3dccfd31d8c..61388888936 100644 --- a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index c89aecfa450..02a4d1f8f31 100644 --- a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index c149544a979..4b424f8dc9f 100644 --- a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index cf7db305a6c..9f5f1d02bf6 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (tap-preferred event 0) diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 95573b9bbc8..0069f7072ea 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 95573b9bbc8..0069f7072ea 100644 --- a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred event 3) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 From 0ebf440de8c673c7dbbc1df2abfc38d79ea53d29 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Thu, 4 Feb 2021 14:05:34 +0100 Subject: [PATCH 0004/1130] refactor(hold-tap): create press_binding and release_binding functions --- app/src/behaviors/behavior_hold_tap.c | 74 +++++++++++++-------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 6c5adc57580..e3831b33c36 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -296,6 +296,41 @@ static inline const char *status_str(enum status status) { return "UNKNOWN STATUS"; } +static int press_binding(struct active_hold_tap *hold_tap) { + struct zmk_behavior_binding_event event = { + .position = hold_tap->position, + .timestamp = hold_tap->timestamp, + }; + + struct zmk_behavior_binding binding = {0}; + if (hold_tap->status == STATUS_HOLD_TIMER || hold_tap->status == STATUS_HOLD_INTERRUPT) { + binding.behavior_dev = hold_tap->config->hold_behavior_dev; + binding.param1 = hold_tap->param_hold; + } else { + binding.behavior_dev = hold_tap->config->tap_behavior_dev; + binding.param1 = hold_tap->param_tap; + store_last_tapped(hold_tap); + } + return behavior_keymap_binding_pressed(&binding, event); +} + +static int release_binding(struct active_hold_tap *hold_tap) { + struct zmk_behavior_binding_event event = { + .position = hold_tap->position, + .timestamp = hold_tap->timestamp, + }; + + struct zmk_behavior_binding binding = {0}; + if (hold_tap->status == STATUS_HOLD_TIMER || hold_tap->status == STATUS_HOLD_INTERRUPT) { + binding.behavior_dev = hold_tap->config->hold_behavior_dev; + binding.param1 = hold_tap->param_hold; + } else { + binding.behavior_dev = hold_tap->config->tap_behavior_dev; + binding.param1 = hold_tap->param_tap; + } + return behavior_keymap_binding_released(&binding, event); +} + static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event_type) { if (hold_tap->status != STATUS_UNDECIDED) { return; @@ -322,24 +357,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, status_str(hold_tap->status), flavor_str(hold_tap->config->flavor), event_type); undecided_hold_tap = NULL; - - struct zmk_behavior_binding_event event = { - .position = hold_tap->position, - .timestamp = hold_tap->timestamp, - }; - - struct zmk_behavior_binding binding; - if (hold_tap->status & STATUS_HOLD) { - binding.behavior_dev = hold_tap->config->hold_behavior_dev; - binding.param1 = hold_tap->param_hold; - binding.param2 = 0; - } else { - binding.behavior_dev = hold_tap->config->tap_behavior_dev; - binding.param1 = hold_tap->param_tap; - binding.param2 = 0; - store_last_tapped(hold_tap); - } - behavior_keymap_binding_pressed(&binding, event); + press_binding(hold_tap); release_captured_events(); } @@ -395,25 +413,7 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, } decide_hold_tap(hold_tap, HT_KEY_UP); - - // todo: set up the binding and data items inside of the - // active_hhold_tap->config->behaviors->tap.behavior_dev;old_tap struct - struct zmk_behavior_binding_event sub_behavior_data = { - .position = hold_tap->position, - .timestamp = hold_tap->timestamp, - }; - - struct zmk_behavior_binding sub_behavior_binding; - if (hold_tap->status & STATUS_HOLD) { - sub_behavior_binding.behavior_dev = hold_tap->config->hold_behavior_dev; - sub_behavior_binding.param1 = hold_tap->param_hold; - sub_behavior_binding.param2 = 0; - } else { - sub_behavior_binding.behavior_dev = hold_tap->config->tap_behavior_dev; - sub_behavior_binding.param1 = hold_tap->param_tap; - sub_behavior_binding.param2 = 0; - } - behavior_keymap_binding_released(&sub_behavior_binding, sub_behavior_data); + release_binding(hold_tap); if (work_cancel_result == -EINPROGRESS) { // let the timer handler clean up From 9c4c266b17f6fec4866d65bec0889233845b6282 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Thu, 4 Feb 2021 14:30:53 +0100 Subject: [PATCH 0005/1130] refactor(hold-tap): pretty print decision_moment --- app/src/behaviors/behavior_hold_tap.c | 46 +++++++++++++------ .../balanced/1-dn-up/keycode_events.snapshot | 2 +- .../2-dn-timer-up/keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../5-quick-tap/keycode_events.snapshot | 4 +- .../many-nested/keycode_events.snapshot | 8 ++-- .../1-dn-up/keycode_events.snapshot | 2 +- .../2-dn-timer-up/keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../5-quick-tap/keycode_events.snapshot | 4 +- .../1-dn-up/keycode_events.snapshot | 2 +- .../2-dn-timer-up/keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../5-quick-tap/keycode_events.snapshot | 4 +- 38 files changed, 78 insertions(+), 60 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index e3831b33c36..798992bb3fd 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -43,6 +43,14 @@ enum status { STATUS_HOLD_TIMER, }; +enum decision_moment { + HT_KEY_UP, + HT_OTHER_KEY_DOWN, + HT_OTHER_KEY_UP, + HT_TIMER_EVENT, + HT_QUICK_TAP, +}; + struct behavior_hold_tap_config { int tapping_term_ms; char *hold_behavior_dev; @@ -208,14 +216,6 @@ static void clear_hold_tap(struct active_hold_tap *hold_tap) { hold_tap->work_is_cancelled = false; } -enum decision_moment { - HT_KEY_UP = 0, - HT_OTHER_KEY_DOWN = 1, - HT_OTHER_KEY_UP = 2, - HT_TIMER_EVENT = 3, - HT_QUICK_TAP = 4, -}; - static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_moment event) { switch (event) { case HT_KEY_UP: @@ -296,6 +296,22 @@ static inline const char *status_str(enum status status) { return "UNKNOWN STATUS"; } +static inline const char *decision_moment_str(enum decision_moment decision_moment) { + switch (decision_moment) { + case HT_KEY_UP: + return "key-up"; + case HT_OTHER_KEY_DOWN: + return "other-key-down"; + case HT_OTHER_KEY_UP: + return "other-key-up"; + case HT_QUICK_TAP: + return "quick-tap"; + case HT_TIMER_EVENT: + return "timer"; + } + return "UNKNOWN STATUS"; +} + static int press_binding(struct active_hold_tap *hold_tap) { struct zmk_behavior_binding_event event = { .position = hold_tap->position, @@ -331,7 +347,8 @@ static int release_binding(struct active_hold_tap *hold_tap) { return behavior_keymap_binding_released(&binding, event); } -static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event_type) { +static void decide_hold_tap(struct active_hold_tap *hold_tap, + enum decision_moment decision_moment) { if (hold_tap->status != STATUS_UNDECIDED) { return; } @@ -343,19 +360,20 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome switch (hold_tap->config->flavor) { case FLAVOR_HOLD_PREFERRED: - decide_hold_preferred(hold_tap, event_type); + decide_hold_preferred(hold_tap, decision_moment); case FLAVOR_BALANCED: - decide_balanced(hold_tap, event_type); + decide_balanced(hold_tap, decision_moment); case FLAVOR_TAP_PREFERRED: - decide_tap_preferred(hold_tap, event_type); + decide_tap_preferred(hold_tap, decision_moment); } if (hold_tap->status == STATUS_UNDECIDED) { return; } - LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, status_str(hold_tap->status), - flavor_str(hold_tap->config->flavor), event_type); + LOG_DBG("%d decided %s (%s decision moment %s)", hold_tap->position, + status_str(hold_tap->status), flavor_str(hold_tap->config->flavor), + decision_moment_str(decision_moment)); undecided_hold_tap = NULL; press_binding(hold_tap); release_captured_events(); diff --git a/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot index 41344422da1..76a8ee5f8b3 100644 --- a/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) +ht_decide: 0 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot index 8df025c0bfd..926174b4e3e 100644 --- a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (balanced event 3) +ht_decide: 0 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot index ca744aac99c..22c24df25a7 100644 --- a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) +ht_decide: 0 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index 8a4db9bb41f..0c7ea49795c 100644 --- a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (balanced event 3) +ht_decide: 0 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot index 6bef34604ba..38bceb97be2 100644 --- a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided tap (balanced event 0) +ht_decide: 0 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index 2f77cd276d1..afbb52cf52d 100644 --- a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold-timer (balanced event 3) +ht_decide: 0 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index fd512fea2eb..9c91aa5d2ac 100644 --- a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,8 +1,8 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (balanced event 3) +ht_decide: 0 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided tap (balanced event 0) +ht_decide: 1 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index a557f559982..242b31f2216 100644 --- a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (balanced event 3) +ht_decide: 0 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 8bc8048e3cc..55fd0854435 100644 --- a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (balanced event 2) +ht_decide: 0 decided hold-interrupt (balanced decision moment other-key-up) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 8bc8048e3cc..55fd0854435 100644 --- a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (balanced event 2) +ht_decide: 0 decided hold-interrupt (balanced decision moment other-key-up) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot index 31089abfbf4..d06cd1cacb8 100644 --- a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) +ht_decide: 0 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/5-quick-tap/keycode_events.snapshot b/app/tests/hold-tap/balanced/5-quick-tap/keycode_events.snapshot index a1b18d1c806..4d0cdd8300c 100644 --- a/app/tests/hold-tap/balanced/5-quick-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/5-quick-tap/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) +ht_decide: 0 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 4) +ht_decide: 0 decided tap (balanced decision moment quick-tap) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot b/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot index 2de45f99d91..489fe477376 100644 --- a/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot @@ -1,16 +1,16 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (balanced event 3) +ht_decide: 0 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided hold-timer (balanced event 3) +ht_decide: 1 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 2 new undecided hold_tap ht_binding_released: 0 cleaning up hold-tap -ht_decide: 2 decided hold-timer (balanced event 3) +ht_decide: 2 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 3 new undecided hold_tap ht_binding_released: 1 cleaning up hold-tap -ht_decide: 3 decided hold-timer (balanced event 3) +ht_decide: 3 decided hold-timer (balanced decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot index 12c1a54832e..36dc281a212 100644 --- a/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (hold-preferred event 0) +ht_decide: 0 decided tap (hold-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot index 22497247dbf..827ac986654 100644 --- a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (hold-preferred event 3) +ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot index 2f8b72e7186..84789bee272 100644 --- a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (hold-preferred event 0) +ht_decide: 0 decided tap (hold-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index f368f667b37..4bac227b013 100644 --- a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (hold-preferred event 3) +ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot index 45964250451..a5b9f134591 100644 --- a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided tap (hold-preferred event 0) +ht_decide: 0 decided tap (hold-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index 32c99f2e0fd..8ae35a38f83 100644 --- a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold-timer (hold-preferred event 3) +ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 4275a3db156..865a985a950 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,8 +1,8 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided tap (hold-preferred event 0) +ht_decide: 1 decided tap (hold-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 8164f95cfb8..1d2b827ec6f 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 8164f95cfb8..1d2b827ec6f 100644 --- a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 8164f95cfb8..1d2b827ec6f 100644 --- a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot index 6f580e0535c..ef3ea56218a 100644 --- a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-interrupt (hold-preferred event 1) +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/5-quick-tap/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/5-quick-tap/keycode_events.snapshot index c3caf8704c3..704cf41c9d6 100644 --- a/app/tests/hold-tap/hold-preferred/5-quick-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/5-quick-tap/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (hold-preferred event 0) +ht_decide: 0 decided tap (hold-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (hold-preferred event 4) +ht_decide: 0 decided tap (hold-preferred decision moment quick-tap) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot index 93b5ce2993b..d1f01261c81 100644 --- a/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) +ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot index 61388888936..4bf3e7ca8b8 100644 --- a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot index 09d2f10eeb6..e6a1450ff1c 100644 --- a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) +ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index 02a4d1f8f31..b7f4e669da9 100644 --- a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,6 +1,6 @@ kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot index 4211e851a57..72e3755a115 100644 --- a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided tap (tap-preferred event 0) +ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index 4b424f8dc9f..cdb1ee9a334 100644 --- a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold-timer (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 9f5f1d02bf6..54ac986bffd 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,8 +1,8 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided tap (tap-preferred event 0) +ht_decide: 1 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 0069f7072ea..2d985568488 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 0069f7072ea..2d985568488 100644 --- a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred event 3) +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 38cce941fd0..93fa43be6d2 100644 --- a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) +ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot index 8749a46c17f..e10f263eb15 100644 --- a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) +ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/5-quick-tap/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/5-quick-tap/keycode_events.snapshot index e89ccf343be..3e8ec42b520 100644 --- a/app/tests/hold-tap/tap-preferred/5-quick-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/5-quick-tap/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) +ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 4) +ht_decide: 0 decided tap (tap-preferred decision moment quick-tap) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap From 62ae157c0bbd85654cd098d058dc95b0de54171a Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 6 Feb 2021 20:57:06 +0100 Subject: [PATCH 0006/1130] refactor(hold-tap): improve switch statements --- app/src/behaviors/behavior_hold_tap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 798992bb3fd..06d22f4fe2c 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -278,8 +278,9 @@ static inline const char *flavor_str(enum flavor flavor) { return "balanced"; case FLAVOR_TAP_PREFERRED: return "tap-preferred"; + default: + return "UNKNOWN FLAVOR"; } - return "UNKNOWN FLAVOR"; } static inline const char *status_str(enum status status) { @@ -292,8 +293,9 @@ static inline const char *status_str(enum status status) { return "hold-interrupt"; case STATUS_TAP: return "tap"; + default: + return "UNKNOWN STATUS"; } - return "UNKNOWN STATUS"; } static inline const char *decision_moment_str(enum decision_moment decision_moment) { @@ -308,8 +310,9 @@ static inline const char *decision_moment_str(enum decision_moment decision_mome return "quick-tap"; case HT_TIMER_EVENT: return "timer"; + default: + return "UNKNOWN STATUS"; } - return "UNKNOWN STATUS"; } static int press_binding(struct active_hold_tap *hold_tap) { From 89ed816c670abdc74fe02b484fe148bc5658564c Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 6 Feb 2021 20:58:04 +0100 Subject: [PATCH 0007/1130] feature(hold-tap): Retro tapping --- .../behaviors/zmk,behavior-hold-tap.yaml | 2 + app/src/behaviors/behavior_hold_tap.c | 28 ++++++++++++ .../balanced/6-retro-tap/events.patterns | 6 +++ .../6-retro-tap/keycode_events.snapshot | 21 +++++++++ .../balanced/6-retro-tap/native_posix.keymap | 45 +++++++++++++++++++ .../6-retro-tap/events.patterns | 6 +++ .../6-retro-tap/keycode_events.snapshot | 21 +++++++++ .../6-retro-tap/native_posix.keymap | 45 +++++++++++++++++++ .../tap-preferred/6-retro-tap/events.patterns | 6 +++ .../6-retro-tap/keycode_events.snapshot | 21 +++++++++ .../6-retro-tap/native_posix.keymap | 45 +++++++++++++++++++ docs/docs/behaviors/hold-tap.md | 12 +++++ 12 files changed, 258 insertions(+) create mode 100644 app/tests/hold-tap/balanced/6-retro-tap/events.patterns create mode 100644 app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/6-retro-tap/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/6-retro-tap/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index 50fa5d505e5..f46b36a47fc 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -28,3 +28,5 @@ properties: - "hold-preferred" - "balanced" - "tap-preferred" + retro-tap: + type: boolean diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 06d22f4fe2c..739042ac6bd 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -57,6 +57,7 @@ struct behavior_hold_tap_config { char *tap_behavior_dev; int quick_tap_ms; enum flavor flavor; + bool retro_tap; }; // this data is specific for each hold-tap @@ -382,6 +383,29 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, release_captured_events(); } +static void decide_retro_tap(struct active_hold_tap *hold_tap) { + if (!hold_tap->config->retro_tap) { + return; + } + if (hold_tap->status == STATUS_HOLD_TIMER) { + release_binding(hold_tap); + LOG_DBG("%d retro tap", hold_tap->position); + hold_tap->status = STATUS_TAP; + press_binding(hold_tap); + return; + } +} + +static void update_hold_status_for_retro_tap(uint32_t position) { + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + struct active_hold_tap *hold_tap = &active_hold_taps[i]; + if (hold_tap->position != position && hold_tap->status == STATUS_HOLD_TIMER) { + LOG_DBG("Update hold tap %d status to hold-interrupt", hold_tap->position); + hold_tap->status = STATUS_HOLD_INTERRUPT; + } + } +} + static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { const struct device *dev = device_get_binding(binding->behavior_dev); @@ -434,6 +458,7 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, } decide_hold_tap(hold_tap, HT_KEY_UP); + decide_retro_tap(hold_tap); release_binding(hold_tap); if (work_cancel_result == -EINPROGRESS) { @@ -457,6 +482,8 @@ static const struct behavior_driver_api behavior_hold_tap_driver_api = { static int position_state_changed_listener(const zmk_event_t *eh) { struct zmk_position_state_changed *ev = as_zmk_position_state_changed(eh); + update_hold_status_for_retro_tap(ev->position); + if (undecided_hold_tap == NULL) { LOG_DBG("%d bubble (no undecided hold_tap active)", ev->position); return ZMK_EV_EVENT_BUBBLE; @@ -564,6 +591,7 @@ static struct behavior_hold_tap_data behavior_hold_tap_data; .tap_behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(n, bindings, 1)), \ .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ + .retro_tap = DT_INST_PROP(n, retro_tap), \ }; \ DEVICE_AND_API_INIT(behavior_hold_tap_##n, DT_INST_LABEL(n), behavior_hold_tap_init, \ &behavior_hold_tap_data, &behavior_hold_tap_config_##n, APPLICATION, \ diff --git a/app/tests/hold-tap/balanced/6-retro-tap/events.patterns b/app/tests/hold-tap/balanced/6-retro-tap/events.patterns new file mode 100644 index 00000000000..4db21917caf --- /dev/null +++ b/app/tests/hold-tap/balanced/6-retro-tap/events.patterns @@ -0,0 +1,6 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p +s/.*update_hold_status_for_retro_tap/update_hold_status_for_retro_tap/p +s/.*decide_retro_tap/decide_retro_tap/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot new file mode 100644 index 00000000000..b3298ea826c --- /dev/null +++ b/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot @@ -0,0 +1,21 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +decide_retro_tap: 0 retro tap +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/6-retro-tap/native_posix.keymap b/app/tests/hold-tap/balanced/6-retro-tap/native_posix.keymap new file mode 100644 index 00000000000..706ca540604 --- /dev/null +++ b/app/tests/hold-tap/balanced/6-retro-tap/native_posix.keymap @@ -0,0 +1,45 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + retro-tap; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &none + &kp D &none>; + }; + }; +}; + + +&kscan { + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* retro tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/events.patterns b/app/tests/hold-tap/hold-preferred/6-retro-tap/events.patterns new file mode 100644 index 00000000000..4db21917caf --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/events.patterns @@ -0,0 +1,6 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p +s/.*update_hold_status_for_retro_tap/update_hold_status_for_retro_tap/p +s/.*decide_retro_tap/decide_retro_tap/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot new file mode 100644 index 00000000000..6f1a13e221b --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot @@ -0,0 +1,21 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +decide_retro_tap: 0 retro tap +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix.keymap b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix.keymap new file mode 100644 index 00000000000..314b7334b86 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix.keymap @@ -0,0 +1,45 @@ +#include +#include +#include + +/ { + behaviors { + hp: behavior_hold_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + retro-tap; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &hp LEFT_SHIFT F &none + &kp D &none>; + }; + }; +}; + + +&kscan { + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* retro tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns b/app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns new file mode 100644 index 00000000000..4db21917caf --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns @@ -0,0 +1,6 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p +s/.*update_hold_status_for_retro_tap/update_hold_status_for_retro_tap/p +s/.*decide_retro_tap/decide_retro_tap/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot new file mode 100644 index 00000000000..c905f0a627a --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot @@ -0,0 +1,21 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +decide_retro_tap: 0 retro tap +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap b/app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap new file mode 100644 index 00000000000..1cfec949472 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap @@ -0,0 +1,45 @@ +#include +#include +#include + +/ { + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + retro-tap; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp LEFT_SHIFT F &none + &kp D &none>; + }; + }; +}; + + +&kscan { + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* retro tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 13261140b84..28df0fb8586 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -47,6 +47,18 @@ If you press a tapped hold-tap again within `quick_tap_ms` milliseconds, it will In QMK, unlike ZMK, this functionality is enabled by default, and you turn it off using `TAPPING_FORCE_HOLD`. +#### `retro-tap` + +If retro tap is enabled, the tap behavior is triggered when releasing the hold-tap key if no other key was pressed in the meantime. + +For example, if you press `&mt LEFT_SHIFT A` for a long time and then release it without pressing another key in the meantime, it will output `a`. (Actually, `LEFT_SHIFT` will be pressed when the tapping term expires, which is released just before the `a` is tapped. + +``` +&mt { + retro-tap; +} +``` + #### Home row mods This example configures a hold-tap that works well for homerow mods: From 0c1940bb799ec8d97bb2f80661778a1396e9277e Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Tue, 9 Feb 2021 20:20:54 +0100 Subject: [PATCH 0008/1130] feature(hold-tap): no-hold-flash for retro taps This is an improvement on retro-tap, solving the 'flashing hold' issue users people experience. When the tapping-term expires, the hold key is normally pressed. When retro-tap is enabled, this is undesirable; only an interrupted hold-tap should trigger the hold behavior. This change disables the hold behavior for the 'STATUS_HOLD_TIMER' state when retro-tap is enabled, and makes sure the 'STATUS_HOLD_INTERRUPT' state will be triggered when appropriate. --- app/src/behaviors/behavior_hold_tap.c | 18 +++++++- .../6-retro-tap/keycode_events.snapshot | 4 +- .../6-retro-tap/keycode_events.snapshot | 4 +- .../tap-preferred/6-retro-tap/events.patterns | 6 --- .../6-retro-tap/keycode_events.snapshot | 21 --------- .../6-retro-tap/native_posix.keymap | 45 ------------------- docs/docs/behaviors/hold-tap.md | 2 +- 7 files changed, 19 insertions(+), 81 deletions(-) delete mode 100644 app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 739042ac6bd..376633ad543 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -317,6 +317,10 @@ static inline const char *decision_moment_str(enum decision_moment decision_mome } static int press_binding(struct active_hold_tap *hold_tap) { + if (hold_tap->config->retro_tap && hold_tap->status == STATUS_HOLD_TIMER) { + return 0; + } + struct zmk_behavior_binding_event event = { .position = hold_tap->position, .timestamp = hold_tap->timestamp, @@ -335,6 +339,10 @@ static int press_binding(struct active_hold_tap *hold_tap) { } static int release_binding(struct active_hold_tap *hold_tap) { + if (hold_tap->config->retro_tap && hold_tap->status == STATUS_HOLD_TIMER) { + return 0; + } + struct zmk_behavior_binding_event event = { .position = hold_tap->position, .timestamp = hold_tap->timestamp, @@ -396,12 +404,18 @@ static void decide_retro_tap(struct active_hold_tap *hold_tap) { } } -static void update_hold_status_for_retro_tap(uint32_t position) { +static void update_hold_status_for_retro_tap(uint32_t ignore_position) { for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { struct active_hold_tap *hold_tap = &active_hold_taps[i]; - if (hold_tap->position != position && hold_tap->status == STATUS_HOLD_TIMER) { + if (hold_tap->position == ignore_position || + hold_tap->position == ZMK_BHV_HOLD_TAP_POSITION_NOT_USED || + hold_tap->config->retro_tap == false) { + continue; + } + if (hold_tap->status == STATUS_HOLD_TIMER) { LOG_DBG("Update hold tap %d status to hold-interrupt", hold_tap->position); hold_tap->status = STATUS_HOLD_INTERRUPT; + press_binding(hold_tap); } } } diff --git a/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot index b3298ea826c..628625d72bb 100644 --- a/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot @@ -5,16 +5,14 @@ kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 decide_retro_tap: 0 retro tap kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot index 6f1a13e221b..dba93dba97d 100644 --- a/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot @@ -5,16 +5,14 @@ kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 decide_retro_tap: 0 retro tap kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns b/app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns deleted file mode 100644 index 4db21917caf..00000000000 --- a/app/tests/hold-tap/tap-preferred/6-retro-tap/events.patterns +++ /dev/null @@ -1,6 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p -s/.*update_hold_status_for_retro_tap/update_hold_status_for_retro_tap/p -s/.*decide_retro_tap/decide_retro_tap/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot deleted file mode 100644 index c905f0a627a..00000000000 --- a/app/tests/hold-tap/tap-preferred/6-retro-tap/keycode_events.snapshot +++ /dev/null @@ -1,21 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred decision moment key-up) -kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -ht_binding_released: 0 cleaning up hold-tap -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -decide_retro_tap: 0 retro tap -kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -ht_binding_released: 0 cleaning up hold-tap -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt -kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap b/app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap deleted file mode 100644 index 1cfec949472..00000000000 --- a/app/tests/hold-tap/tap-preferred/6-retro-tap/native_posix.keymap +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include -#include - -/ { - behaviors { - tp: behavior_tap_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping_term_ms = <300>; - bindings = <&kp>, <&kp>; - retro-tap; - }; - }; - - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - - default_layer { - bindings = < - &tp LEFT_SHIFT F &none - &kp D &none>; - }; - }; -}; - - -&kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* retro tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - /* hold */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 28df0fb8586..957744b3e96 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -51,7 +51,7 @@ In QMK, unlike ZMK, this functionality is enabled by default, and you turn it of If retro tap is enabled, the tap behavior is triggered when releasing the hold-tap key if no other key was pressed in the meantime. -For example, if you press `&mt LEFT_SHIFT A` for a long time and then release it without pressing another key in the meantime, it will output `a`. (Actually, `LEFT_SHIFT` will be pressed when the tapping term expires, which is released just before the `a` is tapped. +For example, if you press `&mt LEFT_SHIFT A` and then release it without pressing another key, it will output `a`. ``` &mt { From 32008825fe6893c52ed86c05fc64b780d3088a8f Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 27 Feb 2021 14:53:59 +0100 Subject: [PATCH 0009/1130] fix(behaviors): Add missing hold-tap trigger A hold-tap trigger was missing in the scenario where a hold-tap behavior was queued for a while and it's timer should've run out. --- app/src/behaviors/behavior_hold_tap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 376633ad543..c83305de0ef 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -451,6 +451,8 @@ static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, int32_t tapping_term_ms_left = (hold_tap->timestamp + cfg->tapping_term_ms) - k_uptime_get(); if (tapping_term_ms_left > 0) { k_delayed_work_submit(&hold_tap->work, K_MSEC(tapping_term_ms_left)); + } else { + decide_hold_tap(hold_tap, HT_TIMER_EVENT); } return ZMK_BEHAVIOR_OPAQUE; From 0f9fff755474750df49bda897094f93d3b167faa Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 27 Feb 2021 14:32:42 -0500 Subject: [PATCH 0010/1130] Fix the label for the GPIO kscan driver. --- app/drivers/kscan/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index dc3580d58b8..555b7b98002 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config ZMK_KSCAN_GPIO_DRIVER - bool "Enable GPIO kscan driver to simulate key presses" + bool "Enable GPIO kscan driver to detect key presses" default y select GPIO From 0a7491af877808265830a294935d468b0ada3396 Mon Sep 17 00:00:00 2001 From: Megamannen Date: Wed, 3 Mar 2021 07:03:12 +0100 Subject: [PATCH 0011/1130] Add detailed pin mapping explanation to underglow docs (#709) * Update underglow.md Updated the documentation according to my current understandring of how to pin-mapping works, also split the chapter into a nrf-section and a non-nrf-section since that information isn't applicable to both * Ran prettier and updated pin reference according to suggestion --- docs/docs/features/underglow.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index 3692a6de4bc..a093ecaccaf 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -55,10 +55,16 @@ If you have a shield with RGB underglow, you must add a `boards/` directory with Inside the `boards/` folder, you define a `.overlay` for each different board. For example, the Kyria shield has a `boards/nice_nano.overlay` file that defines the RGB underglow for the `nice_nano` board specifically. -The first step to adding support for underglow is to select you SPI output. With nRF52 boards, you can just use `&spi1` and define the pins you want to use. -For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. +### nRF52-based boards + +With nRF52 boards, you can just use `&spi1` and define the pins you want to use. + +To identify which pin number you need to put in the config you need do to a bit of math. You need the hardware port and run it through a function. +**32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". + +(_P1.13_ would give you _32 \* 1 + 13_ = `<45>` and P0.15 would give you _32 \* 0 + 15_ = `<15>`) -Here's an example of an nRF52 SPI definition: +Here's an example on a definition that uses P0.06: ``` &spi1 { @@ -87,11 +93,15 @@ Here's an example of an nRF52 SPI definition: :::info -If you are configuring SPI for an nRF52840 (or other nRF52) based board, double check that you are using pins that aren't restricted to low frequency I/O. -Ignoring these restrictions may result in poor wireless performance. You can find the list of low frequency I/O pins [here](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fps_nrf52840%2Fpin.html&cp=4_0_0_6_0). +If you are configuring SPI for an nRF52 based board, double check that you are using pins that aren't restricted to low frequency I/O. +Ignoring these restrictions may result in poor wireless performance. You can find the list of low frequency I/O pins for the nRF52840 [here](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fps_nrf52840%2Fpin.html&cp=4_0_0_6_0). ::: +### Other boards + +For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. + Here's another example for a non-nRF52 board on `spi1`: ``` From a7c6e080a7def74d8bdc9c0b326a911bf5ceec4a Mon Sep 17 00:00:00 2001 From: Megamannen Date: Wed, 3 Mar 2021 07:06:29 +0100 Subject: [PATCH 0012/1130] Fix broken link in documentation (encoders) (#707) * Update encoders.md Link to "New Keyboard Shield" didn't work * Update encoders.md Forgot hash-link --- docs/docs/features/encoders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 016107753ea..cf86ea9529e 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -41,4 +41,4 @@ Here, the left encoder is configured to control volume up and down while the rig ## Adding Encoder Support -See the [New Keyboard Shield](../development/new-shield#encoders) documentation for how to add or modify additional encoders to your shield. +See the [New Keyboard Shield](/docs/development/new-shield#encoders) documentation for how to add or modify additional encoders to your shield. From daf10d9741f7f78e2169b8f337b75764ccd402c7 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Mon, 1 Mar 2021 20:49:38 -0500 Subject: [PATCH 0013/1130] feat(docs): add information for testing PRs --- docs/docs/customization.md | 72 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 626a291b919..40c64ea1291 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -3,6 +3,9 @@ title: Customizing ZMK/`zmk-config` folders sidebar_label: Customizing ZMK --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + After verifying you can successfully flash the default firmware, you will probably want to begin customizing your keymap and other keyboard options. [In the initial setup tutorial](user-setup), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works with the main `zmk` firmware repository to build your desired firmware. The main advantage of a discrete configuration folder is ensuring that the @@ -28,6 +31,75 @@ various config settings that can be commented/uncommented to modify how your fir Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. Refer to the [Keymap](/docs/features/keymaps) documentation to learn more. +## Testing features + +Testing features will require you to modify the `west.yml` file. You will need to add a new remote for the pull request you would like to test, +and change the selected remote and revision for the `zmk` project. + + + + +``` +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + projects: + - name: zmk + remote: zmkfirmware + revision: main + import: app/west.yml + self: + path: config +``` + + + + +``` +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: okke-formsma + url-base: https://github.com/okke-formsma + projects: + - name: zmk + remote: okke-formsma + revision: macros + import: app/west.yml + self: + path: config +``` + + + + +``` +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: mcrosson + url-base: https://github.com/mcrosson + projects: + - name: zmk + remote: mcrosson + revision: feat-behavior-sleep + import: app/west.yml + self: + path: config +``` + + + + ## Publishing After making any changes you want, you should commit the changes and then push them to GitHub. That will trigger a new From ac50e741be88b043c47e65c13770ba24384c45ae Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Mon, 1 Mar 2021 21:59:02 -0500 Subject: [PATCH 0014/1130] move the information to its own page --- .../under-development/pr-repo-branch.png | Bin 0 -> 75255 bytes .../under-development/repo-branch.png | Bin 0 -> 63626 bytes .../features/under-development/repo-url.png | Bin 0 -> 78981 bytes docs/docs/customization.md | 72 ------------- docs/docs/features/under-development.md | 100 ++++++++++++++++++ docs/sidebars.js | 1 + 6 files changed, 101 insertions(+), 72 deletions(-) create mode 100644 docs/docs/assets/features/under-development/pr-repo-branch.png create mode 100644 docs/docs/assets/features/under-development/repo-branch.png create mode 100644 docs/docs/assets/features/under-development/repo-url.png create mode 100644 docs/docs/features/under-development.md diff --git a/docs/docs/assets/features/under-development/pr-repo-branch.png b/docs/docs/assets/features/under-development/pr-repo-branch.png new file mode 100644 index 0000000000000000000000000000000000000000..68856d0b59a7923bedfd4becbe3467c092a6102e GIT binary patch literal 75255 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 P00000NkvXXu0mjfS#%D} literal 0 HcmV?d00001 diff --git a/docs/docs/assets/features/under-development/repo-branch.png b/docs/docs/assets/features/under-development/repo-branch.png new file mode 100644 index 0000000000000000000000000000000000000000..741e69a4e947557a243d0b55ea08f5d431bcba58 GIT binary patch literal 63626 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 literal 0 HcmV?d00001 diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 40c64ea1291..626a291b919 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -3,9 +3,6 @@ title: Customizing ZMK/`zmk-config` folders sidebar_label: Customizing ZMK --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - After verifying you can successfully flash the default firmware, you will probably want to begin customizing your keymap and other keyboard options. [In the initial setup tutorial](user-setup), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works with the main `zmk` firmware repository to build your desired firmware. The main advantage of a discrete configuration folder is ensuring that the @@ -31,75 +28,6 @@ various config settings that can be commented/uncommented to modify how your fir Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. Refer to the [Keymap](/docs/features/keymaps) documentation to learn more. -## Testing features - -Testing features will require you to modify the `west.yml` file. You will need to add a new remote for the pull request you would like to test, -and change the selected remote and revision for the `zmk` project. - - - - -``` -manifest: - remotes: - - name: zmkfirmware - url-base: https://github.com/zmkfirmware - projects: - - name: zmk - remote: zmkfirmware - revision: main - import: app/west.yml - self: - path: config -``` - - - - -``` -manifest: - remotes: - - name: zmkfirmware - url-base: https://github.com/zmkfirmware - - name: okke-formsma - url-base: https://github.com/okke-formsma - projects: - - name: zmk - remote: okke-formsma - revision: macros - import: app/west.yml - self: - path: config -``` - - - - -``` -manifest: - remotes: - - name: zmkfirmware - url-base: https://github.com/zmkfirmware - - name: mcrosson - url-base: https://github.com/mcrosson - projects: - - name: zmk - remote: mcrosson - revision: feat-behavior-sleep - import: app/west.yml - self: - path: config -``` - - - - ## Publishing After making any changes you want, you should commit the changes and then push them to GitHub. That will trigger a new diff --git a/docs/docs/features/under-development.md b/docs/docs/features/under-development.md new file mode 100644 index 00000000000..486ea5d91e2 --- /dev/null +++ b/docs/docs/features/under-development.md @@ -0,0 +1,100 @@ +--- +title: Under Development +sidebar_label: Under Development +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +You may find that ZMK does not support a feature or keyboard that you are interesting in using. You may find that someone +has already taken the time to submit the feature you need as a [Pull Request](https://github.com/zmkfirmware/zmk/pulls). If you find the feature you need as a pull request, +this page is for you! + +## Developer Repositories and Branches + +For a developer to submit a pull request to ZMK, they must first clone the original ZMK repository. After they have a copy +of the source code, they may create a feature branch to work within. When they have finished, they will publish the feature +branch and create the pull request. + +### Finding the Repository Page from the Pull Request + +![PR Repository](../assets/features/under-development/pr-repo-branch.png) + +### Finding the Repository URL + +![Repository URL](../assets/features/under-development/repo-url.png) + +### Finding the Repository Branch + +![Repository URL](../assets/features/under-development/repo-branch.png) + +## Testing features + +Testing features will require you to modify the `west.yml` file. You will need to add a new remote for the pull request you +would like to test, and change the selected remote (or repository) and revision (or branch) for the `zmk` project. + +### Examples + + + + +``` +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + projects: + - name: zmk + remote: zmkfirmware + revision: main + import: app/west.yml + self: + path: config +``` + + + + +``` +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: okke-formsma + url-base: https://github.com/okke-formsma + projects: + - name: zmk + remote: okke-formsma + revision: macros + import: app/west.yml + self: + path: config +``` + + + + +``` +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: mcrosson + url-base: https://github.com/mcrosson + projects: + - name: zmk + remote: mcrosson + revision: feat-behavior-sleep + import: app/west.yml + self: + path: config +``` + + + diff --git a/docs/sidebars.js b/docs/sidebars.js index e98b3f8167c..4153b308f13 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -14,6 +14,7 @@ module.exports = { "features/displays", "features/encoders", "features/underglow", + "features/under-development", ], Behaviors: [ "behaviors/key-press", From d956193251739026e1d52f83a45648cb4b6de110 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Sun, 7 Mar 2021 10:47:44 -0500 Subject: [PATCH 0015/1130] change "Under Development" to "Beta Testing" --- .../pr-repo-branch.png | Bin .../repo-branch.png | Bin .../repo-url.png | Bin .../{under-development.md => beta-testing.md} | 12 ++++++------ docs/sidebars.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename docs/docs/assets/features/{under-development => beta-testing}/pr-repo-branch.png (100%) rename docs/docs/assets/features/{under-development => beta-testing}/repo-branch.png (100%) rename docs/docs/assets/features/{under-development => beta-testing}/repo-url.png (100%) rename docs/docs/features/{under-development.md => beta-testing.md} (84%) diff --git a/docs/docs/assets/features/under-development/pr-repo-branch.png b/docs/docs/assets/features/beta-testing/pr-repo-branch.png similarity index 100% rename from docs/docs/assets/features/under-development/pr-repo-branch.png rename to docs/docs/assets/features/beta-testing/pr-repo-branch.png diff --git a/docs/docs/assets/features/under-development/repo-branch.png b/docs/docs/assets/features/beta-testing/repo-branch.png similarity index 100% rename from docs/docs/assets/features/under-development/repo-branch.png rename to docs/docs/assets/features/beta-testing/repo-branch.png diff --git a/docs/docs/assets/features/under-development/repo-url.png b/docs/docs/assets/features/beta-testing/repo-url.png similarity index 100% rename from docs/docs/assets/features/under-development/repo-url.png rename to docs/docs/assets/features/beta-testing/repo-url.png diff --git a/docs/docs/features/under-development.md b/docs/docs/features/beta-testing.md similarity index 84% rename from docs/docs/features/under-development.md rename to docs/docs/features/beta-testing.md index 486ea5d91e2..4328ccbf68d 100644 --- a/docs/docs/features/under-development.md +++ b/docs/docs/features/beta-testing.md @@ -1,6 +1,6 @@ --- -title: Under Development -sidebar_label: Under Development +title: Beta Testing +sidebar_label: Beta Testing --- import Tabs from '@theme/Tabs'; @@ -18,20 +18,20 @@ branch and create the pull request. ### Finding the Repository Page from the Pull Request -![PR Repository](../assets/features/under-development/pr-repo-branch.png) +![PR Repository](../assets/features/beta-testing/pr-repo-branch.png) ### Finding the Repository URL -![Repository URL](../assets/features/under-development/repo-url.png) +![Repository URL](../assets/features/beta-testing/repo-url.png) ### Finding the Repository Branch -![Repository URL](../assets/features/under-development/repo-branch.png) +![Repository URL](../assets/features/beta-testing/repo-branch.png) ## Testing features Testing features will require you to modify the `west.yml` file. You will need to add a new remote for the pull request you -would like to test, and change the selected remote (or repository) and revision (or branch) for the `zmk` project. +would like to test, and change the selected remote and revision (or branch) for the `zmk` project. ### Examples diff --git a/docs/sidebars.js b/docs/sidebars.js index 4153b308f13..6761b19b941 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -14,7 +14,7 @@ module.exports = { "features/displays", "features/encoders", "features/underglow", - "features/under-development", + "features/beta-testing", ], Behaviors: [ "behaviors/key-press", From df4ec51f964f5647bb46fb2b721370064073bb54 Mon Sep 17 00:00:00 2001 From: JP Bonn Date: Thu, 4 Mar 2021 18:50:32 -0700 Subject: [PATCH 0016/1130] only send zmk_battery_state_changed on change --- .../zmk/events/battery_state_changed.h | 2 ++ app/src/battery.c | 24 +++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/include/zmk/events/battery_state_changed.h b/app/include/zmk/events/battery_state_changed.h index 6a003d8dd7d..c03f6472baa 100644 --- a/app/include/zmk/events/battery_state_changed.h +++ b/app/include/zmk/events/battery_state_changed.h @@ -14,4 +14,6 @@ struct zmk_battery_state_changed { uint8_t state_of_charge; }; +int32_t zmk_battery_state_of_charge(); + ZMK_EVENT_DECLARE(zmk_battery_state_changed); \ No newline at end of file diff --git a/app/src/battery.c b/app/src/battery.c index 5a7c57b0c80..8caa024eaed 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -19,6 +19,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); const struct device *battery; +static int32_t last_state_of_charge = 0; + +int32_t zmk_battery_state_of_charge() { return last_state_of_charge; } + static int zmk_battery_update(const struct device *battery) { struct sensor_value state_of_charge; @@ -36,17 +40,23 @@ static int zmk_battery_update(const struct device *battery) { return rc; } - LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1); + if (last_state_of_charge != state_of_charge.val1) { + LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1); - rc = bt_bas_set_battery_level(state_of_charge.val1); + rc = bt_bas_set_battery_level(state_of_charge.val1); - if (rc != 0) { - LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc); - return rc; + if (rc != 0) { + LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc); + return rc; + } + + rc = ZMK_EVENT_RAISE(new_zmk_battery_state_changed( + (struct zmk_battery_state_changed){.state_of_charge = state_of_charge.val1})); + + last_state_of_charge = state_of_charge.val1; } - return ZMK_EVENT_RAISE(new_zmk_battery_state_changed( - (struct zmk_battery_state_changed){.state_of_charge = state_of_charge.val1})); + return rc; } static void zmk_battery_work(struct k_work *work) { From b8a8ecd59daa9575ff027bd3afe379d04cd82d66 Mon Sep 17 00:00:00 2001 From: JP Bonn Date: Sat, 6 Mar 2021 21:32:19 -0700 Subject: [PATCH 0017/1130] fixed order of setting state_of_charge --- app/src/battery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/battery.c b/app/src/battery.c index 8caa024eaed..a99660c01be 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -41,6 +41,8 @@ static int zmk_battery_update(const struct device *battery) { } if (last_state_of_charge != state_of_charge.val1) { + last_state_of_charge = state_of_charge.val1; + LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1); rc = bt_bas_set_battery_level(state_of_charge.val1); @@ -52,8 +54,6 @@ static int zmk_battery_update(const struct device *battery) { rc = ZMK_EVENT_RAISE(new_zmk_battery_state_changed( (struct zmk_battery_state_changed){.state_of_charge = state_of_charge.val1})); - - last_state_of_charge = state_of_charge.val1; } return rc; From c643f1cd961307490a7edee29e4a68da85967a42 Mon Sep 17 00:00:00 2001 From: JP Bonn Date: Sat, 6 Mar 2021 22:45:51 -0700 Subject: [PATCH 0018/1130] added battery.h, last_state_of_charge to uint8_t --- app/include/zmk/battery.h | 9 +++++++++ app/include/zmk/events/battery_state_changed.h | 2 -- app/src/battery.c | 11 ++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 app/include/zmk/battery.h diff --git a/app/include/zmk/battery.h b/app/include/zmk/battery.h new file mode 100644 index 00000000000..f62219c1814 --- /dev/null +++ b/app/include/zmk/battery.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +uint8_t zmk_battery_state_of_charge(); diff --git a/app/include/zmk/events/battery_state_changed.h b/app/include/zmk/events/battery_state_changed.h index c03f6472baa..6a003d8dd7d 100644 --- a/app/include/zmk/events/battery_state_changed.h +++ b/app/include/zmk/events/battery_state_changed.h @@ -14,6 +14,4 @@ struct zmk_battery_state_changed { uint8_t state_of_charge; }; -int32_t zmk_battery_state_of_charge(); - ZMK_EVENT_DECLARE(zmk_battery_state_changed); \ No newline at end of file diff --git a/app/src/battery.c b/app/src/battery.c index a99660c01be..c63008e6444 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -15,13 +15,14 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include +#include #include const struct device *battery; -static int32_t last_state_of_charge = 0; +static uint8_t last_state_of_charge = 0; -int32_t zmk_battery_state_of_charge() { return last_state_of_charge; } +uint8_t zmk_battery_state_of_charge() { return last_state_of_charge; } static int zmk_battery_update(const struct device *battery) { struct sensor_value state_of_charge; @@ -43,9 +44,9 @@ static int zmk_battery_update(const struct device *battery) { if (last_state_of_charge != state_of_charge.val1) { last_state_of_charge = state_of_charge.val1; - LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1); + LOG_DBG("Setting BAS GATT battery level to %d.", last_state_of_charge); - rc = bt_bas_set_battery_level(state_of_charge.val1); + rc = bt_bas_set_battery_level(last_state_of_charge); if (rc != 0) { LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc); @@ -53,7 +54,7 @@ static int zmk_battery_update(const struct device *battery) { } rc = ZMK_EVENT_RAISE(new_zmk_battery_state_changed( - (struct zmk_battery_state_changed){.state_of_charge = state_of_charge.val1})); + (struct zmk_battery_state_changed){.state_of_charge = last_state_of_charge})); } return rc; From c01243d1c6e0c84556f248fbc1d83496222209c3 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 27 Feb 2021 22:22:55 +0100 Subject: [PATCH 0019/1130] fix(logging): remove unnecessary newline --- .../sensor/battery_voltage_divider/battery_voltage_divider.c | 2 +- app/src/kscan.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c b/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c index 4939461b383..c56dab6bcc0 100644 --- a/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c +++ b/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c @@ -93,7 +93,7 @@ static int bvd_sample_fetch(const struct device *dev, enum sensor_channel chan) &val); uint16_t millivolts = val * (uint64_t)drv_cfg->full_ohm / drv_cfg->output_ohm; - LOG_DBG("ADC raw %d ~ %d mV => %d mV\n", drv_data->adc_raw, val, millivolts); + LOG_DBG("ADC raw %d ~ %d mV => %d mV", drv_data->adc_raw, val, millivolts); uint8_t percent = lithium_ion_mv_to_pct(millivolts); LOG_DBG("Percent: %d", percent); diff --git a/app/src/kscan.c b/app/src/kscan.c index 0c128b2ddff..3c9c201e6b0 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -47,7 +47,7 @@ void zmk_kscan_process_msgq(struct k_work *item) { while (k_msgq_get(&zmk_kscan_msgq, &ev, K_NO_WAIT) == 0) { bool pressed = (ev.state == ZMK_KSCAN_EVENT_STATE_PRESSED); uint32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); - LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s\n", ev.row, ev.column, position, + LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, (pressed ? "true" : "false")); ZMK_EVENT_RAISE(new_zmk_position_state_changed((struct zmk_position_state_changed){ .state = pressed, .position = position, .timestamp = k_uptime_get()})); From 8ebe0cd0c88a8ffbb323784f03229889cecc4b52 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 27 Feb 2021 22:25:07 +0100 Subject: [PATCH 0020/1130] refactor(core): make the event manager a bit easier to read --- app/src/event_manager.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 0399ca80364..eef5d839542 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -22,24 +22,25 @@ int zmk_event_manager_handle_from(zmk_event_t *event, uint8_t start_index) { uint8_t len = __event_subscriptions_end - __event_subscriptions_start; for (int i = start_index; i < len; i++) { struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; - if (ev_sub->event_type == event->event) { - ret = ev_sub->listener->callback(event); - if (ret < 0) { - LOG_DBG("Listener returned an error: %d", ret); - goto release; - } else if (ret > 0) { - switch (ret) { - case ZMK_EV_EVENT_HANDLED: - LOG_DBG("Listener handled the event"); - ret = 0; - goto release; - case ZMK_EV_EVENT_CAPTURED: - LOG_DBG("Listener captured the event"); - event->last_listener_index = i; - // Listeners are expected to free events they capture - return 0; - } - } + if (ev_sub->event_type != event->event) { + continue; + } + ret = ev_sub->listener->callback(event); + switch (ret) { + case ZMK_EV_EVENT_BUBBLE: + continue; + case ZMK_EV_EVENT_HANDLED: + LOG_DBG("Listener handled the event"); + ret = 0; + goto release; + case ZMK_EV_EVENT_CAPTURED: + LOG_DBG("Listener captured the event"); + event->last_listener_index = i; + // Listeners are expected to free events they capture + return 0; + default: + LOG_DBG("Listener returned an error: %d", ret); + goto release; } } From 0df71100581d040178bd0fe8ec0382d84dc59a40 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 27 Feb 2021 22:34:15 +0100 Subject: [PATCH 0021/1130] fix(combos): Fix stuck keys when pressing long combos. To properly retrigger hold-taps when a combo is not activated, some position down events are reraised instead of released. The corresponding position up events were never reraised, causing a potential stuck key. --- app/src/combo.c | 54 +++++++++++-------- .../combos-and-holdtaps-0/events.patterns | 1 - .../combos-and-holdtaps-1/events.patterns | 3 +- .../combos-and-holdtaps-2/events.patterns | 3 +- .../combo/layer-filter-0/events.patterns | 3 +- .../combo/layer-filter-1/events.patterns | 3 +- .../overlapping-combos-0/events.patterns | 3 +- .../overlapping-combos-1/events.patterns | 3 +- .../overlapping-combos-2/events.patterns | 3 +- .../overlapping-combos-3/events.patterns | 3 +- .../press-release-long-combo/events.patterns | 1 + .../keycode_events.snapshot | 4 ++ .../native_posix.keymap | 35 ++++++++++++ .../events.patterns | 3 +- .../events.patterns | 1 - .../events.patterns | 3 +- 16 files changed, 81 insertions(+), 45 deletions(-) create mode 100644 app/tests/combo/press-release-long-combo/events.patterns create mode 100644 app/tests/combo/press-release-long-combo/keycode_events.snapshot create mode 100644 app/tests/combo/press-release-long-combo/native_posix.keymap diff --git a/app/src/combo.c b/app/src/combo.c index b50a0f6198f..72535b2991a 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -192,7 +192,7 @@ static inline bool candidate_is_completely_pressed(struct combo_cfg *candidate) return pressed_keys[candidate->key_position_len - 1] != NULL; } -static void cleanup(); +static int cleanup(); static int filter_timed_out_candidates(int64_t timestamp) { int num_candidates = 0; @@ -224,7 +224,7 @@ static int clear_candidates() { } static int capture_pressed_key(const zmk_event_t *ev) { - for (int i = 0; i < CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY; i++) { + for (int i = 0; i < CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; i++) { if (pressed_keys[i] != NULL) { continue; } @@ -236,23 +236,25 @@ static int capture_pressed_key(const zmk_event_t *ev) { const struct zmk_listener zmk_listener_combo; -static void release_pressed_keys() { - // release the first key that was pressed - if (pressed_keys[0] == NULL) { - return; - } - ZMK_EVENT_RELEASE(pressed_keys[0]) - pressed_keys[0] = NULL; - - // reprocess events (see tests/combo/fully-overlapping-combos-3 for why this is needed) - for (int i = 1; i < CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY; i++) { +static int release_pressed_keys() { + for (int i = 0; i < CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; i++) { + const zmk_event_t *captured_event = pressed_keys[i]; if (pressed_keys[i] == NULL) { - return; + return i; } - const zmk_event_t *captured_event = pressed_keys[i]; pressed_keys[i] = NULL; - ZMK_EVENT_RAISE(captured_event); + if (i == 0) { + LOG_DBG("combo: releasing position event %d", + as_zmk_position_state_changed(captured_event)->position); + ZMK_EVENT_RELEASE(captured_event) + } else { + // reprocess events (see tests/combo/fully-overlapping-combos-3 for why this is needed) + LOG_DBG("combo: reraising position event %d", + as_zmk_position_state_changed(captured_event)->position); + ZMK_EVENT_RAISE(captured_event); + } } + return CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; } static inline int press_combo_behavior(struct combo_cfg *combo, int32_t timestamp) { @@ -360,14 +362,14 @@ static bool release_combo_key(int32_t position, int64_t timestamp) { return false; } -static void cleanup() { +static int cleanup() { k_delayed_work_cancel(&timeout_task); clear_candidates(); if (fully_pressed_combo != NULL) { activate_combo(fully_pressed_combo); fully_pressed_combo = NULL; } - release_pressed_keys(); + return release_pressed_keys(); } static void update_timeout_task() { @@ -399,6 +401,7 @@ static int position_state_down(const zmk_event_t *ev, struct zmk_position_state_ update_timeout_task(); struct combo_cfg *candidate_combo = candidates[0].combo; + LOG_DBG("combo: capturing position event %d", data->position); int ret = capture_pressed_key(ev); switch (num_candidates) { case 0: @@ -418,13 +421,18 @@ static int position_state_down(const zmk_event_t *ev, struct zmk_position_state_ } } -static int position_state_up(struct zmk_position_state_changed *ev) { - cleanup(); - if (release_combo_key(ev->position, ev->timestamp)) { +static int position_state_up(const zmk_event_t *ev, struct zmk_position_state_changed *data) { + int released_keys = cleanup(); + if (release_combo_key(data->position, data->timestamp)) { return ZMK_EV_EVENT_HANDLED; - } else { - return 0; } + if (released_keys > 1) { + // The second and further key down events are re-raised. To preserve + // correct order for e.g. hold-taps, reraise the key up event too. + ZMK_EVENT_RAISE(ev); + return ZMK_EV_EVENT_CAPTURED; + } + return 0; } static void combo_timeout_handler(struct k_work *item) { @@ -447,7 +455,7 @@ static int position_state_changed_listener(const zmk_event_t *ev) { if (data->state) { // keydown return position_state_down(ev, data); } else { // keyup - return position_state_up(data); + return position_state_up(ev, data); } } diff --git a/app/tests/combo/combos-and-holdtaps-0/events.patterns b/app/tests/combo/combos-and-holdtaps-0/events.patterns index b90d7863ee4..b1342af4d97 100644 --- a/app/tests/combo/combos-and-holdtaps-0/events.patterns +++ b/app/tests/combo/combos-and-holdtaps-0/events.patterns @@ -1,2 +1 @@ s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-1/events.patterns b/app/tests/combo/combos-and-holdtaps-1/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/combos-and-holdtaps-1/events.patterns +++ b/app/tests/combo/combos-and-holdtaps-1/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-2/events.patterns b/app/tests/combo/combos-and-holdtaps-2/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/combos-and-holdtaps-2/events.patterns +++ b/app/tests/combo/combos-and-holdtaps-2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/layer-filter-0/events.patterns b/app/tests/combo/layer-filter-0/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/layer-filter-0/events.patterns +++ b/app/tests/combo/layer-filter-0/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/layer-filter-1/events.patterns b/app/tests/combo/layer-filter-1/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/layer-filter-1/events.patterns +++ b/app/tests/combo/layer-filter-1/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-0/events.patterns b/app/tests/combo/overlapping-combos-0/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/overlapping-combos-0/events.patterns +++ b/app/tests/combo/overlapping-combos-0/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-1/events.patterns b/app/tests/combo/overlapping-combos-1/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/overlapping-combos-1/events.patterns +++ b/app/tests/combo/overlapping-combos-1/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-2/events.patterns b/app/tests/combo/overlapping-combos-2/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/overlapping-combos-2/events.patterns +++ b/app/tests/combo/overlapping-combos-2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-3/events.patterns b/app/tests/combo/overlapping-combos-3/events.patterns index b90d7863ee4..833100f6ac4 100644 --- a/app/tests/combo/overlapping-combos-3/events.patterns +++ b/app/tests/combo/overlapping-combos-3/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/press-release-long-combo/events.patterns b/app/tests/combo/press-release-long-combo/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/combo/press-release-long-combo/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/combo/press-release-long-combo/keycode_events.snapshot b/app/tests/combo/press-release-long-combo/keycode_events.snapshot new file mode 100644 index 00000000000..e7c0cb124ac --- /dev/null +++ b/app/tests/combo/press-release-long-combo/keycode_events.snapshot @@ -0,0 +1,4 @@ +pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/press-release-long-combo/native_posix.keymap b/app/tests/combo/press-release-long-combo/native_posix.keymap new file mode 100644 index 00000000000..68736d8fbcc --- /dev/null +++ b/app/tests/combo/press-release-long-combo/native_posix.keymap @@ -0,0 +1,35 @@ +#include +#include +#include + +/ { + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2 3>; + bindings = <&kp Z>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,1,100) + >; +}; \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release1-release2/events.patterns b/app/tests/combo/press1-press2-release1-release2/events.patterns index 5f3e4cf73fb..833100f6ac4 100644 --- a/app/tests/combo/press1-press2-release1-release2/events.patterns +++ b/app/tests/combo/press1-press2-release1-release2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo/combo/p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release2-release1/events.patterns b/app/tests/combo/press1-press2-release2-release1/events.patterns index b54b66b67df..b1342af4d97 100644 --- a/app/tests/combo/press1-press2-release2-release1/events.patterns +++ b/app/tests/combo/press1-press2-release2-release1/events.patterns @@ -1,2 +1 @@ s/.*hid_listener_keycode_//p -s/.*combo/combo/p diff --git a/app/tests/combo/press1-release1-press2-release2/events.patterns b/app/tests/combo/press1-release1-press2-release2/events.patterns index 5f3e4cf73fb..833100f6ac4 100644 --- a/app/tests/combo/press1-release1-press2-release2/events.patterns +++ b/app/tests/combo/press1-release1-press2-release2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo/combo/p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file From 4ef11ac4aa5185994db19ef3f69a8c54c70fb06c Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Tue, 16 Feb 2021 14:34:09 -0600 Subject: [PATCH 0022/1130] feat(docs): Add power profiler --- docs/docusaurus.config.js | 5 + docs/src/components/custom-board-form.js | 100 ++++++++ docs/src/components/power-estimate.js | 266 ++++++++++++++++++++ docs/src/css/power-estimate.css | 81 +++++++ docs/src/css/power-profiler.css | 195 +++++++++++++++ docs/src/data/power.js | 78 ++++++ docs/src/pages/power-profiler.js | 297 +++++++++++++++++++++++ docs/src/utils/hooks.js | 23 ++ 8 files changed, 1045 insertions(+) create mode 100644 docs/src/components/custom-board-form.js create mode 100644 docs/src/components/power-estimate.js create mode 100644 docs/src/css/power-estimate.css create mode 100644 docs/src/css/power-profiler.css create mode 100644 docs/src/data/power.js create mode 100644 docs/src/pages/power-profiler.js create mode 100644 docs/src/utils/hooks.js diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index f22610a0119..ab7ec12da65 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -29,6 +29,11 @@ module.exports = { position: "left", }, { to: "blog", label: "Blog", position: "left" }, + { + to: "power-profiler", + label: "Power Profiler", + position: "left", + }, { href: "https://github.com/zmkfirmware/zmk", label: "GitHub", diff --git a/docs/src/components/custom-board-form.js b/docs/src/components/custom-board-form.js new file mode 100644 index 00000000000..0279f6b1c4c --- /dev/null +++ b/docs/src/components/custom-board-form.js @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +import React from "react"; +import PropTypes from "prop-types"; + +function CustomBoardForm({ + bindPsuType, + bindOutputV, + bindEfficiency, + bindQuiescentMicroA, + bindOtherQuiescentMicroA, +}) { + return ( +
+

Custom Board

+
+
+
+ + +
+
+
+
+ + + {parseFloat(bindOutputV.value).toFixed(1)}V +
+ {bindPsuType.value === "SWITCHING" && ( +
+ + + {Math.round(bindEfficiency.value * 100)}% +
+ )} +
+
+
+ +
+ + µA +
+
+
+ +
+ + µA +
+
+
+
+
+ ); +} + +CustomBoardForm.propTypes = { + bindPsuType: PropTypes.Object, + bindOutputV: PropTypes.Object, + bindEfficiency: PropTypes.Object, + bindQuiescentMicroA: PropTypes.Object, + bindOtherQuiescentMicroA: PropTypes.Object, +}; + +export default CustomBoardForm; diff --git a/docs/src/components/power-estimate.js b/docs/src/components/power-estimate.js new file mode 100644 index 00000000000..2619862682a --- /dev/null +++ b/docs/src/components/power-estimate.js @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +import React from "react"; +import PropTypes from "prop-types"; +import { displayPower, underglowPower, zmkBase } from "../data/power"; +import "../css/power-estimate.css"; + +// Average monthly discharge percent +const lithiumIonMonthlyDischargePercent = 5; +// Average voltage of a lithium ion battery based of discharge graphs +const lithiumIonAverageVoltage = 3.8; +// Average discharge efficiency of li-ion https://en.wikipedia.org/wiki/Lithium-ion_battery +const lithiumIonDischargeEfficiency = 0.85; +// Range of the discharge efficiency +const lithiumIonDischargeEfficiencyRange = 0.05; + +// Proportion of time spent typing (keys being pressed down and scanning). Estimated to 2%. +const timeSpentTyping = 0.02; + +// Nordic power profiler kit accuracy +const measurementAccuracy = 0.2; + +const batVolt = lithiumIonAverageVoltage; + +const palette = [ + "#bbdefb", + "#90caf9", + "#64b5f6", + "#42a5f5", + "#2196f3", + "#1e88e5", + "#1976d2", +]; + +function formatUsage(microWatts) { + if (microWatts > 1000) { + return (microWatts / 1000).toFixed(1) + "mW"; + } + + return Math.round(microWatts) + "µW"; +} + +function voltageEquivalentCalc(powerSupply) { + if (powerSupply.type === "LDO") { + return batVolt; + } else if (powerSupply.type === "SWITCHING") { + return powerSupply.outputVoltage / powerSupply.efficiency; + } +} + +function formatMinutes(minutes, precision, floor) { + let message = ""; + let count = 0; + + let units = ["year", "month", "week", "day", "hour", "minute"]; + let multiples = [60 * 24 * 365, 60 * 24 * 30, 60 * 24 * 7, 60 * 24, 60, 1]; + + for (let i = 0; i < units.length; i++) { + if (minutes >= multiples[i]) { + const timeCount = floor + ? Math.floor(minutes / multiples[i]) + : Math.ceil(minutes / multiples[i]); + minutes -= timeCount * multiples[i]; + count++; + message += + timeCount + (timeCount > 1 ? ` ${units[i]}s ` : ` ${units[i]} `); + } + + if (count == precision) return message; + } + + return message || "0 minutes"; +} + +function PowerEstimate({ + board, + splitType, + batteryMilliAh, + usage, + underglow, + display, +}) { + if (!board || !board.powerSupply.type || !batteryMilliAh) { + return ( +
+

+ {splitType !== "standalone" ? splitType + ": " : " "}... +

+
+
+
+
+ ); + } + + const powerUsage = []; + let totalUsage = 0; + + const voltageEquivalent = voltageEquivalentCalc(board.powerSupply); + + // Lithium ion self discharge + const lithiumMonthlyDischargemAh = + parseInt(batteryMilliAh) * (lithiumIonMonthlyDischargePercent / 100); + const lithiumDischargeMicroA = (lithiumMonthlyDischargemAh * 1000) / 30 / 24; + const lithiumDischargeMicroW = lithiumDischargeMicroA * batVolt; + + totalUsage += lithiumDischargeMicroW; + powerUsage.push({ + title: "Battery Self Discharge", + usage: lithiumDischargeMicroW, + }); + + // Quiescent current + const quiescentMicroATotal = + parseInt(board.powerSupply.quiescentMicroA) + + parseInt(board.otherQuiescentMicroA); + const quiescentMicroW = quiescentMicroATotal * voltageEquivalent; + + totalUsage += quiescentMicroW; + powerUsage.push({ + title: "Board Quiescent Usage", + usage: quiescentMicroW, + }); + + // ZMK overall usage + const zmkMicroA = + zmkBase[splitType].idle + + (splitType !== "peripheral" ? zmkBase.hostConnection * usage.bondedQty : 0); + + const zmkMicroW = zmkMicroA * voltageEquivalent; + const zmkUsage = zmkMicroW * (1 - usage.percentAsleep); + + totalUsage += zmkUsage; + powerUsage.push({ + title: "ZMK Base Usage", + usage: zmkUsage, + }); + + // ZMK typing usage + const zmkTypingMicroA = zmkBase[splitType].typing * timeSpentTyping; + + const zmkTypingMicroW = zmkTypingMicroA * voltageEquivalent; + const zmkTypingUsage = zmkTypingMicroW * (1 - usage.percentAsleep); + + totalUsage += zmkTypingUsage; + powerUsage.push({ + title: "ZMK Typing Usage", + usage: zmkTypingUsage, + }); + + if (underglow.glowEnabled) { + const underglowAverageLedMicroA = + underglow.glowBrightness * + (underglowPower.ledOn - underglowPower.ledOff) + + underglowPower.ledOff; + + const underglowMicroA = + underglowPower.firmware + + underglow.glowQuantity * underglowAverageLedMicroA; + + const underglowMicroW = underglowMicroA * voltageEquivalent; + + const underglowUsage = underglowMicroW * (1 - usage.percentAsleep); + + totalUsage += underglowUsage; + powerUsage.push({ + title: "RGB Underglow", + usage: underglowUsage, + }); + } + + if (display.displayEnabled && display.displayType) { + const { activePercent, active, sleep } = displayPower[display.displayType]; + + const displayMicroA = active * activePercent + sleep * (1 - activePercent); + const displayMicroW = displayMicroA * voltageEquivalent; + const displayUsage = displayMicroW * (1 - usage.percentAsleep); + + totalUsage += displayUsage; + powerUsage.push({ + title: "Display", + usage: displayUsage, + }); + } + + // Calculate the average minutes of use + const estimatedAvgEffectiveMicroWH = + batteryMilliAh * batVolt * lithiumIonDischargeEfficiency * 1000; + + const estimatedAvgMinutes = Math.round( + (estimatedAvgEffectiveMicroWH / totalUsage) * 60 + ); + + // Calculate worst case for battery life + const worstLithiumIonDischargeEfficiency = + lithiumIonDischargeEfficiency - lithiumIonDischargeEfficiencyRange; + + const estimatedWorstEffectiveMicroWH = + batteryMilliAh * batVolt * worstLithiumIonDischargeEfficiency * 1000; + + const highestTotalUsage = totalUsage * (1 + measurementAccuracy); + + const estimatedWorstMinutes = Math.round( + (estimatedWorstEffectiveMicroWH / highestTotalUsage) * 60 + ); + + // Calculate range (+-) of minutes using average - worst + const estimatedRange = estimatedAvgMinutes - estimatedWorstMinutes; + + return ( +
+

+ {splitType !== "standalone" ? splitType + ": " : " "} + {formatMinutes(estimatedAvgMinutes, 2, true)} (± + {formatMinutes(estimatedRange, 1, false).trim()}) +

+
+ {powerUsage.map((p, i) => ( +
1 ? " rightSection" : "") + } + style={{ + width: (p.usage / totalUsage) * 100 + "%", + background: palette[i], + }} + > +
+
+
+ {p.title} - {Math.round((p.usage / totalUsage) * 100)}% +
+
+ ~{formatUsage(p.usage)} estimated avg. consumption +
+
+
+
+ ))} +
+
+ ); +} + +PowerEstimate.propTypes = { + board: PropTypes.Object, + splitType: PropTypes.string, + batteryMilliAh: PropTypes.number, + usage: PropTypes.Object, + underglow: PropTypes.Object, + display: PropTypes.Object, +}; + +export default PowerEstimate; diff --git a/docs/src/css/power-estimate.css b/docs/src/css/power-estimate.css new file mode 100644 index 00000000000..e876ec28e71 --- /dev/null +++ b/docs/src/css/power-estimate.css @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +.powerEstimate { + margin: 20px 0; +} + +.powerEstimate > h3 > span { + text-transform: capitalize; +} + +.powerEstimateBar { + height: 64px; + width: 100%; + box-shadow: rgba(0, 0, 0, 0.03) 0px 10px 20px 0px, + rgba(0, 0, 0, 0.1) 0px 1px 4px 0px; + border-radius: 64px; + display: flex; + justify-content: flex-start; + overflow: hidden; +} + +.powerEstimateBarSection { + transition: all 0.2s ease; + flex-grow: 1; +} + +.powerEstimateBarSection.rightSection { + display: flex; + justify-content: flex-end; +} + +.powerEstimateTooltipWrap { + position: absolute; + visibility: hidden; + opacity: 0; + transform: translateY(calc(-100% - 8px)); + transition: opacity 0.2s ease; +} + +.powerEstimateBarSection:hover .powerEstimateTooltipWrap { + visibility: visible; + opacity: 1; +} + +.powerEstimateTooltip { + display: block; + position: relative; + box-shadow: var(--ifm-global-shadow-tl); + width: 260px; + padding: 10px; + border-radius: 4px; + background: var(--ifm-background-surface-color); + transform: translateX(-15px); +} + +.rightSection .powerEstimateTooltip { + transform: translateX(15px); +} + +.powerEstimateTooltip:after { + content: ""; + position: absolute; + top: 100%; + left: 27px; + margin-left: -8px; + width: 0; + height: 0; + border-top: 8px solid var(--ifm-background-surface-color); + border-right: 8px solid transparent; + border-left: 8px solid transparent; +} + +.rightSection .powerEstimateTooltip:after { + left: unset; + right: 27px; + margin-right: -8px; +} diff --git a/docs/src/css/power-profiler.css b/docs/src/css/power-profiler.css new file mode 100644 index 00000000000..94c4a5dd0b6 --- /dev/null +++ b/docs/src/css/power-profiler.css @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +.profilerSection { + margin: 10px 0; + padding: 10px 20px; + background: var(--ifm-background-surface-color); + border-radius: 4px; + box-shadow: rgba(0, 0, 0, 0.03) 0px 10px 20px 0px, + rgba(0, 0, 0, 0.1) 0px 1px 4px 0px; +} + +.profilerInput { + margin-bottom: 12px; +} + +.profilerInput label { + display: block; +} + +.profilerDisclaimer { + padding: 20px 0; + font-size: 14px; +} + +span[tooltip] { + position: relative; +} + +span[tooltip]::before { + content: attr(tooltip); + font-size: 13px; + padding: 5px 10px; + position: absolute; + width: 220px; + border-radius: 4px; + background: var(--ifm-background-surface-color); + opacity: 0; + visibility: hidden; + box-shadow: rgba(0, 0, 0, 0.03) 0px 10px 20px 0px, + rgba(0, 0, 0, 0.1) 0px 1px 4px 0px; + transition: opacity 0.2s ease; + transform: translate(-50%, -100%); + left: 50%; +} + +span[tooltip]::after { + content: ""; + position: absolute; + border-top: 8px solid var(--ifm-background-surface-color); + border-right: 8px solid transparent; + border-left: 8px solid transparent; + width: 0; + height: 0; + opacity: 0; + visibility: hidden; + transition: opacity 0.2s ease; + transform: translateX(-50%); + left: 50%; +} + +span[tooltip]:hover::before { + opacity: 1; + visibility: visible; +} + +span[tooltip]:hover::after { + opacity: 1; + visibility: visible; +} + +input[type="checkbox"].toggleInput { + display: none; +} + +input[type="checkbox"] + .toggle { + margin: 6px 2px; + height: 20px; + width: 48px; + background: rgba(0, 0, 0, 0.5); + border-radius: 20px; + transition: all 0.2s ease; + user-select: none; +} + +input[type="checkbox"] + .toggle > .toggleThumb { + height: 16px; + border-radius: 20px; + transform: translate(2px, 2px); + width: 16px; + background: var(--ifm-color-white); + box-shadow: var(--ifm-global-shadow-lw); + transition: all 0.2s ease; +} + +input[type="checkbox"]:checked + .toggle { + background: var(--ifm-color-primary); +} + +input[type="checkbox"]:checked + .toggle > .toggleThumb { + transform: translate(30px, 2px); +} + +select { + border: solid 1px rgba(0, 0, 0, 0.5); + border-radius: 4px; + display: flex; + height: 34px; + width: 200px; + + background: inherit; + color: inherit; + font-size: inherit; + line-height: inherit; + margin: 0; + padding: 3px 5px; + outline: none; +} + +select > option { + background: var(--ifm-background-surface-color); +} + +.inputBox { + border: solid 1px rgba(0, 0, 0, 0.5); + border-radius: 4px; + display: flex; + width: 200px; +} + +.inputBox > input { + background: inherit; + color: inherit; + font-size: inherit; + line-height: inherit; + margin: 0; + padding: 3px 10px; + border: none; + width: 100%; + min-width: 0; + text-align: right; + outline: none; +} + +.inputBox > span { + background: rgba(0, 0, 0, 0.05); + border-left: solid 1px rgba(0, 0, 0, 0.5); + padding: 3px 10px; +} + +/* Chrome, Safari, Edge, Opera */ +.inputBox > input::-webkit-outer-spin-button, +.inputBox > input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +.inputBox > input[type="number"] { + -moz-appearance: textfield; +} + +.disclaimerHolder { + position: absolute; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + z-index: 99; + background: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; +} + +.disclaimer { + padding: 20px 20px; + background: var(--ifm-background-surface-color); + border-radius: 4px; + box-shadow: rgba(0, 0, 0, 0.03) 0px 10px 20px 0px, + rgba(0, 0, 0, 0.1) 0px 1px 4px 0px; + width: 500px; +} + +.disclaimer > button { + border: none; + background: var(--ifm-color-primary); + color: var(--ifm-color-white); + cursor: pointer; + border-radius: 4px; + padding: 5px 15px; +} diff --git a/docs/src/data/power.js b/docs/src/data/power.js new file mode 100644 index 00000000000..bf34f17d884 --- /dev/null +++ b/docs/src/data/power.js @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/** + * This file holds all current measurements related to ZMK features and hardware + * All current measurements are in micro amps. Measurements were taken on a Nordic Power Profiler Kit + * The test device to get these values was three nice!nanos (nRF52840). + */ + +export const zmkBase = { + hostConnection: 23, // How much current it takes to have an idle host connection + standalone: { + idle: 0, // No extra idle current + typing: 315, // Current while holding down a key. Represents polling+BLE notification power + }, + central: { + idle: 490, // Idle current for connection to right half + typing: 380, // Current while holding down a key. Represents polling+BLE notification power + }, + peripheral: { + idle: 20, // Idle current for connection to left half + typing: 365, // Current while holding down a key. Represents polling+BLE notification power + }, +}; + +/** + * ZMK board power measurements + * + * Power supply can be an LDO or switching + * Quiescent and other quiescent are measured in micro amps + * + * Switching efficiency represents the efficiency of converting from + * 3.8V (average li-ion voltage) to the output voltage of the power supply + */ +export const zmkBoards = { + "nice!nano": { + name: "nice!nano", + powerSupply: { + type: "LDO", + outputVoltage: 3.3, + quiescentMicroA: 55, + }, + otherQuiescentMicroA: 4, + }, + "nice!60": { + powerSupply: { + type: "SWITCHING", + outputVoltage: 3.3, + efficiency: 0.95, + quiescentMicroA: 4, + }, + otherQuiescentMicroA: 4, + }, +}; + +export const underglowPower = { + firmware: 60, // ZMK power usage while underglow feature is turned on (SPIM mostly) + ledOn: 20000, // Estimated power consumption of a WS2812B at 100% (can be anywhere from 10mA to 30mA) + ledOff: 460, // Quiescent current of a WS2812B +}; + +export const displayPower = { + // Based on GoodDisplay's 1.02in epaper + EPAPER: { + activePercent: 0.05, // Estimated one refresh per minute taking three seconds + active: 1500, // Power draw during refresh + sleep: 5, // Idle power draw of an epaper + }, + // 128x32 SSD1306 + OLED: { + activePercent: 0.5, // Estimated sleeping half the time (based on idle) + active: 10000, // Estimated power draw when about half the pixels are on + sleep: 7, // Deep sleep power draw (display off) + }, +}; diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js new file mode 100644 index 00000000000..ca46f5cab8e --- /dev/null +++ b/docs/src/pages/power-profiler.js @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +import React, { useState } from "react"; +import classnames from "classnames"; +import Layout from "@theme/Layout"; +import styles from "./styles.module.css"; +import PowerEstimate from "../components/power-estimate"; +import CustomBoardForm from "../components/custom-board-form"; +import { useInput } from "../utils/hooks"; +import { zmkBoards } from "../data/power"; +import "../css/power-profiler.css"; + +const Disclaimer = `This profiler makes many assumptions about typing + activity, battery characteristics, hardware behavior, and + doesn't account for error of user inputs. For example battery + mAh, which is often incorrectly advertised higher than it's actual capacity. + While it tries to estimate power usage using real power readings of ZMK, + every person will have different results that may be worse or even + better than the estimation given here.`; + +function PowerProfiler() { + const { value: board, bind: bindBoard } = useInput(""); + const { value: split, bind: bindSplit } = useInput(false); + const { value: batteryMilliAh, bind: bindBatteryMilliAh } = useInput(110); + + const { value: psuType, bind: bindPsuType } = useInput(""); + const { value: outputV, bind: bindOutputV } = useInput(3.3); + const { value: quiescentMicroA, bind: bindQuiescentMicroA } = useInput(55); + const { + value: otherQuiescentMicroA, + bind: bindOtherQuiescentMicroA, + } = useInput(0); + const { value: efficiency, bind: bindEfficiency } = useInput(0.9); + + const { value: bondedQty, bind: bindBondedQty } = useInput(1); + const { value: percentAsleep, bind: bindPercentAsleep } = useInput(0.5); + + const { value: glowEnabled, bind: bindGlowEnabled } = useInput(false); + const { value: glowQuantity, bind: bindGlowQuantity } = useInput(10); + const { value: glowBrightness, bind: bindGlowBrightness } = useInput(1); + + const { value: displayEnabled, bind: bindDisplayEnabled } = useInput(false); + const { value: displayType, bind: bindDisplayType } = useInput(""); + + const [disclaimerAcknowledged, setDisclaimerAcknowledged] = useState( + typeof window !== "undefined" + ? localStorage.getItem("zmkPowerProfilerDisclaimer") === "true" + : false + ); + + const currentBoard = + board === "custom" + ? { + powerSupply: { + type: psuType, + outputVoltage: outputV, + quiescentMicroA: quiescentMicroA, + efficiency, + }, + otherQuiescentMicroA: otherQuiescentMicroA, + } + : zmkBoards[board]; + + return ( + +
+
+

ZMK Power Profiler

+

+ {"Estimate your keyboard's power usage and battery life on ZMK."} +

+
+
+
+
+
+

Keyboard Specifications

+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ + mAh +
+
+
+
+
+ + {board === "custom" && ( + + )} + +
+

Usage Values

+
+
+
+ + + {bondedQty} +
+
+
+
+ + + {Math.round(percentAsleep * 100)}% +
+
+
+
+ +
+

Features

+
+
+
+ + +
+
+
+ + +
+
+
+ {split ? ( + <> + + + + ) : ( + + )} +
+
+ Disclaimer: {Disclaimer} +
+
+
+
+ {!disclaimerAcknowledged && ( +
+
+

Disclaimer

+

{Disclaimer}

+ +
+
+ )} +
+ ); +} + +export default PowerProfiler; diff --git a/docs/src/utils/hooks.js b/docs/src/utils/hooks.js new file mode 100644 index 00000000000..b8fb27b84b3 --- /dev/null +++ b/docs/src/utils/hooks.js @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +import { useState } from "react"; + +export const useInput = (initialValue) => { + const [value, setValue] = useState(initialValue); + + return { + value, + setValue, + bind: { + value, + onChange: (event) => { + const target = event.target; + setValue(target.type === "checkbox" ? target.checked : target.value); + }, + }, + }; +}; From 27c89e69c15def0d9d4fe742912a062b3783b463 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 15 Mar 2021 00:39:29 -0400 Subject: [PATCH 0023/1130] fix(kscan): Proper direct wire warning message. --- app/drivers/kscan/kscan_gpio_direct.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index 0802d0e56b8..b68e4fc5901 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -83,7 +83,7 @@ static int kscan_gpio_config_interrupts(const struct device *dev, gpio_flags_t f int err = gpio_pin_interrupt_configure(dev, cfg->pin, flags); if (err) { - LOG_ERR("Unable to enable matrix GPIO interrupt"); + LOG_ERR("Unable to enable direct GPIO interrupt"); return err; } } From 28d454655b89f127a65b14381ba4b796db6c3c7a Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 18 Mar 2021 21:26:41 -0400 Subject: [PATCH 0024/1130] fix(boards): Move board endif to proper location. * Nibble and tidbit conditional was closed early, enabling some settings incorrectly for other unrelated builds. --- app/boards/shields/nibble/Kconfig.defconfig | 3 ++- app/boards/shields/tidbit/Kconfig.defconfig | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/nibble/Kconfig.defconfig b/app/boards/shields/nibble/Kconfig.defconfig index 22ef1c692ce..2df1d8125b7 100644 --- a/app/boards/shields/nibble/Kconfig.defconfig +++ b/app/boards/shields/nibble/Kconfig.defconfig @@ -9,7 +9,6 @@ config ZMK_KEYBOARD_NAME config ZMK_USB default y -endif if ZMK_DISPLAY @@ -46,3 +45,5 @@ choice LVGL_COLOR_DEPTH endchoice endif # LVGL + +endif diff --git a/app/boards/shields/tidbit/Kconfig.defconfig b/app/boards/shields/tidbit/Kconfig.defconfig index 30cf3c2277f..177e26751b5 100644 --- a/app/boards/shields/tidbit/Kconfig.defconfig +++ b/app/boards/shields/tidbit/Kconfig.defconfig @@ -6,7 +6,6 @@ if SHIELD_TIDBIT config ZMK_KEYBOARD_NAME default "tidbit" -endif if ZMK_DISPLAY @@ -43,3 +42,5 @@ choice LVGL_COLOR_DEPTH endchoice endif # LVGL + +endif From d8119cd663310944258674c79024a484c7963e80 Mon Sep 17 00:00:00 2001 From: Lucas Messenger Date: Wed, 24 Mar 2021 13:21:40 -0400 Subject: [PATCH 0025/1130] fix(boards): Proper BlueMicro840_V1 &pro_micro_a map for A10 (#733) --- app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi index 940d8913249..0dfe3be5fd7 100644 --- a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -42,7 +42,7 @@ , <7 0 &gpio0 24 0> /* D6/A7 D7*/ , <8 0 &gpio0 10 0> /* D8/A8 B4*/ , <9 0 &gpio1 6 0> /* D9/A9 B5*/ - , <10 0 &gpio1 13 0> /* D10/A10 B6*/ + , <10 0 &gpio1 11 0> /* D10/A10 B6*/ ; }; }; From 3893d50e13c0ed8bbe93e7f529c7403dc89b4752 Mon Sep 17 00:00:00 2001 From: measlesbagel <49631653+measlesbagel@users.noreply.github.com> Date: Mon, 5 Apr 2021 19:04:38 -0400 Subject: [PATCH 0026/1130] Docs: added mod morph page (#749) * docs(behaviors): add mod-morph doc page * docs(behaviors): add mod-morph doc page * docs(mod-morph): add note about sent modifiers * docs(mod-morph): fixed prettier formatting --- docs/docs/behaviors/mod-morph.md | 74 ++++++++++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 75 insertions(+) create mode 100644 docs/docs/behaviors/mod-morph.md diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md new file mode 100644 index 00000000000..cbb9a5698ae --- /dev/null +++ b/docs/docs/behaviors/mod-morph.md @@ -0,0 +1,74 @@ +--- +title: Mod-Morph Behavior +sidebar_label: Mod-Morph +--- + +## Summary + +The Mod-Morph behavior sends a different keypress, depending on whether a specified modifier is being held during the keypress. + +- If you tap the key by itself, the first keycode is sent. +- If you tap the key while holding the specified modifier, the second keycode is sent. + +## Mod-Morph + +The Mod-Morph behavior acts as one of two keycodes, depending on if the required modifier is being held during the keypress. + +When the modifier is being held it is sent along with the morphed keycode. This can cause problems when the morphed keycode and modifier have an existing relationship (such as `shift-delete` or `ctrl-v` on many operating systems). + +### Configuration + +An example of how to implement the mod-morph "Grave Escape": + +``` +/ { +behaviors { + gresc: grave_escape { + compatible = "zmk,behavior-mod-morph"; + label = "GRAVE_ESCAPE"; + #binding-cells = <0>; + bindings = <&kp ESC>, <&kp GRAVE>; + mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; + } + +}; + + keymap { + ... + } +} +``` + +Note that this specific mod-morph exists in ZMK by default using code `&gresc`. + +### Behavior Binding + +- Reference: `&gresc` +- Parameter: None + +Example: + +``` +&gresc +``` + +### Mods + +This is how you determine what modifiers will activate the morphed version of the keycode. + +Available Modifiers: + +- `MOD_LSFT` +- `MOD_RSFT` +- `MOD_LCTL` +- `MOD_RCTL` +- `MOD_LALT` +- `MOD_RALT` +- `MOD_LGUI` +- `MOD_RGUI` + +Example: + +``` +mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 6761b19b941..4ae23c5975d 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -22,6 +22,7 @@ module.exports = { "behaviors/misc", "behaviors/hold-tap", "behaviors/mod-tap", + "behaviors/mod-morph", "behaviors/sticky-key", "behaviors/sticky-layer", "behaviors/reset", From fadb50867147c935b912b2afbfebd9734ef00ccb Mon Sep 17 00:00:00 2001 From: Michael van Eerd Date: Thu, 15 Apr 2021 10:31:07 +0200 Subject: [PATCH 0027/1130] fix(docs) omit layers -1 example, clarify it defaults when omitted (#757) * fix(docs) omit layers -1 example, clarify * comment, simplify description * remove 'the' --- docs/docs/features/combos.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 653fc6e9fc5..1a19cfe46c0 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -18,7 +18,6 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod timeout-ms = <50>; key-positions = <0 1>; bindings = <&kp ESC>; - layers = <-1>; }; }; }; @@ -28,7 +27,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - The `compatible` property should always be `"zmk,combos"` for combos. - `timeout-ms` is the number of milliseconds that all keys of the combo must be pressed. - `key-positions` is an array of key positions. See the info section below about how to figure out the positions on your board. -- `layers = <0 1...>` will allow limiting a combo to specific layers. this is an _optional_ parameter and defaults to `-1` which is global scope. +- `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. - (advanced) you can specify `slow-release` if you want the combo binding to be released when all key-positions are released. The default is to release the combo as soon as any of the keys in the combo is released. From 96bd927be2d160255b019e1a5bd2cbd2ec2cc8b7 Mon Sep 17 00:00:00 2001 From: Piotr Gnus Date: Wed, 5 May 2021 06:15:38 +0200 Subject: [PATCH 0028/1130] feat(docs): Added support for prefers-color-scheme in docs Now, instead of always defaulting to light theme, documentation, docs will default to the color scheme based by the user preference (reported by web browser as a `prefers-color-scheme` media query). It is still possible for user to change the theme by using the switch next to the search box. His preference will be remembered. --- docs/docusaurus.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ab7ec12da65..385e3f561b4 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -10,6 +10,9 @@ module.exports = { projectName: "zmk", // Usually your repo name. plugins: [path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin")], themeConfig: { + colorMode: { + respectPrefersColorScheme: true, + }, googleAnalytics: { trackingID: "UA-145201102-2", anonymizeIP: true, From 8e235a2d658331cc951a9bc9b6976ebf02069f26 Mon Sep 17 00:00:00 2001 From: Piotr Gnus Date: Wed, 5 May 2021 06:21:27 +0200 Subject: [PATCH 0029/1130] fix(docs): Readjusted colors for dark theme for OSes in docs Previously the colors of operating systems were the same both for dark and light color scheme. That's not a major issue, but adjusting the colors for the dark theme to better match the theme looks like an improvement. Colors were just darkened by reversing the lightness of each color taken from the dark theme. --- docs/src/css/codes.css | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/docs/src/css/codes.css b/docs/src/css/codes.css index ce2c0efdd51..0e67ca9d023 100644 --- a/docs/src/css/codes.css +++ b/docs/src/css/codes.css @@ -4,6 +4,24 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ +:root { + --codes-os-fg: black; + --codes-os-windows-bg: #caedfd; + --codes-os-linux-bg: #fff2ca; + --codes-os-android-bg: #d8eed9; + --codes-os-macos-bg: #ececec; + --codes-os-ios-bg: #ffffff; +} + +html[data-theme="dark"] { + --codes-os-fg: #f5f6f7; + --codes-os-windows-bg: #032535; + --codes-os-linux-bg: #332600; + --codes-os-android-bg: #112712; + --codes-os-macos-bg: #121212; + --codes-os-ios-bg: #000000; +} + .codes.os.legend { position: sticky; z-index: 1; @@ -132,7 +150,7 @@ html[data-theme="light"] .codes.os.legend { } .codes .os { - color: black; + color: var(--codes-os-fg); } .codes td.os { @@ -144,23 +162,23 @@ html[data-theme="light"] .codes.os.legend { } .codes .os.windows { - background: #caedfd; + background: var(--codes-os-windows-bg); } .codes .os.linux { - background: #fff2ca; + background: var(--codes-os-linux-bg); } .codes .os.android { - background: #d8eed9; + background: var(--codes-os-android-bg); } .codes .os.macos { - background: #ececec; + background: var(--codes-os-macos-bg); } .codes .os.ios { - background: #ffffff; + background: var(--codes-os-ios-bg); } .codes .footnotes { From fa2e51b52870c7c9e4127b2dfbef672f30d128fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 00:24:37 -0400 Subject: [PATCH 0030/1130] chore(deps-dev): bump eslint from 7.12.0 to 7.25.0 in /docs (#773) Bumps [eslint](https://github.com/eslint/eslint) from 7.12.0 to 7.25.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.12.0...v7.25.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/package-lock.json | 532 +++++++++++++++++++++++++++-------------- docs/package.json | 2 +- 2 files changed, 350 insertions(+), 184 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 0e48a97b4fa..74cbfa79ff3 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -21,7 +21,7 @@ "web-tree-sitter": "^0.17.1" }, "devDependencies": { - "eslint": "^7.12.0", + "eslint": "^7.25.0", "eslint-config-prettier": "^6.14.0", "eslint-plugin-mdx": "^1.8.2", "eslint-plugin-react": "^7.21.5", @@ -1978,9 +1978,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz", - "integrity": "sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1990,7 +1990,6 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -3216,12 +3215,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/async": { @@ -4117,7 +4116,6 @@ "dependencies": { "anymatch": "3.1.1", "braces": "3.0.2", - "fsevents": "2.1.3", "glob-parent": "5.1.1", "is-binary-path": "2.1.0", "is-glob": "4.0.1", @@ -5667,13 +5665,13 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "node_modules/eslint": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz", - "integrity": "sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", + "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5683,13 +5681,13 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -5697,7 +5695,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -5706,7 +5704,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -5773,7 +5771,6 @@ "cosmiconfig": "^7.0.0", "eslint-mdx": "^1.8.2", "eslint-plugin-react": "^7.20.6", - "rebass": "^4.0.7", "remark-mdx": "^1.6.16", "remark-parse": "^8.0.3", "remark-stringify": "^8.1.1", @@ -5909,6 +5906,15 @@ "node": ">=10" } }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, "node_modules/eslint/node_modules/ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -5995,12 +6001,12 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -6027,6 +6033,12 @@ "node": ">= 4" } }, + "node_modules/eslint/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/eslint/node_modules/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -6075,14 +6087,26 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "engines": { @@ -6116,9 +6140,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "node_modules/esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6524,15 +6548,15 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-loader": { @@ -6626,35 +6650,22 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "node_modules/flatten": { @@ -8609,6 +8620,12 @@ "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -8741,6 +8758,12 @@ "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -11098,9 +11121,6 @@ "version": "1.22.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", - "dependencies": { - "clipboard": "^2.0.0" - }, "optionalDependencies": { "clipboard": "^2.0.0" } @@ -12420,6 +12440,15 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -12936,17 +12965,62 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/snapdragon": { @@ -13700,32 +13774,64 @@ } }, "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", + "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==", "dev": true, "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" } }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/table/node_modules/ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/tapable": { @@ -14713,8 +14819,7 @@ "dependencies": { "chokidar": "3.4.3", "graceful-fs": "4.2.4", - "neo-async": "2.6.2", - "watchpack-chokidar2": "2.0.0" + "neo-async": "2.6.2" }, "optionalDependencies": { "watchpack-chokidar2": "2.0.0" @@ -15191,7 +15296,6 @@ "anymatch": "2.0.0", "async-each": "1.0.3", "braces": "2.3.2", - "fsevents": "1.2.13", "glob-parent": "3.1.0", "inherits": "2.0.4", "is-binary-path": "1.0.1", @@ -15852,18 +15956,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -17812,9 +17904,9 @@ } }, "@eslint/eslintrc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz", - "integrity": "sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -17824,7 +17916,6 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -18983,9 +19074,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -21433,13 +21524,13 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz", - "integrity": "sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", + "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -21449,13 +21540,13 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -21463,7 +21554,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -21472,11 +21563,20 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -21539,12 +21639,12 @@ } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "has-flag": { @@ -21559,6 +21659,12 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -21588,6 +21694,12 @@ "requires": { "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, @@ -21733,13 +21845,13 @@ "dev": true }, "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "dependencies": { @@ -21763,9 +21875,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -22175,12 +22287,12 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "file-loader": { @@ -22278,31 +22390,19 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "flatten": { @@ -24225,6 +24325,12 @@ "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -24357,6 +24463,12 @@ "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -28000,6 +28112,12 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -28523,14 +28641,46 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } } }, "snapdragon": { @@ -29281,26 +29431,51 @@ } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", + "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" } } } @@ -31419,15 +31594,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", diff --git a/docs/package.json b/docs/package.json index 5249bcff20d..a46ea7f3023 100644 --- a/docs/package.json +++ b/docs/package.json @@ -40,7 +40,7 @@ ] }, "devDependencies": { - "eslint": "^7.12.0", + "eslint": "^7.25.0", "eslint-config-prettier": "^6.14.0", "eslint-plugin-mdx": "^1.8.2", "eslint-plugin-react": "^7.21.5", From ea57f620485018d0a6430acf0f2a1945634a7830 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 04:25:45 +0000 Subject: [PATCH 0031/1130] chore(deps-dev): bump eslint-config-prettier in /docs Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 6.14.0 to 8.3.0. - [Release notes](https://github.com/prettier/eslint-config-prettier/releases) - [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-config-prettier/compare/v6.14.0...v8.3.0) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 40 ++++++++++------------------------------ docs/package.json | 2 +- 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 74cbfa79ff3..662a6719518 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -22,7 +22,7 @@ }, "devDependencies": { "eslint": "^7.25.0", - "eslint-config-prettier": "^6.14.0", + "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.8.2", "eslint-plugin-react": "^7.21.5", "null-loader": "^3.0.0", @@ -5719,18 +5719,15 @@ } }, "node_modules/eslint-config-prettier": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.14.0.tgz", - "integrity": "sha512-DbVwh0qZhAC7CNDWcq8cBdK6FcVHiMTKmCypOPWeZkp9hJ8xYwTaWSa6bb6cjfi8KOeJy0e9a8Izxyx+O4+gCQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": ">=3.14.1" + "eslint": ">=7.0.0" } }, "node_modules/eslint-mdx": { @@ -7007,15 +7004,6 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -21704,13 +21692,11 @@ } }, "eslint-config-prettier": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.14.0.tgz", - "integrity": "sha512-DbVwh0qZhAC7CNDWcq8cBdK6FcVHiMTKmCypOPWeZkp9hJ8xYwTaWSa6bb6cjfi8KOeJy0e9a8Izxyx+O4+gCQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } + "requires": {} }, "eslint-mdx": { "version": "1.8.2", @@ -22757,12 +22743,6 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", diff --git a/docs/package.json b/docs/package.json index a46ea7f3023..fd01cca5f29 100644 --- a/docs/package.json +++ b/docs/package.json @@ -41,7 +41,7 @@ }, "devDependencies": { "eslint": "^7.25.0", - "eslint-config-prettier": "^6.14.0", + "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.8.2", "eslint-plugin-react": "^7.21.5", "null-loader": "^3.0.0", From e19cf7912dcba324315f6f827802f817077cb72c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 5 May 2021 00:30:43 -0400 Subject: [PATCH 0032/1130] fix(docs): Updated eslint config for unified prettier setup. --- docs/.eslintrc.js | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js index e1ef03020f3..b5fc07457a1 100644 --- a/docs/.eslintrc.js +++ b/docs/.eslintrc.js @@ -10,7 +10,6 @@ module.exports = { "plugin:react/recommended", "plugin:mdx/recommended", "prettier", - "prettier/react", ], parserOptions: { ecmaFeatures: { From 977746dbde34bd3d3cd5eedc003daaea512a94ae Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 24 Mar 2021 10:24:08 -0400 Subject: [PATCH 0033/1130] feat(tests): Override test parallelism w/ `J=8` environment. --- app/run-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/run-test.sh b/app/run-test.sh index 47089323d70..b39f2db20eb 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -17,7 +17,7 @@ testcases=$(find $path -name native_posix.keymap -exec dirname \{\} \;) num_cases=$(echo "$testcases" | wc -l) if [ $num_cases -gt 1 ]; then echo "" > ./build/tests/pass-fail.log - echo "$testcases" | xargs -L 1 -P 4 ./run-test.sh + echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh err=$? sort -k2 ./build/tests/pass-fail.log exit $err From a00697082531785dff3b9516d9178d3ec367d8f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 04:56:27 +0000 Subject: [PATCH 0034/1130] chore(deps): bump react from 16.13.1 to 16.14.0 in /docs Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 16.13.1 to 16.14.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v16.14.0/packages/react) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 29 ++++++++++++++++------------- docs/package.json | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 662a6719518..5bd066b9ef7 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13,7 +13,7 @@ "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/react-fontawesome": "^0.1.12", "classnames": "^2.2.6", - "react": "^16.8.4", + "react": "^16.14.0", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.2", "react-dom": "^16.8.4", @@ -11324,13 +11324,16 @@ } }, "node_modules/react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "dependencies": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.7.2" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/react-async": { @@ -27041,13 +27044,13 @@ } }, "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.7.2" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" } }, "react-async": { diff --git a/docs/package.json b/docs/package.json index fd01cca5f29..1596a6eeb47 100644 --- a/docs/package.json +++ b/docs/package.json @@ -20,7 +20,7 @@ "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/react-fontawesome": "^0.1.12", "classnames": "^2.2.6", - "react": "^16.8.4", + "react": "^16.14.0", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.2", "react-dom": "^16.8.4", From de4979bf58a628692547b056c80a75678005a647 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Mon, 5 Apr 2021 20:07:39 +0200 Subject: [PATCH 0035/1130] fix(behaviors): Fix sticky keys quick-release for normal keypresses Quick release for sticky keys failed for non-layer keys. The sticky key was released just before the key that was supposed to be modified was handled. The issue was caused by an error in the sticky key logic, which released the sticky key before handling the key up event. Fixes #696. --- app/src/behaviors/behavior_sticky_key.c | 11 +++++--- .../events.patterns | 1 + .../keycode_events.snapshot | 10 +++++++ .../native_posix.keymap | 26 +++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/events.patterns create mode 100644 app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix.keymap diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 20af93a8190..40ca3f897a6 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -177,6 +177,11 @@ static const struct behavior_driver_api behavior_sticky_key_driver_api = { .binding_released = on_sticky_key_binding_released, }; +static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh); + +ZMK_LISTENER(behavior_sticky_key, sticky_key_keycode_state_changed_listener); +ZMK_SUBSCRIPTION(behavior_sticky_key, zmk_keycode_state_changed); + static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); if (ev == NULL) { @@ -212,7 +217,10 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { if (sticky_key->timer_started) { stop_timer(sticky_key); if (sticky_key->config->quick_release) { + // continue processing the event. Release the sticky key afterwards. + ZMK_EVENT_RAISE_AFTER(eh, behavior_sticky_key); release_sticky_key_behavior(sticky_key, ev->timestamp); + return ZMK_EV_EVENT_CAPTURED; } } sticky_key->modified_key_usage_page = ev->usage_page; @@ -229,9 +237,6 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { return ZMK_EV_EVENT_BUBBLE; } -ZMK_LISTENER(behavior_sticky_key, sticky_key_keycode_state_changed_listener); -ZMK_SUBSCRIPTION(behavior_sticky_key, zmk_keycode_state_changed); - void behavior_sticky_key_timer_handler(struct k_work *item) { struct active_sticky_key *sticky_key = CONTAINER_OF(item, struct active_sticky_key, release_timer); diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/events.patterns b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/events.patterns new file mode 100644 index 00000000000..833100f6ac4 --- /dev/null +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/keycode_events.snapshot b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/keycode_events.snapshot new file mode 100644 index 00000000000..c85d8b49fad --- /dev/null +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/keycode_events.snapshot @@ -0,0 +1,10 @@ +pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix.keymap new file mode 100644 index 00000000000..33115453f0e --- /dev/null +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix.keymap @@ -0,0 +1,26 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&sk { + quick-release; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + /* second key is pressed shortly after the first. It should not be capitalized. */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,1,10) + + /* repeat test to check if cleanup is done correctly */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file From fe36073a105db036d6db7aba35509aad14019bd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 May 2021 05:40:41 +0000 Subject: [PATCH 0036/1130] chore(deps): bump DoozyX/clang-format-lint-action from 0.11 to 0.12 Bumps [DoozyX/clang-format-lint-action](https://github.com/DoozyX/clang-format-lint-action) from 0.11 to 0.12. - [Release notes](https://github.com/DoozyX/clang-format-lint-action/releases) - [Commits](https://github.com/DoozyX/clang-format-lint-action/compare/v0.11...v0.12) Signed-off-by: dependabot[bot] --- .github/workflows/clang-format-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clang-format-lint.yml b/.github/workflows/clang-format-lint.yml index b6d515c182e..e9b3e077c0c 100644 --- a/.github/workflows/clang-format-lint.yml +++ b/.github/workflows/clang-format-lint.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: DoozyX/clang-format-lint-action@v0.11 + - uses: DoozyX/clang-format-lint-action@v0.12 with: source: "./app" extensions: "h,c" From 8a39683965c540677e2a84428a88d947debf6235 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 04:56:31 +0000 Subject: [PATCH 0037/1130] chore(deps-dev): bump eslint-plugin-react from 7.21.5 to 7.23.2 in /docs Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.21.5 to 7.23.2. - [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases) - [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.21.5...v7.23.2) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 1507 ++++++++++++++++++++++++++++++++-------- docs/package.json | 2 +- 2 files changed, 1211 insertions(+), 298 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 5bd066b9ef7..996722ca68a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -24,7 +24,7 @@ "eslint": "^7.25.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.8.2", - "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react": "^7.23.2", "null-loader": "^3.0.0", "prettier": "2.1.2", "string-replace-loader": "2.3" @@ -3063,13 +3063,15 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "node_modules/array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" }, "engines": { @@ -3080,22 +3082,106 @@ } }, "node_modules/array-includes/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -3104,6 +3190,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-includes/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3120,13 +3232,14 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "node_modules/array.prototype.flatmap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", - "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, "dependencies": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", + "es-abstract": "^1.18.0-next.1", "function-bind": "^1.1.1" }, "engines": { @@ -3136,31 +3249,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -3918,6 +4006,19 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -5812,22 +5913,23 @@ "dev": true }, "node_modules/eslint-plugin-react": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", - "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "dev": true, "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", + "minimatch": "^3.0.4", + "object.entries": "^1.1.3", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.3", "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.4" }, "engines": { "node": ">=4" @@ -5848,19 +5950,172 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-react/node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "dependencies": { - "is-core-module": "^2.0.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -6999,6 +7254,20 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -7188,6 +7457,15 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7934,42 +8212,17 @@ } }, "node_modules/internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", - "dev": true, - "dependencies": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internal-slot/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/interpret": { @@ -8054,6 +8307,15 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -8062,6 +8324,21 @@ "binary-extensions": "2.1.0" } }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -8099,9 +8376,9 @@ } }, "node_modules/is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -8221,6 +8498,18 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -9587,36 +9876,60 @@ } }, "node_modules/object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "dev": true, "dependencies": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" }, "engines": { "node": ">= 0.4" } }, - "node_modules/object.entries/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9625,16 +9938,50 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "node_modules/object.fromentries/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9643,23 +9990,25 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.fromentries/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/object.fromentries/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -9668,6 +10017,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.getownpropertydescriptors": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", @@ -12905,18 +13280,28 @@ } }, "node_modules/side-channel": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", - "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "es-abstract": "^1.18.0-next.0", - "object-inspect": "^1.8.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/side-channel/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -13484,39 +13869,97 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.matchall/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -13525,6 +13968,75 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.matchall/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", @@ -14262,6 +14774,33 @@ "node": "*" } }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -15884,6 +16423,22 @@ "isexe": "2.0.0" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -18929,33 +19484,106 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object-keys": "^1.1.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } } } @@ -18976,35 +19604,15 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flatmap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", - "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", + "es-abstract": "^1.18.0-next.1", "function-bind": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "arrify": { @@ -19772,6 +20380,16 @@ } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -21762,22 +22380,23 @@ } }, "eslint-plugin-react": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", - "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", + "minimatch": "^3.0.4", + "object.entries": "^1.1.3", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.3", "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.4" }, "dependencies": { "doctrine": { @@ -21789,15 +22408,117 @@ "esutils": "^2.0.2" } }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "requires": { - "is-core-module": "^2.0.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } } } }, @@ -22741,6 +23462,17 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -22936,6 +23668,12 @@ } } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -23674,35 +24412,14 @@ } }, "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", + "get-intrinsic": "^1.1.0", "has": "^1.0.3", - "side-channel": "^1.0.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "side-channel": "^1.0.4" } }, "interpret": { @@ -23778,6 +24495,12 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -23786,6 +24509,15 @@ "binary-extensions": "2.1.0" } }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -23825,9 +24557,9 @@ } }, "is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", "dev": true, "requires": { "has": "^1.0.3" @@ -23940,6 +24672,12 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -25283,66 +26021,117 @@ } }, "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } } } @@ -28578,13 +29367,22 @@ } }, "side-channel": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", - "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "es-abstract": "^1.18.0-next.0", - "object-inspect": "^1.8.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "dependencies": { + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true + } } }, "signal-exit": { @@ -29143,36 +29941,118 @@ } }, "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } } } @@ -29901,6 +30781,26 @@ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -31515,6 +32415,19 @@ "isexe": "2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", diff --git a/docs/package.json b/docs/package.json index 1596a6eeb47..22078bd1825 100644 --- a/docs/package.json +++ b/docs/package.json @@ -43,7 +43,7 @@ "eslint": "^7.25.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.8.2", - "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react": "^7.23.2", "null-loader": "^3.0.0", "prettier": "2.1.2", "string-replace-loader": "2.3" From b09b1f3c8ca52b9fa5e9bb4f22752ecfa5d47da0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 08:27:41 +0000 Subject: [PATCH 0038/1130] chore(deps): bump @fortawesome/react-fontawesome in /docs Bumps [@fortawesome/react-fontawesome](https://github.com/FortAwesome/react-fontawesome) from 0.1.12 to 0.1.14. - [Release notes](https://github.com/FortAwesome/react-fontawesome/releases) - [Changelog](https://github.com/FortAwesome/react-fontawesome/blob/master/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/react-fontawesome/commits/0.1.14) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 16 ++++++++-------- docs/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 996722ca68a..8d13c5757a0 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -11,7 +11,7 @@ "@docusaurus/preset-classic": "^2.0.0-alpha.66", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.1", - "@fortawesome/react-fontawesome": "^0.1.12", + "@fortawesome/react-fontawesome": "^0.1.14", "classnames": "^2.2.6", "react": "^16.14.0", "react-async": "^10.0.1", @@ -2067,14 +2067,14 @@ } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.12.tgz", - "integrity": "sha512-kV6HtqotM3K4YIXlTVvomuIi6QgGCvYm++ImyEx2wwgmSppZ6kbbA29ASwjAUBD63j2OFU0yoxeXpZkjrrX0qQ==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", + "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", "dependencies": { "prop-types": "^15.7.2" }, "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.20", + "@fortawesome/fontawesome-svg-core": "^1.2.32", "react": ">=16.x" } }, @@ -18511,9 +18511,9 @@ } }, "@fortawesome/react-fontawesome": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.12.tgz", - "integrity": "sha512-kV6HtqotM3K4YIXlTVvomuIi6QgGCvYm++ImyEx2wwgmSppZ6kbbA29ASwjAUBD63j2OFU0yoxeXpZkjrrX0qQ==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", + "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", "requires": { "prop-types": "^15.7.2" } diff --git a/docs/package.json b/docs/package.json index 22078bd1825..84f616f0756 100644 --- a/docs/package.json +++ b/docs/package.json @@ -18,7 +18,7 @@ "@docusaurus/preset-classic": "^2.0.0-alpha.66", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.1", - "@fortawesome/react-fontawesome": "^0.1.12", + "@fortawesome/react-fontawesome": "^0.1.14", "classnames": "^2.2.6", "react": "^16.14.0", "react-async": "^10.0.1", From f26da9cd4b4fdaa509cd4ddda7ab26782c885796 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 04:31:45 +0000 Subject: [PATCH 0039/1130] chore(deps): bump @fortawesome/free-solid-svg-icons in /docs Bumps [@fortawesome/free-solid-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 5.15.1 to 5.15.3. - [Release notes](https://github.com/FortAwesome/Font-Awesome/releases) - [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.15.1...5.15.3) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 30 +++++++++++++++--------------- docs/package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 8d13c5757a0..d003bb5ff5a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -10,7 +10,7 @@ "@docusaurus/core": "^2.0.0-alpha.66", "@docusaurus/preset-classic": "^2.0.0-alpha.66", "@fortawesome/fontawesome-svg-core": "^1.2.32", - "@fortawesome/free-solid-svg-icons": "^5.15.1", + "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", "classnames": "^2.2.6", "react": "^16.14.0", @@ -2034,9 +2034,9 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.32", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz", - "integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w==", + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", "hasInstallScript": true, "engines": { "node": ">=6" @@ -2055,12 +2055,12 @@ } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz", - "integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==", + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", + "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.32" + "@fortawesome/fontawesome-common-types": "^0.2.35" }, "engines": { "node": ">=6" @@ -18490,9 +18490,9 @@ } }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.32", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz", - "integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w==" + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" }, "@fortawesome/fontawesome-svg-core": { "version": "1.2.32", @@ -18503,11 +18503,11 @@ } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz", - "integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==", + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", + "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.32" + "@fortawesome/fontawesome-common-types": "^0.2.35" } }, "@fortawesome/react-fontawesome": { diff --git a/docs/package.json b/docs/package.json index 84f616f0756..aed110a4a7e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,7 +17,7 @@ "@docusaurus/core": "^2.0.0-alpha.66", "@docusaurus/preset-classic": "^2.0.0-alpha.66", "@fortawesome/fontawesome-svg-core": "^1.2.32", - "@fortawesome/free-solid-svg-icons": "^5.15.1", + "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", "classnames": "^2.2.6", "react": "^16.14.0", From c735bb8de61dc13037c3f91b75f79b5730c86467 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 04:46:04 +0000 Subject: [PATCH 0040/1130] chore(deps): bump react-dom from 16.13.1 to 16.14.0 in /docs Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) from 16.13.1 to 16.14.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v16.14.0/packages/react-dom) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 33 ++++++++++++++++++--------------- docs/package.json | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index d003bb5ff5a..90f8074f1ad 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -16,7 +16,7 @@ "react": "^16.14.0", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.2", - "react-dom": "^16.8.4", + "react-dom": "^16.14.0", "react-toastify": "^6.0.9", "web-tree-sitter": "^0.17.1" }, @@ -12129,14 +12129,17 @@ } }, "node_modules/react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "dependencies": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.7.2", - "scheduler": "0.19.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" } }, "node_modules/react-error-overlay": { @@ -28273,14 +28276,14 @@ } }, "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.7.2", - "scheduler": "0.19.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" } }, "react-error-overlay": { diff --git a/docs/package.json b/docs/package.json index aed110a4a7e..a236d3e16da 100644 --- a/docs/package.json +++ b/docs/package.json @@ -23,7 +23,7 @@ "react": "^16.14.0", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.2", - "react-dom": "^16.8.4", + "react-dom": "^16.14.0", "react-toastify": "^6.0.9", "web-tree-sitter": "^0.17.1" }, From 5b86fdd876ed1b0b58fd70ab4208265ba9584b55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 04:47:57 +0000 Subject: [PATCH 0041/1130] chore(deps-dev): bump eslint-plugin-mdx from 1.8.2 to 1.13.0 in /docs Bumps [eslint-plugin-mdx](https://github.com/mdx-js/eslint-mdx) from 1.8.2 to 1.13.0. - [Release notes](https://github.com/mdx-js/eslint-mdx/releases) - [Changelog](https://github.com/mdx-js/eslint-mdx/blob/master/CHANGELOG.md) - [Commits](https://github.com/mdx-js/eslint-mdx/compare/v1.8.2...v1.13.0) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 21556 ++++++++++++++++++++------------------- docs/package.json | 2 +- 2 files changed, 11066 insertions(+), 10492 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 90f8074f1ad..cb3d20c6515 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -23,7 +23,7 @@ "devDependencies": { "eslint": "^7.25.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-mdx": "^1.8.2", + "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", "null-loader": "^3.0.0", "prettier": "2.1.2", @@ -1810,161 +1810,6 @@ "node": ">=8" } }, - "node_modules/@emotion/cache": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", - "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", - "dev": true, - "optional": true, - "dependencies": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" - } - }, - "node_modules/@emotion/core": { - "version": "10.0.35", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.35.tgz", - "integrity": "sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw==", - "dev": true, - "optional": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/css": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", - "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", - "dev": true, - "optional": true, - "dependencies": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" - } - }, - "node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, - "optional": true, - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/serialize": { - "version": "0.11.16", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", - "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", - "dev": true, - "optional": true, - "dependencies": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - } - }, - "node_modules/@emotion/serialize/node_modules/csstype": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz", - "integrity": "sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/sheet": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", - "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/styled": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", - "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", - "dev": true, - "optional": true, - "dependencies": { - "@emotion/styled-base": "^10.0.27", - "babel-plugin-emotion": "^10.0.27" - }, - "peerDependencies": { - "@emotion/core": "^10.0.27", - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/styled-base": { - "version": "10.0.31", - "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", - "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", - "dev": true, - "optional": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.8", - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3" - }, - "peerDependencies": { - "@emotion/core": "^10.0.28", - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/utils": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", - "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", - "dev": true, - "optional": true - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", - "dev": true, - "optional": true - }, "node_modules/@endiliey/static-site-generator-webpack-plugin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", @@ -2286,146 +2131,6 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, - "node_modules/@styled-system/background": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", - "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/border": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", - "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/color": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", - "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", - "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", - "dev": true, - "optional": true, - "dependencies": { - "object-assign": "^4.1.1" - } - }, - "node_modules/@styled-system/css": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", - "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==", - "dev": true, - "optional": true - }, - "node_modules/@styled-system/flexbox": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", - "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/grid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", - "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/layout": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", - "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/position": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", - "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/shadow": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", - "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/should-forward-prop": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz", - "integrity": "sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==", - "dev": true, - "optional": true, - "dependencies": { - "@emotion/is-prop-valid": "^0.8.1", - "@emotion/memoize": "^0.7.1", - "styled-system": "^5.1.5" - } - }, - "node_modules/@styled-system/space": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", - "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/typography": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", - "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/variant": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", - "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", - "dev": true, - "optional": true, - "dependencies": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", @@ -3452,25 +3157,6 @@ "object.assign": "4.1.1" } }, - "node_modules/babel-plugin-emotion": { - "version": "10.0.33", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", - "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", - "dev": true, - "optional": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - } - }, "node_modules/babel-plugin-extract-import-names": { "version": "1.6.19", "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.19.tgz", @@ -3483,25 +3169,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dev": true, - "optional": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true, - "optional": true - }, "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -5832,19 +5499,18 @@ } }, "node_modules/eslint-mdx": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.8.2.tgz", - "integrity": "sha512-j7mkBFr7zHLaiqGu+iWker9qwWfti29xUAuUDDad95l+H189R4++dsuSUB6u19wy6CCuspIt5I6katzbpRbbMw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", + "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", "dev": true, "dependencies": { - "espree": "^7.2.0", - "remark-mdx": "^1.6.16", + "remark-mdx": "^1.6.22", "remark-parse": "^8.0.3", - "tslib": "^2.0.1", - "unified": "^9.1.0" + "tslib": "^2.2.0", + "unified": "^9.2.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=10.0.0" }, "funding": { "type": "opencollective", @@ -5854,1217 +5520,1479 @@ "eslint": ">=5.0.0" } }, - "node_modules/eslint-mdx/node_modules/tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", - "dev": true + "node_modules/eslint-mdx/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } }, - "node_modules/eslint-plugin-mdx": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.8.2.tgz", - "integrity": "sha512-fKkhsR1cTCHQUVcoguUmOohMo87297/H1Z0Zye3GF4ivvxcpX8fboLILLR2Em76QV8RrjP4sxrgBuOA9rBIumw==", + "node_modules/eslint-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.8.2", - "eslint-plugin-react": "^7.20.6", - "remark-mdx": "^1.6.16", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "tslib": "^2.0.1", - "unified": "^9.1.0", - "vfile": "^4.1.1" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=6.9.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "optionalDependencies": { - "rebass": "^4.0.7" - }, - "peerDependencies": { - "eslint": ">=5.0.0" + "url": "https://opencollective.com/babel" } }, - "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "node_modules/eslint-mdx/node_modules/@babel/generator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", + "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "node_modules/eslint-mdx/node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "node_modules/eslint-mdx/node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/eslint-mdx/node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/eslint-mdx/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, - "node_modules/eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "node_modules/eslint-mdx/node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-mdx/node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/eslint-mdx/node_modules/@babel/parser": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", + "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "node_modules/eslint-mdx/node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "node_modules/eslint-plugin-react/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "node_modules/eslint-mdx/node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "node_modules/eslint-plugin-react/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "node_modules/eslint-mdx/node_modules/@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "node_modules/eslint-mdx/node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "node_modules/eslint-mdx/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/eslint-plugin-react/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "node_modules/eslint-mdx/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-react/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/eslint-mdx/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "node_modules/eslint-mdx/node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "node_modules/eslint-mdx/node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "node_modules/eslint-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "semver": "bin/semver" } }, - "node_modules/eslint-plugin-react/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "node_modules/eslint-mdx/node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "node_modules/eslint-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dependencies": { - "esrecurse": "4.3.0", - "estraverse": "4.3.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-utils": { + "node_modules/eslint-plugin-markdown": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.1.0.tgz", + "integrity": "sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "remark-parse": "^7.0.0", + "unified": "^6.1.2" }, "engines": { - "node": ">=6" + "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-plugin-markdown/node_modules/parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "node_modules/eslint-plugin-markdown/node_modules/remark-parse": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", + "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/eslint-plugin-markdown/node_modules/unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/eslint-plugin-markdown/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-plugin-markdown/node_modules/unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "unist-util-visit": "^1.1.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/eslint-plugin-markdown/node_modules/unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "node_modules/eslint-plugin-markdown/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-plugin-markdown/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "unist-util-is": "^3.0.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/eslint-plugin-markdown/node_modules/vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/eslint-plugin-markdown/node_modules/vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-markdown/node_modules/vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "unist-util-stringify-position": "^1.1.1" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint-plugin-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", + "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.13.0", + "eslint-plugin-markdown": "^2.1.0", + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "synckit": "^0.1.5", + "tslib": "^2.2.0", + "unified": "^9.2.1", + "vfile": "^4.2.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/generator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", + "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, - "engines": { - "node": ">= 4" + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "node_modules/eslint/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/@babel/parser": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", + "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", "dev": true, "bin": { - "semver": "bin/semver.js" + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/eslint-plugin-mdx/node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", "dev": true, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/eslint-plugin-mdx/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-plugin-mdx/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "engines": { "node": ">=4" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "node_modules/eslint-plugin-mdx/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" }, - "engines": { - "node": ">=0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "node_modules/eslint-plugin-mdx/node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "5.2.0" + "node_modules/eslint-plugin-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "node_modules/eta": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.11.0.tgz", - "integrity": "sha512-lfqIE6qD55WFYT6E0phTBUe0sapHJhfvRDB7jSpXxFGwzDaP69kQqRyF7krBe8I1QzF5nE1yAByiIOLB630x4Q==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "node_modules/eslint-plugin-mdx/node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true }, - "node_modules/eval": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.4.tgz", - "integrity": "sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw==", + "node_modules/eslint-plugin-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, "dependencies": { - "require-like": "0.1.2" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" - }, - "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "node_modules/eslint-plugin-react": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "dev": true, "dependencies": { - "original": "1.0.2" + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.3", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.3", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.4" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/eslint-plugin-react/node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, "dependencies": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.3", - "strip-eof": "1.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.1", - "shebang-command": "1.2.0", - "which": "1.3.1" + "node_modules/eslint-plugin-react/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "node_modules/eslint-plugin-react/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "node_modules/eslint-plugin-react/node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/eslint-plugin-react/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, "dependencies": { - "shebang-regex": "1.0.0" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "2.0.0" + "node_modules/eslint-plugin-react/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/eslint-plugin-react/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/eslint-plugin-react/node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, "dependencies": { - "is-descriptor": "0.1.6" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/eslint-plugin-react/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "dependencies": { - "accepts": "1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.6", - "qs": "6.7.0", - "range-parser": "1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "type-is": "1.6.18", - "utils-merge": "1.0.1", - "vary": "1.1.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/eslint-plugin-react/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dependencies": { - "is-extendable": "0.1.1" + "esrecurse": "4.3.0", + "estraverse": "4.3.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "dependencies": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" } }, - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "1.0.2" + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, "dependencies": { - "kind-of": "6.0.3" + "@babel/highlight": "^7.10.4" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "6.0.3" + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.3", - "@nodelib/fs.walk": "1.2.4", - "glob-parent": "5.1.1", - "merge2": "1.4.1", - "micromatch": "4.0.2", - "picomatch": "2.2.2" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { - "punycode": "1.3.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "dependencies": { - "reusify": "1.0.4" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "node_modules/eslint/node_modules/globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, "dependencies": { - "websocket-driver": "0.6.5" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", - "dependencies": { - "fbjs": "^0.8.4" + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/fbjs/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3." + "node_modules/eslint/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/feed": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", - "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "node_modules/eslint/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "dependencies": { - "xml-js": "^1.6.11" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "escape-string-regexp": "1.0.5" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", - "dependencies": { - "loader-utils": "2.0.0", - "schema-utils": "3.0.0" + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" } }, - "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==", - "optional": true - }, - "node_modules/filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "dependencies": { - "to-regex-range": "5.0.1" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "statuses": "1.5.0", - "unpipe": "1.0.0" + "estraverse": "5.2.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "1.0.1", - "make-dir": "2.1.0", - "pkg-dir": "3.0.0" - } + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true, - "optional": true + "node_modules/eta": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.11.0.tgz", + "integrity": "sha512-lfqIE6qD55WFYT6E0phTBUe0sapHJhfvRDB7jSpXxFGwzDaP69kQqRyF7krBe8I1QzF5nE1yAByiIOLB630x4Q==" }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "3.0.0" - } + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "node_modules/eval": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.4.tgz", + "integrity": "sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw==", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "require-like": "0.1.2" } }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" }, - "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==", + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dependencies": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "original": "1.0.2" } }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, - "node_modules/flush-write-stream/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==", + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dependencies": { - "safe-buffer": "5.1.2" + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.3", + "strip-eof": "1.0.0" } }, - "node_modules/flux": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", - "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dependencies": { - "fbemitter": "^2.0.0", - "fbjs": "^0.8.0" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0-beta || ^16.0.0" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.7.1", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, - "node_modules/follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dependencies": { - "for-in": "1.0.2" + "shebang-regex": "1.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "babel-code-frame": "6.26.0", - "chalk": "2.4.2", - "chokidar": "3.4.3", - "micromatch": "3.1.10", - "minimatch": "3.0.4", - "semver": "5.7.1", - "tapable": "1.1.3", - "worker-rpc": "0.1.1" + "isexe": "2.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dependencies": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", + "debug": "2.6.9", + "define-property": "0.2.5", "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", "to-regex": "3.0.2" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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==", "dependencies": { - "is-extendable": "0.1.1" + "ms": "2.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "is-descriptor": "0.1.6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/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==", + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dependencies": { - "is-plain-object": "2.0.4" + "accepts": "1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.6", + "qs": "6.7.0", + "range-parser": "1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "type-is": "1.6.18", + "utils-merge": "1.0.1", + "vary": "1.1.2" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "ms": "2.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", @@ -7072,430 +7000,437 @@ "is-extendable": "0.1.1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "3.2.2" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dependencies": { - "is-buffer": "1.1.6" + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dependencies": { - "arr-diff": "4.0.0", "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", "regex-not": "1.0.2", "snapdragon": "0.8.2", "to-regex": "3.0.2" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-descriptor": "1.0.2" } }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "map-cache": "0.2.2" + "kind-of": "6.0.3" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "kind-of": "6.0.3" } }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" } }, - "node_modules/from2/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "dependencies": { - "graceful-fs": "4.2.4", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.walk": "1.2.4", + "glob-parent": "5.1.1", + "merge2": "1.4.1", + "micromatch": "4.0.2", + "picomatch": "2.2.2" } }, - "node_modules/fs-minipass": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", "dependencies": { - "minipass": "3.1.3" + "punycode": "1.3.2" } }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", "dependencies": { - "graceful-fs": "4.2.4", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.7" + "reusify": "1.0.4" } }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "websocket-driver": "0.6.5" } }, - "node_modules/fs-write-stream-atomic/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==", + "node_modules/fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", "dependencies": { - "safe-buffer": "5.1.2" + "fbjs": "^0.8.4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true + "node_modules/fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/fbjs/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3." }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/feed": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", + "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "1.0.5" + } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "flat-cache": "^3.0.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", "dependencies": { - "pump": "3.0.0" + "loader-utils": "2.0.0", + "schema-utils": "3.0.0" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "node_modules/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" } }, - "node_modules/github-slugger/node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + "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==", + "optional": true }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/filesize": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", + "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.4", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "to-regex-range": "5.0.1" } }, - "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { - "is-glob": "4.0.1" + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "statuses": "1.5.0", + "unpipe": "1.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "node_modules/global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "ini": "1.3.5" + "ms": "2.0.0" } }, - "node_modules/global-modules": { + "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dependencies": { - "global-prefix": "3.0.0" + "commondir": "1.0.1", + "make-dir": "2.1.0", + "pkg-dir": "3.0.0" } }, - "node_modules/global-prefix": { + "node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "ini": "1.3.5", - "kind-of": "6.0.3", - "which": "1.3.1" + "locate-path": "3.0.0" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, "dependencies": { - "isexe": "2.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dependencies": { - "@types/glob": "7.1.3", - "array-union": "2.1.0", - "dir-glob": "3.0.1", - "fast-glob": "3.2.4", - "glob": "7.1.6", - "ignore": "5.1.8", - "merge2": "1.4.1", - "slash": "3.0.0" - } + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, + "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==", "dependencies": { - "delegate": "^3.1.2" + "inherits": "2.0.4", + "readable-stream": "2.3.7" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "@sindresorhus/is": "0.14.0", - "@szmarczak/http-timer": "1.1.2", - "cacheable-request": "6.1.0", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "4.1.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.1", - "p-cancelable": "1.1.0", - "to-readable-stream": "1.0.0", - "url-parse-lax": "3.0.0" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "node_modules/gray-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", - "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "node_modules/flush-write-stream/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==", "dependencies": { - "js-yaml": "3.14.0", - "kind-of": "6.0.3", - "section-matter": "1.0.0", - "strip-bom-string": "1.0.0" + "safe-buffer": "5.1.2" } }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "node_modules/flux": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", + "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", "dependencies": { - "duplexer": "0.1.2", - "pify": "4.0.1" + "fbemitter": "^2.0.0", + "fbjs": "^0.8.0" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0-beta || ^16.0.0" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dependencies": { - "function-bind": "1.1.1" + "for-in": "1.0.2" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", "dependencies": { - "ansi-regex": "2.1.1" + "babel-code-frame": "6.26.0", + "chalk": "2.4.2", + "chokidar": "3.4.3", + "micromatch": "3.1.10", + "minimatch": "3.0.4", + "semver": "5.7.1", + "tapable": "1.1.3", + "worker-rpc": "0.1.1" } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/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==", "dependencies": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "is-plain-object": "2.0.4" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { + "extend-shallow": "2.0.1", "is-number": "3.0.0", - "kind-of": "4.0.0" + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" } }, - "node_modules/has-values/node_modules/is-number": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", @@ -7503,7 +7438,7 @@ "kind-of": "3.2.2" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", @@ -7511,197 +7446,119 @@ "is-buffer": "1.1.6" } }, - "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "is-buffer": "1.1.6" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "inherits": "2.0.4", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dependencies": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "map-cache": "0.2.2" } }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", - "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", - "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", - "dependencies": { - "@types/parse5": "^5.0.0", - "ccount": "^1.0.0", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", - "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "inherits": "2.0.4", + "readable-stream": "2.3.7" } }, - "node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "node_modules/from2/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==", "dependencies": { - "@babel/runtime": "7.12.1", - "loose-envify": "1.4.0", - "resolve-pathname": "3.0.0", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3", - "value-equal": "1.0.1" + "safe-buffer": "5.1.2" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "graceful-fs": "4.2.4", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "react-is": "16.13.1" + "minipass": "3.1.3" } }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dependencies": { - "inherits": "2.0.4", - "obuf": "1.1.2", - "readable-stream": "2.3.7", - "wbuf": "1.7.3" + "graceful-fs": "4.2.4", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.7" } }, - "node_modules/hpack.js/node_modules/readable-stream": { + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", @@ -7715,7 +7572,7 @@ "util-deprecate": "1.0.2" } }, - "node_modules/hpack.js/node_modules/string_decoder": { + "node_modules/fs-write-stream-atomic/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==", @@ -7723,6928 +7580,6387 @@ "safe-buffer": "5.1.2" } }, - "node_modules/hsl-regex": { + "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dependencies": { - "camel-case": "4.1.1", - "clean-css": "4.2.3", - "commander": "4.1.1", - "he": "1.2.0", - "param-case": "3.0.3", - "relateurl": "0.2.7", - "terser": "4.8.0" - } + "node_modules/gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" }, - "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", - "dependencies": { - "@types/html-minifier-terser": "5.1.1", - "@types/tapable": "1.0.6", - "@types/webpack": "4.41.22", - "html-minifier-terser": "5.1.1", - "loader-utils": "1.4.0", - "lodash": "4.17.20", - "pretty-error": "2.1.2", - "tapable": "1.1.3", - "util.promisify": "1.0.0" - } + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, - "node_modules/html-webpack-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { - "minimist": "1.2.5" + "pump": "3.0.0" } }, - "node_modules/html-webpack-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, - "node_modules/html-webpack-plugin/node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "node_modules/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", "dependencies": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.1.0" + "emoji-regex": ">=6.0.0 <=6.1.1" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "node_modules/github-slugger/node_modules/emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { - "domelementtype": "1.3.1", - "domhandler": "2.4.2", - "domutils": "1.5.1", - "entities": "1.1.2", + "fs.realpath": "1.0.0", + "inflight": "1.0.6", "inherits": "2.0.4", - "readable-stream": "3.6.0" + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dependencies": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "toidentifier": "1.0.0" + "is-glob": "4.0.1" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", "dependencies": { - "eventemitter3": "4.0.7", - "follow-redirects": "1.13.0", - "requires-port": "1.0.0" + "ini": "1.3.5" } }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dependencies": { - "http-proxy": "1.18.1", - "is-glob": "4.0.1", - "lodash": "4.17.20", - "micromatch": "3.1.10" + "global-prefix": "3.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "ini": "1.3.5", + "kind-of": "6.0.3", + "which": "1.3.1" } }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "is-extendable": "0.1.1" + "isexe": "2.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dependencies": { - "is-plain-object": "2.0.4" + "@types/glob": "7.1.3", + "array-union": "2.1.0", + "dir-glob": "3.0.1", + "fast-glob": "3.2.4", + "glob": "7.1.6", + "ignore": "5.1.8", + "merge2": "1.4.1", + "slash": "3.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "delegate": "^3.1.2" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { - "is-extendable": "0.1.1" + "@sindresorhus/is": "0.14.0", + "@szmarczak/http-timer": "1.1.2", + "cacheable-request": "6.1.0", + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "4.1.0", + "lowercase-keys": "1.0.1", + "mimic-response": "1.0.1", + "p-cancelable": "1.1.0", + "to-readable-stream": "1.0.0", + "url-parse-lax": "3.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "node_modules/gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", "dependencies": { - "kind-of": "3.2.2" + "js-yaml": "3.14.0", + "kind-of": "6.0.3", + "section-matter": "1.0.0", + "strip-bom-string": "1.0.0" } }, - "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dependencies": { - "is-buffer": "1.1.6" + "duplexer": "0.1.2", + "pify": "4.0.1" } }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "safer-buffer": "2.1.2" + "function-bind": "1.1.1" } }, - "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dependencies": { - "postcss": "7.0.35" + "ansi-regex": "2.1.1" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "node_modules/immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dependencies": { - "import-from": "2.1.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dependencies": { - "parent-module": "1.0.1", - "resolve-from": "4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" } }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "resolve-from": "3.0.0" + "kind-of": "3.2.2" } }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "is-buffer": "1.1.6" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "node_modules/indent-string": { + "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "node_modules/infima": { - "version": "0.2.0-alpha.13", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", - "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dependencies": { - "once": "1.4.0", - "wrappy": "1.0.2" + "is-buffer": "1.1.6" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dependencies": { - "ansi-escapes": "4.3.1", - "chalk": "4.1.0", - "cli-cursor": "3.1.0", - "cli-width": "3.0.0", - "external-editor": "3.1.0", - "figures": "3.2.0", - "lodash": "4.17.20", - "mute-stream": "0.0.8", - "run-async": "2.4.1", - "rxjs": "6.6.3", - "string-width": "4.2.0", - "strip-ansi": "6.0.0", - "through": "2.3.8" + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { - "color-convert": "2.0.1" + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/hast-to-hyperscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", + "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", "dependencies": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/hast-util-from-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", + "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", "dependencies": { - "color-name": "1.1.4" + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "5.0.0" + "node_modules/hast-util-parse-selector": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "dependencies": { - "has-flag": "4.0.0" + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "dependencies": { - "default-gateway": "4.2.0", - "ipaddr.js": "1.9.1" + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, + "node_modules/hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "7.12.1", + "loose-envify": "1.4.0", + "resolve-pathname": "3.0.0", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3", + "value-equal": "1.0.1" + } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dependencies": { - "kind-of": "3.2.2" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "is-buffer": "1.1.6" + "react-is": "16.13.1" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dependencies": { + "inherits": "2.0.4", + "obuf": "1.1.2", + "readable-stream": "2.3.7", + "wbuf": "1.7.3" } }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/hpack.js/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==", "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "safe-buffer": "5.1.2" } }, - "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "2.1.0" - } + "node_modules/html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" }, - "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "camel-case": "4.1.1", + "clean-css": "4.2.3", + "commander": "4.1.1", + "he": "1.2.0", + "param-case": "3.0.3", + "relateurl": "0.2.7", + "terser": "4.8.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==" + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" }, - "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", "dependencies": { - "ci-info": "2.0.0" + "@types/html-minifier-terser": "5.1.1", + "@types/tapable": "1.0.6", + "@types/webpack": "4.41.22", + "html-minifier-terser": "5.1.1", + "loader-utils": "1.4.0", + "lodash": "4.17.20", + "pretty-error": "2.1.2", + "tapable": "1.1.3", + "util.promisify": "1.0.0" } }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "css-color-names": "0.0.4", - "hex-color-regex": "1.1.0", - "hsl-regex": "1.0.0", - "hsla-regex": "1.0.0", - "rgb-regex": "1.0.1", - "rgba-regex": "1.0.0" + "minimist": "1.2.5" } }, - "node_modules/is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "dev": true, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/html-webpack-plugin/node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dependencies": { - "kind-of": "3.2.2" + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.1.0" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dependencies": { - "is-buffer": "1.1.6" + "domelementtype": "1.3.1", + "domhandler": "2.4.2", + "domutils": "1.5.1", + "entities": "1.1.2", + "inherits": "2.0.4", + "readable-stream": "3.6.0" } }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dependencies": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "toidentifier": "1.0.0" } }, - "node_modules/is-descriptor/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==" - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { - "is-extglob": "2.1.1" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "eventemitter3": "4.0.7", + "follow-redirects": "1.13.0", + "requires-port": "1.0.0" } }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dependencies": { - "global-dirs": "2.0.1", - "is-path-inside": "3.0.2" + "http-proxy": "1.18.1", + "is-glob": "4.0.1", + "lodash": "4.17.20", + "micromatch": "3.1.10" } }, - "node_modules/is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "is-path-inside": "2.1.0" + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" } }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "path-is-inside": "1.0.2" + "is-extendable": "0.1.1" } }, - "node_modules/is-path-inside": { + "node_modules/http-proxy-middleware/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "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==", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "isobject": "3.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, - "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", "dependencies": { - "has-symbols": "1.0.1" + "is-plain-object": "2.0.4" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" } }, - "node_modules/is-svg": { + "node_modules/http-proxy-middleware/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "html-comment-regex": "1.1.2" + "kind-of": "3.2.2" } }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "has-symbols": "1.0.1" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "is-buffer": "1.1.6" } }, - "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==" - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "is-docker": "2.1.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { + "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "safer-buffer": "2.1.2" } }, - "node_modules/jest-worker": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", - "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dependencies": { - "@types/node": "14.11.10", - "merge-stream": "2.0.0", - "supports-color": "7.2.0" + "postcss": "7.0.35" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "node_modules/immer": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dependencies": { - "has-flag": "4.0.0" + "import-from": "2.1.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dependencies": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "parent-module": "1.0.1", + "resolve-from": "4.0.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dependencies": { + "resolve-from": "3.0.0" + } }, - "node_modules/json-buffer": { + "node_modules/import-from/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dependencies": { + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "node_modules/json-stable-stringify-without-jsonify": { + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "node_modules/indexes-of": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, - "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dependencies": { - "minimist": "1.2.5" + "node_modules/infima": { + "version": "0.2.0-alpha.13", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", + "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==", + "engines": { + "node": ">=8" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { - "graceful-fs": "4.2.4" + "once": "1.4.0", + "wrappy": "1.0.2" } }, - "node_modules/jsx-ast-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", - "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.1" - }, - "engines": { - "node": ">=4.0" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dependencies": { - "json-buffer": "3.0.0" + "ansi-escapes": "4.3.1", + "chalk": "4.1.0", + "cli-cursor": "3.1.0", + "cli-width": "3.0.0", + "external-editor": "3.1.0", + "figures": "3.2.0", + "lodash": "4.17.20", + "mute-stream": "0.0.8", + "run-async": "2.4.1", + "rxjs": "6.6.3", + "string-width": "4.2.0", + "strip-ansi": "6.0.0", + "through": "2.3.8" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, - "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==" + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "2.0.1" + } }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dependencies": { - "lodash": "4.17.20", - "webpack-sources": "1.4.3" + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "package-json": "6.5.0" + "color-name": "1.1.4" } }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "ansi-regex": "5.0.0" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "2.1.3" + "has-flag": "4.0.0" } }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dependencies": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "default-gateway": "4.2.0", + "ipaddr.js": "1.9.1" } }, - "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "3.2.2" + } }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } }, - "node_modules/lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + "node_modules/is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" }, - "node_modules/lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "node_modules/lodash.has": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "2.1.0" + } }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" + "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==" }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "node_modules/is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "2.0.0" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dependencies": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.2.0" + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" } }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "node_modules/is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dev": true, "dependencies": { - "lodash._reinterpolate": "3.0.0" + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "3.2.2" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } }, - "node_modules/loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "js-tokens": "4.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, - "node_modules/lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dependencies": { - "tslib": "1.14.1" - } + "node_modules/is-descriptor/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==" }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "4.0.0" - } + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" }, - "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==", - "dependencies": { - "pify": "4.0.1", - "semver": "5.7.1" - } + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dependencies": { - "object-visit": "1.0.1" + "is-extglob": "2.1.1" } }, - "node_modules/markdown-escapes": { + "node_modules/is-hexadecimal": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "global-dirs": "2.0.1", + "is-path-inside": "3.0.2" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "3.1.0", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" - } + "node_modules/is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" }, - "node_modules/mdast-squeeze-paragraphs": { + "node_modules/is-npm": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", "dev": true, - "dependencies": { - "unist-util-visit": "^2.0.0" + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mdast-util-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", - "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "is-path-inside": "2.1.0" } }, - "node_modules/mdast-util-to-hast": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz", - "integrity": "sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ==", + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.3", - "mdast-util-definitions": "^3.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "path-is-inside": "1.0.2" } }, - "node_modules/mdast-util-to-string": { + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, - "node_modules/mdn-data": { + "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dependencies": { - "errno": "0.1.7", - "readable-stream": "2.3.7" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "isobject": "3.0.1" } }, - "node_modules/memory-fs/node_modules/string_decoder": { + "node_modules/is-regex": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "5.1.2" - } - }, - "node_modules/merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dependencies": { - "arr-union": "3.1.0", - "clone-deep": "0.2.4", - "kind-of": "3.2.2" + "has-symbols": "1.0.1" } }, - "node_modules/merge-deep/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "1.1.6" + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "node_modules/is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", "dependencies": { - "braces": "3.0.2", - "picomatch": "2.2.2" + "html-comment-regex": "1.1.2" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dependencies": { - "bn.js": "4.11.9", - "brorand": "1.1.0" + "has-symbols": "1.0.1" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "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==" }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dependencies": { - "mime-db": "1.44.0" + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "2.1.1" + } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "node_modules/mini-create-react-context": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", - "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", - "dependencies": { - "@babel/runtime": "7.12.1", - "tiny-warning": "1.0.3" - } + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "node_modules/mini-css-extract-plugin": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", - "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", - "dependencies": { - "loader-utils": "1.4.0", - "normalize-url": "1.9.1", - "schema-utils": "1.0.0", - "webpack-sources": "1.4.3" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/mini-css-extract-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" - } + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/jest-worker": { + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", + "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "@types/node": "14.11.10", + "merge-stream": "2.0.0", + "supports-color": "7.2.0" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "brace-expansion": "1.1.11" + "has-flag": "4.0.0" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dependencies": { - "yallist": "4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, - "node_modules/minipass-collect": { + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dependencies": { - "minipass": "3.1.3" - } + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "3.1.3" - } + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dependencies": { - "minipass": "3.1.3" + "minimist": "1.2.5" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dependencies": { - "minipass": "3.1.3", - "yallist": "4.0.0" + "graceful-fs": "4.2.4" } }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "node_modules/jsx-ast-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", + "dev": true, "dependencies": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.4", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.2.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "array-includes": "^3.1.1", + "object.assign": "^4.1.1" + }, + "engines": { + "node": ">=4.0" } }, - "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==", + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "json-buffer": "3.0.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { + "node_modules/killable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "2.0.4" - } + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" }, - "node_modules/mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "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==" + }, + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "dependencies": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" + "lodash": "4.17.20", + "webpack-sources": "1.4.3" } }, - "node_modules/mixin-object/node_modules/for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dependencies": { - "minimist": "1.2.5" + "package-json": "6.5.0" } }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dependencies": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "7.1.6" - } + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "dependencies": { - "dns-packet": "1.3.1", - "thunky": "1.1.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "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.3", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "2.1.3" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "p-locate": "3.0.0", + "path-exists": "3.0.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==", - "dependencies": { - "is-plain-object": "2.0.4" - } + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "node_modules/no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dependencies": { - "lower-case": "2.0.1", - "tslib": "1.14.1" - } + "node_modules/lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dependencies": { - "lodash.toarray": "^4.4.0" - } + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, - "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "1.5.0", - "browserify-zlib": "0.2.0", - "buffer": "4.9.2", - "console-browserify": "1.2.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "3.2.0", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.1", - "process": "0.11.10", - "punycode": "1.3.2", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.7", - "stream-browserify": "2.0.2", - "stream-http": "2.8.3", - "string_decoder": "1.3.0", - "timers-browserify": "2.0.11", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.11.1", - "vm-browserify": "1.1.2" - } + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } + "node_modules/lodash.flatmap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", + "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" }, - "node_modules/node-libs-browser/node_modules/readable-stream/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, - "node_modules/node-releases": { - "version": "1.1.63", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", - "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==" + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" }, - "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==" + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" }, - "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "node_modules/lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dependencies": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.2.0" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dependencies": { - "path-key": "2.0.1" + "lodash._reinterpolate": "3.0.0" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "1.0.0" + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/null-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", - "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "loader-utils": "1.4.0", - "schema-utils": "1.0.0" + "js-tokens": "4.0.0" } }, - "node_modules/null-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/lower-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", "dependencies": { - "minimist": "1.2.5" + "tslib": "1.14.1" } }, - "node_modules/null-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "yallist": "4.0.0" } }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "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==", "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "pify": "4.0.1", + "semver": "5.7.1" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dependencies": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "object-visit": "1.0.1" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "0.1.6" + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, "dependencies": { - "is-buffer": "1.1.6" + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "node_modules/object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", - "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.18.0-next.1" - } - }, - "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==" - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "3.0.1" - } - }, - "node_modules/object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.18.0-next.1", - "has-symbols": "1.0.1", - "object-keys": "1.1.1" + "hash-base": "3.1.0", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" } }, - "node_modules/object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "dev": true, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "unist-util-remove": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "node_modules/mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "unist-util-visit": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.fromentries/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, + "node_modules/mdast-util-definitions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "unist-util-visit": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.fromentries/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/mdast-util-to-hast": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz", + "integrity": "sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.3", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.fromentries/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.fromentries/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dependencies": { + "errno": "0.1.7", + "readable-stream": "2.3.7" } }, - "node_modules/object.fromentries/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/object.fromentries/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/memory-fs/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==", + "dependencies": { + "safe-buffer": "5.1.2" } }, - "node_modules/object.fromentries/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, + "node_modules/merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "arr-union": "3.1.0", + "clone-deep": "0.2.4", + "kind-of": "3.2.2" } }, - "node_modules/object.fromentries/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, + "node_modules/merge-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "is-buffer": "1.1.6" } }, - "node_modules/object.fromentries/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "braces": "3.0.2", + "picomatch": "2.2.2" } }, - "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "bn.js": "4.11.9", + "brorand": "1.1.0" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dependencies": { - "isobject": "3.0.1" + "mime-db": "1.44.0" } }, - "node_modules/object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "node_modules/mini-create-react-context": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7", - "function-bind": "1.1.1", - "has": "1.0.3" + "@babel/runtime": "7.12.1", + "tiny-warning": "1.0.3" } }, - "node_modules/object.values/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/mini-css-extract-plugin": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", + "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "loader-utils": "1.4.0", + "normalize-url": "1.9.1", + "schema-utils": "1.0.0", + "webpack-sources": "1.4.3" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "node_modules/mini-css-extract-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "ee-first": "1.1.1" + "minimist": "1.2.5" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "node_modules/once": { + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "wrappy": "1.0.2" + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dependencies": { - "mimic-fn": "2.1.0" + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" } }, - "node_modules/open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", - "dependencies": { - "is-docker": "2.1.1", - "is-wsl": "2.2.0" - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dependencies": { - "is-wsl": "1.1.0" + "brace-expansion": "1.1.11" } }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", - "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dependencies": { - "cssnano": "4.1.10", - "last-call-webpack-plugin": "3.0.0" + "yallist": "4.0.0" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" + "minipass": "3.1.3" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dependencies": { - "url-parse": "1.4.7" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dependencies": { - "p-try": "2.2.0" + "minipass": "3.1.3" } }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dependencies": { - "p-limit": "2.3.0" + "minipass": "3.1.3" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { - "aggregate-error": "3.1.0" + "minipass": "3.1.3", + "yallist": "4.0.0" } }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dependencies": { - "retry": "0.12.0" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.4", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.2.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "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==", "dependencies": { - "got": "9.6.0", - "registry-auth-token": "4.2.0", - "registry-url": "5.1.0", - "semver": "6.3.0" + "for-in": "1.0.2", + "is-extendable": "1.0.1" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "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==", "dependencies": { - "cyclist": "1.0.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "is-plain-object": "2.0.4" } }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "for-in": "0.1.8", + "is-extendable": "0.1.1" } }, - "node_modules/parallel-transform/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" }, - "node_modules/param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "dot-case": "3.0.3", - "tslib": "1.14.1" + "minimist": "1.2.5" } }, - "node_modules/parent-module": { + "node_modules/move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dependencies": { - "callsites": "3.1.0" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.5", + "rimraf": "2.7.1", + "run-queue": "1.0.3" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { - "asn1.js": "5.4.1", - "browserify-aes": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.1.1", - "safe-buffer": "5.1.2" + "glob": "7.1.6" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dependencies": { - "@babel/code-frame": "7.10.4", - "error-ex": "1.3.2", - "json-parse-even-better-errors": "2.3.1", - "lines-and-columns": "1.1.6" + "dns-packet": "1.3.1", + "thunky": "1.1.0" } }, - "node_modules/parse-numeric-range": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", - "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true }, - "node_modules/pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dependencies": { - "no-case": "3.0.3", - "tslib": "1.14.1" + "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.3", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, - "node_modules/path-is-absolute": { + "node_modules/nanomatch/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dependencies": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "is-plain-object": "2.0.4" } }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", "dependencies": { - "pinkie": "2.0.4" + "lower-case": "2.0.1", + "tslib": "1.14.1" } }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", "dependencies": { - "find-up": "3.0.0" + "lodash.toarray": "^4.4.0" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dependencies": { - "find-up": "3.0.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dependencies": { - "ts-pnp": "1.2.0" + "assert": "1.5.0", + "browserify-zlib": "0.2.0", + "buffer": "4.9.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.2.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.1", + "process": "0.11.10", + "punycode": "1.3.2", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.7", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.3.0", + "timers-browserify": "2.0.11", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.11.1", + "vm-browserify": "1.1.2" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "async": "2.6.3", - "debug": "3.2.6", - "mkdirp": "0.5.5" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "node_modules/node-libs-browser/node_modules/readable-stream/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==", "dependencies": { - "ms": "2.1.2" + "safe-buffer": "5.1.2" } }, - "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "node_modules/node-releases": { + "version": "1.1.63", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", + "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==" }, - "node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dependencies": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" - } + "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==" }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4" - } + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4", - "postcss-value-parser": "4.1.0" + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" } }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "path-key": "2.0.1" } }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dependencies": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" - } + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" - } + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" }, - "node_modules/postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dependencies": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "boolbase": "1.0.0" } }, - "node_modules/postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "node_modules/null-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "loader-utils": "1.4.0", + "schema-utils": "1.0.0" } }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "node_modules/null-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "browserslist": "4.14.5", - "color": "3.1.3", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "minimist": "1.2.5" } }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "node_modules/null-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" } }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "node_modules/null-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dependencies": { - "postcss": "7.0.35" + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" } }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" - } + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" } }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "is-descriptor": "0.1.6" } }, - "node_modules/postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "is-buffer": "1.1.6" } }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "define-properties": "1.1.3", + "es-abstract": "1.18.0-next.1" } }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dependencies": { - "postcss": "7.0.35" - } + "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==" }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dependencies": { - "postcss": "7.0.35" + "isobject": "3.0.1" } }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "node_modules/object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", "dependencies": { - "postcss": "7.0.35" + "define-properties": "1.1.3", + "es-abstract": "1.18.0-next.1", + "has-symbols": "1.0.1", + "object-keys": "1.1.1" } }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "node_modules/object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, "dependencies": { - "postcss": "7.0.35" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "node_modules/object.fromentries/node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dependencies": { - "postcss": "7.0.35" + "node_modules/object.fromentries/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dependencies": { - "postcss": "7.0.35" + "node_modules/object.fromentries/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", - "dependencies": { - "postcss": "7.0.35" + "node_modules/object.fromentries/node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "node_modules/object.fromentries/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, "dependencies": { - "postcss": "7.0.35" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "node_modules/object.fromentries/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "node_modules/object.fromentries/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "dependencies": { - "lodash.template": "4.5.0", - "postcss": "7.0.35" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "node_modules/object.fromentries/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "dependencies": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "node_modules/object.fromentries/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, "dependencies": { - "cosmiconfig": "5.2.1", - "import-cwd": "2.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-load-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dependencies": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.14.0", - "parse-json": "4.0.0" + "define-properties": "1.1.3", + "es-abstract": "1.17.7" } }, - "node_modules/postcss-load-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dependencies": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" } }, - "node_modules/postcss-load-config/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dependencies": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "isobject": "3.0.1" } }, - "node_modules/postcss-load-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + "node_modules/object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7", + "function-bind": "1.1.1", + "has": "1.0.3" + } }, - "node_modules/postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "node_modules/object.values/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dependencies": { - "loader-utils": "1.4.0", - "postcss": "7.0.35", - "postcss-load-config": "2.1.2", - "schema-utils": "1.0.0" + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" } }, - "node_modules/postcss-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dependencies": { - "minimist": "1.2.5" + "ee-first": "1.1.1" } }, - "node_modules/postcss-loader/node_modules/loader-utils": { + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "wrappy": "1.0.2" } }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "mimic-fn": "2.1.0" } }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "node_modules/open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", "dependencies": { - "postcss": "7.0.35" + "is-docker": "2.1.1", + "is-wsl": "2.2.0" } }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dependencies": { - "postcss": "7.0.35" - } + "node_modules/opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dependencies": { - "css-color-names": "0.0.4", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "stylehacks": "4.0.3" + "is-wsl": "1.1.0" } }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", "dependencies": { - "browserslist": "4.14.5", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2", - "vendors": "1.0.4" + "cssnano": "4.1.10", + "last-call-webpack-plugin": "3.0.0" } }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "dependencies": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dependencies": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "url-parse": "1.4.7" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - } + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dependencies": { - "alphanum-sort": "1.0.2", - "browserslist": "4.14.5", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" - } + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2" + "p-try": "2.2.0" } }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "p-limit": "2.3.0" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { - "postcss": "7.0.35" + "aggregate-error": "3.1.0" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dependencies": { - "icss-utils": "4.1.1", - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4", - "postcss-value-parser": "4.1.0" + "retry": "0.12.0" } }, - "node_modules/postcss-modules-scope": { + "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4" + "got": "9.6.0", + "registry-auth-token": "4.2.0", + "registry-url": "5.1.0", + "semver": "6.3.0" } }, - "node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dependencies": { - "icss-utils": "4.1.1", - "postcss": "7.0.35" + "cyclist": "1.0.1", + "inherits": "2.0.4", + "readable-stream": "2.3.7" } }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "postcss": "7.0.35" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "node_modules/parallel-transform/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==", "dependencies": { - "postcss": "7.0.35" + "safe-buffer": "5.1.2" } }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "node_modules/param-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", "dependencies": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "dot-case": "3.0.3", + "tslib": "1.14.1" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "callsites": "3.1.0" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "asn1.js": "5.4.1", + "browserify-aes": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.1.1", + "safe-buffer": "5.1.2" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dependencies": { - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "node_modules/parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", "dependencies": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "@babel/code-frame": "7.10.4", + "error-ex": "1.3.2", + "json-parse-even-better-errors": "2.3.1", + "lines-and-columns": "1.1.6" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/parse-numeric-range": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", + "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dependencies": { - "browserslist": "4.14.5", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - } + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "node_modules/pascal-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", + "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", "dependencies": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "no-case": "3.0.3", + "tslib": "1.14.1" } }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dependencies": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - } + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - } + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dependencies": { - "postcss": "7.0.35" - } + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dependencies": { - "postcss": "7.0.35" - } + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" - } + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dependencies": { - "autoprefixer": "9.8.6", - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "css-blank-pseudo": "0.1.4", - "css-has-pseudo": "0.10.0", - "css-prefers-color-scheme": "3.1.1", - "cssdb": "4.4.0", - "postcss": "7.0.35", - "postcss-attribute-case-insensitive": "4.0.2", - "postcss-color-functional-notation": "2.0.1", - "postcss-color-gray": "5.0.0", - "postcss-color-hex-alpha": "5.0.3", - "postcss-color-mod-function": "3.0.3", - "postcss-color-rebeccapurple": "4.0.1", - "postcss-custom-media": "7.0.8", - "postcss-custom-properties": "8.0.11", - "postcss-custom-selectors": "5.1.2", - "postcss-dir-pseudo-class": "5.0.0", - "postcss-double-position-gradients": "1.0.0", - "postcss-env-function": "2.0.2", - "postcss-focus-visible": "4.0.0", - "postcss-focus-within": "3.0.0", - "postcss-font-variant": "4.0.0", - "postcss-gap-properties": "2.0.0", - "postcss-image-set-function": "3.0.1", - "postcss-initial": "3.0.2", - "postcss-lab-function": "2.0.1", - "postcss-logical": "3.0.0", - "postcss-media-minmax": "4.0.0", - "postcss-nesting": "7.0.1", - "postcss-overflow-shorthand": "2.0.0", - "postcss-page-break": "2.0.0", - "postcss-place": "4.0.1", - "postcss-pseudo-class-any-link": "6.0.0", - "postcss-replace-overflow-wrap": "3.0.0", - "postcss-selector-matches": "4.0.0", - "postcss-selector-not": "4.0.0" - } + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "pinkie": "2.0.4" } }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dependencies": { - "browserslist": "4.14.5", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.35" + "find-up": "3.0.0" } }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dependencies": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "find-up": "3.0.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", "dependencies": { - "postcss": "7.0.35" + "ts-pnp": "1.2.0" } }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dependencies": { - "balanced-match": "1.0.0", - "postcss": "7.0.35" + "async": "2.6.3", + "debug": "3.2.6", + "mkdirp": "0.5.5" } }, - "node_modules/postcss-selector-not": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", - "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dependencies": { - "balanced-match": "1.0.0", - "postcss": "7.0.35" + "ms": "2.1.2" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dependencies": { - "cssesc": "3.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1", - "util-deprecate": "1.0.2" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, - "node_modules/postcss-svgo": { + "node_modules/postcss-attribute-case-insensitive": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", "dependencies": { - "is-svg": "3.0.0", "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "svgo": "1.3.2" + "postcss-selector-parser": "6.0.4" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", "dependencies": { - "alphanum-sort": "1.0.2", "postcss": "7.0.35", - "uniqs": "2.0.0" + "postcss-selector-parser": "6.0.4", + "postcss-value-parser": "4.1.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/postcss-values-parser": { + "node_modules/postcss-color-functional-notation": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", "dependencies": { - "flatten": "1.0.3", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/postcss/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", "dependencies": { - "has-flag": "3.0.0" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/postcss/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==" - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "3.0.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "node_modules/postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "dependencies": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "node_modules/prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" + "node_modules/postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dependencies": { - "lodash": "4.17.20", - "renderkid": "2.0.4" + "browserslist": "4.14.5", + "color": "3.1.3", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" - }, - "node_modules/prism-react-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz", - "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==", - "peerDependencies": { - "react": ">=0.14.9" - } + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/prismjs": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", - "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", - "optionalDependencies": { - "clipboard": "^2.0.0" + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dependencies": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "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==" + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" + "node_modules/postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "dependencies": { + "postcss": "7.0.35" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", "dependencies": { - "asap": "~2.0.3" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "node_modules/postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", "dependencies": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "react-is": "16.13.1" + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" } }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "node_modules/postcss-custom-selectors/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "node_modules/postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", "dependencies": { - "forwarded": "0.1.2", - "ipaddr.js": "1.9.1" + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dependencies": { - "bn.js": "4.11.9", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.6", - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dependencies": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "postcss": "7.0.35" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dependencies": { - "duplexify": "3.7.1", - "inherits": "2.0.4", - "pump": "2.0.1" + "postcss": "7.0.35" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dependencies": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "postcss": "7.0.35" } }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dependencies": { + "postcss": "7.0.35" + } }, - "node_modules/pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "node_modules/postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", "dependencies": { - "escape-goat": "2.1.1" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "node_modules/postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", "dependencies": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", "dependencies": { - "safe-buffer": "5.1.2" + "postcss": "7.0.35" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "node_modules/postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", "dependencies": { - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "postcss": "7.0.35" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "node_modules/postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "postcss": "7.0.35" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", "dependencies": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.5", - "strip-json-comments": "2.0.1" + "postcss": "7.0.35" } }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "node_modules/postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "peerDependencies": { - "react": ">=16.3.1" + "node_modules/postcss-initial": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", + "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "dependencies": { + "lodash.template": "4.5.0", + "postcss": "7.0.35" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "node_modules/postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", - "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", + "node_modules/postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0" + "cosmiconfig": "5.2.1", + "import-cwd": "2.1.0" } }, - "node_modules/react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", + "node_modules/postcss-load-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "7.3.0", - "pkg-up": "3.1.0", - "react-error-overlay": "6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.14.0", + "parse-json": "4.0.0" } }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "node_modules/postcss-load-config/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dependencies": { - "@babel/highlight": "7.10.4" + "caller-path": "2.0.0", + "resolve-from": "3.0.0" } }, - "node_modules/react-dev-utils/node_modules/@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - }, - "node_modules/react-dev-utils/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/postcss-load-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dependencies": { - "array-uniq": "1.0.3" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } }, - "node_modules/react-dev-utils/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/postcss-load-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "loader-utils": "1.4.0", + "postcss": "7.0.35", + "postcss-load-config": "2.1.2", + "schema-utils": "1.0.0" } }, - "node_modules/react-dev-utils/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/postcss-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "is-extendable": "0.1.1" + "minimist": "1.2.5" } }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", + "node_modules/postcss-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "caniuse-lite": "1.0.30001148", - "electron-to-chromium": "1.3.582", - "node-releases": "1.1.63", - "pkg-up": "3.1.0" + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" } }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" } }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "node_modules/postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "dependencies": { + "postcss": "7.0.35" + } }, - "node_modules/react-dev-utils/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "node_modules/postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "dependencies": { + "postcss": "7.0.35" + } }, - "node_modules/react-dev-utils/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "dependencies": { - "ms": "2.0.0" + "css-color-names": "0.0.4", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "stylehacks": "4.0.3" } }, - "node_modules/react-dev-utils/node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dependencies": { - "address": "1.1.2", - "debug": "2.6.9" + "browserslist": "4.14.5", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2", + "vendors": "1.0.4" } }, - "node_modules/react-dev-utils/node_modules/dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dependencies": { - "arrify": "1.0.1", - "path-type": "3.0.0" + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/react-dev-utils/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dependencies": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/react-dev-utils/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "cssnano-util-get-arguments": "4.0.0", + "is-color-stop": "1.1.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/extend-shallow/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==", + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dependencies": { - "is-plain-object": "2.0.4" + "alphanum-sort": "1.0.2", + "browserslist": "4.14.5", + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" } }, - "node_modules/react-dev-utils/node_modules/fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dependencies": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.3", - "glob-parent": "3.1.0", - "is-glob": "4.0.1", - "merge2": "1.4.1", - "micromatch": "3.1.10" + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2" } }, - "node_modules/react-dev-utils/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/react-dev-utils/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dependencies": { - "is-extendable": "0.1.1" + "postcss": "7.0.35" } }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dependencies": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "icss-utils": "4.1.1", + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4", + "postcss-value-parser": "4.1.0" } }, - "node_modules/react-dev-utils/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dependencies": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4" } }, - "node_modules/react-dev-utils/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dependencies": { - "is-extglob": "2.1.1" + "icss-utils": "4.1.1", + "postcss": "7.0.35" } }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "node_modules/postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", "dependencies": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.7", - "glob": "7.1.6", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" + "postcss": "7.0.35" } }, - "node_modules/react-dev-utils/node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "node_modules/react-dev-utils/node_modules/inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dependencies": { - "ansi-escapes": "4.3.1", - "chalk": "2.4.2", - "cli-cursor": "3.1.0", - "cli-width": "2.2.1", - "external-editor": "3.1.0", - "figures": "3.2.0", - "lodash": "4.17.20", - "mute-stream": "0.0.8", - "run-async": "2.4.1", - "rxjs": "6.6.3", - "string-width": "4.2.0", - "strip-ansi": "5.2.0", - "through": "2.3.8" + "postcss": "7.0.35" } }, - "node_modules/react-dev-utils/node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dependencies": { - "ansi-regex": "4.1.0" + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dependencies": { - "kind-of": "3.2.2" + "cssnano-util-get-arguments": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dependencies": { - "is-buffer": "1.1.6" + "cssnano-util-get-arguments": "4.0.0", + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dependencies": { - "minimist": "1.2.5" + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "2.1.0", - "json5": "1.0.1" + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "dependencies": { - "p-locate": "4.1.0" + "browserslist": "4.14.5", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "is-absolute-url": "2.1.0", + "normalize-url": "3.3.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dependencies": { - "p-limit": "2.3.0" + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/react-dev-utils/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dependencies": { - "pify": "3.0.0" + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-dev-utils/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "node_modules/react-dev-utils/node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/react-dev-utils/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", "dependencies": { - "ansi-regex": "5.0.0" + "postcss": "7.0.35" } }, - "node_modules/react-dev-utils/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "node_modules/react-dev-utils/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "postcss": "7.0.35" } }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "node_modules/postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" } }, - "node_modules/react-error-overlay": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", - "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" + "node_modules/postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "dependencies": { + "autoprefixer": "9.8.6", + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "css-blank-pseudo": "0.1.4", + "css-has-pseudo": "0.10.0", + "css-prefers-color-scheme": "3.1.1", + "cssdb": "4.4.0", + "postcss": "7.0.35", + "postcss-attribute-case-insensitive": "4.0.2", + "postcss-color-functional-notation": "2.0.1", + "postcss-color-gray": "5.0.0", + "postcss-color-hex-alpha": "5.0.3", + "postcss-color-mod-function": "3.0.3", + "postcss-color-rebeccapurple": "4.0.1", + "postcss-custom-media": "7.0.8", + "postcss-custom-properties": "8.0.11", + "postcss-custom-selectors": "5.1.2", + "postcss-dir-pseudo-class": "5.0.0", + "postcss-double-position-gradients": "1.0.0", + "postcss-env-function": "2.0.2", + "postcss-focus-visible": "4.0.0", + "postcss-focus-within": "3.0.0", + "postcss-font-variant": "4.0.0", + "postcss-gap-properties": "2.0.0", + "postcss-image-set-function": "3.0.1", + "postcss-initial": "3.0.2", + "postcss-lab-function": "2.0.1", + "postcss-logical": "3.0.0", + "postcss-media-minmax": "4.0.0", + "postcss-nesting": "7.0.1", + "postcss-overflow-shorthand": "2.0.0", + "postcss-page-break": "2.0.0", + "postcss-place": "4.0.1", + "postcss-pseudo-class-any-link": "6.0.0", + "postcss-replace-overflow-wrap": "3.0.0", + "postcss-selector-matches": "4.0.0", + "postcss-selector-not": "4.0.0" + } }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + "node_modules/postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + } }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dependencies": { - "object-assign": "4.1.1", - "prop-types": "15.7.2", - "react-fast-compare": "3.2.0", - "react-side-effect": "2.1.0" + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dependencies": { + "browserslist": "4.14.5", + "caniuse-api": "3.0.0", + "has": "1.0.3", + "postcss": "7.0.35" + } }, - "node_modules/react-json-view": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", - "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dependencies": { - "flux": "^3.1.3", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^6.1.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^15.5.4", - "react-dom": "^16.0.0 || ^15.5.4" + "cssnano-util-get-match": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "node_modules/postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", "dependencies": { - "prop-types": "15.7.2" + "postcss": "7.0.35" } }, - "node_modules/react-loadable-ssr-addon": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz", - "integrity": "sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw==", + "node_modules/postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", "dependencies": { - "@babel/runtime": "7.12.1" + "balanced-match": "1.0.0", + "postcss": "7.0.35" } }, - "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "node_modules/postcss-selector-not": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", "dependencies": { - "@babel/runtime": "7.12.1", - "history": "4.10.1", - "hoist-non-react-statics": "3.3.2", - "loose-envify": "1.4.0", - "mini-create-react-context": "0.4.0", - "path-to-regexp": "1.8.0", - "prop-types": "15.7.2", - "react-is": "16.13.1", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3" + "balanced-match": "1.0.0", + "postcss": "7.0.35" } }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "node_modules/postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", "dependencies": { - "@babel/runtime": "7.12.1" + "cssesc": "3.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1", + "util-deprecate": "1.0.2" } }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "node_modules/postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "dependencies": { - "@babel/runtime": "7.12.1", - "history": "4.10.1", - "loose-envify": "1.4.0", - "prop-types": "15.7.2", - "react-router": "5.2.0", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3" + "is-svg": "3.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "svgo": "1.3.2" } }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "dependencies": { - "isarray": "0.0.1" + "alphanum-sort": "1.0.2", + "postcss": "7.0.35", + "uniqs": "2.0.0" } }, - "node_modules/react-side-effect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", - "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/react-textarea-autosize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", - "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", + "node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "react": ">=0.14.0 <17.0.0" + "flatten": "1.0.3", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/react-toastify": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.9.tgz", - "integrity": "sha512-StHXv+4kezHUnPyoILlvygSptQ79bxVuvKcC05yXP0FlqQgPA1ue+80BqxZZiCw2jWDGiY2MHyqBfFKf5YzZbA==", + "node_modules/postcss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "classnames": "^2.2.6", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.1" - }, - "peerDependencies": { - "react": ">=16" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, - "node_modules/react-toggle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", - "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", - "dependencies": { - "classnames": "^2.2.5" - }, - "peerDependencies": { - "prop-types": "^15.3.0 || ^16.0.0", - "react": "^15.3.0 || ^16.0.0", - "react-dom": "^15.3.0 || ^16.0.0" + "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "3.0.0" } }, - "node_modules/react-transition-group": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", - "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "node_modules/postcss/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==" + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "has-flag": "3.0.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "node_modules/prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", "dependencies": { - "inherits": "2.0.4", - "string_decoder": "1.3.0", - "util-deprecate": "1.0.2" + "lodash": "4.17.20", + "renderkid": "2.0.4" } }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dependencies": { - "picomatch": "2.2.2" + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + }, + "node_modules/prism-react-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz", + "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==", + "peerDependencies": { + "react": ">=0.14.9" } }, - "node_modules/reading-time": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", - "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" + "node_modules/prismjs": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", + "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", + "optionalDependencies": { + "clipboard": "^2.0.0" + } }, - "node_modules/rebass": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/rebass/-/rebass-4.0.7.tgz", - "integrity": "sha512-GJot6j6Qcr7jk1QIgf9qBoud75CGRpN8pGcEo98TSp4KNSWV01ZLvGwFKGI35oEBuNs+lpEd3+pnwkQUTSFytg==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "optional": true, - "dependencies": { - "reflexbox": "^4.0.6" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { - "resolve": "1.17.0" + "asap": "~2.0.3" } }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dependencies": { - "minimatch": "3.0.4" + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" } }, - "node_modules/reflexbox": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/reflexbox/-/reflexbox-4.0.6.tgz", - "integrity": "sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==", - "dev": true, - "optional": true, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "dependencies": { - "@emotion/core": "^10.0.0", - "@emotion/styled": "^10.0.0", - "@styled-system/css": "^5.0.0", - "@styled-system/should-forward-prop": "^5.0.0", - "styled-system": "^5.0.0" + "xtend": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dependencies": { - "regenerate": "1.4.1" + "forwarded": "0.1.2", + "ipaddr.js": "1.9.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dependencies": { - "@babel/runtime": "7.12.1" + "bn.js": "4.11.9", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.6", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" } }, - "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==", + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "end-of-stream": "1.4.4", + "once": "1.4.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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "duplexify": "3.7.1", + "inherits": "2.0.4", + "pump": "2.0.1" } }, - "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==", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dependencies": { - "is-plain-object": "2.0.4" + "end-of-stream": "1.4.4", + "once": "1.4.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "escape-goat": "2.1.1" } }, - "node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dependencies": { - "regenerate": "1.4.1", - "regenerate-unicode-properties": "8.2.0", - "regjsgen": "0.5.2", - "regjsparser": "0.6.4", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.2.0" - } + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, - "node_modules/registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", - "dependencies": { - "rc": "1.2.8" - } + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dependencies": { - "rc": "1.2.8" + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, - "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dependencies": { - "jsesc": "0.5.0" - } + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "safe-buffer": "5.1.2" } }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" } }, - "node_modules/rehype-parse/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "node_modules/remark-admonitions": { + "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, - "node_modules/remark-admonitions/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.5", + "strip-json-comments": "2.0.1" } }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-emoji": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.1.0.tgz", - "integrity": "sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.2" + "node_modules/react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "peerDependencies": { + "react": ">=16.3.1" } }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" } }, - "node_modules/remark-mdx": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", - "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", + "node_modules/react-copy-to-clipboard": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", + "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", "dependencies": { - "@babel/core": "7.11.6", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-syntax-jsx": "7.10.4", - "@mdx-js/util": "1.6.19", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0" } }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "node_modules/react-dev-utils": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", + "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "@babel/code-frame": "7.8.3", + "address": "1.1.2", + "browserslist": "4.10.0", + "chalk": "2.4.2", + "cross-spawn": "7.0.1", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.0.1", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "3.1.1", + "global-modules": "2.0.0", + "globby": "8.0.2", + "gzip-size": "5.1.1", + "immer": "1.10.0", + "inquirer": "7.0.4", + "is-root": "2.1.0", + "loader-utils": "1.2.3", + "open": "7.3.0", + "pkg-up": "3.1.0", + "react-error-overlay": "6.0.7", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "node_modules/react-dev-utils/node_modules/@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/highlight": "7.10.4" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "node_modules/react-dev-utils/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "node_modules/react-dev-utils/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "array-uniq": "1.0.3" } }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node_modules/react-dev-utils/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" } }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "node_modules/react-dev-utils/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "is-extendable": "0.1.1" } }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "node_modules/react-dev-utils/node_modules/browserslist": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", + "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "caniuse-lite": "1.0.30001148", + "electron-to-chromium": "1.3.582", + "node-releases": "1.1.63", + "pkg-up": "3.1.0" } }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, - "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "node_modules/renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "node_modules/react-dev-utils/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "node_modules/react-dev-utils/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.10.1", - "lodash": "4.17.20", - "strip-ansi": "3.0.1" + "ms": "2.0.0" } }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "node_modules/react-dev-utils/node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "1.1.2", + "debug": "2.6.9" + } }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/react-dev-utils/node_modules/dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dependencies": { - "ansi-regex": "2.1.1" + "arrify": "1.0.1", + "path-type": "3.0.0" } }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "node_modules/react-dev-utils/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" }, - "node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "engines": { - "node": ">= 0.10" + "node_modules/react-dev-utils/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/react-dev-utils/node_modules/extend-shallow/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==", "dependencies": { - "path-parse": "1.0.6" + "is-plain-object": "2.0.4" } }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "node_modules/react-dev-utils/node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dependencies": { - "resolve-from": "3.0.0" + "@mrmlnc/readdir-enhanced": "2.2.1", + "@nodelib/fs.stat": "1.1.3", + "glob-parent": "3.1.0", + "is-glob": "4.0.1", + "merge2": "1.4.1", + "micromatch": "3.1.10" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "node_modules/resolve-from": { + "node_modules/react-dev-utils/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "node_modules/react-dev-utils/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "lowercase-keys": "1.0.1" + "locate-path": "5.0.0", + "path-exists": "4.0.0" } }, - "node_modules/restore-cursor": { + "node_modules/react-dev-utils/node_modules/glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dependencies": { - "onetime": "5.1.2", - "signal-exit": "3.0.3" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" } }, - "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==" - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/react-dev-utils/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dependencies": { - "glob": "7.1.6" + "is-extglob": "2.1.1" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/react-dev-utils/node_modules/globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "dependencies": { - "hash-base": "3.1.0", - "inherits": "2.0.4" + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "fast-glob": "2.2.7", + "glob": "7.1.6", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "node_modules/react-dev-utils/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "node_modules/react-dev-utils/node_modules/inquirer": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", "dependencies": { - "aproba": "1.2.0" + "ansi-escapes": "4.3.1", + "chalk": "2.4.2", + "cli-cursor": "3.1.0", + "cli-width": "2.2.1", + "external-editor": "3.1.0", + "figures": "3.2.0", + "lodash": "4.17.20", + "mute-stream": "0.0.8", + "run-async": "2.4.1", + "rxjs": "6.6.3", + "string-width": "4.2.0", + "strip-ansi": "5.2.0", + "through": "2.3.8" } }, - "node_modules/rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "node_modules/react-dev-utils/node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "tslib": "1.14.1" + "ansi-regex": "4.1.0" } }, - "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==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/react-dev-utils/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "ret": "0.1.15" + "kind-of": "3.2.2" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "node_modules/react-dev-utils/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1" + "is-buffer": "1.1.6" } }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/react-dev-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "minimist": "1.2.5" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dependencies": { - "extend-shallow": "2.0.1", - "kind-of": "6.0.3" + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" } }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "4.1.0" + } }, - "node_modules/selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "node_modules/react-dev-utils/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "node-forge": "0.10.0" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "node_modules/react-dev-utils/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "semver": "6.3.0" + "p-limit": "2.3.0" } }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "node_modules/react-dev-utils/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "node_modules/react-dev-utils/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dependencies": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "2.3.0", - "range-parser": "1.2.1", - "statuses": "1.5.0" + "pify": "3.0.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/react-dev-utils/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "node_modules/react-dev-utils/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "node_modules/react-dev-utils/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "ms": "2.0.0" + "ansi-regex": "5.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/react-dev-utils/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, - "node_modules/send/node_modules/ms": { + "node_modules/react-dev-utils/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "randombytes": "2.1.0" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" } }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "node_modules/react-error-overlay": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", "dependencies": { - "mime-db": "1.33.0" + "object-assign": "4.1.1", + "prop-types": "15.7.2", + "react-fast-compare": "3.2.0", + "react-side-effect": "2.1.0" } }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/react-json-view": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", + "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", "dependencies": { - "accepts": "1.3.7", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.27", - "parseurl": "1.3.3" + "flux": "^3.1.3", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^6.1.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^15.5.4", + "react-dom": "^16.0.0 || ^15.5.4" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "node_modules/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", "dependencies": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "prop-types": "15.7.2" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "node_modules/react-loadable-ssr-addon": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz", + "integrity": "sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw==", + "dependencies": { + "@babel/runtime": "7.12.1" + } }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "dependencies": { + "@babel/runtime": "7.12.1", + "history": "4.10.1", + "hoist-non-react-statics": "3.3.2", + "loose-envify": "1.4.0", + "mini-create-react-context": "0.4.0", + "path-to-regexp": "1.8.0", + "prop-types": "15.7.2", + "react-is": "16.13.1", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3" + } }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "7.12.1" + } }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "node_modules/react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", "dependencies": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.3", - "send": "0.17.1" + "@babel/runtime": "7.12.1", + "history": "4.10.1", + "loose-envify": "1.4.0", + "prop-types": "15.7.2", + "react-router": "5.2.0", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "node_modules/react-router/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, - "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==", + "node_modules/react-router/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dependencies": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "isarray": "0.0.1" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "node_modules/react-side-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", + "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/react-textarea-autosize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", + "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", "dependencies": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": ">=0.14.0 <17.0.0" } }, - "node_modules/shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "node_modules/react-toastify": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.9.tgz", + "integrity": "sha512-StHXv+4kezHUnPyoILlvygSptQ79bxVuvKcC05yXP0FlqQgPA1ue+80BqxZZiCw2jWDGiY2MHyqBfFKf5YzZbA==", "dependencies": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "react": ">=16" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "node_modules/react-toggle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", + "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", "dependencies": { - "is-buffer": "1.1.6" + "classnames": "^2.2.5" + }, + "peerDependencies": { + "prop-types": "^15.3.0 || ^16.0.0", + "react": "^15.3.0 || ^16.0.0", + "react-dom": "^15.3.0 || ^16.0.0" } }, - "node_modules/shallow-clone/node_modules/lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + "node_modules/react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "shebang-regex": "3.0.0" + "inherits": "2.0.4", + "string_decoder": "1.3.0", + "util-deprecate": "1.0.2" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "2.2.2" + } }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "node_modules/reading-time": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", + "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dependencies": { - "glob": "7.1.6", - "interpret": "1.4.0", - "rechoir": "0.6.2" + "resolve": "1.17.0" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "minimatch": "3.0.4" } }, - "node_modules/side-channel/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "1.4.1" } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dependencies": { - "is-arrayish": "0.3.2" + "@babel/runtime": "7.12.1" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/sitemap": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", - "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", + "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==", "dependencies": { - "lodash.chunk": "^4.2.0", - "lodash.padstart": "^4.6.1", - "whatwg-url": "^7.0.0", - "xmlbuilder": "^13.0.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=4.0.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "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==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "is-plain-object": "2.0.4" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "define-properties": "1.1.3", + "es-abstract": "1.17.7" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/regexp.prototype.flags/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "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==", + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dependencies": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.3", - "use": "3.1.1" + "regenerate": "1.4.1", + "regenerate-unicode-properties": "8.2.0", + "regjsgen": "0.5.2", + "regjsparser": "0.6.4", + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.2.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==", + "node_modules/registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", "dependencies": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "rc": "1.2.8" } }, - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dependencies": { - "is-descriptor": "1.0.2" + "rc": "1.2.8" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "6.0.3" - } + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dependencies": { - "kind-of": "6.0.3" + "jsesc": "0.5.0" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" - } + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" }, - "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==", + "node_modules/rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", "dependencies": { - "kind-of": "3.2.2" + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", "dependencies": { - "is-buffer": "1.1.6" + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", - "dependencies": { - "ms": "2.0.0" - } + "node_modules/rehype-parse/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "node_modules/remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", "dependencies": { - "is-descriptor": "0.1.6" + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/remark-admonitions/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } }, - "node_modules/sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "node_modules/remark-admonitions/node_modules/unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", "dependencies": { - "faye-websocket": "0.10.0", - "uuid": "3.4.0", - "websocket-driver": "0.6.5" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "node_modules/remark-emoji": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.1.0.tgz", + "integrity": "sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==", "dependencies": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.3", - "inherits": "2.0.4", - "json3": "3.3.3", - "url-parse": "1.4.7" + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.2" } }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dependencies": { - "ms": "2.1.2" + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "node_modules/remark-mdx": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", + "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", "dependencies": { - "websocket-driver": "0.6.5" + "@babel/core": "7.11.6", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.11.0", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.19", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", "dependencies": { - "is-plain-obj": "1.1.0" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "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==", + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", "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" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", "dependencies": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/source-map-support/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==" - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "dependencies": { - "debug": "4.2.0", - "handle-thing": "2.0.1", - "http-deceiver": "1.2.7", - "select-hose": "2.0.0", - "spdy-transport": "3.0.0" + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "dependencies": { - "debug": "4.2.0", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "3.6.0", - "wbuf": "1.7.3" + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "node_modules/remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, "dependencies": { - "extend-shallow": "3.0.2" + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/renderkid": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", + "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.10.1", + "lodash": "4.17.20", + "strip-ansi": "3.0.1" } }, - "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==", + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dependencies": { - "is-plain-object": "2.0.4" + "ansi-regex": "2.1.1" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, - "node_modules/ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "dependencies": { - "minipass": "3.1.3" + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, + "engines": { + "node": ">= 0.10" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/static-extend": { + "node_modules/require-like": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - } + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "0.1.6" - } + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "node_modules/std-env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", - "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dependencies": { - "ci-info": "1.6.0" + "path-parse": "1.0.6" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dependencies": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "resolve-from": "3.0.0" } }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, - "node_modules/stream-browserify/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dependencies": { - "end-of-stream": "1.4.4", - "stream-shift": "1.0.1" - } + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.2" - } + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "lowercase-keys": "1.0.1" } }, - "node_modules/stream-http/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==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "safe-buffer": "5.1.2" + "onetime": "5.1.2", + "signal-exit": "3.0.3" } }, - "node_modules/stream-shift": { + "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==" + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "node_modules/rgb-regex": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { - "safe-buffer": "5.2.1" + "glob": "7.1.6" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/string-replace-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-2.3.0.tgz", - "integrity": "sha512-HYBIHStViMKLZC/Lehxy42OuwsBaPzX/LjcF5mkJlE2SnHXmW6SW6eiHABTXnY8ZCm/REbdJ8qnA0ptmIzN0Ng==", - "dev": true, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.6.5" - }, - "peerDependencies": { - "webpack": "1 || 2 || 3 || 4" + "hash-base": "3.1.0", + "inherits": "2.0.4" } }, - "node_modules/string-replace-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "node_modules/run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "aproba": "1.2.0" } }, - "node_modules/string-replace-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "tslib": "1.14.1" } }, - "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dependencies": { - "emoji-regex": "8.0.0", - "is-fullwidth-code-point": "3.0.0", - "strip-ansi": "6.0.0" + "ret": "0.1.15" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dependencies": { - "ansi-regex": "5.0.0" + "loose-envify": "1.4.0", + "object-assign": "4.1.1" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", - "dev": true, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" } }, - "node_modules/string.prototype.matchall/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.matchall/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "extend-shallow": "2.0.1", + "kind-of": "6.0.3" } }, - "node_modules/string.prototype.matchall/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true }, - "node_modules/string.prototype.matchall/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, - "node_modules/string.prototype.matchall/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, + "node_modules/selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node-forge": "0.10.0" } }, - "node_modules/string.prototype.matchall/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "6.3.0" } }, - "node_modules/string.prototype.matchall/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "2.3.0", + "range-parser": "1.2.1", + "statuses": "1.5.0" } }, - "node_modules/string.prototype.matchall/node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "node_modules/string.prototype.matchall/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/string.prototype.matchall/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "randombytes": "2.1.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" } }, - "node_modules/string.prototype.trimend/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "mime-db": "1.33.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "accepts": "1.3.7", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.27", + "parseurl": "1.3.3" } }, - "node_modules/string.prototype.trimstart/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "ms": "2.0.0" } }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.3", + "send": "0.17.1" } }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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==", "dependencies": { - "ansi-regex": "4.1.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { - "inline-style-parser": "0.1.1" + "inherits": "2.0.4", + "safe-buffer": "5.1.2" } }, - "node_modules/styled-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "dev": true, - "optional": true, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", "dependencies": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" } }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", "dependencies": { - "browserslist": "4.14.5", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2" + "is-buffer": "1.1.6" } }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "has-flag": "3.0.0" + "shebang-regex": "3.0.0" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dependencies": { - "chalk": "2.4.2", - "coa": "2.0.2", - "css-select": "2.1.0", - "css-select-base-adapter": "0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "4.0.3", - "js-yaml": "3.14.0", - "mkdirp": "0.5.5", - "object.values": "1.1.1", - "sax": "1.2.4", - "stable": "0.1.8", - "unquote": "1.1.1", - "util.promisify": "1.0.1" + "glob": "7.1.6", + "interpret": "1.4.0", + "rechoir": "0.6.2" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "1.0.0", - "css-what": "3.4.2", - "domutils": "1.7.0", - "nth-check": "1.0.2" + "node_modules/side-channel/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dependencies": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" + "is-arrayish": "0.3.2" } }, - "node_modules/table": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", - "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==", - "dev": true, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sitemap": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", + "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "lodash.chunk": "^4.2.0", + "lodash.padstart": "^4.6.1", + "whatwg-url": "^7.0.0", + "xmlbuilder": "^13.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=6.0.0", + "npm": ">=4.0.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", - "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "node_modules/tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "chownr": "2.0.0", - "fs-minipass": "2.1.0", - "minipass": "3.1.3", - "minizlib": "2.1.2", - "mkdirp": "1.0.4", - "yallist": "4.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "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==", "dependencies": { - "commander": "2.20.3", - "source-map": "0.6.1", - "source-map-support": "0.5.19" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.3", + "use": "3.1.1" } }, - "node_modules/terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "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==", "dependencies": { - "cacache": "15.0.5", - "find-cache-dir": "3.3.1", - "jest-worker": "26.5.0", - "p-limit": "3.0.2", - "schema-utils": "3.0.0", - "serialize-javascript": "5.0.1", - "source-map": "0.6.1", - "terser": "5.3.6", - "webpack-sources": "1.4.3" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" } }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "1.0.2" + } }, - "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" + "kind-of": "6.0.3" } }, - "node_modules/terser-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "kind-of": "6.0.3" } }, - "node_modules/terser-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "p-locate": "4.1.0" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" } }, - "node_modules/terser-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "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==", "dependencies": { - "semver": "6.3.0" + "kind-of": "3.2.2" } }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "p-try": "2.2.0" + "is-buffer": "1.1.6" } }, - "node_modules/terser-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "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==", "dependencies": { - "p-limit": "2.3.0" + "ms": "2.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "p-try": "2.2.0" + "is-descriptor": "0.1.6" } }, - "node_modules/terser-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", "dependencies": { - "find-up": "4.1.0" + "faye-websocket": "0.10.0", + "uuid": "3.4.0", + "websocket-driver": "0.6.5" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "node_modules/sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.3", + "inherits": "2.0.4", + "json3": "3.3.3", + "url-parse": "1.4.7" } }, - "node_modules/terser-webpack-plugin/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==" + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dependencies": { + "ms": "2.1.2" + } }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.6.tgz", - "integrity": "sha512-145ap5v1HYx69HfLuwWaxTIlXyiSr+nSTb7ZWlJCgJn2JptuJRKziNa/zwFx9B1IU99Q055jHni74nLuuEC78w==", + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dependencies": { - "commander": "2.20.3", - "source-map": "0.7.3", - "source-map-support": "0.5.19" + "websocket-driver": "0.6.5" } }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dependencies": { + "is-plain-obj": "1.1.0" + } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, - "node_modules/terser/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==" + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "2.3.7", - "xtend": "4.0.2" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "node_modules/through2/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "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==", "dependencies": { - "setimmediate": "1.0.5" + "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/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dependencies": { - "os-tmpdir": "1.0.2" + "buffer-from": "1.1.1", + "source-map": "0.6.1" } }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "node_modules/source-map-support/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==" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, - "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "3.2.2" + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dependencies": { - "is-buffer": "1.1.6" + "debug": "4.2.0", + "handle-thing": "2.0.1", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "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==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dependencies": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "debug": "4.2.0", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.6.0", + "wbuf": "1.7.3" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "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==", "dependencies": { - "is-number": "7.0.0" + "extend-shallow": "3.0.2" } }, - "node_modules/to-regex/node_modules/extend-shallow": { + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", @@ -14653,7 +13969,7 @@ "is-extendable": "1.0.1" } }, - "node_modules/to-regex/node_modules/is-extendable": { + "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==", @@ -14661,534 +13977,438 @@ "is-plain-object": "2.0.4" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "node_modules/ssri": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/tr46/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" + "minipass": "3.1.3" } }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, - "node_modules/trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "0.2.5", + "object-copy": "0.1.0" } }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "0.1.6" + } }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "node_modules/std-env": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", + "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "ci-info": "1.6.0" } }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "2.1.27" + "inherits": "2.0.4", + "readable-stream": "2.3.7" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "is-typedarray": "1.0.0" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", - "engines": { - "node": "*" + "node_modules/stream-browserify/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==", + "dependencies": { + "safe-buffer": "5.1.2" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "end-of-stream": "1.4.4", + "stream-shift": "1.0.1" } }, - "node_modules/unbox-primitive/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dependencies": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.2" } }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/stream-http/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==", "dependencies": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.1.0" + "safe-buffer": "5.1.2" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, - "node_modules/unicode-property-aliases-ecmascript": { + "node_modules/strict-uri-encode": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "engines": { - "node": ">=4" + "safe-buffer": "5.2.1" } }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "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==", + "node_modules/string-replace-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-2.3.0.tgz", + "integrity": "sha512-HYBIHStViMKLZC/Lehxy42OuwsBaPzX/LjcF5mkJlE2SnHXmW6SW6eiHABTXnY8ZCm/REbdJ8qnA0ptmIzN0Ng==", + "dev": true, "dependencies": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "2.0.1" + "loader-utils": "^1.2.3", + "schema-utils": "^2.6.5" + }, + "peerDependencies": { + "webpack": "1 || 2 || 3 || 4" } }, - "node_modules/uniq": { + "node_modules/string-replace-loader/node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, "dependencies": { - "unique-slug": "2.0.2" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "node_modules/string-replace-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, "dependencies": { - "imurmurhash": "0.1.4" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dependencies": { - "crypto-random-string": "2.0.0" + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.0" } }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "5.0.0" } }, - "node_modules/unist-util-generated": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", - "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==", + "node_modules/string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "node_modules/string.prototype.matchall/node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "node_modules/string.prototype.matchall/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-remove": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", - "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", - "dependencies": { - "unist-util-is": "^4.0.0" + "node_modules/string.prototype.matchall/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-remove-position": { + "node_modules/string.prototype.matchall/node_modules/is-negative-zero": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/string.prototype.matchall/node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, "dependencies": { - "@types/unist": "^2.0.2" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/string.prototype.matchall/node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/string.prototype.matchall/node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "node_modules/string.prototype.matchall/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "dependencies": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "node_modules/string.prototype.matchall/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, "dependencies": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dependencies": { - "boxen": "4.2.0", - "chalk": "3.0.0", - "configstore": "5.0.1", - "has-yarn": "2.1.0", - "import-lazy": "2.1.0", - "is-ci": "2.0.0", - "is-installed-globally": "0.3.2", - "is-npm": "4.0.0", - "is-yarn-global": "0.3.0", - "latest-version": "5.1.0", - "pupa": "2.0.1", - "semver-diff": "3.1.1", - "xdg-basedir": "4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dependencies": { - "punycode": "2.1.1" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "2.0.0", - "mime-types": "2.1.27", - "schema-utils": "3.0.0" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" - } - }, - "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dependencies": { - "querystringify": "2.2.0", - "requires-port": "1.0.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "dependencies": { - "prepend-http": "2.0.0" + "define-properties": "1.1.3", + "es-abstract": "1.17.7" } }, - "node_modules/url-parse-lax/node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "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==" - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "node_modules/string.prototype.trimend/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dependencies": { - "inherits": "2.0.3" + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { + "node_modules/string.prototype.trimstart": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "dependencies": { "define-properties": "1.1.3", - "es-abstract": "1.17.7", - "has-symbols": "1.0.1", - "object.getownpropertydescriptors": "2.1.0" + "es-abstract": "1.17.7" } }, - "node_modules/util.promisify/node_modules/es-abstract": { + "node_modules/string.prototype.trimstart/node_modules/es-abstract": { "version": "1.17.7", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", @@ -15206,657 +14426,563 @@ "string.prototype.trimstart": "1.0.1" } }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "node_modules/vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", - "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/vfile/node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "node_modules/wait-file": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", - "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "@hapi/joi": "15.1.1", - "fs-extra": "8.1.0", - "rx": "4.1.0" + "ansi-regex": "4.1.0" } }, - "node_modules/wait-file/node_modules/@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" }, - "node_modules/wait-file/node_modules/@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, - "node_modules/wait-file/node_modules/@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "dependencies": { - "@hapi/address": "2.1.4", - "@hapi/bourne": "1.3.2", - "@hapi/hoek": "8.5.1", - "@hapi/topo": "3.1.6" + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" } }, - "node_modules/wait-file/node_modules/@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "dependencies": { - "@hapi/hoek": "8.5.1" - } + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, - "node_modules/watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "dependencies": { - "chokidar": "3.4.3", - "graceful-fs": "4.2.4", - "neo-async": "2.6.2" - }, - "optionalDependencies": { - "watchpack-chokidar2": "2.0.0" + "inline-style-parser": "0.1.1" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dependencies": { - "chokidar": "2.1.8" + "browserslist": "4.14.5", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dependencies": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, - "node_modules/watchpack-chokidar2/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "remove-trailing-separator": "1.1.0" + "has-flag": "3.0.0" } }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "chalk": "2.4.2", + "coa": "2.0.2", + "css-select": "2.1.0", + "css-select-base-adapter": "0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "4.0.3", + "js-yaml": "3.14.0", + "mkdirp": "0.5.5", + "object.values": "1.1.1", + "sax": "1.2.4", + "stable": "0.1.8", + "unquote": "1.1.1", + "util.promisify": "1.0.1" } }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "is-extendable": "0.1.1" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dependencies": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "fsevents": "1.2.13", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" + "boolbase": "1.0.0", + "css-what": "3.4.2", + "domutils": "1.7.0", + "nth-check": "1.0.2" } }, - "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" } }, - "node_modules/watchpack-chokidar2/node_modules/extend-shallow/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==", - "optional": true, + "node_modules/synckit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", + "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "dev": true, "dependencies": { - "is-plain-object": "2.0.4" + "tslib": "^2.2.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "node_modules/synckit/node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "node_modules/synckit/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, + "node_modules/table": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", + "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==", + "dev": true, "dependencies": { - "is-extendable": "0.1.1" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "hasInstallScript": true, - "optional": true, + "node_modules/table/node_modules/ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "dev": true, "dependencies": { - "bindings": "1.5.0", - "nan": "2.14.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "dependencies": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "dependencies": { - "is-extglob": "2.1.1" + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "node_modules/tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", "dependencies": { - "binary-extensions": "1.13.1" + "chownr": "2.0.0", + "fs-minipass": "2.1.0", + "minipass": "3.1.3", + "minizlib": "2.1.2", + "mkdirp": "1.0.4", + "yallist": "4.0.0" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "node_modules/term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dependencies": { - "kind-of": "3.2.2" + "commander": "2.20.3", + "source-map": "0.6.1", + "source-map-support": "0.5.19" } }, - "node_modules/watchpack-chokidar2/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, + "node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dependencies": { - "is-buffer": "1.1.6" + "cacache": "15.0.5", + "find-cache-dir": "3.3.1", + "jest-worker": "26.5.0", + "p-limit": "3.0.2", + "schema-utils": "3.0.0", + "serialize-javascript": "5.0.1", + "source-map": "0.6.1", + "terser": "5.3.6", + "webpack-sources": "1.4.3" } }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" } }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, + "node_modules/terser-webpack-plugin/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "locate-path": "5.0.0", + "path-exists": "4.0.0" } }, - "node_modules/watchpack-chokidar2/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==", - "optional": true, + "node_modules/terser-webpack-plugin/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" + "p-locate": "4.1.0" } }, - "node_modules/watchpack-chokidar2/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==", - "optional": true, + "node_modules/terser-webpack-plugin/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { - "safe-buffer": "5.1.2" + "semver": "6.3.0" } }, - "node_modules/watchpack-chokidar2/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "p-try": "2.2.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/terser-webpack-plugin/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "minimalistic-assert": "1.0.1" + "p-limit": "2.3.0" } }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/terser-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "2.2.0" } }, - "node_modules/web-tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", - "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" + "node_modules/terser-webpack-plugin/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "4.1.0" + } }, - "node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "6.4.2", + "@types/json-schema": "7.0.6", "ajv": "6.12.6", - "ajv-keywords": "3.5.2", - "chrome-trace-event": "1.0.2", - "enhanced-resolve": "4.3.0", - "eslint-scope": "4.0.3", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.4.0", - "loader-utils": "1.4.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.5", - "neo-async": "2.6.2", - "node-libs-browser": "2.2.1", - "schema-utils": "1.0.0", - "tapable": "1.1.3", - "terser-webpack-plugin": "1.4.5", - "watchpack": "1.7.4", - "webpack-sources": "1.4.3" + "ajv-keywords": "3.5.2" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", - "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "node_modules/terser-webpack-plugin/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==" + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.6.tgz", + "integrity": "sha512-145ap5v1HYx69HfLuwWaxTIlXyiSr+nSTb7ZWlJCgJn2JptuJRKziNa/zwFx9B1IU99Q055jHni74nLuuEC78w==", "dependencies": { - "acorn": "7.4.0", - "acorn-walk": "7.2.0", - "bfj": "6.1.2", - "chalk": "2.4.2", "commander": "2.20.3", - "ejs": "2.7.4", - "express": "4.17.1", - "filesize": "3.6.1", - "gzip-size": "5.1.1", - "lodash": "4.17.20", - "mkdirp": "0.5.5", - "opener": "1.5.1", - "ws": "6.2.1" + "source-map": "0.7.3", + "source-map-support": "0.5.19" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" - }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } + "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/webpack-bundle-analyzer/node_modules/filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "node_modules/terser/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==" }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dependencies": { - "memory-fs": "0.4.1", - "mime": "2.4.6", - "mkdirp": "0.5.5", - "range-parser": "1.2.1", - "webpack-log": "2.0.0" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "node_modules/webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.1.8", - "compression": "1.7.4", - "connect-history-api-fallback": "1.6.0", - "debug": "4.2.0", - "del": "4.1.1", - "express": "4.17.1", - "html-entities": "1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "2.0.0", - "internal-ip": "4.3.0", - "ip": "1.1.5", - "is-absolute-url": "3.0.3", - "killable": "1.0.1", - "loglevel": "1.7.0", - "opn": "5.5.0", - "p-retry": "3.0.1", - "portfinder": "1.0.28", - "schema-utils": "1.0.0", - "selfsigned": "1.10.8", - "semver": "6.3.0", - "serve-index": "1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "4.0.2", - "strip-ansi": "3.0.1", - "supports-color": "6.1.0", - "url": "0.11.0", - "webpack-dev-middleware": "3.7.2", - "webpack-log": "2.0.0", - "ws": "6.2.1", - "yargs": "13.3.2" + "readable-stream": "2.3.7", + "xtend": "4.0.2" } }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/through2/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==", "dependencies": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "safe-buffer": "5.1.2" } }, - "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dependencies": { - "remove-trailing-separator": "1.1.0" + "setimmediate": "1.0.5" } }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "node_modules/tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { - "array-uniq": "1.0.3" + "os-tmpdir": "1.0.2" } }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "kind-of": "3.2.2" } }, - "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "is-extendable": "0.1.1" + "is-buffer": "1.1.6" } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "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==", "dependencies": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" - }, - "optionalDependencies": { - "fsevents": "1.2.13" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, - "node_modules/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "@types/glob": "7.1.3", - "globby": "6.1.0", - "is-path-cwd": "2.2.0", - "is-path-in-cwd": "2.1.0", - "p-map": "2.1.0", - "pify": "4.0.1", - "rimraf": "2.7.1" + "is-number": "7.0.0" } }, - "node_modules/webpack-dev-server/node_modules/extend-shallow": { + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", @@ -15865,7 +14991,7 @@ "is-extendable": "1.0.1" } }, - "node_modules/webpack-dev-server/node_modules/extend-shallow/node_modules/is-extendable": { + "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==", @@ -15873,1997 +14999,3214 @@ "is-plain-object": "2.0.4" } }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, - "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" - } + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "hasInstallScript": true, - "optional": true, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dependencies": { - "bindings": "1.5.0", - "nan": "2.14.2" + "punycode": "^2.1.0" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "node_modules/tr46/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "2.1.1" + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "1.0.2", - "glob": "7.1.6", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, - "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "1.13.1" - } + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "3.2.2" - } + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, - "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { - "is-buffer": "1.1.6" + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "media-typer": "0.3.0", + "mime-types": "2.1.27" } }, - "node_modules/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "is-typedarray": "1.0.0" } }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" + "node_modules/ua-parser-js": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", + "engines": { + "node": "*" } }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, "dependencies": { - "glob": "7.1.6" + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "node_modules/unbox-primitive/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack-dev-server/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==", + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dependencies": { - "safe-buffer": "5.1.2" + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "2.1.1" - } + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dependencies": { - "has-flag": "3.0.0" + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.1.0" } }, - "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "3.2.4", - "uuid": "3.4.0" + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "engines": { + "node": ">=4" } }, - "node_modules/webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dependencies": { - "lodash": "4.17.20" + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "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==", "dependencies": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "2.0.1" } }, - "node_modules/webpack-sources/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==" + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "unique-slug": "2.0.2" } }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dependencies": { - "is-extendable": "0.1.1" + "imurmurhash": "0.1.4" } }, - "node_modules/webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { - "bluebird": "3.7.2", - "chownr": "1.1.4", - "figgy-pudding": "3.5.2", - "glob": "7.1.6", - "graceful-fs": "4.2.4", - "infer-owner": "1.0.4", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.5", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.7.1", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "crypto-random-string": "2.0.0" } }, - "node_modules/webpack/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/webpack/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "2.0.4" + "node_modules/unist-util-generated": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", + "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "node_modules/unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/unist-util-remove": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", + "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", "dependencies": { - "kind-of": "3.2.2" + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "dependencies": { - "is-buffer": "1.1.6" + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dependencies": { - "minimist": "1.2.5" + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dependencies": { - "yallist": "3.1.1" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "node_modules/webpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dependencies": { - "glob": "7.1.6" + "has-value": "0.3.1", + "isobject": "3.0.1" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" } }, - "node_modules/webpack/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dependencies": { - "randombytes": "2.1.0" + "isarray": "1.0.0" } }, - "node_modules/webpack/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==" + "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "dependencies": { - "figgy-pudding": "3.5.2" + "boxen": "4.2.0", + "chalk": "3.0.0", + "configstore": "5.0.1", + "has-yarn": "2.1.0", + "import-lazy": "2.1.0", + "is-ci": "2.0.0", + "is-installed-globally": "0.3.2", + "is-npm": "4.0.0", + "is-yarn-global": "0.3.0", + "latest-version": "5.1.0", + "pupa": "2.0.1", + "semver-diff": "3.1.1", + "xdg-basedir": "4.0.0" } }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dependencies": { - "cacache": "12.0.4", - "find-cache-dir": "2.1.0", - "is-wsl": "1.1.0", - "schema-utils": "1.0.0", - "serialize-javascript": "4.0.0", - "source-map": "0.6.1", - "terser": "4.8.0", - "webpack-sources": "1.4.3", - "worker-farm": "1.7.0" + "punycode": "2.1.1" } }, - "node_modules/webpack/node_modules/to-regex-range": { + "node_modules/uri-js/node_modules/punycode": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/webpack/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/webpackbar": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", - "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dependencies": { - "ansi-escapes": "4.3.1", - "chalk": "2.4.2", - "consola": "2.15.0", - "figures": "3.2.0", - "pretty-time": "1.1.0", - "std-env": "2.2.1", - "text-table": "0.2.0", - "wrap-ansi": "6.2.0" + "loader-utils": "2.0.0", + "mime-types": "2.1.27", + "schema-utils": "3.0.0" } }, - "node_modules/webpackbar/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "node_modules/webpackbar/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" } }, - "node_modules/webpackbar/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dependencies": { - "color-name": "1.1.4" + "querystringify": "2.2.0", + "requires-port": "1.0.0" } }, - "node_modules/webpackbar/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/webpackbar/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dependencies": { - "ansi-regex": "5.0.0" + "prepend-http": "2.0.0" } }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/url-parse-lax/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "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==" + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dependencies": { - "ansi-styles": "4.3.0", - "string-width": "4.2.0", - "strip-ansi": "6.0.0" + "inherits": "2.0.3" } }, - "node_modules/webpackbar/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dependencies": { - "color-convert": "2.0.1" + "define-properties": "1.1.3", + "es-abstract": "1.17.7", + "has-symbols": "1.0.1", + "object.getownpropertydescriptors": "2.1.0" } }, - "node_modules/websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "node_modules/util.promisify/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dependencies": { - "websocket-extensions": "0.1.4" + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "node_modules/whatwg-fetch": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", - "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "2.0.0" - } + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/widest-line": { + "node_modules/vfile-location": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", + "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dependencies": { - "string-width": "4.2.0" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dependencies": { - "errno": "0.1.7" - } + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "node_modules/wait-file": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", + "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", "dependencies": { - "microevent.ts": "0.1.1" + "@hapi/joi": "15.1.1", + "fs-extra": "8.1.0", + "rx": "4.1.0" } }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/wait-file/node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "node_modules/wait-file/node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "node_modules/wait-file/node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", "dependencies": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" + "@hapi/address": "2.1.4", + "@hapi/bourne": "1.3.2", + "@hapi/hoek": "8.5.1", + "@hapi/topo": "3.1.6" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/wait-file/node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", "dependencies": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "@hapi/hoek": "8.5.1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "node_modules/watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dependencies": { + "chokidar": "3.4.3", + "graceful-fs": "4.2.4", + "neo-async": "2.6.2" + }, + "optionalDependencies": { + "watchpack-chokidar2": "2.0.0" + } }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "optional": true, "dependencies": { - "imurmurhash": "0.1.4", - "is-typedarray": "1.0.0", - "signal-exit": "3.0.3", - "typedarray-to-buffer": "3.1.5" + "chokidar": "2.1.8" } }, - "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, "dependencies": { - "async-limiter": "1.0.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "node_modules/watchpack-chokidar2/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "dependencies": { + "remove-trailing-separator": "1.1.0" + } }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "optional": true, "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" } }, - "node_modules/xmlbuilder": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", - "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", - "engines": { - "node": ">=6.0" + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "dependencies": { + "is-extendable": "0.1.1" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "dependencies": { + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.13", + "glob-parent": "3.1.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.2.0" + } }, - "node_modules/y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "optional": true, + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/watchpack-chokidar2/node_modules/extend-shallow/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==", + "optional": true, + "dependencies": { + "is-plain-object": "2.0.4" + } }, - "node_modules/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "optional": true, + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, "dependencies": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.1.2" + "is-extendable": "0.1.1" } }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "bindings": "1.5.0", + "nan": "2.14.2" } }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "dependencies": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } }, - "node_modules/yargs/node_modules/string-width": { + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, "dependencies": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "is-extglob": "2.1.1" } }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/cache-browser-local-storage": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.5.1.tgz", - "integrity": "sha512-TAQHRHaCUAR0bNhUHG0CnO6FTx3EMPwZQrjPuNS6kHvCQ/H8dVD0sLsHyM8C7U4j33xPQCWi9TBnSx8cYXNmNw==", - "requires": { - "@algolia/cache-common": "4.5.1" + "node_modules/watchpack-chokidar2/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "optional": true, + "dependencies": { + "binary-extensions": "1.13.1" } }, - "@algolia/cache-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.5.1.tgz", - "integrity": "sha512-Sux+pcedQi9sfScIiQdl6pEaTVl712qM9OblvDhnaeF1v6lf4jyTlRTiBLP7YBLuvO1Yo54W3maf03kmz9PVhA==" - }, - "@algolia/cache-in-memory": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.5.1.tgz", - "integrity": "sha512-fzwAtBFwveuG+E5T/namChEIvdVl0DoV3djV1C078b/JpO5+DeAwuXIJGYbyl950u170n5NEYuIwYG+R6h4lJQ==", - "requires": { - "@algolia/cache-common": "4.5.1" + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "optional": true, + "dependencies": { + "kind-of": "3.2.2" } }, - "@algolia/client-account": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.5.1.tgz", - "integrity": "sha512-2WFEaI7Zf4ljnBsSAS4e+YylZ5glovm78xFg4E1JKA8PE6M+TeIgUY6HO2ouLh2dqQKxc9UfdAT1Loo/dha2iQ==", - "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/transporter": "4.5.1" + "node_modules/watchpack-chokidar2/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "dependencies": { + "is-buffer": "1.1.6" } }, - "@algolia/client-analytics": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.5.1.tgz", - "integrity": "sha512-bTmZUU8zhZMWBeGEQ/TVqLoL3OOT0benU0HtS3iOnQURwb+AOCv3RsgZvkj2djp+M24Q6P8/L34uBJMmCurbLg==", - "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "optional": true, + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "@algolia/client-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.5.1.tgz", - "integrity": "sha512-5CpIf8IK1hke7q+N4e+A4TWdFXVJ5Qwyaa0xS84DrDO8HQ7vfYbDvG1oYa9hVEtGn6c3WVKPAvuWynK+fXQQCA==", - "requires": { - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "@algolia/client-recommendation": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.5.1.tgz", - "integrity": "sha512-GiFrNSImoEBUQICjFBEoxPGzrjWji8PY9GeMg2CNvOYcRQ0Xt0Y36v9GN53NLjvB7QdQ2FlE1Cuv/PLUfS/aQQ==", - "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "node_modules/watchpack-chokidar2/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==", + "optional": true, + "dependencies": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" } }, - "@algolia/client-search": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.5.1.tgz", - "integrity": "sha512-wjuOTte9Auo9Cg4fL0709PjeJ9rXFh4okYUrOt/2SWqQid6DSdZOp+BtyaHKV3E94sj+SlmMxkMUacYluYg5zA==", - "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "node_modules/watchpack-chokidar2/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==", + "optional": true, + "dependencies": { + "safe-buffer": "5.1.2" } }, - "@algolia/logger-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.5.1.tgz", - "integrity": "sha512-ZoVnGriinlLHlkvn5K7djOUn1/1IeTjU8rDzOJ3t06T+2hQytgJghaX7rSwKIeH4CjWMy61w8jLisuGJRBOEeg==" + "node_modules/watchpack-chokidar2/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "optional": true, + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } }, - "@algolia/logger-console": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.5.1.tgz", - "integrity": "sha512-1qa7K18+uAgxyWuguayaDS5ViiZFcOjI3J5ACBb0i/n7RsXUo149lP6mwmx6TIU7s135hT0f0TCqnvfMvN1ilA==", - "requires": { - "@algolia/logger-common": "4.5.1" + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "1.0.1" } }, - "@algolia/requester-browser-xhr": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.5.1.tgz", - "integrity": "sha512-tsQz+9pZw9dwPm/wMvZDpsWFZgmghLjXi4c3O4rfwoP/Ikum5fhle5fiR14yb4Lw4WlOQ1AJIHJvrg1qLIG8hQ==", - "requires": { - "@algolia/requester-common": "4.5.1" + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "@algolia/requester-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.5.1.tgz", - "integrity": "sha512-bPCiLvhHKXaka7f5FLtheChToz0yHVhvza64naFJRRh/3kC0nvyrvQ0ogjiydiSrGIfdNDyyTVfKGdk4gS5gyA==" + "node_modules/web-tree-sitter": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", + "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" }, - "@algolia/requester-node-http": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.5.1.tgz", - "integrity": "sha512-BfFc2h9eQOKu1gGs3DtQO7GrVZW/rxUgpJVLja4UVQyGplJyTCrFgkTyfl+8rb3MkNgA/S2LNo7cKNSPfpqeAQ==", - "requires": { - "@algolia/requester-common": "4.5.1" - } + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, - "@algolia/transporter": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.5.1.tgz", - "integrity": "sha512-asPDNToDAPhH0tM6qKGTn1l0wTlNUbekpa1ifZ6v+qhSjo3VdqGyp+2VeciJOBW/wVHXh3HUbAcycvLERRlCLg==", - "requires": { - "@algolia/cache-common": "4.5.1", - "@algolia/logger-common": "4.5.1", - "@algolia/requester-common": "4.5.1" + "node_modules/webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "6.4.2", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2", + "chrome-trace-event": "1.0.2", + "enhanced-resolve": "4.3.0", + "eslint-scope": "4.0.3", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.4.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.5", + "neo-async": "2.6.2", + "node-libs-browser": "2.2.1", + "schema-utils": "1.0.0", + "tapable": "1.1.3", + "terser-webpack-plugin": "1.4.5", + "watchpack": "1.7.4", + "webpack-sources": "1.4.3" } }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "7.10.4" + "node_modules/webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dependencies": { + "acorn": "7.4.0", + "acorn-walk": "7.2.0", + "bfj": "6.1.2", + "chalk": "2.4.2", + "commander": "2.20.3", + "ejs": "2.7.4", + "express": "4.17.1", + "filesize": "3.6.1", + "gzip-size": "5.1.1", + "lodash": "4.17.20", + "mkdirp": "0.5.5", + "opener": "1.5.1", + "ws": "6.2.1" } }, - "@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "requires": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.12.1", - "@babel/helper-module-transforms": "7.12.1", - "@babel/helpers": "7.12.1", - "@babel/parser": "7.12.3", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1", - "convert-source-map": "1.7.0", - "debug": "4.2.0", - "gensync": "1.0.0-beta.1", - "json5": "2.1.3", - "lodash": "4.17.20", - "resolve": "1.17.0", - "semver": "5.7.1", - "source-map": "0.5.7" - }, + "node_modules/webpack-bundle-analyzer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "requires": { - "@babel/types": "7.12.1", - "jsesc": "2.5.2", - "source-map": "0.5.7" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "7.12.1" - } + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "7.12.1", - "@babel/types": "7.12.1" - } + "node_modules/webpack-bundle-analyzer/node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/types": "7.12.1" + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dependencies": { + "memory-fs": "0.4.1", + "mime": "2.4.6", + "mkdirp": "0.5.5", + "range-parser": "1.2.1", + "webpack-log": "2.0.0" } }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.1.tgz", - "integrity": "sha512-82to8lR7TofZWbTd3IEZT1xNHfeU/Ef4rDm/GLXddzqDh+yQ19QuGSzqww51aNxVH8rwfRIzL0EUQsvODVhtyw==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-module-imports": "7.12.1", - "@babel/types": "7.12.1" - } + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" }, - "@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", - "requires": { - "@babel/compat-data": "7.12.1", - "@babel/helper-validator-option": "7.12.1", - "browserslist": "4.14.5", - "semver": "5.7.1" - }, + "node_modules/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.1.8", + "compression": "1.7.4", + "connect-history-api-fallback": "1.6.0", + "debug": "4.2.0", + "del": "4.1.1", + "express": "4.17.1", + "html-entities": "1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "2.0.0", + "internal-ip": "4.3.0", + "ip": "1.1.5", + "is-absolute-url": "3.0.3", + "killable": "1.0.1", + "loglevel": "1.7.0", + "opn": "5.5.0", + "p-retry": "3.0.1", + "portfinder": "1.0.28", + "schema-utils": "1.0.0", + "selfsigned": "1.10.8", + "semver": "6.3.0", + "serve-index": "1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "4.0.2", + "strip-ansi": "3.0.1", + "supports-color": "6.1.0", + "url": "0.11.0", + "webpack-dev-middleware": "3.7.2", + "webpack-log": "2.0.0", + "ws": "6.2.1", + "yargs": "13.3.2" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-member-expression-to-functions": "7.12.1", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0" - } + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-regex": "7.10.5", - "regexpu-core": "4.7.1" + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/types": "7.12.1", - "lodash": "4.17.20" + "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "1.1.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "1.0.3" } }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "7.10.4", - "@babel/template": "7.10.4", - "@babel/types": "7.12.1" - } + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" } }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dependencies": { + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "glob-parent": "3.1.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.2.0" + }, + "optionalDependencies": { + "fsevents": "1.2.13" } }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dependencies": { + "@types/glob": "7.1.3", + "globby": "6.1.0", + "is-path-cwd": "2.2.0", + "is-path-in-cwd": "2.1.0", + "p-map": "2.1.0", + "pify": "4.0.1", + "rimraf": "2.7.1" } }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-simple-access": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0", - "@babel/helper-validator-identifier": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1", - "lodash": "4.17.20" + "node_modules/webpack-dev-server/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "2.0.4" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "4.17.20" + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-wrap-function": "7.12.3", - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" } }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "requires": { - "@babel/helper-member-expression-to-functions": "7.12.1", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "1.5.0", + "nan": "2.14.2" } }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "2.1.1" } }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "1.0.2", + "glob": "7.1.6", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dependencies": { + "binary-extensions": "1.13.1" } }, - "@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", - "requires": { - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" } }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "7.10.4", - "chalk": "2.4.2", - "js-tokens": "4.0.0" - }, + "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - } + "is-buffer": "1.1.6" } }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.12.1", - "@babel/plugin-syntax-async-generators": "7.8.4" - } + "node_modules/webpack-dev-server/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-dynamic-import": "7.8.3" + "node_modules/webpack-dev-server/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==", + "dependencies": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-export-namespace-from": "7.8.3" + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "7.1.6" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-json-strings": "7.8.3" + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "7.10.4" + "node_modules/webpack-dev-server/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==", + "dependencies": { + "safe-buffer": "5.1.2" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "2.1.1" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-numeric-separator": "7.10.4" + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "3.0.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-transform-parameters": "7.12.1" + "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dependencies": { + "ansi-colors": "3.2.4", + "uuid": "3.4.0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "7.12.1", - "@babel/plugin-syntax-optional-chaining": "7.8.3" + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dependencies": { + "lodash": "4.17.20" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "requires": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "2.0.1", + "source-map": "0.6.1" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/webpack-sources/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==" }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dependencies": { + "bluebird": "3.7.2", + "chownr": "1.1.4", + "figgy-pudding": "3.5.2", + "glob": "7.1.6", + "graceful-fs": "4.2.4", + "infer-owner": "1.0.4", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.5", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.7.1", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/webpack/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "2.0.4" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/webpack/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "3.1.1" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "requires": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.12.1" + "node_modules/webpack/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "7.1.6" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "2.1.0" } }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-define-map": "7.10.5", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0", - "globals": "11.12.0" - } + "node_modules/webpack/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==" }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dependencies": { + "figgy-pudding": "3.5.2" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dependencies": { + "cacache": "12.0.4", + "find-cache-dir": "2.1.0", + "is-wsl": "1.1.0", + "schema-utils": "1.0.0", + "serialize-javascript": "4.0.0", + "source-map": "0.6.1", + "terser": "4.8.0", + "webpack-sources": "1.4.3", + "worker-farm": "1.7.0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpack/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/webpack/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpackbar": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", + "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", + "dependencies": { + "ansi-escapes": "4.3.1", + "chalk": "2.4.2", + "consola": "2.15.0", + "figures": "3.2.0", + "pretty-time": "1.1.0", + "std-env": "2.2.1", + "text-table": "0.2.0", + "wrap-ansi": "6.2.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/webpackbar/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpackbar/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/webpackbar/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "1.1.4" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/webpackbar/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", - "requires": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "node_modules/webpackbar/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "5.0.0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "requires": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-simple-access": "7.12.1", - "babel-plugin-dynamic-import-node": "2.3.3" + "node_modules/webpackbar/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "4.3.0", + "string-width": "4.2.0", + "strip-ansi": "6.0.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", - "requires": { - "@babel/helper-hoist-variables": "7.10.4", - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-validator-identifier": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "node_modules/webpackbar/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "2.0.1" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", - "requires": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dependencies": { + "websocket-extensions": "0.1.4" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1" - } + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/whatwg-fetch": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", + "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.12.1" + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "2.0.0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", - "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "4.2.0" } }, - "@babel/plugin-transform-react-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz", - "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==", - "requires": { - "@babel/helper-builder-react-jsx": "7.10.4", - "@babel/helper-builder-react-jsx-experimental": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-jsx": "7.12.1" + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz", - "integrity": "sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==", - "requires": { - "@babel/helper-builder-react-jsx-experimental": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-jsx": "7.12.1" + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dependencies": { + "errno": "0.1.7" } }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", - "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dependencies": { + "microevent.ts": "0.1.1" } }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", - "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "3.2.1", + "string-width": "3.1.0", + "strip-ansi": "5.2.0" } }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", - "requires": { - "regenerator-transform": "0.14.5" + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "0.1.4", + "is-typedarray": "1.0.0", + "signal-exit": "3.0.3", + "typedarray-to-buffer": "3.1.5" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dependencies": { + "async-limiter": "1.0.1" } }, - "@babel/plugin-transform-runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", - "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", - "requires": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "resolve": "1.17.0", - "semver": "5.7.1" - }, + "node_modules/x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/xmlbuilder": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", + "engines": { + "node": ">=6.0" } }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "7.12.1" + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "node_modules/y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "5.0.0", + "find-up": "3.0.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "3.1.0", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "13.1.2" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-regex": "7.10.5" + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "5.3.1", + "decamelize": "1.2.0" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.5.1.tgz", + "integrity": "sha512-TAQHRHaCUAR0bNhUHG0CnO6FTx3EMPwZQrjPuNS6kHvCQ/H8dVD0sLsHyM8C7U4j33xPQCWi9TBnSx8cYXNmNw==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@algolia/cache-common": "4.5.1" } }, - "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "@algolia/cache-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.5.1.tgz", + "integrity": "sha512-Sux+pcedQi9sfScIiQdl6pEaTVl712qM9OblvDhnaeF1v6lf4jyTlRTiBLP7YBLuvO1Yo54W3maf03kmz9PVhA==" + }, + "@algolia/cache-in-memory": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.5.1.tgz", + "integrity": "sha512-fzwAtBFwveuG+E5T/namChEIvdVl0DoV3djV1C078b/JpO5+DeAwuXIJGYbyl950u170n5NEYuIwYG+R6h4lJQ==", "requires": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-typescript": "7.12.1" + "@algolia/cache-common": "4.5.1" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "@algolia/client-account": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.5.1.tgz", + "integrity": "sha512-2WFEaI7Zf4ljnBsSAS4e+YylZ5glovm78xFg4E1JKA8PE6M+TeIgUY6HO2ouLh2dqQKxc9UfdAT1Loo/dha2iQ==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@algolia/client-common": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/transporter": "4.5.1" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "@algolia/client-analytics": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.5.1.tgz", + "integrity": "sha512-bTmZUU8zhZMWBeGEQ/TVqLoL3OOT0benU0HtS3iOnQURwb+AOCv3RsgZvkj2djp+M24Q6P8/L34uBJMmCurbLg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@algolia/client-common": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" } }, - "@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "@algolia/client-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.5.1.tgz", + "integrity": "sha512-5CpIf8IK1hke7q+N4e+A4TWdFXVJ5Qwyaa0xS84DrDO8HQ7vfYbDvG1oYa9hVEtGn6c3WVKPAvuWynK+fXQQCA==", "requires": { - "@babel/compat-data": "7.12.1", - "@babel/helper-compilation-targets": "7.12.1", - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-validator-option": "7.12.1", - "@babel/plugin-proposal-async-generator-functions": "7.12.1", - "@babel/plugin-proposal-class-properties": "7.12.1", - "@babel/plugin-proposal-dynamic-import": "7.12.1", - "@babel/plugin-proposal-export-namespace-from": "7.12.1", - "@babel/plugin-proposal-json-strings": "7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", - "@babel/plugin-proposal-numeric-separator": "7.12.1", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "7.12.1", - "@babel/plugin-proposal-optional-chaining": "7.12.1", - "@babel/plugin-proposal-private-methods": "7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "7.12.1", - "@babel/plugin-syntax-async-generators": "7.8.4", - "@babel/plugin-syntax-class-properties": "7.12.1", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-syntax-export-namespace-from": "7.8.3", - "@babel/plugin-syntax-json-strings": "7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-syntax-numeric-separator": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3", - "@babel/plugin-syntax-optional-chaining": "7.8.3", - "@babel/plugin-syntax-top-level-await": "7.12.1", - "@babel/plugin-transform-arrow-functions": "7.12.1", - "@babel/plugin-transform-async-to-generator": "7.12.1", - "@babel/plugin-transform-block-scoped-functions": "7.12.1", - "@babel/plugin-transform-block-scoping": "7.12.1", - "@babel/plugin-transform-classes": "7.12.1", - "@babel/plugin-transform-computed-properties": "7.12.1", - "@babel/plugin-transform-destructuring": "7.12.1", - "@babel/plugin-transform-dotall-regex": "7.12.1", - "@babel/plugin-transform-duplicate-keys": "7.12.1", - "@babel/plugin-transform-exponentiation-operator": "7.12.1", - "@babel/plugin-transform-for-of": "7.12.1", - "@babel/plugin-transform-function-name": "7.12.1", - "@babel/plugin-transform-literals": "7.12.1", - "@babel/plugin-transform-member-expression-literals": "7.12.1", - "@babel/plugin-transform-modules-amd": "7.12.1", - "@babel/plugin-transform-modules-commonjs": "7.12.1", - "@babel/plugin-transform-modules-systemjs": "7.12.1", - "@babel/plugin-transform-modules-umd": "7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "7.12.1", - "@babel/plugin-transform-new-target": "7.12.1", - "@babel/plugin-transform-object-super": "7.12.1", - "@babel/plugin-transform-parameters": "7.12.1", - "@babel/plugin-transform-property-literals": "7.12.1", - "@babel/plugin-transform-regenerator": "7.12.1", - "@babel/plugin-transform-reserved-words": "7.12.1", - "@babel/plugin-transform-shorthand-properties": "7.12.1", - "@babel/plugin-transform-spread": "7.12.1", - "@babel/plugin-transform-sticky-regex": "7.12.1", - "@babel/plugin-transform-template-literals": "7.12.1", - "@babel/plugin-transform-typeof-symbol": "7.12.1", - "@babel/plugin-transform-unicode-escapes": "7.12.1", - "@babel/plugin-transform-unicode-regex": "7.12.1", - "@babel/preset-modules": "0.1.4", - "@babel/types": "7.12.1", - "core-js-compat": "3.6.5", - "semver": "5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" } }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "@algolia/client-recommendation": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.5.1.tgz", + "integrity": "sha512-GiFrNSImoEBUQICjFBEoxPGzrjWji8PY9GeMg2CNvOYcRQ0Xt0Y36v9GN53NLjvB7QdQ2FlE1Cuv/PLUfS/aQQ==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "7.12.1", - "@babel/plugin-transform-dotall-regex": "7.12.1", - "@babel/types": "7.12.1", - "esutils": "2.0.3" + "@algolia/client-common": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" } }, - "@babel/preset-react": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", - "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "@algolia/client-search": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.5.1.tgz", + "integrity": "sha512-wjuOTte9Auo9Cg4fL0709PjeJ9rXFh4okYUrOt/2SWqQid6DSdZOp+BtyaHKV3E94sj+SlmMxkMUacYluYg5zA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-transform-react-display-name": "7.12.1", - "@babel/plugin-transform-react-jsx": "7.12.1", - "@babel/plugin-transform-react-jsx-development": "7.12.1", - "@babel/plugin-transform-react-jsx-self": "7.12.1", - "@babel/plugin-transform-react-jsx-source": "7.12.1", - "@babel/plugin-transform-react-pure-annotations": "7.12.1" + "@algolia/client-common": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" } }, - "@babel/preset-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", - "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "@algolia/logger-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.5.1.tgz", + "integrity": "sha512-ZoVnGriinlLHlkvn5K7djOUn1/1IeTjU8rDzOJ3t06T+2hQytgJghaX7rSwKIeH4CjWMy61w8jLisuGJRBOEeg==" + }, + "@algolia/logger-console": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.5.1.tgz", + "integrity": "sha512-1qa7K18+uAgxyWuguayaDS5ViiZFcOjI3J5ACBb0i/n7RsXUo149lP6mwmx6TIU7s135hT0f0TCqnvfMvN1ilA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-transform-typescript": "7.12.1" + "@algolia/logger-common": "4.5.1" } }, - "@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "@algolia/requester-browser-xhr": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.5.1.tgz", + "integrity": "sha512-tsQz+9pZw9dwPm/wMvZDpsWFZgmghLjXi4c3O4rfwoP/Ikum5fhle5fiR14yb4Lw4WlOQ1AJIHJvrg1qLIG8hQ==", "requires": { - "regenerator-runtime": "0.13.7" + "@algolia/requester-common": "4.5.1" } }, - "@babel/runtime-corejs3": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", - "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "@algolia/requester-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.5.1.tgz", + "integrity": "sha512-bPCiLvhHKXaka7f5FLtheChToz0yHVhvza64naFJRRh/3kC0nvyrvQ0ogjiydiSrGIfdNDyyTVfKGdk4gS5gyA==" + }, + "@algolia/requester-node-http": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.5.1.tgz", + "integrity": "sha512-BfFc2h9eQOKu1gGs3DtQO7GrVZW/rxUgpJVLja4UVQyGplJyTCrFgkTyfl+8rb3MkNgA/S2LNo7cKNSPfpqeAQ==", "requires": { - "core-js-pure": "3.6.5", - "regenerator-runtime": "0.13.7" + "@algolia/requester-common": "4.5.1" } }, - "@babel/template": { + "@algolia/transporter": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.5.1.tgz", + "integrity": "sha512-asPDNToDAPhH0tM6qKGTn1l0wTlNUbekpa1ifZ6v+qhSjo3VdqGyp+2VeciJOBW/wVHXh3HUbAcycvLERRlCLg==", + "requires": { + "@algolia/cache-common": "4.5.1", + "@algolia/logger-common": "4.5.1", + "@algolia/requester-common": "4.5.1" + } + }, + "@babel/code-frame": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/code-frame": "7.10.4", - "@babel/parser": "7.12.3", - "@babel/types": "7.12.1" + "@babel/highlight": "7.10.4" } }, - "@babel/traverse": { + "@babel/compat-data": { "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + }, + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", "requires": { "@babel/code-frame": "7.10.4", "@babel/generator": "7.12.1", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-split-export-declaration": "7.11.0", + "@babel/helper-module-transforms": "7.12.1", + "@babel/helpers": "7.12.1", "@babel/parser": "7.12.3", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", "@babel/types": "7.12.1", + "convert-source-map": "1.7.0", "debug": "4.2.0", - "globals": "11.12.0", - "lodash": "4.17.20" + "gensync": "1.0.0-beta.1", + "json5": "2.1.3", + "lodash": "4.17.20", + "resolve": "1.17.0", + "semver": "5.7.1", + "source-map": "0.5.7" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, - "@babel/types": { + "@babel/generator": { "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", "requires": { - "@babel/helper-validator-identifier": "7.10.4", - "lodash": "4.17.20", - "to-fast-properties": "2.0.0" + "@babel/types": "7.12.1", + "jsesc": "2.5.2", + "source-map": "0.5.7" } }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, - "@docsearch/css": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", - "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" - }, - "@docsearch/react": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", - "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "requires": { - "@docsearch/css": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", - "algoliasearch": "^4.0.0" + "@babel/types": "7.12.1" } }, - "@docusaurus/core": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", - "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "requires": { - "@babel/core": "^7.9.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", + "@babel/helper-explode-assignable-expression": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.1.tgz", + "integrity": "sha512-82to8lR7TofZWbTd3IEZT1xNHfeU/Ef4rDm/GLXddzqDh+yQ19QuGSzqww51aNxVH8rwfRIzL0EUQsvODVhtyw==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-module-imports": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "requires": { + "@babel/compat-data": "7.12.1", + "@babel/helper-validator-option": "7.12.1", + "browserslist": "4.14.5", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/helper-member-expression-to-functions": "7.12.1", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-regex": "7.10.5", + "regexpu-core": "4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/types": "7.12.1", + "lodash": "4.17.20" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "7.10.4", + "@babel/template": "7.10.4", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-simple-access": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0", + "@babel/helper-validator-identifier": "7.10.4", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1", + "lodash": "4.17.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "requires": { + "lodash": "4.17.20" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-wrap-function": "7.12.3", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "requires": { + "@babel/helper-member-expression-to-functions": "7.12.1", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helpers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "requires": { + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "7.10.4", + "chalk": "2.4.2", + "js-tokens": "4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-remap-async-to-generator": "7.12.1", + "@babel/plugin-syntax-async-generators": "7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-dynamic-import": "7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-export-namespace-from": "7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-json-strings": "7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-numeric-separator": "7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-transform-parameters": "7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "7.12.1", + "@babel/plugin-syntax-optional-chaining": "7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "requires": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", + "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "requires": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-remap-async-to-generator": "7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-define-map": "7.10.5", + "@babel/helper-function-name": "7.10.4", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0", + "globals": "11.12.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "requires": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "requires": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-simple-access": "7.12.1", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "requires": { + "@babel/helper-hoist-variables": "7.10.4", + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-validator-identifier": "7.10.4", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "requires": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-replace-supers": "7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", + "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz", + "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==", + "requires": { + "@babel/helper-builder-react-jsx": "7.10.4", + "@babel/helper-builder-react-jsx-experimental": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-jsx": "7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz", + "integrity": "sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==", + "requires": { + "@babel/helper-builder-react-jsx-experimental": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-jsx": "7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", + "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", + "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "requires": { + "regenerator-transform": "0.14.5" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "requires": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "resolve": "1.17.0", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-regex": "7.10.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", + "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "requires": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-typescript": "7.12.1" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "requires": { + "@babel/compat-data": "7.12.1", + "@babel/helper-compilation-targets": "7.12.1", + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-validator-option": "7.12.1", + "@babel/plugin-proposal-async-generator-functions": "7.12.1", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-proposal-dynamic-import": "7.12.1", + "@babel/plugin-proposal-export-namespace-from": "7.12.1", + "@babel/plugin-proposal-json-strings": "7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", + "@babel/plugin-proposal-numeric-separator": "7.12.1", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "7.12.1", + "@babel/plugin-proposal-optional-chaining": "7.12.1", + "@babel/plugin-proposal-private-methods": "7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "7.12.1", + "@babel/plugin-syntax-async-generators": "7.8.4", + "@babel/plugin-syntax-class-properties": "7.12.1", + "@babel/plugin-syntax-dynamic-import": "7.8.3", + "@babel/plugin-syntax-export-namespace-from": "7.8.3", + "@babel/plugin-syntax-json-strings": "7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", + "@babel/plugin-syntax-numeric-separator": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3", + "@babel/plugin-syntax-optional-chaining": "7.8.3", + "@babel/plugin-syntax-top-level-await": "7.12.1", + "@babel/plugin-transform-arrow-functions": "7.12.1", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-block-scoped-functions": "7.12.1", + "@babel/plugin-transform-block-scoping": "7.12.1", + "@babel/plugin-transform-classes": "7.12.1", + "@babel/plugin-transform-computed-properties": "7.12.1", + "@babel/plugin-transform-destructuring": "7.12.1", + "@babel/plugin-transform-dotall-regex": "7.12.1", + "@babel/plugin-transform-duplicate-keys": "7.12.1", + "@babel/plugin-transform-exponentiation-operator": "7.12.1", + "@babel/plugin-transform-for-of": "7.12.1", + "@babel/plugin-transform-function-name": "7.12.1", + "@babel/plugin-transform-literals": "7.12.1", + "@babel/plugin-transform-member-expression-literals": "7.12.1", + "@babel/plugin-transform-modules-amd": "7.12.1", + "@babel/plugin-transform-modules-commonjs": "7.12.1", + "@babel/plugin-transform-modules-systemjs": "7.12.1", + "@babel/plugin-transform-modules-umd": "7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "7.12.1", + "@babel/plugin-transform-new-target": "7.12.1", + "@babel/plugin-transform-object-super": "7.12.1", + "@babel/plugin-transform-parameters": "7.12.1", + "@babel/plugin-transform-property-literals": "7.12.1", + "@babel/plugin-transform-regenerator": "7.12.1", + "@babel/plugin-transform-reserved-words": "7.12.1", + "@babel/plugin-transform-shorthand-properties": "7.12.1", + "@babel/plugin-transform-spread": "7.12.1", + "@babel/plugin-transform-sticky-regex": "7.12.1", + "@babel/plugin-transform-template-literals": "7.12.1", + "@babel/plugin-transform-typeof-symbol": "7.12.1", + "@babel/plugin-transform-unicode-escapes": "7.12.1", + "@babel/plugin-transform-unicode-regex": "7.12.1", + "@babel/preset-modules": "0.1.4", + "@babel/types": "7.12.1", + "core-js-compat": "3.6.5", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "7.12.1", + "@babel/plugin-transform-dotall-regex": "7.12.1", + "@babel/types": "7.12.1", + "esutils": "2.0.3" + } + }, + "@babel/preset-react": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", + "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-transform-react-display-name": "7.12.1", + "@babel/plugin-transform-react-jsx": "7.12.1", + "@babel/plugin-transform-react-jsx-development": "7.12.1", + "@babel/plugin-transform-react-jsx-self": "7.12.1", + "@babel/plugin-transform-react-jsx-source": "7.12.1", + "@babel/plugin-transform-react-pure-annotations": "7.12.1" + } + }, + "@babel/preset-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-transform-typescript": "7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "requires": { + "regenerator-runtime": "0.13.7" + } + }, + "@babel/runtime-corejs3": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", + "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "requires": { + "core-js-pure": "3.6.5", + "regenerator-runtime": "0.13.7" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "7.10.4", + "@babel/parser": "7.12.3", + "@babel/types": "7.12.1" + } + }, + "@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "requires": { + "@babel/code-frame": "7.10.4", + "@babel/generator": "7.12.1", + "@babel/helper-function-name": "7.10.4", + "@babel/helper-split-export-declaration": "7.11.0", + "@babel/parser": "7.12.3", + "@babel/types": "7.12.1", + "debug": "4.2.0", + "globals": "11.12.0", + "lodash": "4.17.20" + } + }, + "@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "requires": { + "@babel/helper-validator-identifier": "7.10.4", + "lodash": "4.17.20", + "to-fast-properties": "2.0.0" + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@docsearch/css": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", + "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" + }, + "@docsearch/react": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", + "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", + "requires": { + "@docsearch/css": "^1.0.0-alpha.28", + "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", + "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", + "algoliasearch": "^4.0.0" + } + }, + "@docusaurus/core": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", + "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "requires": { + "@babel/core": "^7.9.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", "@babel/plugin-proposal-optional-chaining": "^7.10.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-runtime": "^7.9.0", @@ -18294,152 +18637,6 @@ "chalk": "^3.0.0" } }, - "@emotion/cache": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", - "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", - "dev": true, - "optional": true, - "requires": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" - } - }, - "@emotion/core": { - "version": "10.0.35", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.35.tgz", - "integrity": "sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw==", - "dev": true, - "optional": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/css": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", - "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", - "dev": true, - "optional": true, - "requires": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", - "dev": true, - "optional": true - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, - "optional": true, - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true, - "optional": true - }, - "@emotion/serialize": { - "version": "0.11.16", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", - "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", - "dev": true, - "optional": true, - "requires": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - }, - "dependencies": { - "csstype": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz", - "integrity": "sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==", - "dev": true, - "optional": true - } - } - }, - "@emotion/sheet": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", - "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", - "dev": true, - "optional": true - }, - "@emotion/styled": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", - "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", - "dev": true, - "optional": true, - "requires": { - "@emotion/styled-base": "^10.0.27", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/styled-base": { - "version": "10.0.31", - "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", - "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", - "dev": true, - "optional": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.8", - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true, - "optional": true - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true, - "optional": true - }, - "@emotion/utils": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", - "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", - "dev": true, - "optional": true - }, - "@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", - "dev": true, - "optional": true - }, "@endiliey/static-site-generator-webpack-plugin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", @@ -18691,160 +18888,20 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", "requires": { - "mkdirp": "1.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@styled-system/background": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", - "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/border": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", - "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/color": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", - "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", - "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", - "dev": true, - "optional": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "@styled-system/css": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", - "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==", - "dev": true, - "optional": true - }, - "@styled-system/flexbox": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", - "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/grid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", - "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/layout": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", - "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/position": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", - "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/shadow": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", - "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/should-forward-prop": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz", - "integrity": "sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==", - "dev": true, - "optional": true, - "requires": { - "@emotion/is-prop-valid": "^0.8.1", - "@emotion/memoize": "^0.7.1", - "styled-system": "^5.1.5" - } - }, - "@styled-system/space": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", - "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/typography": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", - "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2" + "mkdirp": "1.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } } }, - "@styled-system/variant": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", - "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "5.4.0", @@ -19819,25 +19876,6 @@ "object.assign": "4.1.1" } }, - "babel-plugin-emotion": { - "version": "10.0.33", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", - "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", - "dev": true, - "optional": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - } - }, "babel-plugin-extract-import-names": { "version": "1.6.19", "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.19.tgz", @@ -19846,25 +19884,6 @@ "@babel/helper-plugin-utils": "7.10.4" } }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dev": true, - "optional": true, - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true, - "optional": true - }, "bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -21757,610 +21776,1124 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { - "bn.js": "4.11.9", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" + "bn.js": "4.11.9", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "0.4.0" + } + }, + "dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "1.3.1", + "entities": "1.1.2" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1.3.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" + } + }, + "dot-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", + "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "requires": { + "no-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "2.0.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "1.4.4", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "stream-shift": "1.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "electron-to-chromium": { + "version": "1.3.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", + "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "4.11.9", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } } } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "once": "1.4.0" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "requires": { - "buffer-indexof": "1.1.1" + "graceful-fs": "4.2.4", + "memory-fs": "0.5.0", + "tapable": "1.1.3" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "esutils": "^2.0.2" + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } } }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "0.4.0" - } + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, - "dom-helpers": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", - "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "prr": "1.0.1" } }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "domelementtype": "1.3.1", - "entities": "1.1.2" + "is-arrayish": "0.2.1" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "requires": { - "domelementtype": "1.3.1" + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-negative-zero": "2.0.0", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" } }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" + "is-callable": "1.2.2", + "is-date-object": "1.0.2", + "is-symbol": "1.0.3" } }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "requires": { - "no-case": "3.0.3", - "tslib": "1.14.1" - } + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "2.0.0" - } + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "eslint": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", + "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", + "dev": true, "requires": { - "end-of-stream": "1.4.4", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "stream-shift": "1.0.1" + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "@babel/highlight": "^7.10.4" } }, - "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==", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "color-convert": "^2.0.1" } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" - }, - "electron-to-chromium": { - "version": "1.3.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", - "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "4.11.9", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "eslint-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", + "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", + "dev": true, "requires": { - "iconv-lite": "^0.6.2" + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "tslib": "^2.2.0", + "unified": "^9.2.1" }, "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", + "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@babel/types": "^7.12.13" } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "requires": { - "graceful-fs": "4.2.4", - "memory-fs": "0.5.0", - "tapable": "1.1.3" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.7" + "@babel/types": "^7.12.13" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, - "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==", + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + }, + "@babel/parser": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", + "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } } } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-negative-zero": "2.0.0", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "1.2.2", - "is-date-object": "1.0.2", - "is-symbol": "1.0.3" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", - "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", + "eslint-plugin-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.1.0.tgz", + "integrity": "sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "remark-parse": "^7.0.0", + "unified": "^6.1.2" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "remark-parse": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", + "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "unist-util-visit": "^1.1.0" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "unist-util-visit-parents": "^2.0.0" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "unist-util-is": "^3.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", "dev": true, "requires": { - "color-name": "~1.1.4" + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", "dev": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "unist-util-stringify-position": "^1.1.1" + } + } + } + }, + "eslint-plugin-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", + "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.13.0", + "eslint-plugin-markdown": "^2.1.0", + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "synckit": "^0.1.5", + "tslib": "^2.2.0", + "unified": "^9.2.1", + "vfile": "^4.2.1" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" } }, - "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "@babel/generator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", + "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", + "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} - }, - "eslint-mdx": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.8.2.tgz", - "integrity": "sha512-j7mkBFr7zHLaiqGu+iWker9qwWfti29xUAuUDDad95l+H189R4++dsuSUB6u19wy6CCuspIt5I6katzbpRbbMw==", - "dev": true, - "requires": { - "espree": "^7.2.0", - "remark-mdx": "^1.6.16", - "remark-parse": "^8.0.3", - "tslib": "^2.0.1", - "unified": "^9.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", "dev": true - } - } - }, - "eslint-plugin-mdx": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.8.2.tgz", - "integrity": "sha512-fKkhsR1cTCHQUVcoguUmOohMo87297/H1Z0Zye3GF4ivvxcpX8fboLILLR2Em76QV8RrjP4sxrgBuOA9rBIumw==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.8.2", - "eslint-plugin-react": "^7.20.6", - "rebass": "^4.0.7", - "remark-mdx": "^1.6.16", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "tslib": "^2.0.1", - "unified": "^9.1.0", - "vfile": "^4.1.1" - }, - "dependencies": { + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -22374,11 +22907,75 @@ "yaml": "^1.10.0" } }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true + }, + "unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } } } }, @@ -23087,13 +23684,6 @@ "pkg-dir": "3.0.0" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true, - "optional": true - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -28463,16 +29053,6 @@ "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" }, - "rebass": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/rebass/-/rebass-4.0.7.tgz", - "integrity": "sha512-GJot6j6Qcr7jk1QIgf9qBoud75CGRpN8pGcEo98TSp4KNSWV01ZLvGwFKGI35oEBuNs+lpEd3+pnwkQUTSFytg==", - "dev": true, - "optional": true, - "requires": { - "reflexbox": "^4.0.6" - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -28489,20 +29069,6 @@ "minimatch": "3.0.4" } }, - "reflexbox": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/reflexbox/-/reflexbox-4.0.6.tgz", - "integrity": "sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==", - "dev": true, - "optional": true, - "requires": { - "@emotion/core": "^10.0.0", - "@emotion/styled": "^10.0.0", - "@styled-system/css": "^5.0.0", - "@styled-system/should-forward-prop": "^5.0.0", - "styled-system": "^5.0.0" - } - }, "regenerate": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", @@ -28880,7 +29446,8 @@ "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true }, "require-directory": { "version": "2.1.1", @@ -30182,28 +30749,6 @@ "inline-style-parser": "0.1.1" } }, - "styled-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "dev": true, - "optional": true, - "requires": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, "stylehacks": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", @@ -30296,6 +30841,30 @@ } } }, + "synckit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", + "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "dev": true, + "requires": { + "tslib": "^2.2.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, "table": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", @@ -31219,13 +31788,12 @@ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" }, "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" }, @@ -32512,6 +33080,12 @@ "async-limiter": "1.0.1" } }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", diff --git a/docs/package.json b/docs/package.json index a236d3e16da..077835912a2 100644 --- a/docs/package.json +++ b/docs/package.json @@ -42,7 +42,7 @@ "devDependencies": { "eslint": "^7.25.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-mdx": "^1.8.2", + "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", "null-loader": "^3.0.0", "prettier": "2.1.2", From 8196b1d46b54883758f9b153da0445fd1a641971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20St=C3=BCcklberger?= Date: Wed, 19 May 2021 17:10:29 +0200 Subject: [PATCH 0042/1130] fix(docs): Add missing semicolon to examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Christian Stücklberger --- docs/docs/behaviors/hold-tap.md | 2 +- docs/docs/behaviors/mod-morph.md | 23 +++++++++++------------ docs/docs/behaviors/mod-tap.md | 4 ++-- docs/docs/behaviors/sticky-key.md | 4 ++-- docs/docs/behaviors/sticky-layer.md | 4 ++-- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 957744b3e96..e1627c7a82a 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -56,7 +56,7 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin ``` &mt { retro-tap; -} +}; ``` #### Home row mods diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index cbb9a5698ae..2606aaf8bf9 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -22,21 +22,20 @@ An example of how to implement the mod-morph "Grave Escape": ``` / { -behaviors { - gresc: grave_escape { - compatible = "zmk,behavior-mod-morph"; - label = "GRAVE_ESCAPE"; - #binding-cells = <0>; - bindings = <&kp ESC>, <&kp GRAVE>; - mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; - } - -}; + behaviors { + gresc: grave_escape { + compatible = "zmk,behavior-mod-morph"; + label = "GRAVE_ESCAPE"; + #binding-cells = <0>; + bindings = <&kp ESC>, <&kp GRAVE>; + mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; + }; + }; keymap { ... - } -} + }; +}; ``` Note that this specific mod-morph exists in ZMK by default using code `&gresc`. diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index bd08a38d0a6..32380920b5a 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -40,8 +40,8 @@ You can configure a different tapping term in your keymap: / { keymap { ... - } -} + }; +}; ``` ### Additional information diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index d5627dcbf3f..3f7eb511699 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -38,8 +38,8 @@ You can configure a different `release-after-ms` in your keymap: / { keymap { ... - } -} + }; +}; ``` ### Advanced usage diff --git a/docs/docs/behaviors/sticky-layer.md b/docs/docs/behaviors/sticky-layer.md index 597ed9f049e..d7c794d0605 100644 --- a/docs/docs/behaviors/sticky-layer.md +++ b/docs/docs/behaviors/sticky-layer.md @@ -32,8 +32,8 @@ You can configure a different `release-after-ms` in your keymap: / { keymap { ... - } -} + }; +}; ``` ### Advanced usage From a32cd668d6c793ee77c4d85ce5fb47e793f8ae11 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Thu, 27 May 2021 14:20:45 +0200 Subject: [PATCH 0043/1130] fix(tests): Use debug builds and high resolution timer By setting CONFIG_DEBUG, the native_posix builds will not be optimized which makes debugging them much nicer. By setting CONFIG_SYS_CLOCK_TICKS_PER_SEC to 1000, debug prints have a higher resolution and not always show up as multiples of 10ms. --- app/boards/native_posix.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/boards/native_posix.conf b/app/boards/native_posix.conf index 357b1b86346..fa9d953e917 100644 --- a/app/boards/native_posix.conf +++ b/app/boards/native_posix.conf @@ -6,3 +6,5 @@ CONFIG_ZMK_BLE=n CONFIG_LOG=y CONFIG_LOG_BACKEND_SHOW_COLOR=n CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 From 3f838f0aaf90cd5f8dad622fd1d901a9a8eb40d0 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sat, 29 May 2021 10:00:40 -0500 Subject: [PATCH 0044/1130] feat(boards): Add nice!60 board --- app/boards/arm/nice60/CMakeLists.txt | 8 ++ app/boards/arm/nice60/Kconfig | 8 ++ app/boards/arm/nice60/Kconfig.board | 6 + app/boards/arm/nice60/Kconfig.defconfig | 31 +++++ app/boards/arm/nice60/README.md | 9 ++ app/boards/arm/nice60/board.cmake | 6 + app/boards/arm/nice60/nice60.dts | 172 ++++++++++++++++++++++++ app/boards/arm/nice60/nice60.keymap | 50 +++++++ app/boards/arm/nice60/nice60.yaml | 14 ++ app/boards/arm/nice60/nice60_defconfig | 27 ++++ 10 files changed, 331 insertions(+) create mode 100644 app/boards/arm/nice60/CMakeLists.txt create mode 100644 app/boards/arm/nice60/Kconfig create mode 100644 app/boards/arm/nice60/Kconfig.board create mode 100644 app/boards/arm/nice60/Kconfig.defconfig create mode 100644 app/boards/arm/nice60/README.md create mode 100644 app/boards/arm/nice60/board.cmake create mode 100644 app/boards/arm/nice60/nice60.dts create mode 100644 app/boards/arm/nice60/nice60.keymap create mode 100644 app/boards/arm/nice60/nice60.yaml create mode 100644 app/boards/arm/nice60/nice60_defconfig diff --git a/app/boards/arm/nice60/CMakeLists.txt b/app/boards/arm/nice60/CMakeLists.txt new file mode 100644 index 00000000000..f833ff2e975 --- /dev/null +++ b/app/boards/arm/nice60/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x1000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/app/boards/arm/nice60/Kconfig b/app/boards/arm/nice60/Kconfig new file mode 100644 index 00000000000..db7cf398305 --- /dev/null +++ b/app/boards/arm/nice60/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2021 Nick Winans +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NICE60 diff --git a/app/boards/arm/nice60/Kconfig.board b/app/boards/arm/nice60/Kconfig.board new file mode 100644 index 00000000000..778f79eb694 --- /dev/null +++ b/app/boards/arm/nice60/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2021 Nick Winans +# SPDX-License-Identifier: MIT + +config BOARD_NICE60 + bool "nice!60" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/nice60/Kconfig.defconfig b/app/boards/arm/nice60/Kconfig.defconfig new file mode 100644 index 00000000000..81a7c035c0a --- /dev/null +++ b/app/boards/arm/nice60/Kconfig.defconfig @@ -0,0 +1,31 @@ +# Copyright (c) 2021 Nick Winans +# SPDX-License-Identifier: MIT + +if BOARD_NICE60 + +config ZMK_KEYBOARD_NAME + default "nice!60" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +endif # BOARD_NICE60 diff --git a/app/boards/arm/nice60/README.md b/app/boards/arm/nice60/README.md new file mode 100644 index 00000000000..49433df8f5b --- /dev/null +++ b/app/boards/arm/nice60/README.md @@ -0,0 +1,9 @@ +# nice!60 +![nice!60](https://i.imgur.com/0YWv5PE.png) + +The nice!60 is a hotswap 60% made by Nice Keyboards. https://nicekeyboards.com/nice-60 + +## Building nice!60 ZMK firmware +``` +west build -p -b nice60 +``` diff --git a/app/boards/arm/nice60/board.cmake b/app/boards/arm/nice60/board.cmake new file mode 100644 index 00000000000..7f511c5bb98 --- /dev/null +++ b/app/boards/arm/nice60/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2021 Nick Winans +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts new file mode 100644 index 00000000000..f50f94a392f --- /dev/null +++ b/app/boards/arm/nice60/nice60.dts @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2021 Nick Winans + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include + +/ { + model = "nice!60"; + compatible = "nice,60"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + zmk,underglow = &led_strip; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,13) +RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,9) RC(4,10) RC(4,11) RC(4,13) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio1 3 GPIO_ACTIVE_HIGH> + , <&gpio1 7 GPIO_ACTIVE_HIGH> + , <&gpio1 4 GPIO_ACTIVE_HIGH> + , <&gpio1 6 GPIO_ACTIVE_HIGH> + , <&gpio1 5 GPIO_ACTIVE_HIGH> + , <&gpio1 1 GPIO_ACTIVE_HIGH> + , <&gpio1 2 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&spi0 { + compatible = "nordic,nrf-spim"; + /* Cannot be used together with i2c0. */ + status = "okay"; + sck-pin = <12>; + mosi-pin = <27>; + miso-pin = <13>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <12>; /* LED strip length */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +&usbd { + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "mbr"; + reg = <0x00000000 0x00001000>; + }; + + code_partition: partition@1000 { + label = "code_partition"; + reg = <0x00001000 0x000d3000>; + }; + + /* + * The flash starting at 0x000d4000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@d4000 { + label = "storage"; + reg = <0x000d4000 0x00020000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/nice60/nice60.keymap b/app/boards/arm/nice60/nice60.keymap new file mode 100644 index 00000000000..bdb188df051 --- /dev/null +++ b/app/boards/arm/nice60/nice60.keymap @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Nick Winans + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | +// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | +// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | +// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | +// | CTL | WIN | ALT | SPACE | ALT | WIN | MO(1) | CTL | +// ------------------------------------------------------------------------------------------ + bindings = < + &gresc &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &mo 1 &kp RCTRL + >; + }; + + rgb_layer { +// ------------------------------------------------------------------------------------------------ +// | BT CLR | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | EFFECT REV | +// | BT 1 | | UP | | HUEUP | SATUP | BRIUP | SPDUP | | | | | | | +// | BT 2 | LT | DN | RT | HUEDN | SATDN | BRIDN | SPDDN | | | | | EFFECT FORW | +// | BT 3 | | | | | | | | | | | | +// | BT 4 | | | TOG RGB | PRT SCR | | | DEL | +// ------------------------------------------------------------------------------------------------ + bindings = < + &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &rgb_ug RGB_EFR + &bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans + &bt BT_SEL 1 &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &trans &trans &trans &trans &rgb_ug RGB_EFF + &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_SEL 3 &trans &trans &rgb_ug RGB_TOG &kp PSCRN &trans &trans &kp DEL + >; + }; + }; +}; diff --git a/app/boards/arm/nice60/nice60.yaml b/app/boards/arm/nice60/nice60.yaml new file mode 100644 index 00000000000..d3db56f6905 --- /dev/null +++ b/app/boards/arm/nice60/nice60.yaml @@ -0,0 +1,14 @@ +identifier: nice60 +name: nice!60 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/nice60/nice60_defconfig b/app/boards/arm/nice60/nice60_defconfig new file mode 100644 index 00000000000..3a3a978ff5a --- /dev/null +++ b/app/boards/arm/nice60/nice60_defconfig @@ -0,0 +1,27 @@ +# Copyright (c) 2021 Nick Winans +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NICE60=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_WS2812_STRIP=y + +CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=160 +CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3 From cdbfb3566245c47d0259303c09b89c81e3d722ee Mon Sep 17 00:00:00 2001 From: Anthony Amanse Date: Sun, 30 May 2021 21:20:46 -0700 Subject: [PATCH 0045/1130] fix(boards): Fix Blue LED pin definition in BlueMicro840 This commit fixes the pin definition for BlueMicro840. Based on the schematics, the blue led is at pin 1.10. Signed-off-by: Anthony Amanse --- app/boards/arm/bluemicro840/bluemicro840_v1.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index 31551f4f64a..a3a5ba9918f 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -21,7 +21,7 @@ leds { compatible = "gpio-leds"; blue_led: led_0 { - gpios = <&gpio0 42 GPIO_ACTIVE_HIGH>; + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; label = "Blue LED"; }; }; From 719b6aa0ae66ffc0a1da44cae66f00a20ebb24f4 Mon Sep 17 00:00:00 2001 From: Anthony Amanse Date: Sun, 30 May 2021 21:44:30 -0700 Subject: [PATCH 0046/1130] fix(boards): Add delay on initializing external power for BlueMicro840 This commits adds a delay of 20ms on initializing the external power control driver. Previously, OLED's i2c driver is failing to initialize the display. This commit fixes that issue. Signed-off-by: Anthony Amanse --- app/boards/arm/bluemicro840/bluemicro840_v1.dts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index a3a5ba9918f..933df570842 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -29,6 +29,7 @@ ext-power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; + init-delay-ms = <20>; control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; }; From efcc49f23dba0fa896c5cc0603e3fc9c664af166 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Thu, 3 Jun 2021 23:33:44 -0500 Subject: [PATCH 0047/1130] fix(boards): Set nice!60 nRF subfamily for openocd (#816) --- app/boards/arm/nice60/board.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/arm/nice60/board.cmake b/app/boards/arm/nice60/board.cmake index 7f511c5bb98..2aca938a51a 100644 --- a/app/boards/arm/nice60/board.cmake +++ b/app/boards/arm/nice60/board.cmake @@ -1,6 +1,7 @@ # Copyright (c) 2021 Nick Winans # SPDX-License-Identifier: MIT +set(OPENOCD_NRF5_SUBFAMILY nrf52) board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) From 0a9efbf85d0ed295446db3da310e4662e39e2d15 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 6 Jun 2021 12:13:48 -0500 Subject: [PATCH 0048/1130] fix(ble): Ignore out of range profiles Don't allow selecting a BLE profile that is out of range to avoid reading/writing past the end of the profiles array. --- app/src/ble.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/ble.c b/app/src/ble.c index b15a079e1c2..a9f2afe9ab8 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -250,6 +251,10 @@ static int ble_save_profile() { } int zmk_ble_prof_select(uint8_t index) { + if (index >= PROFILE_COUNT) { + return -ERANGE; + } + LOG_DBG("profile %d", index); if (active_profile == index) { return 0; From bba1599824dc98284656d96748c7f09f10d5a00e Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Tue, 8 Jun 2021 10:43:27 -0500 Subject: [PATCH 0049/1130] refactor(combos): Rename existing long combo test This test doesn't test a long combo that completes, but rather one that's incomplete (so the combo doesn't trigger). Renaming to avoid confusion when we add more long combo tests. --- .../events.patterns | 0 .../keycode_events.snapshot | 0 .../native_posix.keymap | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename app/tests/combo/{press-release-long-combo => press-release-long-combo-incomplete}/events.patterns (100%) rename app/tests/combo/{press-release-long-combo => press-release-long-combo-incomplete}/keycode_events.snapshot (100%) rename app/tests/combo/{press-release-long-combo => press-release-long-combo-incomplete}/native_posix.keymap (100%) diff --git a/app/tests/combo/press-release-long-combo/events.patterns b/app/tests/combo/press-release-long-combo-incomplete/events.patterns similarity index 100% rename from app/tests/combo/press-release-long-combo/events.patterns rename to app/tests/combo/press-release-long-combo-incomplete/events.patterns diff --git a/app/tests/combo/press-release-long-combo/keycode_events.snapshot b/app/tests/combo/press-release-long-combo-incomplete/keycode_events.snapshot similarity index 100% rename from app/tests/combo/press-release-long-combo/keycode_events.snapshot rename to app/tests/combo/press-release-long-combo-incomplete/keycode_events.snapshot diff --git a/app/tests/combo/press-release-long-combo/native_posix.keymap b/app/tests/combo/press-release-long-combo-incomplete/native_posix.keymap similarity index 100% rename from app/tests/combo/press-release-long-combo/native_posix.keymap rename to app/tests/combo/press-release-long-combo-incomplete/native_posix.keymap From eecc12c98022c1dce4a228914887ed328b1774c2 Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Tue, 8 Jun 2021 10:47:23 -0500 Subject: [PATCH 0050/1130] test(combo): Add unit test for complete long combo --- .../events.patterns | 1 + .../keycode_events.snapshot | 2 + .../native_posix.keymap | 39 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 app/tests/combo/press-release-long-combo-complete/events.patterns create mode 100644 app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot create mode 100644 app/tests/combo/press-release-long-combo-complete/native_posix.keymap diff --git a/app/tests/combo/press-release-long-combo-complete/events.patterns b/app/tests/combo/press-release-long-combo-complete/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/combo/press-release-long-combo-complete/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot b/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot new file mode 100644 index 00000000000..a9618a6cc2c --- /dev/null +++ b/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot @@ -0,0 +1,2 @@ +pressed: usage_page 0x07 keycode 0x1d implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1d implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/press-release-long-combo-complete/native_posix.keymap b/app/tests/combo/press-release-long-combo-complete/native_posix.keymap new file mode 100644 index 00000000000..2a71ad32e88 --- /dev/null +++ b/app/tests/combo/press-release-long-combo-complete/native_posix.keymap @@ -0,0 +1,39 @@ +#include +#include +#include + +/ { + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2 3>; + bindings = <&kp Z>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,100) + ZMK_MOCK_RELEASE(1,0,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,1,100) + >; +}; From 4e69a32103a2905b9a32c80c8d3d798fbb0d9a0f Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Tue, 8 Jun 2021 10:56:02 -0500 Subject: [PATCH 0051/1130] fix(combos): Check each combo key, not just last The current combo completion check only makes sure the last key in the combo is set. This works when the combo is typed correctly initially, or when reraising events in a combo of length two. However, it fails for longer combos since the last event in pressed_keys might be set, but the first (or subsequent) event in pressed_keys can be NULL thanks to release_pressed_keys. Also added a regression test. --- app/src/combo.c | 13 +++++-- .../events.patterns | 1 + .../keycode_events.snapshot | 6 +++ .../native_posix.keymap | 37 +++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 app/tests/combo/press-release-long-combo-wrong-last-key/events.patterns create mode 100644 app/tests/combo/press-release-long-combo-wrong-last-key/keycode_events.snapshot create mode 100644 app/tests/combo/press-release-long-combo-wrong-last-key/native_posix.keymap diff --git a/app/src/combo.c b/app/src/combo.c index 72535b2991a..16091cdd175 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -188,8 +188,15 @@ static int64_t first_candidate_timeout() { static inline bool candidate_is_completely_pressed(struct combo_cfg *candidate) { // this code assumes set(pressed_keys) <= set(candidate->key_positions) // this invariant is enforced by filter_candidates - // the only thing we need to do is check if len(pressed_keys) == len(combo->key_positions) - return pressed_keys[candidate->key_position_len - 1] != NULL; + // since events may have been reraised after clearing one or more slots at + // the start of pressed_keys (see: release_pressed_keys), we have to check + // that each key needed to trigger the combo was pressed, not just the last. + for (int i = 0; i < candidate->key_position_len; i++) { + if (pressed_keys[i] == NULL) { + return false; + } + } + return true; } static int cleanup(); @@ -496,4 +503,4 @@ static int combo_init() { SYS_INIT(combo_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); -#endif \ No newline at end of file +#endif diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/events.patterns b/app/tests/combo/press-release-long-combo-wrong-last-key/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/combo/press-release-long-combo-wrong-last-key/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/keycode_events.snapshot b/app/tests/combo/press-release-long-combo-wrong-last-key/keycode_events.snapshot new file mode 100644 index 00000000000..d1b9db96fdd --- /dev/null +++ b/app/tests/combo/press-release-long-combo-wrong-last-key/keycode_events.snapshot @@ -0,0 +1,6 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix.keymap b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix.keymap new file mode 100644 index 00000000000..b8117187751 --- /dev/null +++ b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/ { + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2>; + bindings = <&kp Z>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(0,0,100) + >; +}; From bb3200547440e6b3b976ef738745cdcfff599bfd Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Tue, 8 Jun 2021 20:56:10 -0400 Subject: [PATCH 0052/1130] fix(docs): Update macos GCC embedded section with brew cmd * Update macos GCC embedded section with brew cmd Brew has a cask for GCC embedded, so we can make this guide more user friendly by providing it. --- docs/docs/development/setup.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 6ad4e2bf5c3..2aed91671b4 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -337,6 +337,12 @@ Since the Zephyr™ SDK is not available for Windows, we recommending following Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). +The install command is: + +``` +brew install --cask gcc-arm-embedded +``` + :::warning Security Controls Workaround Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.3.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer From 4c1a71551b8b1dae46442e3d46c3c13b0ecbd03c Mon Sep 17 00:00:00 2001 From: Dom H Date: Thu, 6 May 2021 21:42:03 +0100 Subject: [PATCH 0053/1130] feat(keys): Add LSHIFT and RSHIFT aliases Using LSHIFT or RSHIFT instead of LSHFT or RSHFT was a common error. --- app/include/dt-bindings/zmk/keys.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index 8d0873c4132..915f2d32ea9 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -768,6 +768,7 @@ /* Keyboard Left Shift */ #define LEFT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTSHIFT)) +#define LSHIFT (LEFT_SHIFT) #define LSHFT (LEFT_SHIFT) #define LSFT (LEFT_SHIFT) // WARNING: DEPRECATED (DO NOT USE) @@ -792,6 +793,7 @@ /* Keyboard Right Shift */ #define RIGHT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTSHIFT)) +#define RSHIFT (RIGHT_SHIFT) #define RSHFT (RIGHT_SHIFT) #define RSFT (RIGHT_SHIFT) // WARNING: DEPRECATED (DO NOT USE) From 52ee08269239d8110ca96932ec99f450ea64b109 Mon Sep 17 00:00:00 2001 From: Dom H Date: Thu, 6 May 2021 22:00:36 +0100 Subject: [PATCH 0054/1130] docs(codes): Add LSHIFT and RSHIFT aliases --- docs/src/data/hid.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index ba3d2bf6d96..31e11d2326a 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -4085,7 +4085,7 @@ export default [ footnotes: {}, }, { - names: ["LEFT_SHIFT", "LSHFT", "LS(code)"], + names: ["LEFT_SHIFT", "LSHIFT", "LSHFT", "LS(code)"], description: "Left Shift ⇧", context: "Keyboard", clarify: false, @@ -4179,7 +4179,7 @@ export default [ footnotes: {}, }, { - names: ["RIGHT_SHIFT", "RSHFT", "RS(code)"], + names: ["RIGHT_SHIFT", "RSHIFT", "RSHFT", "RS(code)"], description: "Right Shift ⇧", context: "Keyboard", clarify: false, From 06a85f944f4d3b6520b4af7819a2831d40ff502b Mon Sep 17 00:00:00 2001 From: Dom H Date: Sat, 5 Jun 2021 22:35:59 +0100 Subject: [PATCH 0055/1130] docs(codes): Refer to LSHIFT instead of LSHFT `LSHIFT` is slightly more intuitive and should result in fewer user errors. --- docs/docs/behaviors/hold-tap.md | 2 +- docs/docs/behaviors/mod-tap.md | 4 ++-- docs/docs/behaviors/sticky-key.md | 6 +++--- docs/docs/behaviors/sticky-layer.md | 2 +- docs/docs/features/keymaps.md | 4 ++-- docs/docs/keymap-example-file.md | 6 +++--- docs/docs/keymap-example.md | 6 +++--- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index e1627c7a82a..de4bf81f622 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -85,7 +85,7 @@ This example configures a hold-tap that works well for homerow mods: default_layer { bindings = < - &hm LCTRL A &hm LGUI S &hm LALT D &hm LSHFT F + &hm LCTRL A &hm LGUI S &hm LALT D &hm LSHIFT F >; }; }; diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index 32380920b5a..f29f739b0b1 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -19,13 +19,13 @@ The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode. ### Behavior Binding - Reference: `&mt` -- Parameter #1: The keycode to be sent when activating as a modifier, e.g. `LSHFT` +- Parameter #1: The keycode to be sent when activating as a modifier, e.g. `LSHIFT` - Parameter #2: The keycode to sent when used as a tap, e.g. `A`, `B`. Example: ``` -&mt LSHFT A +&mt LSHIFT A ``` ### Configuration diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index 3f7eb511699..e708576307d 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -12,12 +12,12 @@ By default, sticky keys stay pressed for a second if you don't press any other k ### Behavior Binding - Reference: `&sk` -- Parameter #1: The keycode , e.g. `LSHFT` +- Parameter #1: The keycode , e.g. `LSHIFT` Example: ``` -&sk LSHFT +&sk LSHIFT ``` You can use any keycode that works for `&kp` as parameter to `&sk`: @@ -44,7 +44,7 @@ You can configure a different `release-after-ms` in your keymap: ### Advanced usage -Sticky keys can be combined; if you tap `&sk LCTRL` and then `&sk LSHFT` and then `&kp A`, the output will be ctrl+shift+a. +Sticky keys can be combined; if you tap `&sk LCTRL` and then `&sk LSHIFT` and then `&kp A`, the output will be ctrl+shift+a. ### Comparison to QMK diff --git a/docs/docs/behaviors/sticky-layer.md b/docs/docs/behaviors/sticky-layer.md index d7c794d0605..ac341f7737d 100644 --- a/docs/docs/behaviors/sticky-layer.md +++ b/docs/docs/behaviors/sticky-layer.md @@ -38,7 +38,7 @@ You can configure a different `release-after-ms` in your keymap: ### Advanced usage -Sticky layers behave slightly different from sticky keys. They are configured to `quick-release`. This means that the layer is released immediately when another key is pressed. "Normal" sticky keys are not `quick-release`; they are released when the next key is released. This makes it possible to combine sticky layers and sticky keys as such: tap `&sl 1`, tap `&sk LSHFT` on layer 1, tap `&kp A` on base layer to output shift+A. +Sticky layers behave slightly different from sticky keys. They are configured to `quick-release`. This means that the layer is released immediately when another key is pressed. "Normal" sticky keys are not `quick-release`; they are released when the next key is released. This makes it possible to combine sticky layers and sticky keys as such: tap `&sl 1`, tap `&sk LSHIFT` on layer 1, tap `&kp A` on base layer to output shift+A. ### Comparison to QMK diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index de1f24acb1a..538d589b335 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -70,7 +70,7 @@ In this case, the `A` is actually a define for the raw HID keycode, to make keym For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound: ``` -&mt LSHFT D +&mt LSHIFT D ``` Here, the first parameter is the set of modifiers that should be used for the "hold" behavior, and the second @@ -94,7 +94,7 @@ The top two lines of most keymaps should include: The first defines the nodes for all the available behaviors in ZMK, which will be referenced in the behavior bindings. This is how bindings like `&kp` can reference the key press behavior defined with an anchor name of `kp`. -The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, `C_PLAY`) and the modifiers (e.g. `LSHFT`) used for various behavior bindings. +The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, `C_PLAY`) and the modifiers (e.g. `LSHIFT`) used for various behavior bindings. ### Root devicetree Node diff --git a/docs/docs/keymap-example-file.md b/docs/docs/keymap-example-file.md index 5cb9b2f421e..4f92444a254 100644 --- a/docs/docs/keymap-example-file.md +++ b/docs/docs/keymap-example-file.md @@ -13,9 +13,9 @@ // | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | // | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT >; diff --git a/docs/docs/keymap-example.md b/docs/docs/keymap-example.md index c6e81d222f7..bfef94e1dc5 100644 --- a/docs/docs/keymap-example.md +++ b/docs/docs/keymap-example.md @@ -9,9 +9,9 @@ // | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | // | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT >; From faa90be1bad3f9f2f58d9f00bb3b622e6447f3d6 Mon Sep 17 00:00:00 2001 From: Dom H Date: Sat, 5 Jun 2021 22:45:34 +0100 Subject: [PATCH 0056/1130] docs(codes): Use LSHIFT/RSHIFT in keymap upgrader --- docs/src/data/keymap-upgrade.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/data/keymap-upgrade.js b/docs/src/data/keymap-upgrade.js index bc83c95103d..7936ca16608 100644 --- a/docs/src/data/keymap-upgrade.js +++ b/docs/src/data/keymap-upgrade.js @@ -56,9 +56,9 @@ export const Codes = { ATSN: "AT", BANG: "EXCL", LCTL: "LCTRL", - LSFT: "LSHFT", + LSFT: "LSHIFT", RCTL: "RCTRL", - RSFT: "RSHFT", + RSFT: "RSHIFT", M_NEXT: "C_NEXT", M_PREV: "C_PREV", M_STOP: "C_STOP", @@ -69,11 +69,11 @@ export const Codes = { M_VOLD: "C_VOL_DN", GUI: "K_CMENU", MOD_LCTL: "LCTRL", - MOD_LSFT: "LSHFT", + MOD_LSFT: "LSHIFT", MOD_LALT: "LALT", MOD_LGUI: "LGUI", MOD_RCTL: "RCTRL", - MOD_RSFT: "RSHFT", + MOD_RSFT: "RSHIFT", MOD_RALT: "RALT", MOD_RGUI: "RGUI", }; From f3bb90f9e101c2f6d35e6577a52d51b778727dfa Mon Sep 17 00:00:00 2001 From: Jay Greco Date: Tue, 8 Jun 2021 17:59:35 -0700 Subject: [PATCH 0057/1130] fix(kscan): Fix nibble demux scan errors on encoder row + Add a 1us sleep to let the column selection settle in order to avoid spurious keypresses when row capacitance is high (like on the encoder row) --- app/drivers/kscan/kscan_gpio_demux.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 7e3515f5308..06a5d277323 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -113,6 +113,8 @@ struct kscan_gpio_item_config { &kscan_gpio_output_configs_##n(dev)[bit]; \ gpio_pin_set(out_dev, out_cfg->pin, state); \ } \ + /* Let the col settle before reading the rows */ \ + k_usleep(1); \ \ for (int i = 0; i < INST_MATRIX_INPUTS(n); i++) { \ /* Get the input device (port) */ \ From 33f611cc5ceb3c6a10a427f4aa5cc38ffd8bc767 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 00:57:21 +0000 Subject: [PATCH 0058/1130] chore(deps): bump react-copy-to-clipboard from 5.0.2 to 5.0.3 in /docs Bumps [react-copy-to-clipboard](https://github.com/nkbt/react-copy-to-clipboard) from 5.0.2 to 5.0.3. - [Release notes](https://github.com/nkbt/react-copy-to-clipboard/releases) - [Commits](https://github.com/nkbt/react-copy-to-clipboard/compare/v5.0.2...v5.0.3) Signed-off-by: dependabot[bot] --- docs/package-lock.json | 16 ++++++++-------- docs/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index cb3d20c6515..4160f1499e1 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -15,7 +15,7 @@ "classnames": "^2.2.6", "react": "^16.14.0", "react-async": "^10.0.1", - "react-copy-to-clipboard": "^5.0.2", + "react-copy-to-clipboard": "^5.0.3", "react-dom": "^16.14.0", "react-toastify": "^6.0.9", "web-tree-sitter": "^0.17.1" @@ -12089,15 +12089,15 @@ } }, "node_modules/react-copy-to-clipboard": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", - "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", + "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", "dependencies": { "copy-to-clipboard": "^3", "prop-types": "^15.5.8" }, "peerDependencies": { - "react": "^15.3.0 || ^16.0.0" + "react": "^15.3.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/react-dev-utils": { @@ -28453,9 +28453,9 @@ } }, "react-copy-to-clipboard": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", - "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", + "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", "requires": { "copy-to-clipboard": "^3", "prop-types": "^15.5.8" diff --git a/docs/package.json b/docs/package.json index 077835912a2..984434a1e91 100644 --- a/docs/package.json +++ b/docs/package.json @@ -22,7 +22,7 @@ "classnames": "^2.2.6", "react": "^16.14.0", "react-async": "^10.0.1", - "react-copy-to-clipboard": "^5.0.2", + "react-copy-to-clipboard": "^5.0.3", "react-dom": "^16.14.0", "react-toastify": "^6.0.9", "web-tree-sitter": "^0.17.1" From 87ee2304a119c52ad1ef0d073e84f7e149f6ec00 Mon Sep 17 00:00:00 2001 From: Martin Eberhardt Date: Wed, 9 Jun 2021 03:06:20 +0200 Subject: [PATCH 0059/1130] feat(docs): Add icon legend to the feature matrix Add icon legend to the feature matrix --- docs/docs/intro.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 2ff6062bfab..808873672f3 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -11,6 +11,10 @@ firmware built on the [Zephyr™ Project](https://zephyrproject.org/) Real Time ZMK is currently missing some features found in other popular firmware. This table compares the features supported by ZMK, BlueMicro and QMK: +| Legend: | ✅ Supported | 🚧 Under Development | 💡 Planned | +| :------ | :----------- | :------------------- | :--------- | + + | **Feature** | ZMK | BlueMicro | QMK | | ------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | | Low Latency BLE Support | ✅ | ✅ | | From e8b42221cfe30b47a1962b5fbce1e500ccb7cafa Mon Sep 17 00:00:00 2001 From: Alexander Krikun <54907805+krikun98@users.noreply.github.com> Date: Wed, 9 Jun 2021 04:09:22 +0300 Subject: [PATCH 0060/1130] fix(shields): added right alt and layer quick tap to Jian --- app/boards/shields/jian/jian.keymap | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/jian/jian.keymap b/app/boards/shields/jian/jian.keymap index 93c7691aa33..7b8dd676bbd 100644 --- a/app/boards/shields/jian/jian.keymap +++ b/app/boards/shields/jian/jian.keymap @@ -13,6 +13,9 @@ #define RSE 2 #define ADJ 3 +< { quick_tap_ms = <200>; }; +&mt { quick_tap_ms = <200>; }; + / { keymap { compatible = "zmk,keymap"; @@ -26,7 +29,7 @@ bindings = < &kp LWIN &kp GRAVE &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &mt RWIN RBKT &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &mt RCTRL SQT - &kp LALT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp BSLH + &kp LALT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RALT BSLH < RSE TAB &mt LSHFT SPACE < LWR RET < LWR ESC &mt RSHFT BSPC < RSE DEL >; }; From 7323f78a37467e7144eb6414ef2296de050a45fd Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 9 Jun 2021 01:50:50 +0000 Subject: [PATCH 0061/1130] fix(docs): Upgrade docusaurus, webpack/loaders. Upgrade to the new Docusaurus 2 beta release, which also required upgrades to newer Webpack@5, and some API fixes for TOC changes. --- docs/docs/codes/applications.mdx | 4 +- docs/docs/codes/editing.mdx | 4 +- docs/docs/codes/index.mdx | 14 +- docs/docs/codes/input-assist.mdx | 4 +- docs/docs/codes/keyboard-keypad.mdx | 4 +- docs/docs/codes/media.mdx | 4 +- docs/docs/codes/power.mdx | 4 +- docs/package-lock.json | 46892 +++++++--------- docs/package.json | 8 +- .../docusaurus-tree-sitter-plugin/index.js | 7 +- 10 files changed, 21002 insertions(+), 25943 deletions(-) diff --git a/docs/docs/codes/applications.mdx b/docs/docs/codes/applications.mdx index 0c9416f369d..68e24d36f95 100644 --- a/docs/docs/codes/applications.mdx +++ b/docs/docs/codes/applications.mdx @@ -6,9 +6,9 @@ hide_title: true import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Content, { rightToc as contentToc } from "./_applications.mdx"; +import Content, { toc as contentToc } from "./_applications.mdx"; -export const rightToc = contentToc; +export const toc = contentToc; diff --git a/docs/docs/codes/editing.mdx b/docs/docs/codes/editing.mdx index a65b8b6fb38..3475d6c21fb 100644 --- a/docs/docs/codes/editing.mdx +++ b/docs/docs/codes/editing.mdx @@ -6,9 +6,9 @@ hide_title: true import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Content, { rightToc as contentToc } from "./_editing.mdx"; +import Content, { toc as contentToc } from "./_editing.mdx"; -export const rightToc = contentToc; +export const toc = contentToc; diff --git a/docs/docs/codes/index.mdx b/docs/docs/codes/index.mdx index a0c9df18a96..6a2fbdc82ca 100644 --- a/docs/docs/codes/index.mdx +++ b/docs/docs/codes/index.mdx @@ -7,14 +7,14 @@ slug: ./ import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Key, { rightToc as keyToc } from "./_keyboard-keypad.mdx"; -import Editing, { rightToc as editingToc } from "./_editing.mdx"; -import Media, { rightToc as mediaToc } from "./_media.mdx"; -import Applications, { rightToc as applicationsToc } from "./_applications.mdx"; -import InputAssist, { rightToc as inputAssistToc } from "./_input-assist.mdx"; -import Power, { rightToc as powerToc } from "./_power.mdx"; +import Key, { toc as keyToc } from "./_keyboard-keypad.mdx"; +import Editing, { toc as editingToc } from "./_editing.mdx"; +import Media, { toc as mediaToc } from "./_media.mdx"; +import Applications, { toc as applicationsToc } from "./_applications.mdx"; +import InputAssist, { toc as inputAssistToc } from "./_input-assist.mdx"; +import Power, { toc as powerToc } from "./_power.mdx"; -export const rightToc = [ +export const toc = [ ...keyToc, ...editingToc, ...mediaToc, diff --git a/docs/docs/codes/input-assist.mdx b/docs/docs/codes/input-assist.mdx index c8bae19ecea..e8406f5ccc0 100644 --- a/docs/docs/codes/input-assist.mdx +++ b/docs/docs/codes/input-assist.mdx @@ -6,9 +6,9 @@ hide_title: true import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Content, { rightToc as contentToc } from "./_input-assist.mdx"; +import Content, { toc as contentToc } from "./_input-assist.mdx"; -export const rightToc = contentToc; +export const toc = contentToc; diff --git a/docs/docs/codes/keyboard-keypad.mdx b/docs/docs/codes/keyboard-keypad.mdx index 6a5e605da11..7b040bfd12e 100644 --- a/docs/docs/codes/keyboard-keypad.mdx +++ b/docs/docs/codes/keyboard-keypad.mdx @@ -6,9 +6,9 @@ hide_title: true import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Content, { rightToc as contentToc } from "./_keyboard-keypad.mdx"; +import Content, { toc as contentToc } from "./_keyboard-keypad.mdx"; -export const rightToc = contentToc; +export const toc = contentToc; diff --git a/docs/docs/codes/media.mdx b/docs/docs/codes/media.mdx index 588bb4cb159..c7884479077 100644 --- a/docs/docs/codes/media.mdx +++ b/docs/docs/codes/media.mdx @@ -6,9 +6,9 @@ hide_title: true import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Content, { rightToc as contentToc } from "./_media.mdx"; +import Content, { toc as contentToc } from "./_media.mdx"; -export const rightToc = contentToc; +export const toc = contentToc; diff --git a/docs/docs/codes/power.mdx b/docs/docs/codes/power.mdx index 7e8ffd10f2b..2af3233fbc6 100644 --- a/docs/docs/codes/power.mdx +++ b/docs/docs/codes/power.mdx @@ -6,9 +6,9 @@ hide_title: true import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; -import Content, { rightToc as contentToc } from "./_power.mdx"; +import Content, { toc as contentToc } from "./_power.mdx"; -export const rightToc = contentToc; +export const toc = contentToc; diff --git a/docs/package-lock.json b/docs/package-lock.json index 4160f1499e1..1f7c4a2472f 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -7,8 +7,8 @@ "": { "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^2.0.0-alpha.66", - "@docusaurus/preset-classic": "^2.0.0-alpha.66", + "@docusaurus/core": "^2.0.0-beta.0", + "@docusaurus/preset-classic": "^2.0.0-beta.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", @@ -25,375 +25,410 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", - "null-loader": "^3.0.0", + "null-loader": "^4.0.0", "prettier": "2.1.2", - "string-replace-loader": "2.3" + "string-replace-loader": "^3.0.0" } }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.0.0-alpha.44", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz", + "integrity": "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==", + "dependencies": { + "@algolia/autocomplete-shared": "1.0.0-alpha.44" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.0.0-alpha.44", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz", + "integrity": "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==", + "dependencies": { + "@algolia/autocomplete-shared": "1.0.0-alpha.44" + }, + "peerDependencies": { + "@algolia/client-search": "^4.5.1", + "algoliasearch": "^4.5.1" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.0.0-alpha.44", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz", + "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" + }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.5.1.tgz", - "integrity": "sha512-TAQHRHaCUAR0bNhUHG0CnO6FTx3EMPwZQrjPuNS6kHvCQ/H8dVD0sLsHyM8C7U4j33xPQCWi9TBnSx8cYXNmNw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz", + "integrity": "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==", "dependencies": { - "@algolia/cache-common": "4.5.1" + "@algolia/cache-common": "4.9.1" } }, "node_modules/@algolia/cache-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.5.1.tgz", - "integrity": "sha512-Sux+pcedQi9sfScIiQdl6pEaTVl712qM9OblvDhnaeF1v6lf4jyTlRTiBLP7YBLuvO1Yo54W3maf03kmz9PVhA==" + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz", + "integrity": "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.5.1.tgz", - "integrity": "sha512-fzwAtBFwveuG+E5T/namChEIvdVl0DoV3djV1C078b/JpO5+DeAwuXIJGYbyl950u170n5NEYuIwYG+R6h4lJQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz", + "integrity": "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==", "dependencies": { - "@algolia/cache-common": "4.5.1" + "@algolia/cache-common": "4.9.1" } }, "node_modules/@algolia/client-account": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.5.1.tgz", - "integrity": "sha512-2WFEaI7Zf4ljnBsSAS4e+YylZ5glovm78xFg4E1JKA8PE6M+TeIgUY6HO2ouLh2dqQKxc9UfdAT1Loo/dha2iQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz", + "integrity": "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==", "dependencies": { - "@algolia/client-common": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/transporter": "4.5.1" + "@algolia/client-common": "4.9.1", + "@algolia/client-search": "4.9.1", + "@algolia/transporter": "4.9.1" } }, "node_modules/@algolia/client-analytics": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.5.1.tgz", - "integrity": "sha512-bTmZUU8zhZMWBeGEQ/TVqLoL3OOT0benU0HtS3iOnQURwb+AOCv3RsgZvkj2djp+M24Q6P8/L34uBJMmCurbLg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz", + "integrity": "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==", "dependencies": { - "@algolia/client-common": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@algolia/client-common": "4.9.1", + "@algolia/client-search": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, "node_modules/@algolia/client-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.5.1.tgz", - "integrity": "sha512-5CpIf8IK1hke7q+N4e+A4TWdFXVJ5Qwyaa0xS84DrDO8HQ7vfYbDvG1oYa9hVEtGn6c3WVKPAvuWynK+fXQQCA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz", + "integrity": "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==", "dependencies": { - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, "node_modules/@algolia/client-recommendation": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.5.1.tgz", - "integrity": "sha512-GiFrNSImoEBUQICjFBEoxPGzrjWji8PY9GeMg2CNvOYcRQ0Xt0Y36v9GN53NLjvB7QdQ2FlE1Cuv/PLUfS/aQQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz", + "integrity": "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==", "dependencies": { - "@algolia/client-common": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@algolia/client-common": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, "node_modules/@algolia/client-search": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.5.1.tgz", - "integrity": "sha512-wjuOTte9Auo9Cg4fL0709PjeJ9rXFh4okYUrOt/2SWqQid6DSdZOp+BtyaHKV3E94sj+SlmMxkMUacYluYg5zA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz", + "integrity": "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==", "dependencies": { - "@algolia/client-common": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@algolia/client-common": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, "node_modules/@algolia/logger-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.5.1.tgz", - "integrity": "sha512-ZoVnGriinlLHlkvn5K7djOUn1/1IeTjU8rDzOJ3t06T+2hQytgJghaX7rSwKIeH4CjWMy61w8jLisuGJRBOEeg==" + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz", + "integrity": "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" }, "node_modules/@algolia/logger-console": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.5.1.tgz", - "integrity": "sha512-1qa7K18+uAgxyWuguayaDS5ViiZFcOjI3J5ACBb0i/n7RsXUo149lP6mwmx6TIU7s135hT0f0TCqnvfMvN1ilA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz", + "integrity": "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==", "dependencies": { - "@algolia/logger-common": "4.5.1" + "@algolia/logger-common": "4.9.1" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.5.1.tgz", - "integrity": "sha512-tsQz+9pZw9dwPm/wMvZDpsWFZgmghLjXi4c3O4rfwoP/Ikum5fhle5fiR14yb4Lw4WlOQ1AJIHJvrg1qLIG8hQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz", + "integrity": "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==", "dependencies": { - "@algolia/requester-common": "4.5.1" + "@algolia/requester-common": "4.9.1" } }, "node_modules/@algolia/requester-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.5.1.tgz", - "integrity": "sha512-bPCiLvhHKXaka7f5FLtheChToz0yHVhvza64naFJRRh/3kC0nvyrvQ0ogjiydiSrGIfdNDyyTVfKGdk4gS5gyA==" + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz", + "integrity": "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.5.1.tgz", - "integrity": "sha512-BfFc2h9eQOKu1gGs3DtQO7GrVZW/rxUgpJVLja4UVQyGplJyTCrFgkTyfl+8rb3MkNgA/S2LNo7cKNSPfpqeAQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz", + "integrity": "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==", "dependencies": { - "@algolia/requester-common": "4.5.1" + "@algolia/requester-common": "4.9.1" } }, "node_modules/@algolia/transporter": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.5.1.tgz", - "integrity": "sha512-asPDNToDAPhH0tM6qKGTn1l0wTlNUbekpa1ifZ6v+qhSjo3VdqGyp+2VeciJOBW/wVHXh3HUbAcycvLERRlCLg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz", + "integrity": "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==", "dependencies": { - "@algolia/cache-common": "4.5.1", - "@algolia/logger-common": "4.5.1", - "@algolia/requester-common": "4.5.1" + "@algolia/cache-common": "4.9.1", + "@algolia/logger-common": "4.9.1", + "@algolia/requester-common": "4.9.1" } }, "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dependencies": { - "@babel/highlight": "7.10.4" + "@babel/highlight": "^7.12.13" } }, "node_modules/@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==" }, "node_modules/@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dependencies": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.12.1", - "@babel/helper-module-transforms": "7.12.1", - "@babel/helpers": "7.12.1", - "@babel/parser": "7.12.3", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1", - "convert-source-map": "1.7.0", - "debug": "4.2.0", - "gensync": "1.0.0-beta.1", - "json5": "2.1.3", - "lodash": "4.17.20", - "resolve": "1.17.0", - "semver": "5.7.1", - "source-map": "0.5.7" + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dependencies": { - "@babel/types": "7.12.1", - "jsesc": "2.5.2", - "source-map": "0.5.7" + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "7.12.1", - "@babel/types": "7.12.1" - } - }, - "node_modules/@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/types": "7.12.1" - } - }, - "node_modules/@babel/helper-builder-react-jsx-experimental": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.1.tgz", - "integrity": "sha512-82to8lR7TofZWbTd3IEZT1xNHfeU/Ef4rDm/GLXddzqDh+yQ19QuGSzqww51aNxVH8rwfRIzL0EUQsvODVhtyw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dependencies": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-module-imports": "7.12.1", - "@babel/types": "7.12.1" + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dependencies": { - "@babel/compat-data": "7.12.1", - "@babel/helper-validator-option": "7.12.1", - "browserslist": "4.14.5", - "semver": "5.7.1" + "@babel/compat-data": "^7.14.4", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", + "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", "dependencies": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-member-expression-to-functions": "7.12.1", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.14.4", + "@babel/helper-split-export-declaration": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dependencies": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-regex": "7.10.5", - "regexpu-core": "4.7.1" + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dependencies": { - "@babel/helper-function-name": "7.10.4", - "@babel/types": "7.12.1", - "lodash": "4.17.20" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.13.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dependencies": { - "@babel/helper-get-function-arity": "7.10.4", - "@babel/template": "7.10.4", - "@babel/types": "7.12.1" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dependencies": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-simple-access": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0", - "@babel/helper-validator-identifier": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1", - "lodash": "4.17.20" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dependencies": { - "lodash": "4.17.20" - } + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dependencies": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-wrap-function": "7.12.3", - "@babel/types": "7.12.1" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dependencies": { - "@babel/helper-member-expression-to-functions": "7.12.1", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { @@ -401,56 +436,67 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.12.1" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" }, "node_modules/@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dependencies": { - "@babel/helper-function-name": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, "node_modules/@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dependencies": { - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dependencies": { - "@babel/helper-validator-identifier": "7.10.4", - "chalk": "2.4.2", - "js-tokens": "4.0.0" + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/chalk": { @@ -458,134 +504,267 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.12.1", - "@babel/plugin-syntax-async-generators": "7.8.4" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-dynamic-import": "7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-export-namespace-from": "7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-json-strings": "7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-numeric-separator": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz", + "integrity": "sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-transform-parameters": "7.12.1" + "@babel/compat-data": "^7.14.4", + "@babel/helper-compilation-targets": "^7.14.4", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "7.12.1", - "@babel/plugin-syntax-optional-chaining": "7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "dependencies": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { @@ -593,15 +772,32 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { @@ -609,7 +805,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-export-namespace-from": { @@ -617,7 +816,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { @@ -625,15 +827,21 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { @@ -641,7 +849,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { @@ -649,7 +860,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { @@ -657,7 +871,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { @@ -665,7 +882,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { @@ -673,7 +893,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { @@ -681,283 +904,390 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dependencies": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.12.1" + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", + "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", + "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-define-map": "7.10.5", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0", - "globals": "11.12.0" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.14.4", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", + "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dependencies": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", "dependencies": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-simple-access": "7.12.1", - "babel-plugin-dynamic-import-node": "2.3.3" + "object.assign": "^4.1.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dependencies": { - "@babel/helper-hoist-variables": "7.10.4", - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-validator-identifier": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "object.assign": "^4.1.0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "7.12.1" + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "object.assign": "^4.1.0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.12.1" - } + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", - "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz", - "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dependencies": { - "@babel/helper-builder-react-jsx": "7.10.4", - "@babel/helper-builder-react-jsx-experimental": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-jsx": "7.12.1" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz", - "integrity": "sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==", + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", + "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", "dependencies": { - "@babel/helper-builder-react-jsx-experimental": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-jsx": "7.12.1" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", - "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz", + "integrity": "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", - "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz", + "integrity": "sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/types": "^7.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", + "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/plugin-transform-react-jsx": "^7.12.17" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { @@ -965,473 +1295,555 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", "dependencies": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dependencies": { - "regenerator-transform": "0.14.5" + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", - "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "dependencies": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "resolve": "1.17.0", - "semver": "5.7.1" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "7.12.1" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-regex": "7.10.5" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.4.tgz", + "integrity": "sha512-WYdcGNEO7mCCZ2XzRlxwGj3PgeAr50ifkofOUC/+IN/GzKLB+biDPVBUAQN2C/dVZTvEXCp80kfQ1FFZPrwykQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-typescript": "7.12.1" + "@babel/helper-create-class-features-plugin": "^7.14.4", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-typescript": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", - "dependencies": { - "@babel/compat-data": "7.12.1", - "@babel/helper-compilation-targets": "7.12.1", - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-validator-option": "7.12.1", - "@babel/plugin-proposal-async-generator-functions": "7.12.1", - "@babel/plugin-proposal-class-properties": "7.12.1", - "@babel/plugin-proposal-dynamic-import": "7.12.1", - "@babel/plugin-proposal-export-namespace-from": "7.12.1", - "@babel/plugin-proposal-json-strings": "7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", - "@babel/plugin-proposal-numeric-separator": "7.12.1", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "7.12.1", - "@babel/plugin-proposal-optional-chaining": "7.12.1", - "@babel/plugin-proposal-private-methods": "7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "7.12.1", - "@babel/plugin-syntax-async-generators": "7.8.4", - "@babel/plugin-syntax-class-properties": "7.12.1", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-syntax-export-namespace-from": "7.8.3", - "@babel/plugin-syntax-json-strings": "7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-syntax-numeric-separator": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3", - "@babel/plugin-syntax-optional-chaining": "7.8.3", - "@babel/plugin-syntax-top-level-await": "7.12.1", - "@babel/plugin-transform-arrow-functions": "7.12.1", - "@babel/plugin-transform-async-to-generator": "7.12.1", - "@babel/plugin-transform-block-scoped-functions": "7.12.1", - "@babel/plugin-transform-block-scoping": "7.12.1", - "@babel/plugin-transform-classes": "7.12.1", - "@babel/plugin-transform-computed-properties": "7.12.1", - "@babel/plugin-transform-destructuring": "7.12.1", - "@babel/plugin-transform-dotall-regex": "7.12.1", - "@babel/plugin-transform-duplicate-keys": "7.12.1", - "@babel/plugin-transform-exponentiation-operator": "7.12.1", - "@babel/plugin-transform-for-of": "7.12.1", - "@babel/plugin-transform-function-name": "7.12.1", - "@babel/plugin-transform-literals": "7.12.1", - "@babel/plugin-transform-member-expression-literals": "7.12.1", - "@babel/plugin-transform-modules-amd": "7.12.1", - "@babel/plugin-transform-modules-commonjs": "7.12.1", - "@babel/plugin-transform-modules-systemjs": "7.12.1", - "@babel/plugin-transform-modules-umd": "7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "7.12.1", - "@babel/plugin-transform-new-target": "7.12.1", - "@babel/plugin-transform-object-super": "7.12.1", - "@babel/plugin-transform-parameters": "7.12.1", - "@babel/plugin-transform-property-literals": "7.12.1", - "@babel/plugin-transform-regenerator": "7.12.1", - "@babel/plugin-transform-reserved-words": "7.12.1", - "@babel/plugin-transform-shorthand-properties": "7.12.1", - "@babel/plugin-transform-spread": "7.12.1", - "@babel/plugin-transform-sticky-regex": "7.12.1", - "@babel/plugin-transform-template-literals": "7.12.1", - "@babel/plugin-transform-typeof-symbol": "7.12.1", - "@babel/plugin-transform-unicode-escapes": "7.12.1", - "@babel/plugin-transform-unicode-regex": "7.12.1", - "@babel/preset-modules": "0.1.4", - "@babel/types": "7.12.1", - "core-js-compat": "3.6.5", - "semver": "5.7.1" + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", + "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", + "dependencies": { + "@babel/compat-data": "^7.14.4", + "@babel/helper-compilation-targets": "^7.14.4", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.14.3", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.4", + "@babel/plugin-transform-classes": "^7.14.4", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.14.4", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.14.2", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.4", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/@babel/preset-modules": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "7.12.1", - "@babel/plugin-transform-dotall-regex": "7.12.1", - "@babel/types": "7.12.1", - "esutils": "2.0.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-react": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", - "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", + "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-transform-react-display-name": "7.12.1", - "@babel/plugin-transform-react-jsx": "7.12.1", - "@babel/plugin-transform-react-jsx-development": "7.12.1", - "@babel/plugin-transform-react-jsx-self": "7.12.1", - "@babel/plugin-transform-react-jsx-source": "7.12.1", - "@babel/plugin-transform-react-pure-annotations": "7.12.1" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-react-display-name": "^7.12.13", + "@babel/plugin-transform-react-jsx": "^7.13.12", + "@babel/plugin-transform-react-jsx-development": "^7.12.17", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", - "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", + "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-transform-typescript": "7.12.1" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-typescript": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dependencies": { - "regenerator-runtime": "0.13.7" + "regenerator-runtime": "^0.13.4" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", - "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", + "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", "dependencies": { - "core-js-pure": "3.6.5", - "regenerator-runtime": "0.13.7" + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" } }, "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dependencies": { - "@babel/code-frame": "7.10.4", - "@babel/parser": "7.12.3", - "@babel/types": "7.12.1" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, "node_modules/@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dependencies": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.12.1", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-split-export-declaration": "7.11.0", - "@babel/parser": "7.12.3", - "@babel/types": "7.12.1", - "debug": "4.2.0", - "globals": "11.12.0", - "lodash": "4.17.20" + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, "node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dependencies": { - "@babel/helper-validator-identifier": "7.10.4", - "lodash": "4.17.20", - "to-fast-properties": "2.0.0" + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "node_modules/@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, "node_modules/@docsearch/css": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", - "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" + "version": "3.0.0-alpha.36", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz", + "integrity": "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" }, "node_modules/@docsearch/react": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", - "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", + "version": "3.0.0-alpha.36", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz", + "integrity": "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==", "dependencies": { - "@docsearch/css": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", + "@algolia/autocomplete-core": "1.0.0-alpha.44", + "@algolia/autocomplete-preset-algolia": "1.0.0-alpha.44", + "@docsearch/css": "3.0.0-alpha.36", "algoliasearch": "^4.0.0" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "@types/react": ">= 16.8.0 < 18.0.0", + "react": ">= 16.8.0 < 18.0.0", + "react-dom": ">= 16.8.0 < 18.0.0" } }, "node_modules/@docusaurus/core": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", - "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", "dependencies": { - "@babel/core": "^7.9.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", - "@babel/plugin-proposal-optional-chaining": "^7.10.3", + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.9.0", - "@babel/preset-env": "^7.9.0", - "@babel/preset-react": "^7.9.4", - "@babel/preset-typescript": "^7.9.0", - "@babel/runtime": "^7.9.2", - "@babel/runtime-corejs3": "^7.10.4", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@hapi/joi": "^17.1.1", - "@svgr/webpack": "^5.4.0", - "babel-loader": "^8.1.0", - "babel-plugin-dynamic-import-node": "^2.3.0", - "boxen": "^4.2.0", - "cache-loader": "^4.1.0", - "chalk": "^3.0.0", - "chokidar": "^3.3.0", - "commander": "^4.0.1", - "copy-webpack-plugin": "^6.0.3", - "core-js": "^2.6.5", - "css-loader": "^3.4.2", - "del": "^5.1.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", "detect-port": "^1.3.0", - "eta": "^1.1.1", + "eta": "^1.12.1", "express": "^4.17.1", - "file-loader": "^6.0.0", - "fs-extra": "^8.1.0", - "globby": "^10.0.1", - "html-minifier-terser": "^5.0.5", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", "html-tags": "^3.1.0", - "html-webpack-plugin": "^4.0.4", - "import-fresh": "^3.2.1", - "inquirer": "^7.2.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", "is-root": "^2.1.0", "leven": "^3.1.0", - "lodash": "^4.5.2", - "lodash.flatmap": "^4.5.0", - "lodash.has": "^4.5.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "mini-css-extract-plugin": "^0.8.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", "nprogress": "^0.2.0", - "null-loader": "^3.0.0", - "optimize-css-assets-webpack-plugin": "^5.0.3", - "pnp-webpack-plugin": "^1.6.4", - "postcss-loader": "^3.0.0", - "postcss-preset-env": "^6.7.0", - "react-dev-utils": "^10.2.1", - "react-helmet": "^6.0.0-beta", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", "react-loadable": "^5.5.0", - "react-loadable-ssr-addon": "^0.3.0", - "react-router": "^5.1.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", "react-router-config": "^5.1.1", - "react-router-dom": "^5.1.2", + "react-router-dom": "^5.2.0", "resolve-pathname": "^3.0.0", - "semver": "^6.3.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", "serve-handler": "^6.1.3", "shelljs": "^0.8.4", "std-env": "^2.2.1", - "terser-webpack-plugin": "^4.1.0", - "update-notifier": "^4.1.0", - "url-loader": "^4.1.0", - "wait-file": "^1.0.5", - "webpack": "^4.44.1", - "webpack-bundle-analyzer": "^3.6.1", - "webpack-dev-server": "^3.11.0", - "webpack-merge": "^4.2.2", - "webpackbar": "^4.0.0" + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" }, "bin": { "docusaurus": "bin/docusaurus.js" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.66.tgz", - "integrity": "sha512-IvtrTNeAaynEGgfCbC4CeBgO76Mu76cGogBGv8a84bYeyCOtlxOJoH6JHkJ7T/v5D6lM16qzwx5oqesZ0kZuzA==", - "dependencies": { - "@babel/parser": "^7.9.4", - "@babel/traverse": "^7.9.0", - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@mdx-js/mdx": "^1.5.8", - "@mdx-js/react": "^1.5.8", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz", + "integrity": "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==", + "dependencies": { + "@babel/parser": "^7.12.16", + "@babel/traverse": "^7.12.13", + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", "escape-html": "^1.0.3", - "file-loader": "^6.0.0", - "fs-extra": "^8.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", "github-slugger": "^1.3.0", "gray-matter": "^4.0.2", - "loader-utils": "^1.2.3", - "mdast-util-to-string": "^1.1.0", + "mdast-util-to-string": "^2.0.0", "remark-emoji": "^2.1.0", "stringify-object": "^3.3.0", "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.0" + "url-loader": "^4.1.1", + "webpack": "^5.28.0" }, "engines": { - "node": ">=10.15.1" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" + "node": ">=12.13.0" }, - "bin": { - "json5": "lib/cli.js" + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/mdx-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", + "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "chalk": "^4.1.0", + "feed": "^4.2.2", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "reading-time": "^1.3.0", + "remark-admonitions": "^1.2.1", + "tslib": "^2.1.0", + "webpack": "^5.28.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.66.tgz", - "integrity": "sha512-voK5ZUZcUn5blIDakYNKQ42wPMZLfrZnvEJuwh/8S/W1oNbPN935NBu9vL23fHEmp9L2MGykAdaCmev0Su04yQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "chalk": "^3.0.0", - "feed": "^4.1.0", - "fs-extra": "^8.1.0", - "globby": "^10.0.1", + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", + "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "chalk": "^4.1.0", + "combine-promises": "^1.1.0", + "execa": "^5.0.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "import-fresh": "^3.2.2", + "js-yaml": "^4.0.0", "loader-utils": "^1.2.3", - "lodash": "^4.5.2", - "reading-time": "^1.2.0", + "lodash": "^4.17.20", "remark-admonitions": "^1.2.1", - "webpack": "^4.44.1" + "shelljs": "^0.8.4", + "tslib": "^2.1.0", + "utility-types": "^3.10.0", + "webpack": "^5.28.0" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/json5": { + "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", @@ -1442,7 +1854,7 @@ "json5": "lib/cli.js" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/loader-utils": { + "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", @@ -1455,359 +1867,263 @@ "node": ">=4.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.66.tgz", - "integrity": "sha512-jvFKJR7BgjIq6xdmPg+7d2DS1fBeuIfmRTtB/apgfIW8NWO5N0DRYXOj0lgpw/ICwW//o8cLbrN+jkLlzTV/eg==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "chalk": "^3.0.0", - "execa": "^3.4.0", - "fs-extra": "^8.1.0", - "globby": "^10.0.1", - "import-fresh": "^3.2.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.19", - "lodash.flatmap": "^4.5.0", - "lodash.groupby": "^4.6.0", - "lodash.pick": "^4.4.0", - "lodash.pickby": "^4.6.0", - "lodash.sortby": "^4.6.0", + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", + "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "globby": "^11.0.2", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "utility-types": "^3.10.0", - "webpack": "^4.44.1" + "slash": "^3.0.0", + "tslib": "^2.1.0", + "webpack": "^5.28.0" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "node_modules/@docusaurus/plugin-debug": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", + "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "react-json-view": "^1.21.1", + "tslib": "^2.1.0" }, "engines": { - "node": "^8.12.0 || >=9.7.0" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", + "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@docusaurus/core": "2.0.0-beta.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "node": ">=12.13.0" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", + "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.66.tgz", - "integrity": "sha512-mY26Aeb/Wf+NFLy70YvXgdLTB+2iPN0SKOVKYwgg6ZN7Nm2kPwEpSVRq2iwiqlWk2G/vOM+ADm99Gxvm3kS61A==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "globby": "^10.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "webpack": "^4.44.1" + "@docusaurus/core": "2.0.0-beta.0" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.66.tgz", - "integrity": "sha512-9AZaEUxaY0CDOCWXQMfY3TzG79HkquZlVeJOZaA6IvCoK/Oq3B58TMNLiQyA6TA2DYf5ZYQorLJaMd02x5qBQw==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "react-json-view": "^1.19.1" + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", + "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "fs-extra": "^9.1.0", + "sitemap": "^6.3.6", + "tslib": "^2.1.0" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.66.tgz", - "integrity": "sha512-HVWRLHtlQYpVqH3MHloUmktJMXt7oMDQzBlKzrwAMiWUK1oXFX35DrKjTt2SE2SADpObnwWFjo0E71YT0ApQLw==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66" + "node_modules/@docusaurus/preset-classic": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", + "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/plugin-debug": "2.0.0-beta.0", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", + "@docusaurus/plugin-sitemap": "2.0.0-beta.0", + "@docusaurus/theme-classic": "2.0.0-beta.0", + "@docusaurus/theme-search-algolia": "2.0.0-beta.0" }, "engines": { - "node": ">=10.15.1" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.66.tgz", - "integrity": "sha512-MVnzApLSQaC38nVS+A/WkXEV4kHeX6Q/KM2DqkLeovNWLBtkQ0aHL3bvn1clAEmB33Pia0v93mzG+I1+9mrquA==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66" + "node": ">=12.13.0" }, - "engines": { - "node": ">=10.15.1" + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.66.tgz", - "integrity": "sha512-ztDevVIREyq8g+QhSGpDqscVqtubcPnEE3a4JwWSALQ2D6JscIxg897axwZSZNUMxrHBuXRjOEYOtVb/O/stVg==", + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "fs-extra": "^8.1.0", - "sitemap": "^3.2.2" + "prop-types": "^15.6.2" }, - "engines": { - "node": ">=10.15.1" + "peerDependencies": { + "react": "*" } }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.66.tgz", - "integrity": "sha512-FjxjchzUS6vOUSr9Pc5kqOSQAnc+cAYsR4pTlqwD2uOJcZMr2vQ6jeKbJnhEmUYwAvzdKOVnCndnxbA+Ii8L3w==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", - "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", - "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", - "@docusaurus/plugin-debug": "2.0.0-alpha.66", - "@docusaurus/plugin-google-analytics": "2.0.0-alpha.66", - "@docusaurus/plugin-google-gtag": "2.0.0-alpha.66", - "@docusaurus/plugin-sitemap": "2.0.0-alpha.66", - "@docusaurus/theme-classic": "2.0.0-alpha.66", - "@docusaurus/theme-search-algolia": "2.0.0-alpha.66" + "node_modules/@docusaurus/theme-classic": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", + "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "chalk": "^4.1.0", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "infima": "0.2.0-alpha.23", + "lodash": "^4.17.20", + "parse-numeric-range": "^1.2.0", + "postcss": "^8.2.10", + "prism-react-renderer": "^1.1.1", + "prismjs": "^1.23.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.2.0", + "rtlcss": "^3.1.2" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.66.tgz", - "integrity": "sha512-WsWqzfzA2gIF5TUMGSbiAeDeNZtKvsgymTQzalcwyhyT/QI0ywcag+03Bmjeq4H3PTC3qU+tkhddO2Rh5w/YCw==", - "dependencies": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", - "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", - "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "@mdx-js/mdx": "^1.5.8", - "@mdx-js/react": "^1.5.8", - "@types/react-toggle": "^4.0.2", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^2.2.0", - "infima": "0.2.0-alpha.13", - "lodash": "^4.17.19", - "parse-numeric-range": "^0.0.2", - "prism-react-renderer": "^1.1.0", - "prismjs": "^1.20.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.1.2", - "react-toggle": "^4.1.1" + "node_modules/@docusaurus/theme-common": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", + "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "tslib": "^2.1.0" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "prism-react-renderer": "^1.1.1", + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.66.tgz", - "integrity": "sha512-5k/Fwt81Gyjv9vPE+gO8mraEHx5IqEmHLwqld5yXj7yix5XrxywkaanHqC0cFJG4MFUBgF6vNjJC8CtfLnT4Tw==", - "dependencies": { - "@docsearch/react": "^1.0.0-alpha.27", - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "algoliasearch": "^4.0.0", - "algoliasearch-helper": "^3.1.1", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", + "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", + "dependencies": { + "@docsearch/react": "^3.0.0-alpha.33", + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "algoliasearch": "^4.8.4", + "algoliasearch-helper": "^3.3.4", "clsx": "^1.1.1", - "eta": "^1.1.1", - "lodash": "^4.17.19" + "eta": "^1.12.1", + "lodash": "^4.17.20" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" }, "peerDependencies": { - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/types": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.66.tgz", - "integrity": "sha512-Zd2Kguw0+3faifr83ruIV4i/+KqfqM+zK3DpqCBxdtkP+ORLKbgsIQ48fJ40OOhQrvl38Ay4E+1w7USrrkj4Qg==", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz", + "integrity": "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==", "dependencies": { - "@types/webpack": "^4.41.0", - "commander": "^4.0.1", + "commander": "^5.1.0", + "joi": "^17.4.0", "querystring": "0.2.0", - "webpack-merge": "^4.2.2" + "webpack": "^5.28.0", + "webpack-merge": "^5.7.3" } }, "node_modules/@docusaurus/utils": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.66.tgz", - "integrity": "sha512-47jGB+Z3YVM6Xf1hxyNbJLMmc1qoTLmfwSf7NseKSkpjucbc5Ueivr+oVYp5yWoZw5sT5bObmdJYfJoD/RrbOg==", - "dependencies": { - "escape-string-regexp": "^2.0.0", - "fs-extra": "^8.1.0", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz", + "integrity": "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.0", + "@types/github-slugger": "^1.3.0", + "chalk": "^4.1.0", + "escape-string-regexp": "^4.0.0", + "fs-extra": "^9.1.0", "gray-matter": "^4.0.2", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "resolve-pathname": "^3.0.0" + "lodash": "^4.17.20", + "resolve-pathname": "^3.0.0", + "tslib": "^2.1.0" }, "engines": { - "node": ">=10.15.1" + "node": ">=12.13.0" } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.66.tgz", - "integrity": "sha512-vlenwY3THondey21x1qAUZyDz9qiG7ec2CBM9HgY1Ns8XhrKah9zz7TEGXjqM9lhqMQQRkvcCcveti9EXR0fcA==", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", + "integrity": "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==", "dependencies": { - "@docusaurus/utils": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "chalk": "^3.0.0" + "@docusaurus/utils": "2.0.0-beta.0", + "chalk": "^4.1.0", + "joi": "^17.4.0", + "tslib": "^2.1.0" }, "engines": { - "node": ">=10.15.1" - } - }, - "node_modules/@docusaurus/utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" + "node": ">=12.13.0" } }, "node_modules/@endiliey/static-site-generator-webpack-plugin": { @@ -1815,23 +2131,23 @@ "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", "dependencies": { - "bluebird": "3.7.2", - "cheerio": "0.22.0", - "eval": "0.1.4", - "url": "0.11.0", - "webpack-sources": "1.4.3" + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.4", + "url": "^0.11.0", + "webpack-sources": "^1.4.3" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -1842,13 +2158,22 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -1857,25 +2182,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/@fortawesome/fontawesome-common-types": { @@ -1888,12 +2205,12 @@ } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "1.2.32", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz", - "integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==", + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", + "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.32" + "@fortawesome/fontawesome-common-types": "^0.2.35" }, "engines": { "node": ">=6" @@ -1923,82 +2240,37 @@ "react": ">=16.x" } }, - "node_modules/@francoischalifour/autocomplete-core": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz", - "integrity": "sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg==" - }, - "node_modules/@francoischalifour/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz", - "integrity": "sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==" - }, - "node_modules/@hapi/address": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", - "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", - "dependencies": { - "@hapi/hoek": "9.1.0" - } - }, - "node_modules/@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "node_modules/@hapi/formula": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", - "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" - }, "node_modules/@hapi/hoek": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", - "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" - }, - "node_modules/@hapi/joi": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", - "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", - "dependencies": { - "@hapi/address": "4.1.0", - "@hapi/formula": "2.0.0", - "@hapi/hoek": "9.1.0", - "@hapi/pinpoint": "2.0.0", - "@hapi/topo": "5.0.0" - } - }, - "node_modules/@hapi/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" }, "node_modules/@hapi/topo": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "dependencies": { - "@hapi/hoek": "9.1.0" + "@hapi/hoek": "^9.0.0" } }, "node_modules/@mdx-js/mdx": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.19.tgz", - "integrity": "sha512-L3eLhEFnV/2bcb9XwOegsRmLHd1oEDQPtTBVezhptQ5U1YM+/WQNzx1apjzVTAyukwOanUXnTUMjRUtqJNgFCg==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "dependencies": { - "@babel/core": "7.11.6", - "@babel/plugin-syntax-jsx": "7.10.4", + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.19", - "babel-plugin-apply-mdx-type-prop": "1.6.19", - "babel-plugin-extract-import-names": "1.6.19", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", "camelcase-css": "2.0.1", - "detab": "2.0.3", + "detab": "2.0.4", "hast-util-raw": "6.0.1", "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "9.1.1", + "mdast-util-to-hast": "10.0.1", "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.19", + "remark-mdx": "1.6.22", "remark-parse": "8.0.3", "remark-squeeze-paragraphs": "4.0.0", "style-to-object": "0.3.0", @@ -2012,18 +2284,18 @@ } }, "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -2042,9 +2314,9 @@ } }, "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -2061,183 +2333,294 @@ } }, "node_modules/@mdx-js/react": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.19.tgz", - "integrity": "sha512-RS37Tagqyp2R0XFPoUZeSbZC5uJQRPhqOHWeT1LEwxESjMWb3VORHz7E827ldeQr3UW6VEQEyq/THegu+bLj6A==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { - "react": "^16.13.1" + "react": "^16.13.1 || ^17.0.0" } }, "node_modules/@mdx-js/util": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.19.tgz", - "integrity": "sha512-bkkQNSHz3xSr3KRHUQ2Qk2XhewvvXAOUqjIUKwcQuL4ijOA4tUHZfUgXExi5CpMysrX7izcsyICtXjZHlfJUjg==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dependencies": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" - } - }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "1.1.9" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dependencies": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "1.8.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "node_modules/@polka/url": { + "version": "1.0.0-next.15", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", + "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" + }, + "node_modules/@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", "dependencies": { - "mkdirp": "1.0.4" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.4.0.tgz", - "integrity": "sha512-zLl4Fl3NvKxxjWNkqEcpdSOpQ3LGVH2BNFQ6vjaK6sFo2IrSznrhURIPI0HAphKiiIwNYjAfE0TNoQDSZv0U9A==" + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, "node_modules/@svgr/babel-preset": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.4.0.tgz", - "integrity": "sha512-Gyx7cCxua04DBtyILTYdQxeO/pwfTBev6+eXTbVbxe4HTGhOUW6yo7PSbG2p6eJMl44j6XSequ0ZDP7bl0nu9A==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "5.4.0", - "@svgr/babel-plugin-transform-svg-component": "5.4.0" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/core": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.4.0.tgz", - "integrity": "sha512-hWGm1DCCvd4IEn7VgDUHYiC597lUYhFau2lwJBYpQWDirYLkX4OsXu9IslPgJ9UpP7wsw3n2Ffv9sW7SXJVfqQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dependencies": { - "@svgr/plugin-jsx": "5.4.0", - "camelcase": "6.1.0", - "cosmiconfig": "6.0.0" + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.4.0.tgz", - "integrity": "sha512-+U0TZZpPsP2V1WvVhqAOSTk+N+CjYHdZx+x9UBa1eeeZDXwH8pt0CrQf2+SvRl/h2CAPRFkm+Ey96+jKP8Bsgg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", "dependencies": { - "@babel/types": "7.12.1" + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/plugin-jsx": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.4.0.tgz", - "integrity": "sha512-SGzO4JZQ2HvGRKDzRga9YFSqOqaNrgLlQVaGvpZ2Iht2gwRp/tq+18Pvv9kS9ZqOMYgyix2LLxZMY1LOe9NPqw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", "dependencies": { - "@babel/core": "7.12.3", - "@svgr/babel-preset": "5.4.0", - "@svgr/hast-util-to-babel-ast": "5.4.0", - "svg-parser": "2.0.4" + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/plugin-svgo": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.4.0.tgz", - "integrity": "sha512-3Cgv3aYi1l6SHyzArV9C36yo4kgwVdF3zPQUC6/aCDUeXAofDYwE5kk3e3oT5ZO2a0N3lB+lLGvipBG6lnG8EA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", "dependencies": { - "cosmiconfig": "6.0.0", - "merge-deep": "3.0.2", - "svgo": "1.3.2" + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/webpack": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.4.0.tgz", - "integrity": "sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg==", - "dependencies": { - "@babel/core": "7.12.3", - "@babel/plugin-transform-react-constant-elements": "7.12.1", - "@babel/preset-env": "7.12.1", - "@babel/preset-react": "7.12.1", - "@svgr/core": "5.4.0", - "@svgr/plugin-jsx": "5.4.0", - "@svgr/plugin-svgo": "5.4.0", - "loader-utils": "2.0.0" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@szmarczak/http-timer": { @@ -2245,21 +2628,55 @@ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dependencies": { - "defer-to-connect": "1.1.3" + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" + "node_modules/@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/eslint": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" + }, + "node_modules/@types/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" }, "node_modules/@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dependencies": { - "@types/minimatch": "3.0.3", - "@types/node": "14.11.10" + "@types/minimatch": "*", + "@types/node": "*" } }, "node_modules/@types/hast": { @@ -2276,9 +2693,9 @@ "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" }, "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" }, "node_modules/@types/mdast": { "version": "3.0.3", @@ -2289,14 +2706,14 @@ } }, "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "node_modules/@types/node": { - "version": "14.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", - "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2311,7 +2728,8 @@ "node_modules/@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "peer": true }, "node_modules/@types/q": { "version": "1.5.4", @@ -2319,237 +2737,163 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "node_modules/@types/react": { - "version": "16.9.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz", - "integrity": "sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==", + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.9.tgz", + "integrity": "sha512-2Cw7FvevpJxQrCb+k5t6GH1KIvmadj5uBbjPaLlJB/nZWUj56e1ZqcD6zsoMFB47MsJUTFl9RJ132A7hb3QFJA==", + "peer": true, "dependencies": { "@types/prop-types": "*", + "@types/scheduler": "*", "csstype": "^3.0.2" } }, - "node_modules/@types/react-toggle": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/react-toggle/-/react-toggle-4.0.2.tgz", - "integrity": "sha512-sHqfoKFnL0YU2+OC4meNEC8Ptx9FE8/+nFeFvNcdBa6ANA8KpAzj3R9JN8GtrvlLgjKDoYgI7iILgXYcTPo2IA==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" - }, - "node_modules/@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==" - }, - "node_modules/@types/uglify-js": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.0.tgz", - "integrity": "sha512-I0Yd8TUELTbgRHq2K65j8rnDPAzAP+DiaF/syLem7yXwYLsHZhPd+AM2iXsWmf9P2F2NlFCgl5erZPQx9IbM9Q==", + "node_modules/@types/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", "dependencies": { - "source-map": "0.6.1" + "@types/node": "*" } }, - "node_modules/@types/uglify-js/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==" + "node_modules/@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", + "peer": true }, "node_modules/@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, - "node_modules/@types/webpack": { - "version": "4.41.22", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", - "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", - "dependencies": { - "@types/anymatch": "1.3.1", - "@types/node": "14.11.10", - "@types/tapable": "1.0.6", - "@types/uglify-js": "3.11.0", - "@types/webpack-sources": "2.0.0", - "source-map": "0.6.1" - } - }, - "node_modules/@types/webpack-sources": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz", - "integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==", - "dependencies": { - "@types/node": "14.11.10", - "@types/source-list-map": "0.1.2", - "source-map": "0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, - "node_modules/@types/webpack/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==" - }, "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dependencies": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, @@ -2568,14 +2912,24 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dependencies": { - "mime-types": "2.1.27", + "mime-types": "~2.1.24", "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" } }, "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==" + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/acorn-jsx": { "version": "5.3.1", @@ -2587,22 +2941,31 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz", + "integrity": "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==", + "engines": { + "node": ">=0.4.0" + } }, "node_modules/address": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "engines": { + "node": ">= 0.12.0" + } }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { - "clean-stack": "2.2.0", - "indent-string": "4.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/ajv": { @@ -2610,47 +2973,57 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "fast-deep-equal": "3.1.3", - "fast-json-stable-stringify": "2.1.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.4.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "peerDependencies": { + "ajv": ">=5.0.0" + } }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } }, "node_modules/algoliasearch": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.5.1.tgz", - "integrity": "sha512-b6yT1vWMlBdVObQipKxvt0M6SEvGetVj+FFFlo0Fy06gkdj6WCJaS4t10Q/hC3I2VG9QmpCqlK3Esgg1y1E+uw==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.5.1", - "@algolia/cache-common": "4.5.1", - "@algolia/cache-in-memory": "4.5.1", - "@algolia/client-account": "4.5.1", - "@algolia/client-analytics": "4.5.1", - "@algolia/client-common": "4.5.1", - "@algolia/client-recommendation": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/logger-common": "4.5.1", - "@algolia/logger-console": "4.5.1", - "@algolia/requester-browser-xhr": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/requester-node-http": "4.5.1", - "@algolia/transporter": "4.5.1" + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz", + "integrity": "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.9.1", + "@algolia/cache-common": "4.9.1", + "@algolia/cache-in-memory": "4.9.1", + "@algolia/client-account": "4.9.1", + "@algolia/client-analytics": "4.9.1", + "@algolia/client-common": "4.9.1", + "@algolia/client-recommendation": "4.9.1", + "@algolia/client-search": "4.9.1", + "@algolia/logger-common": "4.9.1", + "@algolia/logger-console": "4.9.1", + "@algolia/requester-browser-xhr": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/requester-node-http": "4.9.1", + "@algolia/transporter": "4.9.1" } }, "node_modules/algoliasearch-helper": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", - "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz", + "integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==", "dependencies": { "events": "^1.1.1" }, @@ -2658,14 +3031,6 @@ "algoliasearch": ">= 3.1 < 5" } }, - "node_modules/algoliasearch-helper/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -2676,7 +3041,28 @@ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dependencies": { - "string-width": "3.1.0" + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" } }, "node_modules/ansi-align/node_modules/string-width": { @@ -2684,83 +3070,137 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dependencies": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { - "type-fest": "0.11.0" + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } }, "node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "1.9.3" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" } }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "normalize-path": "3.0.0", - "picomatch": "2.2.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { - "sprintf-js": "1.0.3" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, + "node_modules/arg": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", + "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "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==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/array-flatten": { "version": "1.1.1", @@ -2786,155 +3226,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-includes/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } }, "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "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": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/array.prototype.flatmap": { "version": "1.2.4", @@ -2954,58 +3268,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "4.11.9", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "safer-buffer": "2.1.2" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dependencies": { - "object-assign": "4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dependencies": { - "inherits": "2.0.1" - } - }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/astral-regex": { "version": "2.0.0", @@ -3021,7 +3295,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dependencies": { - "lodash": "4.17.20" + "lodash": "^4.17.14" } }, "node_modules/async-each": { @@ -3034,85 +3308,75 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, "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==" - }, - "node_modules/autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dependencies": { - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "colorette": "1.2.1", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "7.0.35", - "postcss-value-parser": "4.1.0" - } - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dependencies": { - "chalk": "1.1.3", - "esutils": "2.0.3", - "js-tokens": "3.0.2" + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" } }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "node_modules/autoprefixer": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", + "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", "dependencies": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001230", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "dependencies": { - "ansi-regex": "2.1.1" + "follow-redirects": "^1.10.0" } }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dependencies": { - "find-cache-dir": "2.1.0", - "loader-utils": "1.4.0", - "mkdirp": "0.5.5", - "pify": "4.0.1", - "schema-utils": "2.7.1" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, "node_modules/babel-loader/node_modules/json5": { @@ -3120,7 +3384,10 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "minimist": "1.2.5" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, "node_modules/babel-loader/node_modules/loader-utils": { @@ -3128,18 +3395,21 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.19.tgz", - "integrity": "sha512-zAuL11EaBbeNpfTqsa9xP7mkvX3V4LaEV6M9UUaI4zQtTqN5JwvDyhNsALQs5Ud7WFQSXtoqU74saTgE+rgZOw==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "dependencies": { "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.19" + "@mdx-js/util": "1.6.22" }, "funding": { "type": "opencollective", @@ -3149,18 +3419,23 @@ "@babel/core": "^7.11.6" } }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "dependencies": { - "object.assign": "4.1.1" + "object.assign": "^4.1.0" } }, "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.19.tgz", - "integrity": "sha512-5kbSEhQdg1ybR9OnxybbyR1PXw51z6T6ZCtX3vYSU6t1pC/+eBlSzWXyU2guStbwQgJyxS+mHWSNnL7PUdzAlw==", + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "dependencies": { "@babel/helper-plugin-utils": "7.10.4" }, @@ -3169,32 +3444,84 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", + "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.9.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dependencies": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.3.0", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.2", - "pascalcase": "0.1.1" + "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": { @@ -3202,33 +3529,10 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "is-descriptor": "1.0.2" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "6.0.3" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "6.0.3" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/base16": { @@ -3236,36 +3540,26 @@ "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, - "node_modules/bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", - "dependencies": { - "bluebird": "3.7.2", - "check-types": "8.0.3", - "hoopy": "0.1.4", - "tryer": "1.0.1" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } }, "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } }, "node_modules/bindings": { "version": "1.5.0", @@ -3281,26 +3575,24 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, - "node_modules/bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" - }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dependencies": { "bytes": "3.1.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", + "depd": "~1.1.2", "http-errors": "1.7.2", "iconv-lite": "0.4.24", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.7.0", "raw-body": "2.4.0", - "type-is": "1.6.18" + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/debug": { @@ -3321,12 +3613,12 @@ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dependencies": { - "array-flatten": "2.1.2", - "deep-equal": "1.1.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "node_modules/bonjour/node_modules/array-flatten": { @@ -3340,31 +3632,32 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", "dependencies": { - "ansi-align": "3.0.0", - "camelcase": "5.3.1", - "chalk": "3.0.0", - "cli-boxes": "2.2.1", - "string-width": "4.2.0", - "term-size": "2.2.0", - "type-fest": "0.8.1", - "widest-line": "3.1.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3373,110 +3666,32 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "fill-range": "7.0.1" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "1.0.4", - "des.js": "1.0.1", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dependencies": { - "bn.js": "4.11.9", - "randombytes": "2.1.0" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dependencies": { - "bn.js": "5.1.3", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.5.3", - "inherits": "2.0.4", - "parse-asn1": "5.1.6", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "1.0.11" + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", - "dependencies": { - "caniuse-lite": "1.0.30001148", - "electron-to-chromium": "1.3.582", - "escalade": "3.1.1", - "node-releases": "1.1.63" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dependencies": { - "base64-js": "1.3.1", - "ieee754": "1.1.13", - "isarray": "1.0.0" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer-from": { @@ -3489,156 +3704,31 @@ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" }, - "node_modules/buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, "node_modules/bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "node_modules/cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "dependencies": { - "@npmcli/move-file": "1.0.1", - "chownr": "2.0.0", - "fs-minipass": "2.1.0", - "glob": "7.1.6", - "infer-owner": "1.0.4", - "lru-cache": "6.0.0", - "minipass": "3.1.3", - "minipass-collect": "1.0.2", - "minipass-flush": "1.0.5", - "minipass-pipeline": "1.2.4", - "mkdirp": "1.0.4", - "p-map": "4.0.0", - "promise-inflight": "1.0.1", - "rimraf": "3.0.2", - "ssri": "8.0.0", - "tar": "6.0.5", - "unique-filename": "1.1.1" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } }, "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==", "dependencies": { - "collection-visit": "1.0.0", - "component-emitter": "1.3.0", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.1", - "to-object-path": "0.3.0", - "union-value": "1.0.1", - "unset-value": "1.0.0" - } - }, - "node_modules/cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", - "dependencies": { - "buffer-json": "2.0.0", - "find-cache-dir": "3.3.1", - "loader-utils": "1.4.0", - "mkdirp": "0.5.5", - "neo-async": "2.6.2", - "schema-utils": "2.7.1" - } - }, - "node_modules/cache-loader/node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" - } - }, - "node_modules/cache-loader/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" - } - }, - "node_modules/cache-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" - } - }, - "node_modules/cache-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } - }, - "node_modules/cache-loader/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "4.1.0" - } - }, - "node_modules/cache-loader/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "6.3.0" - } - }, - "node_modules/cache-loader/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "2.3.0" - } - }, - "node_modules/cache-loader/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "node_modules/cache-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "4.1.0" + "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/cacheable-request": { @@ -3646,13 +3736,16 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dependencies": { - "clone-response": "1.0.2", - "get-stream": "5.2.0", - "http-cache-semantics": "4.1.0", - "keyv": "3.1.0", - "lowercase-keys": "2.0.0", - "normalize-url": "4.5.0", - "responselike": "1.0.2" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" } }, "node_modules/cacheable-request/node_modules/get-stream": { @@ -3660,24 +3753,27 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "pump": "3.0.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -3686,50 +3782,33 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dependencies": { - "callsites": "2.0.0" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dependencies": { - "caller-callsite": "2.0.0" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } }, "node_modules/camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dependencies": { - "pascal-case": "3.1.1", - "tslib": "1.14.1" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, "node_modules/camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/camelcase-css": { "version": "2.0.1", @@ -3744,67 +3823,43 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dependencies": { - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001148", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", - "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==" + "version": "1.0.30001235", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", + "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/ccount": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", - "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "2.0.1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "1.1.4" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dependencies": { - "has-flag": "4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/character-entities": { @@ -3844,92 +3899,77 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" - }, "node_modules/cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dependencies": { - "css-select": "1.2.0", - "dom-serializer": "0.1.1", - "entities": "1.1.2", - "htmlparser2": "3.10.1", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.2", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dependencies": { - "anymatch": "3.1.1", - "braces": "3.0.2", - "glob-parent": "5.1.1", - "is-binary-path": "2.1.0", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "readdirp": "3.5.0" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "2.1.3" + "fsevents": "~2.3.1" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dependencies": { - "tslib": "1.14.1" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" } }, "node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" }, "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==", "dependencies": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "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": { @@ -3937,54 +3977,129 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/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==" + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/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==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", "dependencies": { - "source-map": "0.6.1" + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" } }, "node_modules/clean-css/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==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "3.1.0" + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, "node_modules/clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", "optional": true, "dependencies": { "good-listener": "^1.2.2", @@ -3997,9 +4112,54 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dependencies": { - "string-width": "3.1.0", - "strip-ansi": "5.2.0", - "wrap-ansi": "5.1.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" } }, "node_modules/cliui/node_modules/string-width": { @@ -4007,29 +4167,49 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dependencies": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "for-own": "0.1.5", - "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "lazy-cache": "1.0.4", - "shallow-clone": "0.1.2" + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dependencies": { - "is-buffer": "1.1.6" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/clone-response": { @@ -4037,7 +4217,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dependencies": { - "mimic-response": "1.0.1" + "mimic-response": "^1.0.0" } }, "node_modules/clsx": { @@ -4053,9 +4233,23 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dependencies": { - "@types/q": "1.5.4", - "chalk": "2.4.2", - "q": "1.5.1" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/coa/node_modules/chalk": { @@ -4063,9 +4257,52 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/collapse-white-space": { @@ -4082,45 +4319,46 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dependencies": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dependencies": { - "color-convert": "1.9.3", - "color-string": "1.5.4" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "dependencies": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" - } + "node_modules/colord": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", + "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==" }, "node_modules/colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "engines": { + "node": ">=10" + } }, "node_modules/comma-separated-tokens": { "version": "1.0.8", @@ -4132,9 +4370,12 @@ } }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } }, "node_modules/commondir": { "version": "1.0.1", @@ -4151,7 +4392,10 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { - "mime-db": "1.44.0" + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/compression": { @@ -4159,19 +4403,25 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { - "accepts": "1.3.7", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.18", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "1.0.2", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/compression/node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", @@ -4191,79 +4441,34 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "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==", - "dependencies": { - "buffer-from": "1.1.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "typedarray": "0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "node_modules/concat-stream/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } - }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dependencies": { - "dot-prop": "5.3.0", - "graceful-fs": "4.2.4", - "make-dir": "3.1.0", - "unique-string": "2.0.0", - "write-file-atomic": "3.0.3", - "xdg-basedir": "4.0.0" - } - }, - "node_modules/configstore/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "6.3.0" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "engines": { + "node": ">=0.8" + } }, "node_modules/consola": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz", - "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ==" - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "node_modules/content-disposition": { "version": "0.5.3", @@ -4271,63 +4476,54 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dependencies": { "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } }, "node_modules/convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "node_modules/cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dependencies": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" - } - }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "7.1.6" - } - }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/copy-text-to-clipboard": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz", - "integrity": "sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", + "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4342,106 +4538,27 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", - "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", - "dependencies": { - "cacache": "15.0.5", - "fast-glob": "3.2.4", - "find-cache-dir": "3.3.1", - "glob-parent": "5.1.1", - "globby": "11.0.1", - "loader-utils": "2.0.0", - "normalize-path": "3.0.0", - "p-limit": "3.0.2", - "schema-utils": "3.0.0", - "serialize-javascript": "5.0.1", - "webpack-sources": "1.4.3" - } - }, - "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dependencies": { - "array-union": "2.1.0", - "dir-glob": "3.0.1", - "fast-glob": "3.2.4", - "ignore": "5.1.8", - "merge2": "1.4.1", - "slash": "3.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "4.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "6.3.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dependencies": { - "p-try": "2.2.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "2.3.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "2.2.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", + "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", "dependencies": { - "find-up": "4.1.0" + "fast-glob": "^3.2.5", + "glob-parent": "^5.1.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { @@ -4449,34 +4566,58 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz", + "integrity": "sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz", + "integrity": "sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==", "dependencies": { - "browserslist": "4.14.5", + "browserslist": "^4.16.6", "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat/node_modules/semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/core-js-pure": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", - "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.14.0.tgz", + "integrity": "sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-util-is": { "version": "1.0.2", @@ -4484,184 +4625,170 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "4.0.0", - "import-fresh": "3.2.1", - "parse-json": "5.1.0", - "path-type": "4.0.0", - "yaml": "1.10.0" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "4.11.9", - "elliptic": "6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dependencies": { - "cipher-base": "1.0.4", - "inherits": "2.0.4", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", "dependencies": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.4", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "node-fetch": "2.6.1" } }, "node_modules/cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "dependencies": { - "path-key": "3.1.1", - "shebang-command": "2.0.0", - "which": "2.0.2" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.2.1", - "create-ecdh": "4.0.4", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.4", - "pbkdf2": "3.1.1", - "public-encrypt": "4.0.3", - "randombytes": "2.1.0", - "randomfill": "1.0.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "node_modules/css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dependencies": { - "postcss": "7.0.35" + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" } }, "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dependencies": { - "postcss": "7.0.35", - "timsort": "0.3.0" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", + "engines": { + "node": "*" } }, - "node_modules/css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "node_modules/css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "timsort": "^0.3.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, "node_modules/css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dependencies": { - "camelcase": "5.3.1", - "cssesc": "3.0.0", - "icss-utils": "4.1.1", - "loader-utils": "1.4.0", - "normalize-path": "3.0.0", - "postcss": "7.0.35", - "postcss-modules-extract-imports": "2.0.0", - "postcss-modules-local-by-default": "3.0.3", - "postcss-modules-scope": "2.2.0", - "postcss-modules-values": "3.0.0", - "postcss-value-parser": "4.1.0", - "schema-utils": "2.7.1", - "semver": "6.3.0" - } - }, - "node_modules/css-loader/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } }, - "node_modules/css-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "minimist": "1.2.5" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/css-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/css-minimizer-webpack-plugin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz", + "integrity": "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "cssnano": "^5.0.0", + "jest-worker": "^26.3.0", + "p-limit": "^3.0.2", + "postcss": "^8.2.9", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + } } }, - "node_modules/css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "postcss": "7.0.35" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/css-select": { @@ -4669,10 +4796,10 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dependencies": { - "boolbase": "1.0.0", - "css-what": "2.1.3", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.2" + "nth-check": "~1.0.1" } }, "node_modules/css-select-base-adapter": { @@ -4686,195 +4813,213 @@ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dependencies": { "mdn-data": "2.0.4", - "source-map": "0.6.1" + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/css-tree/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==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "node_modules/cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "engines": { + "node": "*" + } }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "node_modules/cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dependencies": { - "cosmiconfig": "5.2.1", - "cssnano-preset-default": "4.0.7", - "is-resolvable": "1.1.0", - "postcss": "7.0.35" + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dependencies": { - "css-declaration-sorter": "4.0.1", - "cssnano-util-raw-cache": "4.0.1", - "postcss": "7.0.35", - "postcss-calc": "7.0.5", - "postcss-colormin": "4.0.3", - "postcss-convert-values": "4.0.1", - "postcss-discard-comments": "4.0.2", - "postcss-discard-duplicates": "4.0.2", - "postcss-discard-empty": "4.0.1", - "postcss-discard-overridden": "4.0.1", - "postcss-merge-longhand": "4.0.11", - "postcss-merge-rules": "4.0.3", - "postcss-minify-font-values": "4.0.2", - "postcss-minify-gradients": "4.0.2", - "postcss-minify-params": "4.0.2", - "postcss-minify-selectors": "4.0.2", - "postcss-normalize-charset": "4.0.1", - "postcss-normalize-display-values": "4.0.2", - "postcss-normalize-positions": "4.0.2", - "postcss-normalize-repeat-style": "4.0.2", - "postcss-normalize-string": "4.0.2", - "postcss-normalize-timing-functions": "4.0.2", - "postcss-normalize-unicode": "4.0.1", - "postcss-normalize-url": "4.0.1", - "postcss-normalize-whitespace": "4.0.2", - "postcss-ordered-values": "4.1.2", - "postcss-reduce-initial": "4.0.3", - "postcss-reduce-transforms": "4.0.2", - "postcss-svgo": "4.0.2", - "postcss-unique-selectors": "4.0.1" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "node_modules/cssnano": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.5.tgz", + "integrity": "sha512-L2VtPXnq6rmcMC9vkBOP131sZu3ccRQI27ejKZdmQiPDpUlFkUbpXHgKN+cibeO1U4PItxVZp1zTIn5dHsXoyg==", "dependencies": { - "postcss": "7.0.35" + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.2", + "is-resolvable": "^1.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "node_modules/cssnano/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/cssnano-preset-advanced": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.2.tgz", + "integrity": "sha512-Joym8pdrIKqzASYvyTwJ9FpkmEcrYToWKWMGVFSggindrEDOpe+FgNpWhWcv6Z7GDZ4kCC3p7PE/oPSGTc8/kw==", "dependencies": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.14.0", - "parse-json": "4.0.0" + "autoprefixer": "^10.2.0", + "cssnano-preset-default": "^5.1.2", + "postcss-discard-unused": "^5.0.1", + "postcss-merge-idents": "^5.0.1", + "postcss-reduce-idents": "^5.0.1", + "postcss-zindex": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cssnano/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dependencies": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "node_modules/cssnano-preset-default": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.2.tgz", + "integrity": "sha512-spilp8LRw0sacuxiN9A/dyyPr6G/WISKMBKcBD4NMoPV0ENx4DeuWvIIrSx9PII2nJIDCO3kywkqTPreECBVOg==", + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.1", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.1", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cssnano/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dependencies": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "node_modules/cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cssnano/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, "node_modules/csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dependencies": { - "css-tree": "1.0.0-alpha.39" + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/csso/node_modules/css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "mdn-data": "2.0.6", - "source-map": "0.6.1" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, "node_modules/csso/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==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" }, "node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dependencies": { - "mimic-response": "1.0.1" + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/deep-equal": { @@ -4882,18 +5027,24 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dependencies": { - "is-arguments": "1.0.4", - "is-date-object": "1.0.2", - "is-regex": "1.1.1", - "object-is": "1.1.3", - "object-keys": "1.1.1", - "regexp.prototype.flags": "1.3.0" + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } }, "node_modules/deep-is": { "version": "0.1.3", @@ -4901,115 +5052,206 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dependencies": { - "execa": "1.0.0", - "ip-regex": "2.1.0" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "1.1.1" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" } }, - "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==", + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dependencies": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { + "node_modules/default-gateway/node_modules/execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dependencies": { - "kind-of": "6.0.3" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/default-gateway/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { - "kind-of": "6.0.3" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "node_modules/default-gateway/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dependencies": { - "globby": "10.0.2", - "graceful-fs": "4.2.4", - "is-glob": "4.0.1", - "is-path-cwd": "2.2.0", - "is-path-inside": "3.0.2", - "p-map": "3.0.0", - "rimraf": "3.0.2", - "slash": "3.0.0" + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/del/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dependencies": { - "aggregate-error": "3.1.0" + "node_modules/default-gateway/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" } }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "node_modules/default-gateway/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dependencies": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "node_modules/detab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", - "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "dependencies": { "repeat-string": "^1.5.4" }, @@ -5019,20 +5261,43 @@ } }, "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/detect-port": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", "dependencies": { - "address": "1.1.2", - "debug": "2.6.9" + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" } }, - "node_modules/detect-port/node_modules/debug": { + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -5040,32 +5305,33 @@ "ms": "2.0.0" } }, - "node_modules/detect-port/node_modules/ms": { + "node_modules/detect-port-alt/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "bn.js": "4.11.9", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" + "ms": "2.0.0" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { - "path-type": "4.0.0" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/dns-equal": { @@ -5074,12 +5340,12 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dependencies": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "node_modules/dns-txt": { @@ -5087,7 +5353,7 @@ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dependencies": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "node_modules/doctrine": { @@ -5107,13 +5373,13 @@ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dependencies": { - "utila": "0.4.0" + "utila": "~0.4" } }, "node_modules/dom-helpers": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", - "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -5124,15 +5390,10 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dependencies": { - "domelementtype": "1.3.1", - "entities": "1.1.2" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, "node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", @@ -5143,7 +5404,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dependencies": { - "domelementtype": "1.3.1" + "domelementtype": "1" } }, "node_modules/domutils": { @@ -5151,17 +5412,17 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dependencies": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" + "dom-serializer": "0", + "domelementtype": "1" } }, "node_modules/dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dependencies": { - "no-case": "3.0.3", - "tslib": "1.14.1" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, "node_modules/dot-prop": { @@ -5169,7 +5430,18 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { - "is-obj": "2.0.0" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" } }, "node_modules/duplexer": { @@ -5182,82 +5454,28 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "1.4.4", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "stream-shift": "1.0.1" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "node_modules/duplexify/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==", - "dependencies": { - "safe-buffer": "5.1.2" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "node_modules/ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" - }, "node_modules/electron-to-chromium": { - "version": "1.3.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", - "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" - }, - "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dependencies": { - "bn.js": "4.11.9", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "1.3.750", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz", + "integrity": "sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A==" }, "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } }, "node_modules/emoticon": { "version": "3.2.0", @@ -5271,25 +5489,9 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, "node_modules/end-of-stream": { @@ -5297,48 +5499,19 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { - "once": "1.4.0" + "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dependencies": { - "graceful-fs": "4.2.4", - "memory-fs": "0.5.0", - "tapable": "1.1.3" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dependencies": { - "errno": "0.1.7", - "readable-stream": "2.3.7" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "node_modules/enhanced-resolve/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==", - "dependencies": { - "safe-buffer": "5.1.2" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/enquirer": { @@ -5353,26 +5526,20 @@ "node": ">=8.6" } }, - "node_modules/enquirer/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dependencies": { - "prr": "1.0.1" + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, "node_modules/error-ex": { @@ -5380,47 +5547,74 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-negative-zero": "2.0.0", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dependencies": { - "is-callable": "1.2.2", - "is-date-object": "1.0.2", - "is-symbol": "1.0.3" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } }, "node_modules/escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } }, "node_modules/escape-html": { "version": "1.0.3", @@ -5428,33 +5622,41 @@ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/eslint": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", - "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -5463,7 +5665,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -5472,7 +5674,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -5520,1195 +5722,1313 @@ "eslint": ">=5.0.0" } }, - "node_modules/eslint-mdx/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "node_modules/eslint-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "node_modules/eslint-plugin-markdown": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", + "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "mdast-util-from-markdown": "^0.8.5" }, "engines": { - "node": ">=6.9.0" + "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", + "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.13.0", + "eslint-plugin-markdown": "^2.1.0", + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "synckit": "^0.1.5", + "tslib": "^2.2.0", + "unified": "^9.2.1", + "vfile": "^4.2.1" + }, + "engines": { + "node": ">=10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/eslint-mdx/node_modules/@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", + "node_modules/eslint-plugin-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "node_modules/eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, - "node_modules/eslint-mdx/node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-mdx/node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-mdx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "node_modules/eslint-mdx/node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/eslint-mdx/node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-mdx/node_modules/@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/eslint-mdx/node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "engines": { + "node": ">=10" } }, - "node_modules/eslint-mdx/node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/highlight": "^7.10.4" } }, - "node_modules/eslint-mdx/node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "sprintf-js": "~1.0.2" } }, - "node_modules/eslint-mdx/node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-mdx/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint-mdx/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-mdx/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/eslint-mdx/node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-mdx/node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "estraverse": "^5.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10" } }, - "node_modules/eslint-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=4.0" } }, - "node_modules/eslint-mdx/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "node_modules/eslint-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "estraverse": "^5.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4.0" } }, - "node_modules/eslint-plugin-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.1.0.tgz", - "integrity": "sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ==", - "dev": true, - "dependencies": { - "remark-parse": "^7.0.0", - "unified": "^6.1.2" - }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "engines": { - "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "node": ">=4.0" } }, - "node_modules/eslint-plugin-markdown/node_modules/parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "dev": true, - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" } }, - "node_modules/eslint-plugin-markdown/node_modules/remark-parse": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", - "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", - "dev": true, - "dependencies": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz", + "integrity": "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==", + "engines": { + "node": ">=6.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "node_modules/eslint-plugin-markdown/node_modules/unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-markdown/node_modules/unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "node_modules/eslint-plugin-markdown/node_modules/unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", - "dev": true, + "node_modules/eval": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", + "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", "dependencies": { - "unist-util-visit": "^1.1.0" + "require-like": ">= 0.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-markdown/node_modules/unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "node_modules/eslint-plugin-markdown/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "dev": true, - "dependencies": { - "unist-util-visit-parents": "^2.0.0" + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" } }, - "node_modules/eslint-plugin-markdown/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dev": true, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dependencies": { - "unist-util-is": "^3.0.0" + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" } }, - "node_modules/eslint-plugin-markdown/node_modules/vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "dev": true, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-plugin-markdown/node_modules/vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "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/eslint-plugin-markdown/node_modules/vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "dev": true, + "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==", "dependencies": { - "unist-util-stringify-position": "^1.1.1" + "ms": "2.0.0" } }, - "node_modules/eslint-plugin-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", - "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", - "dev": true, + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.13.0", - "eslint-plugin-markdown": "^2.1.0", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "synckit": "^0.1.5", - "tslib": "^2.2.0", - "unified": "^9.2.1", - "vfile": "^4.2.1" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=5.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "@babel/highlight": "^7.12.13" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/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==" + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", - "dev": true, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, + "node_modules/expand-brackets/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dependencies": { - "@babel/types": "^7.12.13" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "@babel/types": "^7.12.13" + "ms": "2.0.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "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/eslint-plugin-mdx/node_modules/@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "punycode": "^1.3.2" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "reusify": "^1.0.4" } }, - "node_modules/eslint-plugin-mdx/node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "dependencies": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-mdx/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { - "node": ">=4" + "node": ">=0.8.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/webpack" } }, - "node_modules/eslint-plugin-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "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==", + "optional": true + }, + "node_modules/filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/eslint-plugin-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", - "dev": true, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "esutils": "^2.0.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/flux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", + "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">= 0.4" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/eslint-plugin-react/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.11.5", + "yarn": ">=1.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-react/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "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.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-react/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "color-name": "1.1.3" } }, - "node_modules/eslint-plugin-react/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dependencies": { - "esrecurse": "4.3.0", - "estraverse": "4.3.0" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.10.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true, - "engines": { - "node": ">=10" - } + "node_modules/fork-ts-checker-webpack-plugin/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==" }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/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==", "dependencies": { - "@babel/highlight": "^7.10.4" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "color-convert": "^2.0.1" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "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": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "color-name": "~1.1.4" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "type-fest": "^0.20.2" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dependencies": { - "ansi-regex": "^5.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dependencies": { + "ini": "2.0.0" + }, "engines": { "node": ">=10" }, @@ -6716,7899 +7036,7828 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "global-prefix": "^3.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6" } }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { "node": ">=4" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, + "node_modules/globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", "dependencies": { - "estraverse": "^5.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "engines": { - "node": ">=4.0" + "node": ">= 4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, "dependencies": { - "estraverse": "5.2.0" + "delegate": "^3.1.2" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "node_modules/eta": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.11.0.tgz", - "integrity": "sha512-lfqIE6qD55WFYT6E0phTBUe0sapHJhfvRDB7jSpXxFGwzDaP69kQqRyF7krBe8I1QzF5nE1yAByiIOLB630x4Q==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "node_modules/eval": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.4.tgz", - "integrity": "sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw==", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { - "require-like": "0.1.2" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, - "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dependencies": { - "original": "1.0.2" + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "sprintf-js": "~1.0.2" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.3", - "strip-eof": "1.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dependencies": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.1", - "shebang-command": "1.2.0", - "which": "1.3.1" + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/execa/node_modules/path-key": { + "node_modules/handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "shebang-regex": "1.0.0" + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "2.0.0" + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dependencies": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dependencies": { - "ms": "2.0.0" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dependencies": { - "is-descriptor": "0.1.6" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/has-values/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==" }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "accepts": "1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.6", - "qs": "6.7.0", - "range-parser": "1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "type-is": "1.6.18", - "utils-merge": "1.0.1", - "vary": "1.1.2" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "ms": "2.0.0" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dependencies": { - "is-extendable": "0.1.1" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", "dependencies": { - "is-descriptor": "1.0.2" + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "6.0.3" + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "dependencies": { - "kind-of": "6.0.3" + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "dependencies": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", "dependencies": { - "@nodelib/fs.stat": "2.0.3", - "@nodelib/fs.walk": "1.2.4", - "glob-parent": "5.1.1", - "merge2": "1.4.1", - "micromatch": "4.0.2", - "picomatch": "2.2.2" + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "dependencies": { - "punycode": "1.3.2" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "node_modules/fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "reusify": "1.0.4" + "react-is": "^16.7.0" } }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dependencies": { - "websocket-driver": "0.6.5" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "fbjs": "^0.8.4" + "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/fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "node_modules/hpack.js/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==", "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "safe-buffer": "~5.1.0" } }, - "node_modules/fbjs/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3." + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" }, - "node_modules/feed": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", - "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dependencies": { - "escape-string-regexp": "1.0.5" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dependencies": { - "flat-cache": "^3.0.4" + "source-map": "~0.6.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 4.0" } }, - "node_modules/file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", - "dependencies": { - "loader-utils": "2.0.0", - "schema-utils": "3.0.0" + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "node_modules/html-minifier-terser/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==", + "engines": { + "node": ">=0.10.0" } }, - "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==", - "optional": true - }, - "node_modules/filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "5.0.1" + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "engines": { + "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "statuses": "1.5.0", - "unpipe": "1.0.0" + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/html-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==", "dependencies": { - "ms": "2.0.0" + "@types/html-minifier-terser": "^5.0.0", + "html-minifier-terser": "^5.0.1", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dependencies": { - "commondir": "1.0.1", - "make-dir": "2.1.0", - "pkg-dir": "3.0.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" } }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "3.0.0" - } + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.6" } }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" }, - "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==", + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/flush-write-stream/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==", + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "safe-buffer": "5.1.2" + "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/flux": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", - "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "fbemitter": "^2.0.0", - "fbjs": "^0.8.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0-beta || ^16.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dependencies": { - "for-in": "1.0.2" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", - "dependencies": { - "babel-code-frame": "6.26.0", - "chalk": "2.4.2", - "chokidar": "3.4.3", - "micromatch": "3.1.10", - "minimatch": "3.0.4", - "semver": "5.7.1", - "tapable": "1.1.3", - "worker-rpc": "0.1.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } + "node_modules/http-proxy-middleware/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==" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/node_modules/is-extendable": { + "node_modules/http-proxy-middleware/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==", "dependencies": { - "is-plain-object": "2.0.4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { + "node_modules/http-proxy-middleware/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number/node_modules/kind-of": { + "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { + "node_modules/http-proxy-middleware/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "node_modules/http-proxy-middleware/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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/to-regex-range": { + "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "map-cache": "0.2.2" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dependencies": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/from2/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==", - "dependencies": { - "safe-buffer": "5.1.2" + "node_modules/immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "graceful-fs": "4.2.4", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-minipass": { + "node_modules/import-lazy": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "3.1.3" + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" } }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dependencies": { - "graceful-fs": "4.2.4", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.7" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fs-write-stream-atomic/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==", + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "safe-buffer": "5.1.2" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "pump": "3.0.0" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } }, - "node_modules/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } - }, - "node_modules/github-slugger/node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dependencies": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.4", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dependencies": { - "is-glob": "4.0.1" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" } }, - "node_modules/glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "node_modules/global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", - "dependencies": { - "ini": "1.3.5" + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "3.0.0" + "node_modules/infima": { + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz", + "integrity": "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==", + "engines": { + "node": ">=12" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { - "ini": "1.3.5", - "kind-of": "6.0.3", - "which": "1.3.1" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "2.0.0" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dependencies": { - "@types/glob": "7.1.3", - "array-union": "2.1.0", - "dir-glob": "3.0.1", - "fast-glob": "3.2.4", - "glob": "7.1.6", - "ignore": "5.1.8", - "merge2": "1.4.1", - "slash": "3.0.0" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "dependencies": { - "delegate": "^3.1.2" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "0.14.0", - "@szmarczak/http-timer": "1.1.2", - "cacheable-request": "6.1.0", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "4.1.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.1", - "p-cancelable": "1.1.0", - "to-readable-stream": "1.0.0", - "url-parse-lax": "3.0.0" + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" } }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "node_modules/gray-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", - "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", - "dependencies": { - "js-yaml": "3.14.0", - "kind-of": "6.0.3", - "section-matter": "1.0.0", - "strip-bom-string": "1.0.0" + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "engines": { + "node": ">=4" } }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dependencies": { - "duplexer": "0.1.2", - "pify": "4.0.1" + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "1.1.1" + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "engines": { + "node": ">=8" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "ansi-regex": "2.1.1" + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "node_modules/has-value": { + "node_modules/is-alphanumeric": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dependencies": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true, + "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": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dependencies": { - "kind-of": "3.2.2" + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "1.1.6" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "1.1.6" + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-yarn": { + "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { - "inherits": "2.0.4", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dependencies": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", - "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", - "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dependencies": { - "@types/parse5": "^5.0.0", - "ccount": "^1.0.0", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0" + "ci-info": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", - "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "node_modules/is-color-stop/node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "engines": { + "node": "*" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "has": "^1.0.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "kind-of": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "7.12.1", - "loose-envify": "1.4.0", - "resolve-pathname": "3.0.0", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3", - "value-equal": "1.0.1" + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "16.13.1" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dependencies": { - "inherits": "2.0.4", - "obuf": "1.1.2", - "readable-stream": "2.3.7", - "wbuf": "1.7.3" + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hpack.js/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==", - "dependencies": { - "safe-buffer": "5.1.2" + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, - "node_modules/html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dependencies": { - "camel-case": "4.1.1", - "clean-css": "4.2.3", - "commander": "4.1.1", - "he": "1.2.0", - "param-case": "3.0.3", - "relateurl": "0.2.7", - "terser": "4.8.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/html-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { - "@types/html-minifier-terser": "5.1.1", - "@types/tapable": "1.0.6", - "@types/webpack": "4.41.22", - "html-minifier-terser": "5.1.1", - "loader-utils": "1.4.0", - "lodash": "4.17.20", - "pretty-error": "2.1.2", - "tapable": "1.1.3", - "util.promisify": "1.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html-webpack-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-webpack-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html-webpack-plugin/node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dependencies": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.1.0" + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "1.3.1", - "domhandler": "2.4.2", - "domutils": "1.5.1", - "entities": "1.1.2", - "inherits": "2.0.4", - "readable-stream": "3.6.0" + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "toidentifier": "1.0.0" + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "4.0.7", - "follow-redirects": "1.13.0", - "requires-port": "1.0.0" + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" } }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dependencies": { - "http-proxy": "1.18.1", - "is-glob": "4.0.1", - "lodash": "4.17.20", - "micromatch": "3.1.10" + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" } }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", + "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==", "dependencies": { - "is-plain-object": "2.0.4" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "3.2.2" + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" } }, - "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "1.1.6" + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" } }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-browserify": { + "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", "engines": { - "node": ">=8.12.0" + "node": ">=0.10.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": "2.1.2" + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "postcss": "7.0.35" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "node_modules/immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dependencies": { - "import-from": "2.1.0" + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dependencies": { - "parent-module": "1.0.1", - "resolve-from": "4.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "node_modules/joi": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", + "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", "dependencies": { - "resolve-from": "3.0.0" + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" } }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "node_modules/infima": { - "version": "0.2.0-alpha.13", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", - "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "1.4.0", - "wrappy": "1.0.2" - } + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, - "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dependencies": { - "ansi-escapes": "4.3.1", - "chalk": "4.1.0", - "cli-cursor": "3.1.0", - "cli-width": "3.0.0", - "external-editor": "3.1.0", - "figures": "3.2.0", - "lodash": "4.17.20", - "mute-stream": "0.0.8", - "run-async": "2.4.1", - "rxjs": "6.6.3", - "string-width": "4.2.0", - "strip-ansi": "6.0.0", - "through": "2.3.8" - } + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dependencies": { - "color-convert": "2.0.1" + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { - "color-name": "1.1.4" + "json-buffer": "3.0.0" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "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==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "5.0.0" + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "4.0.0" + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "engines": { + "node": ">= 8" } }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dependencies": { - "default-gateway": "4.2.0", - "ipaddr.js": "1.9.1" + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "engines": { + "node": ">=6.11.5" + } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dependencies": { - "kind-of": "3.2.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "is-buffer": "1.1.6" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "binary-extensions": "2.1.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { - "call-bind": "^1.0.0" + "semver": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, - "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "2.0.0" + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dependencies": { - "css-color-names": "0.0.4", - "hex-color-regex": "1.1.0", - "hsl-regex": "1.0.0", - "hsla-regex": "1.0.0", - "rgb-regex": "1.0.1", - "rgba-regex": "1.0.0" + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "dev": true, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dependencies": { - "has": "^1.0.3" + "object-visit": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "3.2.2" + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, "dependencies": { - "is-buffer": "1.1.6" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "repeat-string": "^1.0.0" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "dependencies": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-descriptor/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==" - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, "dependencies": { - "is-extglob": "2.1.1" + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, "dependencies": { - "global-dirs": "2.0.1", - "is-path-inside": "3.0.2" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-obj": { + "node_modules/mdast-util-to-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "2.1.0" + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" } }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dependencies": { - "path-is-inside": "1.0.2" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "node_modules/is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "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==", + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "isobject": "3.0.1" + "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/is-regex": { + "node_modules/memory-fs/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "has-symbols": "1.0.1" + "safe-buffer": "~5.1.0" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" }, - "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">= 0.4" + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dependencies": { - "html-comment-regex": "1.1.2" + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dependencies": { - "has-symbols": "1.0.1" + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" } }, - "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==" - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + }, + "peerDependencies": { + "prop-types": "^15.0.0", + "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/mini-css-extract-plugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dependencies": { - "is-docker": "2.1.1" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/jest-worker": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", - "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dependencies": { - "@types/node": "14.11.10", - "merge-stream": "2.0.0", - "supports-color": "7.2.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "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==", "dependencies": { - "has-flag": "4.0.0" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "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==", "dependencies": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "node_modules/module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dependencies": { - "minimist": "1.2.5" + "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/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "graceful-fs": "4.2.4" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsx-ast-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", - "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", - "dev": true, + "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==", "dependencies": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.1" + "is-plain-object": "^2.0.4" }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "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==" + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dependencies": { - "lodash": "4.17.20", - "webpack-sources": "1.4.3" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "node_modules/node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", "dependencies": { - "package-json": "6.5.0" + "lodash.toarray": "^4.4.0" } }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "engines": { - "node": ">= 0.8.0" + "node": "4.x || >=6.0.0" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "2.1.3" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" }, - "node_modules/lodash._reinterpolate": { + "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.has": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.isstring": { + "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.2.0" + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dependencies": { - "lodash._reinterpolate": "3.0.0" + "boolbase": "~1.0.0" } }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "node_modules/loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" - }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, "dependencies": { - "js-tokens": "4.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dependencies": { - "tslib": "1.14.1" + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dependencies": { - "yallist": "4.0.0" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" } }, - "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==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "pify": "4.0.1", - "semver": "5.7.1" + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "object-visit": "1.0.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/object-copy/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==" }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "repeat-string": "^1.0.0" + "kind-of": "^3.0.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "hash-base": "3.1.0", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/object-copy/node_modules/is-descriptor/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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "dev": true, + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "unist-util-visit": "^2.0.0" + "is-buffer": "^1.1.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-util-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", - "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mdast-util-to-hast": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz", - "integrity": "sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ==", + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.3", - "mdast-util-definitions": "^3.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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==", + "engines": { + "node": ">= 0.4" } }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/mdurl": { + "node_modules/object-visit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dependencies": { - "errno": "0.1.7", - "readable-stream": "2.3.7" + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/memory-fs/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==", + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, "dependencies": { - "arr-union": "3.1.0", - "clone-deep": "0.2.4", - "kind-of": "3.2.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merge-deep/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dependencies": { - "is-buffer": "1.1.6" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dependencies": { - "braces": "3.0.2", - "picomatch": "2.2.2" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dependencies": { - "bn.js": "4.11.9", - "brorand": "1.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dependencies": { - "mime-db": "1.44.0" + "wrappy": "1" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "node_modules/mini-create-react-context": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", - "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "@babel/runtime": "7.12.1", - "tiny-warning": "1.0.3" + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mini-css-extract-plugin": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", - "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dependencies": { - "loader-utils": "1.4.0", - "normalize-url": "1.9.1", - "schema-utils": "1.0.0", - "webpack-sources": "1.4.3" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mini-css-extract-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "dependencies": { - "brace-expansion": "1.1.11" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dependencies": { - "yallist": "4.0.0" + "url-parse": "^1.4.3" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dependencies": { - "minipass": "3.1.3" + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "3.1.3" + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "minipass": "3.1.3" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "minipass": "3.1.3", - "yallist": "4.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.4", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.2.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dependencies": { - "is-plain-object": "2.0.4" + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/mixin-object/node_modules/for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dependencies": { - "minimist": "1.2.5" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/move-concurrently": { + "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dependencies": { - "glob": "7.1.6" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "dns-packet": "1.3.1", - "thunky": "1.1.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "node_modules/parse-numeric-range": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", + "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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.3", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "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==", - "dependencies": { - "is-plain-object": "2.0.4" + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, - "node_modules/no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dependencies": { - "lower-case": "2.0.1", - "tslib": "1.14.1" + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" } }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dependencies": { - "lodash.toarray": "^4.4.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==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" } }, - "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "1.5.0", - "browserify-zlib": "0.2.0", - "buffer": "4.9.2", - "console-browserify": "1.2.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "3.2.0", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.1", - "process": "0.11.10", - "punycode": "1.3.2", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.7", - "stream-browserify": "2.0.2", - "stream-http": "2.8.3", - "string_decoder": "1.3.0", - "timers-browserify": "2.0.11", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.11.1", - "vm-browserify": "1.1.2" - } - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "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": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-libs-browser/node_modules/readable-stream/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==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { - "safe-buffer": "5.1.2" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/node-releases": { - "version": "1.1.63", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", - "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==" + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/normalize-path": { + "node_modules/pkg-up/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "path-key": "2.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "boolbase": "1.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/null-loader": { + "node_modules/pkg-up/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", - "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "loader-utils": "1.4.0", - "schema-utils": "1.0.0" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/null-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" } }, - "node_modules/null-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" } }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "ms": "^2.1.1" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "0.1.6" + "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" } }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/postcss": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dependencies": { - "is-buffer": "1.1.6" + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "node_modules/object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "node_modules/postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.18.0-next.1" + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "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==" - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "3.0.1" - } - }, - "node_modules/object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.18.0-next.1", - "has-symbols": "1.0.1", - "object-keys": "1.1.1" - } - }, - "node_modules/object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "dev": true, + "node_modules/postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, + "node_modules/postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, + "node_modules/postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, + "node_modules/postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, + "node_modules/postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, + "node_modules/postcss-discard-unused": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", + "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, + "node_modules/postcss-loader": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/object.fromentries/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, + "node_modules/postcss-merge-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", + "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.fromentries/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, + "node_modules/postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "node_modules/postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "dependencies": { - "isobject": "3.0.1" + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "node_modules/postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7", - "function-bind": "1.1.1", - "has": "1.0.3" + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/object.values/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/postcss-minify-selectors": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dependencies": { - "wrappy": "1.0.2" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dependencies": { - "mimic-fn": "2.1.0" + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dependencies": { - "is-docker": "2.1.1", - "is-wsl": "2.2.0" + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "1.1.0" + "node_modules/postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", - "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "node_modules/postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", "dependencies": { - "cssnano": "4.1.10", - "last-call-webpack-plugin": "3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "node_modules/postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", "dependencies": { - "url-parse": "1.4.7" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "dependencies": { - "p-try": "2.2.0" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "dependencies": { - "p-limit": "2.3.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "dependencies": { - "aggregate-error": "3.1.0" + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "node_modules/postcss-normalize-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.1.tgz", + "integrity": "sha512-hkbG0j58Z1M830/CJ73VsP7gvlG1yF+4y7Fd1w4tD2c7CaA2Psll+pQ6eQhth9y9EaqZSLzamff/D0MZBMbYSg==", "dependencies": { - "retry": "0.12.0" + "is-absolute-url": "^3.0.3", + "normalize-url": "^4.5.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "dependencies": { - "got": "9.6.0", - "registry-auth-token": "4.2.0", - "registry-url": "5.1.0", - "semver": "6.3.0" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "node_modules/postcss-ordered-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.1.tgz", + "integrity": "sha512-6mkCF5BQ25HvEcDfrMHCLLFHlraBSlOXFnQMHYhSpDO/5jSR1k8LdEXOkv+7+uzW6o6tBYea1Km0wQSRkPJkwA==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "node_modules/postcss-reduce-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", + "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", "dependencies": { - "cyclist": "1.0.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parallel-transform/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==", + "node_modules/postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "dependencies": { - "safe-buffer": "5.1.2" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dependencies": { - "dot-case": "3.0.3", - "tslib": "1.14.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/postcss-sort-media-queries": { + "version": "3.10.11", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.10.11.tgz", + "integrity": "sha512-78Ak5YSnalr+UTdZa2OCSNAxvEnHg3GRqWccStljJW7MqeU0cJtMA5OzaMmn+upM+iI5vykWzibVEAYaaAlSzw==", "dependencies": { - "callsites": "3.1.0" + "sort-css-media-queries": "1.5.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "dependencies": { - "asn1.js": "5.4.1", - "browserify-aes": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.1.1", - "safe-buffer": "5.1.2" + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-select": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "@babel/code-frame": "7.10.4", - "error-ex": "1.3.2", - "json-parse-even-better-errors": "2.3.1", - "lines-and-columns": "1.1.6" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/parse-numeric-range": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", - "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" + "node_modules/postcss-svgo/node_modules/css-what": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "node_modules/postcss-svgo/node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "node_modules/postcss-svgo/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "node_modules/postcss-svgo/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dependencies": { - "no-case": "3.0.3", - "tslib": "1.14.1" + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "node_modules/postcss-svgo/node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "node_modules/postcss-svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "node_modules/postcss-svgo/node_modules/nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } }, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "node_modules/postcss-svgo/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==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", + "dependencies": { + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "node_modules/postcss-unique-selectors": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dependencies": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", + "uniqs": "^2.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "2.0.4" + "node_modules/postcss-zindex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", + "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "3.0.0" + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "3.0.0" + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" } }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dependencies": { - "ts-pnp": "1.2.0" + "node_modules/prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", "dependencies": { - "async": "2.6.3", - "debug": "3.2.6", - "mkdirp": "0.5.5" + "lodash": "^4.17.20", + "renderkid": "^2.0.4" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dependencies": { - "ms": "2.1.2" + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" } }, - "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dependencies": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" + "node_modules/prism-react-renderer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", + "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", + "peerDependencies": { + "react": ">=0.14.9" } }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4" + "node_modules/prismjs": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", + "optionalDependencies": { + "clipboard": "^2.0.0" } }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4", - "postcss-value-parser": "4.1.0" + "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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "asap": "~2.0.3" } }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "node_modules/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dependencies": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, - "node_modules/postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "dependencies": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { - "browserslist": "4.14.5", - "color": "3.1.3", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dependencies": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dependencies": { - "postcss": "7.0.35" + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" } }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "engines": { + "node": ">=0.4.x" } }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { - "postcss": "7.0.35" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dependencies": { - "postcss": "7.0.35" - } - }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dependencies": { - "postcss": "7.0.35" + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "dependencies": { - "postcss": "7.0.35" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "node_modules/react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "peerDependencies": { + "react": ">=16.3.1" } }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" } }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "node_modules/react-copy-to-clipboard": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", + "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", "dependencies": { - "postcss": "7.0.35" + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "node_modules/react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", "dependencies": { - "postcss": "7.0.35" + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "node_modules/react-dev-utils/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { - "postcss": "7.0.35" + "@babel/highlight": "^7.10.4" } }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "postcss": "7.0.35" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "node_modules/react-dev-utils/node_modules/browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" } }, - "node_modules/postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "lodash.template": "4.5.0", - "postcss": "7.0.35" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dependencies": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "cosmiconfig": "5.2.1", - "import-cwd": "2.1.0" + "color-name": "1.1.3" } }, - "node_modules/postcss-load-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dependencies": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.14.0", - "parse-json": "4.0.0" - } + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/postcss-load-config/node_modules/import-fresh": { + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dependencies": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" } }, - "node_modules/postcss-load-config/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/react-dev-utils/node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", "dependencies": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-load-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "node_modules/postcss-loader": { + "node_modules/react-dev-utils/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dependencies": { - "loader-utils": "1.4.0", - "postcss": "7.0.35", - "postcss-load-config": "2.1.2", - "schema-utils": "1.0.0" + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" } }, - "node_modules/postcss-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" + "node_modules/react-dev-utils/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" } }, - "node_modules/postcss-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/react-dev-utils/node_modules/prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "dependencies": { - "postcss": "7.0.35" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" } }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dependencies": { - "postcss": "7.0.35" - } + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", "dependencies": { - "css-color-names": "0.0.4", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "stylehacks": "4.0.3" + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" } }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", "dependencies": { - "browserslist": "4.14.5", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2", - "vendors": "1.0.4" + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" } }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", "dependencies": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "*" } }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", "dependencies": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "node_modules/react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", "dependencies": { - "alphanum-sort": "1.0.2", - "browserslist": "4.14.5", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" } }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "node_modules/react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", "dependencies": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2" + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } + "node_modules/react-router/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, - "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "node_modules/react-router/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dependencies": { - "postcss": "7.0.35" + "isarray": "0.0.1" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dependencies": { - "icss-utils": "4.1.1", - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4", - "postcss-value-parser": "4.1.0" + "node_modules/react-side-effect": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", + "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0" } }, - "node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "node_modules/react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4" + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" } }, - "node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "node_modules/react-toastify": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.2.0.tgz", + "integrity": "sha512-XpjFrcBhQ0/nBOL4syqgP/TywFnOyxmstYLWgSQWcj39qpp+WU4vPt3C/ayIDx7RFyxRWfzWTdR2qOcDGo7G0w==", "dependencies": { - "icss-utils": "4.1.1", - "postcss": "7.0.35" + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "react": ">=16" } }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "node_modules/react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", "dependencies": { - "postcss": "7.0.35" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "postcss": "7.0.35" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dependencies": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/reading-time": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", + "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dependencies": { - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dependencies": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "@babel/runtime": "^7.8.4" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "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==", "dependencies": { - "browserslist": "4.14.5", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "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==", "dependencies": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dependencies": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dependencies": { - "postcss": "7.0.35" + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dependencies": { - "postcss": "7.0.35" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dependencies": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dependencies": { - "autoprefixer": "9.8.6", - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "css-blank-pseudo": "0.1.4", - "css-has-pseudo": "0.10.0", - "css-prefers-color-scheme": "3.1.1", - "cssdb": "4.4.0", - "postcss": "7.0.35", - "postcss-attribute-case-insensitive": "4.0.2", - "postcss-color-functional-notation": "2.0.1", - "postcss-color-gray": "5.0.0", - "postcss-color-hex-alpha": "5.0.3", - "postcss-color-mod-function": "3.0.3", - "postcss-color-rebeccapurple": "4.0.1", - "postcss-custom-media": "7.0.8", - "postcss-custom-properties": "8.0.11", - "postcss-custom-selectors": "5.1.2", - "postcss-dir-pseudo-class": "5.0.0", - "postcss-double-position-gradients": "1.0.0", - "postcss-env-function": "2.0.2", - "postcss-focus-visible": "4.0.0", - "postcss-focus-within": "3.0.0", - "postcss-font-variant": "4.0.0", - "postcss-gap-properties": "2.0.0", - "postcss-image-set-function": "3.0.1", - "postcss-initial": "3.0.2", - "postcss-lab-function": "2.0.1", - "postcss-logical": "3.0.0", - "postcss-media-minmax": "4.0.0", - "postcss-nesting": "7.0.1", - "postcss-overflow-shorthand": "2.0.0", - "postcss-page-break": "2.0.0", - "postcss-place": "4.0.1", - "postcss-pseudo-class-any-link": "6.0.0", - "postcss-replace-overflow-wrap": "3.0.0", - "postcss-selector-matches": "4.0.0", - "postcss-selector-not": "4.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dependencies": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dependencies": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dependencies": { - "browserslist": "4.14.5", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.35" + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" } }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "node_modules/rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", "dependencies": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", "dependencies": { - "postcss": "7.0.35" + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "node_modules/rehype-parse/node_modules/hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", "dependencies": { - "balanced-match": "1.0.0", - "postcss": "7.0.35" + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-selector-not": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", - "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", - "dependencies": { - "balanced-match": "1.0.0", - "postcss": "7.0.35" - } + "node_modules/rehype-parse/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" }, - "node_modules/postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", - "dependencies": { - "cssesc": "3.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1", - "util-deprecate": "1.0.2" + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "engines": { + "node": ">= 0.10" } }, - "node_modules/postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "node_modules/remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", "dependencies": { - "is-svg": "3.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "svgo": "1.3.2" + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "node_modules/remark-admonitions/node_modules/unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", "dependencies": { - "alphanum-sort": "1.0.2", - "postcss": "7.0.35", - "uniqs": "2.0.0" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", "dependencies": { - "flatten": "1.0.3", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" } }, - "node_modules/postcss/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dependencies": { - "has-flag": "3.0.0" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss/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==" - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { - "has-flag": "3.0.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "node_modules/prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" }, - "engines": { - "node": ">=10.13.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { - "lodash": "4.17.20", - "renderkid": "2.0.4" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" - }, - "node_modules/prism-react-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz", - "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==", + "@babel/helper-plugin-utils": "^7.10.4" + }, "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", - "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", - "optionalDependencies": { - "clipboard": "^2.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "dependencies": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "react-is": "16.13.1" + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "dependencies": { - "xtend": "^4.0.0" + "mdast-squeeze-paragraphs": "^4.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dependencies": { - "forwarded": "0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "4.11.9", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.6", - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "node_modules/remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/renderkid": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.6.tgz", + "integrity": "sha512-GIis2GBr/ho0pFNf57D4XM4+PgnQuTii0WCPjEZmZfKivzUfGuRdjN2aQYtYMiNggHmNyBve+thFnNR1iBRcKg==", "dependencies": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.0" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/renderkid/node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dependencies": { - "duplexify": "3.7.1", - "inherits": "2.0.4", - "pump": "2.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "node_modules/renderkid/node_modules/css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/punycode": { + "node_modules/renderkid/node_modules/dom-serializer": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", - "dependencies": { - "escape-goat": "2.1.1" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dependencies": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "node_modules/querystringify": { + "node_modules/renderkid/node_modules/domelementtype": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dependencies": { - "safe-buffer": "5.1.2" + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "node_modules/renderkid/node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dependencies": { - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.5", - "strip-json-comments": "2.0.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "node_modules/renderkid/node_modules/nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "boolbase": "^1.0.0" }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "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==", "engines": { "node": ">=0.10.0" } }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "peerDependencies": { - "react": ">=16.3.1" + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0" + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", - "dependencies": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "7.3.0", - "pkg-up": "3.1.0", - "react-error-overlay": "6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "engines": { + "node": "*" } }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dependencies": { - "@babel/highlight": "7.10.4" - } + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "node_modules/react-dev-utils/node_modules/@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "node_modules/react-dev-utils/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dependencies": { - "array-uniq": "1.0.3" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-dev-utils/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/react-dev-utils/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" } }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", - "dependencies": { - "caniuse-lite": "1.0.30001148", - "electron-to-chromium": "1.3.582", - "node-releases": "1.1.63", - "pkg-up": "3.1.0" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" } }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "node_modules/react-dev-utils/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, - "node_modules/react-dev-utils/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dependencies": { - "ms": "2.0.0" + "lowercase-keys": "^1.0.0" } }, - "node_modules/react-dev-utils/node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "1.1.2", - "debug": "2.6.9" + "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==", + "engines": { + "node": ">=0.12" } }, - "node_modules/react-dev-utils/node_modules/dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dependencies": { - "arrify": "1.0.1", - "path-type": "3.0.0" + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "engines": { + "node": ">= 4" } }, - "node_modules/react-dev-utils/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, - "node_modules/react-dev-utils/node_modules/extend-shallow": { + "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/react-dev-utils/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "2.0.4" - } + "node_modules/rtl-detect": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz", + "integrity": "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" }, - "node_modules/react-dev-utils/node_modules/fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "node_modules/rtlcss": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.2.0.tgz", + "integrity": "sha512-nV3UmaTmA5TkP2dYOR16ULu6FkMOqZRbiXbFZnmWIN9coPfx3gin31VGOPV7vrVMPjNds7pCS2UYy0mwQUdFCQ==", "dependencies": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.3", - "glob-parent": "3.1.0", - "is-glob": "4.0.1", - "merge2": "1.4.1", - "micromatch": "3.1.10" + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "mkdirp": "^1.0.4", + "postcss": "^8.2.4", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "peerDependencies": { + "postcss": "^8.2.4" } }, - "node_modules/react-dev-utils/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "is-extendable": "0.1.1" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "queue-microtask": "^1.2.2" } }, - "node_modules/react-dev-utils/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { - "is-extglob": "2.1.1" + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dependencies": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.7", - "glob": "7.1.6", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" - } + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/react-dev-utils/node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + "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==" }, - "node_modules/react-dev-utils/node_modules/inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", - "dependencies": { - "ansi-escapes": "4.3.1", - "chalk": "2.4.2", - "cli-cursor": "3.1.0", - "cli-width": "2.2.1", - "external-editor": "3.1.0", - "figures": "3.2.0", - "lodash": "4.17.20", - "mute-stream": "0.0.8", - "run-async": "2.4.1", - "rxjs": "6.6.3", - "string-width": "4.2.0", - "strip-ansi": "5.2.0", - "through": "2.3.8" - } - }, - "node_modules/react-dev-utils/node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dependencies": { - "ansi-regex": "4.1.0" + "ret": "~0.1.10" } }, - "node_modules/react-dev-utils/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "3.2.2" - } + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/react-dev-utils/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "1.1.6" - } + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "node_modules/react-dev-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dependencies": { - "minimist": "1.2.5" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dependencies": { - "big.js": "5.2.2", - "emojis-list": "2.1.0", - "json5": "1.0.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dependencies": { - "p-locate": "4.1.0" + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/react-dev-utils/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "node_modules/react-dev-utils/node_modules/ms": { + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "node_modules/select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dependencies": { - "p-limit": "2.3.0" + "node-forge": "^0.10.0" } }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "node_modules/react-dev-utils/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dependencies": { - "pify": "3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/react-dev-utils/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "node_modules/react-dev-utils/node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "node_modules/react-dev-utils/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dependencies": { - "ansi-regex": "5.0.0" + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/react-dev-utils/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "node_modules/react-dev-utils/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, - "peerDependencies": { - "react": "^16.14.0" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/react-error-overlay": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", - "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "object-assign": "4.1.1", - "prop-types": "15.7.2", - "react-fast-compare": "3.2.0", - "react-side-effect": "2.1.0" + "ms": "2.0.0" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/react-json-view": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", - "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dependencies": { - "flux": "^3.1.3", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^6.1.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^15.5.4", - "react-dom": "^16.0.0 || ^15.5.4" + "randombytes": "^2.1.0" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", "dependencies": { - "prop-types": "15.7.2" + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" } }, - "node_modules/react-loadable-ssr-addon": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz", - "integrity": "sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw==", - "dependencies": { - "@babel/runtime": "7.12.1" + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" } }, - "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "dependencies": { - "@babel/runtime": "7.12.1", - "history": "4.10.1", - "hoist-non-react-statics": "3.3.2", - "loose-envify": "1.4.0", - "mini-create-react-context": "0.4.0", - "path-to-regexp": "1.8.0", - "prop-types": "15.7.2", - "react-is": "16.13.1", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3" + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "engines": { + "node": ">= 0.6" } }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "7.12.1" + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dependencies": { - "@babel/runtime": "7.12.1", - "history": "4.10.1", - "loose-envify": "1.4.0", - "prop-types": "15.7.2", - "react-router": "5.2.0", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3" + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "engines": { + "node": ">= 0.6" } }, - "node_modules/react-side-effect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", - "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" - }, - "node_modules/react-textarea-autosize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", - "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dependencies": { - "prop-types": "^15.6.0" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, - "peerDependencies": { - "react": ">=0.14.0 <17.0.0" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/react-toastify": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.9.tgz", - "integrity": "sha512-StHXv+4kezHUnPyoILlvygSptQ79bxVuvKcC05yXP0FlqQgPA1ue+80BqxZZiCw2jWDGiY2MHyqBfFKf5YzZbA==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "classnames": "^2.2.6", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.1" - }, - "peerDependencies": { - "react": ">=16" + "ms": "2.0.0" } }, - "node_modules/react-toggle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", - "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dependencies": { - "classnames": "^2.2.5" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, - "peerDependencies": { - "prop-types": "^15.3.0 || ^16.0.0", - "react": "^15.3.0 || ^16.0.0", - "react-dom": "^15.3.0 || ^16.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/react-transition-group": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", - "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "2.0.4", - "string_decoder": "1.3.0", - "util-deprecate": "1.0.2" - } + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "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==", "dependencies": { - "picomatch": "2.2.2" + "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/reading-time": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", - "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "1.17.0" - } + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dependencies": { - "minimatch": "3.0.4" + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "regenerate": "1.4.1" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dependencies": { - "@babel/runtime": "7.12.1" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/sirv": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", + "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "@polka/url": "^1.0.0-next.15", + "mime": "^2.3.1", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" } }, - "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==", - "dependencies": { - "is-plain-object": "2.0.4" + "node_modules/sirv/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz", + "integrity": "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "@types/node": "^14.14.28", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=10.3.0", + "npm": ">=5.6.0" } }, - "node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "node_modules/sitemap/node_modules/@types/node": { + "version": "14.17.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", + "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "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==", "dependencies": { - "regenerate": "1.4.1", - "regenerate-unicode-properties": "8.2.0", - "regjsgen": "0.5.2", - "regjsparser": "0.6.4", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.2.0" + "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/registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "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==", "dependencies": { - "rc": "1.2.8" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "rc": "1.2.8" + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "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==", "dependencies": { - "jsesc": "0.5.0" + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "node_modules/snapdragon-util/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==" }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" + "is-buffer": "^1.1.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "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==", "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ms": "2.0.0" } }, - "node_modules/rehype-parse/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - } - }, - "node_modules/remark-admonitions/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "is-descriptor": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "kind-of": "^3.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-emoji": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.1.0.tgz", - "integrity": "sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.2" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/snapdragon/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==" }, - "node_modules/remark-mdx": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", - "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "@babel/core": "7.11.6", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-syntax-jsx": "7.10.4", - "@mdx-js/util": "1.6.19", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "kind-of": "^3.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=0.10.0" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/snapdragon/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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" } }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "node_modules/sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" } }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ms": "^2.1.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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "node_modules/renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", - "dependencies": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.10.1", - "lodash": "4.17.20", - "strip-ansi": "3.0.1" + "node_modules/sockjs/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "2.1.1" + "node_modules/sort-css-media-queries": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", + "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", + "engines": { + "node": ">= 6.3.0" } }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, - "node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "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==", "dependencies": { - "path-parse": "1.0.6" + "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/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dependencies": { - "resolve-from": "3.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + "node_modules/source-map-support/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==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "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==" }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "1.0.1" + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dependencies": { - "onetime": "5.1.2", - "signal-exit": "3.0.3" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "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==" - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + "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==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/rimraf": { + "node_modules/split-string/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "glob": "7.1.6" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "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==", "dependencies": { - "hash-base": "3.1.0", - "inherits": "2.0.4" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, - "node_modules/run-queue": { + "node_modules/state-toggle": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dependencies": { - "aproba": "1.2.0" + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dependencies": { - "tslib": "1.14.1" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "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==" + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "ret": "0.1.15" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "node_modules/static-extend/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==" }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "extend-shallow": "2.0.1", - "kind-of": "6.0.3" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true + "node_modules/static-extend/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==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "node_modules/std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", "dependencies": { - "node-forge": "0.10.0" + "ci-info": "^3.0.0" } }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "semver": "6.3.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-replace-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", + "integrity": "sha512-MY2VpW7p2V4yLBybj6BcFhmJGU1GjXSDfSz4NrK9BiLK3ttyKXO/WIyOD4UP/b77QUVPG+AKZ7vvpTCNYRAgWg==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "2.3.0", - "range-parser": "1.2.1", - "statuses": "1.5.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "peerDependencies": { + "webpack": "^5" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/string-replace-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dependencies": { - "randombytes": "2.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, "dependencies": { - "mime-db": "1.33.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, "dependencies": { - "accepts": "1.3.7", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.27", - "parseurl": "1.3.3" + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dependencies": { - "ms": "2.0.0" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/serve-index/node_modules/ms": { + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "dependencies": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.3", - "send": "0.17.1" + "inline-style-parser": "0.1.1" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "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==", + "node_modules/stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "dependencies": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dependencies": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "is-buffer": "1.1.6" + "sprintf-js": "~1.0.2" } }, - "node_modules/shallow-clone/node_modules/lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "shebang-regex": "3.0.0" + "color-name": "1.1.3" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dependencies": { - "glob": "7.1.6", - "interpret": "1.4.0", - "rechoir": "0.6.2" + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/side-channel/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { - "is-arrayish": "0.3.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "node_modules/svgo/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } }, - "node_modules/sitemap": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", - "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "lodash.chunk": "^4.2.0", - "lodash.padstart": "^4.6.1", - "whatwg-url": "^7.0.0", - "xmlbuilder": "^13.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=6.0.0", - "npm": ">=4.0.0" + "node": ">=4" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/synckit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", + "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "tslib": "^2.2.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=4.0" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.0.0" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/table/node_modules/ajv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", + "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "engines": { - "node": ">=8" - } - }, - "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==", - "dependencies": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.3", - "use": "3.1.1" + "node": ">=6" } }, - "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==", + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dependencies": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/terser-webpack-plugin": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "dependencies": { - "is-descriptor": "1.0.2" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "6.0.3" - } + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dependencies": { - "kind-of": "6.0.3" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "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==", - "dependencies": { - "kind-of": "3.2.2" + "node_modules/terser-webpack-plugin/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==", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "is-buffer": "1.1.6" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "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==", + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dependencies": { - "ms": "2.0.0" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "0.1.6" + "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "dependencies": { - "faye-websocket": "0.10.0", - "uuid": "3.4.0", - "websocket-driver": "0.6.5" + "node_modules/terser/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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dependencies": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.3", - "inherits": "2.0.4", - "json3": "3.3.3", - "url-parse": "1.4.7" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dependencies": { - "ms": "2.1.2" - } + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dependencies": { - "websocket-driver": "0.6.5" - } + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dependencies": { - "is-plain-obj": "1.1.0" - } + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "node_modules/tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "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==", - "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/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dependencies": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/source-map-support/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==" - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "node_modules/to-object-path/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==" }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "4.2.0", - "handle-thing": "2.0.1", - "http-deceiver": "1.2.7", - "select-hose": "2.0.0", - "spdy-transport": "3.0.0" + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "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==", "dependencies": { - "debug": "4.2.0", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "3.6.0", - "wbuf": "1.7.3" + "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/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==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "extend-shallow": "3.0.2" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/split-string/node_modules/extend-shallow": { + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/split-string/node_modules/is-extendable": { + "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==", "dependencies": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, - "node_modules/ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "dependencies": { - "minipass": "3.1.3" + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "0.1.6" - } + "node_modules/ts-essentials": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", + "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" }, - "node_modules/std-env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", - "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { - "ci-info": "1.6.0" + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/stream-browserify/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==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { - "safe-buffer": "5.1.2" + "is-typedarray": "^1.0.0" } }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dependencies": { - "end-of-stream": "1.4.4", - "stream-shift": "1.0.1" + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" } }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dependencies": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.2" + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "node_modules/stream-http/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==", + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dependencies": { - "safe-buffer": "5.1.2" + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dependencies": { - "safe-buffer": "5.2.1" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } }, - "node_modules/string-replace-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-2.3.0.tgz", - "integrity": "sha512-HYBIHStViMKLZC/Lehxy42OuwsBaPzX/LjcF5mkJlE2SnHXmW6SW6eiHABTXnY8ZCm/REbdJ8qnA0ptmIzN0Ng==", - "dev": true, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.6.5" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, - "peerDependencies": { - "webpack": "1 || 2 || 3 || 4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string-replace-loader/node_modules/json5": { + "node_modules/union-value": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dependencies": { - "minimist": "^1.2.0" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/string-replace-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dependencies": { - "emoji-regex": "8.0.0", - "is-fullwidth-code-point": "3.0.0", - "strip-ansi": "6.0.0" + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "5.0.0" + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", - "dev": true, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" + "unist-util-is": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.matchall/node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "unist-util-visit": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.matchall/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.matchall/node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.matchall/node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.matchall/node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.0.0" } }, - "node_modules/string.prototype.matchall/node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" } }, - "node_modules/string.prototype.matchall/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/string.prototype.matchall/node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, + "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/string.prototype.matchall/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, + "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "isarray": "1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/string.prototype.matchall/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "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==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" + "punycode": "^2.1.0" } }, - "node_modules/string.prototype.trimend/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" - } + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" }, - "node_modules/string.prototype.trimstart/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dependencies": { - "ansi-regex": "4.1.0" + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "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==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "node_modules/use-composed-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", + "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", "dependencies": { - "inline-style-parser": "0.1.1" + "ts-essentials": "^2.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" } }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dependencies": { - "browserslist": "4.14.5", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2" + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", "dependencies": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "use-isomorphic-layout-effect": "^1.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dependencies": { - "has-flag": "3.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dependencies": { - "chalk": "2.4.2", - "coa": "2.0.2", - "css-select": "2.1.0", - "css-select-base-adapter": "0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "4.0.3", - "js-yaml": "3.14.0", - "mkdirp": "0.5.5", - "object.values": "1.1.1", - "sax": "1.2.4", - "stable": "0.1.8", - "unquote": "1.1.1", - "util.promisify": "1.0.1" + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "1.0.0", - "css-what": "3.4.2", - "domutils": "1.7.0", - "nth-check": "1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" - } - }, - "node_modules/synckit": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", - "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", - "dev": true, - "dependencies": { - "tslib": "^2.2.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/synckit/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "node_modules/synckit/node_modules/uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", @@ -14617,7143 +14866,6282 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/table": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", - "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "engines": { - "node": ">=10.0.0" + "node": ">= 0.8" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", - "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dependencies": { - "ansi-regex": "^5.0.0" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "node_modules/tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "node_modules/wait-on": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", + "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", "dependencies": { - "chownr": "2.0.0", - "fs-minipass": "2.1.0", - "minipass": "3.1.3", - "minizlib": "2.1.2", - "mkdirp": "1.0.4", - "yallist": "4.0.0" + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "node_modules/term-size": { + "node_modules/watchpack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dependencies": { - "commander": "2.20.3", - "source-map": "0.6.1", - "source-map-support": "0.5.19" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dependencies": { - "cacache": "15.0.5", - "find-cache-dir": "3.3.1", - "jest-worker": "26.5.0", - "p-limit": "3.0.2", - "schema-utils": "3.0.0", - "serialize-javascript": "5.0.1", - "source-map": "0.6.1", - "terser": "5.3.6", - "webpack-sources": "1.4.3" + "minimalistic-assert": "^1.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/terser-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" - } + "node_modules/web-tree-sitter": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", + "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" }, - "node_modules/terser-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "4.1.0" + "node_modules/webpack": { + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/terser-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "6.3.0" + "node_modules/webpack-bundle-analyzer": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^6.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dependencies": { - "p-try": "2.2.0" + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/terser-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "2.3.0" + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" } }, - "node_modules/terser-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dependencies": { - "p-try": "2.2.0" + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", "dependencies": { - "find-up": "4.1.0" + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/terser-webpack-plugin/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==" - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.6.tgz", - "integrity": "sha512-145ap5v1HYx69HfLuwWaxTIlXyiSr+nSTb7ZWlJCgJn2JptuJRKziNa/zwFx9B1IU99Q055jHni74nLuuEC78w==", + "node_modules/webpack-dev-middleware/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "commander": "2.20.3", - "source-map": "0.7.3", - "source-map-support": "0.5.19" + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser/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==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "dependencies": { - "readable-stream": "2.3.7", - "xtend": "4.0.2" + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/through2/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==", + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dependencies": { - "safe-buffer": "5.1.2" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dependencies": { - "setimmediate": "1.0.5" + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/webpack-dev-server/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dependencies": { - "os-tmpdir": "1.0.2" + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "3.2.2" + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "is-buffer": "1.1.6" + "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/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "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/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/webpack-dev-server/node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dependencies": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "is-number": "7.0.0" + "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/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/webpack-dev-server/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": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.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==", + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dependencies": { - "is-plain-object": "2.0.4" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dependencies": { - "punycode": "^2.1.0" + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tr46/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/webpack-dev-server/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/webpack-dev-server/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" } }, - "node_modules/tryer": { + "node_modules/webpack-dev-server/node_modules/is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dependencies": { - "prelude-ls": "^1.2.1" + "binary-extensions": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "2.1.27" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "node_modules/webpack-dev-server/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==" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/webpack-dev-server/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==", "dependencies": { - "is-typedarray": "1.0.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", + "is-plain-object": "^2.0.4" + }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "kind-of": "^3.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" + "is-buffer": "^1.1.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.1.0" + "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/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "node_modules/webpack-dev-server/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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/unified/node_modules/is-plain-obj": { + "node_modules/webpack-dev-server/node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "2.0.1" + "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/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "node_modules/webpack-dev-server/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==", "dependencies": { - "unique-slug": "2.0.2" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { - "imurmurhash": "0.1.4" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dependencies": { - "crypto-random-string": "2.0.0" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" } }, - "node_modules/unist-util-generated": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", - "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/webpack-dev-server/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==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/unist-util-remove": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", - "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dependencies": { - "unist-util-is": "^4.0.0" + "has-flag": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "unist-util-visit": "^2.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "async-limiter": "~1.0.0" } }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/webpack-log/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "engines": { + "node": ">=6" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dependencies": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "node_modules/webpack-log/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" } }, - "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dependencies": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dependencies": { - "isarray": "1.0.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "node_modules/webpack-sources/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==", + "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==" + "node_modules/webpack/node_modules/acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dependencies": { - "boxen": "4.2.0", - "chalk": "3.0.0", - "configstore": "5.0.1", - "has-yarn": "2.1.0", - "import-lazy": "2.1.0", - "is-ci": "2.0.0", - "is-installed-globally": "0.3.2", - "is-npm": "4.0.0", - "is-yarn-global": "0.3.0", - "latest-version": "5.1.0", - "pupa": "2.0.1", - "semver-diff": "3.1.1", - "xdg-basedir": "4.0.0" + "node_modules/webpack/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" } }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "punycode": "2.1.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "node_modules/webpack/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==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "node_modules/webpack/node_modules/webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "2.0.0", - "mime-types": "2.1.27", - "schema-utils": "3.0.0" + "node_modules/webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" } }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dependencies": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "querystringify": "2.2.0", - "requires-port": "1.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dependencies": { - "prepend-http": "2.0.0" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/url-parse-lax/node_modules/prepend-http": { + "node_modules/which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "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==" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { - "inherits": "2.0.3" + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", "dependencies": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7", - "has-symbols": "1.0.1", - "object.getownpropertydescriptors": "2.1.0" + "microevent.ts": "~0.1.1" } }, - "node_modules/util.promisify/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "engines": { - "node": ">= 4" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" } }, - "node_modules/vfile-location": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", - "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "node_modules/vfile/node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "node_modules/wait-file": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", - "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", - "dependencies": { - "@hapi/joi": "15.1.1", - "fs-extra": "8.1.0", - "rx": "4.1.0" + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" } }, - "node_modules/wait-file/node_modules/@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "node_modules/wait-file/node_modules/@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "node_modules/wait-file/node_modules/@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "@hapi/address": "2.1.4", - "@hapi/bourne": "1.3.2", - "@hapi/hoek": "8.5.1", - "@hapi/topo": "3.1.6" + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/wait-file/node_modules/@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "dependencies": { - "@hapi/hoek": "8.5.1" + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" } }, - "node_modules/watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "chokidar": "3.4.3", - "graceful-fs": "4.2.4", - "neo-async": "2.6.2" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, - "optionalDependencies": { - "watchpack-chokidar2": "2.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "chokidar": "2.1.8" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, - "dependencies": { - "remove-trailing-separator": "1.1.0" + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" } }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "is-extendable": "0.1.1" + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "dependencies": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "fsevents": "1.2.13", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/watchpack-chokidar2/node_modules/extend-shallow/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==", - "optional": true, - "dependencies": { - "is-plain-object": "2.0.4" + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.0.0-alpha.44", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz", + "integrity": "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==", + "requires": { + "@algolia/autocomplete-shared": "1.0.0-alpha.44" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "@algolia/autocomplete-preset-algolia": { + "version": "1.0.0-alpha.44", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz", + "integrity": "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==", + "requires": { + "@algolia/autocomplete-shared": "1.0.0-alpha.44" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "dependencies": { - "is-extendable": "0.1.1" + "@algolia/autocomplete-shared": { + "version": "1.0.0-alpha.44", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz", + "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" + }, + "@algolia/cache-browser-local-storage": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz", + "integrity": "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==", + "requires": { + "@algolia/cache-common": "4.9.1" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "1.5.0", - "nan": "2.14.2" + "@algolia/cache-common": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz", + "integrity": "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" + }, + "@algolia/cache-in-memory": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz", + "integrity": "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==", + "requires": { + "@algolia/cache-common": "4.9.1" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "dependencies": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "@algolia/client-account": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz", + "integrity": "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==", + "requires": { + "@algolia/client-common": "4.9.1", + "@algolia/client-search": "4.9.1", + "@algolia/transporter": "4.9.1" } }, - "node_modules/watchpack-chokidar2/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "dependencies": { - "is-extglob": "2.1.1" + "@algolia/client-analytics": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz", + "integrity": "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==", + "requires": { + "@algolia/client-common": "4.9.1", + "@algolia/client-search": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, - "node_modules/watchpack-chokidar2/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, - "dependencies": { - "binary-extensions": "1.13.1" + "@algolia/client-common": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz", + "integrity": "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==", + "requires": { + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, - "dependencies": { - "kind-of": "3.2.2" + "@algolia/client-recommendation": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz", + "integrity": "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==", + "requires": { + "@algolia/client-common": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, - "node_modules/watchpack-chokidar2/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "1.1.6" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, - "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "@algolia/client-search": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz", + "integrity": "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==", + "requires": { + "@algolia/client-common": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/transporter": "4.9.1" } }, - "node_modules/watchpack-chokidar2/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==", - "optional": true, - "dependencies": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" - } + "@algolia/logger-common": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz", + "integrity": "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" }, - "node_modules/watchpack-chokidar2/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==", - "optional": true, - "dependencies": { - "safe-buffer": "5.1.2" + "@algolia/logger-console": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz", + "integrity": "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==", + "requires": { + "@algolia/logger-common": "4.9.1" } }, - "node_modules/watchpack-chokidar2/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, - "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "@algolia/requester-browser-xhr": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz", + "integrity": "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==", + "requires": { + "@algolia/requester-common": "4.9.1" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "1.0.1" - } + "@algolia/requester-common": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz", + "integrity": "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "@algolia/requester-node-http": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz", + "integrity": "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==", + "requires": { + "@algolia/requester-common": "4.9.1" } }, - "node_modules/web-tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", - "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "6.4.2", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2", - "chrome-trace-event": "1.0.2", - "enhanced-resolve": "4.3.0", - "eslint-scope": "4.0.3", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.4.0", - "loader-utils": "1.4.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.5", - "neo-async": "2.6.2", - "node-libs-browser": "2.2.1", - "schema-utils": "1.0.0", - "tapable": "1.1.3", - "terser-webpack-plugin": "1.4.5", - "watchpack": "1.7.4", - "webpack-sources": "1.4.3" + "@algolia/transporter": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz", + "integrity": "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==", + "requires": { + "@algolia/cache-common": "4.9.1", + "@algolia/logger-common": "4.9.1", + "@algolia/requester-common": "4.9.1" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", - "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", - "dependencies": { - "acorn": "7.4.0", - "acorn-walk": "7.2.0", - "bfj": "6.1.2", - "chalk": "2.4.2", - "commander": "2.20.3", - "ejs": "2.7.4", - "express": "4.17.1", - "filesize": "3.6.1", - "gzip-size": "5.1.1", - "lodash": "4.17.20", - "mkdirp": "0.5.5", - "opener": "1.5.1", - "ws": "6.2.1" + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" + "@babel/compat-data": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==" }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/core": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/webpack-bundle-analyzer/node_modules/filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "requires": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dependencies": { - "memory-fs": "0.4.1", - "mime": "2.4.6", - "mkdirp": "0.5.5", - "range-parser": "1.2.1", - "webpack-log": "2.0.0" + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" } }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } }, - "node_modules/webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "@babel/helper-compilation-targets": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", + "requires": { + "@babel/compat-data": "^7.14.4", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.1.8", - "compression": "1.7.4", - "connect-history-api-fallback": "1.6.0", - "debug": "4.2.0", - "del": "4.1.1", - "express": "4.17.1", - "html-entities": "1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "2.0.0", - "internal-ip": "4.3.0", - "ip": "1.1.5", - "is-absolute-url": "3.0.3", - "killable": "1.0.1", - "loglevel": "1.7.0", - "opn": "5.5.0", - "p-retry": "3.0.1", - "portfinder": "1.0.28", - "schema-utils": "1.0.0", - "selfsigned": "1.10.8", - "semver": "6.3.0", - "serve-index": "1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "4.0.2", - "strip-ansi": "3.0.1", - "supports-color": "6.1.0", - "url": "0.11.0", - "webpack-dev-middleware": "3.7.2", - "webpack-log": "2.0.0", - "ws": "6.2.1", - "yargs": "13.3.2" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "@babel/helper-create-class-features-plugin": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", + "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.14.4", + "@babel/helper-split-export-declaration": "^7.12.13" } }, - "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "1.1.0" + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" } }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, "dependencies": { - "array-uniq": "1.0.3" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "requires": { + "@babel/types": "^7.13.0" } }, - "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dependencies": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" - }, - "optionalDependencies": { - "fsevents": "1.2.13" + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" } }, - "node_modules/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "7.1.3", - "globby": "6.1.0", - "is-path-cwd": "2.2.0", - "is-path-in-cwd": "2.1.0", - "p-map": "2.1.0", - "pify": "4.0.1", - "rimraf": "2.7.1" + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, - "node_modules/webpack-dev-server/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" } }, - "node_modules/webpack-dev-server/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "2.0.4" + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" } }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "@babel/helper-module-transforms": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, - "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" } }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "1.5.0", - "nan": "2.14.2" + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "@babel/helper-replace-supers": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" } }, - "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "2.1.1" + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "requires": { + "@babel/types": "^7.13.12" } }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "1.0.2", - "glob": "7.1.6", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "^7.12.1" } }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" }, - "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "1.13.1" - } + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "3.2.2" + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "1.1.6" + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "@babel/parser": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==" }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" } }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "7.1.6" + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" } }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "safe-buffer": "5.1.2" + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "2.1.1" + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "3.0.0" + "@babel/plugin-proposal-json-strings": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "3.2.4", - "uuid": "3.4.0" + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "node_modules/webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dependencies": { - "lodash": "4.17.20" + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz", + "integrity": "sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA==", + "requires": { + "@babel/compat-data": "^7.14.4", + "@babel/helper-compilation-targets": "^7.14.4", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.2" } }, - "node_modules/webpack-sources/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==" - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "node_modules/webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dependencies": { - "bluebird": "3.7.2", - "chownr": "1.1.4", - "figgy-pudding": "3.5.2", - "glob": "7.1.6", - "graceful-fs": "4.2.4", - "infer-owner": "1.0.4", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.5", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.7.1", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, - "node_modules/webpack/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } }, - "node_modules/webpack/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpack/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "2.0.4" + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "0.1.1" + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "3.2.2" + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "1.1.6" + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, - "node_modules/webpack/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "1.2.5" + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "@babel/plugin-syntax-jsx": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpack/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "3.1.1" + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "node_modules/webpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "7.1.6" + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/webpack/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "2.1.0" + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/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==" - }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dependencies": { - "figgy-pudding": "3.5.2" + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dependencies": { - "cacache": "12.0.4", - "find-cache-dir": "2.1.0", - "is-wsl": "1.1.0", - "schema-utils": "1.0.0", - "serialize-javascript": "4.0.0", - "source-map": "0.6.1", - "terser": "4.8.0", - "webpack-sources": "1.4.3", - "worker-farm": "1.7.0" + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" } }, - "node_modules/webpack/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/webpackbar": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", - "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", - "dependencies": { - "ansi-escapes": "4.3.1", - "chalk": "2.4.2", - "consola": "2.15.0", - "figures": "3.2.0", - "pretty-time": "1.1.0", - "std-env": "2.2.1", - "text-table": "0.2.0", - "wrap-ansi": "6.2.0" + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpackbar/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "node_modules/webpackbar/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpackbar/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "1.1.4" + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" } }, - "node_modules/webpackbar/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/webpackbar/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "5.0.0" + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" } }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "4.3.0", - "string-width": "4.2.0", - "strip-ansi": "6.0.0" + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpackbar/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "2.0.1" + "@babel/plugin-transform-block-scoping": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", + "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" } }, - "node_modules/websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dependencies": { - "websocket-extensions": "0.1.4" + "@babel/plugin-transform-classes": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", + "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.14.4", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } }, - "node_modules/whatwg-fetch": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", - "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" + "@babel/plugin-transform-destructuring": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", + "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "2.0.0" + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "4.2.0" + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dependencies": { - "errno": "0.1.7" + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "@babel/plugin-transform-modules-amd": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "requires": { + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, "dependencies": { - "microevent.ts": "0.1.1" + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } } }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, "dependencies": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, "dependencies": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + } }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "0.1.4", - "is-typedarray": "1.0.0", - "signal-exit": "3.0.3", - "typedarray-to-buffer": "3.1.5" + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" } }, - "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dependencies": { - "async-limiter": "1.0.1" + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xmlbuilder": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", - "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "node_modules/y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" } }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/cache-browser-local-storage": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.5.1.tgz", - "integrity": "sha512-TAQHRHaCUAR0bNhUHG0CnO6FTx3EMPwZQrjPuNS6kHvCQ/H8dVD0sLsHyM8C7U4j33xPQCWi9TBnSx8cYXNmNw==", + "@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "requires": { - "@algolia/cache-common": "4.5.1" + "@babel/helper-plugin-utils": "^7.13.0" } }, - "@algolia/cache-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.5.1.tgz", - "integrity": "sha512-Sux+pcedQi9sfScIiQdl6pEaTVl712qM9OblvDhnaeF1v6lf4jyTlRTiBLP7YBLuvO1Yo54W3maf03kmz9PVhA==" - }, - "@algolia/cache-in-memory": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.5.1.tgz", - "integrity": "sha512-fzwAtBFwveuG+E5T/namChEIvdVl0DoV3djV1C078b/JpO5+DeAwuXIJGYbyl950u170n5NEYuIwYG+R6h4lJQ==", + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "requires": { - "@algolia/cache-common": "4.5.1" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@algolia/client-account": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.5.1.tgz", - "integrity": "sha512-2WFEaI7Zf4ljnBsSAS4e+YylZ5glovm78xFg4E1JKA8PE6M+TeIgUY6HO2ouLh2dqQKxc9UfdAT1Loo/dha2iQ==", + "@babel/plugin-transform-react-constant-elements": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", + "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/transporter": "4.5.1" + "@babel/helper-plugin-utils": "^7.13.0" } }, - "@algolia/client-analytics": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.5.1.tgz", - "integrity": "sha512-bTmZUU8zhZMWBeGEQ/TVqLoL3OOT0benU0HtS3iOnQURwb+AOCv3RsgZvkj2djp+M24Q6P8/L34uBJMmCurbLg==", + "@babel/plugin-transform-react-display-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz", + "integrity": "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==", "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@babel/helper-plugin-utils": "^7.13.0" } }, - "@algolia/client-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.5.1.tgz", - "integrity": "sha512-5CpIf8IK1hke7q+N4e+A4TWdFXVJ5Qwyaa0xS84DrDO8HQ7vfYbDvG1oYa9hVEtGn6c3WVKPAvuWynK+fXQQCA==", - "requires": { - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@babel/plugin-transform-react-jsx": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz", + "integrity": "sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "@algolia/client-recommendation": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.5.1.tgz", - "integrity": "sha512-GiFrNSImoEBUQICjFBEoxPGzrjWji8PY9GeMg2CNvOYcRQ0Xt0Y36v9GN53NLjvB7QdQ2FlE1Cuv/PLUfS/aQQ==", + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", + "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@babel/plugin-transform-react-jsx": "^7.12.17" } }, - "@algolia/client-search": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.5.1.tgz", - "integrity": "sha512-wjuOTte9Auo9Cg4fL0709PjeJ9rXFh4okYUrOt/2SWqQid6DSdZOp+BtyaHKV3E94sj+SlmMxkMUacYluYg5zA==", + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", "requires": { - "@algolia/client-common": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/transporter": "4.5.1" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@algolia/logger-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.5.1.tgz", - "integrity": "sha512-ZoVnGriinlLHlkvn5K7djOUn1/1IeTjU8rDzOJ3t06T+2hQytgJghaX7rSwKIeH4CjWMy61w8jLisuGJRBOEeg==" - }, - "@algolia/logger-console": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.5.1.tgz", - "integrity": "sha512-1qa7K18+uAgxyWuguayaDS5ViiZFcOjI3J5ACBb0i/n7RsXUo149lP6mwmx6TIU7s135hT0f0TCqnvfMvN1ilA==", + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "requires": { - "@algolia/logger-common": "4.5.1" + "regenerator-transform": "^0.14.2" } }, - "@algolia/requester-browser-xhr": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.5.1.tgz", - "integrity": "sha512-tsQz+9pZw9dwPm/wMvZDpsWFZgmghLjXi4c3O4rfwoP/Ikum5fhle5fiR14yb4Lw4WlOQ1AJIHJvrg1qLIG8hQ==", + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "requires": { - "@algolia/requester-common": "4.5.1" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@algolia/requester-common": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.5.1.tgz", - "integrity": "sha512-bPCiLvhHKXaka7f5FLtheChToz0yHVhvza64naFJRRh/3kC0nvyrvQ0ogjiydiSrGIfdNDyyTVfKGdk4gS5gyA==" - }, - "@algolia/requester-node-http": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.5.1.tgz", - "integrity": "sha512-BfFc2h9eQOKu1gGs3DtQO7GrVZW/rxUgpJVLja4UVQyGplJyTCrFgkTyfl+8rb3MkNgA/S2LNo7cKNSPfpqeAQ==", + "@babel/plugin-transform-runtime": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "requires": { - "@algolia/requester-common": "4.5.1" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "@algolia/transporter": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.5.1.tgz", - "integrity": "sha512-asPDNToDAPhH0tM6qKGTn1l0wTlNUbekpa1ifZ6v+qhSjo3VdqGyp+2VeciJOBW/wVHXh3HUbAcycvLERRlCLg==", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "requires": { - "@algolia/cache-common": "4.5.1", - "@algolia/logger-common": "4.5.1", - "@algolia/requester-common": "4.5.1" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "requires": { - "@babel/highlight": "7.10.4" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, - "@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" - }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "requires": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.12.1", - "@babel/helper-module-transforms": "7.12.1", - "@babel/helpers": "7.12.1", - "@babel/parser": "7.12.3", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1", - "convert-source-map": "1.7.0", - "debug": "4.2.0", - "gensync": "1.0.0-beta.1", - "json5": "2.1.3", - "lodash": "4.17.20", - "resolve": "1.17.0", - "semver": "5.7.1", - "source-map": "0.5.7" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "requires": { - "@babel/types": "7.12.1", - "jsesc": "2.5.2", - "source-map": "0.5.7" + "@babel/helper-plugin-utils": "^7.13.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "requires": { - "@babel/types": "7.12.1" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "@babel/plugin-transform-typescript": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.4.tgz", + "integrity": "sha512-WYdcGNEO7mCCZ2XzRlxwGj3PgeAr50ifkofOUC/+IN/GzKLB+biDPVBUAQN2C/dVZTvEXCp80kfQ1FFZPrwykQ==", "requires": { - "@babel/helper-explode-assignable-expression": "7.12.1", - "@babel/types": "7.12.1" + "@babel/helper-create-class-features-plugin": "^7.14.4", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-typescript": "^7.12.13" } }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/types": "7.12.1" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.1.tgz", - "integrity": "sha512-82to8lR7TofZWbTd3IEZT1xNHfeU/Ef4rDm/GLXddzqDh+yQ19QuGSzqww51aNxVH8rwfRIzL0EUQsvODVhtyw==", + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-module-imports": "7.12.1", - "@babel/types": "7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", - "requires": { - "@babel/compat-data": "7.12.1", - "@babel/helper-validator-option": "7.12.1", - "browserslist": "4.14.5", - "semver": "5.7.1" + "@babel/preset-env": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", + "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", + "requires": { + "@babel/compat-data": "^7.14.4", + "@babel/helper-compilation-targets": "^7.14.4", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.14.3", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.4", + "@babel/plugin-transform-classes": "^7.14.4", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.14.4", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.14.2", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.4", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-member-expression-to-functions": "7.12.1", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "@babel/preset-react": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", + "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-regex": "7.10.5", - "regexpu-core": "4.7.1" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-react-display-name": "^7.12.13", + "@babel/plugin-transform-react-jsx": "^7.13.12", + "@babel/plugin-transform-react-jsx-development": "^7.12.17", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/preset-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", + "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/types": "7.12.1", - "lodash": "4.17.20" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-typescript": "^7.13.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "requires": { - "@babel/types": "7.12.1" + "regenerator-runtime": "^0.13.4" } }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "@babel/runtime-corejs3": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", + "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", "requires": { - "@babel/helper-get-function-arity": "7.10.4", - "@babel/template": "7.10.4", - "@babel/types": "7.12.1" + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" } }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "requires": { - "@babel/types": "7.12.1" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "requires": { - "@babel/types": "7.12.1" + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "@babel/types": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "requires": { - "@babel/types": "7.12.1" + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "requires": { - "@babel/types": "7.12.1" - } + "@docsearch/css": { + "version": "3.0.0-alpha.36", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz", + "integrity": "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "@docsearch/react": { + "version": "3.0.0-alpha.36", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz", + "integrity": "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==", "requires": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-simple-access": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0", - "@babel/helper-validator-identifier": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1", - "lodash": "4.17.20" + "@algolia/autocomplete-core": "1.0.0-alpha.44", + "@algolia/autocomplete-preset-algolia": "1.0.0-alpha.44", + "@docsearch/css": "3.0.0-alpha.36", + "algoliasearch": "^4.0.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", "requires": { - "@babel/types": "7.12.1" + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", "requires": { - "lodash": "4.17.20" + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-wrap-function": "7.12.3", - "@babel/types": "7.12.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "requires": { - "@babel/helper-member-expression-to-functions": "7.12.1", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "7.12.1" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "7.12.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "@docusaurus/mdx-loader": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz", + "integrity": "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==", + "requires": { + "@babel/parser": "^7.12.16", + "@babel/traverse": "^7.12.13", + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "gray-matter": "^4.0.2", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.1", + "webpack": "^5.28.0" } }, - "@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", - "requires": { - "@babel/template": "7.10.4", - "@babel/traverse": "7.12.1", - "@babel/types": "7.12.1" + "@docusaurus/plugin-content-blog": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", + "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", + "requires": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "chalk": "^4.1.0", + "feed": "^4.2.2", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "reading-time": "^1.3.0", + "remark-admonitions": "^1.2.1", + "tslib": "^2.1.0", + "webpack": "^5.28.0" } }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "7.10.4", - "chalk": "2.4.2", - "js-tokens": "4.0.0" + "@docusaurus/plugin-content-docs": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", + "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", + "requires": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "chalk": "^4.1.0", + "combine-promises": "^1.1.0", + "execa": "^5.0.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "import-fresh": "^3.2.2", + "js-yaml": "^4.0.0", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "remark-admonitions": "^1.2.1", + "shelljs": "^0.8.4", + "tslib": "^2.1.0", + "utility-types": "^3.10.0", + "webpack": "^5.28.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } } } }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.12.1", - "@babel/plugin-syntax-async-generators": "7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-dynamic-import": "7.8.3" + "@docusaurus/plugin-content-pages": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", + "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", + "requires": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "globby": "^11.0.2", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", + "tslib": "^2.1.0", + "webpack": "^5.28.0" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "@docusaurus/plugin-debug": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", + "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-export-namespace-from": "7.8.3" + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "react-json-view": "^1.21.1", + "tslib": "^2.1.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", + "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-json-strings": "7.8.3" + "@docusaurus/core": "2.0.0-beta.0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", + "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "7.10.4" + "@docusaurus/core": "2.0.0-beta.0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", + "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "fs-extra": "^9.1.0", + "sitemap": "^6.3.6", + "tslib": "^2.1.0" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "@docusaurus/preset-classic": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", + "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", + "requires": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/plugin-debug": "2.0.0-beta.0", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", + "@docusaurus/plugin-sitemap": "2.0.0-beta.0", + "@docusaurus/theme-classic": "2.0.0-beta.0", + "@docusaurus/theme-search-algolia": "2.0.0-beta.0" + } + }, + "@docusaurus/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-numeric-separator": "7.10.4" + "prop-types": "^15.6.2" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-transform-parameters": "7.12.1" + "@docusaurus/theme-classic": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", + "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", + "requires": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "chalk": "^4.1.0", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "infima": "0.2.0-alpha.23", + "lodash": "^4.17.20", + "parse-numeric-range": "^1.2.0", + "postcss": "^8.2.10", + "prism-react-renderer": "^1.1.1", + "prismjs": "^1.23.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.2.0", + "rtlcss": "^3.1.2" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "@docusaurus/theme-common": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", + "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "7.12.1", - "@babel/plugin-syntax-optional-chaining": "7.8.3" + "@docusaurus/theme-search-algolia": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", + "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", + "requires": { + "@docsearch/react": "^3.0.0-alpha.33", + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "algoliasearch": "^4.8.4", + "algoliasearch-helper": "^3.3.4", + "clsx": "^1.1.1", + "eta": "^1.12.1", + "lodash": "^4.17.20" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "@docusaurus/types": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz", + "integrity": "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==", "requires": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.28.0", + "webpack-merge": "^5.7.3" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@docusaurus/utils": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz", + "integrity": "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==", + "requires": { + "@docusaurus/types": "2.0.0-beta.0", + "@types/github-slugger": "^1.3.0", + "chalk": "^4.1.0", + "escape-string-regexp": "^4.0.0", + "fs-extra": "^9.1.0", + "gray-matter": "^4.0.2", + "lodash": "^4.17.20", + "resolve-pathname": "^3.0.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "@docusaurus/utils-validation": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", + "integrity": "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@docusaurus/utils": "2.0.0-beta.0", + "chalk": "^4.1.0", + "joi": "^17.4.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "@endiliey/static-site-generator-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.4", + "url": "^0.11.0", + "webpack-sources": "^1.4.3" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@fortawesome/fontawesome-common-types": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", + "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@fortawesome/fontawesome-common-types": "^0.2.35" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "@fortawesome/free-solid-svg-icons": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", + "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@fortawesome/fontawesome-common-types": "^0.2.35" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "@fortawesome/react-fontawesome": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", + "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "prop-types": "^15.7.2" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "@hapi/topo": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@hapi/hoek": "^9.0.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "requires": {} }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "requires": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.12.1" - } + "@polka/url": { + "version": "1.0.0-next.15", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", + "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@hapi/hoek": "^9.0.0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-define-map": "7.10.5", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.12.1", - "@babel/helper-split-export-declaration": "7.11.0", - "globals": "11.12.0" - } + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "requires": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "requires": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-simple-access": "7.12.1", - "babel-plugin-dynamic-import-node": "2.3.3" + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", "requires": { - "@babel/helper-hoist-variables": "7.10.4", - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-validator-identifier": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@babel/types": "^7.12.6" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", "requires": { - "@babel/helper-module-transforms": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1" + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.12.1" + "defer-to-connect": "^1.0.1" } }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "@types/eslint": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", - "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@types/eslint": "*", + "@types/estree": "*" } }, - "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" }, - "@babel/plugin-transform-react-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz", - "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==", + "@types/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "requires": { - "@babel/helper-builder-react-jsx": "7.10.4", - "@babel/helper-builder-react-jsx-experimental": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-jsx": "7.12.1" + "@types/minimatch": "*", + "@types/node": "*" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz", - "integrity": "sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==", + "@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", + "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", "requires": { - "@babel/helper-builder-react-jsx-experimental": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-jsx": "7.12.1" + "@types/unist": "*" } }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", - "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", - "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@types/unist": "*" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", - "requires": { - "regenerator-transform": "0.14.5" - } + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@types/node": { + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" }, - "@babel/plugin-transform-runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", - "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", - "requires": { - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "resolve": "1.17.0", - "semver": "5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - } + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "7.12.1" - } + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "peer": true }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "@types/react": { + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.9.tgz", + "integrity": "sha512-2Cw7FvevpJxQrCb+k5t6GH1KIvmadj5uBbjPaLlJB/nZWUj56e1ZqcD6zsoMFB47MsJUTFl9RJ132A7hb3QFJA==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-regex": "7.10.5" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "@types/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@types/node": "*" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", + "peer": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, - "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "requires": { - "@babel/helper-create-class-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-typescript": "7.12.1" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4" + "@xtuc/ieee754": "^1.2.0" } }, - "@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "requires": { - "@babel/compat-data": "7.12.1", - "@babel/helper-compilation-targets": "7.12.1", - "@babel/helper-module-imports": "7.12.1", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-validator-option": "7.12.1", - "@babel/plugin-proposal-async-generator-functions": "7.12.1", - "@babel/plugin-proposal-class-properties": "7.12.1", - "@babel/plugin-proposal-dynamic-import": "7.12.1", - "@babel/plugin-proposal-export-namespace-from": "7.12.1", - "@babel/plugin-proposal-json-strings": "7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", - "@babel/plugin-proposal-numeric-separator": "7.12.1", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "7.12.1", - "@babel/plugin-proposal-optional-chaining": "7.12.1", - "@babel/plugin-proposal-private-methods": "7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "7.12.1", - "@babel/plugin-syntax-async-generators": "7.8.4", - "@babel/plugin-syntax-class-properties": "7.12.1", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-syntax-export-namespace-from": "7.8.3", - "@babel/plugin-syntax-json-strings": "7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-syntax-numeric-separator": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3", - "@babel/plugin-syntax-optional-chaining": "7.8.3", - "@babel/plugin-syntax-top-level-await": "7.12.1", - "@babel/plugin-transform-arrow-functions": "7.12.1", - "@babel/plugin-transform-async-to-generator": "7.12.1", - "@babel/plugin-transform-block-scoped-functions": "7.12.1", - "@babel/plugin-transform-block-scoping": "7.12.1", - "@babel/plugin-transform-classes": "7.12.1", - "@babel/plugin-transform-computed-properties": "7.12.1", - "@babel/plugin-transform-destructuring": "7.12.1", - "@babel/plugin-transform-dotall-regex": "7.12.1", - "@babel/plugin-transform-duplicate-keys": "7.12.1", - "@babel/plugin-transform-exponentiation-operator": "7.12.1", - "@babel/plugin-transform-for-of": "7.12.1", - "@babel/plugin-transform-function-name": "7.12.1", - "@babel/plugin-transform-literals": "7.12.1", - "@babel/plugin-transform-member-expression-literals": "7.12.1", - "@babel/plugin-transform-modules-amd": "7.12.1", - "@babel/plugin-transform-modules-commonjs": "7.12.1", - "@babel/plugin-transform-modules-systemjs": "7.12.1", - "@babel/plugin-transform-modules-umd": "7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "7.12.1", - "@babel/plugin-transform-new-target": "7.12.1", - "@babel/plugin-transform-object-super": "7.12.1", - "@babel/plugin-transform-parameters": "7.12.1", - "@babel/plugin-transform-property-literals": "7.12.1", - "@babel/plugin-transform-regenerator": "7.12.1", - "@babel/plugin-transform-reserved-words": "7.12.1", - "@babel/plugin-transform-shorthand-properties": "7.12.1", - "@babel/plugin-transform-spread": "7.12.1", - "@babel/plugin-transform-sticky-regex": "7.12.1", - "@babel/plugin-transform-template-literals": "7.12.1", - "@babel/plugin-transform-typeof-symbol": "7.12.1", - "@babel/plugin-transform-unicode-escapes": "7.12.1", - "@babel/plugin-transform-unicode-regex": "7.12.1", - "@babel/preset-modules": "0.1.4", - "@babel/types": "7.12.1", - "core-js-compat": "3.6.5", - "semver": "5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "@xtuc/long": "4.2.2" } }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "7.12.1", - "@babel/plugin-transform-dotall-regex": "7.12.1", - "@babel/types": "7.12.1", - "esutils": "2.0.3" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, - "@babel/preset-react": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", - "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-transform-react-display-name": "7.12.1", - "@babel/plugin-transform-react-jsx": "7.12.1", - "@babel/plugin-transform-react-jsx-development": "7.12.1", - "@babel/plugin-transform-react-jsx-self": "7.12.1", - "@babel/plugin-transform-react-jsx-source": "7.12.1", - "@babel/plugin-transform-react-pure-annotations": "7.12.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "@babel/preset-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", - "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-transform-typescript": "7.12.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, - "@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "requires": { - "regenerator-runtime": "0.13.7" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "@babel/runtime-corejs3": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", - "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "requires": { - "core-js-pure": "3.6.5", - "regenerator-runtime": "0.13.7" + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "requires": { - "@babel/code-frame": "7.10.4", - "@babel/parser": "7.12.3", - "@babel/types": "7.12.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz", + "integrity": "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==" + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.12.1", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-split-export-declaration": "7.11.0", - "@babel/parser": "7.12.3", - "@babel/types": "7.12.1", - "debug": "4.2.0", - "globals": "11.12.0", - "lodash": "4.17.20" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { - "@babel/helper-validator-identifier": "7.10.4", - "lodash": "4.17.20", - "to-fast-properties": "2.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "requires": {} }, - "@docsearch/css": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", - "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, - "@docsearch/react": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", - "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", - "requires": { - "@docsearch/css": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", - "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", - "algoliasearch": "^4.0.0" + "algoliasearch": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz", + "integrity": "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==", + "requires": { + "@algolia/cache-browser-local-storage": "4.9.1", + "@algolia/cache-common": "4.9.1", + "@algolia/cache-in-memory": "4.9.1", + "@algolia/client-account": "4.9.1", + "@algolia/client-analytics": "4.9.1", + "@algolia/client-common": "4.9.1", + "@algolia/client-recommendation": "4.9.1", + "@algolia/client-search": "4.9.1", + "@algolia/logger-common": "4.9.1", + "@algolia/logger-console": "4.9.1", + "@algolia/requester-browser-xhr": "4.9.1", + "@algolia/requester-common": "4.9.1", + "@algolia/requester-node-http": "4.9.1", + "@algolia/transporter": "4.9.1" } }, - "@docusaurus/core": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", - "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "algoliasearch-helper": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz", + "integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==", "requires": { - "@babel/core": "^7.9.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", - "@babel/plugin-proposal-optional-chaining": "^7.10.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.9.0", - "@babel/preset-env": "^7.9.0", - "@babel/preset-react": "^7.9.4", - "@babel/preset-typescript": "^7.9.0", - "@babel/runtime": "^7.9.2", - "@babel/runtime-corejs3": "^7.10.4", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@hapi/joi": "^17.1.1", - "@svgr/webpack": "^5.4.0", - "babel-loader": "^8.1.0", - "babel-plugin-dynamic-import-node": "^2.3.0", - "boxen": "^4.2.0", - "cache-loader": "^4.1.0", - "chalk": "^3.0.0", - "chokidar": "^3.3.0", - "commander": "^4.0.1", - "copy-webpack-plugin": "^6.0.3", - "core-js": "^2.6.5", - "css-loader": "^3.4.2", - "del": "^5.1.0", - "detect-port": "^1.3.0", - "eta": "^1.1.1", - "express": "^4.17.1", - "file-loader": "^6.0.0", - "fs-extra": "^8.1.0", - "globby": "^10.0.1", - "html-minifier-terser": "^5.0.5", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^4.0.4", - "import-fresh": "^3.2.1", - "inquirer": "^7.2.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.5.2", - "lodash.flatmap": "^4.5.0", - "lodash.has": "^4.5.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "mini-css-extract-plugin": "^0.8.0", - "nprogress": "^0.2.0", - "null-loader": "^3.0.0", - "optimize-css-assets-webpack-plugin": "^5.0.3", - "pnp-webpack-plugin": "^1.6.4", - "postcss-loader": "^3.0.0", - "postcss-preset-env": "^6.7.0", - "react-dev-utils": "^10.2.1", - "react-helmet": "^6.0.0-beta", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon": "^0.3.0", - "react-router": "^5.1.2", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.1.2", - "resolve-pathname": "^3.0.0", - "semver": "^6.3.0", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "terser-webpack-plugin": "^4.1.0", - "update-notifier": "^4.1.0", - "url-loader": "^4.1.0", - "wait-file": "^1.0.5", - "webpack": "^4.44.1", - "webpack-bundle-analyzer": "^3.6.1", - "webpack-dev-server": "^3.11.0", - "webpack-merge": "^4.2.2", - "webpackbar": "^4.0.0" + "events": "^1.1.1" } }, - "@docusaurus/mdx-loader": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.66.tgz", - "integrity": "sha512-IvtrTNeAaynEGgfCbC4CeBgO76Mu76cGogBGv8a84bYeyCOtlxOJoH6JHkJ7T/v5D6lM16qzwx5oqesZ0kZuzA==", - "requires": { - "@babel/parser": "^7.9.4", - "@babel/traverse": "^7.9.0", - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@mdx-js/mdx": "^1.5.8", - "@mdx-js/react": "^1.5.8", - "escape-html": "^1.0.3", - "file-loader": "^6.0.0", - "fs-extra": "^8.1.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.2", - "loader-utils": "^1.2.3", - "mdast-util-to-string": "^1.1.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.66.tgz", - "integrity": "sha512-voK5ZUZcUn5blIDakYNKQ42wPMZLfrZnvEJuwh/8S/W1oNbPN935NBu9vL23fHEmp9L2MGykAdaCmev0Su04yQ==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "chalk": "^3.0.0", - "feed": "^4.1.0", - "fs-extra": "^8.1.0", - "globby": "^10.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.5.2", - "reading-time": "^1.2.0", - "remark-admonitions": "^1.2.1", - "webpack": "^4.44.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "@docusaurus/plugin-content-docs": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.66.tgz", - "integrity": "sha512-jvFKJR7BgjIq6xdmPg+7d2DS1fBeuIfmRTtB/apgfIW8NWO5N0DRYXOj0lgpw/ICwW//o8cLbrN+jkLlzTV/eg==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "chalk": "^3.0.0", - "execa": "^3.4.0", - "fs-extra": "^8.1.0", - "globby": "^10.0.1", - "import-fresh": "^3.2.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.19", - "lodash.flatmap": "^4.5.0", - "lodash.groupby": "^4.6.0", - "lodash.pick": "^4.4.0", - "lodash.pickby": "^4.6.0", - "lodash.sortby": "^4.6.0", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "utility-types": "^3.10.0", - "webpack": "^4.44.1" + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" }, "dependencies": { - "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "is-stream": { + "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "path-key": "^3.0.0" + "ansi-regex": "^4.1.0" } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" } } }, - "@docusaurus/plugin-content-pages": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.66.tgz", - "integrity": "sha512-mY26Aeb/Wf+NFLy70YvXgdLTB+2iPN0SKOVKYwgg6ZN7Nm2kPwEpSVRq2iwiqlWk2G/vOM+ADm99Gxvm3kS61A==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/mdx-loader": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "globby": "^10.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "webpack": "^4.44.1" + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, - "@docusaurus/plugin-debug": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.66.tgz", - "integrity": "sha512-9AZaEUxaY0CDOCWXQMfY3TzG79HkquZlVeJOZaA6IvCoK/Oq3B58TMNLiQyA6TA2DYf5ZYQorLJaMd02x5qBQw==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "react-json-view": "^1.19.1" - } + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, - "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.66.tgz", - "integrity": "sha512-HVWRLHtlQYpVqH3MHloUmktJMXt7oMDQzBlKzrwAMiWUK1oXFX35DrKjTt2SE2SADpObnwWFjo0E71YT0ApQLw==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66" - } + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, - "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.66.tgz", - "integrity": "sha512-MVnzApLSQaC38nVS+A/WkXEV4kHeX6Q/KM2DqkLeovNWLBtkQ0aHL3bvn1clAEmB33Pia0v93mzG+I1+9mrquA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66" + "color-convert": "^2.0.1" } }, - "@docusaurus/plugin-sitemap": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.66.tgz", - "integrity": "sha512-ztDevVIREyq8g+QhSGpDqscVqtubcPnEE3a4JwWSALQ2D6JscIxg897axwZSZNUMxrHBuXRjOEYOtVb/O/stVg==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "fs-extra": "^8.1.0", - "sitemap": "^3.2.2" - } - }, - "@docusaurus/preset-classic": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.66.tgz", - "integrity": "sha512-FjxjchzUS6vOUSr9Pc5kqOSQAnc+cAYsR4pTlqwD2uOJcZMr2vQ6jeKbJnhEmUYwAvzdKOVnCndnxbA+Ii8L3w==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", - "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", - "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", - "@docusaurus/plugin-debug": "2.0.0-alpha.66", - "@docusaurus/plugin-google-analytics": "2.0.0-alpha.66", - "@docusaurus/plugin-google-gtag": "2.0.0-alpha.66", - "@docusaurus/plugin-sitemap": "2.0.0-alpha.66", - "@docusaurus/theme-classic": "2.0.0-alpha.66", - "@docusaurus/theme-search-algolia": "2.0.0-alpha.66" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "@docusaurus/theme-classic": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.66.tgz", - "integrity": "sha512-WsWqzfzA2gIF5TUMGSbiAeDeNZtKvsgymTQzalcwyhyT/QI0ywcag+03Bmjeq4H3PTC3qU+tkhddO2Rh5w/YCw==", - "requires": { - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", - "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", - "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", - "@docusaurus/types": "2.0.0-alpha.66", - "@docusaurus/utils-validation": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "@mdx-js/mdx": "^1.5.8", - "@mdx-js/react": "^1.5.8", - "@types/react-toggle": "^4.0.2", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^2.2.0", - "infima": "0.2.0-alpha.13", - "lodash": "^4.17.19", - "parse-numeric-range": "^0.0.2", - "prism-react-renderer": "^1.1.0", - "prismjs": "^1.20.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.1.2", - "react-toggle": "^4.1.1" - } + "arg": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", + "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" }, - "@docusaurus/theme-search-algolia": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.66.tgz", - "integrity": "sha512-5k/Fwt81Gyjv9vPE+gO8mraEHx5IqEmHLwqld5yXj7yix5XrxywkaanHqC0cFJG4MFUBgF6vNjJC8CtfLnT4Tw==", - "requires": { - "@docsearch/react": "^1.0.0-alpha.27", - "@docusaurus/core": "2.0.0-alpha.66", - "@docusaurus/utils": "2.0.0-alpha.66", - "@hapi/joi": "^17.1.1", - "algoliasearch": "^4.0.0", - "algoliasearch-helper": "^3.1.1", - "clsx": "^1.1.1", - "eta": "^1.1.1", - "lodash": "^4.17.19" - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "@docusaurus/types": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.66.tgz", - "integrity": "sha512-Zd2Kguw0+3faifr83ruIV4i/+KqfqM+zK3DpqCBxdtkP+ORLKbgsIQ48fJ40OOhQrvl38Ay4E+1w7USrrkj4Qg==", - "requires": { - "@types/webpack": "^4.41.0", - "commander": "^4.0.1", - "querystring": "0.2.0", - "webpack-merge": "^4.2.2" - } + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "@docusaurus/utils": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.66.tgz", - "integrity": "sha512-47jGB+Z3YVM6Xf1hxyNbJLMmc1qoTLmfwSf7NseKSkpjucbc5Ueivr+oVYp5yWoZw5sT5bObmdJYfJoD/RrbOg==", - "requires": { - "escape-string-regexp": "^2.0.0", - "fs-extra": "^8.1.0", - "gray-matter": "^4.0.2", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "resolve-pathname": "^3.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } + "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==" }, - "@docusaurus/utils-validation": { - "version": "2.0.0-alpha.66", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.66.tgz", - "integrity": "sha512-vlenwY3THondey21x1qAUZyDz9qiG7ec2CBM9HgY1Ns8XhrKah9zz7TEGXjqM9lhqMQQRkvcCcveti9EXR0fcA==", - "requires": { - "@docusaurus/utils": "2.0.0-alpha.66", - "@hapi/joi": "17.1.1", - "chalk": "^3.0.0" - } + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "@endiliey/static-site-generator-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", - "requires": { - "bluebird": "3.7.2", - "cheerio": "0.22.0", - "eval": "0.1.4", - "url": "0.11.0", - "webpack-sources": "1.4.3" - } + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" } }, - "@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "@fortawesome/fontawesome-svg-core": { - "version": "1.2.32", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz", - "integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.32" - } + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, - "@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - } + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, - "@fortawesome/react-fontawesome": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", - "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, "requires": { - "prop-types": "^15.7.2" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" } }, - "@francoischalifour/autocomplete-core": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz", - "integrity": "sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg==" + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "@francoischalifour/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz", - "integrity": "sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==" + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true }, - "@hapi/address": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", - "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { - "@hapi/hoek": "9.1.0" + "lodash": "^4.17.14" } }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, - "@hapi/formula": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", - "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "@hapi/hoek": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", - "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, - "@hapi/joi": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", - "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", + "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", "requires": { - "@hapi/address": "4.1.0", - "@hapi/formula": "2.0.0", - "@hapi/hoek": "9.1.0", - "@hapi/pinpoint": "2.0.0", - "@hapi/topo": "5.0.0" + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001230", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" } }, - "@hapi/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" - }, - "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "requires": { - "@hapi/hoek": "9.1.0" + "follow-redirects": "^1.10.0" } }, - "@mdx-js/mdx": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.19.tgz", - "integrity": "sha512-L3eLhEFnV/2bcb9XwOegsRmLHd1oEDQPtTBVezhptQ5U1YM+/WQNzx1apjzVTAyukwOanUXnTUMjRUtqJNgFCg==", + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "requires": { - "@babel/core": "7.11.6", - "@babel/plugin-syntax-jsx": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.19", - "babel-plugin-apply-mdx-type-prop": "1.6.19", - "babel-plugin-extract-import-names": "1.6.19", - "camelcase-css": "2.0.1", - "detab": "2.0.3", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "9.1.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.19", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "dependencies": { - "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "minimist": "^1.2.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, - "@mdx-js/react": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.19.tgz", - "integrity": "sha512-RS37Tagqyp2R0XFPoUZeSbZC5uJQRPhqOHWeT1LEwxESjMWb3VORHz7E827ldeQr3UW6VEQEyq/THegu+bLj6A==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.19.tgz", - "integrity": "sha512-bkkQNSHz3xSr3KRHUQ2Qk2XhewvvXAOUqjIUKwcQuL4ijOA4tUHZfUgXExi5CpMysrX7izcsyICtXjZHlfJUjg==" - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } } }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "1.1.9" + "object.assign": "^4.1.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "1.8.0" + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } } }, - "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "requires": { - "mkdirp": "1.0.4" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" }, "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.4.0.tgz", - "integrity": "sha512-zLl4Fl3NvKxxjWNkqEcpdSOpQ3LGVH2BNFQ6vjaK6sFo2IrSznrhURIPI0HAphKiiIwNYjAfE0TNoQDSZv0U9A==" - }, - "@svgr/babel-preset": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.4.0.tgz", - "integrity": "sha512-Gyx7cCxua04DBtyILTYdQxeO/pwfTBev6+eXTbVbxe4HTGhOUW6yo7PSbG2p6eJMl44j6XSequ0ZDP7bl0nu9A==", + "babel-plugin-polyfill-corejs3": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", + "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "5.4.0", - "@svgr/babel-plugin-transform-svg-component": "5.4.0" + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.9.1" } }, - "@svgr/core": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.4.0.tgz", - "integrity": "sha512-hWGm1DCCvd4IEn7VgDUHYiC597lUYhFau2lwJBYpQWDirYLkX4OsXu9IslPgJ9UpP7wsw3n2Ffv9sW7SXJVfqQ==", + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", "requires": { - "@svgr/plugin-jsx": "5.4.0", - "camelcase": "6.1.0", - "cosmiconfig": "6.0.0" + "@babel/helper-define-polyfill-provider": "^0.2.2" } }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.4.0.tgz", - "integrity": "sha512-+U0TZZpPsP2V1WvVhqAOSTk+N+CjYHdZx+x9UBa1eeeZDXwH8pt0CrQf2+SvRl/h2CAPRFkm+Ey96+jKP8Bsgg==", - "requires": { - "@babel/types": "7.12.1" - } + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" }, - "@svgr/plugin-jsx": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.4.0.tgz", - "integrity": "sha512-SGzO4JZQ2HvGRKDzRga9YFSqOqaNrgLlQVaGvpZ2Iht2gwRp/tq+18Pvv9kS9ZqOMYgyix2LLxZMY1LOe9NPqw==", - "requires": { - "@babel/core": "7.12.3", - "@svgr/babel-preset": "5.4.0", - "@svgr/hast-util-to-babel-ast": "5.4.0", - "svg-parser": "2.0.4" - } + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "@svgr/plugin-svgo": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.4.0.tgz", - "integrity": "sha512-3Cgv3aYi1l6SHyzArV9C36yo4kgwVdF3zPQUC6/aCDUeXAofDYwE5kk3e3oT5ZO2a0N3lB+lLGvipBG6lnG8EA==", + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cosmiconfig": "6.0.0", - "merge-deep": "3.0.2", - "svgo": "1.3.2" + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + } } }, - "@svgr/webpack": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.4.0.tgz", - "integrity": "sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg==", - "requires": { - "@babel/core": "7.12.3", - "@babel/plugin-transform-react-constant-elements": "7.12.1", - "@babel/preset-env": "7.12.1", - "@babel/preset-react": "7.12.1", - "@svgr/core": "5.4.0", - "@svgr/plugin-jsx": "5.4.0", - "@svgr/plugin-svgo": "5.4.0", - "loader-utils": "2.0.0" - } + "base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "1.1.3" - } + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "requires": { - "@types/minimatch": "3.0.3", - "@types/node": "14.11.10" - } + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, "requires": { - "@types/unist": "*" + "file-uri-to-path": "1.0.0" } }, - "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, - "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "@types/unist": "*" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "@types/node": { - "version": "14.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", - "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + } + } }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "@types/react": { - "version": "16.9.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz", - "integrity": "sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==", + "boxen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" } }, - "@types/react-toggle": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/react-toggle/-/react-toggle-4.0.2.tgz", - "integrity": "sha512-sHqfoKFnL0YU2+OC4meNEC8Ptx9FE8/+nFeFvNcdBa6ANA8KpAzj3R9JN8GtrvlLgjKDoYgI7iILgXYcTPo2IA==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "@types/react": "*" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" - }, - "@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==" + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } }, - "@types/uglify-js": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.0.tgz", - "integrity": "sha512-I0Yd8TUELTbgRHq2K65j8rnDPAzAP+DiaF/syLem7yXwYLsHZhPd+AM2iXsWmf9P2F2NlFCgl5erZPQx9IbM9Q==", + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "@types/webpack": { - "version": "4.41.22", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", - "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "@types/anymatch": "1.3.1", - "@types/node": "14.11.10", - "@types/tapable": "1.0.6", - "@types/uglify-js": "3.11.0", - "@types/webpack-sources": "2.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "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" } }, - "@types/webpack-sources": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz", - "integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==", + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "requires": { - "@types/node": "14.11.10", - "@types/source-list-map": "0.1.2", - "source-map": "0.7.3" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" } } }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "requires": { - "@webassemblyjs/wast-printer": "1.9.0" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "requires": { - "@webassemblyjs/ast": "1.9.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "caniuse-lite": { + "version": "1.0.30001235", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", + "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==" }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "requires": { - "@xtuc/ieee754": "1.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "requires": { - "@xtuc/long": "4.2.2" - } + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "2.1.27", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "2.2.0", - "indent-string": "4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "3.1.3", - "fast-json-stable-stringify": "2.1.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.4.0" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "algoliasearch": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.5.1.tgz", - "integrity": "sha512-b6yT1vWMlBdVObQipKxvt0M6SEvGetVj+FFFlo0Fy06gkdj6WCJaS4t10Q/hC3I2VG9QmpCqlK3Esgg1y1E+uw==", - "requires": { - "@algolia/cache-browser-local-storage": "4.5.1", - "@algolia/cache-common": "4.5.1", - "@algolia/cache-in-memory": "4.5.1", - "@algolia/client-account": "4.5.1", - "@algolia/client-analytics": "4.5.1", - "@algolia/client-common": "4.5.1", - "@algolia/client-recommendation": "4.5.1", - "@algolia/client-search": "4.5.1", - "@algolia/logger-common": "4.5.1", - "@algolia/logger-console": "4.5.1", - "@algolia/requester-browser-xhr": "4.5.1", - "@algolia/requester-common": "4.5.1", - "@algolia/requester-node-http": "4.5.1", - "@algolia/transporter": "4.5.1" - } - }, - "algoliasearch-helper": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", - "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", - "requires": { - "events": "^1.1.1" - }, - "dependencies": { - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - } - } + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + "ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "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==", "requires": { - "string-width": "3.1.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } + }, + "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==" } } }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "clean-css": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", "requires": { - "type-fest": "0.11.0" + "source-map": "~0.6.0" }, "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.3" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "3.0.0", - "picomatch": "2.2.2" - } + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "optional": true, "requires": { - "sprintf-js": "1.0.3" + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "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==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "color-convert": "^1.9.0" } }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "color-name": "1.1.3" } }, - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "ansi-regex": "^4.1.0" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } } } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "requires": { - "bn.js": "4.11.9", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "safer-buffer": "2.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } + "mimic-response": "^1.0.0" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "requires": { - "object-assign": "4.1.1", - "util": "0.10.3" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "inherits": "2.0.1" + "has-flag": "^3.0.0" } } } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "lodash": "4.17.20" + "color-name": "~1.1.4" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "async-limiter": { + "colord": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", + "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==" + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "requires": { - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "colorette": "1.2.1", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "7.0.35", - "postcss-value-parser": "4.1.0" + "mime-db": ">= 1.43.0 < 2" } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { - "chalk": "1.1.3", - "esutils": "2.0.3", - "js-tokens": "3.0.2" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ansi-regex": "2.1.1" + "ms": "2.0.0" } }, - "supports-color": { + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "requires": { - "find-cache-dir": "2.1.0", - "loader-utils": "1.4.0", - "mkdirp": "0.5.5", - "pify": "4.0.1", - "schema-utils": "2.7.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } - } - } + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.19.tgz", - "integrity": "sha512-zAuL11EaBbeNpfTqsa9xP7mkvX3V4LaEV6M9UUaI4zQtTqN5JwvDyhNsALQs5Ud7WFQSXtoqU74saTgE+rgZOw==", + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.19" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { - "object.assign": "4.1.1" + "safe-buffer": "5.1.2" } }, - "babel-plugin-extract-import-names": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.19.tgz", - "integrity": "sha512-5kbSEhQdg1ybR9OnxybbyR1PXw51z6T6ZCtX3vYSU6t1pC/+eBlSzWXyU2guStbwQgJyxS+mHWSNnL7PUdzAlw==", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "safe-buffer": "~5.1.1" } }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.3.0", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.2", - "pascalcase": "0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" - } - } - } - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", - "requires": { - "bluebird": "3.7.2", - "check-types": "8.0.3", - "hoopy": "0.1.4", - "tryer": "1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "copy-text-to-clipboard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", + "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", "requires": { - "file-uri-to-path": "1.0.0" + "toggle-selection": "^1.0.6" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "copy-webpack-plugin": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", + "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", "requires": { - "bytes": "3.1.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "1.6.18" + "fast-glob": "^3.2.5", + "glob-parent": "^5.1.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "requires": { - "ms": "2.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "core-js": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz", + "integrity": "sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA==" + }, + "core-js-compat": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz", + "integrity": "sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==", "requires": { - "array-flatten": "2.1.2", - "deep-equal": "1.1.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "browserslist": "^4.16.6", + "semver": "7.0.0" }, "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" } } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "core-js-pure": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.14.0.tgz", + "integrity": "sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g==" }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "requires": { - "ansi-align": "3.0.0", - "camelcase": "5.3.1", - "chalk": "3.0.0", - "cli-boxes": "2.2.1", - "string-width": "4.2.0", - "term-size": "2.2.0", - "type-fest": "0.8.1", - "widest-line": "3.1.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" + "node-fetch": "2.6.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { - "fill-range": "7.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" - } + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "browserify-cipher": { + "css-color-names": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" - } + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.1", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "timsort": "^0.3.0" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "4.11.9", - "randombytes": "2.1.0" + "css-loader": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "css-minimizer-webpack-plugin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz", + "integrity": "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==", "requires": { - "bn.js": "5.1.3", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.5.3", - "inherits": "2.0.4", - "parse-asn1": "5.1.6", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "cssnano": "^5.0.0", + "jest-worker": "^26.3.0", + "p-limit": "^3.0.2", + "postcss": "^8.2.9", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1" }, "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { - "pako": "1.0.11" + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" } }, - "browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", - "requires": { - "caniuse-lite": "1.0.30001148", - "electron-to-chromium": "1.3.582", - "escalade": "3.1.1", - "node-releases": "1.1.63" - } + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "requires": { - "base64-js": "1.3.1", - "ieee754": "1.1.13", - "isarray": "1.0.0" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==" + "cssnano": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.5.tgz", + "integrity": "sha512-L2VtPXnq6rmcMC9vkBOP131sZu3ccRQI27ejKZdmQiPDpUlFkUbpXHgKN+cibeO1U4PItxVZp1zTIn5dHsXoyg==", + "requires": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.2", + "is-resolvable": "^1.1.0" + } }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "cssnano-preset-advanced": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.2.tgz", + "integrity": "sha512-Joym8pdrIKqzASYvyTwJ9FpkmEcrYToWKWMGVFSggindrEDOpe+FgNpWhWcv6Z7GDZ4kCC3p7PE/oPSGTc8/kw==", + "requires": { + "autoprefixer": "^10.2.0", + "cssnano-preset-default": "^5.1.2", + "postcss-discard-unused": "^5.0.1", + "postcss-merge-idents": "^5.0.1", + "postcss-reduce-idents": "^5.0.1", + "postcss-zindex": "^5.0.1" + } }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "cssnano-preset-default": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.2.tgz", + "integrity": "sha512-spilp8LRw0sacuxiN9A/dyyPr6G/WISKMBKcBD4NMoPV0ENx4DeuWvIIrSx9PII2nJIDCO3kywkqTPreECBVOg==", + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.1", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.1", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + } + }, + "cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "requires": {} }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "requires": { - "@npmcli/move-file": "1.0.1", - "chownr": "2.0.0", - "fs-minipass": "2.1.0", - "glob": "7.1.6", - "infer-owner": "1.0.4", - "lru-cache": "6.0.0", - "minipass": "3.1.3", - "minipass-collect": "1.0.2", - "minipass-flush": "1.0.5", - "minipass-pipeline": "1.2.4", - "mkdirp": "1.0.4", - "p-map": "4.0.0", - "promise-inflight": "1.0.1", - "rimraf": "3.0.2", - "ssri": "8.0.0", - "tar": "6.0.5", - "unique-filename": "1.1.1" + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" }, "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.3.0", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.1", - "to-object-path": "0.3.0", - "union-value": "1.0.1", - "unset-value": "1.0.0" + "ms": "2.1.2" } }, - "cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "requires": { - "buffer-json": "2.0.0", - "find-cache-dir": "3.3.1", - "loader-utils": "1.4.0", - "mkdirp": "0.5.5", - "neo-async": "2.6.2", - "schema-utils": "2.7.1" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" }, "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { - "minimist": "1.2.5" + "pump": "^3.0.0" } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "p-locate": "4.1.0" + "path-key": "^2.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "6.3.0" - } + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "p-limit": "2.3.0" + "shebang-regex": "^1.0.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "find-up": "4.1.0" + "isexe": "^2.0.0" } } } }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "1.0.2", - "get-stream": "5.2.0", - "http-cache-semantics": "4.1.0", - "keyv": "3.1.0", - "lowercase-keys": "2.0.0", - "normalize-url": "4.5.0", - "responselike": "1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" - } - } + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "object-keys": "^1.0.12" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "callsites": "2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - } + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "requires": { - "caller-callsite": "2.0.0" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "requires": { - "pascal-case": "3.1.1", - "tslib": "1.14.1" - } + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true }, - "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "requires": { - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "repeat-string": "^1.5.4" } }, - "caniuse-lite": { - "version": "1.0.30001148", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", - "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==" - }, - "ccount": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", - "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==" + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", "requires": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" + "address": "^1.0.1", + "debug": "^2.6.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "color-name": "1.1.4" + "ms": "2.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "4.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" - }, - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.1", - "entities": "1.1.2", - "htmlparser2": "3.10.1", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.2", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { - "anymatch": "3.1.1", - "braces": "3.0.2", - "fsevents": "2.1.3", - "glob-parent": "5.1.1", - "is-binary-path": "2.1.0", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "readdirp": "3.5.0" + "path-type": "^4.0.0" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "requires": { - "tslib": "1.14.1" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "requires": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "buffer-indexof": "^1.0.0" } }, - "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==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - } + "esutils": "^2.0.2" } }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { - "restore-cursor": "3.1.0" + "domelementtype": "1" } }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", - "optional": true, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" + "dom-serializer": "0", + "domelementtype": "1" } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "requires": { - "string-width": "3.1.0", - "strip-ansi": "5.2.0", - "wrap-ansi": "5.1.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" - } - } + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { - "for-own": "0.1.5", - "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "lazy-cache": "1.0.4", - "shallow-clone": "0.1.2" + "is-obj": "^2.0.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" } } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "1.0.1" - } + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "clsx": { + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "1.5.4", - "chalk": "2.4.2", - "q": "1.5.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - } - } + "electron-to-chromium": { + "version": "1.3.750", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz", + "integrity": "sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A==" }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "once": "^1.4.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "requires": { - "color-convert": "1.9.3", - "color-string": "1.5.4" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { - "color-name": "1.1.3" + "ansi-colors": "^4.1.1" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "prr": "~1.0.1" } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "mime-db": "1.44.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", + "dev": true, "requires": { - "accepts": "1.3.7", - "bytes": "3.0.0", - "compressible": "2.0.18", - "debug": "2.6.9", - "on-headers": "1.0.2", - "safe-buffer": "5.1.2", - "vary": "1.1.2" + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { - "ms": "2.0.0" + "sprintf-js": "~1.0.2" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "type-fest": "^0.20.2" } }, - "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==", + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } } } }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", + "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", + "dev": true, "requires": { - "dot-prop": "5.3.0", - "graceful-fs": "4.2.4", - "make-dir": "3.1.0", - "unique-string": "2.0.0", - "write-file-atomic": "3.0.3", - "xdg-basedir": "4.0.0" + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "tslib": "^2.2.0", + "unified": "^9.2.1" }, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, "requires": { - "semver": "6.3.0" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" } } } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "consola": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz", - "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "eslint-plugin-markdown": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", + "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "mdast-util-from-markdown": "^0.8.5" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "eslint-plugin-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", + "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", + "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.13.0", + "eslint-plugin-markdown": "^2.1.0", + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "synckit": "^0.1.5", + "tslib": "^2.2.0", + "unified": "^9.2.1", + "vfile": "^4.2.1" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, "requires": { - "glob": "7.1.6" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" } } } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "copy-text-to-clipboard": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz", - "integrity": "sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==" - }, - "copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "copy-webpack-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", - "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", + "eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "dev": true, "requires": { - "cacache": "15.0.5", - "fast-glob": "3.2.4", - "find-cache-dir": "3.3.1", - "glob-parent": "5.1.1", - "globby": "11.0.1", - "loader-utils": "2.0.0", - "normalize-path": "3.0.0", - "p-limit": "3.0.2", - "schema-utils": "3.0.0", - "serialize-javascript": "5.0.1", - "webpack-sources": "1.4.3" + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" }, "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "requires": { - "array-union": "2.1.0", - "dir-glob": "3.0.1", - "fast-glob": "3.2.4", - "ignore": "5.1.8", - "merge2": "1.4.1", - "slash": "3.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "6.3.0" - } - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "requires": { - "p-try": "2.2.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "2.3.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "2.2.0" - } - } - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "requires": { - "find-up": "4.1.0" + "esutils": "^2.0.2" } }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, "requires": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } } } }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "requires": { - "browserslist": "4.14.5", - "semver": "7.0.0" + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true } } }, - "core-js-pure": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", - "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, "requires": { - "@types/parse-json": "4.0.0", - "import-fresh": "3.2.1", - "parse-json": "5.1.0", - "path-type": "4.0.0", - "yaml": "1.10.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "requires": { - "bn.js": "4.11.9", - "elliptic": "6.5.3" + "estraverse": "^5.1.0" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.4", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.4", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "requires": { - "path-key": "3.1.1", - "shebang-command": "2.0.0", - "which": "2.0.2" - } + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "eta": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz", + "integrity": "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "eval": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", + "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.2.1", - "create-ecdh": "4.0.4", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.4", - "pbkdf2": "3.1.1", - "public-encrypt": "4.0.3", - "randombytes": "2.1.0", - "randomfill": "1.0.4" + "require-like": ">= 0.1.1" } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "requires": { - "postcss": "7.0.35" + "original": "^1.0.0" } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { - "postcss": "7.0.35", - "timsort": "0.3.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "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" }, "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "is-descriptor": "^0.1.0" } - } - } - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "requires": { - "camelcase": "5.3.1", - "cssesc": "3.0.0", - "icss-utils": "4.1.1", - "loader-utils": "1.4.0", - "normalize-path": "3.0.0", - "postcss": "7.0.35", - "postcss-modules-extract-imports": "2.0.0", - "postcss-modules-local-by-default": "3.0.3", - "postcss-modules-scope": "2.2.0", - "postcss-modules-values": "3.0.0", - "postcss-value-parser": "4.1.0", - "schema-utils": "2.7.1", - "semver": "6.3.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "minimist": "1.2.5" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "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==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "requires": { - "postcss": "7.0.35" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.3", - "domutils": "1.5.1", - "nth-check": "1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "cosmiconfig": "5.2.1", - "cssnano-preset-default": "4.0.7", - "is-resolvable": "1.1.0", - "postcss": "7.0.35" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.14.0", - "parse-json": "4.0.0" + "ms": "2.0.0" } }, - "import-fresh": { + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "requires": { - "css-declaration-sorter": "4.0.1", - "cssnano-util-raw-cache": "4.0.1", - "postcss": "7.0.35", - "postcss-calc": "7.0.5", - "postcss-colormin": "4.0.3", - "postcss-convert-values": "4.0.1", - "postcss-discard-comments": "4.0.2", - "postcss-discard-duplicates": "4.0.2", - "postcss-discard-empty": "4.0.1", - "postcss-discard-overridden": "4.0.1", - "postcss-merge-longhand": "4.0.11", - "postcss-merge-rules": "4.0.3", - "postcss-minify-font-values": "4.0.2", - "postcss-minify-gradients": "4.0.2", - "postcss-minify-params": "4.0.2", - "postcss-minify-selectors": "4.0.2", - "postcss-normalize-charset": "4.0.1", - "postcss-normalize-display-values": "4.0.2", - "postcss-normalize-positions": "4.0.2", - "postcss-normalize-repeat-style": "4.0.2", - "postcss-normalize-string": "4.0.2", - "postcss-normalize-timing-functions": "4.0.2", - "postcss-normalize-unicode": "4.0.1", - "postcss-normalize-url": "4.0.1", - "postcss-normalize-whitespace": "4.0.2", - "postcss-ordered-values": "4.1.2", - "postcss-reduce-initial": "4.0.3", - "postcss-reduce-transforms": "4.0.2", - "postcss-svgo": "4.0.2", - "postcss-unique-selectors": "4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "postcss": "7.0.35" + "is-extendable": "^0.1.0" } }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "css-tree": "1.0.0-alpha.39" + "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" }, "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "mdn-data": "2.0.6", - "source-map": "0.6.1" + "is-descriptor": "^1.0.0" } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "requires": { - "ms": "2.1.2" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", "requires": { - "mimic-response": "1.0.1" + "punycode": "^1.3.2" } }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "requires": { - "is-arguments": "1.0.4", - "is-date-object": "1.0.2", - "is-regex": "1.1.1", - "object-is": "1.1.3", - "object-keys": "1.1.1", - "regexp.prototype.flags": "1.3.0" + "reusify": "^1.0.4" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "requires": { + "fbjs": "^3.0.0" + } }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", "requires": { - "execa": "1.0.0", - "ip-regex": "2.1.0" + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "requires": { - "object-keys": "1.1.1" + "xml-js": "^1.6.11" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "escape-string-regexp": "^1.0.5" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, - "del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "requires": { - "globby": "10.0.2", - "graceful-fs": "4.2.4", - "is-glob": "4.0.1", - "is-path-cwd": "2.2.0", - "is-path-inside": "3.0.2", - "p-map": "3.0.0", - "rimraf": "3.0.2", - "slash": "3.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "p-map": { + "schema-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "requires": { - "aggregate-error": "3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "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==", "optional": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" }, - "detab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", - "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { - "repeat-string": "^1.5.4" + "to-regex-range": "^5.0.1" } }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" - }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { - "address": "1.1.2", - "debug": "2.6.9" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -21771,2717 +21159,1944 @@ } } }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "4.11.9", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "buffer-indexof": "1.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "0.4.0" - } - }, - "dom-helpers": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", - "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "1.3.1", - "entities": "1.1.2" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1.3.1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "requires": { - "no-case": "3.0.3", - "tslib": "1.14.1" - } + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "flux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", + "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", "requires": { - "is-obj": "2.0.0" + "fbemitter": "^3.0.0", + "fbjs": "^3.0.0" } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", "requires": { - "end-of-stream": "1.4.4", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "stream-shift": "1.0.1" + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "color-convert": "^1.9.0" } }, - "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==", + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "safe-buffer": "5.1.2" + "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" } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" - }, - "electron-to-chromium": { - "version": "1.3.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", - "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "4.11.9", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "requires": { - "graceful-fs": "4.2.4", - "memory-fs": "0.5.0", - "tapable": "1.1.3" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.7" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - } - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-negative-zero": "2.0.0", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "1.2.2", - "is-date-object": "1.0.2", - "is-symbol": "1.0.3" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", - "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "@babel/highlight": "^7.10.4" + "color-name": "1.1.3" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "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==", "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "is-plain-object": "^2.0.4" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", - "dev": true, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "type-fest": "^0.20.2" + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "ansi-regex": "^5.0.0" + "has-flag": "^3.0.0" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "has-flag": "^4.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "eslint-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", - "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", - "dev": true, + "fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "tslib": "^2.2.0", - "unified": "^9.2.1" + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + } + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "@babel/highlight": "^7.12.13" + "isexe": "^2.0.0" } - }, - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + } + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "pump": "^3.0.0" } - }, - "@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", - "dev": true, + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "sprintf-js": "~1.0.2" } }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } + } + } + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "@babel/types": "^7.12.13" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-buffer": "^1.1.5" } } } }, - "eslint-plugin-markdown": { + "has-yarn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.1.0.tgz", - "integrity": "sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "requires": { - "remark-parse": "^7.0.0", - "unified": "^6.1.2" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" }, "dependencies": { - "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark-parse": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", - "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", - "dev": true, - "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" - } - }, - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", - "dev": true, - "requires": { - "unist-util-visit": "^1.1.0" - } - }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true - }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "dev": true, - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dev": true, - "requires": { - "unist-util-is": "^3.0.0" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "dev": true, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" + "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" } }, - "vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", - "dev": true - }, - "vfile-message": { + "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "dev": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "unist-util-stringify-position": "^1.1.1" + "safe-buffer": "~5.1.0" } } } }, - "eslint-plugin-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", - "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", - "dev": true, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "requires": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.13.0", - "eslint-plugin-markdown": "^2.1.0", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "synckit": "^0.1.5", - "tslib": "^2.2.0", - "unified": "^9.2.1", - "vfile": "^4.2.1" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "requires": { - "@babel/highlight": "^7.12.13" + "source-map": "~0.6.0" } }, - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "html-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==", + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "html-minifier-terser": "^5.0.1", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "@babel/types": "^7.12.13" + "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" } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "@babel/types": "^7.12.13" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, + "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==", "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "is-plain-object": "^2.0.4" } }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } - }, - "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "locate-path": "^3.0.0" } }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "p-try": "^2.0.0" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } + "p-limit": "^2.0.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, - "unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "find-up": "^3.0.0" } } } }, - "eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "4.3.0", - "estraverse": "4.3.0" - } + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, + "infima": { + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz", + "integrity": "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "once": "^1.3.0", + "wrappy": "1" } }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "requires": { - "estraverse": "5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "eta": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.11.0.tgz", - "integrity": "sha512-lfqIE6qD55WFYT6E0phTBUe0sapHJhfvRDB7jSpXxFGwzDaP69kQqRyF7krBe8I1QzF5nE1yAByiIOLB630x4Q==" + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "eval": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.4.tgz", - "integrity": "sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw==", + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "require-like": "0.1.2" + "kind-of": "^6.0.0" } }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "requires": { - "original": "1.0.2" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "call-bind": "^1.0.0" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.3", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.1", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "2.0.0" - } - } - } + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "binary-extensions": "^2.0.0" } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "requires": { - "accepts": "1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.6", - "qs": "6.7.0", - "range-parser": "1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "type-is": "1.6.18", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "call-bind": "^1.0.2" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + } } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "requires": { - "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" - } + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" } } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "requires": { + "has": "^1.0.3" + } }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "@nodelib/fs.stat": "2.0.3", - "@nodelib/fs.walk": "1.2.4", - "glob-parent": "5.1.1", - "merge2": "1.4.1", - "micromatch": "4.0.2", - "picomatch": "2.2.2" + "kind-of": "^6.0.0" } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "punycode": "1.3.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", - "requires": { - "reusify": "1.0.4" - } + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": "0.6.5" - } + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, - "fbemitter": { + "is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", - "requires": { - "fbjs": "^0.8.4" - } + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "feed": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", - "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "xml-js": "^1.6.11" + "is-extglob": "^2.1.1" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "requires": { - "escape-string-regexp": "1.0.5" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" }, - "file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "requires": { - "loader-utils": "2.0.0", - "schema-utils": "3.0.0" + "is-path-inside": "^2.1.0" }, "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "requires": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" + "path-is-inside": "^1.0.2" } } } }, - "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==", - "optional": true + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, - "filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "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==", "requires": { - "to-regex-range": "5.0.1" + "isobject": "^3.0.1" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "statuses": "1.5.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, - "find-cache-dir": { + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-root": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "1.0.1", - "make-dir": "2.1.0", - "pkg-dir": "3.0.0" - } + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "requires": { - "locate-path": "3.0.0" + "has-symbols": "^1.0.2" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "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==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "is-docker": "^2.0.0" } }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "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==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" } }, - "flux": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", - "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "joi": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", + "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", "requires": { - "fbemitter": "^2.0.0", - "fbjs": "^0.8.0" + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" } }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "for-in": { + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { - "for-in": "1.0.2" + "minimist": "^1.2.5" } }, - "fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "babel-code-frame": "6.26.0", - "chalk": "2.4.2", - "chokidar": "3.4.3", - "micromatch": "3.1.10", - "minimatch": "3.0.4", - "semver": "5.7.1", - "tapable": "1.1.3", - "worker-rpc": "0.1.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - } - } - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "4.2.4", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, "requires": { - "minipass": "3.1.3" + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "requires": { - "graceful-fs": "4.2.4", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } + "json-buffer": "3.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { + "killable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + "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==" }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "package-json": "^6.3.0" } }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "requires": { - "pump": "3.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, - "github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - } - } + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.4", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "is-glob": "4.0.1" + "p-locate": "^4.1.0" } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", - "requires": { - "ini": "1.3.5" - } + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "3.0.0" - } + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "1.3.5", - "kind-of": "6.0.3", - "which": "1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "2.0.0" - } - } - } + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "requires": { - "@types/glob": "7.1.3", - "array-union": "2.1.0", - "dir-glob": "3.0.1", - "fast-glob": "3.2.4", - "glob": "7.1.6", - "ignore": "5.1.8", - "merge2": "1.4.1", - "slash": "3.0.0" - } + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, - "requires": { - "delegate": "^3.1.2" - } + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "0.14.0", - "@szmarczak/http-timer": "1.1.2", - "cacheable-request": "6.1.0", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "4.1.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.1", - "p-cancelable": "1.1.0", - "to-readable-stream": "1.0.0", - "url-parse-lax": "3.0.0" - } + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, - "gray-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", - "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", - "requires": { - "js-yaml": "3.14.0", - "kind-of": "6.0.3", - "section-matter": "1.0.0", - "strip-bom-string": "1.0.0" - } + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "requires": { - "duplexer": "0.1.2", - "pify": "4.0.1" - } + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "1.1.1" - } + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } - } + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "1.1.6" - } - } + "tslib": "^2.0.3" } }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } }, - "hash-base": { + "make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { - "inherits": "2.0.4", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "semver": "^6.0.0" }, "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "object-visit": "^1.0.0" } }, - "hast-to-hyperscript": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", - "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" + "repeat-string": "^1.0.0" } }, - "hast-util-from-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", - "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "requires": { - "@types/parse5": "^5.0.0", - "ccount": "^1.0.0", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0" + "unist-util-remove": "^2.0.0" } }, - "hast-util-parse-selector": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", - "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "unist-util-visit": "^2.0.0" } }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "unist-util-visit": "^2.0.0" } }, - "hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "requires": { - "@babel/runtime": "7.12.1", - "loose-envify": "1.4.0", - "resolve-pathname": "3.0.0", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3", - "value-equal": "1.0.1" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "16.13.1" - } + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "inherits": "2.0.4", - "obuf": "1.1.2", - "readable-stream": "2.3.7", - "wbuf": "1.7.3" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" }, "dependencies": { "readable-stream": { @@ -24489,13 +23104,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "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" } }, "string_decoder": { @@ -24503,7876 +23118,4372 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, - "html-comment-regex": { + "methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, "requires": { - "camel-case": "4.1.1", - "clean-css": "4.2.3", - "commander": "4.1.1", - "he": "1.2.0", - "param-case": "3.0.3", - "relateurl": "0.2.7", - "terser": "4.8.0" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "html-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { - "@types/html-minifier-terser": "5.1.1", - "@types/tapable": "1.0.6", - "@types/webpack": "4.41.22", - "html-minifier-terser": "5.1.1", - "loader-utils": "1.4.0", - "lodash": "4.17.20", - "pretty-error": "2.1.2", - "tapable": "1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.1.0" - } - } + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "requires": { - "domelementtype": "1.3.1", - "domhandler": "2.4.2", - "domutils": "1.5.1", - "entities": "1.1.2", - "inherits": "2.0.4", - "readable-stream": "3.6.0" + "mime-db": "1.48.0" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "toidentifier": "1.0.0" + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + } + }, + "mini-css-extract-plugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "eventemitter3": "4.0.7", - "follow-redirects": "1.13.0", - "requires-port": "1.0.0" + "brace-expansion": "^1.1.7" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "1.18.1", - "is-glob": "4.0.1", - "lodash": "4.17.20", - "micromatch": "3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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==", "requires": { - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "is-plain-object": "^2.0.4" } - }, + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true + }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "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" + }, + "dependencies": { "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "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==", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-plain-object": "^2.0.4" } } } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "requires": { - "safer-buffer": "2.1.2" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", "requires": { - "postcss": "7.0.35" + "lodash.toarray": "^4.4.0" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" }, - "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "requires": { - "import-from": "2.1.0" + "path-key": "^3.0.0" } }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "requires": { - "parent-module": "1.0.1", - "resolve-from": "4.0.0" + "boolbase": "~1.0.0" } }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "dev": true, "requires": { - "resolve-from": "3.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "resolve-from": { + "schema-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "infima": { - "version": "0.2.0-alpha.13", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", - "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==" + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "4.3.1", - "chalk": "4.1.0", - "cli-cursor": "3.1.0", - "cli-width": "3.0.0", - "external-editor": "3.1.0", - "figures": "3.2.0", - "lodash": "4.17.20", - "mute-stream": "0.0.8", - "run-async": "2.4.1", - "rxjs": "6.6.3", - "string-width": "4.2.0", - "strip-ansi": "6.0.0", - "through": "2.3.8" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "color-convert": "2.0.1" + "is-descriptor": "^0.1.0" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" + "kind-of": "^3.0.2" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "color-name": "1.1.4" + "kind-of": "^3.0.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "ansi-regex": "5.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "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==" + } } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "has-flag": "4.0.0" + "is-buffer": "^1.1.5" } } } }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "4.2.0", - "ipaddr.js": "1.9.1" - } + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" } }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } }, - "is-bigint": { + "on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "binary-extensions": "2.1.0" + "wrappy": "1" } }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { - "call-bind": "^1.0.0" + "mimic-fn": "^2.1.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "requires": { - "ci-info": "2.0.0" + "is-wsl": "^1.1.0" }, "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" } } }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "requires": { - "css-color-names": "0.0.4", - "hex-color-regex": "1.1.0", - "hsl-regex": "1.0.0", - "hsla-regex": "1.0.0", - "rgb-regex": "1.0.1", - "rgba-regex": "1.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "dev": true, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "requires": { - "has": "^1.0.3" + "url-parse": "^1.4.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "p-limit": "^2.2.0" }, "dependencies": { - "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==" + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "requires": { - "is-extglob": "2.1.1" + "aggregate-error": "^3.0.0" } }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "requires": { - "global-dirs": "2.0.1", - "is-path-inside": "3.0.2" + "retry": "^0.12.0" } }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-cwd": { + "p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "requires": { - "is-path-inside": "2.1.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "dependencies": { - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "1.0.2" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "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==", + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "requires": { - "isobject": "3.0.1" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { - "has-symbols": "1.0.1" + "callsites": "^3.0.0" } }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "requires": { - "html-comment-regex": "1.1.2" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { - "has-symbols": "1.0.1" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + "parse-numeric-range": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", + "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" }, - "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==" + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "requires": { - "is-docker": "2.1.1" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, - "jest-worker": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", - "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", - "requires": { - "@types/node": "14.11.10", - "merge-stream": "2.0.0", - "supports-color": "7.2.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "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==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "has-flag": "4.0.0" + "p-try": "^2.0.0" } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" } } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + } + } }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "requires": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "requires": { + "postcss-value-parser": "^4.1.0" + } }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "requires": {} }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "requires": {} }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "requires": {} }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + "postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "requires": {} }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "postcss-discard-unused": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", + "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", "requires": { - "minimist": "1.2.5" + "postcss-selector-parser": "^6.0.5" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "postcss-loader": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", "requires": { - "graceful-fs": "4.2.4" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" } }, - "jsx-ast-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", - "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", - "dev": true, + "postcss-merge-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", + "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.1" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "requires": { - "json-buffer": "3.0.0" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + } }, - "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==" + "postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "requires": { + "postcss-value-parser": "^4.1.0" + } }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "requires": { - "lodash": "4.17.20", - "webpack-sources": "1.4.3" + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" } }, - "latest-version": { + "postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "requires": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "requires": { - "package-json": "6.5.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "postcss-selector-parser": "^6.0.4" } }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "requires": { + "icss-utils": "^5.0.0" + } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + "postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "requires": {} }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "2.1.3" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "postcss-value-parser": "^4.1.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + "postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "requires": { + "postcss-value-parser": "^4.1.0" + } }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" - }, - "lodash.has": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.2.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "3.0.0" - } - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" - }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "4.0.0" - } - }, - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", + "postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "requires": { - "tslib": "1.14.1" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "requires": { - "yallist": "4.0.0" + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" } }, - "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==", + "postcss-normalize-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.1.tgz", + "integrity": "sha512-hkbG0j58Z1M830/CJ73VsP7gvlG1yF+4y7Fd1w4tD2c7CaA2Psll+pQ6eQhth9y9EaqZSLzamff/D0MZBMbYSg==", "requires": { - "pify": "4.0.1", - "semver": "5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "is-absolute-url": "^3.0.3", + "normalize-url": "^4.5.0", + "postcss-value-parser": "^4.1.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "requires": { - "object-visit": "1.0.1" + "postcss-value-parser": "^4.1.0" } }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, + "postcss-ordered-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.1.tgz", + "integrity": "sha512-6mkCF5BQ25HvEcDfrMHCLLFHlraBSlOXFnQMHYhSpDO/5jSR1k8LdEXOkv+7+uzW6o6tBYea1Km0wQSRkPJkwA==", "requires": { - "repeat-string": "^1.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "postcss-reduce-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", + "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", "requires": { - "hash-base": "3.1.0", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "postcss-value-parser": "^4.1.0" } }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "requires": { - "unist-util-remove": "^2.0.0" + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" } }, - "mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "dev": true, + "postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "requires": { - "unist-util-visit": "^2.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, - "mdast-util-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", - "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "requires": { - "unist-util-visit": "^2.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } }, - "mdast-util-to-hast": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz", - "integrity": "sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ==", + "postcss-sort-media-queries": { + "version": "3.10.11", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.10.11.tgz", + "integrity": "sha512-78Ak5YSnalr+UTdZa2OCSNAxvEnHg3GRqWccStljJW7MqeU0cJtMA5OzaMmn+upM+iI5vykWzibVEAYaaAlSzw==", "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.3", - "mdast-util-definitions": "^3.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "sort-css-media-queries": "1.5.4" } }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==" - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.7" + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "css-select": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" } }, - "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==", + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "requires": { - "safe-buffer": "5.1.2" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" } - } - } - }, - "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", - "requires": { - "arr-union": "3.1.0", - "clone-deep": "0.2.4", - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + }, + "css-what": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "svgo": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", "requires": { - "is-buffer": "1.1.6" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" } } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "postcss-unique-selectors": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", + "uniqs": "^2.0.0" + } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "postcss-zindex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", + "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", + "requires": {} }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "3.0.2", - "picomatch": "2.2.2" - } + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", "requires": { - "bn.js": "4.11.9", - "brorand": "1.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } + "lodash": "^4.17.20", + "renderkid": "^2.0.4" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "prism-react-renderer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", + "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", + "requires": {} }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "prismjs": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", "requires": { - "mime-db": "1.44.0" + "clipboard": "^2.0.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "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==" }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, - "mini-create-react-context": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", - "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "@babel/runtime": "7.12.1", - "tiny-warning": "1.0.3" + "asap": "~2.0.3" } }, - "mini-css-extract-plugin": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", - "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", + "prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "requires": { - "loader-utils": "1.4.0", - "normalize-url": "1.9.1", - "schema-utils": "1.0.0", - "webpack-sources": "1.4.3" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" - } - } + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "brace-expansion": "1.1.11" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "requires": { - "yallist": "4.0.0" + "xtend": "^4.0.0" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "minipass": "3.1.3" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { - "minipass": "3.1.3" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "requires": { - "minipass": "3.1.3" + "escape-goat": "^2.0.0" } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { - "minipass": "3.1.3", - "yallist": "4.0.0" + "safe-buffer": "^5.1.0" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.4", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.2.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { - "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==", - "requires": { - "is-plain-object": "2.0.4" - } + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "1.2.5" - } + "react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "requires": {} }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "7.1.6" - } - } + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "react-copy-to-clipboard": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", + "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", "requires": { - "dns-packet": "1.3.1", - "thunky": "1.1.0" + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", "requires": { - "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.3", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" }, "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "@babel/highlight": "^7.10.4" } }, - "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==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "requires": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "is-plain-object": "2.0.4" + "has-flag": "^3.0.0" } } } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", + "react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", "requires": { - "lower-case": "2.0.1", - "tslib": "1.14.1" + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" } }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", "requires": { - "lodash.toarray": "^4.4.0" + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "prop-types": "^15.5.0" } }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "requires": { + "@babel/runtime": "^7.10.3" + } }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "1.5.0", - "browserify-zlib": "0.2.0", - "buffer": "4.9.2", - "console-browserify": "1.2.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "3.2.0", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.1", - "process": "0.11.10", - "punycode": "1.3.2", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.7", - "stream-browserify": "2.0.2", - "stream-http": "2.8.3", - "string_decoder": "1.3.0", - "timers-browserify": "2.0.11", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.11.1", - "vm-browserify": "1.1.2" + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" } } } }, - "node-releases": { - "version": "1.1.63", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", - "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "@babel/runtime": "^7.1.2" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", "requires": { - "path-key": "2.0.1" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - } + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" } }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + "react-side-effect": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", + "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", + "requires": {} }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", "requires": { - "boolbase": "1.0.0" + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" } }, - "null-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", - "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "react-toastify": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.2.0.tgz", + "integrity": "sha512-XpjFrcBhQ0/nBOL4syqgP/TywFnOyxmstYLWgSQWcj39qpp+WU4vPt3C/ayIDx7RFyxRWfzWTdR2qOcDGo7G0w==", "requires": { - "loader-utils": "1.4.0", - "schema-utils": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" - } - } + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + "react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } + "picomatch": "^2.2.1" } }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + "reading-time": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", + "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" }, - "object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.18.0-next.1" + "resolve": "^1.1.6" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "requires": { - "isobject": "3.0.1" + "minimatch": "3.0.4" } }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.18.0-next.1", - "has-symbols": "1.0.1", - "object-keys": "1.1.1" + "regenerate": "^1.4.0" } }, - "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "dev": true, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "@babel/runtime": "^7.8.4" } }, - "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, + "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==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "is-plain-object": "^2.0.4" } } } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "requires": { - "isobject": "3.0.1" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" } }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7", - "function-bind": "1.1.1", - "has": "1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - } - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "requires": { - "mimic-fn": "2.1.0" + "rc": "^1.2.8" } }, - "open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "requires": { - "is-docker": "2.1.1", - "is-wsl": "2.2.0" + "rc": "^1.2.8" } }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "requires": { - "is-wsl": "1.1.0" + "jsesc": "~0.5.0" }, "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", - "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", - "requires": { - "cssnano": "4.1.10", - "last-call-webpack-plugin": "3.0.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "1.4.7" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "2.2.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", "requires": { - "p-limit": "2.3.0" + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + } } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "3.1.0" - } + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", "requires": { - "retry": "0.12.0" + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" + }, + "dependencies": { + "unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } } }, - "p-try": { + "remark-emoji": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", "requires": { - "got": "9.6.0", - "registry-auth-token": "4.2.0", - "registry-url": "5.1.0", - "semver": "6.3.0" + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "requires": { - "cyclist": "1.0.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" } }, - "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==", + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "requires": { - "safe-buffer": "5.1.2" + "@babel/helper-plugin-utils": "^7.10.4" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "requires": { - "dot-case": "3.0.3", - "tslib": "1.14.1" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "3.1.0" + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "requires": { - "asn1.js": "5.4.1", - "browserify-aes": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.1.1", - "safe-buffer": "5.1.2" + "mdast-squeeze-paragraphs": "^4.0.0" } }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "requires": { - "@babel/code-frame": "7.10.4", - "error-ex": "1.3.2", - "json-parse-even-better-errors": "2.3.1", - "lines-and-columns": "1.1.6" + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" } }, - "parse-numeric-range": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", - "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, - "pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "renderkid": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.6.tgz", + "integrity": "sha512-GIis2GBr/ho0pFNf57D4XM4+PgnQuTii0WCPjEZmZfKivzUfGuRdjN2aQYtYMiNggHmNyBve+thFnNR1iBRcKg==", "requires": { - "no-case": "3.0.3", - "tslib": "1.14.1" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "requires": { + "boolbase": "^1.0.0" + } + } } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "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==" }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } }, - "path-type": { + "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "lowercase-keys": "^1.0.0" } }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { - "find-up": "3.0.0" + "glob": "^7.1.3" } }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "3.0.0" - } - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "1.2.0" - } + "rtl-detect": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz", + "integrity": "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "rtlcss": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.2.0.tgz", + "integrity": "sha512-nV3UmaTmA5TkP2dYOR16ULu6FkMOqZRbiXbFZnmWIN9coPfx3gin31VGOPV7vrVMPjNds7pCS2UYy0mwQUdFCQ==", "requires": { - "async": "2.6.3", - "debug": "3.2.6", - "mkdirp": "0.5.5" + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "mkdirp": "^1.0.4", + "postcss": "^8.2.4", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { - "ms": "2.1.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "3.0.0" - } - } + "p-locate": "^5.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { - "has-flag": "3.0.0" + "p-limit": "^3.0.2" } } } }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4" + "queue-microtask": "^1.2.2" } }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4", - "postcss-value-parser": "4.1.0" + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "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==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "ret": "~0.1.10" } }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "requires": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "requires": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" } }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "node-forge": "^0.10.0" } }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { - "browserslist": "4.14.5", - "color": "3.1.3", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "lru-cache": "^6.0.0" } }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "semver": "^6.3.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { - "postcss": "7.0.35" + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "randombytes": "^2.1.0" } }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" }, "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "mime-db": "~1.33.0" } + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" } } }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" } } }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { - "postcss": "7.0.35" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" } }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "7.0.35" - } + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "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==", "requires": { - "postcss": "7.0.35" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" } }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "7.0.35" - } + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "kind-of": "^6.0.2" } }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "postcss": "7.0.35" + "shebang-regex": "^3.0.0" } }, - "postcss-focus-within": { + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "7.0.35" - } + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, - "postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "requires": { - "postcss": "7.0.35" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { - "postcss": "7.0.35" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "sirv": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", + "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "@polka/url": "^1.0.0-next.15", + "mime": "^2.3.1", + "totalist": "^1.0.0" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + } } }, - "postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "sitemap": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz", + "integrity": "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==", "requires": { - "lodash.template": "4.5.0", - "postcss": "7.0.35" + "@types/node": "^14.14.28", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "dependencies": { + "@types/node": { + "version": "14.17.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", + "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==" + } } }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "requires": { - "@csstools/convert-colors": "1.4.0", - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "cosmiconfig": "5.2.1", - "import-cwd": "2.1.0" + "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" }, "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.14.0", - "parse-json": "4.0.0" + "ms": "2.0.0" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "is-descriptor": "^0.1.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "requires": { - "loader-utils": "1.4.0", - "postcss": "7.0.35", - "postcss-load-config": "2.1.2", - "schema-utils": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } + }, + "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==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "requires": { - "postcss": "7.0.35" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "requires": { - "postcss": "7.0.35" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "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==", "requires": { - "css-color-names": "0.0.4", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "stylehacks": "4.0.3" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } } } }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "browserslist": "4.14.5", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2", - "vendors": "1.0.4" + "kind-of": "^3.2.0" }, "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "is-buffer": "^1.1.5" } } } }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "requires": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", "requires": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } } } }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "sort-css-media-queries": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", + "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==" + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, + "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==", "requires": { - "alphanum-sort": "1.0.2", - "browserslist": "4.14.5", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "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" } }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "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==" + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { - "postcss": "7.0.35" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" } }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "4.1.1", - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4", - "postcss-value-parser": "4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "6.0.4" - } - }, - "postcss-modules-values": { + "spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "4.1.1", - "postcss": "7.0.35" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "requires": { - "postcss": "7.0.35" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "requires": { - "postcss": "7.0.35" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "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==", "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "extend-shallow": "^3.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } } } }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "cssnano-util-get-arguments": "4.0.0", - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "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==" } } }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", "requires": { - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "ci-info": "^3.0.0" } }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "safe-buffer": "~5.2.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "string-replace-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", + "integrity": "sha512-MY2VpW7p2V4yLBybj6BcFhmJGU1GjXSDfSz4NrK9BiLK3ttyKXO/WIyOD4UP/b77QUVPG+AKZ7vvpTCNYRAgWg==", + "dev": true, "requires": { - "browserslist": "4.14.5", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" } } }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, "requires": { - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" } }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "requires": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "requires": { - "postcss": "7.0.35" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, "requires": { - "postcss": "7.0.35" + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" } }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "requires": { - "postcss": "7.0.35", - "postcss-values-parser": "2.0.1" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" } }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "requires": { - "autoprefixer": "9.8.6", - "browserslist": "4.14.5", - "caniuse-lite": "1.0.30001148", - "css-blank-pseudo": "0.1.4", - "css-has-pseudo": "0.10.0", - "css-prefers-color-scheme": "3.1.1", - "cssdb": "4.4.0", - "postcss": "7.0.35", - "postcss-attribute-case-insensitive": "4.0.2", - "postcss-color-functional-notation": "2.0.1", - "postcss-color-gray": "5.0.0", - "postcss-color-hex-alpha": "5.0.3", - "postcss-color-mod-function": "3.0.3", - "postcss-color-rebeccapurple": "4.0.1", - "postcss-custom-media": "7.0.8", - "postcss-custom-properties": "8.0.11", - "postcss-custom-selectors": "5.1.2", - "postcss-dir-pseudo-class": "5.0.0", - "postcss-double-position-gradients": "1.0.0", - "postcss-env-function": "2.0.2", - "postcss-focus-visible": "4.0.0", - "postcss-focus-within": "3.0.0", - "postcss-font-variant": "4.0.0", - "postcss-gap-properties": "2.0.0", - "postcss-image-set-function": "3.0.1", - "postcss-initial": "3.0.2", - "postcss-lab-function": "2.0.1", - "postcss-logical": "3.0.0", - "postcss-media-minmax": "4.0.0", - "postcss-nesting": "7.0.1", - "postcss-overflow-shorthand": "2.0.0", - "postcss-page-break": "2.0.0", - "postcss-place": "4.0.1", - "postcss-pseudo-class-any-link": "6.0.0", - "postcss-replace-overflow-wrap": "3.0.0", - "postcss-selector-matches": "4.0.0", - "postcss-selector-not": "4.0.0" - } - }, - "postcss-pseudo-class-any-link": { + "strip-ansi": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "postcss": "7.0.35", - "postcss-selector-parser": "5.0.0" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } + "ansi-regex": "^5.0.0" } }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "requires": { - "browserslist": "4.14.5", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.35" + "inline-style-parser": "0.1.1" } }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "requires": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" } }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "postcss": "7.0.35" + "has-flag": "^4.0.0" } }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "requires": { - "balanced-match": "1.0.0", - "postcss": "7.0.35" - } + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "postcss-selector-not": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", - "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "requires": { - "balanced-match": "1.0.0", - "postcss": "7.0.35" + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "synckit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", + "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "dev": true, "requires": { - "cssesc": "3.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1", - "util-deprecate": "1.0.2" + "tslib": "^2.2.0", + "uuid": "^8.3.2" } }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, "requires": { - "is-svg": "3.0.0", - "postcss": "7.0.35", - "postcss-value-parser": "3.3.1", - "svgo": "1.3.2" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "ajv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", + "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "requires": { - "alphanum-sort": "1.0.2", - "postcss": "7.0.35", - "uniqs": "2.0.0" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "terser-webpack-plugin": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "requires": { - "flatten": "1.0.3", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + } } }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", - "dev": true + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "requires": { - "lodash": "4.17.20", - "renderkid": "2.0.4" - } + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true }, - "pretty-time": { + "tiny-invariant": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" }, - "prism-react-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz", - "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==", - "requires": {} + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "prismjs": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", - "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "clipboard": "^2.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, - "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==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "asap": "~2.0.3" + "is-number": "^7.0.0" } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "ts-essentials": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", + "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "react-is": "16.13.1" + "prelude-ls": "^1.2.1" } }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { - "xtend": "^4.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.9.1" + "is-typedarray": "^1.0.0" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "4.11.9", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.6", - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "requires": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "inherits": "^2.0.0", + "xtend": "^4.0.0" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "requires": { - "duplexify": "3.7.1", - "inherits": "2.0.4", - "pump": "2.0.1" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "1.4.4", - "once": "1.4.0" - } - } + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" }, - "pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "requires": { - "escape-goat": "2.1.1" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" } }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "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==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "crypto-random-string": "^2.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" }, - "randombytes": { + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + }, + "unist-util-remove": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "requires": { - "safe-buffer": "5.1.2" + "unist-util-is": "^4.0.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "requires": { - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "unist-util-visit": "^2.0.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@types/unist": "^2.0.2" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.5", - "strip-json-comments": "2.0.1" + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" } }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" } }, - "react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "requires": {} + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "requires": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - } + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" }, - "react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "7.3.0", - "pkg-up": "3.1.0", - "react-error-overlay": "6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "requires": { - "@babel/highlight": "7.10.4" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "1.0.3" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", - "requires": { - "caniuse-lite": "1.0.30001148", - "electron-to-chromium": "1.3.582", - "node-releases": "1.1.63", - "pkg-up": "3.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "1.1.2", - "debug": "2.6.9" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.3", - "glob-parent": "3.1.0", - "is-glob": "4.0.1", - "merge2": "1.4.1", - "micromatch": "3.1.10" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "requires": { - "is-extglob": "2.1.1" + "isarray": "1.0.0" } } } }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.7", - "glob": "7.1.6", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", - "requires": { - "ansi-escapes": "4.3.1", - "chalk": "2.4.2", - "cli-cursor": "3.1.0", - "cli-width": "2.2.1", - "external-editor": "3.1.0", - "figures": "3.2.0", - "lodash": "4.17.20", - "mute-stream": "0.0.8", - "run-async": "2.4.1", - "rxjs": "6.6.3", - "string-width": "4.2.0", - "strip-ansi": "5.2.0", - "through": "2.3.8" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "4.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "2.1.0", - "json5": "1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "4.1.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "2.3.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "react-error-overlay": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", - "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { - "object-assign": "4.1.1", - "prop-types": "15.7.2", - "react-fast-compare": "3.2.0", - "react-side-effect": "2.1.0" + "prepend-http": "^2.0.0" } }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, - "react-json-view": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", - "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "use-composed-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", + "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", "requires": { - "flux": "^3.1.3", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^6.1.0" + "ts-essentials": "^2.0.3" } }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "requires": {} }, - "react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", "requires": { - "prop-types": "15.7.2" + "use-isomorphic-layout-effect": "^1.0.0" } }, - "react-loadable-ssr-addon": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz", - "integrity": "sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw==", - "requires": { - "@babel/runtime": "7.12.1" - } + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "requires": { - "@babel/runtime": "7.12.1", - "history": "4.10.1", - "hoist-non-react-statics": "3.3.2", - "loose-envify": "1.4.0", - "mini-create-react-context": "0.4.0", - "path-to-regexp": "1.8.0", - "prop-types": "15.7.2", - "react-is": "16.13.1", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { - "@babel/runtime": "7.12.1" - } + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" }, - "react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "requires": { - "@babel/runtime": "7.12.1", - "history": "4.10.1", - "loose-envify": "1.4.0", - "prop-types": "15.7.2", - "react-router": "5.2.0", - "tiny-invariant": "1.1.0", - "tiny-warning": "1.0.3" - } + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" }, - "react-side-effect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", - "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "react-textarea-autosize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", - "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", - "requires": { - "prop-types": "^15.6.0" - } + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true }, - "react-toastify": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.9.tgz", - "integrity": "sha512-StHXv+4kezHUnPyoILlvygSptQ79bxVuvKcC05yXP0FlqQgPA1ue+80BqxZZiCw2jWDGiY2MHyqBfFKf5YzZbA==", - "requires": { - "classnames": "^2.2.6", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.1" - } + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, - "react-toggle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", - "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", - "requires": { - "classnames": "^2.2.5" - } + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, - "react-transition-group": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", - "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "requires": { - "inherits": "2.0.4", - "string_decoder": "1.3.0", - "util-deprecate": "1.0.2" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { - "picomatch": "2.2.2" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, - "reading-time": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", - "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "1.17.0" - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { - "minimatch": "3.0.4" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "1.4.1" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "7.12.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - } - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "requires": { - "regenerate": "1.4.1", - "regenerate-unicode-properties": "8.2.0", - "regjsgen": "0.5.2", - "regjsparser": "0.6.4", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.2.0" - } - }, - "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", - "requires": { - "rc": "1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "1.2.8" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "requires": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "remark-emoji": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.1.0.tgz", - "integrity": "sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==", - "requires": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.2" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" - }, - "remark-mdx": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", - "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", - "requires": { - "@babel/core": "7.11.6", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-syntax-jsx": "7.10.4", - "@mdx-js/util": "1.6.19", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.10.1", - "lodash": "4.17.20", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "1.0.1" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "5.1.2", - "signal-exit": "3.0.3" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "7.1.6" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "3.1.0", - "inherits": "2.0.4" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "1.2.0" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "requires": { - "tslib": "1.14.1" - } - }, - "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==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "0.1.15" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" - } - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "2.0.1", - "kind-of": "6.0.3" - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", - "requires": { - "node-forge": "0.10.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "6.3.0" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "2.3.0", - "range-parser": "1.2.1", - "statuses": "1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "requires": { - "randombytes": "2.1.0" - } - }, - "serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "1.33.0" - } - }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "requires": { - "accepts": "1.3.7", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.27", - "parseurl": "1.3.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "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==", - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" - } - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", - "requires": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "requires": { - "glob": "7.1.6", - "interpret": "1.4.0", - "rechoir": "0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "dependencies": { - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true - } - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "0.3.2" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sitemap": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", - "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", - "requires": { - "lodash.chunk": "^4.2.0", - "lodash.padstart": "^4.6.1", - "whatwg-url": "^7.0.0", - "xmlbuilder": "^13.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.3", - "use": "3.1.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "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==", - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.3" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.4.0", - "websocket-driver": "0.6.5" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.3", - "inherits": "2.0.4", - "json3": "3.3.3", - "url-parse": "1.4.7" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "2.1.2" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "requires": { - "websocket-driver": "0.6.5" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "1.1.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "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==", - "requires": { - "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" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "4.2.0", - "handle-thing": "2.0.1", - "http-deceiver": "1.2.7", - "select-hose": "2.0.0", - "spdy-transport": "3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "4.2.0", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "3.6.0", - "wbuf": "1.7.3" - } - }, - "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==", - "requires": { - "extend-shallow": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "requires": { - "minipass": "3.1.3" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "std-env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", - "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", - "requires": { - "ci-info": "1.6.0" - } - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "1.4.4", - "stream-shift": "1.0.1" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "string-replace-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-2.3.0.tgz", - "integrity": "sha512-HYBIHStViMKLZC/Lehxy42OuwsBaPzX/LjcF5mkJlE2SnHXmW6SW6eiHABTXnY8ZCm/REbdJ8qnA0ptmIzN0Ng==", - "dev": true, - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "8.0.0", - "is-fullwidth-code-point": "3.0.0", - "strip-ansi": "6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "5.0.0" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - } - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - } - } - }, - "stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "4.1.0" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "requires": { - "browserslist": "4.14.5", - "postcss": "7.0.35", - "postcss-selector-parser": "3.1.2" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "5.3.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "3.0.0" - } - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "2.4.2", - "coa": "2.0.2", - "css-select": "2.1.0", - "css-select-base-adapter": "0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "4.0.3", - "js-yaml": "3.14.0", - "mkdirp": "0.5.5", - "object.values": "1.1.1", - "sax": "1.2.4", - "stable": "0.1.8", - "unquote": "1.1.1", - "util.promisify": "1.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "1.0.0", - "css-what": "3.4.2", - "domutils": "1.7.0", - "nth-check": "1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" - } - } - } - }, - "synckit": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", - "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", - "dev": true, - "requires": { - "tslib": "^2.2.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "table": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz", - "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", - "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", - "requires": { - "chownr": "2.0.0", - "fs-minipass": "2.1.0", - "minipass": "3.1.3", - "minizlib": "2.1.2", - "mkdirp": "1.0.4", - "yallist": "4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "requires": { - "commander": "2.20.3", - "source-map": "0.6.1", - "source-map-support": "0.5.19" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "requires": { - "cacache": "15.0.5", - "find-cache-dir": "3.3.1", - "jest-worker": "26.5.0", - "p-limit": "3.0.2", - "schema-utils": "3.0.0", - "serialize-javascript": "5.0.1", - "source-map": "0.6.1", - "terser": "5.3.6", - "webpack-sources": "1.4.3" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "6.3.0" - } - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "requires": { - "p-try": "2.2.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "2.3.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "2.2.0" - } - } - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "4.1.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "terser": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.6.tgz", - "integrity": "sha512-145ap5v1HYx69HfLuwWaxTIlXyiSr+nSTb7ZWlJCgJn2JptuJRKziNa/zwFx9B1IU99Q055jHni74nLuuEC78w==", - "requires": { - "commander": "2.20.3", - "source-map": "0.7.3", - "source-map-support": "0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "2.3.7", - "xtend": "4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "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==", - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { - "setimmediate": "1.0.5" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.27" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "1.0.0" - } - }, - "ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } - } - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.1.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - } - } - }, - "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==", - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "2.0.2" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "2.0.0" - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-generated": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", - "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==" - }, - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-remove": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", - "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "requires": { - "boxen": "4.2.0", - "chalk": "3.0.0", - "configstore": "5.0.1", - "has-yarn": "2.1.0", - "import-lazy": "2.1.0", - "is-ci": "2.0.0", - "is-installed-globally": "0.3.2", - "is-npm": "4.0.0", - "is-yarn-global": "0.3.0", - "latest-version": "5.1.0", - "pupa": "2.0.1", - "semver-diff": "3.1.1", - "xdg-basedir": "4.0.0" - } - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "requires": { - "punycode": "2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "2.0.0", - "mime-types": "2.1.27", - "schema-utils": "3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "7.0.6", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2" - } - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "2.2.0", - "requires-port": "1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "2.0.0" - }, - "dependencies": { - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.7", - "has-symbols": "1.0.1", - "object.getownpropertydescriptors": "2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.2", - "is-regex": "1.1.1", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.1", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" - } - } - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - } - } - }, - "vfile-location": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", - "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "wait-file": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", - "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", - "requires": { - "@hapi/joi": "15.1.1", - "fs-extra": "8.1.0", - "rx": "4.1.0" - }, - "dependencies": { - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.1.4", - "@hapi/bourne": "1.3.2", - "@hapi/hoek": "8.5.1", - "@hapi/topo": "3.1.6" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "8.5.1" - } - } - } - }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", - "requires": { - "chokidar": "3.4.3", - "graceful-fs": "4.2.4", - "neo-async": "2.6.2", - "watchpack-chokidar2": "2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, - "requires": { - "chokidar": "2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, - "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, - "requires": { - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "fsevents": "1.2.13", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "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==", - "optional": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "1.5.0", - "nan": "2.14.2" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, - "requires": { - "binary-extensions": "1.13.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" - } - }, - "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==", - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "1.0.1" - } - }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" - }, - "web-tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", - "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "6.4.2", - "ajv": "6.12.6", - "ajv-keywords": "3.5.2", - "chrome-trace-event": "1.0.2", - "enhanced-resolve": "4.3.0", - "eslint-scope": "4.0.3", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.4.0", - "loader-utils": "1.4.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.5", - "neo-async": "2.6.2", - "node-libs-browser": "2.2.1", - "schema-utils": "1.0.0", - "tapable": "1.1.3", - "terser-webpack-plugin": "1.4.5", - "watchpack": "1.7.4", - "webpack-sources": "1.4.3" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "3.7.2", - "chownr": "1.1.4", - "figgy-pudding": "3.5.2", - "glob": "7.1.6", - "graceful-fs": "4.2.4", - "infer-owner": "1.0.4", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.5", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.7.1", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "1.2.5" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "3.1.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } + "wait-on": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", + "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "requires": { + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" + } + }, + "watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "web-tree-sitter": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", + "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" + }, + "webpack": { + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==" }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "7.1.6" - } + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "requires": { - "randombytes": "2.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, "source-map": { @@ -32380,150 +27491,118 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "requires": { - "figgy-pudding": "3.5.2" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "requires": { - "cacache": "12.0.4", - "find-cache-dir": "2.1.0", - "is-wsl": "1.1.0", - "schema-utils": "1.0.0", - "serialize-javascript": "4.0.0", - "source-map": "0.6.1", - "terser": "4.8.0", - "webpack-sources": "1.4.3", - "worker-farm": "1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, "webpack-bundle-analyzer": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", - "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", "requires": { - "acorn": "7.4.0", - "acorn-walk": "7.2.0", - "bfj": "6.1.2", - "chalk": "2.4.2", - "commander": "2.20.3", - "ejs": "2.7.4", - "express": "4.17.1", - "filesize": "3.6.1", - "gzip-size": "5.1.1", - "lodash": "4.17.20", - "mkdirp": "0.5.5", - "opener": "1.5.1", - "ws": "6.2.1" + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^6.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" }, "dependencies": { "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==" }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "requires": { + "duplexer": "^0.1.2" + } } } }, "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", "requires": { - "memory-fs": "0.4.1", - "mime": "2.4.6", - "mkdirp": "0.5.5", - "range-parser": "1.2.1", - "webpack-log": "2.0.0" + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } } } }, "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.1.8", - "compression": "1.7.4", - "connect-history-api-fallback": "1.6.0", - "debug": "4.2.0", - "del": "4.1.1", - "express": "4.17.1", - "html-entities": "1.3.1", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", "http-proxy-middleware": "0.19.1", - "import-local": "2.0.0", - "internal-ip": "4.3.0", - "ip": "1.1.5", - "is-absolute-url": "3.0.3", - "killable": "1.0.1", - "loglevel": "1.7.0", - "opn": "5.5.0", - "p-retry": "3.0.1", - "portfinder": "1.0.28", - "schema-utils": "1.0.0", - "selfsigned": "1.10.8", - "semver": "6.3.0", - "serve-index": "1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "4.0.2", - "strip-ansi": "3.0.1", - "supports-color": "6.1.0", - "url": "0.11.0", - "webpack-dev-middleware": "3.7.2", - "webpack-log": "2.0.0", - "ws": "6.2.1", - "yargs": "13.3.2" + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" }, "dependencies": { "ansi-regex": { @@ -32536,8 +27615,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { "normalize-path": { @@ -32545,7 +27624,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } } } @@ -32555,7 +27634,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "binary-extensions": { @@ -32568,26 +27647,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "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" } }, "chokidar": { @@ -32595,18 +27664,18 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "fsevents": "1.2.13", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "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" } }, "del": { @@ -32614,32 +27683,13 @@ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "requires": { - "@types/glob": "7.1.3", - "globby": "6.1.0", - "is-path-cwd": "2.2.0", - "is-path-in-cwd": "2.1.0", - "p-map": "2.1.0", - "pify": "4.0.1", - "rimraf": "2.7.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "2.0.4" - } - } + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" } }, "fill-range": { @@ -32647,20 +27697,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" } }, "fsevents": { @@ -32669,8 +27709,8 @@ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { - "bindings": "1.5.0", - "nan": "2.14.2" + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "glob-parent": { @@ -32678,8 +27718,8 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -32687,7 +27727,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -32697,11 +27737,11 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "requires": { - "array-union": "1.0.2", - "glob": "7.1.6", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -32711,17 +27751,30 @@ } } }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.13.1" + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "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==", + "requires": { + "is-plain-object": "^2.0.4" } }, "is-number": { @@ -32729,7 +27782,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -32737,7 +27790,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -32747,19 +27800,30 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "p-map": { @@ -32772,13 +27836,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "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" } }, "readdirp": { @@ -32786,9 +27850,9 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "rimraf": { @@ -32796,7 +27860,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { - "glob": "7.1.6" + "glob": "^7.1.3" } }, "schema-utils": { @@ -32804,17 +27868,22 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "requires": { - "ajv": "6.12.6", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.2" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "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==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -32822,7 +27891,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -32830,7 +27899,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "to-regex-range": { @@ -32838,8 +27907,16 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "requires": { + "async-limiter": "~1.0.0" } } } @@ -32849,16 +27926,29 @@ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "requires": { - "ansi-colors": "3.2.4", - "uuid": "3.4.0" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } } }, "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "requires": { - "lodash": "4.17.20" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "webpack-sources": { @@ -32866,8 +27956,8 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -32878,84 +27968,28 @@ } }, "webpackbar": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", - "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", - "requires": { - "ansi-escapes": "4.3.1", - "chalk": "2.4.2", - "consola": "2.15.0", - "figures": "3.2.0", - "pretty-time": "1.1.0", - "std-env": "2.2.1", - "text-table": "0.2.0", - "wrap-ansi": "6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "4.3.0", - "string-width": "4.2.0", - "strip-ansi": "6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "2.0.1" - } - } - } - } + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "requires": { - "websocket-extensions": "0.1.4" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -32963,34 +27997,18 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, - "whatwg-fetch": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", - "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -33009,51 +28027,36 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { - "string-width": "4.2.0" + "string-width": "^4.0.0" } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "0.1.7" - } - }, "worker-rpc": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", "requires": { - "microevent.ts": "0.1.1" + "microevent.ts": "~0.1.1" } }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -33066,25 +28069,17 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "requires": { - "imurmurhash": "0.1.4", - "is-typedarray": "1.0.0", - "signal-exit": "3.0.3", - "typedarray-to-buffer": "3.1.5" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "1.0.1" - } - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} }, "xdg-basedir": { "version": "4.0.0", @@ -33099,20 +28094,15 @@ "sax": "^1.2.4" } }, - "xmlbuilder": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", - "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { "version": "4.0.0", @@ -33120,35 +28110,96 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.1.2" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" } } } @@ -33158,8 +28209,8 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "dependencies": { "camelcase": { @@ -33169,6 +28220,11 @@ } } }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/docs/package.json b/docs/package.json index 984434a1e91..a1c20196c78 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,8 +14,8 @@ "prettier:format": "prettier --write ." }, "dependencies": { - "@docusaurus/core": "^2.0.0-alpha.66", - "@docusaurus/preset-classic": "^2.0.0-alpha.66", + "@docusaurus/core": "^2.0.0-beta.0", + "@docusaurus/preset-classic": "^2.0.0-beta.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", @@ -44,8 +44,8 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", - "null-loader": "^3.0.0", + "null-loader": "^4.0.0", "prettier": "2.1.2", - "string-replace-loader": "2.3" + "string-replace-loader": "^3.0.0" } } diff --git a/docs/src/docusaurus-tree-sitter-plugin/index.js b/docs/src/docusaurus-tree-sitter-plugin/index.js index 7803a9e995d..da9809d7703 100644 --- a/docs/src/docusaurus-tree-sitter-plugin/index.js +++ b/docs/src/docusaurus-tree-sitter-plugin/index.js @@ -29,8 +29,11 @@ module.exports = function () { return { // web-tree-sitter tries to import "fs", which can be ignored. // https://github.com/tree-sitter/tree-sitter/issues/466 - node: { - fs: "empty", + resolve: { + fallback: { + fs: false, + path: false, + }, }, module: { rules }, }; From c83dea3742f64578f16ac2ff2425df5941556396 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 14:22:32 +0000 Subject: [PATCH 0062/1130] chore(deps): bump react and react-dom in /docs Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom). These dependencies needed to be updated together. Updates `react` from 16.14.0 to 17.0.2 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v17.0.2/packages/react) Updates `react-dom` from 16.14.0 to 17.0.2 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v17.0.2/packages/react-dom) --- updated-dependencies: - dependency-name: react dependency-type: direct:production update-type: version-update:semver-major - dependency-name: react-dom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 55 +++++++++++++++++++----------------------- docs/package.json | 4 +-- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 1f7c4a2472f..5564547a1ed 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13,10 +13,10 @@ "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", "classnames": "^2.2.6", - "react": "^16.14.0", + "react": "^17.0.2", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", - "react-dom": "^16.14.0", + "react-dom": "^17.0.2", "react-toastify": "^6.0.9", "web-tree-sitter": "^0.17.1" }, @@ -11341,13 +11341,12 @@ } }, "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" @@ -11559,17 +11558,16 @@ } }, "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "scheduler": "^0.20.2" }, "peerDependencies": { - "react": "^16.14.0" + "react": "17.0.2" } }, "node_modules/react-error-overlay": { @@ -12636,9 +12634,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -24637,13 +24635,12 @@ } }, "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "object-assign": "^4.1.1" } }, "react-async": { @@ -24808,14 +24805,13 @@ } }, "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "scheduler": "^0.20.2" } }, "react-error-overlay": { @@ -25551,7 +25547,6 @@ "chalk": "^4.1.0", "find-up": "^5.0.0", "mkdirp": "^1.0.4", - "postcss": "^8.2.4", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -25629,9 +25624,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" diff --git a/docs/package.json b/docs/package.json index a1c20196c78..5291ff9570a 100644 --- a/docs/package.json +++ b/docs/package.json @@ -20,10 +20,10 @@ "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", "classnames": "^2.2.6", - "react": "^16.14.0", + "react": "^17.0.2", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", - "react-dom": "^16.14.0", + "react-dom": "^17.0.2", "react-toastify": "^6.0.9", "web-tree-sitter": "^0.17.1" }, From 22800455e21b31fdf79ab7568627e7ae9c2837ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 14:31:38 +0000 Subject: [PATCH 0063/1130] chore(deps): bump react-toastify from 6.0.9 to 7.0.4 in /docs Bumps [react-toastify](https://github.com/fkhadra/react-toastify) from 6.0.9 to 7.0.4. - [Release notes](https://github.com/fkhadra/react-toastify/releases) - [Commits](https://github.com/fkhadra/react-toastify/compare/v6.0.9...v7.0.4) --- updated-dependencies: - dependency-name: react-toastify dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 75 +++++++++--------------------------------- docs/package.json | 2 +- 2 files changed, 16 insertions(+), 61 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 5564547a1ed..e0d5fbdc8a9 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -17,7 +17,7 @@ "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", - "react-toastify": "^6.0.9", + "react-toastify": "^7.0.4", "web-tree-sitter": "^0.17.1" }, "devDependencies": { @@ -4977,7 +4977,8 @@ "node_modules/csstype": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "peer": true }, "node_modules/debug": { "version": "4.3.1", @@ -5376,15 +5377,6 @@ "utila": "~0.4" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "node_modules/dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -11732,31 +11724,15 @@ } }, "node_modules/react-toastify": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.2.0.tgz", - "integrity": "sha512-XpjFrcBhQ0/nBOL4syqgP/TywFnOyxmstYLWgSQWcj39qpp+WU4vPt3C/ayIDx7RFyxRWfzWTdR2qOcDGo7G0w==", - "dependencies": { - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.1" - }, - "peerDependencies": { - "react": ">=16" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", + "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "clsx": "^1.1.1" }, "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "react": ">=16", + "react-dom": ">=16" } }, "node_modules/readable-stream": { @@ -19922,7 +19898,8 @@ "csstype": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "peer": true }, "debug": { "version": "4.3.1", @@ -20229,15 +20206,6 @@ "utila": "~0.4" } }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -24943,24 +24911,11 @@ } }, "react-toastify": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.2.0.tgz", - "integrity": "sha512-XpjFrcBhQ0/nBOL4syqgP/TywFnOyxmstYLWgSQWcj39qpp+WU4vPt3C/ayIDx7RFyxRWfzWTdR2qOcDGo7G0w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", + "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", "requires": { - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.1" - } - }, - "react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "clsx": "^1.1.1" } }, "readable-stream": { diff --git a/docs/package.json b/docs/package.json index 5291ff9570a..bd97965e041 100644 --- a/docs/package.json +++ b/docs/package.json @@ -24,7 +24,7 @@ "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", - "react-toastify": "^6.0.9", + "react-toastify": "^7.0.4", "web-tree-sitter": "^0.17.1" }, "browserslist": { From ba45aaa81bd5c4d768e315ff57520738b6b59777 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 9 Jun 2021 14:55:33 +0000 Subject: [PATCH 0064/1130] chore(docs): Bump prettier, and reformat w/ it. * Bump to prettier 2.3.1. * Re-run prettier:format to apply updated format. --- docs/docs/intro.md | 1 - docs/package-lock.json | 15 ++++++++------- docs/package.json | 2 +- docs/src/components/codes/Description.jsx | 3 ++- docs/src/pages/power-profiler.js | 6 ++---- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 808873672f3..7e8e1e6781b 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -14,7 +14,6 @@ ZMK is currently missing some features found in other popular firmware. This tab | Legend: | ✅ Supported | 🚧 Under Development | 💡 Planned | | :------ | :----------- | :------------------- | :--------- | - | **Feature** | ZMK | BlueMicro | QMK | | ------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | | Low Latency BLE Support | ✅ | ✅ | | diff --git a/docs/package-lock.json b/docs/package-lock.json index e0d5fbdc8a9..b36bf888050 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -26,7 +26,7 @@ "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", "null-loader": "^4.0.0", - "prettier": "2.1.2", + "prettier": "2.3.1", "string-replace-loader": "^3.0.0" } }, @@ -11084,9 +11084,9 @@ } }, "node_modules/prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -24415,9 +24415,9 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true }, "pretty-error": { @@ -25502,6 +25502,7 @@ "chalk": "^4.1.0", "find-up": "^5.0.0", "mkdirp": "^1.0.4", + "postcss": "^8.2.4", "strip-json-comments": "^3.1.1" }, "dependencies": { diff --git a/docs/package.json b/docs/package.json index bd97965e041..09a8e9fc8f1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -45,7 +45,7 @@ "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", "null-loader": "^4.0.0", - "prettier": "2.1.2", + "prettier": "2.3.1", "string-replace-loader": "^3.0.0" } } diff --git a/docs/src/components/codes/Description.jsx b/docs/src/components/codes/Description.jsx index 6d8c5f62b4c..7ad5fc2cca9 100644 --- a/docs/src/components/codes/Description.jsx +++ b/docs/src/components/codes/Description.jsx @@ -7,7 +7,8 @@ import React from "react"; import PropTypes from "prop-types"; -const specialCharactersRegex = /(?:^|\s)((?:&(?:(?:\w+)|(?:#\d+));)|[_]|[^\w\s])(?:\s*\[([^[\]]+?)\])/g; +const specialCharactersRegex = + /(?:^|\s)((?:&(?:(?:\w+)|(?:#\d+));)|[_]|[^\w\s])(?:\s*\[([^[\]]+?)\])/g; function renderSpecialCharacters(description) { const matches = Array.from(description.matchAll(specialCharactersRegex)); diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js index ca46f5cab8e..fc803c587de 100644 --- a/docs/src/pages/power-profiler.js +++ b/docs/src/pages/power-profiler.js @@ -30,10 +30,8 @@ function PowerProfiler() { const { value: psuType, bind: bindPsuType } = useInput(""); const { value: outputV, bind: bindOutputV } = useInput(3.3); const { value: quiescentMicroA, bind: bindQuiescentMicroA } = useInput(55); - const { - value: otherQuiescentMicroA, - bind: bindOtherQuiescentMicroA, - } = useInput(0); + const { value: otherQuiescentMicroA, bind: bindOtherQuiescentMicroA } = + useInput(0); const { value: efficiency, bind: bindEfficiency } = useInput(0.9); const { value: bondedQty, bind: bindBondedQty } = useInput(1); From 3f4839ec96c116350fd5b11177927ec0d03da2df Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 9 Jun 2021 18:29:33 +0000 Subject: [PATCH 0065/1130] refactor: Move to new zmk.dev domain name. --- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 14 +++++++------- README.md | 10 +++++----- docs/blog/2020-09-21-zmk-sotf-2.md | 8 ++++---- docs/docs/faq.md | 6 +++--- docs/docs/hardware.md | 2 +- docs/docs/troubleshooting.md | 2 +- docs/docs/user-setup.md | 6 +++--- docs/docusaurus.config.js | 4 ++-- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 399c0b12ae8..2f8c597b816 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -conduct@zmkfirmware.dev. +conduct@zmk.dev. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2783c17f51c..1950ddf92af 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ you have any questions, please come join us on the ## Code of Conduct All community members are expected to abide by the [Code of Conduct][code-of-conduct]. -For any and all conduct inquiries or concerns, please contact conduct@zmkfirmware.dev. +For any and all conduct inquiries or concerns, please contact conduct@zmk.dev. [code-of-conduct]: https://github.com/zmkfirmware/zmk/blob/main/CODE_OF_CONDUCT.md @@ -35,8 +35,8 @@ ZMK project. ### Before Submitting a Report -- Review the [Frequently Asked Questions](https://zmkfirmware.dev/docs/faq). -- Check the [Troubleshooting Guide](https://zmkfirmware.dev/docs/troubleshooting) for answers. +- Review the [Frequently Asked Questions](https://zmk.dev/docs/faq). +- Check the [Troubleshooting Guide](https://zmk.dev/docs/troubleshooting) for answers. - Search the [open issues](https://github.com/zmkfirmware/zmk/issues) for an existing report that matches your problem. @@ -47,10 +47,10 @@ To open a report: - Head to https://github.com/zmkfirmware/zmk/issues/new - Provide an accurate summary of the issue in the title. - Provide as much detail as you can about the issue including: - - What [board/shield](https://zmkfirmware.dev/docs/faq#what-is-a-board) you are using. + - What [board/shield](https://zmk.dev/docs/faq#what-is-a-board) you are using. - A link to the user repository, if you used it to build your firmware. - Exact steps to reproduce the problem. - - Any relevant screenshots or [logs](https://zmkfirmware.dev/docs/dev-guide-usb-logging) + - Any relevant screenshots or [logs](https://zmk.dev/docs/dev-guide-usb-logging) ## Testing @@ -91,7 +91,7 @@ You can setup git to run prettier automatically when you commit by installing th ### Development Setup To get your development environment setup going, start at the -[basic setup](https://zmkfirmware.dev/docs/dev-setup) docs, and make sure you can build and flash +[basic setup](https://zmk.dev/docs/dev-setup) docs, and make sure you can build and flash your own locally built firmware. ### Formatting @@ -124,4 +124,4 @@ When opening a pull request with your changes, please: - Requested testing by reviewers or testers. - Screenshots or logs that support understanding the change. -[discord-invite]: https://zmkfirmware.dev/community/discord/invite +[discord-invite]: https://zmk.dev/community/discord/invite diff --git a/README.md b/README.md index 3fc53a5cdbd..50cb2817b8f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # Zephyr™ Mechanical Keyboard (ZMK) Firmware -[![Discord](https://img.shields.io/discord/719497620560543766)](https://zmkfirmware.dev/community/discord/invite) +[![Discord](https://img.shields.io/discord/719497620560543766)](https://zmk.dev/community/discord/invite) [![Build](https://github.com/zmkfirmware/zmk/workflows/Build/badge.svg)](https://github.com/zmkfirmware/zmk/actions) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) -[ZMK Firmware](https://zmkfirmware.dev/) is an open source (MIT) keyboard firmware built on the [Zephyr™ Project](https://www.zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues. +[ZMK Firmware](https://zmk.dev/) is an open source (MIT) keyboard firmware built on the [Zephyr™ Project](https://www.zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues. -Check out the website to learn more: https://zmkfirmware.dev/ +Check out the website to learn more: https://zmk.dev/ -You can also come join our [ZMK Discord Server](https://zmkfirmware.dev/community/discord/invite) +You can also come join our [ZMK Discord Server](https://zmk.dev/community/discord/invite) -To review features, check out the [feature overview](https://zmkfirmware.dev/docs/). ZMK is under active development, and new features are listed with the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature. +To review features, check out the [feature overview](https://zmk.dev/docs/). ZMK is under active development, and new features are listed with the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature. diff --git a/docs/blog/2020-09-21-zmk-sotf-2.md b/docs/blog/2020-09-21-zmk-sotf-2.md index 1ce61c9ad04..61e294225d4 100644 --- a/docs/blog/2020-09-21-zmk-sotf-2.md +++ b/docs/blog/2020-09-21-zmk-sotf-2.md @@ -16,16 +16,16 @@ Hacktoberfest activity, and a current open call for community feedback on a ZMK So much going on in ZMK! -- Added a new generic [Hold Tap behavior](https://zmkfirmware.dev/docs/behaviors/hold-tap) +- Added a new generic [Hold Tap behavior](https://zmk.dev/docs/behaviors/hold-tap) in [#146](https://github.com/zmkfirmware/zmk/pull/146) which now powers mod-tap, layer-tap, etc. - [okke-formsma] -- [BLE profile/connection management](https://zmkfirmware.dev/docs/behaviors/bluetooth) +- [BLE profile/connection management](https://zmk.dev/docs/behaviors/bluetooth) in [#133](https://github.com/zmkfirmware/zmk/pull/133) - [petejohanson] - Integration tests were added to automate testing of behaviors in [#131](https://github.com/zmkfirmware/zmk/pull/131) by [BrainWart] & [petejohanson] -- [Toggle layer behavior](https://zmkfirmware.dev/docs/behaviors/layers#toggle-layer), e.g. `&tog LOWER`, in +- [Toggle layer behavior](https://zmk.dev/docs/behaviors/layers#toggle-layer), e.g. `&tog LOWER`, in [#98](https://github.com/zmkfirmware/zmk/pull/98) - [BrainWart] - Key fix for dropped press/release over HID [#93](https://github.com/zmkfirmware/zmk/pull/93)/[#96](https://github.com/zmkfirmware/zmk/pull/96) - [careyk007](https://github.com/careyk007) & [petejohanson] - Code formatting standardized using `clang-format` in [#183](https://github.com/zmkfirmware/zmk/pull/183) - [petejohanson] -- [Bootloader reset behavior](https://zmkfirmware.dev/docs/behaviors/reset#bootloader-reset), e.g. `&bootloader`, in [#116](https://github.com/zmkfirmware/zmk/pull/116) - [petejohanson] +- [Bootloader reset behavior](https://zmk.dev/docs/behaviors/reset#bootloader-reset), e.g. `&bootloader`, in [#116](https://github.com/zmkfirmware/zmk/pull/116) - [petejohanson] - Various bug fixes and documentation ## New Shields diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 7417a49a4f3..d335d11e646 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -82,7 +82,7 @@ Currently, ZMK only supports wireless split, but wired split is possible and we ### What bootloader does ZMK use? -ZMK isn’t designed for any particular bootloader, and supports flashing different boards with different flash utilities (e.g. OpenOCD, nrfjprog, etc.). So if you have any difficulties, please let us know on [Discord](https://zmkfirmware.dev/community/discord/invite)! +ZMK isn’t designed for any particular bootloader, and supports flashing different boards with different flash utilities (e.g. OpenOCD, nrfjprog, etc.). So if you have any difficulties, please let us know on [Discord](https://zmk.dev/community/discord/invite)! ### Can I contribute? @@ -90,11 +90,11 @@ Of course! Please use the developer [documentation](/docs) to get started! ### I have an idea! What should I do? -Please join us on [Discord](https://zmkfirmware.dev/community/discord/invite) and discuss it with us! +Please join us on [Discord](https://zmk.dev/community/discord/invite) and discuss it with us! ### I want to add a new keyboard! What should I do? -The exact process for the management of all the possible hardware is still being finalized, but any developer looking to contribute new keyboard definitions should chat with us on [Discord](https://zmkfirmware.dev/community/discord/invite) to get started. +The exact process for the management of all the possible hardware is still being finalized, but any developer looking to contribute new keyboard definitions should chat with us on [Discord](https://zmk.dev/community/discord/invite) to get started. ### Does ZMK have a Code of Conduct? diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 0dc17782734..797acd0200e 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -49,7 +49,7 @@ In addition to the basic keyboard functionality, there is some initial support f - OLEDs - RGB Underglow -Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmkfirmware.dev/community/discord/invite). +Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite). ## Contributing diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 5eccb7c1ff0..edf5d6e71b6 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -5,7 +5,7 @@ sidebar_title: Troubleshooting ### Summary -The following page provides suggestions for common errors that may occur during firmware compilation. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmkfirmware.dev/community/discord/invite). +The following page provides suggestions for common errors that may occur during firmware compilation. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite). ### File Transfer Error diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index afab9817284..5e130f00a82 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -68,21 +68,21 @@ values={[ ``` -bash -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)" +bash -c "$(curl -fsSL https://zmk.dev/setup.sh)" ``` ``` -bash -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" '' --wget +bash -c "$(wget https://zmk.dev/setup.sh -O -)" '' --wget ``` ``` -iex ((New-Object System.Net.WebClient).DownloadString('https://zmkfirmware.dev/setup.ps1')) +iex ((New-Object System.Net.WebClient).DownloadString('https://zmk.dev/setup.ps1')) ``` diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 385e3f561b4..ffc4cd6dcae 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -3,7 +3,7 @@ const path = require("path"); module.exports = { title: "ZMK Firmware", tagline: "Modern, open source keyboard firmware", - url: "https://zmkfirmware.dev", + url: "https://zmk.dev", baseUrl: "/", favicon: "img/favicon.ico", organizationName: "zmkfirmware", // Usually your GitHub org/user name. @@ -70,7 +70,7 @@ module.exports = { { label: "Discord", href: - (process.env.URL || "https://zmkfirmware.dev") + + (process.env.URL || "https://zmk.dev") + "/community/discord/invite", }, { From 84ce6b066aae497c7435bdc3b2ec354c84fbbd22 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 10 Jun 2021 14:02:27 +0000 Subject: [PATCH 0066/1130] fix(docs): Add permanent redict to zmk.dev domain. --- docs/netlify.toml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/netlify.toml b/docs/netlify.toml index 8ef5addf81e..37f077e58b4 100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@ -1,4 +1,14 @@ [[redirects]] from = "/community/discord/invite" to = "https://discord.gg/sycytVQ" - status = 302 \ No newline at end of file + status = 302 + +[[redirects]] + from = "https://zmkfirmware.dev/*" + to = "https://zmk.dev/:splat" + force = true + +[[redirects]] + from = "https://www.zmkfirmware.dev/*" + to = "https://www.zmk.dev/:splat" + force = true \ No newline at end of file From 0f281304938dd1820cfe71dee431770ae545c883 Mon Sep 17 00:00:00 2001 From: David Barr Date: Thu, 10 Jun 2021 21:50:13 +0100 Subject: [PATCH 0067/1130] fix(shields): Cradio v2 keymap/shield improvements * fix cradio dtsi add new keymap and readme Co-authored-by: Dom H --- app/boards/shields/cradio/Kconfig.defconfig | 10 +- app/boards/shields/cradio/README.md | 1 + app/boards/shields/cradio/cradio.conf | 0 app/boards/shields/cradio/cradio.dtsi | 68 ++++++------- app/boards/shields/cradio/cradio.keymap | 99 +++++++++++++++---- app/boards/shields/cradio/cradio_left.overlay | 2 +- app/boards/shields/cradio/cradio_right.conf | 1 - .../shields/cradio/cradio_right.overlay | 2 +- 8 files changed, 122 insertions(+), 61 deletions(-) create mode 100644 app/boards/shields/cradio/README.md create mode 100644 app/boards/shields/cradio/cradio.conf diff --git a/app/boards/shields/cradio/Kconfig.defconfig b/app/boards/shields/cradio/Kconfig.defconfig index 5e826bf0d49..1a008d69323 100644 --- a/app/boards/shields/cradio/Kconfig.defconfig +++ b/app/boards/shields/cradio/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_CRADIO_LEFT config ZMK_KEYBOARD_NAME - default "cradio left" + default "Cradio" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y @@ -14,13 +14,13 @@ endif if SHIELD_CRADIO_RIGHT config ZMK_KEYBOARD_NAME - default "cradio right" + default "Cradio_Right" endif -if SHIELD_CRADIO_LEFT || SHIELD_CRADIO_RIGHT +if SHIELD_CRADIO_RIGHT || SHIELD_CRADIO_LEFT config ZMK_SPLIT default y - -endif \ No newline at end of file + +endif diff --git a/app/boards/shields/cradio/README.md b/app/boards/shields/cradio/README.md new file mode 100644 index 00000000000..f391bbeca02 --- /dev/null +++ b/app/boards/shields/cradio/README.md @@ -0,0 +1 @@ +Cradio is a firmware for a few 34 key keyboards, including Cradio, Hypergolic and Sweep. diff --git a/app/boards/shields/cradio/cradio.conf b/app/boards/shields/cradio/cradio.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/cradio/cradio.dtsi b/app/boards/shields/cradio/cradio.dtsi index a99a8e58ff6..db222581312 100644 --- a/app/boards/shields/cradio/cradio.dtsi +++ b/app/boards/shields/cradio/cradio.dtsi @@ -3,48 +3,50 @@ * * SPDX-License-Identifier: MIT */ - - #include - + +#include + / { + chosen { zmk,kscan = &kscan0; - //zmk,matrix_transform = &default_transform; + zmk,matrix_transform = &default_transform; }; - + default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <34>; - rows = <1>; + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) - RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) - RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) - RC(0,15) RC(0,16) RC(0,33) RC(0,32) - >; + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; + }; kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; label = "KSCAN"; input-gpios - = <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; - }; + = <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; + +}; diff --git a/app/boards/shields/cradio/cradio.keymap b/app/boards/shields/cradio/cradio.keymap index a917a83d94e..ec5e0e7a5dd 100644 --- a/app/boards/shields/cradio/cradio.keymap +++ b/app/boards/shields/cradio/cradio.keymap @@ -9,35 +9,94 @@ #include -/ { +&mt { + // flavor = "tap-preferred"; + // tapping_term_ms = <200>; +}; + +/ { + + combos { + compatible = "zmk,combos"; + combo_esc { + timeout-ms = <50>; + key-positions = <0 1>; + bindings = <&kp ESC>; + }; + + combo_tab { + timeout-ms = <50>; + key-positions = <10 11>; + bindings = <&kp TAB>; + }; + + combo_ralt { + timeout-ms = <50>; + key-positions = <17 16>; + bindings = <&kp RALT>; + }; + + combo_lalt { + timeout-ms = <50>; + key-positions = <11 12>; + bindings = <&kp LALT>; + }; + + combo_lgui { + timeout-ms = <50>; + key-positions = <12 13>; + bindings = <&kp LGUI>; + }; + + + combo_rgui { + timeout-ms = <50>; + key-positions = <17 18>; + bindings = <&kp RGUI>; + }; + + + + }; + keymap { compatible = "zmk,keymap"; - - default_layer { + + default_layer { bindings = < - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P - &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI - &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH - &mo 1 &kp LCTRL &kp SPACE &mo 2 + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT + &mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET + &mo 1 &kp LCTL &kp SPC &mo 2 >; }; - upper_layer { + + left_layer { bindings = < - &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 - &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp H &kp J &kp K &kp L &kp SEMI - &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans - &mo 1 &kp LCTRL &kp SPACE &mo 2 + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL + &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL + &mo 1 &kp LGUI &kp RGUI &mo 2 >; }; - - lower_layer { + + right_layer { bindings = < - &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR - &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp PIPE - &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp TILDE - &mo 1 &kp LCTRL &kp SPACE &mo 2 + &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN + &kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP + &kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT + &mo 3 &kp LCTL &kp SPC &mo 2 >; - }; - + }; + + tri_layer { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans + &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans + &trans &trans &trans &trans + >; + }; + }; }; diff --git a/app/boards/shields/cradio/cradio_left.overlay b/app/boards/shields/cradio/cradio_left.overlay index 6a3704a792d..96867c415c2 100644 --- a/app/boards/shields/cradio/cradio_left.overlay +++ b/app/boards/shields/cradio/cradio_left.overlay @@ -3,5 +3,5 @@ * * SPDX-License-Identifier: MIT */ - + #include "cradio.dtsi" diff --git a/app/boards/shields/cradio/cradio_right.conf b/app/boards/shields/cradio/cradio_right.conf index 80a6177e839..c9f7988a7df 100644 --- a/app/boards/shields/cradio/cradio_right.conf +++ b/app/boards/shields/cradio/cradio_right.conf @@ -1,3 +1,2 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT - diff --git a/app/boards/shields/cradio/cradio_right.overlay b/app/boards/shields/cradio/cradio_right.overlay index 01aa1ab6133..41436e975ae 100644 --- a/app/boards/shields/cradio/cradio_right.overlay +++ b/app/boards/shields/cradio/cradio_right.overlay @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include "cradio.dtsi" &default_transform { From efa497c69b813852d3704dbd96207f1186eb941a Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sun, 7 Mar 2021 14:50:30 +0100 Subject: [PATCH 0068/1130] fix(behaviors): Fix timing of delayed hold-tap trigger A hold-tap timer event would be triggered too soon if the hold-tap was delayed for longer than its tapping-term. This may cause accidental hold behavior when the correct behavior would be tap. By queuing the timer event instead of executing it immediately, other delayed events get a chance to be processed properly. --- app/src/behaviors/behavior_hold_tap.c | 6 +-- .../6-nested-timeouts/events.patterns | 4 ++ .../6-nested-timeouts/keycode_events.snapshot | 10 ++++ .../6-nested-timeouts/native_posix.keymap | 53 +++++++++++++++++++ 4 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index c83305de0ef..0b6b587f1ef 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -449,11 +449,7 @@ static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, // if this behavior was queued we have to adjust the timer to only // wait for the remaining time. int32_t tapping_term_ms_left = (hold_tap->timestamp + cfg->tapping_term_ms) - k_uptime_get(); - if (tapping_term_ms_left > 0) { - k_delayed_work_submit(&hold_tap->work, K_MSEC(tapping_term_ms_left)); - } else { - decide_hold_tap(hold_tap, HT_TIMER_EVENT); - } + k_delayed_work_submit(&hold_tap->work, K_MSEC(tapping_term_ms_left)); return ZMK_BEHAVIOR_OPAQUE; } diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot new file mode 100644 index 00000000000..54ac986bffd --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap new file mode 100644 index 00000000000..adbd648eccc --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap @@ -0,0 +1,53 @@ +#include +#include +#include + +/* +* A hold-tap with long tapping term is pressed first. +* A hold-tap with short tapping term is quickly tapped. +* The short tapping term hold-tap should 'tap', not 'hold'. +*/ + +/ { + behaviors { + tp_short: short_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP_SHORT"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <100>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + tp_long: long_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP_LONG"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <200>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp_long LEFT_SHIFT F &tp_short LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,20) + ZMK_MOCK_PRESS(0,1,20) + ZMK_MOCK_RELEASE(0,1,200) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file From 6f3a2529aefefa1d580bd94c9f2025b7a50bfd97 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Mon, 14 Jun 2021 17:38:38 +0100 Subject: [PATCH 0069/1130] docs(setup): fix whitespace mismatch in host dependencies Replaces spaces with tabs (bzip2). --- docs/docs/development/setup.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 2aed91671b4..09f1ece15d2 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -53,7 +53,7 @@ sudo apt install -y \ autoconf \ automake \ build-essential \ - bzip2 \ + bzip2 \ ccache \ device-tree-compiler \ dfu-util \ @@ -95,7 +95,7 @@ sudo apt install -y \ autoconf \ automake \ build-essential \ - bzip2 \ + bzip2 \ ccache \ device-tree-compiler \ dfu-util \ @@ -135,7 +135,7 @@ sudo dnf install -y \ wget \ autoconf \ automake \ - bzip2 \ + bzip2 \ ccache \ dtc \ dfu-util \ From 84a5fec458d031dbba91972c600fffb997949020 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Tue, 15 Jun 2021 10:20:42 +0100 Subject: [PATCH 0070/1130] docs(setup): remove extra slash from Fedora toolchain install command --- docs/docs/development/setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 09f1ece15d2..8d8e779ab55 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -318,7 +318,7 @@ To build firmwares for the ARM architecture (all supported MCUs/keyboards at thi export ZSDK_VERSION=0.11.4 wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-\${ZSDK_VERSION}-setup.run" + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" ``` The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. From 576ce76ad37aae0b3733d537a0992bff8d7e8925 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Tue, 15 Jun 2021 10:24:08 +0100 Subject: [PATCH 0071/1130] docs(setup): fix whitespace in Fedora toolchain install command Aligns Fedora whitespace with Debian. --- docs/docs/development/setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 8d8e779ab55..0786ff5a6ea 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -317,8 +317,8 @@ To build firmwares for the ARM architecture (all supported MCUs/keyboards at thi ``` export ZSDK_VERSION=0.11.4 wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" ``` The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. From 64ea0f25435dc84abc0958e56f6f97dc99af3e28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 05:06:59 +0000 Subject: [PATCH 0072/1130] chore(deps): bump @docusaurus/core in /docs Bumps [@docusaurus/core](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus) from 2.0.0-beta.0 to 2.0.0-beta.1. - [Release notes](https://github.com/facebook/docusaurus/releases) - [Changelog](https://github.com/facebook/docusaurus/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/docusaurus/commits/v2.0.0-beta.1/packages/docusaurus) --- updated-dependencies: - dependency-name: "@docusaurus/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 3121 ++++++++++++++++++++++++++++++++++++---- docs/package.json | 2 +- 2 files changed, 2849 insertions(+), 274 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index b36bf888050..f653632f1bf 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -7,7 +7,7 @@ "": { "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^2.0.0-beta.0", + "@docusaurus/core": "^2.0.0-beta.1", "@docusaurus/preset-classic": "^2.0.0-beta.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", @@ -1648,9 +1648,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.1.tgz", + "integrity": "sha512-WaY/yvVrH+KfY7mRxkXkOb6NbHAZY2h0laJ/Aj/SEkaLazFHMypyFD08c0CJdB7ZjbPP0HDIW7u8EcZuxfg7iw==", "dependencies": { "@babel/core": "^7.12.16", "@babel/generator": "^7.12.15", @@ -1662,47 +1662,49 @@ "@babel/runtime": "^7.12.5", "@babel/runtime-corejs3": "^7.12.13", "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/cssnano-preset": "2.0.0-beta.1", "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-common": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "@slorber/static-site-generator-webpack-plugin": "^4.0.0", "@svgr/webpack": "^5.5.0", "autoprefixer": "^10.2.5", "babel-loader": "^8.2.2", "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", + "boxen": "^5.0.1", + "chalk": "^4.1.1", "chokidar": "^3.5.1", - "clean-css": "^5.1.1", + "clean-css": "^5.1.2", "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", + "copy-webpack-plugin": "^8.1.1", "core-js": "^3.9.1", "css-loader": "^5.1.1", "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", + "cssnano": "^5.0.4", "del": "^6.0.0", "detect-port": "^1.3.0", + "escape-html": "^1.0.3", "eta": "^1.12.1", "express": "^4.17.1", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "github-slugger": "^1.3.0", "globby": "^11.0.2", "html-minifier-terser": "^5.1.1", "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", + "html-webpack-plugin": "^5.3.1", "import-fresh": "^3.3.0", "is-root": "^2.1.0", "leven": "^3.1.0", "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", + "mini-css-extract-plugin": "^1.6.0", "module-alias": "^2.2.2", "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", + "postcss": "^8.2.15", + "postcss-loader": "^5.3.0", + "prompts": "^2.4.1", "react-dev-utils": "^11.0.1", "react-error-overlay": "^6.0.9", "react-helmet": "^6.1.0", @@ -1712,19 +1714,19 @@ "react-router-config": "^5.1.1", "react-router-dom": "^5.2.0", "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", + "rtl-detect": "^1.0.3", "semver": "^7.3.4", "serve-handler": "^6.1.3", "shelljs": "^0.8.4", "std-env": "^2.2.1", "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", + "terser-webpack-plugin": "^5.1.2", + "tslib": "^2.2.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", + "wait-on": "^5.3.0", + "webpack": "^5.37.0", + "webpack-bundle-analyzer": "^4.4.2", "webpack-dev-server": "^3.11.2", "webpack-merge": "^5.7.3", "webpackbar": "^5.0.0-3" @@ -1740,14 +1742,72 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, + "node_modules/@docusaurus/core/node_modules/@docusaurus/types": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", + "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", + "dependencies": { + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.37.0", + "webpack-merge": "^5.7.3" + } + }, + "node_modules/@docusaurus/core/node_modules/@docusaurus/utils": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", + "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.1", + "@types/github-slugger": "^1.3.0", + "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", + "fs-extra": "^10.0.0", + "gray-matter": "^4.0.3", + "lodash": "^4.17.20", + "resolve-pathname": "^3.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/core/node_modules/@docusaurus/utils-validation": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", + "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", + "dependencies": { + "@docusaurus/utils": "2.0.0-beta.1", + "chalk": "^4.1.1", + "joi": "^17.4.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/core/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.1.tgz", + "integrity": "sha512-fGdzw/czGNZgYNWZ0wdD72VVJntYA5cqPFgL3MjDKm5hg58481XP5LsCu3UE/yOsS6XeLey1NJueOGIMVRErKg==", "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" + "cssnano-preset-advanced": "^5.1.1", + "postcss": "^8.2.15", + "postcss-sort-media-queries": "^3.10.11" } }, "node_modules/@docusaurus/mdx-loader": { @@ -1781,26 +1841,90 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog": { + "node_modules/@docusaurus/mdx-loader/node_modules/@docusaurus/core": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", - "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", "@docusaurus/types": "2.0.0-beta.0", "@docusaurus/utils": "2.0.0-beta.0", "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", "chalk": "^4.1.0", - "feed": "^4.2.2", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", "globby": "^11.0.2", - "loader-utils": "^2.0.0", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", "tslib": "^2.1.0", - "webpack": "^5.28.0" + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" }, "engines": { "node": ">=12.13.0" @@ -1810,10 +1934,20 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs": { + "node_modules/@docusaurus/mdx-loader/node_modules/@docusaurus/cssnano-preset": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", - "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", + "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", "dependencies": { "@docusaurus/core": "2.0.0-beta.0", "@docusaurus/mdx-loader": "2.0.0-beta.0", @@ -1821,18 +1955,14 @@ "@docusaurus/utils": "2.0.0-beta.0", "@docusaurus/utils-validation": "2.0.0-beta.0", "chalk": "^4.1.0", - "combine-promises": "^1.1.0", - "execa": "^5.0.0", + "feed": "^4.2.2", "fs-extra": "^9.1.0", "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", + "loader-utils": "^2.0.0", "lodash": "^4.17.20", + "reading-time": "^1.3.0", "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", "tslib": "^2.1.0", - "utility-types": "^3.10.0", "webpack": "^5.28.0" }, "engines": { @@ -1843,66 +1973,90 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { + "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/core": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", - "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", "@docusaurus/types": "2.0.0-beta.0", "@docusaurus/utils": "2.0.0-beta.0", "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.28.0" - }, - "engines": { - "node": ">=12.13.0" + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", - "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "react-json-view": "^1.21.1", - "tslib": "^2.1.0" + "bin": { + "docusaurus": "bin/docusaurus.js" }, "engines": { "node": ">=12.13.0" @@ -1912,27 +2066,40 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-google-analytics": { + "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/cssnano-preset": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", - "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" } }, - "node_modules/@docusaurus/plugin-google-gtag": { + "node_modules/@docusaurus/plugin-content-docs": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", - "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", + "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0" + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "chalk": "^4.1.0", + "combine-promises": "^1.1.0", + "execa": "^5.0.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "import-fresh": "^3.2.2", + "js-yaml": "^4.0.0", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "remark-admonitions": "^1.2.1", + "shelljs": "^0.8.4", + "tslib": "^2.1.0", + "utility-types": "^3.10.0", + "webpack": "^5.28.0" }, "engines": { "node": ">=12.13.0" @@ -1942,18 +2109,90 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-sitemap": { + "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/core": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", - "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", "@docusaurus/types": "2.0.0-beta.0", "@docusaurus/utils": "2.0.0-beta.0", "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", "fs-extra": "^9.1.0", - "sitemap": "^6.3.6", - "tslib": "^2.1.0" + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" }, "engines": { "node": ">=12.13.0" @@ -1963,70 +2202,57 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/preset-classic": { + "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/cssnano-preset": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/plugin-debug": "2.0.0-beta.0", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", - "@docusaurus/plugin-sitemap": "2.0.0-beta.0", - "@docusaurus/theme-classic": "2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "2.0.0-beta.0" - }, - "engines": { - "node": ">=12.13.0" + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "prop-types": "^15.6.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, - "peerDependencies": { - "react": "*" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@docusaurus/theme-classic": { + "node_modules/@docusaurus/plugin-content-pages": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", + "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", "dependencies": { "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/mdx-loader": "2.0.0-beta.0", "@docusaurus/types": "2.0.0-beta.0", "@docusaurus/utils": "2.0.0-beta.0", "@docusaurus/utils-validation": "2.0.0-beta.0", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.0", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.0", - "fs-extra": "^9.1.0", "globby": "^11.0.2", - "infima": "0.2.0-alpha.23", "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.10", - "prism-react-renderer": "^1.1.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", + "tslib": "^2.1.0", + "webpack": "^5.28.0" }, "engines": { "node": ">=12.13.0" @@ -2036,10 +2262,874 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-common": { + "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/core": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", - "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", + "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "react-json-view": "^1.21.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", + "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", + "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", + "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "fs-extra": "^9.1.0", + "sitemap": "^6.3.6", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", + "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/plugin-debug": "2.0.0-beta.0", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", + "@docusaurus/plugin-sitemap": "2.0.0-beta.0", + "@docusaurus/theme-classic": "2.0.0-beta.0", + "@docusaurus/theme-search-algolia": "2.0.0-beta.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "dependencies": { + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", + "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/plugin-content-blog": "2.0.0-beta.0", + "@docusaurus/plugin-content-docs": "2.0.0-beta.0", + "@docusaurus/plugin-content-pages": "2.0.0-beta.0", + "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "chalk": "^4.1.0", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "infima": "0.2.0-alpha.23", + "lodash": "^4.17.20", + "parse-numeric-range": "^1.2.0", + "postcss": "^8.2.10", + "prism-react-renderer": "^1.1.1", + "prismjs": "^1.23.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.2.0", + "rtlcss": "^3.1.2" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", + "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", "dependencies": { "@docusaurus/core": "2.0.0-beta.0", "@docusaurus/plugin-content-blog": "2.0.0-beta.0", @@ -2052,33 +3142,239 @@ "node": ">=12.13.0" }, "peerDependencies": { - "prism-react-renderer": "^1.1.1", + "prism-react-renderer": "^1.1.1", + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "dependencies": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", + "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", + "dependencies": { + "@docsearch/react": "^3.0.0-alpha.33", + "@docusaurus/core": "2.0.0-beta.0", + "@docusaurus/theme-common": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "algoliasearch": "^4.8.4", + "algoliasearch-helper": "^3.3.4", + "clsx": "^1.1.1", + "eta": "^1.12.1", + "lodash": "^4.17.20" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-search-algolia": { + "node_modules/@docusaurus/theme-search-algolia/node_modules/@docusaurus/cssnano-preset": { "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", - "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", "dependencies": { - "@docsearch/react": "^3.0.0-alpha.33", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" } }, "node_modules/@docusaurus/types": { @@ -2112,6 +3408,30 @@ "node": ">=12.13.0" } }, + "node_modules/@docusaurus/utils-common": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.1.tgz", + "integrity": "sha512-Jw9qGpNlqhQnoB5S2T3Iokp9sN6MiOWHwbt/Ud0yPPBuTDVPE1xrosJjAAQDZe3OJvjpp3gdZqXt1hhyQIrOrA==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/utils-common/node_modules/@docusaurus/types": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", + "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", + "dependencies": { + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.37.0", + "webpack-merge": "^5.7.3" + } + }, "node_modules/@docusaurus/utils-validation": { "version": "2.0.0-beta.0", "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", @@ -2416,6 +3736,18 @@ "node": ">=6" } }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", + "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", + "dependencies": { + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.4", + "url": "^0.11.0", + "webpack-sources": "^1.4.3" + } + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", @@ -4867,12 +6199,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.2.tgz", - "integrity": "sha512-Joym8pdrIKqzASYvyTwJ9FpkmEcrYToWKWMGVFSggindrEDOpe+FgNpWhWcv6Z7GDZ4kCC3p7PE/oPSGTc8/kw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", + "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", "dependencies": { "autoprefixer": "^10.2.0", - "cssnano-preset-default": "^5.1.2", + "cssnano-preset-default": "^5.1.3", "postcss-discard-unused": "^5.0.1", "postcss-merge-idents": "^5.0.1", "postcss-reduce-idents": "^5.0.1", @@ -4886,9 +6218,9 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.2.tgz", - "integrity": "sha512-spilp8LRw0sacuxiN9A/dyyPr6G/WISKMBKcBD4NMoPV0ENx4DeuWvIIrSx9PII2nJIDCO3kywkqTPreECBVOg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", "dependencies": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^2.0.1", @@ -4912,9 +6244,9 @@ "postcss-normalize-string": "^5.0.1", "postcss-normalize-timing-functions": "^5.0.1", "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.1", + "postcss-normalize-url": "^5.0.2", "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.1", + "postcss-ordered-values": "^5.0.2", "postcss-reduce-initial": "^5.0.1", "postcss-reduce-transforms": "^5.0.1", "postcss-svgo": "^5.0.2", @@ -10351,9 +11683,9 @@ } }, "node_modules/postcss": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", - "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dependencies": { "colorette": "^1.2.2", "nanoid": "^3.1.23", @@ -10756,12 +12088,12 @@ } }, "node_modules/postcss-normalize-url": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.1.tgz", - "integrity": "sha512-hkbG0j58Z1M830/CJ73VsP7gvlG1yF+4y7Fd1w4tD2c7CaA2Psll+pQ6eQhth9y9EaqZSLzamff/D0MZBMbYSg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "dependencies": { "is-absolute-url": "^3.0.3", - "normalize-url": "^4.5.0", + "normalize-url": "^6.0.1", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -10771,6 +12103,17 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", + "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/postcss-normalize-whitespace": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", @@ -10786,9 +12129,9 @@ } }, "node_modules/postcss-ordered-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.1.tgz", - "integrity": "sha512-6mkCF5BQ25HvEcDfrMHCLLFHlraBSlOXFnQMHYhSpDO/5jSR1k8LdEXOkv+7+uzW6o6tBYea1Km0wQSRkPJkwA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "dependencies": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" @@ -10857,9 +12200,9 @@ } }, "node_modules/postcss-sort-media-queries": { - "version": "3.10.11", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.10.11.tgz", - "integrity": "sha512-78Ak5YSnalr+UTdZa2OCSNAxvEnHg3GRqWccStljJW7MqeU0cJtMA5OzaMmn+upM+iI5vykWzibVEAYaaAlSzw==", + "version": "3.11.12", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", + "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", "dependencies": { "sort-css-media-queries": "1.5.4" }, @@ -10867,7 +12210,7 @@ "node": ">=10.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.3.1" } }, "node_modules/postcss-svgo": { @@ -17362,9 +18705,9 @@ } }, "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.1.tgz", + "integrity": "sha512-WaY/yvVrH+KfY7mRxkXkOb6NbHAZY2h0laJ/Aj/SEkaLazFHMypyFD08c0CJdB7ZjbPP0HDIW7u8EcZuxfg7iw==", "requires": { "@babel/core": "^7.12.16", "@babel/generator": "^7.12.15", @@ -17376,47 +18719,49 @@ "@babel/runtime": "^7.12.5", "@babel/runtime-corejs3": "^7.12.13", "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/cssnano-preset": "2.0.0-beta.1", "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-common": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "@slorber/static-site-generator-webpack-plugin": "^4.0.0", "@svgr/webpack": "^5.5.0", "autoprefixer": "^10.2.5", "babel-loader": "^8.2.2", "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", + "boxen": "^5.0.1", + "chalk": "^4.1.1", "chokidar": "^3.5.1", - "clean-css": "^5.1.1", + "clean-css": "^5.1.2", "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", + "copy-webpack-plugin": "^8.1.1", "core-js": "^3.9.1", "css-loader": "^5.1.1", "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", + "cssnano": "^5.0.4", "del": "^6.0.0", "detect-port": "^1.3.0", + "escape-html": "^1.0.3", "eta": "^1.12.1", "express": "^4.17.1", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "github-slugger": "^1.3.0", "globby": "^11.0.2", "html-minifier-terser": "^5.1.1", "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", + "html-webpack-plugin": "^5.3.1", "import-fresh": "^3.3.0", "is-root": "^2.1.0", "leven": "^3.1.0", "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", + "mini-css-extract-plugin": "^1.6.0", "module-alias": "^2.2.2", "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", + "postcss": "^8.2.15", + "postcss-loader": "^5.3.0", + "prompts": "^2.4.1", "react-dev-utils": "^11.0.1", "react-error-overlay": "^6.0.9", "react-helmet": "^6.1.0", @@ -17426,32 +18771,83 @@ "react-router-config": "^5.1.1", "react-router-dom": "^5.2.0", "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", + "rtl-detect": "^1.0.3", "semver": "^7.3.4", "serve-handler": "^6.1.3", "shelljs": "^0.8.4", "std-env": "^2.2.1", "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", + "terser-webpack-plugin": "^5.1.2", + "tslib": "^2.2.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", + "wait-on": "^5.3.0", + "webpack": "^5.37.0", + "webpack-bundle-analyzer": "^4.4.2", "webpack-dev-server": "^3.11.2", "webpack-merge": "^5.7.3", "webpackbar": "^5.0.0-3" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", + "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", + "requires": { + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.37.0", + "webpack-merge": "^5.7.3" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", + "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", + "requires": { + "@docusaurus/types": "2.0.0-beta.1", + "@types/github-slugger": "^1.3.0", + "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", + "fs-extra": "^10.0.0", + "gray-matter": "^4.0.3", + "lodash": "^4.17.20", + "resolve-pathname": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", + "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", + "requires": { + "@docusaurus/utils": "2.0.0-beta.1", + "chalk": "^4.1.1", + "joi": "^17.4.0", + "tslib": "^2.1.0" + } + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.1.tgz", + "integrity": "sha512-fGdzw/czGNZgYNWZ0wdD72VVJntYA5cqPFgL3MjDKm5hg58481XP5LsCu3UE/yOsS6XeLey1NJueOGIMVRErKg==", "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" + "cssnano-preset-advanced": "^5.1.1", + "postcss": "^8.2.15", + "postcss-sort-media-queries": "^3.10.11" } }, "@docusaurus/mdx-loader": { @@ -17476,6 +18872,101 @@ "unist-util-visit": "^2.0.2", "url-loader": "^4.1.1", "webpack": "^5.28.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/plugin-content-blog": { @@ -17498,6 +18989,101 @@ "remark-admonitions": "^1.2.1", "tslib": "^2.1.0", "webpack": "^5.28.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/plugin-content-docs": { @@ -17526,6 +19112,99 @@ "webpack": "^5.28.0" }, "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -17563,6 +19242,101 @@ "slash": "^3.0.0", "tslib": "^2.1.0", "webpack": "^5.28.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/plugin-debug": { @@ -17575,6 +19349,101 @@ "@docusaurus/utils": "2.0.0-beta.0", "react-json-view": "^1.21.1", "tslib": "^2.1.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/plugin-google-analytics": { @@ -17583,6 +19452,101 @@ "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", "requires": { "@docusaurus/core": "2.0.0-beta.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/plugin-google-gtag": { @@ -17591,6 +19555,101 @@ "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", "requires": { "@docusaurus/core": "2.0.0-beta.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/plugin-sitemap": { @@ -17605,6 +19664,101 @@ "fs-extra": "^9.1.0", "sitemap": "^6.3.6", "tslib": "^2.1.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/preset-classic": { @@ -17622,6 +19776,101 @@ "@docusaurus/plugin-sitemap": "2.0.0-beta.0", "@docusaurus/theme-classic": "2.0.0-beta.0", "@docusaurus/theme-search-algolia": "2.0.0-beta.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/react-loadable": { @@ -17661,6 +19910,101 @@ "prop-types": "^15.7.2", "react-router-dom": "^5.2.0", "rtlcss": "^3.1.2" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/theme-common": { @@ -17674,6 +20018,101 @@ "@docusaurus/plugin-content-pages": "2.0.0-beta.0", "@docusaurus/types": "2.0.0-beta.0", "tslib": "^2.1.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/theme-search-algolia": { @@ -17691,6 +20130,101 @@ "clsx": "^1.1.1", "eta": "^1.12.1", "lodash": "^4.17.20" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", + "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.0", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/utils-validation": "2.0.0-beta.0", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "clean-css": "^5.1.1", + "commander": "^5.1.0", + "copy-webpack-plugin": "^8.1.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^2.0.0", + "cssnano": "^5.0.1", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^9.1.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.2.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.4.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.10", + "postcss-loader": "^5.2.0", + "prompts": "^2.4.0", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.2", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.1", + "tslib": "^2.1.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.2.1", + "webpack": "^5.28.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.7.3", + "webpackbar": "^5.0.0-3" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", + "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "requires": { + "cssnano-preset-advanced": "^5.0.0", + "postcss": "^8.2.10", + "postcss-sort-media-queries": "^3.8.9" + } + } } }, "@docusaurus/types": { @@ -17721,6 +20255,29 @@ "tslib": "^2.1.0" } }, + "@docusaurus/utils-common": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.1.tgz", + "integrity": "sha512-Jw9qGpNlqhQnoB5S2T3Iokp9sN6MiOWHwbt/Ud0yPPBuTDVPE1xrosJjAAQDZe3OJvjpp3gdZqXt1hhyQIrOrA==", + "requires": { + "@docusaurus/types": "2.0.0-beta.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", + "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", + "requires": { + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.37.0", + "webpack-merge": "^5.7.3" + } + } + } + }, "@docusaurus/utils-validation": { "version": "2.0.0-beta.0", "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", @@ -17959,6 +20516,18 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, + "@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", + "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", + "requires": { + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.4", + "url": "^0.11.0", + "webpack-sources": "^1.4.3" + } + }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", @@ -19812,12 +22381,12 @@ } }, "cssnano-preset-advanced": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.2.tgz", - "integrity": "sha512-Joym8pdrIKqzASYvyTwJ9FpkmEcrYToWKWMGVFSggindrEDOpe+FgNpWhWcv6Z7GDZ4kCC3p7PE/oPSGTc8/kw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", + "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", "requires": { "autoprefixer": "^10.2.0", - "cssnano-preset-default": "^5.1.2", + "cssnano-preset-default": "^5.1.3", "postcss-discard-unused": "^5.0.1", "postcss-merge-idents": "^5.0.1", "postcss-reduce-idents": "^5.0.1", @@ -19825,9 +22394,9 @@ } }, "cssnano-preset-default": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.2.tgz", - "integrity": "sha512-spilp8LRw0sacuxiN9A/dyyPr6G/WISKMBKcBD4NMoPV0ENx4DeuWvIIrSx9PII2nJIDCO3kywkqTPreECBVOg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", "requires": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^2.0.1", @@ -19851,9 +22420,9 @@ "postcss-normalize-string": "^5.0.1", "postcss-normalize-timing-functions": "^5.0.1", "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.1", + "postcss-normalize-url": "^5.0.2", "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.1", + "postcss-ordered-values": "^5.0.2", "postcss-reduce-initial": "^5.0.1", "postcss-reduce-transforms": "^5.0.1", "postcss-svgo": "^5.0.2", @@ -23961,9 +26530,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", - "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "requires": { "colorette": "^1.2.2", "nanoid": "^3.1.23", @@ -24201,13 +26770,20 @@ } }, "postcss-normalize-url": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.1.tgz", - "integrity": "sha512-hkbG0j58Z1M830/CJ73VsP7gvlG1yF+4y7Fd1w4tD2c7CaA2Psll+pQ6eQhth9y9EaqZSLzamff/D0MZBMbYSg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "requires": { "is-absolute-url": "^3.0.3", - "normalize-url": "^4.5.0", + "normalize-url": "^6.0.1", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "normalize-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", + "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==" + } } }, "postcss-normalize-whitespace": { @@ -24219,9 +26795,9 @@ } }, "postcss-ordered-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.1.tgz", - "integrity": "sha512-6mkCF5BQ25HvEcDfrMHCLLFHlraBSlOXFnQMHYhSpDO/5jSR1k8LdEXOkv+7+uzW6o6tBYea1Km0wQSRkPJkwA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" @@ -24263,9 +26839,9 @@ } }, "postcss-sort-media-queries": { - "version": "3.10.11", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.10.11.tgz", - "integrity": "sha512-78Ak5YSnalr+UTdZa2OCSNAxvEnHg3GRqWccStljJW7MqeU0cJtMA5OzaMmn+upM+iI5vykWzibVEAYaaAlSzw==", + "version": "3.11.12", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", + "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", "requires": { "sort-css-media-queries": "1.5.4" } @@ -25502,7 +28078,6 @@ "chalk": "^4.1.0", "find-up": "^5.0.0", "mkdirp": "^1.0.4", - "postcss": "^8.2.4", "strip-json-comments": "^3.1.1" }, "dependencies": { diff --git a/docs/package.json b/docs/package.json index 09a8e9fc8f1..03496d091a3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,7 +14,7 @@ "prettier:format": "prettier --write ." }, "dependencies": { - "@docusaurus/core": "^2.0.0-beta.0", + "@docusaurus/core": "^2.0.0-beta.1", "@docusaurus/preset-classic": "^2.0.0-beta.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", From 18c988d7e966815a2f0025d68b08da638b169161 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 16:17:39 +0000 Subject: [PATCH 0073/1130] chore(deps): bump @docusaurus/preset-classic in /docs Bumps [@docusaurus/preset-classic](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-preset-classic) from 2.0.0-beta.0 to 2.0.0-beta.1. - [Release notes](https://github.com/facebook/docusaurus/releases) - [Changelog](https://github.com/facebook/docusaurus/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/docusaurus/commits/v2.0.0-beta.1/packages/docusaurus-preset-classic) --- updated-dependencies: - dependency-name: "@docusaurus/preset-classic" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 3656 ++++++---------------------------------- docs/package.json | 2 +- 2 files changed, 551 insertions(+), 3107 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index f653632f1bf..6957bcba23f 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,7 +8,7 @@ "version": "0.0.0", "dependencies": { "@docusaurus/core": "^2.0.0-beta.1", - "@docusaurus/preset-classic": "^2.0.0-beta.0", + "@docusaurus/preset-classic": "^2.0.0-beta.1", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", @@ -56,118 +56,118 @@ "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz", - "integrity": "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.3.tgz", + "integrity": "sha512-t9yKMfPNxxEUk/PPbZtXj0GCttDk1pk0wV2eA5udIOgf+Wqb/77yH75zz1u8EmCBGPe+FWXjSVT/wS1tlQz7SA==", "dependencies": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.9.3" } }, "node_modules/@algolia/cache-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz", - "integrity": "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.3.tgz", + "integrity": "sha512-4dvzz28ESs7lRHmpBIjlmRloD9oGeD90E2C0QWNQYuAYosSdXGwW7vw4vdGRdPoL32t6u6S+47Bk6Dhcbw2ftA==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz", - "integrity": "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.3.tgz", + "integrity": "sha512-e1eRpP/Ht9qmLw5Sp674N6Y0c59K0L2LBI71EBOlq1j+kVc+JxVO03he5g+nQ7JOwLijyJPrkbm3RvXb5CX0sA==", "dependencies": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.9.3" } }, "node_modules/@algolia/client-account": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz", - "integrity": "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.3.tgz", + "integrity": "sha512-mSF0jiAo/tWKf/Z7mqhz6ETltrl+L+Zt2xuM3W5y1UOZvj47fn2ZcMRce8MQ+dd54t9iA8qIa+0XGlCSQf9lxA==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/client-search": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "node_modules/@algolia/client-analytics": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz", - "integrity": "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.3.tgz", + "integrity": "sha512-Z3EjegxsdTMRmOLoDBnCZJjdL3ZM4J/G7TMe2PIArdCJFWM4iDnO7/MvYasqpK0PPOCHRh0wS4yKG9rZOz6Vsw==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/client-search": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "node_modules/@algolia/client-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz", - "integrity": "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.3.tgz", + "integrity": "sha512-6GAfuNqMrBN3094H0DzvQyxJoKUkyQpEr5OiFhH8I3lihI1rTtjEUrNDTsVp6e9VsR2OCRpnL9EEDv2HcGe8cw==", "dependencies": { - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "node_modules/@algolia/client-recommendation": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz", - "integrity": "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.3.tgz", + "integrity": "sha512-r+MNluwnUTr1tgHWQ5BPRw0A0YJZp9sXjSVxPCY3a+N6BgLaX4E02+FA8VrqVs8uR7mMQSLaJHoeCKnmNPrk9w==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "node_modules/@algolia/client-search": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz", - "integrity": "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.3.tgz", + "integrity": "sha512-8C6woYf6bY4Fh9H9nKY5IDDeBPwQ3nZn9QMQdgUj9ffDU8UzPqSivtLER1A+I81p1j9h+aBADRifwzIYtSXOkA==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "node_modules/@algolia/logger-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz", - "integrity": "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.3.tgz", + "integrity": "sha512-8hGQ5HQvjx2kr7GWOmpON1tcRX2+VHqVg4p+qJqCBsPFlXbAshUyRJkxuen20eem2EAA5Cmmo1fPy/jlqdMMHA==" }, "node_modules/@algolia/logger-console": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz", - "integrity": "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.3.tgz", + "integrity": "sha512-7FGulrAjS/oCVRShKJw5qFuyHOZk/44jolEtNtXvO/tZRR8hPPiow16Vrd3ByRSIhghkC5zj6at4nQhoPK+KqA==", "dependencies": { - "@algolia/logger-common": "4.9.1" + "@algolia/logger-common": "4.9.3" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz", - "integrity": "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.3.tgz", + "integrity": "sha512-hP4YgxcY1kol0d+joXpO4BJuXjgF+vy3eBPk8WCXvZucv8hl5Vqb4BLccDMck+sTqP4Tqglwh/KwVTQrpmi/wA==", "dependencies": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.9.3" } }, "node_modules/@algolia/requester-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz", - "integrity": "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.3.tgz", + "integrity": "sha512-AgUw1iA/JkanZC+dhkSLyeiVgBhaaM3bI20f3cokuuDdz4X6F+hzi0vEpUZrEuNfnMLbUg8gxq3Vcg1/L9+9MA==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz", - "integrity": "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.3.tgz", + "integrity": "sha512-+nz7rRnI9qNcdZjHpyAyvcDLAO9mGobqsAi0aicxMka/szU1HVUX6+pvSOiiOsD8ST3R13rJuufgHfWdDUysQg==", "dependencies": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.9.3" } }, "node_modules/@algolia/transporter": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz", - "integrity": "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.3.tgz", + "integrity": "sha512-oJ68VSSpmUyB9EByqoyx25wgcrO9fgXtjH+pOtKoKmCW+RfxHW5agltJoQ808N8uq/AvP5ugMkRLGL3xf4WdzQ==", "dependencies": { - "@algolia/cache-common": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/requester-common": "4.9.1" + "@algolia/cache-common": "4.9.3", + "@algolia/logger-common": "4.9.3", + "@algolia/requester-common": "4.9.3" } }, "node_modules/@babel/code-frame": { @@ -1742,64 +1742,6 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/core/node_modules/@docusaurus/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", - "dependencies": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.37.0", - "webpack-merge": "^5.7.3" - } - }, - "node_modules/@docusaurus/core/node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", - "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.1", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.0.0", - "gray-matter": "^4.0.3", - "lodash": "^4.17.20", - "resolve-pathname": "^3.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", - "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", - "dependencies": { - "@docusaurus/utils": "2.0.0-beta.1", - "chalk": "^4.1.1", - "joi": "^17.4.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/core/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@docusaurus/cssnano-preset": { "version": "2.0.0-beta.1", "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.1.tgz", @@ -1811,120 +1753,27 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz", - "integrity": "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.1.tgz", + "integrity": "sha512-C6N7L+kb4tT9j0eoYkYHtiurF2YegqfyY8POW5Cn6Tw1X/HNceZu9hX9yiAbdv/oa7PRRdEf6RIvsIFgXWuF0w==", "dependencies": { "@babel/parser": "^7.12.16", "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", "@mdx-js/mdx": "^1.6.21", "@mdx-js/react": "^1.6.21", "escape-html": "^1.0.3", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "github-slugger": "^1.3.0", - "gray-matter": "^4.0.2", + "gray-matter": "^4.0.3", "mdast-util-to-string": "^2.0.0", "remark-emoji": "^2.1.0", "stringify-object": "^3.3.0", "unist-util-visit": "^2.0.2", "url-loader": "^4.1.1", - "webpack": "^5.28.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" + "webpack": "^5.37.0" }, "engines": { "node": ">=12.13.0" @@ -1934,129 +1783,26 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/mdx-loader/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", - "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.1.tgz", + "integrity": "sha512-EEO8RmHl8ipa5FYWiT3lbT26uJ0dta375QE+S/uF72ZP0ulR8kxcTWiAcWxszHmPFtbR/xoSGWgjzkXClgNGMA==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/mdx-loader": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "chalk": "^4.1.1", "feed": "^4.2.2", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "globby": "^11.0.2", "loader-utils": "^2.0.0", "lodash": "^4.17.20", "reading-time": "^1.3.0", "remark-admonitions": "^1.2.1", - "tslib": "^2.1.0", - "webpack": "^5.28.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" + "tslib": "^2.2.0", + "webpack": "^5.37.0" }, "engines": { "node": ">=12.13.0" @@ -2066,30 +1812,20 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", - "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.1.tgz", + "integrity": "sha512-7m5BVBBGAiZl/aaae5IpScKEbMgx3PGZ4VXfLrNqTTUN+u/j0SOVnbpuVb0+XwMyoIgoR6M+UvXRokK1TP+Ykg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/mdx-loader": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "chalk": "^4.1.1", "combine-promises": "^1.1.0", "execa": "^5.0.0", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "globby": "^11.0.2", "import-fresh": "^3.2.2", "js-yaml": "^4.0.0", @@ -2097,9 +1833,9 @@ "lodash": "^4.17.20", "remark-admonitions": "^1.2.1", "shelljs": "^0.8.4", - "tslib": "^2.1.0", + "tslib": "^2.2.0", "utility-types": "^3.10.0", - "webpack": "^5.28.0" + "webpack": "^5.37.0" }, "engines": { "node": ">=12.13.0" @@ -2109,113 +1845,10 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { "minimist": "^1.2.0" }, @@ -2237,876 +1870,22 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", - "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.28.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", - "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "react-json-view": "^1.21.1", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.1.tgz", + "integrity": "sha512-OApBjUHHxbMsylwfzNHQh7QI21y65F2DKfNmHAFdkHuzP7R32YexT/0KQjzLXRJ1p6n4RzqWLhROFRURJVwNMg==", "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/mdx-loader": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", - "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", - "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", - "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "fs-extra": "^9.1.0", - "sitemap": "^6.3.6", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/plugin-debug": "2.0.0-beta.0", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", - "@docusaurus/plugin-sitemap": "2.0.0-beta.0", - "@docusaurus/theme-classic": "2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "2.0.0-beta.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", - "dependencies": { - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.0", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.23", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.10", - "prism-react-renderer": "^1.1.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" + "webpack": "^5.28.0" }, "engines": { "node": ">=12.13.0" @@ -3116,121 +1895,46 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "node_modules/@docusaurus/plugin-debug": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.1.tgz", + "integrity": "sha512-4NlqaFE7IJJpAbcNnK+0ov8740+1whLzQOXSVilHhg0Ip4Y0w8U2B69GtV4cZmvyLT8PQbZjui5/RMCcncRhqQ==", "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", - "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "react-json-view": "^1.21.3", "tslib": "^2.1.0" }, "engines": { "node": ">=12.13.0" }, "peerDependencies": { - "prism-react-renderer": "^1.1.1", "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.1.tgz", + "integrity": "sha512-QC7Kb+trOiCx0Cy2rbGDUTTIffQg3Nolq7wUoTCoZgkJKMqFdQVcZZW4NqKi3CBy3CT/a3sbZDJrbds65y2vQA==", "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" + "@docusaurus/core": "2.0.0-beta.1" }, - "bin": { - "docusaurus": "bin/docusaurus.js" + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.1.tgz", + "integrity": "sha512-giGK+yeZRRJSFhKRBbD9p+iAOvUoNas+s/9DIcd1s/M3RzfDFCnhnLtDOjfpQcTEZVOHnDS+btIQkEBp1faIrw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.1" }, "engines": { "node": ">=12.13.0" @@ -3240,31 +1944,43 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.1.tgz", + "integrity": "sha512-WiSsmfpifp1z+Q97MoBsA362+jwVqi+TGsvSIGKXXTsatRz8fJrJ2jZO1vH0tOcac1lkI8cM/ApO0NYu8Y6qqg==", "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-common": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "fs-extra": "^10.0.0", + "sitemap": "^7.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", - "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", - "dependencies": { - "@docsearch/react": "^3.0.0-alpha.33", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" + "node_modules/@docusaurus/preset-classic": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.1.tgz", + "integrity": "sha512-NjuoJODm4y01Z0KMorMW+jRL5Ap/gQnnYeZKdAZ0oE55SO+0uihaSmJNehJ+17gvSia+UVbCg2q7bWLEeTPlrg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/plugin-content-blog": "2.0.0-beta.1", + "@docusaurus/plugin-content-docs": "2.0.0-beta.1", + "@docusaurus/plugin-content-pages": "2.0.0-beta.1", + "@docusaurus/plugin-debug": "2.0.0-beta.1", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.1", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.1", + "@docusaurus/plugin-sitemap": "2.0.0-beta.1", + "@docusaurus/theme-classic": "2.0.0-beta.1", + "@docusaurus/theme-search-algolia": "2.0.0-beta.1" }, "engines": { "node": ">=12.13.0" @@ -3274,135 +1990,127 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-search-algolia/node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.1.tgz", + "integrity": "sha512-abYWi1xpb+UDMLWUqy49I/2IdPXBfNteh5Yc+QvGSH4rBwaFNVoMoMd70yiV1eKPJ3zzzXRq4qK5/7rnIfSSEg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/plugin-content-blog": "2.0.0-beta.1", + "@docusaurus/plugin-content-docs": "2.0.0-beta.1", + "@docusaurus/plugin-content-pages": "2.0.0-beta.1", + "@docusaurus/theme-common": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-common": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "chalk": "^4.1.1", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.1", + "fs-extra": "^10.0.0", "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", + "infima": "0.2.0-alpha.26", "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", + "parse-numeric-range": "^1.2.0", + "postcss": "^8.2.15", + "prism-react-renderer": "^1.2.1", + "prismjs": "^1.23.0", + "prop-types": "^15.7.2", "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" + "rtlcss": "^3.1.2" }, - "bin": { - "docusaurus": "bin/docusaurus.js" + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.1.tgz", + "integrity": "sha512-i3gWptWsXTxBXCDeHCf9ARVcNlFAJcpmADGMTvNeFq8lAvg7+dFitghOVVDewEL5Hqh5BMrWWwJcOiKeMpCqgQ==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/plugin-content-blog": "2.0.0-beta.1", + "@docusaurus/plugin-content-docs": "2.0.0-beta.1", + "@docusaurus/plugin-content-pages": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "tslib": "^2.1.0" }, "engines": { "node": ">=12.13.0" }, "peerDependencies": { + "prism-react-renderer": "^1.2.1", "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-search-algolia/node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.1.tgz", + "integrity": "sha512-QgtcWXSksxHjky0UUiBZ6llZBlWhd4O8TJ9Aer5P4VtPwC/qKFiQv03ByKbUTjJPAkfPunQ+TQEXEmzlIIwnbA==", "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" + "@docsearch/react": "^3.0.0-alpha.36", + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/theme-common": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "algoliasearch": "^4.8.4", + "algoliasearch-helper": "^3.3.4", + "clsx": "^1.1.1", + "eta": "^1.12.1", + "lodash": "^4.17.20" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz", - "integrity": "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", + "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", "dependencies": { "commander": "^5.1.0", "joi": "^17.4.0", "querystring": "0.2.0", - "webpack": "^5.28.0", + "webpack": "^5.37.0", "webpack-merge": "^5.7.3" } }, "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz", - "integrity": "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", + "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", "dependencies": { - "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.1", "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.0", + "chalk": "^4.1.1", "escape-string-regexp": "^4.0.0", - "fs-extra": "^9.1.0", - "gray-matter": "^4.0.2", + "fs-extra": "^10.0.0", + "gray-matter": "^4.0.3", "lodash": "^4.17.20", "resolve-pathname": "^3.0.0", - "tslib": "^2.1.0" + "tslib": "^2.2.0" }, "engines": { "node": ">=12.13.0" @@ -3414,31 +2122,19 @@ "integrity": "sha512-Jw9qGpNlqhQnoB5S2T3Iokp9sN6MiOWHwbt/Ud0yPPBuTDVPE1xrosJjAAQDZe3OJvjpp3gdZqXt1hhyQIrOrA==", "dependencies": { "@docusaurus/types": "2.0.0-beta.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/utils-common/node_modules/@docusaurus/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", - "dependencies": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.37.0", - "webpack-merge": "^5.7.3" + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", - "integrity": "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", + "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", "dependencies": { - "@docusaurus/utils": "2.0.0-beta.0", - "chalk": "^4.1.0", + "@docusaurus/utils": "2.0.0-beta.1", + "chalk": "^4.1.1", "joi": "^17.4.0", "tslib": "^2.1.0" }, @@ -3446,18 +2142,6 @@ "node": ">=12.13.0" } }, - "node_modules/@endiliey/static-site-generator-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", - "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" - } - }, "node_modules/@eslint/eslintrc": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", @@ -4069,9 +2753,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "node_modules/@types/react": { - "version": "17.0.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.9.tgz", - "integrity": "sha512-2Cw7FvevpJxQrCb+k5t6GH1KIvmadj5uBbjPaLlJB/nZWUj56e1ZqcD6zsoMFB47MsJUTFl9RJ132A7hb3QFJA==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", + "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", "peer": true, "dependencies": { "@types/prop-types": "*", @@ -4332,30 +3016,30 @@ } }, "node_modules/algoliasearch": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz", - "integrity": "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.9.1", - "@algolia/cache-common": "4.9.1", - "@algolia/cache-in-memory": "4.9.1", - "@algolia/client-account": "4.9.1", - "@algolia/client-analytics": "4.9.1", - "@algolia/client-common": "4.9.1", - "@algolia/client-recommendation": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/logger-console": "4.9.1", - "@algolia/requester-browser-xhr": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/requester-node-http": "4.9.1", - "@algolia/transporter": "4.9.1" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.3.tgz", + "integrity": "sha512-VLl9pYXhVB397xTW369sy13qw3m1hHzCfj9zSdeDDYVwTxHiiok/QvhPKAMIzjqyUoY07O8j+941UxYZjugsMQ==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.9.3", + "@algolia/cache-common": "4.9.3", + "@algolia/cache-in-memory": "4.9.3", + "@algolia/client-account": "4.9.3", + "@algolia/client-analytics": "4.9.3", + "@algolia/client-common": "4.9.3", + "@algolia/client-recommendation": "4.9.3", + "@algolia/client-search": "4.9.3", + "@algolia/logger-common": "4.9.3", + "@algolia/logger-console": "4.9.3", + "@algolia/requester-browser-xhr": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/requester-node-http": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "node_modules/algoliasearch-helper": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz", - "integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.3.tgz", + "integrity": "sha512-DtSlOKAJ6TGkQD6u58g6/ABdMmHf3pAj6xVL5hJF+D4z9ldDRf/f5v6puNIxGOlJRwGVvFGyz34beYNqhLDUbQ==", "dependencies": { "events": "^1.1.1" }, @@ -4640,14 +3324,6 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -8208,17 +6884,16 @@ } }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/fs.realpath": { @@ -9273,9 +7948,9 @@ } }, "node_modules/infima": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz", - "integrity": "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==", + "version": "0.2.0-alpha.26", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", + "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==", "engines": { "node": ">=12" } @@ -14351,11 +13026,11 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/sitemap": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz", - "integrity": "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", + "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", "dependencies": { - "@types/node": "^14.14.28", + "@types/node": "^15.0.1", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" @@ -14364,15 +13039,10 @@ "sitemap": "dist/cli.js" }, "engines": { - "node": ">=10.3.0", + "node": ">=12.0.0", "npm": ">=5.6.0" } }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "14.17.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", - "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==" - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -17383,118 +16053,118 @@ "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" }, "@algolia/cache-browser-local-storage": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz", - "integrity": "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.3.tgz", + "integrity": "sha512-t9yKMfPNxxEUk/PPbZtXj0GCttDk1pk0wV2eA5udIOgf+Wqb/77yH75zz1u8EmCBGPe+FWXjSVT/wS1tlQz7SA==", "requires": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.9.3" } }, "@algolia/cache-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz", - "integrity": "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.3.tgz", + "integrity": "sha512-4dvzz28ESs7lRHmpBIjlmRloD9oGeD90E2C0QWNQYuAYosSdXGwW7vw4vdGRdPoL32t6u6S+47Bk6Dhcbw2ftA==" }, "@algolia/cache-in-memory": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz", - "integrity": "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.3.tgz", + "integrity": "sha512-e1eRpP/Ht9qmLw5Sp674N6Y0c59K0L2LBI71EBOlq1j+kVc+JxVO03he5g+nQ7JOwLijyJPrkbm3RvXb5CX0sA==", "requires": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.9.3" } }, "@algolia/client-account": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz", - "integrity": "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.3.tgz", + "integrity": "sha512-mSF0jiAo/tWKf/Z7mqhz6ETltrl+L+Zt2xuM3W5y1UOZvj47fn2ZcMRce8MQ+dd54t9iA8qIa+0XGlCSQf9lxA==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/client-search": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "@algolia/client-analytics": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz", - "integrity": "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.3.tgz", + "integrity": "sha512-Z3EjegxsdTMRmOLoDBnCZJjdL3ZM4J/G7TMe2PIArdCJFWM4iDnO7/MvYasqpK0PPOCHRh0wS4yKG9rZOz6Vsw==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/client-search": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "@algolia/client-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz", - "integrity": "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.3.tgz", + "integrity": "sha512-6GAfuNqMrBN3094H0DzvQyxJoKUkyQpEr5OiFhH8I3lihI1rTtjEUrNDTsVp6e9VsR2OCRpnL9EEDv2HcGe8cw==", "requires": { - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "@algolia/client-recommendation": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz", - "integrity": "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.3.tgz", + "integrity": "sha512-r+MNluwnUTr1tgHWQ5BPRw0A0YJZp9sXjSVxPCY3a+N6BgLaX4E02+FA8VrqVs8uR7mMQSLaJHoeCKnmNPrk9w==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "@algolia/client-search": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz", - "integrity": "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.3.tgz", + "integrity": "sha512-8C6woYf6bY4Fh9H9nKY5IDDeBPwQ3nZn9QMQdgUj9ffDU8UzPqSivtLER1A+I81p1j9h+aBADRifwzIYtSXOkA==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "@algolia/logger-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz", - "integrity": "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.3.tgz", + "integrity": "sha512-8hGQ5HQvjx2kr7GWOmpON1tcRX2+VHqVg4p+qJqCBsPFlXbAshUyRJkxuen20eem2EAA5Cmmo1fPy/jlqdMMHA==" }, "@algolia/logger-console": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz", - "integrity": "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.3.tgz", + "integrity": "sha512-7FGulrAjS/oCVRShKJw5qFuyHOZk/44jolEtNtXvO/tZRR8hPPiow16Vrd3ByRSIhghkC5zj6at4nQhoPK+KqA==", "requires": { - "@algolia/logger-common": "4.9.1" + "@algolia/logger-common": "4.9.3" } }, "@algolia/requester-browser-xhr": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz", - "integrity": "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.3.tgz", + "integrity": "sha512-hP4YgxcY1kol0d+joXpO4BJuXjgF+vy3eBPk8WCXvZucv8hl5Vqb4BLccDMck+sTqP4Tqglwh/KwVTQrpmi/wA==", "requires": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.9.3" } }, "@algolia/requester-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz", - "integrity": "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.3.tgz", + "integrity": "sha512-AgUw1iA/JkanZC+dhkSLyeiVgBhaaM3bI20f3cokuuDdz4X6F+hzi0vEpUZrEuNfnMLbUg8gxq3Vcg1/L9+9MA==" }, "@algolia/requester-node-http": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz", - "integrity": "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.3.tgz", + "integrity": "sha512-+nz7rRnI9qNcdZjHpyAyvcDLAO9mGobqsAi0aicxMka/szU1HVUX6+pvSOiiOsD8ST3R13rJuufgHfWdDUysQg==", "requires": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.9.3" } }, "@algolia/transporter": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz", - "integrity": "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.3.tgz", + "integrity": "sha512-oJ68VSSpmUyB9EByqoyx25wgcrO9fgXtjH+pOtKoKmCW+RfxHW5agltJoQ808N8uq/AvP5ugMkRLGL3xf4WdzQ==", "requires": { - "@algolia/cache-common": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/requester-common": "4.9.1" + "@algolia/cache-common": "4.9.3", + "@algolia/logger-common": "4.9.3", + "@algolia/requester-common": "4.9.3" } }, "@babel/code-frame": { @@ -18787,57 +17457,6 @@ "webpack-dev-server": "^3.11.2", "webpack-merge": "^5.7.3", "webpackbar": "^5.0.0-3" - }, - "dependencies": { - "@docusaurus/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", - "requires": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.37.0", - "webpack-merge": "^5.7.3" - } - }, - "@docusaurus/utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", - "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", - "requires": { - "@docusaurus/types": "2.0.0-beta.1", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.0.0", - "gray-matter": "^4.0.3", - "lodash": "^4.17.20", - "resolve-pathname": "^3.0.0", - "tslib": "^2.2.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", - "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", - "requires": { - "@docusaurus/utils": "2.0.0-beta.1", - "chalk": "^4.1.1", - "joi": "^17.4.0", - "tslib": "^2.1.0" - } - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } } }, "@docusaurus/cssnano-preset": { @@ -18851,255 +17470,65 @@ } }, "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz", - "integrity": "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.1.tgz", + "integrity": "sha512-C6N7L+kb4tT9j0eoYkYHtiurF2YegqfyY8POW5Cn6Tw1X/HNceZu9hX9yiAbdv/oa7PRRdEf6RIvsIFgXWuF0w==", "requires": { "@babel/parser": "^7.12.16", "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", "@mdx-js/mdx": "^1.6.21", "@mdx-js/react": "^1.6.21", "escape-html": "^1.0.3", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "github-slugger": "^1.3.0", - "gray-matter": "^4.0.2", + "gray-matter": "^4.0.3", "mdast-util-to-string": "^2.0.0", "remark-emoji": "^2.1.0", "stringify-object": "^3.3.0", "unist-util-visit": "^2.0.2", "url-loader": "^4.1.1", - "webpack": "^5.28.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } + "webpack": "^5.37.0" } }, "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", - "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.1.tgz", + "integrity": "sha512-EEO8RmHl8ipa5FYWiT3lbT26uJ0dta375QE+S/uF72ZP0ulR8kxcTWiAcWxszHmPFtbR/xoSGWgjzkXClgNGMA==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/mdx-loader": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "chalk": "^4.1.1", "feed": "^4.2.2", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "globby": "^11.0.2", "loader-utils": "^2.0.0", "lodash": "^4.17.20", "reading-time": "^1.3.0", "remark-admonitions": "^1.2.1", - "tslib": "^2.1.0", - "webpack": "^5.28.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } + "tslib": "^2.2.0", + "webpack": "^5.37.0" } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", - "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.1.tgz", + "integrity": "sha512-7m5BVBBGAiZl/aaae5IpScKEbMgx3PGZ4VXfLrNqTTUN+u/j0SOVnbpuVb0+XwMyoIgoR6M+UvXRokK1TP+Ykg==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/mdx-loader": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "chalk": "^4.1.1", "combine-promises": "^1.1.0", "execa": "^5.0.0", - "fs-extra": "^9.1.0", + "fs-extra": "^10.0.0", "globby": "^11.0.2", "import-fresh": "^3.2.2", "js-yaml": "^4.0.0", @@ -19107,104 +17536,11 @@ "lodash": "^4.17.20", "remark-admonitions": "^1.2.1", "shelljs": "^0.8.4", - "tslib": "^2.1.0", + "tslib": "^2.2.0", "utility-types": "^3.10.0", - "webpack": "^5.28.0" + "webpack": "^5.37.0" }, "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -19226,15 +17562,15 @@ } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", - "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.1.tgz", + "integrity": "sha512-OApBjUHHxbMsylwfzNHQh7QI21y65F2DKfNmHAFdkHuzP7R32YexT/0KQjzLXRJ1p6n4RzqWLhROFRURJVwNMg==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/mdx-loader": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", "globby": "^11.0.2", "lodash": "^4.17.20", "minimatch": "^3.0.4", @@ -19242,635 +17578,66 @@ "slash": "^3.0.0", "tslib": "^2.1.0", "webpack": "^5.28.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } } }, "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", - "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "react-json-view": "^1.21.1", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.1.tgz", + "integrity": "sha512-4NlqaFE7IJJpAbcNnK+0ov8740+1whLzQOXSVilHhg0Ip4Y0w8U2B69GtV4cZmvyLT8PQbZjui5/RMCcncRhqQ==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "react-json-view": "^1.21.3", "tslib": "^2.1.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", - "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.1.tgz", + "integrity": "sha512-QC7Kb+trOiCx0Cy2rbGDUTTIffQg3Nolq7wUoTCoZgkJKMqFdQVcZZW4NqKi3CBy3CT/a3sbZDJrbds65y2vQA==", "requires": { - "@docusaurus/core": "2.0.0-beta.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } + "@docusaurus/core": "2.0.0-beta.1" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", - "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.1.tgz", + "integrity": "sha512-giGK+yeZRRJSFhKRBbD9p+iAOvUoNas+s/9DIcd1s/M3RzfDFCnhnLtDOjfpQcTEZVOHnDS+btIQkEBp1faIrw==", "requires": { - "@docusaurus/core": "2.0.0-beta.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } + "@docusaurus/core": "2.0.0-beta.1" } }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", - "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "fs-extra": "^9.1.0", - "sitemap": "^6.3.6", - "tslib": "^2.1.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.1.tgz", + "integrity": "sha512-WiSsmfpifp1z+Q97MoBsA362+jwVqi+TGsvSIGKXXTsatRz8fJrJ2jZO1vH0tOcac1lkI8cM/ApO0NYu8Y6qqg==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-common": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", + "fs-extra": "^10.0.0", + "sitemap": "^7.0.0", + "tslib": "^2.2.0" } }, "@docusaurus/preset-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/plugin-debug": "2.0.0-beta.0", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", - "@docusaurus/plugin-sitemap": "2.0.0-beta.0", - "@docusaurus/theme-classic": "2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "2.0.0-beta.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.1.tgz", + "integrity": "sha512-NjuoJODm4y01Z0KMorMW+jRL5Ap/gQnnYeZKdAZ0oE55SO+0uihaSmJNehJ+17gvSia+UVbCg2q7bWLEeTPlrg==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/plugin-content-blog": "2.0.0-beta.1", + "@docusaurus/plugin-content-docs": "2.0.0-beta.1", + "@docusaurus/plugin-content-pages": "2.0.0-beta.1", + "@docusaurus/plugin-debug": "2.0.0-beta.1", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.1", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.1", + "@docusaurus/plugin-sitemap": "2.0.0-beta.1", + "@docusaurus/theme-classic": "2.0.0-beta.1", + "@docusaurus/theme-search-algolia": "2.0.0-beta.1" } }, "@docusaurus/react-loadable": { @@ -19882,377 +17649,93 @@ } }, "@docusaurus/theme-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.1.tgz", + "integrity": "sha512-abYWi1xpb+UDMLWUqy49I/2IdPXBfNteh5Yc+QvGSH4rBwaFNVoMoMd70yiV1eKPJ3zzzXRq4qK5/7rnIfSSEg==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/plugin-content-blog": "2.0.0-beta.1", + "@docusaurus/plugin-content-docs": "2.0.0-beta.1", + "@docusaurus/plugin-content-pages": "2.0.0-beta.1", + "@docusaurus/theme-common": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-common": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", "@mdx-js/mdx": "^1.6.21", "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.0", + "chalk": "^4.1.1", "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.0", - "fs-extra": "^9.1.0", + "copy-text-to-clipboard": "^3.0.1", + "fs-extra": "^10.0.0", "globby": "^11.0.2", - "infima": "0.2.0-alpha.23", + "infima": "0.2.0-alpha.26", "lodash": "^4.17.20", "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.10", - "prism-react-renderer": "^1.1.1", + "postcss": "^8.2.15", + "prism-react-renderer": "^1.2.1", "prismjs": "^1.23.0", "prop-types": "^15.7.2", "react-router-dom": "^5.2.0", "rtlcss": "^3.1.2" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } } }, "@docusaurus/theme-common": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", - "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.1.tgz", + "integrity": "sha512-i3gWptWsXTxBXCDeHCf9ARVcNlFAJcpmADGMTvNeFq8lAvg7+dFitghOVVDewEL5Hqh5BMrWWwJcOiKeMpCqgQ==", + "requires": { + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/plugin-content-blog": "2.0.0-beta.1", + "@docusaurus/plugin-content-docs": "2.0.0-beta.1", + "@docusaurus/plugin-content-pages": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.1", "tslib": "^2.1.0" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", - "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", - "requires": { - "@docsearch/react": "^3.0.0-alpha.33", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.1.tgz", + "integrity": "sha512-QgtcWXSksxHjky0UUiBZ6llZBlWhd4O8TJ9Aer5P4VtPwC/qKFiQv03ByKbUTjJPAkfPunQ+TQEXEmzlIIwnbA==", + "requires": { + "@docsearch/react": "^3.0.0-alpha.36", + "@docusaurus/core": "2.0.0-beta.1", + "@docusaurus/theme-common": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils-validation": "2.0.0-beta.1", "algoliasearch": "^4.8.4", "algoliasearch-helper": "^3.3.4", "clsx": "^1.1.1", "eta": "^1.12.1", "lodash": "^4.17.20" - }, - "dependencies": { - "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", - "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" - } - } } }, "@docusaurus/types": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz", - "integrity": "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", + "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", "requires": { "commander": "^5.1.0", "joi": "^17.4.0", "querystring": "0.2.0", - "webpack": "^5.28.0", + "webpack": "^5.37.0", "webpack-merge": "^5.7.3" } }, "@docusaurus/utils": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz", - "integrity": "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", + "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", "requires": { - "@docusaurus/types": "2.0.0-beta.0", + "@docusaurus/types": "2.0.0-beta.1", "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.0", + "chalk": "^4.1.1", "escape-string-regexp": "^4.0.0", - "fs-extra": "^9.1.0", - "gray-matter": "^4.0.2", + "fs-extra": "^10.0.0", + "gray-matter": "^4.0.3", "lodash": "^4.17.20", "resolve-pathname": "^3.0.0", - "tslib": "^2.1.0" + "tslib": "^2.2.0" } }, "@docusaurus/utils-common": { @@ -20262,45 +17745,19 @@ "requires": { "@docusaurus/types": "2.0.0-beta.1", "tslib": "^2.2.0" - }, - "dependencies": { - "@docusaurus/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", - "requires": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.37.0", - "webpack-merge": "^5.7.3" - } - } } }, "@docusaurus/utils-validation": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", - "integrity": "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==", + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", + "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", "requires": { - "@docusaurus/utils": "2.0.0-beta.0", - "chalk": "^4.1.0", + "@docusaurus/utils": "2.0.0-beta.1", + "chalk": "^4.1.1", "joi": "^17.4.0", "tslib": "^2.1.0" } }, - "@endiliey/static-site-generator-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", - "requires": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" - } - }, "@eslint/eslintrc": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", @@ -20745,9 +18202,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "17.0.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.9.tgz", - "integrity": "sha512-2Cw7FvevpJxQrCb+k5t6GH1KIvmadj5uBbjPaLlJB/nZWUj56e1ZqcD6zsoMFB47MsJUTFl9RJ132A7hb3QFJA==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", + "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", "peer": true, "requires": { "@types/prop-types": "*", @@ -20980,30 +18437,30 @@ "requires": {} }, "algoliasearch": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz", - "integrity": "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.9.1", - "@algolia/cache-common": "4.9.1", - "@algolia/cache-in-memory": "4.9.1", - "@algolia/client-account": "4.9.1", - "@algolia/client-analytics": "4.9.1", - "@algolia/client-common": "4.9.1", - "@algolia/client-recommendation": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/logger-console": "4.9.1", - "@algolia/requester-browser-xhr": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/requester-node-http": "4.9.1", - "@algolia/transporter": "4.9.1" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.3.tgz", + "integrity": "sha512-VLl9pYXhVB397xTW369sy13qw3m1hHzCfj9zSdeDDYVwTxHiiok/QvhPKAMIzjqyUoY07O8j+941UxYZjugsMQ==", + "requires": { + "@algolia/cache-browser-local-storage": "4.9.3", + "@algolia/cache-common": "4.9.3", + "@algolia/cache-in-memory": "4.9.3", + "@algolia/client-account": "4.9.3", + "@algolia/client-analytics": "4.9.3", + "@algolia/client-common": "4.9.3", + "@algolia/client-recommendation": "4.9.3", + "@algolia/client-search": "4.9.3", + "@algolia/logger-common": "4.9.3", + "@algolia/logger-console": "4.9.3", + "@algolia/requester-browser-xhr": "4.9.3", + "@algolia/requester-common": "4.9.3", + "@algolia/requester-node-http": "4.9.3", + "@algolia/transporter": "4.9.3" } }, "algoliasearch-helper": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz", - "integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.3.tgz", + "integrity": "sha512-DtSlOKAJ6TGkQD6u58g6/ABdMmHf3pAj6xVL5hJF+D4z9ldDRf/f5v6puNIxGOlJRwGVvFGyz34beYNqhLDUbQ==", "requires": { "events": "^1.1.1" } @@ -21208,11 +18665,6 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -23946,11 +21398,10 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -24772,9 +22223,9 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infima": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz", - "integrity": "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==" + "version": "0.2.0-alpha.26", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", + "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==" }, "inflight": { "version": "1.0.6", @@ -28486,21 +25937,14 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "sitemap": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz", - "integrity": "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", + "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", "requires": { - "@types/node": "^14.14.28", + "@types/node": "^15.0.1", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" - }, - "dependencies": { - "@types/node": { - "version": "14.17.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", - "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==" - } } }, "slash": { diff --git a/docs/package.json b/docs/package.json index 03496d091a3..1e9ea8e8c8b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@docusaurus/core": "^2.0.0-beta.1", - "@docusaurus/preset-classic": "^2.0.0-beta.0", + "@docusaurus/preset-classic": "^2.0.0-beta.1", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", From fc014b2506be1e819e4e0c48a7e318f9d7ea6860 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 19:05:42 +0000 Subject: [PATCH 0074/1130] chore(deps-dev): bump eslint from 7.28.0 to 7.29.0 in /docs Bumps [eslint](https://github.com/eslint/eslint) from 7.28.0 to 7.29.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.28.0...v7.29.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 14 +++++++------- docs/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 6957bcba23f..e4c0d5978b7 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -21,7 +21,7 @@ "web-tree-sitter": "^0.17.1" }, "devDependencies": { - "eslint": "^7.25.0", + "eslint": "^7.29.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", @@ -5633,9 +5633,9 @@ } }, "node_modules/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -20428,9 +20428,9 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", diff --git a/docs/package.json b/docs/package.json index 1e9ea8e8c8b..f2fb0008fad 100644 --- a/docs/package.json +++ b/docs/package.json @@ -40,7 +40,7 @@ ] }, "devDependencies": { - "eslint": "^7.25.0", + "eslint": "^7.29.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", From edb3ff1bb15cc2ad800010bd2819a9fe4aec548f Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Thu, 15 Jul 2021 17:34:00 -0500 Subject: [PATCH 0075/1130] feat(boards): Add nice!nano v2 --- app/boards/arm/nice_nano/Kconfig | 2 +- app/boards/arm/nice_nano/Kconfig.board | 4 + app/boards/arm/nice_nano/Kconfig.defconfig | 6 +- app/boards/arm/nice_nano/nice_nano.dts | 95 +---------------- app/boards/arm/nice_nano/nice_nano.dtsi | 100 ++++++++++++++++++ app/boards/arm/nice_nano/nice_nano_v2.dts | 26 +++++ app/boards/arm/nice_nano/nice_nano_v2.yaml | 15 +++ .../arm/nice_nano/nice_nano_v2_defconfig | 20 ++++ 8 files changed, 171 insertions(+), 97 deletions(-) create mode 100644 app/boards/arm/nice_nano/nice_nano.dtsi create mode 100644 app/boards/arm/nice_nano/nice_nano_v2.dts create mode 100644 app/boards/arm/nice_nano/nice_nano_v2.yaml create mode 100644 app/boards/arm/nice_nano/nice_nano_v2_defconfig diff --git a/app/boards/arm/nice_nano/Kconfig b/app/boards/arm/nice_nano/Kconfig index fb5537ab996..0c9fbc79d8a 100644 --- a/app/boards/arm/nice_nano/Kconfig +++ b/app/boards/arm/nice_nano/Kconfig @@ -4,4 +4,4 @@ config BOARD_ENABLE_DCDC bool "Enable DCDC mode" select SOC_DCDC_NRF52X default y - depends on BOARD_NICE_NANO + depends on (BOARD_NICE_NANO || BOARD_NICE_NANO_V2) diff --git a/app/boards/arm/nice_nano/Kconfig.board b/app/boards/arm/nice_nano/Kconfig.board index 4fd394f4070..4a80b448ce3 100644 --- a/app/boards/arm/nice_nano/Kconfig.board +++ b/app/boards/arm/nice_nano/Kconfig.board @@ -7,3 +7,7 @@ config BOARD_NICE_NANO bool "nice!nano" depends on SOC_NRF52840_QIAA +config BOARD_NICE_NANO_V2 + bool "nice!nano v2" + depends on SOC_NRF52840_QIAA + diff --git a/app/boards/arm/nice_nano/Kconfig.defconfig b/app/boards/arm/nice_nano/Kconfig.defconfig index 205050af7ce..0728bf0016d 100644 --- a/app/boards/arm/nice_nano/Kconfig.defconfig +++ b/app/boards/arm/nice_nano/Kconfig.defconfig @@ -1,7 +1,7 @@ -# Copyright (c) 2020 Pete Johanson +# Copyright (c) 2021 The ZMK Contributors # SPDX-License-Identifier: MIT -if BOARD_NICE_NANO +if BOARD_NICE_NANO || BOARD_NICE_NANO_V2 config BOARD default "nice_nano" @@ -28,4 +28,4 @@ config ZMK_USB config ZMK_BATTERY_VOLTAGE_DIVIDER default y -endif # BOARD_NICE_NANO +endif # BOARD_NICE_NANO || BOARD_NICE_NANO_V2 diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index 5efde4b2667..cce3dba65a9 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -1,31 +1,13 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2021 The ZMK Contributors * * SPDX-License-Identifier: MIT */ /dts-v1/; -#include -#include "arduino_pro_micro_pins.dtsi" +#include "nice_nano.dtsi" / { - model = "nice!nano"; - compatible = "nice,nano"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - ext-power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; @@ -40,76 +22,3 @@ full-ohms = <(2000000 + 806000)>; }; }; - -&adc { - status = "okay"; -}; - -&gpiote { - status = "okay"; -}; - -&gpio0 { - status = "okay"; -}; - -&gpio1 { - status = "okay"; -}; - -&i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <17>; - scl-pin = <20>; -}; - -&uart0 { - compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; -}; - -&usbd { - status = "okay"; -}; - - -&flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; -}; diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi new file mode 100644 index 00000000000..45f0e31dd04 --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "nice!nano"; + compatible = "nice,nano"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <17>; + scl-pin = <20>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + tx-pin = <6>; + rx-pin = <8>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts new file mode 100644 index 00000000000..7c044b4df6c --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include "nice_nano.dtsi" + +/ { + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + init-delay-ms = <10>; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc (0x0D - 1)>; + // Multiply ADC result by 5 + full-ohms = <5>; + output-ohms = <1>; + }; +}; diff --git a/app/boards/arm/nice_nano/nice_nano_v2.yaml b/app/boards/arm/nice_nano/nice_nano_v2.yaml new file mode 100644 index 00000000000..d050ce993f9 --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano_v2.yaml @@ -0,0 +1,15 @@ +identifier: nice_nano_v2 +name: nice!nano v2 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/nice_nano/nice_nano_v2_defconfig b/app/boards/arm/nice_nano/nice_nano_v2_defconfig new file mode 100644 index 00000000000..d061e389709 --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano_v2_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NICE_NANO_V2=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y \ No newline at end of file From 9c1319c4ff37f71e7437219b0f65d045c6971e93 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Thu, 15 Jul 2021 17:16:33 -0500 Subject: [PATCH 0076/1130] feat(docs): Add nice!nano v2 to scripts, actions, and documentation asdf asdf asdf --- .github/workflows/build.yml | 5 +++-- docs/docs/hardware.md | 2 +- docs/src/data/power.js | 11 ++++++++++- docs/static/setup.ps1 | 4 ++-- docs/static/setup.sh | 9 +++++---- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d7011283cc4..9345c3c1d16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,6 +20,7 @@ jobs: board: - bluemicro840_v1 - nice_nano + - nice_nano_v2 - nrfmicro_13 - proton_c shield: @@ -69,11 +70,11 @@ jobs: - board: planck_rev6 - board: proton_c shield: clueboard_california - - board: nice_nano + - board: nice_nano_v2 shield: kyria_left cmake-args: -DCONFIG_ZMK_DISPLAY=y skip-archive: true - - board: nice_nano + - board: nice_nano_v2 shield: kyria_right cmake-args: -DCONFIG_ZMK_DISPLAY=y skip-archive: true diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 797acd0200e..210587b34f1 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -15,7 +15,7 @@ That being said, there are currently only a few specific [boards](/docs/faq#what ## Boards -- [nice!nano](https://nicekeyboards.com/products/nice-nano-v1-0) (`nice_nano`) +- [nice!nano](https://nicekeyboards.com/nice-nano) (`nice_nano`, `nice_nano_v2`) - [nrfMicro](https://github.com/joric/nrfmicro) (`nrfmicro_13`, `nrfmicro_11`, `nrfmicro_11_flipped`) - [BlueMicro840](https://store.jpconstantineau.com/#/group/bluemicro) (`bluemicro840_v1`) - [QMK Proton-C](https://qmk.fm/proton-c/) (`proton_c`) diff --git a/docs/src/data/power.js b/docs/src/data/power.js index bf34f17d884..5fe5912c871 100644 --- a/docs/src/data/power.js +++ b/docs/src/data/power.js @@ -37,7 +37,7 @@ export const zmkBase = { */ export const zmkBoards = { "nice!nano": { - name: "nice!nano", + name: "nice!nano v1", powerSupply: { type: "LDO", outputVoltage: 3.3, @@ -45,6 +45,15 @@ export const zmkBoards = { }, otherQuiescentMicroA: 4, }, + "nice!nano v2": { + name: "nice!nano v2", + powerSupply: { + type: "LDO", + outputVoltage: 3.3, + quiescentMicroA: 15, + }, + otherQuiescentMicroA: 3, + }, "nice!60": { powerSupply: { type: "SWITCHING", diff --git a/docs/static/setup.ps1 b/docs/static/setup.ps1 index bcea9f7a953..307b402f3fb 100644 --- a/docs/static/setup.ps1 +++ b/docs/static/setup.ps1 @@ -75,8 +75,8 @@ $repo_path = "https://github.com/zmkfirmware/zmk-config-split-template.git" $title = "ZMK Config Setup:" $prompt = "Pick an MCU board" -$options = "nice!nano", "QMK Proton-C", "BlueMicro840 (v1)", "makerdiary nRF52840 M.2" -$boards = "nice_nano", "proton_c", "bluemicro840_v1", "nrf52840_m2" +$options = "nice!nano v1", "nice!nano v2", "QMK Proton-C", "BlueMicro840 (v1)", "makerdiary nRF52840 M.2" +$boards = "nice_nano", "nice_nano_v2", "proton_c", "bluemicro840_v1", "nrf52840_m2" Write-Host "$title" Write-Host "" diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 2078ff3e7dd..88949f39bc6 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -66,7 +66,7 @@ repo_path="https://github.com/zmkfirmware/zmk-config-split-template.git" title="ZMK Config Setup:" prompt="Pick an MCU board:" -options=("nice!nano" "QMK Proton-C" "BlueMicro840 (v1)" "makerdiary nRF52840 M.2") +options=("nice!nano v1" "nice!nano v2" "QMK Proton-C" "BlueMicro840 (v1)" "makerdiary nRF52840 M.2") echo "$title" echo "" @@ -77,9 +77,10 @@ select opt in "${options[@]}" "Quit"; do case "$REPLY" in 1 ) board="nice_nano"; break;; - 2 ) board="proton_c"; break;; - 3 ) board="bluemicro840_v1"; break;; - 4 ) board="nrf52840_m2"; break;; + 2 ) board="nice_nano_v2" break;; + 3 ) board="proton_c"; break;; + 4 ) board="bluemicro840_v1"; break;; + 5 ) board="nrf52840_m2"; break;; $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; *) echo "Invalid option. Try another one."; continue;; From 71a85a0c8eeef8d5482ee06f7e06bf35cabbbf9b Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 10:56:48 +0100 Subject: [PATCH 0077/1130] feat: bump `zephyr` to `v2.5.0+zmk-fixes` PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/west.yml b/app/west.yml index ca5efad2e22..cab02a5a7f7 100644 --- a/app/west.yml +++ b/app/west.yml @@ -9,7 +9,7 @@ manifest: projects: - name: zephyr remote: zmkfirmware - revision: v2.4.0+zmk-fixes + revision: v2.5.0+zmk-fixes clone-depth: 1 import: # TODO: Rename once upstream offers option like `exclude` or `denylist` From ad981c3bbda0c2f047b6387c41d4b02dd30508e7 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 10:57:33 +0100 Subject: [PATCH 0078/1130] refactor(core): update power API to Zephyr v2.5.0 See: https://github.com/zephyrproject-rtos/zephyr/pull/29410 PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/Kconfig | 5 +---- app/src/power.c | 14 ++++---------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index d83561b702c..f4a316b4339 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -263,11 +263,8 @@ config ZMK_SLEEP if ZMK_SLEEP -config SYS_POWER_DEEP_SLEEP_STATES - default y - choice SYS_PM_POLICY - default SYS_PM_POLICY_APP + default PM_POLICY_APP endchoice config DEVICE_POWER_MANAGEMENT diff --git a/app/src/power.c b/app/src/power.c index 4af18cf4591..47ef3a3b52b 100644 --- a/app/src/power.c +++ b/app/src/power.c @@ -23,18 +23,12 @@ bool is_usb_power_present() { #endif /* CONFIG_USB */ } -enum power_states sys_pm_policy_next_state(int32_t ticks) { -#ifdef CONFIG_SYS_POWER_DEEP_SLEEP_STATES -#ifdef CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1 +struct pm_state_info pm_policy_next_state(int32_t ticks) { if (zmk_activity_get_state() == ZMK_ACTIVITY_SLEEP && !is_usb_power_present()) { - return SYS_POWER_STATE_DEEP_SLEEP_1; + return (struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}; } -#endif /* CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1 */ -#endif /* CONFIG_SYS_POWER_DEEP_SLEEP_STATES */ - return SYS_POWER_STATE_ACTIVE; + return (struct pm_state_info){PM_STATE_ACTIVE, 0, 0}; } -bool sys_pm_policy_low_power_devices(enum power_states pm_state) { - return sys_pm_is_sleep_state(pm_state); -} \ No newline at end of file +__weak bool pm_policy_low_power_devices(enum pm_state state) { return pm_is_sleep_state(state); } From 2a69f31eb0d3af1290152afb1517142100b3316d Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 22 Mar 2021 10:31:55 -0400 Subject: [PATCH 0079/1130] refactor(core): Move away from deprecated DT API. * Move to `DEVICE_DT_INST_DEFINE` everywhere. See: https://docs.zephyrproject.org/2.5.0/releases/release-notes-2.5.html#deprecated-in-this-release PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/drivers/kscan/kscan_composite.c | 6 +++--- app/drivers/kscan/kscan_gpio_demux.c | 6 +++--- app/drivers/kscan/kscan_gpio_direct.c | 6 +++--- app/drivers/kscan/kscan_gpio_matrix.c | 6 +++--- app/drivers/kscan/kscan_mock.c | 6 +++--- .../battery_voltage_divider/battery_voltage_divider.c | 4 ++-- app/drivers/sensor/ec11/ec11.c | 6 +++--- app/src/behaviors/behavior_bt.c | 6 +++--- app/src/behaviors/behavior_ext_power.c | 4 ++-- app/src/behaviors/behavior_hold_tap.c | 8 ++++---- app/src/behaviors/behavior_key_press.c | 6 +++--- app/src/behaviors/behavior_mod_morph.c | 9 +++++---- app/src/behaviors/behavior_momentary_layer.c | 6 +++--- app/src/behaviors/behavior_none.c | 6 +++--- app/src/behaviors/behavior_outputs.c | 4 ++-- app/src/behaviors/behavior_reset.c | 6 +++--- app/src/behaviors/behavior_rgb_underglow.c | 6 +++--- app/src/behaviors/behavior_sensor_rotate_key_press.c | 7 +++---- app/src/behaviors/behavior_sticky_key.c | 6 +++--- app/src/behaviors/behavior_to_layer.c | 4 ++-- app/src/behaviors/behavior_toggle_layer.c | 6 +++--- app/src/behaviors/behavior_transparent.c | 7 +++---- app/src/ext_power_generic.c | 10 ++-------- 23 files changed, 67 insertions(+), 74 deletions(-) diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index d699cfa8cba..2aeb047c871 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -108,6 +108,6 @@ static const struct kscan_composite_config kscan_composite_config = {}; static struct kscan_composite_data kscan_composite_data; -DEVICE_AND_API_INIT(kscan_composite, DT_INST_LABEL(0), kscan_composite_init, &kscan_composite_data, - &kscan_composite_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &mock_driver_api); +DEVICE_DT_INST_DEFINE(0, kscan_composite_init, device_pm_control_nop, &kscan_composite_data, + &kscan_composite_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &mock_driver_api); diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 06a5d277323..3f22797ec33 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -248,9 +248,9 @@ struct kscan_gpio_item_config { .cols = {UTIL_LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, n)}, \ }; \ \ - DEVICE_AND_API_INIT(kscan_gpio_##n, DT_INST_LABEL(n), kscan_gpio_init_##n, \ - &kscan_gpio_data_##n, &kscan_gpio_config_##n, APPLICATION, \ - CONFIG_APPLICATION_INIT_PRIORITY, &gpio_driver_api_##n); + DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, device_pm_control_nop, &kscan_gpio_data_##n, \ + &kscan_gpio_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ + &gpio_driver_api_##n); DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index b68e4fc5901..d810881b73e 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -238,9 +238,9 @@ static const struct kscan_driver_api gpio_driver_api = { .inputs = {UTIL_LISTIFY(INST_INPUT_LEN(n), KSCAN_DIRECT_INPUT_ITEM, n)}, \ .num_of_inputs = INST_INPUT_LEN(n), \ .debounce_period = DT_INST_PROP(n, debounce_period)}; \ - DEVICE_AND_API_INIT(kscan_gpio_##n, DT_INST_LABEL(n), kscan_gpio_init_##n, \ - &kscan_gpio_data_##n, &kscan_gpio_config_##n, POST_KERNEL, \ - CONFIG_ZMK_KSCAN_INIT_PRIORITY, &gpio_driver_api); + DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, device_pm_control_nop, &kscan_gpio_data_##n, \ + &kscan_gpio_config_##n, POST_KERNEL, CONFIG_ZMK_KSCAN_INIT_PRIORITY, \ + &gpio_driver_api); DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 9af3171abf6..698595381a0 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -298,9 +298,9 @@ static int kscan_gpio_config_interrupts(const struct device **devices, .rows = {UTIL_LISTIFY(INST_MATRIX_ROWS(n), _KSCAN_GPIO_ROW_CFG_INIT, n)}, \ .cols = {UTIL_LISTIFY(INST_MATRIX_COLS(n), _KSCAN_GPIO_COL_CFG_INIT, n)}, \ }; \ - DEVICE_AND_API_INIT(kscan_gpio_##n, DT_INST_LABEL(n), kscan_gpio_init_##n, \ - &kscan_gpio_data_##n, &kscan_gpio_config_##n, APPLICATION, \ - CONFIG_APPLICATION_INIT_PRIORITY, &gpio_driver_api_##n); + DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, device_pm_control_nop, &kscan_gpio_data_##n, \ + &kscan_gpio_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ + &gpio_driver_api_##n); DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) diff --git a/app/drivers/kscan/kscan_mock.c b/app/drivers/kscan/kscan_mock.c index fc0c9c5f5b4..8d1545cc73b 100644 --- a/app/drivers/kscan/kscan_mock.c +++ b/app/drivers/kscan/kscan_mock.c @@ -88,8 +88,8 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb static struct kscan_mock_data kscan_mock_data_##n; \ static const struct kscan_mock_config_##n kscan_mock_config_##n = { \ .events = DT_INST_PROP(n, events), .exit_after = DT_INST_PROP(n, exit_after)}; \ - DEVICE_AND_API_INIT(kscan_mock_##n, DT_INST_LABEL(n), kscan_mock_init_##n, \ - &kscan_mock_data_##n, &kscan_mock_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api_##n); + DEVICE_DT_INST_DEFINE(n, kscan_mock_init_##n, device_pm_control_nop, &kscan_mock_data_##n, \ + &kscan_mock_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api_##n); DT_INST_FOREACH_STATUS_OKAY(MOCK_INST_INIT) diff --git a/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c b/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c index c56dab6bcc0..9efd7fbd1f3 100644 --- a/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c +++ b/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c @@ -217,5 +217,5 @@ static const struct bvd_config bvd_cfg = { .full_ohm = DT_INST_PROP(0, full_ohms), }; -DEVICE_AND_API_INIT(bvd_dev, DT_INST_LABEL(0), &bvd_init, &bvd_data, &bvd_cfg, POST_KERNEL, - CONFIG_SENSOR_INIT_PRIORITY, &bvd_api); +DEVICE_DT_INST_DEFINE(0, &bvd_init, device_pm_control_nop, &bvd_data, &bvd_cfg, POST_KERNEL, + CONFIG_SENSOR_INIT_PRIORITY, &bvd_api); diff --git a/app/drivers/sensor/ec11/ec11.c b/app/drivers/sensor/ec11/ec11.c index 38a0578d5ac..14ccc91b76f 100644 --- a/app/drivers/sensor/ec11/ec11.c +++ b/app/drivers/sensor/ec11/ec11.c @@ -142,7 +142,7 @@ int ec11_init(const struct device *dev) { .b_flags = DT_INST_GPIO_FLAGS(n, b_gpios), \ COND_CODE_0(DT_INST_NODE_HAS_PROP(n, resolution), (1), (DT_INST_PROP(n, resolution))), \ }; \ - DEVICE_AND_API_INIT(ec11_##n, DT_INST_LABEL(n), ec11_init, &ec11_data_##n, &ec11_cfg_##n, \ - POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, &ec11_driver_api); + DEVICE_DT_INST_DEFINE(n, ec11_init, device_pm_control_nop, &ec11_data_##n, &ec11_cfg_##n, \ + POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, &ec11_driver_api); -DT_INST_FOREACH_STATUS_OKAY(EC11_INST) \ No newline at end of file +DT_INST_FOREACH_STATUS_OKAY(EC11_INST) diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 9a171e0f5e9..8f7dac94a2d 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -49,7 +49,7 @@ static const struct behavior_driver_api behavior_bt_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_AND_API_INIT(behavior_bt, DT_INST_LABEL(0), behavior_bt_init, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_bt_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ \ No newline at end of file +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index 3ce1e7473fb..fdd890c9b28 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -73,7 +73,7 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_AND_API_INIT(behavior_ext_power, DT_INST_LABEL(0), behavior_ext_power_init, NULL, NULL, - APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_ext_power_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 0b6b587f1ef..02ca5e3a37d 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -605,10 +605,10 @@ static struct behavior_hold_tap_data behavior_hold_tap_data; .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ }; \ - DEVICE_AND_API_INIT(behavior_hold_tap_##n, DT_INST_LABEL(n), behavior_hold_tap_init, \ - &behavior_hold_tap_data, &behavior_hold_tap_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, device_pm_control_nop, \ + &behavior_hold_tap_data, &behavior_hold_tap_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ \ No newline at end of file +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 8282977ee1c..b8d765c7692 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -36,8 +36,8 @@ static const struct behavior_driver_api behavior_key_press_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; #define KP_INST(n) \ - DEVICE_AND_API_INIT(behavior_key_press_##n, DT_INST_LABEL(n), behavior_key_press_init, NULL, \ - NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_key_press_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_key_press_init, device_pm_control_nop, NULL, NULL, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index 36d109b8e0c..9d6eac17cdc 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -90,10 +90,11 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } .mods = DT_INST_PROP(n, mods), \ }; \ static struct behavior_mod_morph_data behavior_mod_morph_data_##n = {}; \ - DEVICE_AND_API_INIT(behavior_mod_morph_##n, DT_INST_LABEL(n), behavior_mod_morph_init, \ - &behavior_mod_morph_data_##n, &behavior_mod_morph_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mod_morph_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_mod_morph_init, device_pm_control_nop, \ + &behavior_mod_morph_data_##n, &behavior_mod_morph_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_mod_morph_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) -#endif \ No newline at end of file +#endif diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index 2b0206d0e71..8259b6c7d9d 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -39,6 +39,6 @@ static const struct behavior_mo_config behavior_mo_config = {}; static struct behavior_mo_data behavior_mo_data; -DEVICE_AND_API_INIT(behavior_mo, DT_INST_LABEL(0), behavior_mo_init, &behavior_mo_data, - &behavior_mo_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_mo_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_mo_init, device_pm_control_nop, &behavior_mo_data, + &behavior_mo_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_mo_driver_api); diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 8b6172ffe27..93c1d1afa9d 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -34,7 +34,7 @@ static const struct behavior_driver_api behavior_none_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_AND_API_INIT(behavior_none, DT_INST_LABEL(0), behavior_none_init, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_none_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ \ No newline at end of file +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index ccaa7200267..f56468a199c 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -42,7 +42,7 @@ static const struct behavior_driver_api behavior_outputs_driver_api = { .binding_pressed = on_keymap_binding_pressed, }; -DEVICE_AND_API_INIT(behavior_out, DT_INST_LABEL(0), behavior_out_init, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_out_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index 95363512c53..e19cf329340 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -41,9 +41,9 @@ static const struct behavior_driver_api behavior_reset_driver_api = { #define RST_INST(n) \ static const struct behavior_reset_config behavior_reset_config_##n = { \ .type = DT_INST_PROP(n, type)}; \ - DEVICE_AND_API_INIT(behavior_reset_##n, DT_INST_LABEL(n), behavior_reset_init, NULL, \ - &behavior_reset_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_reset_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_reset_init, device_pm_control_nop, NULL, \ + &behavior_reset_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_reset_driver_api); DT_INST_FOREACH_STATUS_OKAY(RST_INST) diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 79592cac519..0243b54b79a 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -136,8 +136,8 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_AND_API_INIT(behavior_rgb_underglow, DT_INST_LABEL(0), behavior_rgb_underglow_init, NULL, - NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_rgb_underglow_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_rgb_underglow_init, device_pm_control_nop, NULL, NULL, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_rgb_underglow_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_sensor_rotate_key_press.c b/app/src/behaviors/behavior_sensor_rotate_key_press.c index 589a3a57e91..c5b5a3f015e 100644 --- a/app/src/behaviors/behavior_sensor_rotate_key_press.c +++ b/app/src/behaviors/behavior_sensor_rotate_key_press.c @@ -59,10 +59,9 @@ static const struct behavior_driver_api behavior_sensor_rotate_key_press_driver_ .sensor_binding_triggered = on_sensor_binding_triggered}; #define KP_INST(n) \ - DEVICE_AND_API_INIT(behavior_sensor_rotate_key_press_##n, DT_INST_LABEL(n), \ - behavior_sensor_rotate_key_press_init, NULL, NULL, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_sensor_rotate_key_press_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_sensor_rotate_key_press_init, device_pm_control_nop, NULL, \ + NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_sensor_rotate_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 40ca3f897a6..825ec7a68dd 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -272,9 +272,9 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; .release_after_ms = DT_INST_PROP(n, release_after_ms), \ .quick_release = DT_INST_PROP(n, quick_release), \ }; \ - DEVICE_AND_API_INIT(behavior_sticky_key_##n, DT_INST_LABEL(n), behavior_sticky_key_init, \ - &behavior_sticky_key_data, &behavior_sticky_key_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_sticky_key_init, device_pm_control_nop, \ + &behavior_sticky_key_data, &behavior_sticky_key_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index e68736ef477..a1707fc3d9a 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -37,7 +37,7 @@ static const struct behavior_driver_api behavior_to_driver_api = { .binding_released = to_keymap_binding_released, }; -DEVICE_AND_API_INIT(behavior_to, DT_INST_LABEL(0), behavior_to_init, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_to_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index c922634db5b..384f978a8a0 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -43,8 +43,8 @@ static const struct behavior_tog_config behavior_tog_config = {}; static struct behavior_tog_data behavior_tog_data; -DEVICE_AND_API_INIT(behavior_tog, DT_INST_LABEL(0), behavior_tog_init, &behavior_tog_data, - &behavior_tog_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_tog_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_tog_init, device_pm_control_nop, &behavior_tog_data, + &behavior_tog_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_tog_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index e9d49b21f61..9d4f0dd782b 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -34,8 +34,7 @@ static const struct behavior_driver_api behavior_transparent_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_AND_API_INIT(behavior_transparent, DT_INST_LABEL(0), behavior_transparent_init, NULL, NULL, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_transparent_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_transparent_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ \ No newline at end of file +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 1f2e0d79028..7464d4282e9 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -231,13 +231,7 @@ static const struct ext_power_api api = {.enable = ext_power_generic_enable, #define ZMK_EXT_POWER_INIT_PRIORITY 81 -#ifdef CONFIG_DEVICE_POWER_MANAGEMENT -DEVICE_DEFINE(ext_power_generic, DT_INST_LABEL(0), ext_power_generic_init, - &ext_power_generic_pm_control, &data, &config, POST_KERNEL, - ZMK_EXT_POWER_INIT_PRIORITY, &api); -#else -DEVICE_AND_API_INIT(ext_power_generic, DT_INST_LABEL(0), ext_power_generic_init, &data, &config, - POST_KERNEL, ZMK_EXT_POWER_INIT_PRIORITY, &api); -#endif /* CONFIG_DEVICE_POWER_MANAGEMENT */ +DEVICE_DT_INST_DEFINE(0, ext_power_generic_init, &ext_power_generic_pm_control, &data, &config, + POST_KERNEL, ZMK_EXT_POWER_INIT_PRIORITY, &api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From 6c23bb5c117edddb4a1321c63dfc641d013687b1 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 22 Mar 2021 15:13:06 -0400 Subject: [PATCH 0080/1130] fix(tests): Revert default to previous formatter. * new cbprintf formatter causes issues for our use of string formatting. See: https://github.com/zephyrproject-rtos/zephyr/pull/29876 PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/Kconfig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index f4a316b4339..68363d51677 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -419,6 +419,11 @@ config ZMK_WPM config SENSOR default y +choice CBPRINTF_IMPLEMENTATION + default CBPRINTF_NANO + +endchoice + module = ZMK module-str = zmk source "subsys/logging/Kconfig.template.log_config" From d7475f792fd08a4a1d8fa011526284e979ff039a Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 22 Mar 2021 13:53:11 -0400 Subject: [PATCH 0081/1130] fix(boards): Enable pinmux for bdn9_rev2 by default. See: https://github.com/zephyrproject-rtos/zephyr/issues/28999 PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/boards/arm/bdn9/bdn9_rev2_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/boards/arm/bdn9/bdn9_rev2_defconfig b/app/boards/arm/bdn9/bdn9_rev2_defconfig index 139cf853864..91f54eb4064 100644 --- a/app/boards/arm/bdn9/bdn9_rev2_defconfig +++ b/app/boards/arm/bdn9/bdn9_rev2_defconfig @@ -11,6 +11,9 @@ CONFIG_FPU=y # enable GPIO CONFIG_GPIO=y +# Enable pinmux +CONFIG_PINMUX=y + # Needed to reduce this to size that will fit on F072 CONFIG_HEAP_MEM_POOL_SIZE=1024 From b2d64fe598d562af13ece92deb555af2e2498eaa Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 24 Mar 2021 21:54:41 -0400 Subject: [PATCH 0082/1130] refactor(boards): Switch proton_c to newer pinmux approach. See: https://github.com/zephyrproject-rtos/zephyr/issues/28999 PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/boards/arm/proton_c/CMakeLists.txt | 7 -- .../arm/proton_c/arduino_pro_micro_pins.dtsi | 2 +- app/boards/arm/proton_c/pinmux.c | 67 ------------------- app/boards/arm/proton_c/proton_c.dts | 13 ++++ 4 files changed, 14 insertions(+), 75 deletions(-) delete mode 100644 app/boards/arm/proton_c/CMakeLists.txt delete mode 100644 app/boards/arm/proton_c/pinmux.c diff --git a/app/boards/arm/proton_c/CMakeLists.txt b/app/boards/arm/proton_c/CMakeLists.txt deleted file mode 100644 index 940af1fe057..00000000000 --- a/app/boards/arm/proton_c/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# SPDX-License-Identifier: MIT - -if(CONFIG_PINMUX) -zephyr_library() -zephyr_library_sources(pinmux.c) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) -endif() diff --git a/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi b/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi index 9b2a47575fd..2c32319e386 100644 --- a/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi @@ -48,5 +48,5 @@ }; pro_micro_i2c: &i2c1 {}; -pro_micro_spi: &spi1 {}; +pro_micro_spi: &spi2 {}; pro_micro_serial: &usart1 {}; diff --git a/app/boards/arm/proton_c/pinmux.c b/app/boards/arm/proton_c/pinmux.c deleted file mode 100644 index 4e32b32bf50..00000000000 --- a/app/boards/arm/proton_c/pinmux.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017 I-SENSE group of ICCS - * - * SPDX-License-Identifier: MIT - */ - -#include -#include -#include -#include -#include - -#include - -/* pin assignments for STM32F3DISCOVERY board */ -static const struct pin_config pinconf[] = { -#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart1), okay) && CONFIG_SERIAL - {STM32_PIN_PC4, STM32F3_PINMUX_FUNC_PC4_USART1_TX}, - {STM32_PIN_PC5, STM32F3_PINMUX_FUNC_PC5_USART1_RX}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart2), okay) && CONFIG_SERIAL - {STM32_PIN_PA2, STM32F3_PINMUX_FUNC_PA2_USART2_TX}, - {STM32_PIN_PA3, STM32F3_PINMUX_FUNC_PA3_USART2_RX}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c1), okay) && CONFIG_I2C - {STM32_PIN_PB6, STM32F3_PINMUX_FUNC_PB6_I2C1_SCL}, - {STM32_PIN_PB7, STM32F3_PINMUX_FUNC_PB7_I2C1_SDA}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c2), okay) && CONFIG_I2C - {STM32_PIN_PA9, STM32F3_PINMUX_FUNC_PA9_I2C2_SCL}, - {STM32_PIN_PA10, STM32F3_PINMUX_FUNC_PA10_I2C2_SDA}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi1), okay) && CONFIG_SPI -#ifdef CONFIG_SPI_STM32_USE_HW_SS - {STM32_PIN_PA4, STM32F3_PINMUX_FUNC_PA4_SPI1_NSS}, -#endif /* CONFIG_SPI_STM32_USE_HW_SS */ - {STM32_PIN_PA5, STM32F3_PINMUX_FUNC_PA5_SPI1_SCK}, - {STM32_PIN_PA6, STM32F3_PINMUX_FUNC_PA6_SPI1_MISO}, - {STM32_PIN_PA7, STM32F3_PINMUX_FUNC_PA7_SPI1_MOSI}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi2), okay) && CONFIG_SPI -#ifdef CONFIG_SPI_STM32_USE_HW_SS - {STM32_PIN_PB12, STM32F3_PINMUX_FUNC_PB12_SPI2_NSS}, -#endif /* CONFIG_SPI_STM32_USE_HW_SS */ - {STM32_PIN_PB13, STM32F3_PINMUX_FUNC_PB13_SPI2_SCK}, - {STM32_PIN_PB14, STM32F3_PINMUX_FUNC_PB14_SPI2_MISO}, - {STM32_PIN_PB15, STM32F3_PINMUX_FUNC_PB15_SPI2_MOSI}, -#endif -#ifdef CONFIG_USB_DC_STM32 - {STM32_PIN_PA11, STM32F3_PINMUX_FUNC_PA11_USB_DM}, - {STM32_PIN_PA12, STM32F3_PINMUX_FUNC_PA12_USB_DP}, -#endif /* CONFIG_USB_DC_STM32 */ -#if DT_NODE_HAS_STATUS(DT_NODELABEL(can1), okay) && CONFIG_CAN - {STM32_PIN_PD0, STM32F3_PINMUX_FUNC_PD0_CAN1_RX}, - {STM32_PIN_PD1, STM32F3_PINMUX_FUNC_PD1_CAN1_TX}, -#endif -}; - -static int pinmux_stm32_init(const struct device *port) { - ARG_UNUSED(port); - - stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf)); - - return 0; -} - -SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1, CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY); diff --git a/app/boards/arm/proton_c/proton_c.dts b/app/boards/arm/proton_c/proton_c.dts index 2ec57ad0ef7..5a367d40ac2 100644 --- a/app/boards/arm/proton_c/proton_c.dts +++ b/app/boards/arm/proton_c/proton_c.dts @@ -6,6 +6,7 @@ /dts-v1/; #include +#include #include "arduino_pro_micro_pins.dtsi" / { @@ -26,6 +27,18 @@ }; }; +&usart1 { + pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; +}; + +&spi2 { + pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>; +}; + +&i2c1 { + pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>; +}; + &usb { status = "okay"; }; From 65ff995033eb882c2f09474ff8c50374f7599c6c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 25 Mar 2021 12:29:19 -0400 Subject: [PATCH 0083/1130] fix(display): Avoid fault w/ LVGL API usage. * Increment the tick from within the ISR itself. * Don't call task handler until in the display callback. PR: https://github.com/zmkfirmware/zmk/pull/736 --- app/src/display/main.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/display/main.c b/app/src/display/main.c index b8b4bf5b67d..17d68bf3aea 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -26,14 +26,16 @@ static lv_obj_t *screen; __attribute__((weak)) lv_obj_t *zmk_display_status_screen() { return NULL; } -void display_tick_cb(struct k_work *work) { - lv_tick_inc(10); - lv_task_handler(); -} +void display_tick_cb(struct k_work *work) { lv_task_handler(); } + +#define TICK_MS 10 K_WORK_DEFINE(display_tick_work, display_tick_cb); -void display_timer_cb() { k_work_submit(&display_tick_work); } +void display_timer_cb() { + lv_tick_inc(TICK_MS); + k_work_submit(&display_tick_work); +} K_TIMER_DEFINE(display_timer, display_timer_cb, NULL); @@ -44,7 +46,7 @@ static void start_display_updates() { display_blanking_off(display); - k_timer_start(&display_timer, K_MSEC(10), K_MSEC(10)); + k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS)); } static void stop_display_updates() { @@ -75,8 +77,6 @@ int zmk_display_init() { lv_scr_load(screen); - lv_task_handler(); - start_display_updates(); LOG_DBG(""); From 76979d293ad82f7488bc7bec5a115a8b294e2adc Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 10:33:11 +0100 Subject: [PATCH 0084/1130] docs(setup): bump `ZSDK_VERSION` to `0.12.4` PR: https://github.com/zmkfirmware/zmk/pull/736 --- docs/docs/development/setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 0786ff5a6ea..a6cd6102e52 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -280,7 +280,7 @@ platform. To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: ``` -export ZSDK_VERSION=0.11.4 +export ZSDK_VERSION=0.12.4 wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" @@ -315,7 +315,7 @@ export CROSS_COMPILE=/usr/bin/arm-none-eabi- To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: ``` -export ZSDK_VERSION=0.11.4 +export ZSDK_VERSION=0.12.4 wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" From c03046e54a2cca7bdf3f84b71eba86918c0cd29f Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 11:58:35 +0100 Subject: [PATCH 0085/1130] docs(setup): add `x86_64-linux` to Zephyr SDK setup filename See: zmkfirmware/zmk-docker@b8341e185ab694f7c596b81d03ada34ac76d2f1c PR: https://github.com/zmkfirmware/zmk/pull/736 --- docs/docs/development/setup.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index a6cd6102e52..f4065b87004 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -281,9 +281,9 @@ To build firmwares for the ARM architecture (all supported MCUs/keyboards at thi ``` export ZSDK_VERSION=0.12.4 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" +wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" ``` The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. @@ -316,9 +316,9 @@ To build firmwares for the ARM architecture (all supported MCUs/keyboards at thi ``` export ZSDK_VERSION=0.12.4 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" +wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" ``` The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. From 47043c86e934bd3445d7b4fbd7600f8c198ebf83 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 10:29:42 +0100 Subject: [PATCH 0086/1130] docs: bump Zephyr documentation links to Zephyr v2.5.0 PR: https://github.com/zmkfirmware/zmk/pull/736 --- docs/docs/development/boards-shields-keymaps.md | 10 +++++----- docs/docs/development/build-flash.md | 4 ++-- docs/docs/development/new-shield.md | 2 +- docs/docs/development/setup.md | 14 +++++++------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index e78f5d382a3..4d5397cf260 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -6,7 +6,7 @@ title: Boards, Shields, and Keymaps The foundational elements needed to get a specific keyboard working with ZMK can be broken down into: -- A [KSCAN driver](https://docs.zephyrproject.org/2.3.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. +- A [KSCAN driver](https://docs.zephyrproject.org/2.5.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. - An optional matrix transform, which defines how the KSCAN row/column events are translated into logical "key positions". This is required for non-rectangular keyboards/matrices, where the key positions don't naturally follow the row/columns from the GPIO matrix. - A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. @@ -27,8 +27,8 @@ in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck - A `${board_name}_defconfig` file that forces specific Kconfig settings that are specific to this hardware configuration. Mostly this is SoC settings around the specific hardware configuration. - `${board_name}.dts` which contains all the devicetree definitions, including: - An `#include` line that pulls in the specific microprocessor that is used, e.g. `#include `. - - A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) - - (Optional) A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) + - (Optional) A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `board.cmake` file with CMake directives for how to flash to the device. - A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. @@ -47,6 +47,6 @@ in the `app/boards/shields/${board_name}` directory, e.g. `app/boards/shields/cl - A `Kconfig.shield` that defines the toplevel Kconfig value for the shield, which uses a supplied utility to function to default the value based on the shield list, e.g. `def_bool $(shields_list_contains,clueboard_california)`. - A `Kconfig.defconfig` file to set default values for things like `ZMK_KEYBOARD_NAME` - A `${shield_name}.overlay` file, which is a devicetree overlay file, that includes: - - A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro_a` and `&pro_micro_d` aliases can be used to reference the standard `A#` and `D#` pins in shields. - - (Optional) A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro_a` and `&pro_micro_d` aliases can be used to reference the standard `A#` and `D#` pins in shields. + - (Optional) A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index acabfc07d8c..ecc607c65e8 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -31,7 +31,7 @@ an onboard MCU, or one that uses an MCU board addon. ### Keyboard (Shield) + MCU Board -ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) +ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.5.0/guides/porting/board_porting.html) Given the following: @@ -47,7 +47,7 @@ west build -b proton_c -- -DSHIELD=kyria_left ### Keyboard With Onboard MCU -Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.5.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. Given the following: diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index d82cb8ed461..28904c07079 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -19,7 +19,7 @@ The high level steps are: - Add support for features such as encoders, OLED displays, or RGB underglow. - Update build.yml -It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. +It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. :::note ZMK support for split keyboards requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index f4065b87004..3e5df916c21 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -205,9 +205,9 @@ The docker container includes `west` and the compilation toolchain. If you're us ### West Installation -`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/2.3.0/guides/west/index.html) used to configure and build Zephyr™ applications. +`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/2.5.0/guides/west/index.html) used to configure and build Zephyr™ applications. -West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/latest/guides/west/install.html#installing-west) are summarized here: +West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/2.5.0/guides/west/install.html#installing-west) are summarized here: Because Raspberry OS (Raspbian) runs on the same architecture (but different ABI) as the keyboard MCUs, -the operating system's installed [cross compilers](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI. +the operating system's installed [cross compilers](https://docs.zephyrproject.org/2.5.0/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI. First, the cross compiler should be installed: @@ -328,14 +328,14 @@ The installation will prompt with several questions about installation location, #### GNU ARM Embedded -Since the Zephyr™ SDK is not available for Windows, we recommending following the [Zephyr documentation](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded) to install a GNU ARM Embedded build. Note the warnings regarding installing the toolchain into a path with spaces, and make sure to follow the steps to add the environment variables which are also summarized with screenshots in the [Environment Variables](#environment-variables) section below. +Since the Zephyr™ SDK is not available for Windows, we recommending following the [Zephyr documentation](https://docs.zephyrproject.org/2.5.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded) to install a GNU ARM Embedded build. Note the warnings regarding installing the toolchain into a path with spaces, and make sure to follow the steps to add the environment variables which are also summarized with screenshots in the [Environment Variables](#environment-variables) section below. #### GNU ARM Embedded -Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). +Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.5.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). The install command is: @@ -345,7 +345,7 @@ brew install --cask gcc-arm-embedded :::warning Security Controls Workaround -Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.3.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer +Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.5.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer ::: @@ -514,7 +514,7 @@ On Windows, only two environment variables need to be set for ZMK to build prope #### For Zephyr By default, the Zephyr™ SDK will create a file named `~/.zephyrrc` with the correct environment variables to build ZMK. -We suggest two main [options](https://docs.zephyrproject.org/2.3.0/guides/env_vars.html?highlight=zephyrrc) for how to load those settings. +We suggest two main [options](https://docs.zephyrproject.org/2.5.0/guides/env_vars.html#option-3-using-zephyrrc-files) for how to load those settings. ##### Per Shell From 5542c105ed89a31275bee2217ddb9b7db2d28ac1 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 11:13:14 +0100 Subject: [PATCH 0087/1130] ci: bump `zmk-build-arm` to `2.5` PR: https://github.com/zmkfirmware/zmk/pull/736 --- .github/workflows/build.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9345c3c1d16..36bca31df7b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,7 @@ jobs: build: runs-on: ubuntu-latest container: - image: zmkfirmware/zmk-build-arm:2.4 + image: zmkfirmware/zmk-build-arm:2.5 strategy: matrix: board: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2f7992cec70..1f8e443afd2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: integration_test: runs-on: ubuntu-latest container: - image: zmkfirmware/zmk-build-arm:2.4 + image: zmkfirmware/zmk-build-arm:2.5 steps: - name: Checkout uses: actions/checkout@v2 From 03a39680180a0d459d054193c44228a1987ca11c Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 11:13:35 +0100 Subject: [PATCH 0088/1130] feat(devcontainer): bump `zmk-dev-arm` to `2.5` PR: https://github.com/zmkfirmware/zmk/pull/736 --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 7808779ef6a..40cf129d863 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM zmkfirmware/zmk-dev-arm:2.4 +FROM zmkfirmware/zmk-dev-arm:2.5 COPY .bashrc tmp RUN mv /tmp/.bashrc ~/.bashrc From 6217664bc32b673dc61fcc1825b3ceebe418b44b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 21 Jun 2021 03:19:18 +0000 Subject: [PATCH 0089/1130] feat(docs): Add Zephyr 2.5 blog post. Simple blog post outlining the work done for the Zephyr 2.5 upgrade, and steps needed to make the most of it. Co-authored-by: innovaker <66737976+innovaker@users.noreply.github.com> --- docs/blog/2021-07-17-zephyr-2-5.md | 75 ++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/blog/2021-07-17-zephyr-2-5.md diff --git a/docs/blog/2021-07-17-zephyr-2-5.md b/docs/blog/2021-07-17-zephyr-2-5.md new file mode 100644 index 00000000000..153027bb4cd --- /dev/null +++ b/docs/blog/2021-07-17-zephyr-2-5.md @@ -0,0 +1,75 @@ +--- +title: "Zephyr 2.5 Update" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [firmware, zephyr, core] +--- + +I'm happy to announce that we have completed the [work](https://github.com/zmkfirmware/zmk/pull/736/) to upgrade ZMK to [Zephyr 2.5](https://docs.zephyrproject.org/2.5.0/releases/release-notes-2.5.html)! + +A big part of this work was some _major_ refactors and improvements by [innovaker] to our [zmk-docker](https://github.com/zmkfirmware/zmk-docker/) Docker image and GH Actions automation. + +- Faster build times with improved caching. +- Integration tests which automatically verify new images. +- PRs to the repo now build properly and run the tests as well. +- Build images for multiple target architectures, e.g. `zmk-build-riscv64`, all in parallel. +- Nightly builds to be sure we're pulling in the latest OS/package updates, to ensure we keep our images up to date, address any reported vulnerabilities, etc. +- Faster upgrade paths for future Zephyr SDK and Zephyr versions. + +In addition, [petejohanson] did the upgrade work to adjust ZMK for the Zephyr changes. + +- Updated to newer devicetree/driver Zephyr API +- Adjustment for Zephyr pinmux changes +- Fixes for power management, LVGL, and formatter changes + +## Getting The Changes + +Use the following steps to update to the latest tooling in order to properly use the new ZMK changes: + +### User Config Repositories Using GitHub Actions + +Existing user config repositories using Github Actions to build will pull down Zephyr 2.5 automatically, +and should work, fine as is. However, to upgrade to the newer Docker image, you should: + +- Open `.github/workflows/build.yml` in your editor/IDE +- Change `zmkfirmware/zmk-build-arm:2.4` to `zmkfirmware/zmk-build-arm:2.5` wherever it is found + +:::note + +If you created your user config repository a while ago, you may find that your `build.yml` file instead references +a `zephyr-west-action-arm` custom GitHub Action instead. In this case, the upgrade is not as direct. We suggest that +instead you [re-create your config repository](/docs/user-setup) to get an updated setup using the new automation +approach. + +::: + +### VS Code & Docker (Dev Container) + +If you build locally using VS Code & Docker then: + +- pull the latest ZMK `main` with `git pull` for your ZMK checkout +- reload the project +- if you are prompted to rebuild the remote container, click `Rebuild` +- otherwise, press `F1` and run `Remote Containers: Rebuild Container` +- Once the container has rebuilt and reloaded, run `west update` to pull the updated Zephyr version and its dependencies. + +Once the container has rebuilt, VS Code will be running the 2.5 Docker image. + +### Local Host Development + +The following steps will get you building ZMK locally against Zephyr 2.5: + +- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- pull the latest ZMK `main` with `git pull` for your ZMK checkout +- run `west update` to pull the updated Zephyr version and its dependencies + +From there, you should be ready to build as normal! + +## Thanks! + +Thanks again to [innovaker] for all the hard work, and to all the testers who have helped verify ZMK functionality on the newer Zephyr version. + +[petejohanson]: https://github.com/petejohanson +[innovaker]: https://github.com/innovaker From 13dbbefcb4e6f63b68a36857d65d93cebe133ea3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 17 Jul 2021 21:35:47 -0400 Subject: [PATCH 0090/1130] chore(deps): bump @docusaurus/* to 2.0.0-beta.3 --- docs/package-lock.json | 23085 ++++++++------------------------------- docs/package.json | 4 +- 2 files changed, 4605 insertions(+), 18484 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index e4c0d5978b7..e5560326563 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,202 +1,172 @@ { "name": "docs", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^2.0.0-beta.1", - "@docusaurus/preset-classic": "^2.0.0-beta.1", - "@fortawesome/fontawesome-svg-core": "^1.2.32", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.14", - "classnames": "^2.2.6", - "react": "^17.0.2", - "react-async": "^10.0.1", - "react-copy-to-clipboard": "^5.0.3", - "react-dom": "^17.0.2", - "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.17.1" - }, - "devDependencies": { - "eslint": "^7.29.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-mdx": "^1.13.0", - "eslint-plugin-react": "^7.23.2", - "null-loader": "^4.0.0", - "prettier": "2.3.1", - "string-replace-loader": "^3.0.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz", - "integrity": "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==", - "dependencies": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz", + "integrity": "sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw==", + "requires": { + "@algolia/autocomplete-shared": "1.2.1" } }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz", - "integrity": "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==", - "dependencies": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" - }, - "peerDependencies": { - "@algolia/client-search": "^4.5.1", - "algoliasearch": "^4.5.1" + "@algolia/autocomplete-preset-algolia": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz", + "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", + "requires": { + "@algolia/autocomplete-shared": "1.2.1" } }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz", - "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" + "@algolia/autocomplete-shared": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", + "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.3.tgz", - "integrity": "sha512-t9yKMfPNxxEUk/PPbZtXj0GCttDk1pk0wV2eA5udIOgf+Wqb/77yH75zz1u8EmCBGPe+FWXjSVT/wS1tlQz7SA==", - "dependencies": { - "@algolia/cache-common": "4.9.3" + "@algolia/cache-browser-local-storage": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", + "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", + "requires": { + "@algolia/cache-common": "4.10.3" } }, - "node_modules/@algolia/cache-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.3.tgz", - "integrity": "sha512-4dvzz28ESs7lRHmpBIjlmRloD9oGeD90E2C0QWNQYuAYosSdXGwW7vw4vdGRdPoL32t6u6S+47Bk6Dhcbw2ftA==" + "@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.3.tgz", - "integrity": "sha512-e1eRpP/Ht9qmLw5Sp674N6Y0c59K0L2LBI71EBOlq1j+kVc+JxVO03he5g+nQ7JOwLijyJPrkbm3RvXb5CX0sA==", - "dependencies": { - "@algolia/cache-common": "4.9.3" + "@algolia/cache-in-memory": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", + "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", + "requires": { + "@algolia/cache-common": "4.10.3" } }, - "node_modules/@algolia/client-account": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.3.tgz", - "integrity": "sha512-mSF0jiAo/tWKf/Z7mqhz6ETltrl+L+Zt2xuM3W5y1UOZvj47fn2ZcMRce8MQ+dd54t9iA8qIa+0XGlCSQf9lxA==", - "dependencies": { - "@algolia/client-common": "4.9.3", - "@algolia/client-search": "4.9.3", - "@algolia/transporter": "4.9.3" + "@algolia/client-account": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", + "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/client-analytics": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.3.tgz", - "integrity": "sha512-Z3EjegxsdTMRmOLoDBnCZJjdL3ZM4J/G7TMe2PIArdCJFWM4iDnO7/MvYasqpK0PPOCHRh0wS4yKG9rZOz6Vsw==", - "dependencies": { - "@algolia/client-common": "4.9.3", - "@algolia/client-search": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" + "@algolia/client-analytics": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", + "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/client-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.3.tgz", - "integrity": "sha512-6GAfuNqMrBN3094H0DzvQyxJoKUkyQpEr5OiFhH8I3lihI1rTtjEUrNDTsVp6e9VsR2OCRpnL9EEDv2HcGe8cw==", - "dependencies": { - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" + "@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", + "requires": { + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/client-recommendation": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.3.tgz", - "integrity": "sha512-r+MNluwnUTr1tgHWQ5BPRw0A0YJZp9sXjSVxPCY3a+N6BgLaX4E02+FA8VrqVs8uR7mMQSLaJHoeCKnmNPrk9w==", - "dependencies": { - "@algolia/client-common": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" + "@algolia/client-personalization": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", + "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/client-search": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.3.tgz", - "integrity": "sha512-8C6woYf6bY4Fh9H9nKY5IDDeBPwQ3nZn9QMQdgUj9ffDU8UzPqSivtLER1A+I81p1j9h+aBADRifwzIYtSXOkA==", - "dependencies": { - "@algolia/client-common": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" + "@algolia/client-search": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", + "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/logger-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.3.tgz", - "integrity": "sha512-8hGQ5HQvjx2kr7GWOmpON1tcRX2+VHqVg4p+qJqCBsPFlXbAshUyRJkxuen20eem2EAA5Cmmo1fPy/jlqdMMHA==" + "@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" }, - "node_modules/@algolia/logger-console": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.3.tgz", - "integrity": "sha512-7FGulrAjS/oCVRShKJw5qFuyHOZk/44jolEtNtXvO/tZRR8hPPiow16Vrd3ByRSIhghkC5zj6at4nQhoPK+KqA==", - "dependencies": { - "@algolia/logger-common": "4.9.3" + "@algolia/logger-console": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", + "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", + "requires": { + "@algolia/logger-common": "4.10.3" } }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.3.tgz", - "integrity": "sha512-hP4YgxcY1kol0d+joXpO4BJuXjgF+vy3eBPk8WCXvZucv8hl5Vqb4BLccDMck+sTqP4Tqglwh/KwVTQrpmi/wA==", - "dependencies": { - "@algolia/requester-common": "4.9.3" + "@algolia/requester-browser-xhr": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", + "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", + "requires": { + "@algolia/requester-common": "4.10.3" } }, - "node_modules/@algolia/requester-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.3.tgz", - "integrity": "sha512-AgUw1iA/JkanZC+dhkSLyeiVgBhaaM3bI20f3cokuuDdz4X6F+hzi0vEpUZrEuNfnMLbUg8gxq3Vcg1/L9+9MA==" + "@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" }, - "node_modules/@algolia/requester-node-http": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.3.tgz", - "integrity": "sha512-+nz7rRnI9qNcdZjHpyAyvcDLAO9mGobqsAi0aicxMka/szU1HVUX6+pvSOiiOsD8ST3R13rJuufgHfWdDUysQg==", - "dependencies": { - "@algolia/requester-common": "4.9.3" + "@algolia/requester-node-http": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", + "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", + "requires": { + "@algolia/requester-common": "4.10.3" } }, - "node_modules/@algolia/transporter": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.3.tgz", - "integrity": "sha512-oJ68VSSpmUyB9EByqoyx25wgcrO9fgXtjH+pOtKoKmCW+RfxHW5agltJoQ808N8uq/AvP5ugMkRLGL3xf4WdzQ==", - "dependencies": { - "@algolia/cache-common": "4.9.3", - "@algolia/logger-common": "4.9.3", - "@algolia/requester-common": "4.9.3" + "@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", + "requires": { + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" } }, - "node_modules/@babel/code-frame": { + "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { + "requires": { "@babel/highlight": "^7.12.13" } }, - "node_modules/@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==" + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" }, - "node_modules/@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -204,181 +174,615 @@ "semver": "^6.3.0", "source-map": "^0.5.0" }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/generator": { + "@babel/generator": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dependencies": { + "requires": { "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + }, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", - "dependencies": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", - "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dependencies": { - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } }, - "node_modules/@babel/helper-member-expression-to-functions": { + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-member-expression-to-functions": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dependencies": { + "requires": { "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-module-imports": { + "@babel/helper-module-imports": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dependencies": { + "requires": { "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-module-transforms": { + "@babel/helper-module-transforms": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dependencies": { + "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", @@ -389,16637 +793,2443 @@ "@babel/types": "^7.14.2" } }, - "node_modules/@babel/helper-optimise-call-expression": { + "@babel/helper-optimise-call-expression": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dependencies": { + "requires": { "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-plugin-utils": { + "@babel/helper-plugin-utils": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-replace-supers": { + "@babel/helper-replace-supers": { "version": "7.14.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "dependencies": { + "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", "@babel/types": "^7.14.4" } }, - "node_modules/@babel/helper-simple-access": { + "@babel/helper-simple-access": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dependencies": { + "requires": { "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "requires": { + "@babel/types": "^7.14.5" + }, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-split-export-declaration": { + "@babel/helper-split-export-declaration": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dependencies": { + "requires": { "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-validator-identifier": { + "@babel/helper-validator-identifier": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==" + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz", - "integrity": "sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA==", - "dependencies": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-compilation-targets": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "@babel/plugin-transform-parameters": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + } } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "engines": { - "node": ">=4" + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-syntax-async-generators": { + "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { + "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { + "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { + "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { + "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { + "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { + "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", - "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", - "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", - "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "object.assign": "^4.1.0" + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "object.assign": "^4.1.0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", - "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz", - "integrity": "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz", - "integrity": "sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.12.17" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.4.tgz", - "integrity": "sha512-WYdcGNEO7mCCZ2XzRlxwGj3PgeAr50ifkofOUC/+IN/GzKLB+biDPVBUAQN2C/dVZTvEXCp80kfQ1FFZPrwykQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/plugin-transform-modules-systemjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "requires": { + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", - "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", "dependencies": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-compilation-targets": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.14.3", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.4", - "@babel/plugin-transform-classes": "^7.14.4", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.14.4", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.4", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", - "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.13.12", - "@babel/plugin-transform-react-jsx-development": "^7.12.17", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", - "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", - "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", - "dependencies": { - "core-js-pure": "^3.0.0", - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz", - "integrity": "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" - }, - "node_modules/@docsearch/react": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz", - "integrity": "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==", - "dependencies": { - "@algolia/autocomplete-core": "1.0.0-alpha.44", - "@algolia/autocomplete-preset-algolia": "1.0.0-alpha.44", - "@docsearch/css": "3.0.0-alpha.36", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 18.0.0", - "react": ">= 16.8.0 < 18.0.0", - "react-dom": ">= 16.8.0 < 18.0.0" - } - }, - "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.1.tgz", - "integrity": "sha512-WaY/yvVrH+KfY7mRxkXkOb6NbHAZY2h0laJ/Aj/SEkaLazFHMypyFD08c0CJdB7ZjbPP0HDIW7u8EcZuxfg7iw==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.1", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-common": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "@slorber/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.1", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "clean-css": "^5.1.2", - "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.1", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.4", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.3.1", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.6.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.15", - "postcss-loader": "^5.3.0", - "prompts": "^2.4.1", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.3", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.2", - "tslib": "^2.2.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.3.0", - "webpack": "^5.37.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.1.tgz", - "integrity": "sha512-fGdzw/czGNZgYNWZ0wdD72VVJntYA5cqPFgL3MjDKm5hg58481XP5LsCu3UE/yOsS6XeLey1NJueOGIMVRErKg==", - "dependencies": { - "cssnano-preset-advanced": "^5.1.1", - "postcss": "^8.2.15", - "postcss-sort-media-queries": "^3.10.11" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.1.tgz", - "integrity": "sha512-C6N7L+kb4tT9j0eoYkYHtiurF2YegqfyY8POW5Cn6Tw1X/HNceZu9hX9yiAbdv/oa7PRRdEf6RIvsIFgXWuF0w==", - "dependencies": { - "@babel/parser": "^7.12.16", - "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.3", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.37.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.1.tgz", - "integrity": "sha512-EEO8RmHl8ipa5FYWiT3lbT26uJ0dta375QE+S/uF72ZP0ulR8kxcTWiAcWxszHmPFtbR/xoSGWgjzkXClgNGMA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/mdx-loader": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "chalk": "^4.1.1", - "feed": "^4.2.2", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.2.0", - "webpack": "^5.37.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.1.tgz", - "integrity": "sha512-7m5BVBBGAiZl/aaae5IpScKEbMgx3PGZ4VXfLrNqTTUN+u/j0SOVnbpuVb0+XwMyoIgoR6M+UvXRokK1TP+Ykg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/mdx-loader": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "chalk": "^4.1.1", - "combine-promises": "^1.1.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "tslib": "^2.2.0", - "utility-types": "^3.10.0", - "webpack": "^5.37.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.1.tgz", - "integrity": "sha512-OApBjUHHxbMsylwfzNHQh7QI21y65F2DKfNmHAFdkHuzP7R32YexT/0KQjzLXRJ1p6n4RzqWLhROFRURJVwNMg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/mdx-loader": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.28.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.1.tgz", - "integrity": "sha512-4NlqaFE7IJJpAbcNnK+0ov8740+1whLzQOXSVilHhg0Ip4Y0w8U2B69GtV4cZmvyLT8PQbZjui5/RMCcncRhqQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "react-json-view": "^1.21.3", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.1.tgz", - "integrity": "sha512-QC7Kb+trOiCx0Cy2rbGDUTTIffQg3Nolq7wUoTCoZgkJKMqFdQVcZZW4NqKi3CBy3CT/a3sbZDJrbds65y2vQA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.1.tgz", - "integrity": "sha512-giGK+yeZRRJSFhKRBbD9p+iAOvUoNas+s/9DIcd1s/M3RzfDFCnhnLtDOjfpQcTEZVOHnDS+btIQkEBp1faIrw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.1.tgz", - "integrity": "sha512-WiSsmfpifp1z+Q97MoBsA362+jwVqi+TGsvSIGKXXTsatRz8fJrJ2jZO1vH0tOcac1lkI8cM/ApO0NYu8Y6qqg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-common": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "fs-extra": "^10.0.0", - "sitemap": "^7.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.1.tgz", - "integrity": "sha512-NjuoJODm4y01Z0KMorMW+jRL5Ap/gQnnYeZKdAZ0oE55SO+0uihaSmJNehJ+17gvSia+UVbCg2q7bWLEeTPlrg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/plugin-content-blog": "2.0.0-beta.1", - "@docusaurus/plugin-content-docs": "2.0.0-beta.1", - "@docusaurus/plugin-content-pages": "2.0.0-beta.1", - "@docusaurus/plugin-debug": "2.0.0-beta.1", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.1", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.1", - "@docusaurus/plugin-sitemap": "2.0.0-beta.1", - "@docusaurus/theme-classic": "2.0.0-beta.1", - "@docusaurus/theme-search-algolia": "2.0.0-beta.1" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", - "dependencies": { - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.1.tgz", - "integrity": "sha512-abYWi1xpb+UDMLWUqy49I/2IdPXBfNteh5Yc+QvGSH4rBwaFNVoMoMd70yiV1eKPJ3zzzXRq4qK5/7rnIfSSEg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/plugin-content-blog": "2.0.0-beta.1", - "@docusaurus/plugin-content-docs": "2.0.0-beta.1", - "@docusaurus/plugin-content-pages": "2.0.0-beta.1", - "@docusaurus/theme-common": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-common": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.1", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.26", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.15", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.1.tgz", - "integrity": "sha512-i3gWptWsXTxBXCDeHCf9ARVcNlFAJcpmADGMTvNeFq8lAvg7+dFitghOVVDewEL5Hqh5BMrWWwJcOiKeMpCqgQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/plugin-content-blog": "2.0.0-beta.1", - "@docusaurus/plugin-content-docs": "2.0.0-beta.1", - "@docusaurus/plugin-content-pages": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "prism-react-renderer": "^1.2.1", - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.1.tgz", - "integrity": "sha512-QgtcWXSksxHjky0UUiBZ6llZBlWhd4O8TJ9Aer5P4VtPwC/qKFiQv03ByKbUTjJPAkfPunQ+TQEXEmzlIIwnbA==", - "dependencies": { - "@docsearch/react": "^3.0.0-alpha.36", - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/theme-common": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", - "dependencies": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.37.0", - "webpack-merge": "^5.7.3" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", - "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.1", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.0.0", - "gray-matter": "^4.0.3", - "lodash": "^4.17.20", - "resolve-pathname": "^3.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.1.tgz", - "integrity": "sha512-Jw9qGpNlqhQnoB5S2T3Iokp9sN6MiOWHwbt/Ud0yPPBuTDVPE1xrosJjAAQDZe3OJvjpp3gdZqXt1hhyQIrOrA==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", - "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", - "dependencies": { - "@docusaurus/utils": "2.0.0-beta.1", - "chalk": "^4.1.1", - "joi": "^17.4.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", - "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", - "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", - "dependencies": { - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.32", - "react": ">=16.x" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - }, - "node_modules/@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.15", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", - "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" - }, - "node_modules/@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", - "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/eslint": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", - "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" - }, - "node_modules/@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" - }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - }, - "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" - }, - "node_modules/@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "peer": true - }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "node_modules/@types/react": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", - "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", - "peer": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", - "peer": true - }, - "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz", - "integrity": "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.3.tgz", - "integrity": "sha512-VLl9pYXhVB397xTW369sy13qw3m1hHzCfj9zSdeDDYVwTxHiiok/QvhPKAMIzjqyUoY07O8j+941UxYZjugsMQ==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.9.3", - "@algolia/cache-common": "4.9.3", - "@algolia/cache-in-memory": "4.9.3", - "@algolia/client-account": "4.9.3", - "@algolia/client-analytics": "4.9.3", - "@algolia/client-common": "4.9.3", - "@algolia/client-recommendation": "4.9.3", - "@algolia/client-search": "4.9.3", - "@algolia/logger-common": "4.9.3", - "@algolia/logger-console": "4.9.3", - "@algolia/requester-browser-xhr": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/requester-node-http": "4.9.3", - "@algolia/transporter": "4.9.3" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.3.tgz", - "integrity": "sha512-DtSlOKAJ6TGkQD6u58g6/ABdMmHf3pAj6xVL5hJF+D4z9ldDRf/f5v6puNIxGOlJRwGVvFGyz34beYNqhLDUbQ==", - "dependencies": { - "events": "^1.1.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 5" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "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==", - "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "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": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "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==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", - "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001230", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dependencies": { - "follow-redirects": "^1.10.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", - "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.9.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "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==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/bonjour/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001235", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", - "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" - }, - "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/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==" - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboard": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", - "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", - "optional": true, - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", - "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", - "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz", - "integrity": "sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz", - "integrity": "sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==", - "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.14.0.tgz", - "integrity": "sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", - "dependencies": { - "timsort": "^0.3.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz", - "integrity": "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==", - "dependencies": { - "cssnano": "^5.0.0", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", - "postcss": "^8.2.9", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.5.tgz", - "integrity": "sha512-L2VtPXnq6rmcMC9vkBOP131sZu3ccRQI27ejKZdmQiPDpUlFkUbpXHgKN+cibeO1U4PItxVZp1zTIn5dHsXoyg==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.2", - "is-resolvable": "^1.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", - "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", - "dependencies": { - "autoprefixer": "^10.2.0", - "cssnano-preset-default": "^5.1.3", - "postcss-discard-unused": "^5.0.1", - "postcss-merge-idents": "^5.0.1", - "postcss-reduce-idents": "^5.0.1", - "postcss-zindex": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csso/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "peer": true - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.750", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz", - "integrity": "sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A==" - }, - "node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "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==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", - "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", - "dev": true, - "dependencies": { - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "tslib": "^2.2.0", - "unified": "^9.2.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-markdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", - "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", - "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", - "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.13.0", - "eslint-plugin-markdown": "^2.1.0", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "synckit": "^0.1.5", - "tslib": "^2.2.0", - "unified": "^9.2.1", - "vfile": "^4.2.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz", - "integrity": "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", - "dependencies": { - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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==" - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "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==", - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "dependencies": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "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==", - "optional": true - }, - "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "node_modules/flux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", - "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.0" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "dependencies": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "engines": { - "node": ">=6.11.5", - "yarn": ">=1.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "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/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==" - }, - "node_modules/fork-ts-checker-webpack-plugin/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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/fork-ts-checker-webpack-plugin/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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "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": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "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": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/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==" - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/hpack.js/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-minifier-terser/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==", - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "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/http-proxy-middleware/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==" - }, - "node_modules/http-proxy-middleware/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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/http-proxy-middleware/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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.26", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", - "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "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==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-color-stop/node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "engines": { - "node": "*" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "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": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "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==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "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": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "dev": true, - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/memory-fs/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "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==", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dependencies": { - "lodash.toarray": "^4.4.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "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": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/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==" - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", - "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "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": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "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==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "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": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", - "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", - "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", - "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", - "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", - "dependencies": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", - "dependencies": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", - "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", - "dependencies": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", - "dependencies": { - "is-absolute-url": "^3.0.3", - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", - "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", - "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", - "dependencies": { - "browserslist": "^4.16.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "3.11.12", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", - "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", - "dependencies": { - "sort-css-media-queries": "1.5.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.1" - } - }, - "node_modules/postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", - "dependencies": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/postcss-svgo/node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/postcss-svgo/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/postcss-svgo/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", - "dependencies": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", - "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", - "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", - "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", - "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", - "optionalDependencies": { - "clipboard": "^2.0.0" - } - }, - "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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "peerDependencies": { - "react": ">=16.3.1" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "dependencies": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "dependencies": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/react-dev-utils/node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", - "dependencies": { - "prop-types": "^15.5.0" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", - "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", - "dependencies": { - "clsx": "^1.1.1" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", - "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "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==", - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - } - }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, - "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "node_modules/renderkid": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.6.tgz", - "integrity": "sha512-GIis2GBr/ho0pFNf57D4XM4+PgnQuTii0WCPjEZmZfKivzUfGuRdjN2aQYtYMiNggHmNyBve+thFnNR1iBRcKg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/renderkid/node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "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==", - "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": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "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": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", - "engines": { - "node": "*" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtl-detect": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz", - "integrity": "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" - }, - "node_modules/rtlcss": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.2.0.tgz", - "integrity": "sha512-nV3UmaTmA5TkP2dYOR16ULu6FkMOqZRbiXbFZnmWIN9coPfx3gin31VGOPV7vrVMPjNds7pCS2UYy0mwQUdFCQ==", - "dependencies": { - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "mkdirp": "^1.0.4", - "postcss": "^8.2.4", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "peerDependencies": { - "postcss": "^8.2.4" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "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==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "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==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "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==", - "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/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/sirv": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", - "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", - "dependencies": { - "@polka/url": "^1.0.0-next.15", - "mime": "^2.3.1", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sirv/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", - "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", - "dependencies": { - "@types/node": "^15.0.1", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "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==", - "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==", - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "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==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/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==" - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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==" - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/sort-css-media-queries": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", - "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/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==", - "engines": { - "node": ">=0.10.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==" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "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==", - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/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==" - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "dependencies": { - "ci-info": "^3.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-replace-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", - "integrity": "sha512-MY2VpW7p2V4yLBybj6BcFhmJGU1GjXSDfSz4NrK9BiLK3ttyKXO/WIyOD4UP/b77QUVPG+AKZ7vvpTCNYRAgWg==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "peerDependencies": { - "webpack": "^5" - } - }, - "node_modules/string-replace-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, - "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", - "dependencies": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/svgo/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/synckit": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", - "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", - "dev": true, - "dependencies": { - "tslib": "^2.2.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/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==" - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "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==", - "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": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-essentials": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", - "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" - }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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==", - "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/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "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==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-composed-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", - "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", - "dependencies": { - "ts-essentials": "^2.0.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", - "dependencies": { - "axios": "^0.21.1", - "joi": "^17.3.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^6.6.3" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/web-tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", - "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" - }, - "node_modules/webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", - "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^6.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "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/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "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/webpack-dev-server/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": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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==" - }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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/webpack-dev-server/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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/webpack-dev-server/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==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dependencies": { - "microevent.ts": "~0.1.1" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz", - "integrity": "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==", - "requires": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz", - "integrity": "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==", - "requires": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz", - "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.3.tgz", - "integrity": "sha512-t9yKMfPNxxEUk/PPbZtXj0GCttDk1pk0wV2eA5udIOgf+Wqb/77yH75zz1u8EmCBGPe+FWXjSVT/wS1tlQz7SA==", - "requires": { - "@algolia/cache-common": "4.9.3" - } - }, - "@algolia/cache-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.3.tgz", - "integrity": "sha512-4dvzz28ESs7lRHmpBIjlmRloD9oGeD90E2C0QWNQYuAYosSdXGwW7vw4vdGRdPoL32t6u6S+47Bk6Dhcbw2ftA==" - }, - "@algolia/cache-in-memory": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.3.tgz", - "integrity": "sha512-e1eRpP/Ht9qmLw5Sp674N6Y0c59K0L2LBI71EBOlq1j+kVc+JxVO03he5g+nQ7JOwLijyJPrkbm3RvXb5CX0sA==", - "requires": { - "@algolia/cache-common": "4.9.3" - } - }, - "@algolia/client-account": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.3.tgz", - "integrity": "sha512-mSF0jiAo/tWKf/Z7mqhz6ETltrl+L+Zt2xuM3W5y1UOZvj47fn2ZcMRce8MQ+dd54t9iA8qIa+0XGlCSQf9lxA==", - "requires": { - "@algolia/client-common": "4.9.3", - "@algolia/client-search": "4.9.3", - "@algolia/transporter": "4.9.3" - } - }, - "@algolia/client-analytics": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.3.tgz", - "integrity": "sha512-Z3EjegxsdTMRmOLoDBnCZJjdL3ZM4J/G7TMe2PIArdCJFWM4iDnO7/MvYasqpK0PPOCHRh0wS4yKG9rZOz6Vsw==", - "requires": { - "@algolia/client-common": "4.9.3", - "@algolia/client-search": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" - } - }, - "@algolia/client-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.3.tgz", - "integrity": "sha512-6GAfuNqMrBN3094H0DzvQyxJoKUkyQpEr5OiFhH8I3lihI1rTtjEUrNDTsVp6e9VsR2OCRpnL9EEDv2HcGe8cw==", - "requires": { - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" - } - }, - "@algolia/client-recommendation": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.3.tgz", - "integrity": "sha512-r+MNluwnUTr1tgHWQ5BPRw0A0YJZp9sXjSVxPCY3a+N6BgLaX4E02+FA8VrqVs8uR7mMQSLaJHoeCKnmNPrk9w==", - "requires": { - "@algolia/client-common": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" - } - }, - "@algolia/client-search": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.3.tgz", - "integrity": "sha512-8C6woYf6bY4Fh9H9nKY5IDDeBPwQ3nZn9QMQdgUj9ffDU8UzPqSivtLER1A+I81p1j9h+aBADRifwzIYtSXOkA==", - "requires": { - "@algolia/client-common": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/transporter": "4.9.3" - } - }, - "@algolia/logger-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.3.tgz", - "integrity": "sha512-8hGQ5HQvjx2kr7GWOmpON1tcRX2+VHqVg4p+qJqCBsPFlXbAshUyRJkxuen20eem2EAA5Cmmo1fPy/jlqdMMHA==" - }, - "@algolia/logger-console": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.3.tgz", - "integrity": "sha512-7FGulrAjS/oCVRShKJw5qFuyHOZk/44jolEtNtXvO/tZRR8hPPiow16Vrd3ByRSIhghkC5zj6at4nQhoPK+KqA==", - "requires": { - "@algolia/logger-common": "4.9.3" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.3.tgz", - "integrity": "sha512-hP4YgxcY1kol0d+joXpO4BJuXjgF+vy3eBPk8WCXvZucv8hl5Vqb4BLccDMck+sTqP4Tqglwh/KwVTQrpmi/wA==", - "requires": { - "@algolia/requester-common": "4.9.3" - } - }, - "@algolia/requester-common": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.3.tgz", - "integrity": "sha512-AgUw1iA/JkanZC+dhkSLyeiVgBhaaM3bI20f3cokuuDdz4X6F+hzi0vEpUZrEuNfnMLbUg8gxq3Vcg1/L9+9MA==" - }, - "@algolia/requester-node-http": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.3.tgz", - "integrity": "sha512-+nz7rRnI9qNcdZjHpyAyvcDLAO9mGobqsAi0aicxMka/szU1HVUX6+pvSOiiOsD8ST3R13rJuufgHfWdDUysQg==", - "requires": { - "@algolia/requester-common": "4.9.3" - } - }, - "@algolia/transporter": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.3.tgz", - "integrity": "sha512-oJ68VSSpmUyB9EByqoyx25wgcrO9fgXtjH+pOtKoKmCW+RfxHW5agltJoQ808N8uq/AvP5ugMkRLGL3xf4WdzQ==", - "requires": { - "@algolia/cache-common": "4.9.3", - "@algolia/logger-common": "4.9.3", - "@algolia/requester-common": "4.9.3" - } - }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==" - }, - "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", - "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "requires": { - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==" - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz", - "integrity": "sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA==", - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-compilation-targets": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", - "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", - "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", - "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "requires": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" }, "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "object.assign": "^4.1.0" + "color-convert": "^1.9.0" } - } - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "object.assign": "^4.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } - } - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "object.assign": "^4.1.0" + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" } } } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - } - }, "@babel/plugin-transform-parameters": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", @@ -17029,87 +3239,178 @@ } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", - "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", + "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-react-display-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz", - "integrity": "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-react-jsx": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz", - "integrity": "sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.17" + "@babel/plugin-transform-react-jsx": "^7.14.5" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" }, "dependencies": { + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -17118,101 +3419,157 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-typescript": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.4.tgz", - "integrity": "sha512-WYdcGNEO7mCCZ2XzRlxwGj3PgeAr50ifkofOUC/+IN/GzKLB+biDPVBUAQN2C/dVZTvEXCp80kfQ1FFZPrwykQ==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/preset-env": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", - "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-compilation-targets": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.14.3", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -17222,49 +3579,76 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.4", - "@babel/plugin-transform-classes": "^7.14.4", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.14.4", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.4", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", "semver": "^6.3.0" }, "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -17285,42 +3669,56 @@ } }, "@babel/preset-react": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", - "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.13.12", - "@babel/plugin-transform-react-jsx-development": "^7.12.17", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/preset-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", - "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", + "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } } }, "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", - "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", "requires": { - "core-js-pure": "^3.0.0", + "core-js-pure": "^3.15.0", "regenerator-runtime": "^0.13.4" } }, @@ -17359,25 +3757,25 @@ } }, "@docsearch/css": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz", - "integrity": "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", + "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" }, "@docsearch/react": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz", - "integrity": "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==", + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", + "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", "requires": { - "@algolia/autocomplete-core": "1.0.0-alpha.44", - "@algolia/autocomplete-preset-algolia": "1.0.0-alpha.44", - "@docsearch/css": "3.0.0-alpha.36", + "@algolia/autocomplete-core": "1.2.1", + "@algolia/autocomplete-preset-algolia": "1.2.1", + "@docsearch/css": "3.0.0-alpha.37", "algoliasearch": "^4.0.0" } }, "@docusaurus/core": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.1.tgz", - "integrity": "sha512-WaY/yvVrH+KfY7mRxkXkOb6NbHAZY2h0laJ/Aj/SEkaLazFHMypyFD08c0CJdB7ZjbPP0HDIW7u8EcZuxfg7iw==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", + "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", "requires": { "@babel/core": "^7.12.16", "@babel/generator": "^7.12.15", @@ -17389,12 +3787,12 @@ "@babel/runtime": "^7.12.5", "@babel/runtime-corejs3": "^7.12.13", "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.1", + "@docusaurus/cssnano-preset": "2.0.0-beta.3", "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-common": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "@slorber/static-site-generator-webpack-plugin": "^4.0.0", "@svgr/webpack": "^5.5.0", "autoprefixer": "^10.2.5", @@ -17405,10 +3803,10 @@ "chokidar": "^3.5.1", "clean-css": "^5.1.2", "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.1", + "copy-webpack-plugin": "^9.0.0", "core-js": "^3.9.1", "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", + "css-minimizer-webpack-plugin": "^3.0.1", "cssnano": "^5.0.4", "del": "^6.0.0", "detect-port": "^1.3.0", @@ -17421,7 +3819,7 @@ "globby": "^11.0.2", "html-minifier-terser": "^5.1.1", "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.3.1", + "html-webpack-plugin": "^5.3.2", "import-fresh": "^3.3.0", "is-root": "^2.1.0", "leven": "^3.1.0", @@ -17447,22 +3845,22 @@ "shelljs": "^0.8.4", "std-env": "^2.2.1", "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.2", + "terser-webpack-plugin": "^5.1.3", "tslib": "^2.2.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", "wait-on": "^5.3.0", - "webpack": "^5.37.0", + "webpack": "^5.40.0", "webpack-bundle-analyzer": "^4.4.2", "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", + "webpack-merge": "^5.8.0", "webpackbar": "^5.0.0-3" } }, "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.1.tgz", - "integrity": "sha512-fGdzw/czGNZgYNWZ0wdD72VVJntYA5cqPFgL3MjDKm5hg58481XP5LsCu3UE/yOsS6XeLey1NJueOGIMVRErKg==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", + "integrity": "sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA==", "requires": { "cssnano-preset-advanced": "^5.1.1", "postcss": "^8.2.15", @@ -17470,14 +3868,14 @@ } }, "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.1.tgz", - "integrity": "sha512-C6N7L+kb4tT9j0eoYkYHtiurF2YegqfyY8POW5Cn6Tw1X/HNceZu9hX9yiAbdv/oa7PRRdEf6RIvsIFgXWuF0w==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz", + "integrity": "sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ==", "requires": { "@babel/parser": "^7.12.16", "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", "@mdx-js/mdx": "^1.6.21", "@mdx-js/react": "^1.6.21", "escape-html": "^1.0.3", @@ -17490,20 +3888,21 @@ "stringify-object": "^3.3.0", "unist-util-visit": "^2.0.2", "url-loader": "^4.1.1", - "webpack": "^5.37.0" + "webpack": "^5.40.0" } }, "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.1.tgz", - "integrity": "sha512-EEO8RmHl8ipa5FYWiT3lbT26uJ0dta375QE+S/uF72ZP0ulR8kxcTWiAcWxszHmPFtbR/xoSGWgjzkXClgNGMA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/mdx-loader": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", + "integrity": "sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", "feed": "^4.2.2", "fs-extra": "^10.0.0", "globby": "^11.0.2", @@ -17512,21 +3911,22 @@ "reading-time": "^1.3.0", "remark-admonitions": "^1.2.1", "tslib": "^2.2.0", - "webpack": "^5.37.0" + "webpack": "^5.40.0" } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.1.tgz", - "integrity": "sha512-7m5BVBBGAiZl/aaae5IpScKEbMgx3PGZ4VXfLrNqTTUN+u/j0SOVnbpuVb0+XwMyoIgoR6M+UvXRokK1TP+Ykg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/mdx-loader": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", + "integrity": "sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "chalk": "^4.1.1", "combine-promises": "^1.1.0", + "escape-string-regexp": "^4.0.0", "execa": "^5.0.0", "fs-extra": "^10.0.0", "globby": "^11.0.2", @@ -17538,9 +3938,48 @@ "shelljs": "^0.8.4", "tslib": "^2.2.0", "utility-types": "^3.10.0", - "webpack": "^5.37.0" + "webpack": "^5.40.0" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -17558,86 +3997,94 @@ "emojis-list": "^3.0.0", "json5": "^1.0.1" } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } } } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.1.tgz", - "integrity": "sha512-OApBjUHHxbMsylwfzNHQh7QI21y65F2DKfNmHAFdkHuzP7R32YexT/0KQjzLXRJ1p6n4RzqWLhROFRURJVwNMg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/mdx-loader": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", + "integrity": "sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "globby": "^11.0.2", "lodash": "^4.17.20", "minimatch": "^3.0.4", "remark-admonitions": "^1.2.1", "slash": "^3.0.0", "tslib": "^2.1.0", - "webpack": "^5.28.0" + "webpack": "^5.40.0" } }, "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.1.tgz", - "integrity": "sha512-4NlqaFE7IJJpAbcNnK+0ov8740+1whLzQOXSVilHhg0Ip4Y0w8U2B69GtV4cZmvyLT8PQbZjui5/RMCcncRhqQ==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", + "integrity": "sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw==", "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", "react-json-view": "^1.21.3", "tslib": "^2.1.0" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.1.tgz", - "integrity": "sha512-QC7Kb+trOiCx0Cy2rbGDUTTIffQg3Nolq7wUoTCoZgkJKMqFdQVcZZW4NqKi3CBy3CT/a3sbZDJrbds65y2vQA==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz", + "integrity": "sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg==", "requires": { - "@docusaurus/core": "2.0.0-beta.1" + "@docusaurus/core": "2.0.0-beta.3" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.1.tgz", - "integrity": "sha512-giGK+yeZRRJSFhKRBbD9p+iAOvUoNas+s/9DIcd1s/M3RzfDFCnhnLtDOjfpQcTEZVOHnDS+btIQkEBp1faIrw==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz", + "integrity": "sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA==", "requires": { - "@docusaurus/core": "2.0.0-beta.1" + "@docusaurus/core": "2.0.0-beta.3" } }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.1.tgz", - "integrity": "sha512-WiSsmfpifp1z+Q97MoBsA362+jwVqi+TGsvSIGKXXTsatRz8fJrJ2jZO1vH0tOcac1lkI8cM/ApO0NYu8Y6qqg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-common": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz", + "integrity": "sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "fs-extra": "^10.0.0", "sitemap": "^7.0.0", "tslib": "^2.2.0" } }, "@docusaurus/preset-classic": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.1.tgz", - "integrity": "sha512-NjuoJODm4y01Z0KMorMW+jRL5Ap/gQnnYeZKdAZ0oE55SO+0uihaSmJNehJ+17gvSia+UVbCg2q7bWLEeTPlrg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/plugin-content-blog": "2.0.0-beta.1", - "@docusaurus/plugin-content-docs": "2.0.0-beta.1", - "@docusaurus/plugin-content-pages": "2.0.0-beta.1", - "@docusaurus/plugin-debug": "2.0.0-beta.1", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.1", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.1", - "@docusaurus/plugin-sitemap": "2.0.0-beta.1", - "@docusaurus/theme-classic": "2.0.0-beta.1", - "@docusaurus/theme-search-algolia": "2.0.0-beta.1" + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz", + "integrity": "sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/plugin-debug": "2.0.0-beta.3", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.3", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.3", + "@docusaurus/plugin-sitemap": "2.0.0-beta.3", + "@docusaurus/theme-classic": "2.0.0-beta.3", + "@docusaurus/theme-search-algolia": "2.0.0-beta.3" } }, "@docusaurus/react-loadable": { @@ -17649,19 +4096,19 @@ } }, "@docusaurus/theme-classic": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.1.tgz", - "integrity": "sha512-abYWi1xpb+UDMLWUqy49I/2IdPXBfNteh5Yc+QvGSH4rBwaFNVoMoMd70yiV1eKPJ3zzzXRq4qK5/7rnIfSSEg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/plugin-content-blog": "2.0.0-beta.1", - "@docusaurus/plugin-content-docs": "2.0.0-beta.1", - "@docusaurus/plugin-content-pages": "2.0.0-beta.1", - "@docusaurus/theme-common": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-common": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz", + "integrity": "sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/theme-common": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "@mdx-js/mdx": "^1.6.21", "@mdx-js/react": "^1.6.21", "chalk": "^4.1.1", @@ -17681,28 +4128,28 @@ } }, "@docusaurus/theme-common": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.1.tgz", - "integrity": "sha512-i3gWptWsXTxBXCDeHCf9ARVcNlFAJcpmADGMTvNeFq8lAvg7+dFitghOVVDewEL5Hqh5BMrWWwJcOiKeMpCqgQ==", - "requires": { - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/plugin-content-blog": "2.0.0-beta.1", - "@docusaurus/plugin-content-docs": "2.0.0-beta.1", - "@docusaurus/plugin-content-pages": "2.0.0-beta.1", - "@docusaurus/types": "2.0.0-beta.1", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", + "integrity": "sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g==", + "requires": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", "tslib": "^2.1.0" } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.1.tgz", - "integrity": "sha512-QgtcWXSksxHjky0UUiBZ6llZBlWhd4O8TJ9Aer5P4VtPwC/qKFiQv03ByKbUTjJPAkfPunQ+TQEXEmzlIIwnbA==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz", + "integrity": "sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA==", "requires": { "@docsearch/react": "^3.0.0-alpha.36", - "@docusaurus/core": "2.0.0-beta.1", - "@docusaurus/theme-common": "2.0.0-beta.1", - "@docusaurus/utils": "2.0.0-beta.1", - "@docusaurus/utils-validation": "2.0.0-beta.1", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/theme-common": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", "algoliasearch": "^4.8.4", "algoliasearch-helper": "^3.3.4", "clsx": "^1.1.1", @@ -17711,23 +4158,23 @@ } }, "@docusaurus/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-KyhFZ9O/fHM+6JzaBEatJOFV5u+EHciv132jtQJaF7qQauyYhk7bQFFFvQSw1Ub0aIhTMqN9cO2+eDgX42q8YA==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.3.tgz", + "integrity": "sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q==", "requires": { "commander": "^5.1.0", "joi": "^17.4.0", "querystring": "0.2.0", - "webpack": "^5.37.0", - "webpack-merge": "^5.7.3" + "webpack": "^5.40.0", + "webpack-merge": "^5.8.0" } }, "@docusaurus/utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.1.tgz", - "integrity": "sha512-1Z7yEwQ+wFwRo1Iv9BbmLvDmV2u63lT1y9Ij6hHOv1T0cmS4wF9rhyk61AG6WyimnhoRD3quIen8EM6SdXnOHw==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", + "integrity": "sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA==", "requires": { - "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.3", "@types/github-slugger": "^1.3.0", "chalk": "^4.1.1", "escape-string-regexp": "^4.0.0", @@ -17739,20 +4186,20 @@ } }, "@docusaurus/utils-common": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.1.tgz", - "integrity": "sha512-Jw9qGpNlqhQnoB5S2T3Iokp9sN6MiOWHwbt/Ud0yPPBuTDVPE1xrosJjAAQDZe3OJvjpp3gdZqXt1hhyQIrOrA==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz", + "integrity": "sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg==", "requires": { - "@docusaurus/types": "2.0.0-beta.1", + "@docusaurus/types": "2.0.0-beta.3", "tslib": "^2.2.0" } }, "@docusaurus/utils-validation": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.1.tgz", - "integrity": "sha512-t4f2oqxq6hrKDf6A1k2IrlWHfzrLy+OGFNc/iMN05LWxfj5MgmsK90s0tq00LoxKRlfENfhcvmSw+SWzzplDCA==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz", + "integrity": "sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ==", "requires": { - "@docusaurus/utils": "2.0.0-beta.1", + "@docusaurus/utils": "2.0.0-beta.3", "chalk": "^4.1.1", "joi": "^17.4.0", "tslib": "^2.1.0" @@ -17840,9 +4287,9 @@ "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" }, "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "requires": { "@hapi/hoek": "^9.0.0" } @@ -17914,8 +4361,7 @@ "@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" }, "@mdx-js/util": { "version": "1.6.22", @@ -17937,9 +4383,9 @@ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -17983,6 +4429,22 @@ "eval": "^0.1.4", "url": "^0.11.0", "webpack-sources": "^1.4.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "@svgr/babel-plugin-add-jsx-attribute": { @@ -18077,6 +4539,150 @@ "cosmiconfig": "^7.0.0", "deepmerge": "^4.2.2", "svgo": "^1.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } } }, "@svgr/webpack": { @@ -18108,27 +4714,27 @@ "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" }, "@types/eslint": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", - "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" }, "@types/github-slugger": { "version": "1.3.0", @@ -18136,26 +4742,26 @@ "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "requires": { "@types/minimatch": "*", "@types/node": "*" } }, "@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", "requires": { "@types/unist": "*" } }, "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "@types/json-schema": { "version": "7.0.7", @@ -18171,14 +4777,14 @@ } }, "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", + "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -18190,175 +4796,152 @@ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "peer": true - }, "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "@types/react": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", - "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", - "peer": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" }, "@types/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.3.tgz", + "integrity": "sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA==", "requires": { "@types/node": "*" } }, - "@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", - "peer": true - }, "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -18391,13 +4974,12 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz", - "integrity": "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==" + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==" }, "address": { "version": "1.1.2", @@ -18427,42 +5009,47 @@ "ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "requires": {} + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "algoliasearch": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.3.tgz", - "integrity": "sha512-VLl9pYXhVB397xTW369sy13qw3m1hHzCfj9zSdeDDYVwTxHiiok/QvhPKAMIzjqyUoY07O8j+941UxYZjugsMQ==", - "requires": { - "@algolia/cache-browser-local-storage": "4.9.3", - "@algolia/cache-common": "4.9.3", - "@algolia/cache-in-memory": "4.9.3", - "@algolia/client-account": "4.9.3", - "@algolia/client-analytics": "4.9.3", - "@algolia/client-common": "4.9.3", - "@algolia/client-recommendation": "4.9.3", - "@algolia/client-search": "4.9.3", - "@algolia/logger-common": "4.9.3", - "@algolia/logger-console": "4.9.3", - "@algolia/requester-browser-xhr": "4.9.3", - "@algolia/requester-common": "4.9.3", - "@algolia/requester-node-http": "4.9.3", - "@algolia/transporter": "4.9.3" + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", + "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", + "requires": { + "@algolia/cache-browser-local-storage": "4.10.3", + "@algolia/cache-common": "4.10.3", + "@algolia/cache-in-memory": "4.10.3", + "@algolia/client-account": "4.10.3", + "@algolia/client-analytics": "4.10.3", + "@algolia/client-common": "4.10.3", + "@algolia/client-personalization": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/logger-console": "4.10.3", + "@algolia/requester-browser-xhr": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/requester-node-http": "4.10.3", + "@algolia/transporter": "4.10.3" } }, "algoliasearch-helper": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.3.tgz", - "integrity": "sha512-DtSlOKAJ6TGkQD6u58g6/ABdMmHf3pAj6xVL5hJF+D4z9ldDRf/f5v6puNIxGOlJRwGVvFGyz34beYNqhLDUbQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz", + "integrity": "sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA==", "requires": { "events": "^1.1.1" + }, + "dependencies": { + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + } } }, "alphanum-sort": { @@ -18483,11 +5070,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -18567,9 +5149,12 @@ "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } }, "arr-diff": { "version": "4.0.0", @@ -18671,12 +5256,12 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", - "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", "requires": { "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001230", + "caniuse-lite": "^1.0.30001243", "colorette": "^1.2.2", "fraction.js": "^4.1.1", "normalize-range": "^0.1.2", @@ -18719,6 +5304,16 @@ "emojis-list": "^3.0.0", "json5": "^1.0.1" } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } } } }, @@ -18779,12 +5374,12 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", - "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.9.1" + "core-js-compat": "^3.14.0" } }, "babel-plugin-polyfill-regenerator": { @@ -18826,6 +5421,32 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -18849,15 +5470,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -19021,6 +5633,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" } } }, @@ -19069,9 +5686,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001235", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", - "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==" + "version": "1.0.30001245", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", + "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==" }, "ccount": { "version": "1.1.0", @@ -19129,21 +5746,75 @@ "lodash.reduce": "^4.4.0", "lodash.reject": "^4.4.0", "lodash.some": "^4.4.0" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + } } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, "chrome-trace-event": { @@ -19174,62 +5845,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" } } }, @@ -19239,9 +5854,9 @@ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, "clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.3.tgz", + "integrity": "sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA==", "requires": { "source-map": "~0.6.0" }, @@ -19263,17 +5878,6 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, - "clipboard": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", - "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -19310,11 +5914,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -19462,9 +6061,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colord": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", - "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", + "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==" }, "colorette": { "version": "1.2.2", @@ -19616,40 +6215,38 @@ } }, "copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", "requires": { "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", + "glob-parent": "^6.0.0", "globby": "^11.0.3", "normalize-path": "^3.0.0", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "serialize-javascript": "^6.0.0" }, "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "glob-parent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", + "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "is-glob": "^4.0.1" } } } }, "core-js": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz", - "integrity": "sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA==" + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" }, "core-js-compat": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz", - "integrity": "sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", "requires": { "browserslist": "^4.16.6", "semver": "7.0.0" @@ -19663,9 +6260,9 @@ } }, "core-js-pure": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.14.0.tgz", - "integrity": "sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g==" + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==" }, "core-util-is": { "version": "1.0.2", @@ -19721,9 +6318,9 @@ } }, "css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", "requires": { "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", @@ -19735,44 +6332,22 @@ "postcss-value-parser": "^4.1.0", "schema-utils": "^3.0.0", "semver": "^7.3.5" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, "css-minimizer-webpack-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz", - "integrity": "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", "requires": { - "cssnano": "^5.0.0", - "jest-worker": "^26.3.0", + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", "p-limit": "^3.0.2", - "postcss": "^8.2.9", + "postcss": "^8.3.5", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -19781,14 +6356,15 @@ } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-select-base-adapter": { @@ -19797,11 +6373,11 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "requires": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" }, "dependencies": { @@ -19813,9 +6389,9 @@ } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" }, "cssesc": { "version": "3.0.0", @@ -19823,12 +6399,12 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.5.tgz", - "integrity": "sha512-L2VtPXnq6rmcMC9vkBOP131sZu3ccRQI27ejKZdmQiPDpUlFkUbpXHgKN+cibeO1U4PItxVZp1zTIn5dHsXoyg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", "requires": { "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.2", + "cssnano-preset-default": "^5.1.3", "is-resolvable": "^1.1.0" } }, @@ -19884,8 +6460,7 @@ "cssnano-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", - "requires": {} + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==" }, "csso": { "version": "4.2.0", @@ -19893,35 +6468,8 @@ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "requires": { "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "peer": true - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -19984,86 +6532,6 @@ "requires": { "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } } }, "defer-to-connect": { @@ -20086,6 +6554,34 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "del": { @@ -20103,12 +6599,6 @@ "slash": "^3.0.0" } }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -20156,30 +6646,6 @@ } } }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -20228,34 +6694,36 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "requires": { - "domelementtype": "1" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dot-case": { @@ -20273,13 +6741,6 @@ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } } }, "duplexer": { @@ -20298,14 +6759,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.750", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz", - "integrity": "sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A==" + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" }, "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "emojis-list": { "version": "3.0.0", @@ -20349,9 +6810,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "errno": { "version": "0.1.8", @@ -20393,9 +6854,9 @@ } }, "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==" }, "es-to-primitive": { "version": "1.2.1", @@ -20517,8 +6978,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} + "dev": true }, "eslint-mdx": { "version": "1.13.0", @@ -20731,9 +7191,9 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eta": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz", - "integrity": "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" }, "etag": { "version": "1.8.1", @@ -20754,9 +7214,9 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "eventsource": { "version": "1.1.0", @@ -20767,19 +7227,62 @@ } }, "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } } }, "expand-brackets": { @@ -20812,62 +7315,6 @@ "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -20962,6 +7409,32 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -20971,16 +7444,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -21003,9 +7475,9 @@ } }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "requires": { "reusify": "^1.0.4" } @@ -21084,26 +7556,8 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, - "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==", - "optional": true - }, "filesize": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", @@ -21237,6 +7691,16 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "chalk": { @@ -21267,6 +7731,25 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -21276,6 +7759,16 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "has-flag": { @@ -21288,14 +7781,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -21332,17 +7817,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } } }, "semver": { @@ -21455,9 +7929,12 @@ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } }, "get-value": { "version": "2.0.6", @@ -21470,6 +7947,13 @@ "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", "requires": { "emoji-regex": ">=6.0.0 <=6.1.1" + }, + "dependencies": { + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + } } }, "glob": { @@ -21547,9 +8031,9 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -21566,15 +8050,6 @@ } } }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -21591,16 +8066,6 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - } } }, "graceful-fs": { @@ -21617,25 +8082,6 @@ "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } } }, "gzip-size": { @@ -21917,6 +8363,23 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } } } }, @@ -21931,14 +8394,14 @@ "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" }, "html-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", + "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", "requires": { "@types/html-minifier-terser": "^5.0.0", "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", "tapable": "^2.0.0" } }, @@ -21953,6 +8416,56 @@ "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + } } }, "http-cache-semantics": { @@ -22025,6 +8538,35 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "fill-range": { @@ -22036,6 +8578,16 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "is-buffer": { @@ -22043,14 +8595,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -22087,17 +8631,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } } }, "to-regex-range": { @@ -22127,8 +8660,7 @@ "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" }, "ignore": { "version": "4.0.6", @@ -22297,11 +8829,26 @@ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-alphabetical": { @@ -22412,11 +8959,26 @@ } }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-date-object": { @@ -22430,13 +8992,20 @@ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "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==" + } } }, "is-docker": { @@ -22502,9 +9071,9 @@ "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" }, "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-path-cwd": { "version": "2.2.0", @@ -22572,9 +9141,9 @@ "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-string": { "version": "1.0.6", @@ -22638,19 +9207,29 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.1.tgz", + "integrity": "sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -22665,11 +9244,12 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { @@ -23062,9 +9642,9 @@ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" }, "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, "mdurl": { "version": "1.0.1", @@ -23191,23 +9771,27 @@ } }, "mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0", "webpack-sources": "^1.1.0" }, "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } @@ -23250,9 +9834,12 @@ } }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } }, "module-alias": { "version": "2.2.2", @@ -23278,12 +9865,6 @@ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, "nanoid": { "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", @@ -23390,16 +9971,23 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "^3.0.0" + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + } } }, "nprogress": { @@ -23408,11 +9996,11 @@ "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "null-loader": { @@ -23461,44 +10049,11 @@ "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "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==" - } - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -23964,14 +10519,6 @@ "requires": { "ms": "^2.1.1" } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } } } }, @@ -24021,26 +10568,22 @@ "postcss-discard-comments": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "requires": {} + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==" }, "postcss-discard-duplicates": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "requires": {} + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==" }, "postcss-discard-empty": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "requires": {} + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==" }, "postcss-discard-overridden": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", - "requires": {} + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==" }, "postcss-discard-unused": { "version": "5.0.1", @@ -24133,8 +10676,7 @@ "postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -24165,8 +10707,7 @@ "postcss-normalize-charset": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "requires": {} + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==" }, "postcss-normalize-display-values": { "version": "5.0.1", @@ -24228,13 +10769,6 @@ "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", - "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==" - } } }, "postcss-normalize-whitespace": { @@ -24265,148 +10799,45 @@ "postcss-reduce-initial": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", - "requires": { - "browserslist": "^4.16.0", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sort-media-queries": { - "version": "3.11.12", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", - "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", - "requires": { - "sort-css-media-queries": "1.5.4" - } - }, - "postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", - "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", - "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - } - } + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "requires": { + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-sort-media-queries": { + "version": "3.11.12", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", + "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", + "requires": { + "sort-css-media-queries": "1.5.4" + } + }, + "postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "requires": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" } }, "postcss-unique-selectors": { @@ -24427,8 +10858,7 @@ "postcss-zindex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", - "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", - "requires": {} + "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==" }, "prelude-ls": { "version": "1.2.1", @@ -24448,12 +10878,12 @@ "dev": true }, "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", + "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", "requires": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^2.0.6" } }, "pretty-time": { @@ -24464,16 +10894,12 @@ "prism-react-renderer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", - "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", - "requires": {} + "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==" }, "prismjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", - "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", - "requires": { - "clipboard": "^2.0.0" - } + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", + "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" }, "process-nextick-args": { "version": "2.0.1", @@ -24545,9 +10971,9 @@ } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, "pupa": { "version": "2.1.1", @@ -24641,8 +11067,7 @@ "react-async": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "requires": {} + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==" }, "react-base16-styling": { "version": "0.6.0", @@ -24752,6 +11177,23 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -24780,6 +11222,11 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -24924,8 +11371,7 @@ "react-side-effect": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "requires": {} + "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" }, "react-textarea-autosize": { "version": "8.3.3", @@ -24956,9 +11402,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } @@ -25313,71 +11759,21 @@ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "renderkid": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.6.tgz", - "integrity": "sha512-GIis2GBr/ho0pFNf57D4XM4+PgnQuTii0WCPjEZmZfKivzUfGuRdjN2aQYtYMiNggHmNyBve+thFnNR1iBRcKg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", - "strip-ansi": "^6.0.0" + "strip-ansi": "^3.0.1" }, "dependencies": { - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "htmlparser2": { "version": "6.1.0", @@ -25390,12 +11786,12 @@ "entities": "^2.0.0" } }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "boolbase": "^1.0.0" + "ansi-regex": "^2.0.0" } } } @@ -25517,18 +11913,19 @@ } }, "rtl-detect": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz", - "integrity": "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, "rtlcss": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.2.0.tgz", - "integrity": "sha512-nV3UmaTmA5TkP2dYOR16ULu6FkMOqZRbiXbFZnmWIN9coPfx3gin31VGOPV7vrVMPjNds7pCS2UYy0mwQUdFCQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.3.0.tgz", + "integrity": "sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A==", "requires": { "chalk": "^4.1.0", "find-up": "^5.0.0", "mkdirp": "^1.0.4", + "postcss": "^8.2.4", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -25549,6 +11946,11 @@ "p-locate": "^5.0.0" } }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -25615,12 +12017,12 @@ } }, "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, @@ -25633,12 +12035,6 @@ "kind-of": "^6.0.0" } }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -25718,9 +12114,9 @@ } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "requires": { "randombytes": "^2.1.0" } @@ -25945,6 +12341,13 @@ "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" + }, + "dependencies": { + "@types/node": { + "version": "15.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", + "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" + } } }, "slash": { @@ -25994,62 +12397,6 @@ "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -26074,6 +12421,32 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -26281,62 +12654,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" } } }, @@ -26353,21 +12670,6 @@ "ci-info": "^3.0.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "string-replace-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", @@ -26442,6 +12744,21 @@ "define-properties": "^1.1.3" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, "stringify-entities": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", @@ -26461,6 +12778,13 @@ "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + } } }, "strip-ansi": { @@ -26522,123 +12846,23 @@ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", + "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, @@ -26692,13 +12916,13 @@ "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" }, "dependencies": { "commander": { @@ -26707,79 +12931,29 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, "terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "requires": { "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.0" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } } } }, @@ -26798,12 +12972,6 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, "tiny-invariant": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", @@ -27209,13 +13377,6 @@ "requires": { "punycode": "1.3.2", "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } } }, "url-loader": { @@ -27226,18 +13387,6 @@ "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, "url-parse": { @@ -27273,8 +13422,7 @@ "use-isomorphic-layout-effect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", - "requires": {} + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" }, "use-latest": { "version": "1.2.0", @@ -27407,20 +13555,20 @@ "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" }, "webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", + "es-module-lexer": "^0.7.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -27429,46 +13577,17 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", + "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.2.0", "webpack-sources": "^2.3.0" }, "dependencies": { "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" } } }, @@ -27489,9 +13608,9 @@ }, "dependencies": { "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==" + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" }, "commander": { "version": "6.2.1", @@ -27524,14 +13643,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } } } }, @@ -27627,6 +13738,16 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "chokidar": { @@ -27662,6 +13783,25 @@ "rimraf": "^2.6.3" } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -27671,17 +13811,23 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "fsevents": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } + "optional": true }, "glob-parent": { "version": "3.1.0", @@ -27739,14 +13885,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -27783,17 +13921,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } } }, "p-map": { @@ -27922,12 +14049,12 @@ } }, "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -28046,10 +14173,9 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" }, "xdg-basedir": { "version": "4.0.0", @@ -28106,11 +14232,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", diff --git a/docs/package.json b/docs/package.json index f2fb0008fad..94ed951c5ae 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,8 +14,8 @@ "prettier:format": "prettier --write ." }, "dependencies": { - "@docusaurus/core": "^2.0.0-beta.1", - "@docusaurus/preset-classic": "^2.0.0-beta.1", + "@docusaurus/core": "^2.0.0-beta.3", + "@docusaurus/preset-classic": "^2.0.0-beta.3", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", From a8c0c76fca0eea98e6155173764222458522e5f9 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 10:26:52 +0100 Subject: [PATCH 0091/1130] docs(setup): replace `zephyr-west-action` with `zmk-docker` This should've been changed after #481. See: https://github.com/zmkfirmware/zmk/pull/481 PR: https://github.com/zmkfirmware/zmk/pull/845 --- docs/docs/development/setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 3e5df916c21..0963ffd8ad4 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -188,7 +188,7 @@ brew install cmake ninja python3 ccache dtc git wget dfu-util -This setup leverages the same [image which is used by the GitHub action](https://github.com/zmkfirmware/zephyr-west-action) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach is also the easiest to set up. No toolchain or dependencies are necessary when using Docker; the container image you'll be using already has the toolchain installed and set up to use. +This setup leverages the same [image which is used by the GitHub action](https://github.com/zmkfirmware/zmk-docker) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach is also the easiest to set up. No toolchain or dependencies are necessary when using Docker; the container image you'll be using already has the toolchain installed and set up to use. 1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop) for your operating system. 2. Install [VS Code](https://code.visualstudio.com/) From 861a2bf6d09c94138c7ed6a12dbd7f04b9e5231b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 21 Jul 2021 22:06:32 -0400 Subject: [PATCH 0092/1130] fix: Add missing semicolon for nano V2 case. --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 88949f39bc6..6b40d24e50b 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -77,7 +77,7 @@ select opt in "${options[@]}" "Quit"; do case "$REPLY" in 1 ) board="nice_nano"; break;; - 2 ) board="nice_nano_v2" break;; + 2 ) board="nice_nano_v2"; break;; 3 ) board="proton_c"; break;; 4 ) board="bluemicro840_v1"; break;; 5 ) board="nrf52840_m2"; break;; From 0325fe9a18ab9e2e01c58d8684fe030c793ecf8e Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 24 Jul 2021 11:13:11 -0500 Subject: [PATCH 0093/1130] docs: Switch back to package version 2 package-lock.json was rewritten to version 1 in 13dbbefcb4e6f63b68a36857d65d93cebe133ea3. --- docs/package-lock.json | 17551 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 17535 insertions(+), 16 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index e5560326563..d9f486fc50a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,8 +1,17527 @@ { "name": "docs", "version": "0.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "^2.0.0-beta.3", + "@docusaurus/preset-classic": "^2.0.0-beta.3", + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/free-solid-svg-icons": "^5.15.3", + "@fortawesome/react-fontawesome": "^0.1.14", + "classnames": "^2.2.6", + "react": "^17.0.2", + "react-async": "^10.0.1", + "react-copy-to-clipboard": "^5.0.3", + "react-dom": "^17.0.2", + "react-toastify": "^7.0.4", + "web-tree-sitter": "^0.17.1" + }, + "devDependencies": { + "eslint": "^7.29.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-mdx": "^1.13.0", + "eslint-plugin-react": "^7.23.2", + "null-loader": "^4.0.0", + "prettier": "2.3.1", + "string-replace-loader": "^3.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz", + "integrity": "sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw==", + "dependencies": { + "@algolia/autocomplete-shared": "1.2.1" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz", + "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", + "dependencies": { + "@algolia/autocomplete-shared": "1.2.1" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", + "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", + "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", + "dependencies": { + "@algolia/cache-common": "4.10.3" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", + "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", + "dependencies": { + "@algolia/cache-common": "4.10.3" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", + "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", + "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", + "dependencies": { + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", + "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", + "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", + "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", + "dependencies": { + "@algolia/logger-common": "4.10.3" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", + "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", + "dependencies": { + "@algolia/requester-common": "4.10.3" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", + "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", + "dependencies": { + "@algolia/requester-common": "4.10.3" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", + "dependencies": { + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dependencies": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/core/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/core/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/core/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "dependencies": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/helper-wrap-function/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-typescript/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-classes/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-destructuring/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-for-of/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-function-name/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-literals/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-amd/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-new-target/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-object-super/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-property-literals/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", + "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-template-literals/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", + "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-typescript/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", + "dependencies": { + "core-js-pure": "^3.15.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", + "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" + }, + "node_modules/@docsearch/react": { + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", + "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", + "dependencies": { + "@algolia/autocomplete-core": "1.2.1", + "@algolia/autocomplete-preset-algolia": "1.2.1", + "@docsearch/css": "3.0.0-alpha.37", + "algoliasearch": "^4.0.0" + } + }, + "node_modules/@docusaurus/core": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", + "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.3", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "@slorber/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.1", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "clean-css": "^5.1.2", + "commander": "^5.1.0", + "copy-webpack-plugin": "^9.0.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^3.0.1", + "cssnano": "^5.0.4", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.3.2", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.6.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.15", + "postcss-loader": "^5.3.0", + "prompts": "^2.4.1", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.3", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.3", + "tslib": "^2.2.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.3.0", + "webpack": "^5.40.0", + "webpack-bundle-analyzer": "^4.4.2", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", + "integrity": "sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA==", + "dependencies": { + "cssnano-preset-advanced": "^5.1.1", + "postcss": "^8.2.15", + "postcss-sort-media-queries": "^3.10.11" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz", + "integrity": "sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ==", + "dependencies": { + "@babel/parser": "^7.12.16", + "@babel/traverse": "^7.12.13", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "github-slugger": "^1.3.0", + "gray-matter": "^4.0.3", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.1", + "webpack": "^5.40.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", + "integrity": "sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", + "feed": "^4.2.2", + "fs-extra": "^10.0.0", + "globby": "^11.0.2", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "reading-time": "^1.3.0", + "remark-admonitions": "^1.2.1", + "tslib": "^2.2.0", + "webpack": "^5.40.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", + "integrity": "sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "chalk": "^4.1.1", + "combine-promises": "^1.1.0", + "escape-string-regexp": "^4.0.0", + "execa": "^5.0.0", + "fs-extra": "^10.0.0", + "globby": "^11.0.2", + "import-fresh": "^3.2.2", + "js-yaml": "^4.0.0", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "remark-admonitions": "^1.2.1", + "shelljs": "^0.8.4", + "tslib": "^2.2.0", + "utility-types": "^3.10.0", + "webpack": "^5.40.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", + "integrity": "sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "globby": "^11.0.2", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", + "tslib": "^2.1.0", + "webpack": "^5.40.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", + "integrity": "sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "react-json-view": "^1.21.3", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz", + "integrity": "sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz", + "integrity": "sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz", + "integrity": "sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "fs-extra": "^10.0.0", + "sitemap": "^7.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz", + "integrity": "sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/plugin-debug": "2.0.0-beta.3", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.3", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.3", + "@docusaurus/plugin-sitemap": "2.0.0-beta.3", + "@docusaurus/theme-classic": "2.0.0-beta.3", + "@docusaurus/theme-search-algolia": "2.0.0-beta.3" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "dependencies": { + "prop-types": "^15.6.2" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz", + "integrity": "sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/theme-common": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "chalk": "^4.1.1", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.1", + "fs-extra": "^10.0.0", + "globby": "^11.0.2", + "infima": "0.2.0-alpha.26", + "lodash": "^4.17.20", + "parse-numeric-range": "^1.2.0", + "postcss": "^8.2.15", + "prism-react-renderer": "^1.2.1", + "prismjs": "^1.23.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.2.0", + "rtlcss": "^3.1.2" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", + "integrity": "sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz", + "integrity": "sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA==", + "dependencies": { + "@docsearch/react": "^3.0.0-alpha.36", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/theme-common": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "algoliasearch": "^4.8.4", + "algoliasearch-helper": "^3.3.4", + "clsx": "^1.1.1", + "eta": "^1.12.1", + "lodash": "^4.17.20" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/types": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.3.tgz", + "integrity": "sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q==", + "dependencies": { + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.40.0", + "webpack-merge": "^5.8.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", + "integrity": "sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.3", + "@types/github-slugger": "^1.3.0", + "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", + "fs-extra": "^10.0.0", + "gray-matter": "^4.0.3", + "lodash": "^4.17.20", + "resolve-pathname": "^3.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz", + "integrity": "sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.3", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz", + "integrity": "sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ==", + "dependencies": { + "@docusaurus/utils": "2.0.0-beta.3", + "chalk": "^4.1.1", + "joi": "^17.4.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", + "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.35" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", + "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.35" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", + "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", + "dependencies": { + "prop-types": "^15.7.2" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.15", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", + "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" + }, + "node_modules/@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", + "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", + "dependencies": { + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.4", + "url": "^0.11.0", + "webpack-sources": "^1.4.3" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@svgr/plugin-svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "node_modules/@svgr/plugin-svgo/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/@svgr/plugin-svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + }, + "node_modules/@types/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" + }, + "node_modules/@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "node_modules/@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "node_modules/@types/node": { + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", + "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "node_modules/@types/sax": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.3.tgz", + "integrity": "sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "node_modules/acorn-walk": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "node_modules/algoliasearch": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", + "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.10.3", + "@algolia/cache-common": "4.10.3", + "@algolia/cache-in-memory": "4.10.3", + "@algolia/client-account": "4.10.3", + "@algolia/client-analytics": "4.10.3", + "@algolia/client-common": "4.10.3", + "@algolia/client-personalization": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/logger-console": "4.10.3", + "@algolia/requester-browser-xhr": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/requester-node-http": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz", + "integrity": "sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA==", + "dependencies": { + "events": "^1.1.1" + } + }, + "node_modules/algoliasearch-helper/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", + "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "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==", + "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "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": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "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==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + } + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "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==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/boxen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001245", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", + "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==" + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cheerio/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/cheerio/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/cheerio/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/cheerio/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" + }, + "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==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/clean-css": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.3.tgz", + "integrity": "sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colord": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", + "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==" + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", + "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "dependencies": { + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", + "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "dependencies": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", + "hasInstallScript": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dependencies": { + "node-fetch": "2.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-color-names": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "dependencies": { + "timsort": "^0.3.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "p-limit": "^3.0.2", + "postcss": "^8.3.5", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", + "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", + "dependencies": { + "autoprefixer": "^10.2.0", + "cssnano-preset-default": "^5.1.3", + "postcss-discard-unused": "^5.0.1", + "postcss-merge-idents": "^5.0.1", + "postcss-reduce-idents": "^5.0.1", + "postcss-zindex": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "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==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==" + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + } + }, + "node_modules/eslint-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", + "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", + "dev": true, + "dependencies": { + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "tslib": "^2.2.0", + "unified": "^9.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "node_modules/eslint-plugin-markdown": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", + "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^0.8.5" + }, + "engines": { + "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" + } + }, + "node_modules/eslint-plugin-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", + "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.13.0", + "eslint-plugin-markdown": "^2.1.0", + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "synckit": "^0.1.5", + "tslib": "^2.2.0", + "unified": "^9.2.1", + "vfile": "^4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", + "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "dependencies": { + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "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==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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==", + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "dependencies": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/flux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", + "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dependencies": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "engines": { + "node": ">=6.11.5", + "yarn": ">=1.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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==" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "engines": { + "node": "*" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "dependencies": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "node_modules/github-slugger/node_modules/emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "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": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/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==" + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/hpack.js/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-minifier-terser/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "node_modules/html-webpack-plugin": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", + "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "html-minifier-terser": "^5.0.1", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "node_modules/htmlparser2/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/htmlparser2/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/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==" + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.26", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", + "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/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==" + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-color-stop/node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "engines": { + "node": "*" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/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==" + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "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": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/joi": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.1.tgz", + "integrity": "sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "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": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "dependencies": { + "repeat-string": "^1.0.0" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dependencies": { + "unist-util-remove": "^2.0.0" + } + }, + "node_modules/mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/memory-fs/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mini-css-extract-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "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==", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dependencies": { + "lodash.toarray": "^4.4.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "node_modules/nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "dependencies": { + "boolbase": "^1.0.0" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "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": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/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==" + }, + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "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": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", + "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "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": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "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==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "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": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "dependencies": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-discard-unused": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", + "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-loader": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/postcss-merge-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", + "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "dependencies": { + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "dependencies": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "dependencies": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "dependencies": { + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "dependencies": { + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", + "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "dependencies": { + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "3.11.12", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", + "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", + "dependencies": { + "sort-css-media-queries": "1.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "dependencies": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "dependencies": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", + "uniqs": "^2.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", + "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-error": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", + "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.6" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", + "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==" + }, + "node_modules/prismjs": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", + "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" + }, + "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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==" + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-copy-to-clipboard": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", + "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", + "dependencies": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + } + }, + "node_modules/react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-dev-utils/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/react-dev-utils/node_modules/browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "dependencies": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/react-dev-utils/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/react-dev-utils/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/react-dev-utils/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/react-dev-utils/node_modules/prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "dependencies": { + "prop-types": "^15.5.0" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "node_modules/react-router/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/react-router/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/react-side-effect": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", + "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" + }, + "node_modules/react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-toastify": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", + "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", + "dependencies": { + "clsx": "^1.1.1" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", + "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "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==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "dependencies": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "dependencies": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "node_modules/rehype-parse/node_modules/hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "dependencies": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "node_modules/rehype-parse/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "dependencies": { + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" + } + }, + "node_modules/remark-admonitions/node_modules/unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "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": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "engines": { + "node": "*" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.3.0.tgz", + "integrity": "sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A==", + "dependencies": { + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "mkdirp": "^1.0.4", + "postcss": "^8.2.4", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rtlcss/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "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==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "dependencies": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "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==", + "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/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/sirv": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", + "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", + "dependencies": { + "@polka/url": "^1.0.0-next.15", + "mime": "^2.3.1", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sirv/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", + "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", + "dependencies": { + "@types/node": "^15.0.1", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "15.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", + "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "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==", + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "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==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/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==" + }, + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "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==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/sort-css-media-queries": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", + "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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==", + "engines": { + "node": ">=0.10.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==" + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "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==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", + "dependencies": { + "ci-info": "^3.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/string-replace-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", + "integrity": "sha512-MY2VpW7p2V4yLBybj6BcFhmJGU1GjXSDfSz4NrK9BiLK3ttyKXO/WIyOD4UP/b77QUVPG+AKZ7vvpTCNYRAgWg==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "node_modules/string-replace-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dependencies": { + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", + "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", + "dependencies": { + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/synckit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", + "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", + "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "dependencies": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "node_modules/tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/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==" + }, + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "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==", + "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": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "node_modules/ts-essentials": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", + "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" + }, + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "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==", + "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/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "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==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-composed-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", + "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", + "dependencies": { + "ts-essentials": "^2.0.3" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" + }, + "node_modules/use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "node_modules/wait-on": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", + "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "dependencies": { + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "node_modules/web-tree-sitter": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", + "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" + }, + "node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^6.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "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/webpack-dev-server/node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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==" + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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/webpack-dev-server/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/webpack-dev-server/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==", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-log/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + } + }, "dependencies": { "@algolia/autocomplete-core": { "version": "1.2.1", @@ -12670,6 +30189,21 @@ "ci-info": "^3.0.0" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, "string-replace-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", @@ -12744,21 +30278,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "stringify-entities": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", From 824d605c2218ff01ece4391711d69f623fcc75c0 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 24 Jul 2021 12:51:13 -0500 Subject: [PATCH 0094/1130] fix(docs): Fix keymap upgrader Bumped web-tree-sitter to v0.19.4 and added v0.4.0 of tree-sitter-devicetree, which had to be rebuilt to work in v0.19.x https://github.com/joelspadin/tree-sitter-devicetree/releases/tag/v0.4.0 Changed how we patch web-tree-sitter to correctly load tree-sitter.wasm to work with the latest version of Docusaurus. Including a copy of tree-sitter.wasm as a static resource is no longer needed. --- docs/package-lock.json | 31 ++++++++++-------- docs/package.json | 4 +-- .../docusaurus-tree-sitter-plugin/index.js | 28 ++++++++++++---- docs/static/tree-sitter-devicetree.wasm | Bin 43042 -> 34601 bytes docs/static/tree-sitter.wasm | Bin 202338 -> 0 bytes 5 files changed, 41 insertions(+), 22 deletions(-) delete mode 100644 docs/static/tree-sitter.wasm diff --git a/docs/package-lock.json b/docs/package-lock.json index d9f486fc50a..6fd81ead766 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -18,7 +18,7 @@ "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.17.1" + "web-tree-sitter": "^0.19.4" }, "devDependencies": { "eslint": "^7.29.0", @@ -27,7 +27,7 @@ "eslint-plugin-react": "^7.23.2", "null-loader": "^4.0.0", "prettier": "2.3.1", - "string-replace-loader": "^3.0.0" + "string-replace-loader": "^3.0.3" } }, "node_modules/@algolia/autocomplete-core": { @@ -15531,13 +15531,16 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "node_modules/string-replace-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", - "integrity": "sha512-MY2VpW7p2V4yLBybj6BcFhmJGU1GjXSDfSz4NrK9BiLK3ttyKXO/WIyOD4UP/b77QUVPG+AKZ7vvpTCNYRAgWg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.3.tgz", + "integrity": "sha512-8c26Dl6H9XmKNj3mFBvaUYR7ImOxQ4YRBFuUju78wXpa1cDpyDYvKmqGg8mfkxdYexQ/BBogB7PELlLnmR08nw==", "dev": true, "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "peerDependencies": { + "webpack": "^5" } }, "node_modules/string-replace-loader/node_modules/schema-utils": { @@ -16555,9 +16558,9 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "node_modules/web-tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", - "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", + "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, "node_modules/webpack": { "version": "5.45.1", @@ -30205,9 +30208,9 @@ } }, "string-replace-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.2.tgz", - "integrity": "sha512-MY2VpW7p2V4yLBybj6BcFhmJGU1GjXSDfSz4NrK9BiLK3ttyKXO/WIyOD4UP/b77QUVPG+AKZ7vvpTCNYRAgWg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.3.tgz", + "integrity": "sha512-8c26Dl6H9XmKNj3mFBvaUYR7ImOxQ4YRBFuUju78wXpa1cDpyDYvKmqGg8mfkxdYexQ/BBogB7PELlLnmR08nw==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -31069,9 +31072,9 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "web-tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.17.1.tgz", - "integrity": "sha512-QgaeV+wmlB1Qaw9rS5a0ZDBt8GRcKkF+hGNSVxQ/HLm1lPCow3BKOhoILaXkYm7YozCcL7TjppRADBwFJugbuA==" + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", + "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, "webpack": { "version": "5.45.1", diff --git a/docs/package.json b/docs/package.json index 94ed951c5ae..ff5bb82fad9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -25,7 +25,7 @@ "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.17.1" + "web-tree-sitter": "^0.19.4" }, "browserslist": { "production": [ @@ -46,6 +46,6 @@ "eslint-plugin-react": "^7.23.2", "null-loader": "^4.0.0", "prettier": "2.3.1", - "string-replace-loader": "^3.0.0" + "string-replace-loader": "^3.0.3" } } diff --git a/docs/src/docusaurus-tree-sitter-plugin/index.js b/docs/src/docusaurus-tree-sitter-plugin/index.js index da9809d7703..c8a9500ee7d 100644 --- a/docs/src/docusaurus-tree-sitter-plugin/index.js +++ b/docs/src/docusaurus-tree-sitter-plugin/index.js @@ -11,17 +11,33 @@ module.exports = function () { loader: "null-loader", }); } else { - // web-tree-sitter has a hard-coded path to tree-sitter.wasm, + // The way web-tree-sitter loads tree-sitter.wasm isn't something that + // Docusaurus/Webpack identify as an asset. There is currently no way to + // set location of the file other than patching web-tree-sitter. // (see https://github.com/tree-sitter/tree-sitter/issues/559) - // which some browsers treat as absolute and others as relative. - // This breaks everything. Rewrite it to always use an absolute path. rules.push({ test: /tree-sitter\.js$/, loader: "string-replace-loader", options: { - search: '"tree-sitter.wasm"', - replace: '"/tree-sitter.wasm"', - strict: true, + multiple: [ + // Replace the path to tree-sitter.wasm with a "new URL()" to clue + // Webpack in that it is an asset. + { + search: '"tree-sitter.wasm"', + replace: '(new URL("tree-sitter.wasm", import.meta.url)).href', + strict: true, + }, + // Webpack replaces "new URL()" with the full URL to the asset, but + // web-tree-sitter will still add a prefix to it unless there is a + // Module.locateFile() function. + { + search: "var Module=void 0!==Module?Module:{};", + replace: `var Module = { + locateFile: (path, prefix) => path.startsWith('http') ? path : prefix + path, + };`, + strict: true, + }, + ], }, }); } diff --git a/docs/static/tree-sitter-devicetree.wasm b/docs/static/tree-sitter-devicetree.wasm index b0729e4dbfeaeb8eb4a9bc84b77f36ff71fe2e04..fbcb0f18a70a75cc57c24aa7ae0a4b00aad5a95b 100644 GIT binary patch literal 34601 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 VuYJt0y76KV05CSHFiXxy=rHV+cT6d{M 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

ZjzV9?h-#FGGE6RQ=Ta)T6mozZmLU+>cyjZPSTs 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 UigC2Cu62%SZa8;NtC7L-KWbrOHvj+t diff --git a/docs/static/tree-sitter.wasm b/docs/static/tree-sitter.wasm deleted file mode 100644 index 029b7ca04f168148fb42454204e4c1757f366b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202338 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

dW_f<%%M6I#P+R2PKe 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 Y#ohch@8nPx# From a6de43e665ded4831d79159495660ac3a7d48e99 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 3 Apr 2021 01:00:51 -0500 Subject: [PATCH 0095/1130] feat: Add nrf VDDH battery driver Added a driver which uses the nRF52's ADC channel on the VDDH pin to read the battery voltage when using high voltage mode. --- app/drivers/sensor/CMakeLists.txt | 4 +- app/drivers/sensor/Kconfig | 2 +- app/drivers/sensor/battery/CMakeLists.txt | 10 ++ app/drivers/sensor/battery/Kconfig | 21 ++++ app/drivers/sensor/battery/battery_common.c | 43 +++++++ app/drivers/sensor/battery/battery_common.h | 21 ++++ app/drivers/sensor/battery/battery_nrf_vddh.c | 116 ++++++++++++++++++ .../battery_voltage_divider.c | 50 ++------ .../battery_voltage_divider/CMakeLists.txt | 6 - .../sensor/battery_voltage_divider/Kconfig | 8 -- .../bindings/sensor/zmk,battery-nrf-vddh.yaml | 11 ++ 11 files changed, 236 insertions(+), 56 deletions(-) create mode 100644 app/drivers/sensor/battery/CMakeLists.txt create mode 100644 app/drivers/sensor/battery/Kconfig create mode 100644 app/drivers/sensor/battery/battery_common.c create mode 100644 app/drivers/sensor/battery/battery_common.h create mode 100644 app/drivers/sensor/battery/battery_nrf_vddh.c rename app/drivers/sensor/{battery_voltage_divider => battery}/battery_voltage_divider.c (82%) delete mode 100644 app/drivers/sensor/battery_voltage_divider/CMakeLists.txt delete mode 100644 app/drivers/sensor/battery_voltage_divider/Kconfig create mode 100644 app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml diff --git a/app/drivers/sensor/CMakeLists.txt b/app/drivers/sensor/CMakeLists.txt index a4c2ba89f9c..b549320f121 100644 --- a/app/drivers/sensor/CMakeLists.txt +++ b/app/drivers/sensor/CMakeLists.txt @@ -1,5 +1,5 @@ -# Copyright (c) 2020 The ZMK Contributors +# Copyright (c) 2020-2021 The ZMK Contributors # SPDX-License-Identifier: MIT -add_subdirectory_ifdef(CONFIG_ZMK_BATTERY_VOLTAGE_DIVIDER battery_voltage_divider) +add_subdirectory_ifdef(CONFIG_ZMK_BATTERY battery) add_subdirectory_ifdef(CONFIG_EC11 ec11) \ No newline at end of file diff --git a/app/drivers/sensor/Kconfig b/app/drivers/sensor/Kconfig index 7b6a0d08a81..a828f6c63ab 100644 --- a/app/drivers/sensor/Kconfig +++ b/app/drivers/sensor/Kconfig @@ -1,5 +1,5 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -rsource "battery_voltage_divider/Kconfig" +rsource "battery/Kconfig" rsource "ec11/Kconfig" \ No newline at end of file diff --git a/app/drivers/sensor/battery/CMakeLists.txt b/app/drivers/sensor/battery/CMakeLists.txt new file mode 100644 index 00000000000..1203e53a6be --- /dev/null +++ b/app/drivers/sensor/battery/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (c) 2020-2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +zephyr_include_directories(.) + +zephyr_library() + +zephyr_library_sources(battery_common.c) +zephyr_library_sources_ifdef(CONFIG_ZMK_BATTERY_NRF_VDDH battery_nrf_vddh.c) +zephyr_library_sources_ifdef(CONFIG_ZMK_BATTERY_VOLTAGE_DIVIDER battery_voltage_divider.c) \ No newline at end of file diff --git a/app/drivers/sensor/battery/Kconfig b/app/drivers/sensor/battery/Kconfig new file mode 100644 index 00000000000..fd8cd26d8aa --- /dev/null +++ b/app/drivers/sensor/battery/Kconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2020-2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config ZMK_BATTERY + bool "ZMK battery monitoring" + help + Enable battery monitoring + +config ZMK_BATTERY_NRF_VDDH + bool "ZMK nRF VDDH battery monitoring" + select ADC + select ZMK_BATTERY + help + Enable ZMK nRF VDDH voltage driver for battery monitoring. + +config ZMK_BATTERY_VOLTAGE_DIVIDER + bool "ZMK battery voltage divider" + select ADC + select ZMK_BATTERY + help + Enable ZMK battery voltage divider driver for battery monitoring. diff --git a/app/drivers/sensor/battery/battery_common.c b/app/drivers/sensor/battery/battery_common.c new file mode 100644 index 00000000000..36e98affd1f --- /dev/null +++ b/app/drivers/sensor/battery/battery_common.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include "battery_common.h" + +int battery_channel_get(const struct battery_value *value, enum sensor_channel chan, + struct sensor_value *val_out) { + switch (chan) { + case SENSOR_CHAN_GAUGE_VOLTAGE: + val_out->val1 = value->millivolts / 1000; + val_out->val2 = (value->millivolts % 1000) * 1000U; + break; + + case SENSOR_CHAN_GAUGE_STATE_OF_CHARGE: + val_out->val1 = value->state_of_charge; + val_out->val2 = 0; + break; + + default: + return -ENOTSUP; + } + + return 0; +} + +uint8_t lithium_ion_mv_to_pct(int16_t bat_mv) { + // Simple linear approximation of a battery based off adafruit's discharge graph: + // https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages + + if (bat_mv >= 4200) { + return 100; + } else if (bat_mv <= 3450) { + return 0; + } + + return bat_mv * 2 / 15 - 459; +} \ No newline at end of file diff --git a/app/drivers/sensor/battery/battery_common.h b/app/drivers/sensor/battery/battery_common.h new file mode 100644 index 00000000000..d81c39e24d8 --- /dev/null +++ b/app/drivers/sensor/battery/battery_common.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +struct battery_value { + uint16_t adc_raw; + uint16_t millivolts; + uint8_t state_of_charge; +}; + +int battery_channel_get(const struct battery_value *value, enum sensor_channel chan, + struct sensor_value *val_out); + +uint8_t lithium_ion_mv_to_pct(int16_t bat_mv); diff --git a/app/drivers/sensor/battery/battery_nrf_vddh.c b/app/drivers/sensor/battery/battery_nrf_vddh.c new file mode 100644 index 00000000000..908903449e4 --- /dev/null +++ b/app/drivers/sensor/battery/battery_nrf_vddh.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + * + * This is a simplified version of battery_voltage_divider.c which always reads + * the VDDHDIV5 channel of the &adc node and multiplies it by 5. + */ + +#define DT_DRV_COMPAT zmk_battery_nrf_vddh + +#include +#include +#include +#include +#include + +#include "battery_common.h" + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define VDDHDIV (5) + +static const struct device *adc = DEVICE_DT_GET(DT_NODELABEL(adc)); + +struct vddh_data { + struct adc_channel_cfg acc; + struct adc_sequence as; + struct battery_value value; +}; + +static int vddh_sample_fetch(const struct device *dev, enum sensor_channel chan) { + // Make sure selected channel is supported + if (chan != SENSOR_CHAN_GAUGE_VOLTAGE && chan != SENSOR_CHAN_GAUGE_STATE_OF_CHARGE && + chan != SENSOR_CHAN_ALL) { + LOG_DBG("Selected channel is not supported: %d.", chan); + return -ENOTSUP; + } + + struct vddh_data *drv_data = dev->data; + struct adc_sequence *as = &drv_data->as; + + int rc = adc_read(adc, as); + as->calibrate = false; + + if (rc != 0) { + LOG_ERR("Failed to read ADC: %d", rc); + return rc; + } + + int32_t val = drv_data->value.adc_raw; + rc = adc_raw_to_millivolts(adc_ref_internal(adc), drv_data->acc.gain, as->resolution, &val); + if (rc != 0) { + LOG_ERR("Failed to convert raw ADC to mV: %d", rc); + return rc; + } + + drv_data->value.millivolts = val * VDDHDIV; + drv_data->value.state_of_charge = lithium_ion_mv_to_pct(drv_data->value.millivolts); + + LOG_DBG("ADC raw %d ~ %d mV => %d%%", drv_data->value.adc_raw, drv_data->value.millivolts, + drv_data->value.state_of_charge); + + return rc; +} + +static int vddh_channel_get(const struct device *dev, enum sensor_channel chan, + struct sensor_value *val) { + struct vddh_data const *drv_data = dev->data; + return battery_channel_get(&drv_data->value, chan, val); +} + +static const struct sensor_driver_api vddh_api = { + .sample_fetch = vddh_sample_fetch, + .channel_get = vddh_channel_get, +}; + +static int vddh_init(const struct device *dev) { + struct vddh_data *drv_data = dev->data; + + if (!device_is_ready(adc)) { + LOG_ERR("ADC device is not ready %s", adc->name); + return -ENODEV; + } + + drv_data->as = (struct adc_sequence){ + .channels = BIT(0), + .buffer = &drv_data->value.adc_raw, + .buffer_size = sizeof(drv_data->value.adc_raw), + .oversampling = 4, + .calibrate = true, + }; + +#ifdef CONFIG_ADC_NRFX_SAADC + drv_data->acc = (struct adc_channel_cfg){ + .gain = ADC_GAIN_1_5, + .reference = ADC_REF_INTERNAL, + .acquisition_time = ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 40), + .input_positive = SAADC_CH_PSELN_PSELN_VDDHDIV5, + }; + + drv_data->as.resolution = 12; +#else +#error Unsupported ADC +#endif + + const int rc = adc_channel_setup(adc, &drv_data->acc); + LOG_DBG("VDDHDIV5 setup returned %d", rc); + + return rc; +} + +static struct vddh_data vddh_data; + +DEVICE_DT_INST_DEFINE(0, &vddh_init, device_pm_control_nop, &vddh_data, NULL, POST_KERNEL, + CONFIG_SENSOR_INIT_PRIORITY, &vddh_api); diff --git a/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c b/app/drivers/sensor/battery/battery_voltage_divider.c similarity index 82% rename from app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c rename to app/drivers/sensor/battery/battery_voltage_divider.c index 9efd7fbd1f3..8981fb3a150 100644 --- a/app/drivers/sensor/battery_voltage_divider/battery_voltage_divider.c +++ b/app/drivers/sensor/battery/battery_voltage_divider.c @@ -7,11 +7,14 @@ #define DT_DRV_COMPAT zmk_battery_voltage_divider #include +#include #include #include #include #include +#include "battery_common.h" + LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct io_channel_config { @@ -37,24 +40,9 @@ struct bvd_data { const struct device *gpio; struct adc_channel_cfg acc; struct adc_sequence as; - uint16_t adc_raw; - uint16_t voltage; - uint8_t state_of_charge; + struct battery_value value; }; -static uint8_t lithium_ion_mv_to_pct(int16_t bat_mv) { - // Simple linear approximation of a battery based off adafruit's discharge graph: - // https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages - - if (bat_mv >= 4200) { - return 100; - } else if (bat_mv <= 3450) { - return 0; - } - - return bat_mv * 2 / 15 - 459; -} - static int bvd_sample_fetch(const struct device *dev, enum sensor_channel chan) { struct bvd_data *drv_data = dev->data; const struct bvd_config *drv_cfg = dev->config; @@ -87,18 +75,18 @@ static int bvd_sample_fetch(const struct device *dev, enum sensor_channel chan) as->calibrate = false; if (rc == 0) { - int32_t val = drv_data->adc_raw; + int32_t val = drv_data->value.adc_raw; adc_raw_to_millivolts(adc_ref_internal(drv_data->adc), drv_data->acc.gain, as->resolution, &val); uint16_t millivolts = val * (uint64_t)drv_cfg->full_ohm / drv_cfg->output_ohm; - LOG_DBG("ADC raw %d ~ %d mV => %d mV", drv_data->adc_raw, val, millivolts); + LOG_DBG("ADC raw %d ~ %d mV => %d mV", drv_data->value.adc_raw, val, millivolts); uint8_t percent = lithium_ion_mv_to_pct(millivolts); LOG_DBG("Percent: %d", percent); - drv_data->voltage = millivolts; - drv_data->state_of_charge = percent; + drv_data->value.millivolts = millivolts; + drv_data->value.state_of_charge = percent; } else { LOG_DBG("Failed to read ADC: %d", rc); } @@ -119,23 +107,7 @@ static int bvd_sample_fetch(const struct device *dev, enum sensor_channel chan) static int bvd_channel_get(const struct device *dev, enum sensor_channel chan, struct sensor_value *val) { struct bvd_data *drv_data = dev->data; - - switch (chan) { - case SENSOR_CHAN_GAUGE_VOLTAGE: - val->val1 = drv_data->voltage / 1000; - val->val2 = (drv_data->voltage % 1000) * 1000U; - break; - - case SENSOR_CHAN_GAUGE_STATE_OF_CHARGE: - val->val1 = drv_data->state_of_charge; - val->val2 = 0; - break; - - default: - return -ENOTSUP; - } - - return 0; + return battery_channel_get(&drv_data->value, chan, val); } static const struct sensor_driver_api bvd_api = { @@ -173,8 +145,8 @@ static int bvd_init(const struct device *dev) { drv_data->as = (struct adc_sequence){ .channels = BIT(0), - .buffer = &drv_data->adc_raw, - .buffer_size = sizeof(drv_data->adc_raw), + .buffer = &drv_data->value.adc_raw, + .buffer_size = sizeof(drv_data->value.adc_raw), .oversampling = 4, .calibrate = true, }; diff --git a/app/drivers/sensor/battery_voltage_divider/CMakeLists.txt b/app/drivers/sensor/battery_voltage_divider/CMakeLists.txt deleted file mode 100644 index 4b7f042c95d..00000000000 --- a/app/drivers/sensor/battery_voltage_divider/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -zephyr_library() - -zephyr_library_sources(battery_voltage_divider.c) \ No newline at end of file diff --git a/app/drivers/sensor/battery_voltage_divider/Kconfig b/app/drivers/sensor/battery_voltage_divider/Kconfig deleted file mode 100644 index 18c4ea3aa04..00000000000 --- a/app/drivers/sensor/battery_voltage_divider/Kconfig +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -config ZMK_BATTERY_VOLTAGE_DIVIDER - bool "ZMK battery voltage divider" - select ADC - help - Enable ZMK battery voltage divider driver for battery monitoring. \ No newline at end of file diff --git a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml b/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml new file mode 100644 index 00000000000..a8904360f92 --- /dev/null +++ b/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml @@ -0,0 +1,11 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Battery SoC monitoring using nRF VDDH + +compatible: "zmk,battery-nrf-vddh" + +properties: + label: + required: true + type: string From 6d105f324b25dc71f1a44c7d7efcb1ff5c2ee4be Mon Sep 17 00:00:00 2001 From: Felix Sargent Date: Tue, 27 Jul 2021 16:18:52 -0700 Subject: [PATCH 0096/1130] =?UTF-8?q?Update=20docs=20to=20use=20=E2=80=9CS?= =?UTF-8?q?QT=E2=80=9D=20instead=20of=20=E2=80=9CQUOTE=E2=80=9D=20=20(#839?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update default keymap to use SQT Instead of the invalid “QUOTE” * Update keymap-example-file.md * Update docs/docs/keymap-example.md Co-authored-by: Pete Johanson Co-authored-by: Pete Johanson --- docs/docs/keymap-example-file.md | 2 +- docs/docs/keymap-example.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/keymap-example-file.md b/docs/docs/keymap-example-file.md index 4f92444a254..cb20cb6d393 100644 --- a/docs/docs/keymap-example-file.md +++ b/docs/docs/keymap-example-file.md @@ -14,7 +14,7 @@ // | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT >; diff --git a/docs/docs/keymap-example.md b/docs/docs/keymap-example.md index bfef94e1dc5..9d751f59944 100644 --- a/docs/docs/keymap-example.md +++ b/docs/docs/keymap-example.md @@ -10,7 +10,7 @@ // | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT >; From 3b9e9a7c1c8b7810016172c112ed395582005807 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Aug 2021 05:06:08 +0000 Subject: [PATCH 0097/1130] chore(deps-dev): bump eslint from 7.29.0 to 7.32.0 in /docs Bumps [eslint](https://github.com/eslint/eslint) from 7.29.0 to 7.32.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.29.0...v7.32.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 146 ++++++++++++++++++++++------------------- docs/package.json | 2 +- 2 files changed, 78 insertions(+), 70 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 6fd81ead766..bfaeec25312 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -21,7 +21,7 @@ "web-tree-sitter": "^0.19.4" }, "devDependencies": { - "eslint": "^7.29.0", + "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", @@ -5300,9 +5300,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -5319,38 +5319,19 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@fortawesome/fontawesome-common-types": { @@ -5407,6 +5388,26 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -6184,10 +6185,13 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, "node_modules/acorn-walk": { "version": "8.1.1", @@ -8499,13 +8503,14 @@ } }, "node_modules/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -8549,6 +8554,9 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { @@ -21728,9 +21736,9 @@ } }, "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -21744,33 +21752,14 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "requires": { "type-fest": "^0.20.2" } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } } } }, @@ -21816,6 +21805,23 @@ "@hapi/hoek": "^9.0.0" } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -22493,10 +22499,11 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} }, "acorn-walk": { "version": "8.1.1", @@ -24411,13 +24418,14 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", diff --git a/docs/package.json b/docs/package.json index ff5bb82fad9..ca8955c833c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -40,7 +40,7 @@ ] }, "devDependencies": { - "eslint": "^7.29.0", + "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", From f31ffd8acbf1725977744e836e2602e2cc488445 Mon Sep 17 00:00:00 2001 From: Devon Allie <35121016+devonallie@users.noreply.github.com> Date: Mon, 2 Aug 2021 20:12:11 -0300 Subject: [PATCH 0098/1130] fix(shields): Clean up default corne keymap. --- app/boards/shields/corne/corne.keymap | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/boards/shields/corne/corne.keymap b/app/boards/shields/corne/corne.keymap index f6152dbcf4d..53218a860c6 100644 --- a/app/boards/shields/corne/corne.keymap +++ b/app/boards/shields/corne/corne.keymap @@ -16,40 +16,40 @@ // ----------------------------------------------------------------------------------------- // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHFT | Z | X | C | V | B | | N | M | , | . | / | SHFT | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | ESC | // | GUI | LWR | SPC | | ENT | RSE | ALT | bindings = < &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ESC &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT >; }; lower_layer { // ----------------------------------------------------------------------------------------- -// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | +// | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | // | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | // | SHFT | | | | | | | | | | | | | // | GUI | | SPC | | ENT | | ALT | bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC - &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans - &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans + &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; raise_layer { // ----------------------------------------------------------------------------------------- -// | ESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | -// | CTRL | | | | | | | - | = | { | } | "|" | ` | -// | SHFT | | | | | | | _ | + | [ | ] | \ | ~ | // TODO: Fix this row when &mkp is committed +// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | +// | CTRL | | | | | | | - | = | [ | ] | \ | ` | +// | SHFT | | | | | | | _ | + | { | } | "|" | ~ | // | GUI | | SPC | | ENT | | ALT | bindings = < - &kp ESC &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC - &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp PIPE &kp GRAVE - &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp TILDE - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC + &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE + &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; }; From 2b9deb824b9fa6bb22d73ccec4794ff51fabdfc7 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Tue, 27 Jul 2021 00:14:52 -0500 Subject: [PATCH 0099/1130] feat(power): Update device power management Kconfig --- app/Kconfig | 2 +- app/src/ext_power_generic.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 68363d51677..f23930b4fff 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -267,7 +267,7 @@ choice SYS_PM_POLICY default PM_POLICY_APP endchoice -config DEVICE_POWER_MANAGEMENT +config PM_DEVICE default y config ZMK_IDLE_SLEEP_TIMEOUT diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 7464d4282e9..d2ca14dca18 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -32,7 +32,7 @@ struct ext_power_generic_data { #if IS_ENABLED(CONFIG_SETTINGS) bool settings_init; #endif -#ifdef CONFIG_DEVICE_POWER_MANAGEMENT +#ifdef CONFIG_PM_DEVICE uint32_t pm_state; #endif }; @@ -143,7 +143,7 @@ static int ext_power_generic_init(const struct device *dev) { return -EIO; } -#ifdef CONFIG_DEVICE_POWER_MANAGEMENT +#ifdef CONFIG_PM_DEVICE data->pm_state = DEVICE_PM_ACTIVE_STATE; #endif @@ -179,7 +179,7 @@ static int ext_power_generic_init(const struct device *dev) { return 0; } -#ifdef CONFIG_DEVICE_POWER_MANAGEMENT +#ifdef CONFIG_PM_DEVICE static int ext_power_generic_pm_control(const struct device *dev, uint32_t ctrl_command, void *context, device_pm_cb cb, void *arg) { int rc; @@ -210,7 +210,7 @@ static int ext_power_generic_pm_control(const struct device *dev, uint32_t ctrl_ return rc; } -#endif /* CONFIG_DEVICE_POWER_MANAGEMENT */ +#endif /* CONFIG_PM_DEVICE */ static const struct ext_power_generic_config config = { .label = DT_INST_GPIO_LABEL(0, control_gpios), From 1cafbd8069ae98682b4b4849a6dfd281c1370f58 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Tue, 27 Jul 2021 00:15:42 -0500 Subject: [PATCH 0100/1130] fix(power): Manually trigger pm_low_power_devices() before sleep --- app/src/activity.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/activity.c b/app/src/activity.c index 0661b270284..f31e608dbc5 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -55,6 +56,8 @@ void activity_work_handler(struct k_work *work) { int32_t inactive_time = current - activity_last_uptime; #if IS_ENABLED(CONFIG_ZMK_SLEEP) if (inactive_time > MAX_SLEEP_MS) { + // Put devices in low power mode before sleeping + pm_power_state_force((struct pm_state_info){PM_STATE_STANDBY, 0, 0}); set_state(ZMK_ACTIVITY_SLEEP); } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ From cf5c56c4f1023c3d6b3911e2f57724e54dfd6842 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sat, 24 Jul 2021 23:41:03 -0500 Subject: [PATCH 0101/1130] feat(boards): Use the nRF VDDH driver for the nice!nano v2 --- app/boards/arm/nice_nano/Kconfig.defconfig | 13 ++++++++++++- app/boards/arm/nice_nano/nice_nano_v2.dts | 6 +----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/boards/arm/nice_nano/Kconfig.defconfig b/app/boards/arm/nice_nano/Kconfig.defconfig index 0728bf0016d..876002bffa7 100644 --- a/app/boards/arm/nice_nano/Kconfig.defconfig +++ b/app/boards/arm/nice_nano/Kconfig.defconfig @@ -25,7 +25,18 @@ config ZMK_BLE config ZMK_USB default y +endif # BOARD_NICE_NANO || BOARD_NICE_NANO_V2 + +if BOARD_NICE_NANO + config ZMK_BATTERY_VOLTAGE_DIVIDER default y -endif # BOARD_NICE_NANO || BOARD_NICE_NANO_V2 +endif # BOARD_NICE_NANO + +if BOARD_NICE_NANO_V2 + +config ZMK_BATTERY_NRF_VDDH + default y + +endif # BOARD_NICE_NANO_V2 diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts index 7c044b4df6c..b17f478773d 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2.dts +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -16,11 +16,7 @@ }; vbatt { - compatible = "zmk,battery-voltage-divider"; + compatible = "zmk,battery-nrf-vddh"; label = "BATTERY"; - io-channels = <&adc (0x0D - 1)>; - // Multiply ADC result by 5 - full-ohms = <5>; - output-ohms = <1>; }; }; From 9d34cf561e11682840e10283f0a6947547a649b5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 2 Aug 2021 17:00:56 -0400 Subject: [PATCH 0102/1130] fix(usb): USB state changes in system thhread. * Use a `k_work` to send usb status events from the system workqueue thread, not the USB work thread. --- app/src/usb.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/usb.c b/app/src/usb.c index c2f61a5b53c..2f0fa439c42 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -19,6 +19,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static enum usb_dc_status_code usb_status = USB_DC_UNKNOWN; +static void raise_usb_status_changed_event(struct k_work *_work) { + ZMK_EVENT_RAISE(new_zmk_usb_conn_state_changed( + (struct zmk_usb_conn_state_changed){.conn_state = zmk_usb_get_conn_state()})); +} + +K_WORK_DEFINE(usb_status_notifier_work, raise_usb_status_changed_event); + #ifdef CONFIG_ZMK_USB static const struct device *hid_dev; @@ -54,14 +61,10 @@ int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { #endif /* CONFIG_ZMK_USB */ -static void raise_usb_status_changed_event() { - ZMK_EVENT_RAISE(new_zmk_usb_conn_state_changed( - (struct zmk_usb_conn_state_changed){.conn_state = zmk_usb_get_conn_state()})); -} - enum usb_dc_status_code zmk_usb_get_status() { return usb_status; } enum zmk_usb_conn_state zmk_usb_get_conn_state() { + LOG_DBG("state: %d", usb_status); switch (usb_status) { case USB_DC_DISCONNECTED: case USB_DC_UNKNOWN: @@ -78,7 +81,7 @@ enum zmk_usb_conn_state zmk_usb_get_conn_state() { void usb_status_cb(enum usb_dc_status_code status, const uint8_t *params) { usb_status = status; - raise_usb_status_changed_event(); + k_work_submit(&usb_status_notifier_work); }; static int zmk_usb_init(const struct device *_arg) { From d05d7ec2d2b40ca40339b4d7cceb31974bac0e94 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 2 Aug 2021 21:44:01 -0400 Subject: [PATCH 0103/1130] feat(endpoints): Add endpoint select changed event. --- app/CMakeLists.txt | 1 + app/include/zmk/endpoints.h | 8 +------- app/include/zmk/endpoints_types.h | 12 ++++++++++++ .../zmk/events/endpoint_selection_changed.h | 18 ++++++++++++++++++ app/src/endpoints.c | 4 ++++ app/src/events/endpoint_selection_changed.c | 10 ++++++++++ 6 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 app/include/zmk/endpoints_types.h create mode 100644 app/include/zmk/events/endpoint_selection_changed.h create mode 100644 app/src/events/endpoint_selection_changed.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index e283487fe06..5092deffe16 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -36,6 +36,7 @@ target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/events/layer_state_changed.c) target_sources(app PRIVATE src/events/keycode_state_changed.c) target_sources(app PRIVATE src/events/modifiers_state_changed.c) +target_sources(app PRIVATE src/events/endpoint_selection_changed.c) target_sources(app PRIVATE src/events/sensor_event.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/ble_active_profile_changed.c) diff --git a/app/include/zmk/endpoints.h b/app/include/zmk/endpoints.h index 0d2bbce0163..c8860533e1d 100644 --- a/app/include/zmk/endpoints.h +++ b/app/include/zmk/endpoints.h @@ -6,13 +6,7 @@ #pragma once -#include -#include - -enum zmk_endpoint { - ZMK_ENDPOINT_USB, - ZMK_ENDPOINT_BLE, -}; +#include int zmk_endpoints_select(enum zmk_endpoint endpoint); int zmk_endpoints_toggle(); diff --git a/app/include/zmk/endpoints_types.h b/app/include/zmk/endpoints_types.h new file mode 100644 index 00000000000..70804a613d8 --- /dev/null +++ b/app/include/zmk/endpoints_types.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +enum zmk_endpoint { + ZMK_ENDPOINT_USB, + ZMK_ENDPOINT_BLE, +}; diff --git a/app/include/zmk/events/endpoint_selection_changed.h b/app/include/zmk/events/endpoint_selection_changed.h new file mode 100644 index 00000000000..38a6a8e526e --- /dev/null +++ b/app/include/zmk/events/endpoint_selection_changed.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +#include +#include + +struct zmk_endpoint_selection_changed { + enum zmk_endpoint endpoint; +}; + +ZMK_EVENT_DECLARE(zmk_endpoint_selection_changed); diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 93dfb81768f..c15aad87acc 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -16,6 +16,7 @@ #include #include #include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -242,6 +243,9 @@ static void update_current_endpoint() { current_endpoint = new_endpoint; LOG_INF("Endpoint changed: %d", current_endpoint); + + ZMK_EVENT_RAISE(new_zmk_endpoint_selection_changed( + (struct zmk_endpoint_selection_changed){.endpoint = current_endpoint})); } } diff --git a/app/src/events/endpoint_selection_changed.c b/app/src/events/endpoint_selection_changed.c new file mode 100644 index 00000000000..7f9014da9a0 --- /dev/null +++ b/app/src/events/endpoint_selection_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(zmk_endpoint_selection_changed); From 08687b170920c20661be89569213e7ab32f2dc61 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 2 Aug 2021 21:44:23 -0400 Subject: [PATCH 0104/1130] fix(display): Update output status on endpoint selection change. --- app/src/display/widgets/output_status.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 7e37f9064f8..3bfbebf6f85 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -13,6 +13,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include #include #include #include @@ -86,6 +87,8 @@ int output_status_listener(const zmk_event_t *eh) { } ZMK_LISTENER(widget_output_status, output_status_listener) +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); + #if defined(CONFIG_USB) ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); #endif From 47109641d8d257ee8124fecd5977d618fa5839b4 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 4 Aug 2021 22:25:41 -0400 Subject: [PATCH 0105/1130] Add warning about peripheral encoders. --- docs/docs/features/encoders.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index cf86ea9529e..434fee23a92 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -5,6 +5,11 @@ sidebar_label: Encoders Existing support for encoders in ZMK is focused around the five pin EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. + +:::note +Encoders are currently only support on the left/central sides of splits. For progress on this, see [#728](https://github.com/zmkfirmware/zmk/pull/728). +::: + ## Enabling EC11 Encoders To enable encoders for boards that have existing encoder support, uncomment the `EC11_CONFIG=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware. From 6870fdc6043f3398f82befea6c04500ec4ab966b Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 8 Aug 2021 13:09:21 -0500 Subject: [PATCH 0106/1130] fix(docs): Appease Prettier Fixed code formatting in docs files. --- docs/docs/features/encoders.md | 1 - docs/src/pages/power-profiler.js | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 434fee23a92..16a55aec1c1 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -5,7 +5,6 @@ sidebar_label: Encoders Existing support for encoders in ZMK is focused around the five pin EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. - :::note Encoders are currently only support on the left/central sides of splits. For progress on this, see [#728](https://github.com/zmkfirmware/zmk/pull/728). ::: diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js index fc803c587de..e96999266b5 100644 --- a/docs/src/pages/power-profiler.js +++ b/docs/src/pages/power-profiler.js @@ -16,9 +16,9 @@ import "../css/power-profiler.css"; const Disclaimer = `This profiler makes many assumptions about typing activity, battery characteristics, hardware behavior, and - doesn't account for error of user inputs. For example battery + doesn't account for error of user inputs. For example battery mAh, which is often incorrectly advertised higher than it's actual capacity. - While it tries to estimate power usage using real power readings of ZMK, + While it tries to estimate power usage using real power readings of ZMK, every person will have different results that may be worse or even better than the estimation given here.`; From 689ba2d171d07eb32497c3b424f157b61c9646c4 Mon Sep 17 00:00:00 2001 From: chad3814 Date: Wed, 11 Aug 2021 23:08:49 -0500 Subject: [PATCH 0107/1130] fix(docs): Fix "All" typo --- docs/docs/features/keymaps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index 538d589b335..0c89c42a0b1 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -98,7 +98,7 @@ The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, ` ### Root devicetree Node -ALl the remaining keymap nodes will be nested inside of the root devicetree node, like so: +All the remaining keymap nodes will be nested inside of the root devicetree node, like so: ```devicetree / { From d964faaa896df439ce886b0f96ca39387d802277 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Thu, 12 Aug 2021 18:52:11 -0500 Subject: [PATCH 0108/1130] fix(docs): Standardize all internal links --- docs/docs/behaviors/bluetooth.md | 2 +- docs/docs/behaviors/hold-tap.md | 2 +- docs/docs/behaviors/key-press.md | 16 +++--- docs/docs/behaviors/layers.md | 2 +- docs/docs/behaviors/mod-tap.md | 2 +- docs/docs/codes/_keyboard-keypad.mdx | 2 +- docs/docs/customization.md | 8 +-- .../development/boards-shields-keymaps.md | 2 +- docs/docs/development/build-flash.md | 4 +- docs/docs/development/ide-integration.md | 2 +- docs/docs/development/new-shield.md | 8 +-- docs/docs/development/setup.md | 2 +- docs/docs/development/tests.md | 2 +- docs/docs/development/usb-logging.md | 2 +- docs/docs/features/encoders.md | 4 +- docs/docs/features/keymaps.md | 4 +- docs/docs/hardware.md | 4 +- docs/docs/intro.md | 52 +++++++++---------- docs/docs/troubleshooting.md | 2 +- docs/docs/user-setup.md | 4 +- 20 files changed, 63 insertions(+), 63 deletions(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index df017b053d1..3c33aa31bc3 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -84,5 +84,5 @@ ZMK support bluetooth “profiles” which allows connection to multiple devices The bluetooth MAC address and negotiated keys during pairing are stored in the permanent storage on your chip and can be reused even after reflashing the firmware. If for some reason you want to delete the stored information, you can bind the `BT_CLR` behavior described above to a key and use it to clear the _current_ profile. :::note -If you clear bond of a paired profile, make sure you do the same thing on the peer device as well (typically achieved by _removing_ or _forgetting_ the bluetooth connection). Otherwise the peer will try to connect to your keyboard whenever it discovers it. But while the MAC address of both devices could remain the same, the security key no longer match: the peer device still possess the old key negotiated in the previous pairing procedure, but our keyboard firmware has deleted that key. So the connection will fail. If you [enabled USB logging](../development/usb-logging), you might see a lot of failed connection attempts due to the reason of “Security failed”. +If you clear bond of a paired profile, make sure you do the same thing on the peer device as well (typically achieved by _removing_ or _forgetting_ the bluetooth connection). Otherwise the peer will try to connect to your keyboard whenever it discovers it. But while the MAC address of both devices could remain the same, the security key no longer match: the peer device still possess the old key negotiated in the previous pairing procedure, but our keyboard firmware has deleted that key. So the connection will fail. If you [enabled USB logging](../development/usb-logging.md), you might see a lot of failed connection attempts due to the reason of “Security failed”. ::: diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index de4bf81f622..6817c602dff 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -33,7 +33,7 @@ When the hold-tap key is released and the hold behavior has not been triggered, ### Basic usage -For basic usage, please see [mod-tap](./mod-tap.md) and [layer-tap](./layers.md) pages. +For basic usage, please see [mod-tap](mod-tap.md) and [layer-tap](layers.md) pages. ### Advanced Configuration diff --git a/docs/docs/behaviors/key-press.md b/docs/docs/behaviors/key-press.md index 859c79735e0..f048b686c61 100644 --- a/docs/docs/behaviors/key-press.md +++ b/docs/docs/behaviors/key-press.md @@ -10,14 +10,14 @@ a certain key. The categories of supported codes are: -- [Keyboard & Keypad](../codes/keyboard-keypad) -- [Editing](../codes/editing) -- [Media](../codes/media) -- [Applications](../codes/applications) -- [Input Assist](../codes/input-assist) -- [Power](../codes/power) +- [Keyboard & Keypad](../codes/keyboard-keypad.mdx) +- [Editing](../codes/editing.mdx) +- [Media](../codes/media.mdx) +- [Applications](../codes/applications.mdx) +- [Input Assist](../codes/input-assist.mdx) +- [Power](../codes/power.mdx) -Please visit the [codes](../codes) section for a comprehensive list. +Please visit the [codes](../codes/index.mdx) section for a comprehensive list. For advanced users, user-defined HID usages are also supported but must be encoded, please see [`dt-bindings/zmk/keys.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/keys.h) for further insight. @@ -36,7 +36,7 @@ Doing so makes a set of defines such as `A`, `N1`, etc. available for use with t ### Improperly defined keymap - `dtlib.DTError: .dts.pre.tmp:` When compiling firmware from a keymap, it may be common to encounter an error in the form of a`dtlib.DTError: .dts.pre.tmp:`. -For instructions to resolve such an error, click [here](../troubleshooting###Improperly-defined-keymap) +For instructions to resolve such an error, click [here](../troubleshooting.md###Improperly-defined-keymap) ## Key Press diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 35e37aef92a..098952e7b12 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -43,7 +43,7 @@ Example: ## Layer-tap -The "layer-tap" behavior enables a layer when a key is held, and output another key when the key is only tapped for a short time. For more information on the inner workings of layer-tap, see [hold-tap](./hold-tap.md). +The "layer-tap" behavior enables a layer when a key is held, and output another key when the key is only tapped for a short time. For more information on the inner workings of layer-tap, see [hold-tap](hold-tap.md). ### Behavior Binding diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index f29f739b0b1..9ad25f39302 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -46,4 +46,4 @@ You can configure a different tapping term in your keymap: ### Additional information -The mod-tap is a [hold-tap](./hold-tap.md) under the hood with the "balanced" flavor and tapping-term-ms 200. +The mod-tap is a [hold-tap](hold-tap.md) under the hood with the "balanced" flavor and tapping-term-ms 200. diff --git a/docs/docs/codes/_keyboard-keypad.mdx b/docs/docs/codes/_keyboard-keypad.mdx index a00a4f4f202..063a854025e 100644 --- a/docs/docs/codes/_keyboard-keypad.mdx +++ b/docs/docs/codes/_keyboard-keypad.mdx @@ -24,7 +24,7 @@ import Table from "@site/src/components/codes/Table"; ### Modifiers -The [Modifiers](./modifiers) page includes further information. +The [Modifiers](modifiers.mdx) page includes further information. diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 626a291b919..31576e9a566 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -4,7 +4,7 @@ sidebar_label: Customizing ZMK --- After verifying you can successfully flash the default firmware, you will probably want to begin customizing your keymap and other keyboard options. -[In the initial setup tutorial](user-setup), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works +[In the initial setup tutorial](user-setup.md), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works with the main `zmk` firmware repository to build your desired firmware. The main advantage of a discrete configuration folder is ensuring that the working components of ZMK are kept separate from your personal keyboard settings, reducing the amount of file manipulation in the configuration process. This makes flashing ZMK to your keyboard much easier, especially because you don't need to keep an up-to-date copy of zmk on your computer at all times. @@ -26,7 +26,7 @@ various config settings that can be commented/uncommented to modify how your fir ## Keymap Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. -Refer to the [Keymap](/docs/features/keymaps) documentation to learn more. +Refer to the [Keymap](features/keymaps.md) documentation to learn more. ## Publishing @@ -39,7 +39,7 @@ If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https: ## Building from a local `zmk` fork using `zmk-config` -[As outlined here](development/build-flash), firmware comes in the form of .uf2 files, which can be built locally using the command `west build`. Normally, +[As outlined here](development/build-flash.md), firmware comes in the form of .uf2 files, which can be built locally using the command `west build`. Normally, `west build` will default to using the in-tree .keymap and .conf files found in your local copy of the `zmk` repository. However, you can append the command, `-DZMK_CONFIG="C:/the/absolute/path/config"` to `west build` in order to use the contents of your `zmk-config` folder instead of the default keyboard settings. **Notice that this path should point to the folder labelled `config` within your `zmk-config` folder.** @@ -55,4 +55,4 @@ west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Doc For normal keyboards, follow the same flashing instructions as before to flash your updated firmware. For split keyboards, only the central (left) side will need to be reflashed if you are just updating your keymap. -More troubleshooting information for split keyboards can be found [here](troubleshooting#split-keyboard-halves-unable-to-pair). +More troubleshooting information for split keyboards can be found [here](troubleshooting.md#split-keyboard-halves-unable-to-pair). diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 4d5397cf260..539168842f1 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -11,7 +11,7 @@ The foundational elements needed to get a specific keyboard working with ZMK can - A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. These three core architectural elements are defined per-keyboard, and _where_ they are defined depends on the specifics of how that -keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and shields](/docs/faq#why-boards-and-shields--why-not-just-keyboard). +keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and shields](../faq.md#why-boards-and-shields--why-not-just-keyboard). ## Self-Contained Keyboard diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index ecc607c65e8..cb00b1a92e0 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -90,7 +90,7 @@ This produces `left` and `right` subfolders under the `build` directory and two ### Building from `zmk-config` Folder -Instead of building .uf2 files using the default keymap and config files, you can build directly from your [`zmk-config` folder](../user-setup#github-repo) by adding +Instead of building .uf2 files using the default keymap and config files, you can build directly from your [`zmk-config` folder](../user-setup.md#github-repo) by adding `-DZMK_CONFIG="C:/the/absolute/path/config"` to your `west build` command. **Notice that this path should point to the folder labelled `config` within your `zmk-config` folder.** For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: @@ -107,7 +107,7 @@ volume automatically -- we need to delete the default volume before binding it t 1. Remove all the containers that are not running via the command `docker container prune`. We need to remove the ZMK container before we can delete the default `zmk-config` volume referenced by it. If you do not want to delete all the containers that are not running, you can find the id of the ZMK container and use `docker rm` to delete that one only. 1. Remove the default volume via the command `docker volume rm zmk-config`. -Then you can bind the `zmk-config` volume to the correct path pointing to your local [zmk-config](./customization.md) folder: +Then you can bind the `zmk-config` volume to the correct path pointing to your local [zmk-config](customization.md) folder: ``` docker volume create --driver local -o o=bind -o type=none -o \ diff --git a/docs/docs/development/ide-integration.md b/docs/docs/development/ide-integration.md index 7576af55feb..6ca433214eb 100644 --- a/docs/docs/development/ide-integration.md +++ b/docs/docs/development/ide-integration.md @@ -35,7 +35,7 @@ terminal to the ZMK repository and run the following command: west config build.cmake-args -- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ``` -Every [build](build-flash#building) will now update the database. You will +Every [build](build-flash.md#building) will now update the database. You will need to build once to create the database before code completion will work. We'll tell Visual Studio Code where to find the database in the next step. diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 28904c07079..857d3a3b629 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -30,7 +30,7 @@ ZMK support for split keyboards requires a few more files than single boards to :::note This guide describes how to add shield to the ZMK main repository. If you are building firmware for your own prototype or handwired keyboard, it is recommended to use your own user config repository. Follow the -[user setup guide](./user-setup.md) to create your user config repository first. When following the rest +[user setup guide](user-setup.md) to create your user config repository first. When following the rest of this guide, replace the `app/` directory in the ZMK main repository with the `config/` directory in your user config repository. For example, `app/boards/shields/` should now be `config/boards/shields/`. @@ -449,7 +449,7 @@ Add the following line to your keymap file to add default encoder behavior bindi sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; ``` -Add additional bindings as necessary to match the default number of encoders on your board. See the [Encoders](/docs/features/encoders) and [Keymap](/docs/features/keymaps) feature documentation for more details. +Add additional bindings as necessary to match the default number of encoders on your board. See the [Encoders](../features/encoders.md) and [Keymap](../features/keymaps.md) feature documentation for more details. @@ -477,11 +477,11 @@ west flash ``` Please have a look at documentation specific to -[building and flashing](build-flash) for additional information. +[building and flashing](build-flash.md) for additional information. :::note Further testing your keyboard shield without altering the root keymap file can be done with the use of `-DZMK_CONFIG` in your `west build` command, -shown [here](build-flash#building-from-zmk-config-folder) +shown [here](build-flash.md#building-from-zmk-config-folder) ::: ## Updating `build.yml` diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 0963ffd8ad4..0d0f9b8cc8f 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -456,7 +456,7 @@ This step pulls down quite a bit of tooling. Go grab a cup of coffee, it can tak :::info If you're using Docker, you're done with setup! You must restart the container at this point. The easiest way to do so is to close the VS Code window, verify that the container has stopped in Docker Dashboard, and reopen the container with VS Code. -Once your container is restarted, proceed to [Building and Flashing](./development/build-flash.md). +Once your container is restarted, proceed to [Building and Flashing](development/build-flash.md). ::: #### Export Zephyr™ Core diff --git a/docs/docs/development/tests.md b/docs/docs/development/tests.md index 9ad689b62f4..5ebf14f2c54 100644 --- a/docs/docs/development/tests.md +++ b/docs/docs/development/tests.md @@ -3,7 +3,7 @@ title: Tests sidebar_label: Tests --- -Running tests requires [native posix support](posix-board). Any folder under `/app/tests` +Running tests requires [native posix support](posix-board.md). Any folder under `/app/tests` containing `native_posix.keymap` will be selected when running `west test`. Run a single test with `west test `, like `west test tests/toggle-layer/normal`. diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.md index 4149ef4382e..cd1d834d06c 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.md @@ -24,7 +24,7 @@ The `CONFIG_ZMK_USB_LOGGING` KConfig value needs to be set, either by copy and p `west build -t menuconfig` and manually enabling the setting in that UI at `ZMK -> Advanced -> USB Logging`. :::note -If you are debugging your own keyboard in your [user config repository](./user-setup.md), use +If you are debugging your own keyboard in your [user config repository](user-setup.md), use `config/boards/shields//.conf` instead of `app/prj.conf`. In Github Actions, you can search the `Kconfig file` build log to verify the options above have been enabled for you successfully. diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 16a55aec1c1..f1bb8bc8488 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -29,7 +29,7 @@ Rotation is handled separately as a type of sensor. The behavior for this is set sensor-bindings = ; ``` -- `BINDING`, for now, has only one behavior available; `&inc_dec_kp` for key presses (see [Key Press](/docs/behaviors/key-press) for details on available keycodes). +- `BINDING`, for now, has only one behavior available; `&inc_dec_kp` for key presses (see [Key Press](../behaviors/key-press.md) for details on available keycodes). - `CW_KEY` is the keycode activated by a clockwise turn. - `CCW_KEY` is the keycode activated by a counter-clockwise turn. @@ -45,4 +45,4 @@ Here, the left encoder is configured to control volume up and down while the rig ## Adding Encoder Support -See the [New Keyboard Shield](/docs/development/new-shield#encoders) documentation for how to add or modify additional encoders to your shield. +See the [New Keyboard Shield](../development/new-shield.md#encoders) documentation for how to add or modify additional encoders to your shield. diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index 0c89c42a0b1..be0aa203cf7 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -33,7 +33,7 @@ For example, the simplest behavior in ZMK is the "key press" behavior, which res (a certain spot on the keyboard), and when that position is pressed, send a keycode to the host, and when the key position is released, updates the host to notify of the keycode being released. -For the full set of possible behaviors, start at the [Key Press](/docs/behaviors/key-press) behavior. +For the full set of possible behaviors, start at the [Key Press](../behaviors/key-press.md) behavior. ## Layers @@ -131,7 +131,7 @@ Each layer should have: 1. A `bindings` property this will be a list of behaviour bindings, one for each key position for the keyboard. 1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way) -For the full set of possible behaviors, start at the [Key Press](/docs/behaviors/key-press) behavior. +For the full set of possible behaviors, start at the [Key Press](../behaviors/key-press.md) behavior. ### Complete Example diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 210587b34f1..4aacf95d53b 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -11,7 +11,7 @@ have had their hardware details codified in boards/shields for ZMK. ::: With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. -That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](/docs/faq#what-is-a-shield) that have been written and tested by the ZMK contributors. +That being said, there are currently only a few specific [boards](faq.md#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been written and tested by the ZMK contributors. ## Boards @@ -53,4 +53,4 @@ Until detailed documentation is available, feel free to ask questions about how ## Contributing -If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield) documentation. +If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation. diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 7e8e1e6781b..2c9b19bd884 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -14,32 +14,32 @@ ZMK is currently missing some features found in other popular firmware. This tab | Legend: | ✅ Supported | 🚧 Under Development | 💡 Planned | | :------ | :----------- | :------------------- | :--------- | -| **Feature** | ZMK | BlueMicro | QMK | -| ------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | -| Low Latency BLE Support | ✅ | ✅ | | -| Multi-Device BLE Support | ✅ | | | -| [USB Connectivity](behaviors/outputs) | ✅ | ✅ | ✅ | -| User Configuration Repositories | ✅ | | | -| Split Keyboard Support | ✅ | ✅ | ✅ | -| [Keymaps and Layers](behaviors/layers) | ✅ | ✅ | ✅ | -| [Hold-Tap](behaviors/hold-tap) (which includes [Mod-Tap](behaviors/mod-tap) and [Layer-Tap](behaviors/layers/#layer-tap)) | ✅ | ✅ | ✅ | -| [Keyboard Codes](codes/#keyboard) | ✅ | ✅ | ✅ | -| [Media](codes/#media-controls) & [Consumer](codes/#consumer-controls) Codes | ✅ | ✅ | ✅ | -| [Encoders](features/encoders)[^1] | ✅ | ✅ | ✅ | -| [Display Support](features/displays)[^2] | 🚧 | 🚧 | ✅ | -| [RGB Underglow](features/underglow) | ✅ | ✅ | ✅ | -| One Shot Keys | ✅ | ✅ | ✅ | -| [Combo Keys](features/combos) | ✅ | | ✅ | -| Macros | 🚧 | ✅ | ✅ | -| Mouse Keys | 💡 | ✅ | ✅ | -| Low Active Power Usage | ✅ | | | -| Low Power Sleep States | ✅ | ✅ | | -| [Low Power Mode (VCC Shutoff)](behaviors/power) | ✅ | ✅ | | -| Battery Reporting | ✅ | ✅ | | -| Shell over BLE | 💡 | | | -| Realtime Keymap Updating | 💡 | | ✅ | -| AVR/8 Bit | | | ✅ | -| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | +| **Feature** | ZMK | BlueMicro | QMK | +| ---------------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | +| Low Latency BLE Support | ✅ | ✅ | | +| Multi-Device BLE Support | ✅ | | | +| [USB Connectivity](behaviors/outputs.md) | ✅ | ✅ | ✅ | +| User Configuration Repositories | ✅ | | | +| Split Keyboard Support | ✅ | ✅ | ✅ | +| [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | +| [Hold-Tap](behaviors/hold-tap.md) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md/#layer-tap)) | ✅ | ✅ | ✅ | +| [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | +| [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | +| [Encoders](features/encoders.md)[^1] | ✅ | ✅ | ✅ | +| [Display Support](features/displays.md)[^2] | 🚧 | 🚧 | ✅ | +| [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | +| One Shot Keys | ✅ | ✅ | ✅ | +| [Combo Keys](features/combos.md) | ✅ | | ✅ | +| Macros | 🚧 | ✅ | ✅ | +| Mouse Keys | 💡 | ✅ | ✅ | +| Low Active Power Usage | ✅ | | | +| Low Power Sleep States | ✅ | ✅ | | +| [Low Power Mode (VCC Shutoff)](behaviors/power.md) | ✅ | ✅ | | +| Battery Reporting | ✅ | ✅ | | +| Shell over BLE | 💡 | | | +| Realtime Keymap Updating | 💡 | | ✅ | +| AVR/8 Bit | | | ✅ | +| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | [^2]: Encoders are not currently supported on peripheral side splits. [^1]: OLEDs are currently proof of concept in ZMK. diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index edf5d6e71b6..d3f3eeaea93 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -26,7 +26,7 @@ Variations of the warnings shown below occur when flashing the `.uf2` ### CMake Error An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. -For more information, click [here](../docs/development/setup#environment-variables). +For more information, click [here](../docs/development/setup.md#environment-variables). ### dtlib.DTError diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 5e130f00a82..0e95d506a60 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -105,7 +105,7 @@ Pick an MCU board: :::note If you are building firmware for a new keyboard shield that is not included in the built-in list of shields, you can choose any shield from the list that is similar to yours to generate the repository, -and edit / add necessary files according to the [guide for adding new keyboard shield](./development/new-shield). +and edit / add necessary files according to the [guide for adding new keyboard shield](development/new-shield.md). ::: When prompted, enter the number for the corresponding keyboard shield you would like to target: @@ -195,7 +195,7 @@ storage device. Once the flash is complete, the controller should automatically ZMK will automatically advertise itself as connectable if it is not currently connected to a device. You should be able to see your keyboard from the bluetooth scanning view of your laptop or phone / tablet. It is reported by some users that the connections with Android / iOS devices are generally smoother than with laptops, so if you have trouble connecting, you could try to connect from your phone or tablet first to eliminate any potential hardware issues. -ZMK support multiple BLE “profiles”, which allows you to connect to and switch among multiple devices. Please refer to the [Bluetooth behavior](behaviors/bluetooth) section for detailed explanations of how to use them. +ZMK support multiple BLE “profiles”, which allows you to connect to and switch among multiple devices. Please refer to the [Bluetooth behavior](behaviors/bluetooth.md) section for detailed explanations of how to use them. ### Connecting Split Keyboard Halves From db1afe603733c29e55815dc926e910126ae4a217 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 12 Aug 2021 12:06:16 -0700 Subject: [PATCH 0109/1130] fix: basic setup link --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1950ddf92af..fe7292a8fee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -91,7 +91,7 @@ You can setup git to run prettier automatically when you commit by installing th ### Development Setup To get your development environment setup going, start at the -[basic setup](https://zmk.dev/docs/dev-setup) docs, and make sure you can build and flash +[basic setup](https://zmk.dev/docs/development/setup/) docs, and make sure you can build and flash your own locally built firmware. ### Formatting From b235034dc933d349844d6b172d404a5281052247 Mon Sep 17 00:00:00 2001 From: chad3814 Date: Wed, 11 Aug 2021 14:11:15 -0500 Subject: [PATCH 0110/1130] fix typo "load your newly flashed firmware" not "load your newfly flashed fireware" --- docs/docs/user-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 0e95d506a60..6c80f882cd1 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -189,7 +189,7 @@ To flash the firmware, first put your board into bootloader mode by double click or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass -storage device. Once the flash is complete, the controller should automatically restart, and load your newfly flashed firmware. +storage device. Once the flash is complete, the controller should automatically restart, and load your newly flashed firmware. ## Wirelessly Connecting Your Keyboard From 08078210da3414a06384f654a6f4417c895edccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Aumu=CC=88ller?= Date: Fri, 6 Aug 2021 13:31:06 +0200 Subject: [PATCH 0111/1130] fix: Planck rev 6.1 My Planck rev 6.1 would not register any keys without "col2row". I also had to apply a matrix_transform in order to move them to the correct position. Peeking into #228 helped for finding this. I also add transforms for the 2u spacebar layouts. --- app/boards/arm/planck/planck_rev6.dts | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index 7e69b1fc33e..27d0dafc2a0 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -6,6 +6,7 @@ /dts-v1/; #include +#include / { model = "Plack PCD, rev6"; @@ -15,11 +16,13 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zmk,kscan = &kscan0; + zmk,matrix_transform = &layout_grid_transform; }; kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; label = "KSCAN"; + diode-direction = "col2row"; row-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> @@ -40,6 +43,42 @@ ; }; +layout_grid_transform: + keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,4) RC(7,5) RC(7,0) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) + >; + }; +layout_mit_transform: + keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,4) RC(7,0) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) + >; + }; +layout_2x2u_transform: + keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,5) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) + >; + }; }; &usb { From a124eb9f9e364aa617fc7ee71cb72ede42d1f326 Mon Sep 17 00:00:00 2001 From: Darryldh Date: Tue, 3 Aug 2021 20:26:58 -0400 Subject: [PATCH 0112/1130] feat(display): IL0323 driver for EPD displays. * Basic driver, using the GD7965 driver as a basis, since the ICs are very similar. --- app/drivers/CMakeLists.txt | 3 +- app/drivers/Kconfig | 3 +- app/drivers/display/CMakeLists.txt | 4 + app/drivers/display/Kconfig | 4 + app/drivers/display/Kconfig.il0323 | 11 + app/drivers/display/il0323.c | 432 ++++++++++++++++++ app/drivers/display/il0323_regs.h | 81 ++++ .../bindings/display/gooddisplay,il0323.yaml | 61 +++ 8 files changed, 597 insertions(+), 2 deletions(-) create mode 100644 app/drivers/display/CMakeLists.txt create mode 100644 app/drivers/display/Kconfig create mode 100644 app/drivers/display/Kconfig.il0323 create mode 100644 app/drivers/display/il0323.c create mode 100644 app/drivers/display/il0323_regs.h create mode 100644 app/dts/bindings/display/gooddisplay,il0323.yaml diff --git a/app/drivers/CMakeLists.txt b/app/drivers/CMakeLists.txt index b47e87a26bd..c1625f2fdea 100644 --- a/app/drivers/CMakeLists.txt +++ b/app/drivers/CMakeLists.txt @@ -2,4 +2,5 @@ # SPDX-License-Identifier: MIT add_subdirectory(kscan) -add_subdirectory(sensor) \ No newline at end of file +add_subdirectory(sensor) +add_subdirectory(display) \ No newline at end of file diff --git a/app/drivers/Kconfig b/app/drivers/Kconfig index 7ad76992b3c..5bcc522d4c0 100644 --- a/app/drivers/Kconfig +++ b/app/drivers/Kconfig @@ -2,4 +2,5 @@ # SPDX-License-Identifier: MIT rsource "kscan/Kconfig" -rsource "sensor/Kconfig" \ No newline at end of file +rsource "sensor/Kconfig" +rsource "display/Kconfig" \ No newline at end of file diff --git a/app/drivers/display/CMakeLists.txt b/app/drivers/display/CMakeLists.txt new file mode 100644 index 00000000000..13b97193994 --- /dev/null +++ b/app/drivers/display/CMakeLists.txt @@ -0,0 +1,4 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +zephyr_sources_ifdef(CONFIG_IL0323 il0323.c) \ No newline at end of file diff --git a/app/drivers/display/Kconfig b/app/drivers/display/Kconfig new file mode 100644 index 00000000000..efa064d4f6b --- /dev/null +++ b/app/drivers/display/Kconfig @@ -0,0 +1,4 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +rsource "Kconfig.il0323" \ No newline at end of file diff --git a/app/drivers/display/Kconfig.il0323 b/app/drivers/display/Kconfig.il0323 new file mode 100644 index 00000000000..f39015efde2 --- /dev/null +++ b/app/drivers/display/Kconfig.il0323 @@ -0,0 +1,11 @@ +# Copyright (c) 2020 Phytec Messtechnik GmbH, Peter Johanson +# SPDX-License-Identifier: Apache-2.0 + +# IL0323 display controller configuration options + +config IL0323 + bool "IL0323 compatible display controller driver" + depends on SPI + depends on HEAP_MEM_POOL_SIZE != 0 + help + Enable driver for IL0323 compatible controller. \ No newline at end of file diff --git a/app/drivers/display/il0323.c b/app/drivers/display/il0323.c new file mode 100644 index 00000000000..9ec8162f763 --- /dev/null +++ b/app/drivers/display/il0323.c @@ -0,0 +1,432 @@ +/* + * Copyright (c) 2020 PHYTEC Messtechnik GmbHH, Peter Johanson + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define DT_DRV_COMPAT gooddisplay_il0323 + +#include +#include +#include +#include +#include +#include +#include + +#include "il0323_regs.h" + +#include +LOG_MODULE_REGISTER(il0323, CONFIG_DISPLAY_LOG_LEVEL); + +/** + * IL0323 compatible EPD controller driver. + * + */ + +#define IL0323_SPI_FREQ DT_INST_PROP(0, spi_max_frequency) +#define IL0323_BUS_NAME DT_INST_BUS_LABEL(0) +#define IL0323_DC_PIN DT_INST_GPIO_PIN(0, dc_gpios) +#define IL0323_DC_FLAGS DT_INST_GPIO_FLAGS(0, dc_gpios) +#define IL0323_DC_CNTRL DT_INST_GPIO_LABEL(0, dc_gpios) +#define IL0323_CS_PIN DT_INST_SPI_DEV_CS_GPIOS_PIN(0) +#define IL0323_CS_FLAGS DT_INST_SPI_DEV_CS_GPIOS_FLAGS(0) +#if DT_INST_SPI_DEV_HAS_CS_GPIOS(0) +#define IL0323_CS_CNTRL DT_INST_SPI_DEV_CS_GPIOS_LABEL(0) +#endif +#define IL0323_BUSY_PIN DT_INST_GPIO_PIN(0, busy_gpios) +#define IL0323_BUSY_CNTRL DT_INST_GPIO_LABEL(0, busy_gpios) +#define IL0323_BUSY_FLAGS DT_INST_GPIO_FLAGS(0, busy_gpios) +#define IL0323_RESET_PIN DT_INST_GPIO_PIN(0, reset_gpios) +#define IL0323_RESET_CNTRL DT_INST_GPIO_LABEL(0, reset_gpios) +#define IL0323_RESET_FLAGS DT_INST_GPIO_FLAGS(0, reset_gpios) + +#define EPD_PANEL_WIDTH DT_INST_PROP(0, width) +#define EPD_PANEL_HEIGHT DT_INST_PROP(0, height) +#define IL0323_PIXELS_PER_BYTE 8U + +/* Horizontally aligned page! */ +#define IL0323_NUMOF_PAGES (EPD_PANEL_WIDTH / IL0323_PIXELS_PER_BYTE) +#define IL0323_PANEL_FIRST_GATE 0U +#define IL0323_PANEL_LAST_GATE (EPD_PANEL_HEIGHT - 1) +#define IL0323_PANEL_FIRST_PAGE 0U +#define IL0323_PANEL_LAST_PAGE (IL0323_NUMOF_PAGES - 1) +#define IL0323_BUFFER_SIZE 1280 + +struct il0323_data { + const struct device *reset; + const struct device *dc; + const struct device *busy; + const struct device *spi_dev; + struct spi_config spi_config; +#if defined(IL0323_CS_CNTRL) + struct spi_cs_control cs_ctrl; +#endif +}; + +static uint8_t il0323_pwr[] = DT_INST_PROP(0, pwr); + +static uint8_t last_buffer[IL0323_BUFFER_SIZE]; +static bool blanking_on = true; + +static inline int il0323_write_cmd(struct il0323_data *driver, uint8_t cmd, uint8_t *data, + size_t len) { + struct spi_buf buf = {.buf = &cmd, .len = sizeof(cmd)}; + struct spi_buf_set buf_set = {.buffers = &buf, .count = 1}; + + gpio_pin_set(driver->dc, IL0323_DC_PIN, 1); + if (spi_write(driver->spi_dev, &driver->spi_config, &buf_set)) { + return -EIO; + } + + if (data != NULL) { + buf.buf = data; + buf.len = len; + gpio_pin_set(driver->dc, IL0323_DC_PIN, 0); + if (spi_write(driver->spi_dev, &driver->spi_config, &buf_set)) { + return -EIO; + } + } + + return 0; +} + +static inline void il0323_busy_wait(struct il0323_data *driver) { + int pin = gpio_pin_get(driver->busy, IL0323_BUSY_PIN); + + while (pin > 0) { + __ASSERT(pin >= 0, "Failed to get pin level"); + // LOG_DBG("wait %u", pin); + k_msleep(IL0323_BUSY_DELAY); + pin = gpio_pin_get(driver->busy, IL0323_BUSY_PIN); + } +} + +static int il0323_update_display(const struct device *dev) { + struct il0323_data *driver = dev->data; + + LOG_DBG("Trigger update sequence"); + if (il0323_write_cmd(driver, IL0323_CMD_DRF, NULL, 0)) { + return -EIO; + } + + k_msleep(IL0323_BUSY_DELAY); + + return 0; +} + +static int il0323_blanking_off(const struct device *dev) { + struct il0323_data *driver = dev->data; + + if (blanking_on) { + /* Update EPD pannel in normal mode */ + il0323_busy_wait(driver); + if (il0323_update_display(dev)) { + return -EIO; + } + } + + blanking_on = false; + + return 0; +} + +static int il0323_blanking_on(const struct device *dev) { + blanking_on = true; + + return 0; +} + +static int il0323_write(const struct device *dev, const uint16_t x, const uint16_t y, + const struct display_buffer_descriptor *desc, const void *buf) { + struct il0323_data *driver = dev->data; + uint16_t x_end_idx = x + desc->width - 1; + uint16_t y_end_idx = y + desc->height - 1; + uint8_t ptl[IL0323_PTL_REG_LENGTH] = {0}; + size_t buf_len; + + LOG_DBG("x %u, y %u, height %u, width %u, pitch %u", x, y, desc->height, desc->width, + desc->pitch); + + buf_len = MIN(desc->buf_size, desc->height * desc->width / IL0323_PIXELS_PER_BYTE); + __ASSERT(desc->width <= desc->pitch, "Pitch is smaller then width"); + __ASSERT(buf != NULL, "Buffer is not available"); + __ASSERT(buf_len != 0U, "Buffer of length zero"); + __ASSERT(!(desc->width % IL0323_PIXELS_PER_BYTE), "Buffer width not multiple of %d", + IL0323_PIXELS_PER_BYTE); + + LOG_DBG("buf_len %d", buf_len); + if ((y_end_idx > (EPD_PANEL_HEIGHT - 1)) || (x_end_idx > (EPD_PANEL_WIDTH - 1))) { + LOG_ERR("Position out of bounds"); + return -EINVAL; + } + + /* Setup Partial Window and enable Partial Mode */ + ptl[IL0323_PTL_HRST_IDX] = x; + ptl[IL0323_PTL_HRED_IDX] = x_end_idx; + ptl[IL0323_PTL_VRST_IDX] = y; + ptl[IL0323_PTL_VRED_IDX] = y_end_idx; + ptl[sizeof(ptl) - 1] = IL0323_PTL_PT_SCAN; + LOG_HEXDUMP_DBG(ptl, sizeof(ptl), "ptl"); + + il0323_busy_wait(driver); + if (il0323_write_cmd(driver, IL0323_CMD_PIN, NULL, 0)) { + return -EIO; + } + + if (il0323_write_cmd(driver, IL0323_CMD_PTL, ptl, sizeof(ptl))) { + return -EIO; + } + + if (il0323_write_cmd(driver, IL0323_CMD_DTM1, last_buffer, IL0323_BUFFER_SIZE)) { + return -EIO; + } + + if (il0323_write_cmd(driver, IL0323_CMD_DTM2, (uint8_t *)buf, buf_len)) { + return -EIO; + } + + memcpy(last_buffer, (uint8_t *)buf, IL0323_BUFFER_SIZE); + + /* Update partial window and disable Partial Mode */ + if (blanking_on == false) { + if (il0323_update_display(dev)) { + return -EIO; + } + } + + if (il0323_write_cmd(driver, IL0323_CMD_POUT, NULL, 0)) { + return -EIO; + } + + return 0; +} + +static int il0323_read(const struct device *dev, const uint16_t x, const uint16_t y, + const struct display_buffer_descriptor *desc, void *buf) { + LOG_ERR("not supported"); + return -ENOTSUP; +} + +static void *il0323_get_framebuffer(const struct device *dev) { + LOG_ERR("not supported"); + return NULL; +} + +static int il0323_set_brightness(const struct device *dev, const uint8_t brightness) { + LOG_WRN("not supported"); + return -ENOTSUP; +} + +static int il0323_set_contrast(const struct device *dev, uint8_t contrast) { + LOG_WRN("not supported"); + return -ENOTSUP; +} + +static void il0323_get_capabilities(const struct device *dev, struct display_capabilities *caps) { + memset(caps, 0, sizeof(struct display_capabilities)); + caps->x_resolution = EPD_PANEL_WIDTH; + caps->y_resolution = EPD_PANEL_HEIGHT; + caps->supported_pixel_formats = PIXEL_FORMAT_MONO10; + caps->current_pixel_format = PIXEL_FORMAT_MONO10; + caps->screen_info = SCREEN_INFO_MONO_MSB_FIRST | SCREEN_INFO_EPD; +} + +static int il0323_set_orientation(const struct device *dev, + const enum display_orientation orientation) { + LOG_ERR("Unsupported"); + return -ENOTSUP; +} + +static int il0323_set_pixel_format(const struct device *dev, const enum display_pixel_format pf) { + if (pf == PIXEL_FORMAT_MONO10) { + return 0; + } + + LOG_ERR("not supported"); + return -ENOTSUP; +} + +static int il0323_clear_and_write_buffer(const struct device *dev, uint8_t pattern, bool update) { + struct display_buffer_descriptor desc = { + .buf_size = IL0323_NUMOF_PAGES, + .width = EPD_PANEL_WIDTH, + .height = 1, + .pitch = EPD_PANEL_WIDTH, + }; + uint8_t *line; + + line = k_malloc(IL0323_NUMOF_PAGES); + if (line == NULL) { + return -ENOMEM; + } + + memset(line, pattern, IL0323_NUMOF_PAGES); + for (int i = 0; i < EPD_PANEL_HEIGHT; i++) { + il0323_write(dev, 0, i, &desc, line); + } + + k_free(line); + + if (update == true) { + if (il0323_update_display(dev)) { + return -EIO; + } + } + + return 0; +} + +static int il0323_controller_init(const struct device *dev) { + struct il0323_data *driver = dev->data; + uint8_t tmp[IL0323_TRES_REG_LENGTH]; + + LOG_DBG(""); + + gpio_pin_set(driver->reset, IL0323_RESET_PIN, 1); + k_msleep(IL0323_RESET_DELAY); + gpio_pin_set(driver->reset, IL0323_RESET_PIN, 0); + k_msleep(IL0323_RESET_DELAY); + il0323_busy_wait(driver); + + LOG_DBG("Initialize IL0323 controller"); + + if (il0323_write_cmd(driver, IL0323_CMD_PWR, il0323_pwr, sizeof(il0323_pwr))) { + return -EIO; + } + + /* Turn on: booster, controller, regulators, and sensor. */ + if (il0323_write_cmd(driver, IL0323_CMD_PON, NULL, 0)) { + return -EIO; + } + + k_msleep(IL0323_PON_DELAY); + il0323_busy_wait(driver); + + /* Pannel settings, KW mode */ + tmp[0] = IL0323_PSR_UD | IL0323_PSR_SHL | IL0323_PSR_SHD | IL0323_PSR_RST; +#if EPD_PANEL_WIDTH == 80 + +#if EPD_PANEL_HEIGHT == 128 + tmp[0] |= IL0323_PSR_RES_HEIGHT; +#endif /* panel height */ + +#else + tmp[0] |= IL0323_PSR_RES_WIDTH; +#if EPD_PANEL_HEIGHT == 96 + tmp[0] |= IL0323_PSR_RES_HEIGHT; +#else +#endif /* panel height */ + +#endif /* panel width */ + + LOG_HEXDUMP_DBG(tmp, 1, "PSR"); + if (il0323_write_cmd(driver, IL0323_CMD_PSR, tmp, 1)) { + return -EIO; + } + + /* Set panel resolution */ + tmp[IL0323_TRES_HRES_IDX] = EPD_PANEL_WIDTH; + tmp[IL0323_TRES_VRES_IDX] = EPD_PANEL_HEIGHT; + LOG_HEXDUMP_DBG(tmp, IL0323_TRES_REG_LENGTH, "TRES"); + if (il0323_write_cmd(driver, IL0323_CMD_TRES, tmp, IL0323_TRES_REG_LENGTH)) { + return -EIO; + } + + tmp[IL0323_CDI_CDI_IDX] = DT_INST_PROP(0, cdi); + LOG_HEXDUMP_DBG(tmp, IL0323_CDI_REG_LENGTH, "CDI"); + if (il0323_write_cmd(driver, IL0323_CMD_CDI, tmp, IL0323_CDI_REG_LENGTH)) { + return -EIO; + } + + tmp[0] = DT_INST_PROP(0, tcon); + if (il0323_write_cmd(driver, IL0323_CMD_TCON, tmp, 1)) { + return -EIO; + } + + /* Enable Auto Sequence */ + tmp[0] = IL0323_AUTO_PON_DRF_POF; + if (il0323_write_cmd(driver, IL0323_CMD_AUTO, tmp, 1)) { + return -EIO; + } + + if (il0323_clear_and_write_buffer(dev, 0xff, false)) { + return -1; + } + + return 0; +} + +static int il0323_init(const struct device *dev) { + struct il0323_data *driver = dev->data; + + LOG_DBG(""); + + driver->spi_dev = device_get_binding(IL0323_BUS_NAME); + if (driver->spi_dev == NULL) { + LOG_ERR("Could not get SPI device for IL0323"); + return -EIO; + } + + driver->spi_config.frequency = IL0323_SPI_FREQ; + driver->spi_config.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8); + driver->spi_config.slave = DT_INST_REG_ADDR(0); + driver->spi_config.cs = NULL; + + driver->reset = device_get_binding(IL0323_RESET_CNTRL); + if (driver->reset == NULL) { + LOG_ERR("Could not get GPIO port for IL0323 reset"); + return -EIO; + } + + gpio_pin_configure(driver->reset, IL0323_RESET_PIN, GPIO_OUTPUT_INACTIVE | IL0323_RESET_FLAGS); + + driver->dc = device_get_binding(IL0323_DC_CNTRL); + if (driver->dc == NULL) { + LOG_ERR("Could not get GPIO port for IL0323 DC signal"); + return -EIO; + } + + gpio_pin_configure(driver->dc, IL0323_DC_PIN, GPIO_OUTPUT_INACTIVE | IL0323_DC_FLAGS); + + driver->busy = device_get_binding(IL0323_BUSY_CNTRL); + if (driver->busy == NULL) { + LOG_ERR("Could not get GPIO port for IL0323 busy signal"); + return -EIO; + } + + gpio_pin_configure(driver->busy, IL0323_BUSY_PIN, GPIO_INPUT | IL0323_BUSY_FLAGS); + +#if defined(IL0323_CS_CNTRL) + driver->cs_ctrl.gpio_dev = device_get_binding(IL0323_CS_CNTRL); + if (!driver->cs_ctrl.gpio_dev) { + LOG_ERR("Unable to get SPI GPIO CS device"); + return -EIO; + } + + driver->cs_ctrl.gpio_pin = IL0323_CS_PIN; + driver->cs_ctrl.gpio_dt_flags = IL0323_CS_FLAGS; + driver->cs_ctrl.delay = 0U; + driver->spi_config.cs = &driver->cs_ctrl; +#endif + + return il0323_controller_init(dev); +} + +static struct il0323_data il0323_driver; + +static struct display_driver_api il0323_driver_api = { + .blanking_on = il0323_blanking_on, + .blanking_off = il0323_blanking_off, + .write = il0323_write, + .read = il0323_read, + .get_framebuffer = il0323_get_framebuffer, + .set_brightness = il0323_set_brightness, + .set_contrast = il0323_set_contrast, + .get_capabilities = il0323_get_capabilities, + .set_pixel_format = il0323_set_pixel_format, + .set_orientation = il0323_set_orientation, +}; + +DEVICE_DT_INST_DEFINE(0, il0323_init, device_pm_control_nop, &il0323_driver, NULL, POST_KERNEL, + CONFIG_APPLICATION_INIT_PRIORITY, &il0323_driver_api); \ No newline at end of file diff --git a/app/drivers/display/il0323_regs.h b/app/drivers/display/il0323_regs.h new file mode 100644 index 00000000000..3eb19755fdb --- /dev/null +++ b/app/drivers/display/il0323_regs.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2020 PHYTEC Messtechnik GmbH, Peter Johanson + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_DRIVERS_DISPLAY_IL0323_REGS_H_ +#define ZEPHYR_DRIVERS_DISPLAY_IL0323_REGS_H_ + +#define IL0323_CMD_PSR 0x00 +#define IL0323_CMD_PWR 0x01 +#define IL0323_CMD_POF 0x02 +#define IL0323_CMD_PFS 0x03 +#define IL0323_CMD_PON 0x04 +#define IL0323_CMD_PMES 0x05 +#define IL0323_CMD_CPSET 0x06 +#define IL0323_CMD_DSLP 0x07 +#define IL0323_CMD_DTM1 0x10 +#define IL0323_CMD_DSP 0x11 +#define IL0323_CMD_DRF 0x12 +#define IL0323_CMD_DTM2 0x13 +#define IL0323_CMD_AUTO 0x17 +#define IL0323_CMD_LUTOPT 0x2A +#define IL0323_CMD_PLL 0x30 +#define IL0323_CMD_TSC 0x40 +#define IL0323_CMD_TSE 0x41 +#define IL0323_CMD_PBC 0x44 +#define IL0323_CMD_CDI 0x50 +#define IL0323_CMD_LPD 0x51 +#define IL0323_CMD_TCON 0x60 +#define IL0323_CMD_TRES 0x61 +#define IL0323_CMD_GSST 0x65 +#define IL0323_CMD_REV 0x70 +#define IL0323_CMD_FLG 0x71 +#define IL0323_CMD_CRC 0x72 +#define IL0323_CMD_AMV 0x80 +#define IL0323_CMD_VV 0x81 +#define IL0323_CMD_VDCS 0x82 +#define IL0323_CMD_PTL 0x90 +#define IL0323_CMD_PIN 0x91 +#define IL0323_CMD_POUT 0x92 +#define IL0323_CMD_PGM 0xA0 +#define IL0323_CMD_APG 0xA1 +#define IL0323_CMD_ROTP 0xA2 +#define IL0323_CMD_CCSET 0xE0 +#define IL0323_CMD_PWS 0xE3 +#define IL0323_CMD_LVSEL 0xE4 +#define IL0323_CMD_TSSET 0xE5 + +#define IL0323_PSR_RES_WIDTH BIT(7) +#define IL0323_PSR_RES_HEIGHT BIT(6) +#define IL0323_PSR_LUT_REG BIT(5) +#define IL0323_PSR_LUT_OTP BIT(4) +#define IL0323_PSR_UD BIT(3) +#define IL0323_PSR_SHL BIT(2) +#define IL0323_PSR_SHD BIT(1) +#define IL0323_PSR_RST BIT(0) + +#define IL0323_AUTO_PON_DRF_POF 0xA5 +#define IL0323_AUTO_PON_DRF_POF_DSLP 0xA7 + +#define IL0323_CDI_REG_LENGTH 1U +#define IL0323_CDI_CDI_IDX 0 + +#define IL0323_TRES_REG_LENGTH 2U +#define IL0323_TRES_HRES_IDX 0 +#define IL0323_TRES_VRES_IDX 1 + +#define IL0323_PTL_REG_LENGTH 5U +#define IL0323_PTL_HRST_IDX 0 +#define IL0323_PTL_HRED_IDX 1 +#define IL0323_PTL_VRST_IDX 2 +#define IL0323_PTL_VRED_IDX 3 +#define IL0323_PTL_PT_SCAN BIT(0) + +/* Time constants in ms */ +#define IL0323_RESET_DELAY 10U +#define IL0323_PON_DELAY 100U +#define IL0323_BUSY_DELAY 1U + +#endif /* ZEPHYR_DRIVERS_DISPLAY_IL0323_REGS_H_ */ \ No newline at end of file diff --git a/app/dts/bindings/display/gooddisplay,il0323.yaml b/app/dts/bindings/display/gooddisplay,il0323.yaml new file mode 100644 index 00000000000..d4a9ac7dd5b --- /dev/null +++ b/app/dts/bindings/display/gooddisplay,il0323.yaml @@ -0,0 +1,61 @@ +# Copyright (c) 2020, Phytec Messtechnik GmbH, Peter Johanson +# SPDX-License-Identifier: Apache-2.0 + +description: IL0323 EPD display controller + +compatible: "gooddisplay,il0323" + +include: spi-device.yaml + +properties: + height: + type: int + required: true + description: Height in pixel of the panel driven by the controller + + width: + type: int + required: true + description: Width in pixel of the panel driven by the controller + + reset-gpios: + type: phandle-array + required: true + description: RESET pin. + + The RESET pin of GD7965 is active low. + If connected directly the MCU pin should be configured + as active low. + + dc-gpios: + type: phandle-array + required: true + description: DC pin. + + The DC pin of GD7965 is active low (transmission command byte). + If connected directly the MCU pin should be configured + as active low. + + busy-gpios: + type: phandle-array + required: true + description: BUSY pin. + + The BUSY pin of GD7965 is active low. + If connected directly the MCU pin should be configured + as active low. + + pwr: + type: uint8-array + required: true + description: Power Setting (PWR) values + + cdi: + type: int + required: true + description: VCOM and data interval value + + tcon: + type: int + required: true + description: TCON setting value \ No newline at end of file From e491c282e74559d10818394feae3d64c7a559acf Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 27 Aug 2021 23:06:28 -0400 Subject: [PATCH 0113/1130] fix(display): Add proper LVGL label dep. --- app/src/display/widgets/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/display/widgets/Kconfig b/app/src/display/widgets/Kconfig index f12d99a328f..b20babcfe8b 100644 --- a/app/src/display/widgets/Kconfig +++ b/app/src/display/widgets/Kconfig @@ -7,6 +7,7 @@ config ZMK_WIDGET_LAYER_STATUS bool "Widget for highest, active layer using small icons" default y depends on !ZMK_SPLIT || ZMK_SPLIT_BLE_ROLE_CENTRAL + select LVGL_USE_LABEL select LVGL_FONT_MONTSERRAT_12 config ZMK_WIDGET_BATTERY_STATUS From 2a9ab828b53b70539621ccb4ec4fa0cd47afc959 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 3 Sep 2021 20:11:05 -0700 Subject: [PATCH 0114/1130] fix: Add semicolons for tidbit and eek in setup script --- docs/static/setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 6b40d24e50b..c089a5f8800 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -118,8 +118,8 @@ select opt in "${options[@]}" "Quit"; do 15 ) shield_title="Jorne" shield="jorne"; split="y"; break;; 16 ) shield_title="Jian" shield="jian"; split="y"; break;; 17 ) shield_title="CRBN" shield="crbn"; split="n"; break;; - 18 ) shield_title="Tidbit" shield="tidbit"; split="n" break;; - 19 ) shield_title="Eek!" shield="eek"; split="n" break;; + 18 ) shield_title="Tidbit" shield="tidbit"; split="n"; break;; + 19 ) shield_title="Eek!" shield="eek"; split="n"; break;; 20 ) shield_title="BFO-9000" shield="bfo9000"; split="y"; break;; 21 ) shield_title="Helix" shield="helix"; split="y"; break;; From 82cb76269811105bbe89569367d888d7a3fdd083 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 25 Jul 2021 15:23:04 -0500 Subject: [PATCH 0115/1130] refactor(kscan): Demacroify GPIO matrix driver Refactored the GPIO matrix kscan driver so that only the data and config structures are defined in the foreach macro. Functionality is unchanged except for the addition of DT properties to adjust polling speed. This should make it easier to add other enhancements later, like improved and customizable debounce behavior. --- app/drivers/kscan/kscan_gpio_matrix.c | 696 +++++++++++------- .../bindings/kscan/zmk,kscan-gpio-matrix.yaml | 5 + 2 files changed, 429 insertions(+), 272 deletions(-) diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 698595381a0..5465dd30a37 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -1,48 +1,158 @@ /* - * Copyright (c) 2020 The ZMK Contributors + * Copyright (c) 2020-2021 The ZMK Contributors * * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT zmk_kscan_gpio_matrix - #include -#include +#include #include +#include #include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#define DT_DRV_COMPAT zmk_kscan_gpio_matrix + #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) -struct kscan_gpio_item_config { - char *label; +#define INST_DIODE_DIR(n) DT_ENUM_IDX(DT_DRV_INST(n), diode_direction) +#define COND_DIODE_DIR(n, row2col_code, col2row_code) \ + COND_CODE_0(INST_DIODE_DIR(n), row2col_code, col2row_code) + +#define INST_ROWS_LEN(n) DT_INST_PROP_LEN(n, row_gpios) +#define INST_COLS_LEN(n) DT_INST_PROP_LEN(n, col_gpios) +#define INST_MATRIX_LEN(n) (INST_ROWS_LEN(n) * INST_COLS_LEN(n)) +#define INST_INPUTS_LEN(n) COND_DIODE_DIR(n, (INST_COLS_LEN(n)), (INST_ROWS_LEN(n))) + +#define USE_POLLING IS_ENABLED(CONFIG_ZMK_KSCAN_MATRIX_POLLING) +#define USE_INTERRUPTS (!USE_POLLING) + +#define COND_INTERRUPTS(code) COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (), code) +#define COND_POLL_OR_INTERRUPTS(pollcode, intcode) \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, pollcode, intcode) + +// TODO (Zephr 2.6): replace the following +// kscan_gpio_dt_spec -> gpio_dt_spec +// KSCAN_GPIO_DT_SPEC_GET_BY_IDX -> GPIO_DT_SPEC_GET_BY_IDX +// gpio_pin_get -> gpio_pin_get_dt +// gpio_pin_set -> gpio_pin_set_dt +// gpio_pin_interrupt_configure -> gpio_pin_interrupt_configure_dt +struct kscan_gpio_dt_spec { + const struct device *port; gpio_pin_t pin; - gpio_flags_t flags; + gpio_dt_flags_t dt_flags; }; -#define _KSCAN_GPIO_ITEM_CFG_INIT(n, prop, idx) \ +#define KSCAN_GPIO_DT_SPEC_GET_BY_IDX(node_id, prop, idx) \ { \ - .label = DT_INST_GPIO_LABEL_BY_IDX(n, prop, idx), \ - .pin = DT_INST_GPIO_PIN_BY_IDX(n, prop, idx), \ - .flags = DT_INST_GPIO_FLAGS_BY_IDX(n, prop, idx), \ - }, + .port = DEVICE_DT_GET(DT_GPIO_CTLR_BY_IDX(node_id, prop, idx)), \ + .pin = DT_GPIO_PIN_BY_IDX(node_id, prop, idx), \ + .dt_flags = DT_GPIO_FLAGS_BY_IDX(node_id, prop, idx), \ + } + +#define KSCAN_GPIO_ROW_CFG_INIT(idx, inst_idx) \ + KSCAN_GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), row_gpios, idx), +#define KSCAN_GPIO_COL_CFG_INIT(idx, inst_idx) \ + KSCAN_GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), col_gpios, idx), + +enum kscan_diode_direction { + KSCAN_ROW2COL, + KSCAN_COL2ROW, +}; + +struct kscan_matrix_irq_callback { + const struct device *dev; + struct gpio_callback callback; + struct k_delayed_work *work; +}; + +struct kscan_matrix_data { + const struct device *dev; + kscan_callback_t callback; + struct k_delayed_work work; +#if USE_POLLING + struct k_timer poll_timer; +#else + /** Array of length config->inputs.len */ + struct kscan_matrix_irq_callback *irqs; +#endif + /** + * Current state of the matrix as a flattened 2D array of length + * (config->rows.len * config->cols.len) + */ + bool *current_state; + /** Buffer for reading in the next matrix state. Parallel array to current_state. */ + bool *next_state; +}; -#define _KSCAN_GPIO_ROW_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, row_gpios, idx) -#define _KSCAN_GPIO_COL_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, col_gpios, idx) +struct kscan_gpio_list { + const struct kscan_gpio_dt_spec *gpios; + size_t len; +}; + +/** Define a kscan_gpio_list from a compile-time GPIO array. */ +#define KSCAN_GPIO_LIST(gpio_array) \ + ((struct kscan_gpio_list){.gpios = gpio_array, .len = ARRAY_SIZE(gpio_array)}) + +struct kscan_matrix_config { + struct kscan_gpio_list rows; + struct kscan_gpio_list cols; + struct kscan_gpio_list inputs; + struct kscan_gpio_list outputs; + int32_t debounce_period_ms; + int32_t poll_period_ms; + enum kscan_diode_direction diode_direction; +}; + +/** + * Get the index into a matrix state array from a row and column. + */ +static int state_index_rc(const struct kscan_matrix_config *config, const int row, const int col) { + __ASSERT(row < config->rows.len, "Invalid row %i", row); + __ASSERT(col < config->cols.len, "Invalid column %i", col); + + return (col * config->rows.len) + row; +} + +/** + * Get the index into a matrix state array from input/output pin indices. + */ +static int state_index_io(const struct kscan_matrix_config *config, const int input_idx, + const int output_idx) { + return (config->diode_direction == KSCAN_ROW2COL) + ? state_index_rc(config, output_idx, input_idx) + : state_index_rc(config, input_idx, output_idx); +} + +static int kscan_matrix_set_all_outputs(const struct device *dev, const int value) { + const struct kscan_matrix_config *config = dev->config; + + for (int i = 0; i < config->outputs.len; i++) { + const struct kscan_gpio_dt_spec *gpio = &config->outputs.gpios[i]; + + int err = gpio_pin_set(gpio->port, gpio->pin, value); + if (err) { + LOG_ERR("Failed to set output %i to %i: %i", i, value, err); + return err; + } + } + + return 0; +} -#if !defined(CONFIG_ZMK_KSCAN_MATRIX_POLLING) -static int kscan_gpio_config_interrupts(const struct device **devices, - const struct kscan_gpio_item_config *configs, size_t len, - gpio_flags_t flags) { - for (int i = 0; i < len; i++) { - const struct device *dev = devices[i]; - const struct kscan_gpio_item_config *cfg = &configs[i]; +#if USE_INTERRUPTS +static int kscan_matrix_interrupt_configure(const struct device *dev, const gpio_flags_t flags) { + const struct kscan_matrix_config *config = dev->config; - int err = gpio_pin_interrupt_configure(dev, cfg->pin, flags); + for (int i = 0; i < config->inputs.len; i++) { + const struct kscan_gpio_dt_spec *gpio = &config->inputs.gpios[i]; + int err = gpio_pin_interrupt_configure(gpio->port, gpio->pin, flags); if (err) { - LOG_ERR("Unable to enable matrix GPIO interrupt"); + LOG_ERR("Unable to configure interrupt for pin %u on %s", gpio->pin, gpio->port->name); return err; } } @@ -51,257 +161,299 @@ static int kscan_gpio_config_interrupts(const struct device **devices, } #endif -#define COND_POLLING(code) COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (code), ()) -#define COND_INTERRUPTS(code) COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (), (code)) -#define COND_POLL_OR_INTERRUPTS(pollcode, intcode) \ - COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, pollcode, intcode) +#if USE_INTERRUPTS +static int kscan_matrix_interrupt_enable(const struct device *dev) { + int err = kscan_matrix_interrupt_configure(dev, GPIO_INT_LEVEL_ACTIVE); + if (err) { + return err; + } -#define INST_MATRIX_ROWS(n) DT_INST_PROP_LEN(n, row_gpios) -#define INST_MATRIX_COLS(n) DT_INST_PROP_LEN(n, col_gpios) -#define INST_OUTPUT_LEN(n) \ - COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (INST_MATRIX_ROWS(n)), \ - (INST_MATRIX_COLS(n))) -#define INST_INPUT_LEN(n) \ - COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (INST_MATRIX_COLS(n)), \ - (INST_MATRIX_ROWS(n))) - -#define GPIO_INST_INIT(n) \ - COND_INTERRUPTS( \ - struct kscan_gpio_irq_callback_##n { \ - struct COND_CODE_0(DT_INST_PROP(n, debounce_period), (k_work), (k_delayed_work)) * \ - work; \ - struct gpio_callback callback; \ - const struct device *dev; \ - }; \ - static struct kscan_gpio_irq_callback_##n irq_callbacks_##n[INST_INPUT_LEN(n)];) \ - struct kscan_gpio_config_##n { \ - struct kscan_gpio_item_config rows[INST_MATRIX_ROWS(n)]; \ - struct kscan_gpio_item_config cols[INST_MATRIX_COLS(n)]; \ - }; \ - struct kscan_gpio_data_##n { \ - kscan_callback_t callback; \ - COND_POLLING(struct k_timer poll_timer;) \ - struct COND_CODE_0(DT_INST_PROP(n, debounce_period), (k_work), (k_delayed_work)) work; \ - bool matrix_state[INST_MATRIX_ROWS(n)][INST_MATRIX_COLS(n)]; \ - const struct device *rows[INST_MATRIX_ROWS(n)]; \ - const struct device *cols[INST_MATRIX_COLS(n)]; \ - const struct device *dev; \ - }; \ - static const struct device **kscan_gpio_input_devices_##n(const struct device *dev) { \ - struct kscan_gpio_data_##n *data = dev->data; \ - return (COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (data->cols), \ - (data->rows))); \ - } \ - static const struct kscan_gpio_item_config *kscan_gpio_input_configs_##n( \ - const struct device *dev) { \ - const struct kscan_gpio_config_##n *cfg = dev->config; \ - return (( \ - COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (cfg->cols), (cfg->rows)))); \ - } \ - static const struct device **kscan_gpio_output_devices_##n(const struct device *dev) { \ - struct kscan_gpio_data_##n *data = dev->data; \ - return (COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (data->rows), \ - (data->cols))); \ - } \ - static const struct kscan_gpio_item_config *kscan_gpio_output_configs_##n( \ - const struct device *dev) { \ - const struct kscan_gpio_config_##n *cfg = dev->config; \ - return ( \ - COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (cfg->rows), (cfg->cols))); \ - } \ - COND_INTERRUPTS( \ - static int kscan_gpio_enable_interrupts_##n(const struct device *dev) { \ - return kscan_gpio_config_interrupts(kscan_gpio_input_devices_##n(dev), \ - kscan_gpio_input_configs_##n(dev), \ - INST_INPUT_LEN(n), GPIO_INT_LEVEL_ACTIVE); \ - } static int kscan_gpio_disable_interrupts_##n(const struct device *dev) { \ - return kscan_gpio_config_interrupts(kscan_gpio_input_devices_##n(dev), \ - kscan_gpio_input_configs_##n(dev), \ - INST_INPUT_LEN(n), GPIO_INT_DISABLE); \ - }) \ - static void kscan_gpio_set_output_state_##n(const struct device *dev, int value) { \ - int err; \ - for (int i = 0; i < INST_OUTPUT_LEN(n); i++) { \ - const struct device *in_dev = kscan_gpio_output_devices_##n(dev)[i]; \ - const struct kscan_gpio_item_config *cfg = &kscan_gpio_output_configs_##n(dev)[i]; \ - if ((err = gpio_pin_set(in_dev, cfg->pin, value))) { \ - LOG_DBG("FAILED TO SET OUTPUT %d to %d", cfg->pin, err); \ - } \ - } \ - } \ - static void kscan_gpio_set_matrix_state_##n( \ - bool state[INST_MATRIX_ROWS(n)][INST_MATRIX_COLS(n)], uint32_t input_index, \ - uint32_t output_index, bool value) { \ - state[COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (output_index), \ - (input_index))] \ - [COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (input_index), \ - (output_index))] = value; \ - } \ - static int kscan_gpio_read_##n(const struct device *dev) { \ - COND_INTERRUPTS(bool submit_follow_up_read = false;) \ - struct kscan_gpio_data_##n *data = dev->data; \ - static bool read_state[INST_MATRIX_ROWS(n)][INST_MATRIX_COLS(n)]; \ - int err; \ - /* Disable our interrupts temporarily while we scan, to avoid */ \ - /* re-entry while we iterate columns and set them active one by one */ \ - /* to get pressed state for each matrix cell. */ \ - COND_INTERRUPTS(kscan_gpio_set_output_state_##n(dev, 0);) \ - for (int o = 0; o < INST_OUTPUT_LEN(n); o++) { \ - const struct device *out_dev = kscan_gpio_output_devices_##n(dev)[o]; \ - const struct kscan_gpio_item_config *out_cfg = &kscan_gpio_output_configs_##n(dev)[o]; \ - err = gpio_pin_set(out_dev, out_cfg->pin, 1); \ - if (err) { \ - LOG_ERR("Failed to set output active (err %d)", err); \ - return err; \ - } \ - for (int i = 0; i < INST_INPUT_LEN(n); i++) { \ - const struct device *in_dev = kscan_gpio_input_devices_##n(dev)[i]; \ - const struct kscan_gpio_item_config *in_cfg = \ - &kscan_gpio_input_configs_##n(dev)[i]; \ - kscan_gpio_set_matrix_state_##n(read_state, i, o, \ - gpio_pin_get(in_dev, in_cfg->pin) > 0); \ - } \ - err = gpio_pin_set(out_dev, out_cfg->pin, 0); \ - if (err) { \ - LOG_ERR("Failed to set output inactive (err %d)", err); \ - return err; \ - } \ - } \ - /* Set all our outputs as active again. */ \ - COND_INTERRUPTS(kscan_gpio_set_output_state_##n(dev, 1);) \ - for (int r = 0; r < INST_MATRIX_ROWS(n); r++) { \ - for (int c = 0; c < INST_MATRIX_COLS(n); c++) { \ - bool pressed = read_state[r][c]; \ - /* Follow up reads needed because further interrupts won't fire on already tripped \ - * input GPIO pins */ \ - COND_INTERRUPTS(submit_follow_up_read = (submit_follow_up_read || pressed);) \ - if (pressed != data->matrix_state[r][c]) { \ - LOG_DBG("Sending event at %d,%d state %s", r, c, (pressed ? "on" : "off")); \ - data->matrix_state[r][c] = pressed; \ - data->callback(dev, r, c, pressed); \ - } \ - } \ - } \ - COND_INTERRUPTS( \ - if (submit_follow_up_read) { \ - COND_CODE_0(DT_INST_PROP(n, debounce_period), ({ k_work_submit(&data->work); }), \ - ({ \ - k_delayed_work_cancel(&data->work); \ - k_delayed_work_submit(&data->work, K_MSEC(5)); \ - })) \ - } else { kscan_gpio_enable_interrupts_##n(dev); }) \ - return 0; \ - } \ - static void kscan_gpio_work_handler_##n(struct k_work *work) { \ - struct kscan_gpio_data_##n *data = CONTAINER_OF(work, struct kscan_gpio_data_##n, work); \ - kscan_gpio_read_##n(data->dev); \ - } \ - COND_INTERRUPTS(static void kscan_gpio_irq_callback_handler_##n( \ - const struct device *dev, struct gpio_callback *cb, gpio_port_pins_t pin) { \ - struct kscan_gpio_irq_callback_##n *data = \ - CONTAINER_OF(cb, struct kscan_gpio_irq_callback_##n, callback); \ - kscan_gpio_disable_interrupts_##n(data->dev); \ - COND_CODE_0(DT_INST_PROP(n, debounce_period), ({ k_work_submit(data->work); }), ({ \ - k_delayed_work_cancel(data->work); \ - k_delayed_work_submit(data->work, \ - K_MSEC(DT_INST_PROP(n, debounce_period))); \ - })) \ - }) \ + // While interrupts are enabled, set all outputs active so a pressed key + // will trigger an interrupt. + return kscan_matrix_set_all_outputs(dev, 1); +} +#endif + +#if USE_INTERRUPTS +static int kscan_matrix_interrupt_disable(const struct device *dev) { + int err = kscan_matrix_interrupt_configure(dev, GPIO_INT_DISABLE); + if (err) { + return err; + } + + // While interrupts are disabled, set all outputs inactive so + // kscan_matrix_read() can scan them one by one. + return kscan_matrix_set_all_outputs(dev, 0); +} +#endif + +#if USE_INTERRUPTS +static void kscan_matrix_irq_callback_handler(const struct device *port, struct gpio_callback *cb, + const gpio_port_pins_t pin) { + struct kscan_matrix_irq_callback *data = + CONTAINER_OF(cb, struct kscan_matrix_irq_callback, callback); + const struct kscan_matrix_config *config = data->dev->config; + + // Disable our interrupts temporarily to avoid re-entry while we scan. + kscan_matrix_interrupt_disable(data->dev); + + // TODO (Zephyr 2.6): use k_work_reschedule() + k_delayed_work_cancel(data->work); + k_delayed_work_submit(data->work, K_MSEC(config->debounce_period_ms)); +} +#endif + +static int kscan_matrix_read(const struct device *dev) { + struct kscan_matrix_data *data = dev->data; + const struct kscan_matrix_config *config = dev->config; + + // Scan the matrix. + for (int o = 0; o < config->outputs.len; o++) { + const struct kscan_gpio_dt_spec *out_gpio = &config->outputs.gpios[o]; + + int err = gpio_pin_set(out_gpio->port, out_gpio->pin, 1); + if (err) { + LOG_ERR("Failed to set output %i active: %i", o, err); + return err; + } + + for (int i = 0; i < config->inputs.len; i++) { + const struct kscan_gpio_dt_spec *in_gpio = &config->inputs.gpios[i]; + + const int index = state_index_io(config, i, o); + data->next_state[index] = gpio_pin_get(in_gpio->port, in_gpio->pin); + } + + err = gpio_pin_set(out_gpio->port, out_gpio->pin, 0); + if (err) { + LOG_ERR("Failed to set output %i inactive: %i", o, err); + return err; + } + } + + // Process the new state. +#if USE_INTERRUPTS + bool submit_followup_read = false; +#endif + + for (int r = 0; r < config->rows.len; r++) { + for (int c = 0; c < config->cols.len; c++) { + const int index = state_index_rc(config, r, c); + const bool pressed = data->next_state[index]; + + // Follow up reads are needed if any key is pressed because further + // interrupts won't fire on already tripped GPIO pins. +#if USE_INTERRUPTS + submit_followup_read = submit_followup_read || pressed; +#endif + if (pressed != data->current_state[index]) { + LOG_DBG("Sending event at %i,%i state %s", r, c, pressed ? "on" : "off"); + data->current_state[index] = pressed; + data->callback(dev, r, c, pressed); + } + } + } + +#if USE_INTERRUPTS + if (submit_followup_read) { + // At least one key is pressed. Poll until everything is released. + // TODO (Zephyr 2.6): use k_work_reschedule() + k_delayed_work_cancel(&data->work); + k_delayed_work_submit(&data->work, K_MSEC(config->debounce_period_ms)); + } else { + // All keys are released. Return to waiting for an interrupt. + kscan_matrix_interrupt_enable(dev); + } +#endif + + return 0; +} + +#if USE_POLLING +static void kscan_matrix_timer_handler(struct k_timer *timer) { + struct kscan_matrix_data *data = CONTAINER_OF(timer, struct kscan_matrix_data, poll_timer); + k_delayed_work_submit(&data->work, K_NO_WAIT); +} +#endif + +static void kscan_matrix_work_handler(struct k_work *work) { + struct k_delayed_work *dwork = CONTAINER_OF(work, struct k_delayed_work, work); + struct kscan_matrix_data *data = CONTAINER_OF(dwork, struct kscan_matrix_data, work); + kscan_matrix_read(data->dev); +} + +static int kscan_matrix_configure(const struct device *dev, const kscan_callback_t callback) { + struct kscan_matrix_data *data = dev->data; + + if (!callback) { + return -EINVAL; + } + + data->callback = callback; + return 0; +} + +static int kscan_matrix_enable(const struct device *dev) { +#if USE_POLLING + struct kscan_matrix_data *data = dev->data; + const struct kscan_matrix_config *config = dev->config; + + k_timer_start(&data->poll_timer, K_MSEC(config->poll_period_ms), + K_MSEC(config->poll_period_ms)); + return 0; +#else + // Read will automatically enable interrupts once done. + return kscan_matrix_read(dev); +#endif +} + +static int kscan_matrix_disable(const struct device *dev) { +#if USE_POLLING + struct kscan_matrix_data *data = dev->data; + + k_timer_stop(&data->poll_timer); + return 0; +#else + return kscan_matrix_interrupt_disable(dev); +#endif +} + +static int kscan_matrix_init_input_inst(const struct device *dev, + const struct kscan_gpio_dt_spec *gpio, const int index) { + if (!device_is_ready(gpio->port)) { + LOG_ERR("GPIO is not ready: %s", gpio->port->name); + return -ENODEV; + } + + int err = gpio_pin_configure(gpio->port, gpio->pin, GPIO_INPUT | gpio->dt_flags); + if (err) { + LOG_ERR("Unable to configure pin %u on %s for input", gpio->pin, gpio->port->name); + return err; + } + + LOG_DBG("Configured pin %u on %s for input", gpio->pin, gpio->port->name); + +#if USE_INTERRUPTS + struct kscan_matrix_data *data = dev->data; + struct kscan_matrix_irq_callback *irq = &data->irqs[index]; + + irq->dev = dev; + irq->work = &data->work; + gpio_init_callback(&irq->callback, kscan_matrix_irq_callback_handler, BIT(gpio->pin)); + err = gpio_add_callback(gpio->port, &irq->callback); + if (err) { + LOG_ERR("Error adding the callback to the input device: %i", err); + return err; + } +#endif + + return 0; +} + +static int kscan_matrix_init_inputs(const struct device *dev) { + const struct kscan_matrix_config *config = dev->config; + + for (int i = 0; i < config->inputs.len; i++) { + const struct kscan_gpio_dt_spec *gpio = &config->inputs.gpios[i]; + int err = kscan_matrix_init_input_inst(dev, gpio, i); + if (err) { + return err; + } + } + + return 0; +} + +static int kscan_matrix_init_output_inst(const struct device *dev, + const struct kscan_gpio_dt_spec *gpio) { + if (!device_is_ready(gpio->port)) { + LOG_ERR("GPIO is not ready: %s", gpio->port->name); + return -ENODEV; + } + + int err = gpio_pin_configure(gpio->port, gpio->pin, GPIO_OUTPUT | gpio->dt_flags); + if (err) { + LOG_ERR("Unable to configure pin %u on %s for output", gpio->pin, gpio->port->name); + return err; + } + + LOG_DBG("Configured pin %u on %s for output", gpio->pin, gpio->port->name); + + return 0; +} + +static int kscan_matrix_init_outputs(const struct device *dev) { + const struct kscan_matrix_config *config = dev->config; + + for (int i = 0; i < config->outputs.len; i++) { + const struct kscan_gpio_dt_spec *gpio = &config->outputs.gpios[i]; + int err = kscan_matrix_init_output_inst(dev, gpio); + if (err) { + return err; + } + } + + return 0; +} + +static int kscan_matrix_init(const struct device *dev) { + struct kscan_matrix_data *data = dev->data; + + data->dev = dev; + + kscan_matrix_init_inputs(dev); + kscan_matrix_init_outputs(dev); + kscan_matrix_set_all_outputs(dev, 0); + + k_delayed_work_init(&data->work, kscan_matrix_work_handler); + +#if USE_POLLING + k_timer_init(&data->poll_timer, kscan_matrix_timer_handler, NULL); +#endif + + return 0; +} + +static const struct kscan_driver_api kscan_matrix_api = { + .config = kscan_matrix_configure, + .enable_callback = kscan_matrix_enable, + .disable_callback = kscan_matrix_disable, +}; + +#define KSCAN_MATRIX_INIT(index) \ + static const struct kscan_gpio_dt_spec kscan_matrix_rows_##index[] = { \ + UTIL_LISTIFY(INST_ROWS_LEN(index), KSCAN_GPIO_ROW_CFG_INIT, index)}; \ \ - static struct kscan_gpio_data_##n kscan_gpio_data_##n = { \ - .rows = {[INST_MATRIX_ROWS(n) - 1] = NULL}, .cols = {[INST_MATRIX_COLS(n) - 1] = NULL}}; \ - static int kscan_gpio_configure_##n(const struct device *dev, kscan_callback_t callback) { \ - struct kscan_gpio_data_##n *data = dev->data; \ - if (!callback) { \ - return -EINVAL; \ - } \ - data->callback = callback; \ - LOG_DBG("Configured GPIO %d", n); \ - return 0; \ - }; \ - static int kscan_gpio_enable_##n(const struct device *dev) { \ - COND_POLL_OR_INTERRUPTS((struct kscan_gpio_data_##n *data = dev->data; \ - k_timer_start(&data->poll_timer, K_MSEC(10), K_MSEC(10)); \ - return 0;), \ - (int err = kscan_gpio_enable_interrupts_##n(dev); \ - if (err) { return err; } return kscan_gpio_read_##n(dev);)) \ - }; \ - static int kscan_gpio_disable_##n(const struct device *dev) { \ - COND_POLL_OR_INTERRUPTS((struct kscan_gpio_data_##n *data = dev->data; \ - k_timer_stop(&data->poll_timer); return 0;), \ - (return kscan_gpio_disable_interrupts_##n(dev);)) \ - }; \ - COND_POLLING(static void kscan_gpio_timer_handler_##n(struct k_timer *timer) { \ - struct kscan_gpio_data_##n *data = \ - CONTAINER_OF(timer, struct kscan_gpio_data_##n, poll_timer); \ - k_work_submit(&data->work.work); \ - }) \ - static int kscan_gpio_init_##n(const struct device *dev) { \ - struct kscan_gpio_data_##n *data = dev->data; \ - int err; \ - const struct device **input_devices = kscan_gpio_input_devices_##n(dev); \ - for (int i = 0; i < INST_INPUT_LEN(n); i++) { \ - const struct kscan_gpio_item_config *in_cfg = &kscan_gpio_input_configs_##n(dev)[i]; \ - input_devices[i] = device_get_binding(in_cfg->label); \ - if (!input_devices[i]) { \ - LOG_ERR("Unable to find input GPIO device"); \ - return -EINVAL; \ - } \ - err = gpio_pin_configure(input_devices[i], in_cfg->pin, GPIO_INPUT | in_cfg->flags); \ - if (err) { \ - LOG_ERR("Unable to configure pin %d on %s for input", in_cfg->pin, in_cfg->label); \ - return err; \ - } else { \ - LOG_DBG("Configured pin %d on %s for input", in_cfg->pin, in_cfg->label); \ - } \ - COND_INTERRUPTS( \ - irq_callbacks_##n[i].work = &data->work; irq_callbacks_##n[i].dev = dev; \ - gpio_init_callback(&irq_callbacks_##n[i].callback, \ - kscan_gpio_irq_callback_handler_##n, BIT(in_cfg->pin)); \ - err = gpio_add_callback(input_devices[i], &irq_callbacks_##n[i].callback); \ - if (err) { \ - LOG_ERR("Error adding the callback to the input device"); \ - return err; \ - }) \ - } \ - const struct device **output_devices = kscan_gpio_output_devices_##n(dev); \ - for (int o = 0; o < INST_OUTPUT_LEN(n); o++) { \ - const struct kscan_gpio_item_config *out_cfg = &kscan_gpio_output_configs_##n(dev)[o]; \ - output_devices[o] = device_get_binding(out_cfg->label); \ - if (!output_devices[o]) { \ - LOG_ERR("Unable to find output GPIO device"); \ - return -EINVAL; \ - } \ - err = \ - gpio_pin_configure(output_devices[o], out_cfg->pin, GPIO_OUTPUT | out_cfg->flags); \ - if (err) { \ - LOG_ERR("Unable to configure pin %d on %s for output", out_cfg->pin, \ - out_cfg->label); \ - return err; \ - } \ - } \ - data->dev = dev; \ - (COND_CODE_0(DT_INST_PROP(n, debounce_period), (k_work_init), (k_delayed_work_init)))( \ - &data->work, kscan_gpio_work_handler_##n); \ - COND_POLL_OR_INTERRUPTS( \ - (k_timer_init(&data->poll_timer, kscan_gpio_timer_handler_##n, NULL); \ - kscan_gpio_set_output_state_##n(dev, 0);), \ - (kscan_gpio_set_output_state_##n(dev, 1);)) \ - return 0; \ - } \ - static const struct kscan_driver_api gpio_driver_api_##n = { \ - .config = kscan_gpio_configure_##n, \ - .enable_callback = kscan_gpio_enable_##n, \ - .disable_callback = kscan_gpio_disable_##n, \ - }; \ - static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ - .rows = {UTIL_LISTIFY(INST_MATRIX_ROWS(n), _KSCAN_GPIO_ROW_CFG_INIT, n)}, \ - .cols = {UTIL_LISTIFY(INST_MATRIX_COLS(n), _KSCAN_GPIO_COL_CFG_INIT, n)}, \ + static const struct kscan_gpio_dt_spec kscan_matrix_cols_##index[] = { \ + UTIL_LISTIFY(INST_COLS_LEN(index), KSCAN_GPIO_COL_CFG_INIT, index)}; \ + \ + static bool kscan_current_state_##index[INST_MATRIX_LEN(index)]; \ + static bool kscan_next_state_##index[INST_MATRIX_LEN(index)]; \ + \ + COND_INTERRUPTS((static struct kscan_matrix_irq_callback \ + kscan_matrix_irqs_##index[INST_INPUTS_LEN(index)];)) \ + \ + static struct kscan_matrix_data kscan_matrix_data_##index = { \ + .current_state = kscan_current_state_##index, \ + .next_state = kscan_next_state_##index, \ + COND_INTERRUPTS((.irqs = kscan_matrix_irqs_##index, ))}; \ + \ + static struct kscan_matrix_config kscan_matrix_config_##index = { \ + .rows = KSCAN_GPIO_LIST(kscan_matrix_rows_##index), \ + .cols = KSCAN_GPIO_LIST(kscan_matrix_cols_##index), \ + .inputs = KSCAN_GPIO_LIST( \ + COND_DIODE_DIR(index, (kscan_matrix_cols_##index), (kscan_matrix_rows_##index))), \ + .outputs = KSCAN_GPIO_LIST( \ + COND_DIODE_DIR(index, (kscan_matrix_rows_##index), (kscan_matrix_cols_##index))), \ + .debounce_period_ms = DT_INST_PROP(index, debounce_period), \ + .poll_period_ms = DT_INST_PROP(index, poll_period_ms), \ + .diode_direction = INST_DIODE_DIR(index), \ }; \ - DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, device_pm_control_nop, &kscan_gpio_data_##n, \ - &kscan_gpio_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ - &gpio_driver_api_##n); + \ + DEVICE_DT_INST_DEFINE(index, &kscan_matrix_init, device_pm_control_nop, \ + &kscan_matrix_data_##index, &kscan_matrix_config_##index, APPLICATION, \ + CONFIG_APPLICATION_INIT_PRIORITY, &kscan_matrix_api); -DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) +DT_INST_FOREACH_STATUS_OKAY(KSCAN_MATRIX_INIT); -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ +#endif // DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) diff --git a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml b/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml index 5ebcbdd38b7..20ee4ac5f4d 100644 --- a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml +++ b/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml @@ -17,6 +17,11 @@ properties: debounce-period: type: int default: 5 + description: Debounce time in milliseconds + poll-period-ms: + type: int + default: 10 + description: Time between reads in milliseconds when polling is enabled diode-direction: type: string default: row2col From 4a5454b0f9f2cbf755f507ab2a233a2f8c4a2fd3 Mon Sep 17 00:00:00 2001 From: Dom H Date: Sat, 4 Sep 2021 10:06:44 +0100 Subject: [PATCH 0116/1130] fix(shields): Add note about Cradio pin arrangement --- app/boards/shields/cradio/README.md | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/app/boards/shields/cradio/README.md b/app/boards/shields/cradio/README.md index f391bbeca02..b1344293d2a 100644 --- a/app/boards/shields/cradio/README.md +++ b/app/boards/shields/cradio/README.md @@ -1 +1,35 @@ +# Cradio + Cradio is a firmware for a few 34 key keyboards, including Cradio, Hypergolic and Sweep. + +## Pin arrangement + +Some revisions of the aforementioned PCBs have slightly different pin arrangements compared to what's defined in [`cradio.dtsi`](./cradio.dtsi). If you need to swap a few keys for your particular PCB, you can easily reorder the `input-gpio` definition in your own keymap file (i.e. in `zmk-config/config/cradio.keymap`): + +```dts +/* Adjusted Cradio pin arrangement */ +/* The position of Q and B keys have been swapped */ +&kscan0 { + input-gpios + = <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; +}; +``` + +This `&kscan0` block must be placed outside of any blocks surrounded by curly braces (`{...}`). From 1d69bdda602e5de1339a3b4713cf594e4852fb24 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 27 Mar 2021 20:51:04 -0400 Subject: [PATCH 0117/1130] feat: Add hardware metadata schema. * Initial hardware metadata JSON schema. * GH Action to validate all schemas for boards/shields. --- .../hardware-metadata-validation.yml | 35 +++ app/scripts/requirements.txt | 8 + app/scripts/west-commands.yml | 5 + app/scripts/west_commands/metadata.py | 59 ++++ schema/hardware-metadata.schema.json | 261 ++++++++++++++++++ 5 files changed, 368 insertions(+) create mode 100644 .github/workflows/hardware-metadata-validation.yml create mode 100644 app/scripts/requirements.txt create mode 100644 app/scripts/west_commands/metadata.py create mode 100644 schema/hardware-metadata.schema.json diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml new file mode 100644 index 00000000000..3972ed8109c --- /dev/null +++ b/.github/workflows/hardware-metadata-validation.yml @@ -0,0 +1,35 @@ +name: Hardware Metadata Validation + +on: + push: + paths: + - ".github/workflows/hardware-metadata-validation.yml" + - "schema/hardware-metadata.schema.json" + - "app/boards/**/*.zmk.yml" + - "app/scripts/west_commands/metadata.py" + pull_request: + paths: + - ".github/workflows/hardware-metadata-validation.yml" + - "schema/hardware-metadata.schema.json" + - "app/boards/**/*.zmk.yml" + - "app/scripts/west_commands/metadata.py" + +jobs: + validate-metadata: + runs-on: ubuntu-latest + container: + image: zmkfirmware/zmk-dev-arm:2.5 + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + run: pip install -r app/scripts/requirements.txt + - name: West init + run: west init -l app + - name: Update modules (west update) + run: west update + - name: Export Zephyr CMake package (west zephyr-export) + run: west zephyr-export + - name: Validate Hardware Metadata + run: | + cd app + west metadata check diff --git a/app/scripts/requirements.txt b/app/scripts/requirements.txt new file mode 100644 index 00000000000..60d6f3aec07 --- /dev/null +++ b/app/scripts/requirements.txt @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Convert YAML to JSON for validation +remarshal>=0.14.0 + +# Perform our hardware metadata validation +jsonschema>=3.2.0 \ No newline at end of file diff --git a/app/scripts/west-commands.yml b/app/scripts/west-commands.yml index 81d6946fe98..64583a90678 100644 --- a/app/scripts/west-commands.yml +++ b/app/scripts/west-commands.yml @@ -7,3 +7,8 @@ west-commands: - name: test class: Test help: run ZMK testsuite + - file: scripts/west_commands/metadata.py + commands: + - name: metadata + class: Metadata + help: Operate on ZMK metadata files diff --git a/app/scripts/west_commands/metadata.py b/app/scripts/west_commands/metadata.py new file mode 100644 index 00000000000..a06024c585f --- /dev/null +++ b/app/scripts/west_commands/metadata.py @@ -0,0 +1,59 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT +'''Metadata command for ZMK.''' + +from functools import cached_property +import glob +import json +from jsonschema import validate, ValidationError +import os +import sys +import yaml +from textwrap import dedent # just for nicer code indentation + +from west.commands import WestCommand +from west import log # use this for user output + + +class Metadata(WestCommand): + def __init__(self): + super().__init__( + 'metadata', # gets stored as self.name + 'ZMK hardware metadata commands', # self.help + # self.description: + dedent('''Operate on the board/shield metadata.''')) + + def do_add_parser(self, parser_adder): + parser = parser_adder.add_parser(self.name, + help=self.help, + description=self.description) + + parser.add_argument('subcommand', default="check", + help='The subcommand to run. Defaults to "check".', nargs="?") + return parser # gets stored as self.parser + + @cached_property + def schema(self): + return json.load( + open("../schema/hardware-metadata.schema.json", 'r')) + + def validate_file(self, file): + print("Validating: " + file) + with open(file, 'r') as stream: + try: + validate(yaml.safe_load(stream), self.schema) + except yaml.YAMLError as exc: + print("Failed loading metadata yaml: " + file) + print(exc) + return False + except ValidationError as vexc: + print("Failed validation of: " + file) + print(vexc) + return False + return True + + def do_run(self, args, unknown_args): + status = all([self.validate_file(f) for f in glob.glob( + "boards/**/*.zmk.yml", recursive=True)]) + + sys.exit(0 if status else 1) diff --git a/schema/hardware-metadata.schema.json b/schema/hardware-metadata.schema.json new file mode 100644 index 00000000000..a74c6ef141a --- /dev/null +++ b/schema/hardware-metadata.schema.json @@ -0,0 +1,261 @@ +{ + "$id": "https://zmkfirmware.dev/zmk.metadata.json", + "title": "HardwareMetadata", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "oneOf": [ + { + "$ref": "#/$defs/board" + }, + { + "$ref": "#/$defs/shield" + }, + { + "$ref": "#/$defs/interconnect" + } + ], + "$defs": { + "id": { + "type": "string", + "pattern": "^[a-z0-9_]+$" + }, + "keyboard_siblings": { + "type": "array", + "items": { + "type": "string" + } + }, + "variant": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "required": [ + "id", + "features" + ], + "properties": { + "id": { + "$ref": "#/$defs/id" + }, + "features": { + "$ref": "#/$defs/features" + } + } + } + ] + }, + "features": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "keys", + "display", + "encoder", + "underglow", + "pointer" + ] + } + }, + "interconnects": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/id" + } + }, + "sibling_details": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/$defs/id" + }, + "features": { + "$ref": "#/$defs/features" + }, + "variants": { + "type": "array", + "items": { + "$ref": "#/$defs/variant" + } + } + } + }, + "interconnect": { + "title": "Interconnect", + "type": "object", + "additionalProperties": false, + "required": [ + "file_format", + "id", + "name", + "url", + "type" + ], + "properties": { + "file_format": { + "type": "string", + "const": "1" + }, + "id": { + "$ref": "#/$defs/id" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "description": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "type": { + "type": "string", + "const": "interconnect" + } + } + }, + "board": { + "title": "Board", + "type": "object", + "additionalProperties": false, + "required": [ + "file_format", + "id", + "name", + "url", + "arch", + "type", + "outputs" + ], + "properties": { + "file_format": { + "type": "string", + "const": "1" + }, + "id": { + "$ref": "#/$defs/id" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "description": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "arch": { + "type": "string", + "pattern": "^[a-z0-9_]+$" + }, + "type": { + "type": "string", + "const": "board" + }, + "siblings": { + "$ref": "#/$defs/keyboard_siblings" + }, + "outputs": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "usb", + "ble" + ] + } + }, + "features": { + "$ref": "#/$defs/features" + }, + "variants": { + "type": "array", + "items": { + "$ref": "#/$defs/variant" + } + }, + "exposes": { + "$ref": "#/$defs/interconnects" + } + } + }, + "shield": { + "title": "Shield", + "type": "object", + "additionalProperties": false, + "required": [ + "file_format", + "id", + "name", + "url", + "type", + "requires" + ], + "properties": { + "file_format": { + "type": "string", + "const": "1" + }, + "id": { + "$ref": "#/$defs/id" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "description": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "version": { + "type": "string" + }, + "type": { + "type": "string", + "const": "shield" + }, + "features": { + "$ref": "#/$defs/features" + }, + "variants": { + "type": "array", + "items": { + "$ref": "#/$defs/variant" + } + }, + "siblings": { + "$ref": "#/$defs/keyboard_siblings" + }, + "requires": { + "$ref": "#/$defs/interconnects" + }, + "exposes": { + "$ref": "#/$defs/interconnects" + } + } + } + } +} From b52835ffbf1c47ab854d491dac9bb5ffbb15e80f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 27 Mar 2021 20:51:31 -0400 Subject: [PATCH 0118/1130] feat: Add a few sample hardware metadata files. --- app/boards/arm/bdn9/bdn9_rev2.zmk.yml | 11 +++++++++++ app/boards/arm/nrfmicro/nrfmicro_11.zmk.yml | 10 ++++++++++ app/boards/arm/nrfmicro/nrfmicro_11_flipped.zmk.yml | 10 ++++++++++ app/boards/arm/nrfmicro/nrfmicro_13.zmk.yml | 10 ++++++++++ .../interconnects/pro_micro/pro_micro.zmk.yml | 10 ++++++++++ app/boards/shields/corne/corne.zmk.yml | 13 +++++++++++++ 6 files changed, 64 insertions(+) create mode 100644 app/boards/arm/bdn9/bdn9_rev2.zmk.yml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11.zmk.yml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11_flipped.zmk.yml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13.zmk.yml create mode 100644 app/boards/interconnects/pro_micro/pro_micro.zmk.yml create mode 100644 app/boards/shields/corne/corne.zmk.yml diff --git a/app/boards/arm/bdn9/bdn9_rev2.zmk.yml b/app/boards/arm/bdn9/bdn9_rev2.zmk.yml new file mode 100644 index 00000000000..4680746f22d --- /dev/null +++ b/app/boards/arm/bdn9/bdn9_rev2.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: bdn9_rev2 +name: BDN9 Rev2 +type: board +arch: arm +outputs: + - usb +features: + - keys + - encoder +url: https://keeb.io/collections/bdn9-collection/products/bdn9-rev-2-3x3-9-key-macropad-rotary-encoder-and-rgb diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.zmk.yml b/app/boards/arm/nrfmicro/nrfmicro_11.zmk.yml new file mode 100644 index 00000000000..4160ec6a77b --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrfmicro_11 +name: nRFMicro 1.1/1.2 +type: board +arch: arm +outputs: + - usb + - ble +url: https://github.com/joric/nrfmicro/ +exposes: [pro_micro] diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.zmk.yml b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.zmk.yml new file mode 100644 index 00000000000..b63ace2d652 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrfmicro_11_flipped +name: nRFMicro 1.1 (flipped) +type: board +arch: arm +outputs: + - usb + - ble +url: https://github.com/joric/nrfmicro/ +exposes: [pro_micro] diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.zmk.yml b/app/boards/arm/nrfmicro/nrfmicro_13.zmk.yml new file mode 100644 index 00000000000..8fd28d37794 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrfmicro_13 +name: nRFMicro 1.3/1.4 +type: board +arch: arm +outputs: + - usb + - ble +url: https://github.com/joric/nrfmicro/ +exposes: [pro_micro] diff --git a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml new file mode 100644 index 00000000000..6992593c85b --- /dev/null +++ b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: pro_micro +name: Pro Micro +type: interconnect +url: https://www.sparkfun.com/products/12640 +manufacturer: SparkFun +description: | + The SparkFun Pro Micro grew popular as a low cost ATmega32U4 board with sufficient GPIO and peripherals + to work for many keyboard needs. Since the original Pro Micro, many pin compatible boards have appeared, + with various changes or improvements, such as the Elite-C w/ USB-C, nice!nano with nRF52840 wireless. diff --git a/app/boards/shields/corne/corne.zmk.yml b/app/boards/shields/corne/corne.zmk.yml new file mode 100644 index 00000000000..d09bf71d7a4 --- /dev/null +++ b/app/boards/shields/corne/corne.zmk.yml @@ -0,0 +1,13 @@ +file_format: "1" +id: corne +name: Corne +type: shield +url: https://github.com/foostan/crkbd/ +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display +siblings: +- corne_left +- corne_right From 5e6634d2e522289c5169b22a2a0d8b600a0e008d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Mar 2021 00:59:15 +0000 Subject: [PATCH 0119/1130] feat(docs): Add TS type gen, metadata JSON gen * Generate TS types from new hardware metadata schema. * Aggregate all hw metadata YAML into one aggregate JSON file for consumption by others. --- docs/docusaurus.config.js | 6 +- docs/package-lock.json | 37481 ++++++++++------ docs/package.json | 10 +- docs/src/.gitignore | 1 + docs/src/data/.gitignore | 1 + .../docusaurus-tree-sitter-plugin/index.js | 6 + .../index.js | 33 + .../index.js | 29 + docs/tsconfig.json | 4 + 9 files changed, 22902 insertions(+), 14669 deletions(-) create mode 100644 docs/src/.gitignore create mode 100644 docs/src/data/.gitignore create mode 100644 docs/src/hardware-metadata-collection-plugin/index.js create mode 100644 docs/src/hardware-schema-typescript-plugin/index.js create mode 100644 docs/tsconfig.json diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ffc4cd6dcae..6eba9fc97ec 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -8,7 +8,11 @@ module.exports = { favicon: "img/favicon.ico", organizationName: "zmkfirmware", // Usually your GitHub org/user name. projectName: "zmk", // Usually your repo name. - plugins: [path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin")], + plugins: [ + path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin"), + path.resolve(__dirname, "src/hardware-metadata-collection-plugin"), + path.resolve(__dirname, "src/hardware-schema-typescript-plugin") + ], themeConfig: { colorMode: { respectPrefersColorScheme: true, diff --git a/docs/package-lock.json b/docs/package-lock.json index bfaeec25312..e133b8a9cf5 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "docs", "version": "0.0.0", "dependencies": { "@docusaurus/core": "^2.0.0-beta.3", @@ -21,13 +22,21 @@ "web-tree-sitter": "^0.19.4" }, "devDependencies": { + "@docusaurus/module-type-aliases": "^2.0.0-alpha.72", + "@tsconfig/docusaurus": "^1.0.2", + "@types/react": "^17.0.3", + "@types/react-helmet": "^6.1.0", + "@types/react-router-dom": "^5.1.7", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", + "json-schema-to-typescript": "^10.1.3", "null-loader": "^4.0.0", + "prebuild-webpack-plugin": "^1.1.1", "prettier": "2.3.1", - "string-replace-loader": "^3.0.3" + "string-replace-loader": "^3.0.3", + "typescript": "^4.2.3" } }, "node_modules/@algolia/autocomplete-core": { @@ -44,6 +53,10 @@ "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", "dependencies": { "@algolia/autocomplete-shared": "1.2.1" + }, + "peerDependencies": { + "@algolia/client-search": "^4.9.1", + "algoliasearch": "^4.9.1" } }, "node_modules/@algolia/autocomplete-shared": { @@ -51,57 +64,6 @@ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", - "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", - "dependencies": { - "@algolia/cache-common": "4.10.3" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", - "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", - "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", - "dependencies": { - "@algolia/cache-common": "4.10.3" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", - "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", - "dependencies": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", - "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", - "dependencies": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", - "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", - "dependencies": { - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, "node_modules/@algolia/client-personalization": { "version": "4.10.3", "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", @@ -112,51 +74,31 @@ "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/client-search": { + "node_modules/@algolia/client-personalization/node_modules/@algolia/cache-common": { "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", - "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + }, + "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", "dependencies": { - "@algolia/client-common": "4.10.3", "@algolia/requester-common": "4.10.3", "@algolia/transporter": "4.10.3" } }, - "node_modules/@algolia/logger-common": { + "node_modules/@algolia/client-personalization/node_modules/@algolia/logger-common": { "version": "4.10.3", "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" }, - "node_modules/@algolia/logger-console": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", - "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", - "dependencies": { - "@algolia/logger-common": "4.10.3" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", - "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", - "dependencies": { - "@algolia/requester-common": "4.10.3" - } - }, - "node_modules/@algolia/requester-common": { + "node_modules/@algolia/client-personalization/node_modules/@algolia/requester-common": { "version": "4.10.3", "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" }, - "node_modules/@algolia/requester-node-http": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", - "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", - "dependencies": { - "@algolia/requester-common": "4.10.3" - } - }, - "node_modules/@algolia/transporter": { + "node_modules/@algolia/client-personalization/node_modules/@algolia/transporter": { "version": "4.10.3", "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", @@ -166,164 +108,202 @@ "@algolia/requester-common": "4.10.3" } }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.10.4" } }, "node_modules/@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", - "engines": { - "node": ">=6.9.0" - } + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" }, "node_modules/@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "semver": "^6.3.0", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "node_modules/@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.12.1", "jsesc": "^2.5.1", "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.10.4" } }, - "node_modules/@babel/core/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "node_modules/@babel/core/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/compat-data": "^7.12.1", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.12.0", + "semver": "^5.5.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "node_modules/@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-compilation-targets": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-simple-access": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-module-imports": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -331,18 +311,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", @@ -350,88 +327,227 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/highlight": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/types": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, "bin": { - "parser": "bin/babel-parser.js" + "browserslist": "cli.js" }, "engines": { - "node": ">=6.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/@babel/core/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.12.1" } }, - "node_modules/@babel/core/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "node_modules/@babel/core/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "dependencies": { + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dependencies": { + "@babel/types": "^7.12.1" } }, - "node_modules/@babel/core/node_modules/ansi-styles": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -442,7 +558,7 @@ "node": ">=4" } }, - "node_modules/@babel/core/node_modules/chalk": { + "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -455,7 +571,7 @@ "node": ">=4" } }, - "node_modules/@babel/core/node_modules/color-convert": { + "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -463,12 +579,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/core/node_modules/color-name": { + "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/core/node_modules/escape-string-regexp": { + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -476,7 +592,7 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/core/node_modules/has-flag": { + "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", @@ -484,15 +600,7 @@ "node": ">=4" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/supports-color": { + "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -503,68 +611,77 @@ "node": ">=4" } }, - "node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "node_modules/@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/types": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/types": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", @@ -576,45 +693,48 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/code-frame": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", @@ -625,7 +745,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/generator": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/generator": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", @@ -638,7 +758,37 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-function-name": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", @@ -651,7 +801,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", @@ -662,7 +812,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-member-expression-to-functions": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-member-expression-to-functions": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", @@ -673,7 +834,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", @@ -684,7 +845,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", @@ -698,7 +867,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", @@ -709,7 +878,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", @@ -717,7 +886,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -730,7 +899,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/parser": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/parser": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", @@ -741,7 +910,7 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/template": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", @@ -754,7 +923,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/traverse": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/traverse": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", @@ -773,7 +942,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/types": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/types": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", @@ -785,7 +954,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/ansi-styles": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -796,7 +965,7 @@ "node": ">=4" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/chalk": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -809,7 +978,7 @@ "node": ">=4" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/color-convert": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -817,12 +986,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/color-name": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/escape-string-regexp": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -830,7 +999,7 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/has-flag": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", @@ -838,7 +1007,7 @@ "node": ">=4" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/supports-color": { + "node_modules/@babel/plugin-proposal-class-static-block/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -849,221 +1018,173 @@ "node": ">=4" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" - }, - "node_modules/@babel/helper-remap-async-to-generator": { + "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/types": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/generator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -1071,110 +1192,105 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "node_modules/@babel/helper-validator-option": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/generator": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", @@ -1185,7 +1301,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", @@ -1193,7 +1309,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -1206,7 +1322,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/parser": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/parser": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", @@ -1217,7 +1333,7 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", @@ -1230,7 +1346,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/traverse": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/traverse": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", @@ -1249,7 +1365,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/types": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/types": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", @@ -1261,7 +1377,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/ansi-styles": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -1272,7 +1388,7 @@ "node": ">=4" } }, - "node_modules/@babel/helper-wrap-function/node_modules/chalk": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -1285,7 +1401,7 @@ "node": ">=4" } }, - "node_modules/@babel/helper-wrap-function/node_modules/color-convert": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -1293,12 +1409,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/helper-wrap-function/node_modules/color-name": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/helper-wrap-function/node_modules/escape-string-regexp": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -1306,7 +1422,7 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/has-flag": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", @@ -1314,7 +1430,7 @@ "node": ">=4" } }, - "node_modules/@babel/helper-wrap-function/node_modules/supports-color": { + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -1325,115 +1441,58 @@ "node": ">=4" } }, - "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "dependencies": { - "color-convert": "^1.9.0" + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" }, "engines": { "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", - "bin": { - "parser": "bin/babel-parser.js" + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-syntax-class-static-block/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -1441,204 +1500,132 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.8.3" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-syntax-private-property-in-object/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -1646,339 +1633,347 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "object.assign": "^4.1.0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "object.assign": "^4.1.0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-typescript/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-imports": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-transforms": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", + "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", "dependencies": { "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-module-imports": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -1986,7 +1981,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -1994,174 +1989,32 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { + "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.8" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", @@ -2172,15 +2025,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -2193,10 +2046,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -2204,7 +2057,7 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/template": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", @@ -2217,18 +2070,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/traverse": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2236,19 +2089,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/ansi-styles": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -2259,7 +2112,15 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/chalk": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -2272,7 +2133,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/color-convert": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -2280,12 +2141,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/color-name": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/plugin-transform-classes/node_modules/escape-string-regexp": { + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -2293,134 +2154,132 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-destructuring/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "dependencies": { + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-dotall-regex/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-imports": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-transforms": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", + "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-for-of/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -2428,46 +2287,35 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/code-frame": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.8" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -2475,23 +2323,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -2504,10 +2344,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -2515,7 +2355,7 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/template": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", @@ -2528,19 +2368,38 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/traverse": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/ansi-styles": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -2551,7 +2410,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/chalk": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -2564,7 +2423,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/color-convert": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -2572,12 +2431,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/color-name": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/plugin-transform-function-name/node_modules/escape-string-regexp": { + "node_modules/@babel/plugin-transform-modules-umd/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -2585,56 +2444,81 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-new-target/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -2642,20 +2526,22 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-replace-supers": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/code-frame": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", @@ -2666,12 +2552,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -2679,7 +2565,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-function-name": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", @@ -2692,7 +2578,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", @@ -2703,21 +2589,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-module-imports": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -2725,25 +2600,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", @@ -2754,7 +2622,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -2762,7 +2630,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", @@ -2776,18 +2644,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", @@ -2798,15 +2655,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -2819,10 +2676,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -2830,7 +2687,7 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/template": { + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", @@ -2843,18 +2700,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/traverse": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2862,19 +2719,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/ansi-styles": { + "node_modules/@babel/plugin-transform-object-super/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -2885,15 +2742,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/chalk": { + "node_modules/@babel/plugin-transform-object-super/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -2906,7 +2755,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/color-convert": { + "node_modules/@babel/plugin-transform-object-super/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -2914,12 +2763,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/color-name": { + "node_modules/@babel/plugin-transform-object-super/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/escape-string-regexp": { + "node_modules/@babel/plugin-transform-object-super/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -2927,91 +2776,127 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-property-literals/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/code-frame": { + "node_modules/@babel/plugin-transform-react-constant-elements": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", + "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/generator": { + "node_modules/@babel/plugin-transform-react-constant-elements/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/plugin-transform-react-jsx": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -3019,7 +2904,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-module-imports": { + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", @@ -3030,28 +2915,67 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-module-transforms": { + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -3059,7 +2983,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -3067,35 +2991,85 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "regenerator-transform": "^0.14.2" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-simple-access": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/plugin-transform-reserved-words/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -3103,7 +3077,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", @@ -3111,162 +3093,185 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/types": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "semver": "bin/semver.js" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/template": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "node_modules/@babel/plugin-transform-shorthand-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/types": { + "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dependencies": { - "color-convert": "^1.9.0" + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" + "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/plugin-transform-spread/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dependencies": { - "color-name": "1.1.3" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/@babel/plugin-transform-sticky-regex/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/@babel/plugin-transform-template-literals/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-typeof-symbol/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", "dependencies": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.6", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/plugin-syntax-typescript": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/code-frame": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", @@ -3277,12 +3282,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -3290,34 +3295,53 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-annotate-as-pure": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -3325,10 +3349,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-imports": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -3336,25 +3360,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", @@ -3365,7 +3382,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -3373,7 +3390,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", @@ -3387,18 +3404,7 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", @@ -3409,15 +3415,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/highlight": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -3430,10 +3436,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -3441,31 +3447,45 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/template": { + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/plugin-syntax-typescript": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/traverse": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -3473,19 +3493,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/ansi-styles": { + "node_modules/@babel/plugin-transform-typescript/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -3496,15 +3516,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/chalk": { + "node_modules/@babel/plugin-transform-typescript/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -3517,7 +3529,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-convert": { + "node_modules/@babel/plugin-transform-typescript/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -3525,12 +3537,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-name": { + "node_modules/@babel/plugin-transform-typescript/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/escape-string-regexp": { + "node_modules/@babel/plugin-transform-typescript/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -3538,137 +3550,216 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, + "node_modules/@babel/plugin-transform-unicode-escapes/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-create-regexp-features-plugin": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/code-frame": { + "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-annotate-as-pure": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/generator": { + "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, + "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "node_modules/@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@babel/preset-react": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", @@ -3676,119 +3767,123 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-simple-access": { + "node_modules/@babel/preset-typescript": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", + "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-split-export-declaration": { + "node_modules/@babel/preset-typescript/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-validator-identifier": { + "node_modules/@babel/preset-typescript/node_modules/@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "node_modules/@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "regenerator-runtime": "^0.13.4" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/parser": { + "node_modules/@babel/runtime-corejs3": { "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", + "dependencies": { + "core-js-pure": "^3.15.0", + "regenerator-runtime": "^0.13.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/template": { + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, + "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/types": { + "node_modules/@babel/template/node_modules/@babel/highlight": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/ansi-styles": { + "node_modules/@babel/template/node_modules/@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -3799,7 +3894,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/chalk": { + "node_modules/@babel/template/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -3812,7 +3907,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-convert": { + "node_modules/@babel/template/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -3820,12 +3915,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-name": { + "node_modules/@babel/template/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/escape-string-regexp": { + "node_modules/@babel/template/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -3833,68 +3928,22 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-new-target/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/code-frame": { + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", @@ -3905,12 +3954,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -3918,45 +3967,47 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "node_modules/@babel/traverse/node_modules/@babel/generator/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-get-function-arity": { + "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "node_modules/@babel/traverse/node_modules/@babel/helper-function-name/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { "@babel/types": "^7.14.5" }, @@ -3964,48 +4015,50 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-replace-supers": { + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@babel/traverse/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/highlight": { + "node_modules/@babel/traverse/node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", @@ -4018,10 +4071,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "node_modules/@babel/traverse/node_modules/@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -4029,7 +4082,7 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/template": { + "node_modules/@babel/traverse/node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", @@ -4042,38 +4095,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/traverse/node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/ansi-styles": { + "node_modules/@babel/traverse/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -4084,7 +4118,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/chalk": { + "node_modules/@babel/traverse/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -4097,7 +4131,7 @@ "node": ">=4" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/color-convert": { + "node_modules/@babel/traverse/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -4105,12 +4139,12 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/color-name": { + "node_modules/@babel/traverse/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/@babel/plugin-transform-object-super/node_modules/escape-string-regexp": { + "node_modules/@babel/traverse/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -4118,222 +4152,367 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" + "node_modules/@babel/types": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, + "node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - } + "node_modules/@docsearch/css": { + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", + "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "node_modules/@docsearch/react": { + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", + "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@algolia/autocomplete-core": "1.2.1", + "@algolia/autocomplete-preset-algolia": "1.2.1", + "@docsearch/css": "3.0.0-alpha.37", + "algoliasearch": "^4.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@types/react": ">= 16.8.0 < 18.0.0", + "react": ">= 16.8.0 < 18.0.0", + "react-dom": ">= 16.8.0 < 18.0.0" } }, - "node_modules/@babel/plugin-transform-property-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "node_modules/@docusaurus/core": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", + "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.3", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "@slorber/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.1", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "clean-css": "^5.1.2", + "commander": "^5.1.0", + "copy-webpack-plugin": "^9.0.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^3.0.1", + "cssnano": "^5.0.4", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.3.2", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.6.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.15", + "postcss-loader": "^5.3.0", + "prompts": "^2.4.1", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.3", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.3", + "tslib": "^2.2.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.3.0", + "webpack": "^5.40.0", + "webpack-bundle-analyzer": "^4.4.2", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.0-3" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@babel/plugin-transform-react-constant-elements": { + "node_modules/@docusaurus/core/node_modules/@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", - "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-react-constant-elements/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@docusaurus/core/node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", - "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", + "node_modules/@docusaurus/core/node_modules/@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@docusaurus/core/node_modules/@babel/core/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { + "node_modules/@docusaurus/core/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@docusaurus/core/node_modules/@babel/generator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", - "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-annotate-as-pure": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-compilation-targets": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" + "node_modules/@docusaurus/core/node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@docusaurus/core/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "regexpu-core": "^4.7.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-explode-assignable-expression": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-regenerator": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-get-function-arity": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-reserved-words/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "node_modules/@docusaurus/core/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-module-imports": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", @@ -4344,1499 +4523,1595 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-module-transforms": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "node_modules/@docusaurus/core/node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/types": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-optimise-call-expression": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/@docusaurus/core/node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-remap-async-to-generator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-replace-supers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "node_modules/@docusaurus/core/node_modules/@babel/helper-replace-supers/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-simple-access": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-sticky-regex/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-template-literals": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-template-literals/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { + "node_modules/@docusaurus/core/node_modules/@babel/helper-wrap-function": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@docusaurus/core/node_modules/@babel/helper-wrap-function/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-typescript": { + "node_modules/@docusaurus/core/node_modules/@babel/helpers": { "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", - "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.6", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "node_modules/@docusaurus/core/node_modules/@babel/helpers/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/highlight": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "node_modules/@docusaurus/core/node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@docusaurus/core/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/preset-env": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-class-properties": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-validator-identifier": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-parameters": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/types": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-json-strings": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-typescript": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", - "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-typescript/node_modules/@babel/helper-plugin-utils": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", - "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dependencies": { - "core-js-pure": "^3.15.0", - "regenerator-runtime": "^0.13.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { + "node_modules/@docusaurus/core/node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docsearch/css": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", - "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" - }, - "node_modules/@docsearch/react": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", - "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dependencies": { - "@algolia/autocomplete-core": "1.2.1", - "@algolia/autocomplete-preset-algolia": "1.2.1", - "@docsearch/css": "3.0.0-alpha.37", - "algoliasearch": "^4.0.0" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", - "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.3", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@slorber/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.1", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "clean-css": "^5.1.2", - "commander": "^5.1.0", - "copy-webpack-plugin": "^9.0.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^3.0.1", - "cssnano": "^5.0.4", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.3.2", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.6.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.15", - "postcss-loader": "^5.3.0", - "prompts": "^2.4.1", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.3", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.3", - "tslib": "^2.2.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.3.0", - "webpack": "^5.40.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.0-3" + "@babel/helper-plugin-utils": "^7.14.5" }, - "bin": { - "docusaurus": "bin/docusaurus.js" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", - "integrity": "sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dependencies": { - "cssnano-preset-advanced": "^5.1.1", - "postcss": "^8.2.15", - "postcss-sort-media-queries": "^3.10.11" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz", - "integrity": "sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dependencies": { - "@babel/parser": "^7.12.16", - "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.3", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.40.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", - "integrity": "sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "feed": "^4.2.2", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.2.0", - "webpack": "^5.40.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", - "integrity": "sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "chalk": "^4.1.1", - "combine-promises": "^1.1.0", - "escape-string-regexp": "^4.0.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "tslib": "^2.2.0", - "utility-types": "^3.10.0", - "webpack": "^5.40.0" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" + "node": ">=6.9.0" }, - "bin": { - "json5": "lib/cli.js" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=4.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dependencies": { - "path-key": "^3.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", - "integrity": "sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.40.0" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", - "integrity": "sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "react-json-view": "^1.21.3", - "tslib": "^2.1.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz", - "integrity": "sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz", - "integrity": "sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz", - "integrity": "sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "fs-extra": "^10.0.0", - "sitemap": "^7.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" + "object.assign": "^4.1.0" } }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz", - "integrity": "sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/plugin-debug": "2.0.0-beta.3", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.3", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.3", - "@docusaurus/plugin-sitemap": "2.0.0-beta.3", - "@docusaurus/theme-classic": "2.0.0-beta.3", - "@docusaurus/theme-search-algolia": "2.0.0-beta.3" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { - "prop-types": "^15.6.2" + "object.assign": "^4.1.0" } }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz", - "integrity": "sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw==", + "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/theme-common": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.1", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.26", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.15", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", - "integrity": "sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g==", + "node_modules/@docusaurus/core/node_modules/@babel/preset-env": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "tslib": "^2.1.0" + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz", - "integrity": "sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA==", + "node_modules/@docusaurus/core/node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@docusaurus/core/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { - "@docsearch/react": "^3.0.0-alpha.36", - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/theme-common": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=12.13.0" + "node": ">=6.9.0" } }, - "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.3.tgz", - "integrity": "sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q==", + "node_modules/@docusaurus/core/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.40.0", - "webpack-merge": "^5.8.0" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", - "integrity": "sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.3", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.0.0", - "gray-matter": "^4.0.3", - "lodash": "^4.17.20", - "resolve-pathname": "^3.0.0", - "tslib": "^2.2.0" + "node_modules/@docusaurus/core/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=12.13.0" + "node": ">=0.4.0" } }, - "node_modules/@docusaurus/utils-common": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz", - "integrity": "sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg==", + "node_modules/@docusaurus/core/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "@docusaurus/types": "2.0.0-beta.3", - "tslib": "^2.2.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=4" } }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz", - "integrity": "sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ==", + "node_modules/@docusaurus/core/node_modules/autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", "dependencies": { - "@docusaurus/utils": "2.0.0-beta.3", - "chalk": "^4.1.1", - "joi": "^17.4.0", - "tslib": "^2.1.0" + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=12.13.0" + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, + "node_modules/@docusaurus/core/node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, + "node_modules/@docusaurus/core/node_modules/boxen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", "dependencies": { - "type-fest": "^0.20.2" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", - "hasInstallScript": true, + "node_modules/@docusaurus/core/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, "engines": { - "node": ">=6" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", - "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", - "hasInstallScript": true, + "node_modules/@docusaurus/core/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - }, - "engines": { - "node": ">=6" + "color-name": "1.1.3" } }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", - "hasInstallScript": true, + "node_modules/@docusaurus/core/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@docusaurus/core/node_modules/copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", - "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", + "node_modules/@docusaurus/core/node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dependencies": { - "prop-types": "^15.7.2" + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@docusaurus/core/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, + "node_modules/@docusaurus/core/node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=10.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "node_modules/@docusaurus/core/node_modules/css-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "node_modules/@docusaurus/core/node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=6.9.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "node_modules/@docusaurus/core/node_modules/cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@docusaurus/core/node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@docusaurus/core/node_modules/electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "node_modules/@docusaurus/core/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { - "node": ">= 8" + "node": ">=0.8.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@docusaurus/core/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.15", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", - "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" - }, - "node_modules/@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "node_modules/@docusaurus/core/node_modules/glob-parent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", + "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", "dependencies": { - "@hapi/hoek": "^9.0.0" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@sideway/formula": { + "node_modules/@docusaurus/core/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", + "node_modules/@docusaurus/core/node_modules/html-webpack-plugin": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", + "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" + "@types/html-minifier-terser": "^5.0.0", + "html-minifier-terser": "^5.0.1", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" } }, - "node_modules/@slorber/static-site-generator-webpack-plugin/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==", + "node_modules/@docusaurus/core/node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/@docusaurus/core/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "node_modules/@docusaurus/core/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, "engines": { - "node": ">=10" + "node": ">=4.0.0" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" + "node_modules/@docusaurus/core/node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "node_modules/@docusaurus/core/node_modules/postcss-loader": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" + }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "node_modules/@docusaurus/core/node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "node_modules/@docusaurus/core/node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "node_modules/@docusaurus/core/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=10" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { + "node_modules/@docusaurus/core/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, + "node_modules/@docusaurus/core/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "node_modules/@docusaurus/core/node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "node_modules/@docusaurus/core/node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dependencies": { - "@babel/types": "^7.12.6" + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, + "node_modules/@docusaurus/core/node_modules/terser-webpack-plugin/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==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "node_modules/@docusaurus/core/node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/@svgr/plugin-svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@docusaurus/core/node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", "dependencies": { - "color-convert": "^1.9.0" + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@svgr/plugin-svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@docusaurus/core/node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@svgr/plugin-svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@docusaurus/core/node_modules/webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", "dependencies": { - "color-name": "1.1.3" + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" } }, - "node_modules/@svgr/plugin-svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", + "integrity": "sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA==", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "cssnano-preset-advanced": "^5.1.1", + "postcss": "^8.2.15", + "postcss-sort-media-queries": "^3.10.11" } }, - "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "node_modules/@docusaurus/mdx-loader": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz", + "integrity": "sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ==", "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "@babel/parser": "^7.12.16", + "@babel/traverse": "^7.12.13", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "github-slugger": "^1.3.0", + "gray-matter": "^4.0.3", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.1", + "webpack": "^5.40.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "node_modules/@docusaurus/mdx-loader/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">= 6" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "node": ">=6.0.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" + "node_modules/@docusaurus/mdx-loader/node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/@docusaurus/mdx-loader/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/@docusaurus/mdx-loader/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { - "boolbase": "~1.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@svgr/plugin-svgo/node_modules/source-map": { + "node_modules/@docusaurus/mdx-loader/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==", @@ -5844,339 +6119,518 @@ "node": ">=0.10.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@docusaurus/mdx-loader/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@docusaurus/mdx-loader/node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dependencies": { - "has-flag": "^3.0.0" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "node_modules/@docusaurus/mdx-loader/node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" }, "bin": { - "svgo": "bin/svgo" + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.0.0-alpha.72", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-alpha.72.tgz", + "integrity": "sha512-z8qGXvvyF8FYgnc0c7v5BqulrUJ0A01jsb2gT4miC6Gc/pKnpahZqBXcm1MrQiiUrlHMEjdOAxlHQVZuOwSSRQ==", + "dev": true + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", + "integrity": "sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q==", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", + "feed": "^4.2.2", + "fs-extra": "^10.0.0", + "globby": "^11.0.2", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "reading-time": "^1.3.0", + "remark-admonitions": "^1.2.1", + "tslib": "^2.2.0", + "webpack": "^5.40.0" }, "engines": { - "node": ">=10" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { - "defer-to-connect": "^1.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "node_modules/@docusaurus/plugin-content-blog/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==", "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "node_modules/@docusaurus/plugin-content-blog/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "engines": { + "node": ">=6" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "node_modules/@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" - }, - "node_modules/@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@types/hast": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", - "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", + "integrity": "sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ==", "dependencies": { - "@types/unist": "*" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "chalk": "^4.1.1", + "combine-promises": "^1.1.0", + "escape-string-regexp": "^4.0.0", + "execa": "^5.0.0", + "fs-extra": "^10.0.0", + "globby": "^11.0.2", + "import-fresh": "^3.2.2", + "js-yaml": "^4.0.0", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "remark-admonitions": "^1.2.1", + "shelljs": "^0.8.4", + "tslib": "^2.2.0", + "utility-types": "^3.10.0", + "webpack": "^5.40.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - }, - "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", - "dependencies": { - "@types/unist": "*" + "node_modules/@docusaurus/plugin-content-docs/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/node": { - "version": "16.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", - "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + "node_modules/@docusaurus/plugin-content-docs/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/@types/sax": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.3.tgz", - "integrity": "sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "@types/node": "*" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "node_modules/@docusaurus/plugin-content-docs/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "node_modules/@docusaurus/plugin-content-docs/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "node_modules/@docusaurus/plugin-content-docs/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dependencies": { - "@xtuc/long": "4.2.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "node_modules/@docusaurus/plugin-content-docs/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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "node_modules/@docusaurus/plugin-content-docs/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "engines": { + "node": ">=6" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", + "integrity": "sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/mdx-loader": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "globby": "^11.0.2", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", + "tslib": "^2.1.0", + "webpack": "^5.40.0" }, "engines": { - "node": ">= 0.6" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, + "node_modules/@docusaurus/plugin-content-pages/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", "bin": { "acorn": "bin/acorn" }, @@ -6184,1111 +6638,1309 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "node_modules/@docusaurus/plugin-content-pages/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==", "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "node_modules/@docusaurus/plugin-content-pages/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "engines": { - "node": ">= 0.12.0" + "node": ">=6" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@docusaurus/plugin-content-pages/node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@docusaurus/plugin-content-pages/node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "node_modules/algoliasearch": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", - "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", + "node_modules/@docusaurus/plugin-debug": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", + "integrity": "sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw==", "dependencies": { - "@algolia/cache-browser-local-storage": "4.10.3", - "@algolia/cache-common": "4.10.3", - "@algolia/cache-in-memory": "4.10.3", - "@algolia/client-account": "4.10.3", - "@algolia/client-analytics": "4.10.3", - "@algolia/client-common": "4.10.3", - "@algolia/client-personalization": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/logger-console": "4.10.3", - "@algolia/requester-browser-xhr": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/requester-node-http": "4.10.3", - "@algolia/transporter": "4.10.3" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "react-json-view": "^1.21.3", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/algoliasearch-helper": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz", - "integrity": "sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA==", + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz", + "integrity": "sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg==", "dependencies": { - "events": "^1.1.1" - } - }, - "node_modules/algoliasearch-helper/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "@docusaurus/core": "2.0.0-beta.3" + }, "engines": { - "node": ">=0.4.x" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz", + "integrity": "sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA==", "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "@docusaurus/core": "2.0.0-beta.3" + }, "engines": { - "node": ">=6" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz", + "integrity": "sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw==", + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "fs-extra": "^10.0.0", + "sitemap": "^7.0.0", + "tslib": "^2.2.0" + }, "engines": { - "node": ">=4" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/@docusaurus/plugin-sitemap/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@docusaurus/preset-classic": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz", + "integrity": "sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q==", "dependencies": { - "ansi-regex": "^4.1.0" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/plugin-debug": "2.0.0-beta.3", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.3", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.3", + "@docusaurus/plugin-sitemap": "2.0.0-beta.3", + "@docusaurus/theme-classic": "2.0.0-beta.3", + "@docusaurus/theme-search-algolia": "2.0.0-beta.3" }, "engines": { - "node": ">=6" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "dependencies": { + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@docusaurus/theme-classic": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz", + "integrity": "sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw==", "dependencies": { - "type-fest": "^0.21.3" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/theme-common": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "@mdx-js/mdx": "^1.6.21", + "@mdx-js/react": "^1.6.21", + "chalk": "^4.1.1", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.1", + "fs-extra": "^10.0.0", + "globby": "^11.0.2", + "infima": "0.2.0-alpha.26", + "lodash": "^4.17.20", + "parse-numeric-range": "^1.2.0", + "postcss": "^8.2.15", + "prism-react-renderer": "^1.2.1", + "prismjs": "^1.23.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.2.0", + "rtlcss": "^3.1.2" }, "engines": { - "node": ">=8" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" + "node_modules/@docusaurus/theme-classic/node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "node_modules/@docusaurus/theme-classic/node_modules/copy-text-to-clipboard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", + "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/@docusaurus/theme-classic/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@docusaurus/theme-classic/node_modules/prism-react-renderer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", + "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", + "integrity": "sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g==", "dependencies": { - "color-convert": "^2.0.1" + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/plugin-content-blog": "2.0.0-beta.3", + "@docusaurus/plugin-content-docs": "2.0.0-beta.3", + "@docusaurus/plugin-content-pages": "2.0.0-beta.3", + "@docusaurus/types": "2.0.0-beta.3", + "tslib": "^2.1.0" }, "engines": { - "node": ">=8" + "node": ">=12.13.0" + }, + "peerDependencies": { + "prism-react-renderer": "^1.2.1", + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz", + "integrity": "sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@docsearch/react": "^3.0.0-alpha.36", + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/theme-common": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "algoliasearch": "^4.8.4", + "algoliasearch-helper": "^3.3.4", + "clsx": "^1.1.1", + "eta": "^1.12.1", + "lodash": "^4.17.20" }, "engines": { - "node": ">= 8" + "node": ">=12.13.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@docusaurus/types": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.3.tgz", + "integrity": "sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q==", "dependencies": { - "sprintf-js": "~1.0.2" + "commander": "^5.1.0", + "joi": "^17.4.0", + "querystring": "0.2.0", + "webpack": "^5.40.0", + "webpack-merge": "^5.8.0" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/@docusaurus/types/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.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==", + "node_modules/@docusaurus/types/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==", "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "node_modules/@docusaurus/types/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, + "node_modules/@docusaurus/types/node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@docusaurus/types/node_modules/webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, "engines": { - "node": ">=8" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "node_modules/@docusaurus/utils": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", + "integrity": "sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.3", + "@types/github-slugger": "^1.3.0", + "chalk": "^4.1.1", + "escape-string-regexp": "^4.0.0", + "fs-extra": "^10.0.0", + "gray-matter": "^4.0.3", + "lodash": "^4.17.20", + "resolve-pathname": "^3.0.0", + "tslib": "^2.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.13.0" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/@docusaurus/utils-common": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz", + "integrity": "sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg==", + "dependencies": { + "@docusaurus/types": "2.0.0-beta.3", + "tslib": "^2.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.13.0" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, + "node_modules/@docusaurus/utils-validation": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz", + "integrity": "sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "@docusaurus/utils": "2.0.0-beta.3", + "chalk": "^4.1.1", + "joi": "^17.4.0", + "tslib": "^2.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12.13.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "node_modules/@docusaurus/utils/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "dependencies": { - "lodash": "^4.17.14" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } }, - "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==", - "bin": { - "atob": "bin/atob.js" + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", + "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.35" }, "engines": { - "node": ">= 4.5.0" + "node": ">=6" } }, - "node_modules/autoprefixer": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", - "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", + "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", + "hasInstallScript": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001243", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "@fortawesome/fontawesome-common-types": "^0.2.35" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=6" } }, - "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", + "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", "dependencies": { - "follow-redirects": "^1.10.0" + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "react": ">=16.x" } }, - "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "node_modules/@hapi/hoek": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", + "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, "dependencies": { - "minimist": "^1.2.0" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" }, - "engines": { - "node": ">=4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/generator/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "object.assign": "^4.1.0" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "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==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "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" + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "is-descriptor": "^1.0.0" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { - "kind-of": "^6.0.0" + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "kind-of": "^6.0.0" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, "engines": { - "node": "*" + "node": ">=6.9.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "ms": "2.0.0" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/bonjour/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@mdx-js/mdx/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { - "fill-range": "^7.0.1" + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, + "node_modules/@mdx-js/mdx/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", "bin": { - "browserslist": "cli.js" + "parser": "bin/babel-parser.js" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=6.0.0" } }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" + "node_modules/@mdx-js/mdx/node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "node_modules/@mdx-js/mdx/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "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" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "node_modules/@mdx-js/mdx/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/@mdx-js/mdx/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "color-name": "1.1.3" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/@mdx-js/mdx/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@mdx-js/mdx/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "node_modules/@mdx-js/mdx/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@mdx-js/mdx/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "node": ">= 8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001245", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", - "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==" - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "node_modules/@polka/url": { + "version": "1.0.0-next.15", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", + "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" }, - "node_modules/character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", - "dev": true + "node_modules/@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, - "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/cheerio/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", + "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.4", + "url": "^0.11.0", + "webpack-sources": "^1.4.3" } }, - "node_modules/cheerio/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "node_modules/@slorber/static-site-generator-webpack-plugin/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==", "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/cheerio/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/cheerio/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/cheerio/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/cheerio/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", "engines": { - "node": ">= 8.10.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", "engines": { - "node": ">=6.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, - "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==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "dependencies": { - "is-descriptor": "^0.1.0" + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/clean-css": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.3.tgz", - "integrity": "sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA==", + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dependencies": { - "source-map": "~0.6.0" + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" }, "engines": { - "node": ">= 10.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/clean-css/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==", + "node_modules/@svgr/core/node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/cliui/node_modules/ansi-styles": { + "node_modules/@svgr/plugin-svgo/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -7299,7 +7951,20 @@ "node": ">=4" } }, - "node_modules/cliui/node_modules/color-convert": { + "node_modules/@svgr/plugin-svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -7307,136 +7972,95 @@ "color-name": "1.1.3" } }, - "node_modules/cliui/node_modules/color-name": { + "node_modules/@svgr/plugin-svgo/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dependencies": { - "ansi-regex": "^4.1.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/@svgr/plugin-svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" + "node": ">=8.0.0" } }, - "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "node_modules/@svgr/plugin-svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "engines": { - "node": ">=6" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "node": ">= 6" }, - "engines": { - "node": ">= 4.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" } }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@svgr/plugin-svgo/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/@svgr/plugin-svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dependencies": { - "color-name": "1.1.3" + "dom-serializer": "0", + "domelementtype": "1" } }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/coa/node_modules/escape-string-regexp": { + "node_modules/@svgr/plugin-svgo/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", @@ -7444,7 +8068,7 @@ "node": ">=0.8.0" } }, - "node_modules/coa/node_modules/has-flag": { + "node_modules/@svgr/plugin-svgo/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", @@ -7452,7 +8076,28 @@ "node": ">=4" } }, - "node_modules/coa/node_modules/supports-color": { + "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -7463,976 +8108,848 @@ "node": ">=4" } }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/@svgr/plugin-svgo/node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", "dependencies": { - "color-name": "~1.1.4" + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", - "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", "engines": { "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/@svgr/webpack/node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "defer-to-connect": "^1.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "node_modules/@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@tsconfig/docusaurus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.2.tgz", + "integrity": "sha512-x4rRVb346vjyym6QbeB1Tv01XXwhbkujOmvDmtf0bT20oc2gbDhbmwpskKqZ5Of2Q/Vk4jNk1WMiLsZdJ9t7Dw==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", "dependencies": { - "ms": "2.0.0" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + "node_modules/@types/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "node_modules/@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" + "node_modules/@types/hast": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", + "dependencies": { + "@types/unist": "*" } }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/@types/history": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", + "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==", + "dev": true + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "node_modules/@types/lodash": { + "version": "4.14.168", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", + "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", "dependencies": { - "safe-buffer": "~5.1.1" + "@types/unist": "*" } }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "engines": { - "node": ">= 0.6" - } + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "node_modules/@types/node": { + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", + "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==" }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, - "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "engines": { - "node": ">=12" - } + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, - "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "node_modules/@types/prettier": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "node_modules/@types/react": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", + "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", "dependencies": { - "toggle-selection": "^1.0.6" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "node_modules/copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "node_modules/@types/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-PYRoU1XJFOzQ3BHvWL1T8iDNbRjdMDJMT5hFmZKGbsq09kbSqJy61uwEpTrbTNWDopVphUT34zUSVLK9pjsgYQ==", + "dev": true, "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.13.0" + "@types/react": "*" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", + "node_modules/@types/react-router": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz", + "integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">=10.13.0" + "@types/history": "*", + "@types/react": "*" } }, - "node_modules/core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", - "hasInstallScript": true + "node_modules/@types/react-router-dom": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", + "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", + "dev": true, + "dependencies": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } }, - "node_modules/core-js-compat": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", - "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "node_modules/@types/sax": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.3.tgz", + "integrity": "sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA==", "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" + "@types/node": "*" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" + "node_modules/@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + }, + "node_modules/@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "node_modules/core-js-pure": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", - "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", - "hasInstallScript": true + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dependencies": { - "node-fetch": "2.6.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "node_modules/css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "engines": { - "node": "*" - } + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, - "node_modules/css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dependencies": { - "timsort": "^0.3.0" - }, - "engines": { - "node": ">= 10" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, - "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "p-limit": "^3.0.2", - "postcss": "^8.3.5", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "node_modules/css-minimizer-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.6" } }, - "node_modules/css-tree/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==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "engines": { - "node": ">= 6" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, + "node_modules/acorn-walk": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.12.0" } }, - "node_modules/cssnano-preset-advanced": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", - "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { - "autoprefixer": "^10.2.0", - "cssnano-preset-default": "^5.1.3", - "postcss-discard-unused": "^5.0.1", - "postcss-merge-idents": "^5.0.1", - "postcss-reduce-idents": "^5.0.1", - "postcss-zindex": "^5.0.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" } }, - "node_modules/cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "peerDependencies": { + "ajv": ">=5.0.0" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", + "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" + "@algolia/cache-browser-local-storage": "4.10.3", + "@algolia/cache-common": "4.10.3", + "@algolia/cache-in-memory": "4.10.3", + "@algolia/client-account": "4.10.3", + "@algolia/client-analytics": "4.10.3", + "@algolia/client-common": "4.10.3", + "@algolia/client-personalization": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/logger-console": "4.10.3", + "@algolia/requester-browser-xhr": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/requester-node-http": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/algoliasearch-helper": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz", + "integrity": "sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA==", "dependencies": { - "ms": "2.1.2" + "events": "^1.1.1" }, - "engines": { - "node": ">=6.0" + "peerDependencies": { + "algoliasearch": ">= 3.1 < 5" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "node_modules/algoliasearch-helper/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "engines": { - "node": ">=0.10.0" + "node": ">=0.4.x" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" + "node_modules/algoliasearch/node_modules/@algolia/cache-browser-local-storage": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", + "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", + "dependencies": { + "@algolia/cache-common": "4.10.3" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "node_modules/algoliasearch/node_modules/@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + }, + "node_modules/algoliasearch/node_modules/@algolia/cache-in-memory": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", + "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@algolia/cache-common": "4.10.3" } }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "node_modules/algoliasearch/node_modules/@algolia/client-account": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", + "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" + "node_modules/algoliasearch/node_modules/@algolia/client-analytics": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", + "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" + "node_modules/algoliasearch/node_modules/@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", + "dependencies": { + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "node_modules/algoliasearch/node_modules/@algolia/client-search": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", + "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "node_modules/algoliasearch/node_modules/@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/algoliasearch/node_modules/@algolia/logger-console": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", + "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" + "@algolia/logger-common": "4.10.3" } }, - "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==", + "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", + "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@algolia/requester-common": "4.10.3" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/algoliasearch/node_modules/@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + }, + "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", + "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@algolia/requester-common": "4.10.3" } }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/algoliasearch/node_modules/@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" } }, - "node_modules/define-property/node_modules/is-descriptor": { + "node_modules/alphanum-sort": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "string-width": "^3.0.0" } }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dependencies": { - "repeat-string": "^1.5.4" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">= 4.2.1" + "node": ">=6" } }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" } }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { - "path-type": "^4.0.0" + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dependencies": { - "buffer-indexof": "^1.0.0" + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" + "node": ">=8" } }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true }, - "node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { - "domelementtype": "^2.2.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 4" + "node": ">= 8" } }, - "node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } + "node_modules/arg": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", + "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "sprintf-js": "~1.0.2" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "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==", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" + "node": ">=0.10.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "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==", - "dependencies": { - "prr": "~1.0.1" + "node": ">= 0.4" }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-abstract": { + "node_modules/array-includes/node_modules/es-abstract": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -8453,1052 +8970,956 @@ }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", - "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==" - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/array-includes/node_modules/es-abstract/node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "engines": { "node": ">=8" } }, - "node_modules/escape-html": { + "node_modules/array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - } + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "node_modules/eslint-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", - "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", - "dev": true, - "dependencies": { - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "tslib": "^2.2.0", - "unified": "^9.2.1" - }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "engines": { - "node": ">=10.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-markdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", - "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", - "dev": true, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" + "lodash": "^4.17.14" } }, - "node_modules/eslint-plugin-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", - "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.13.0", - "eslint-plugin-markdown": "^2.1.0", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "synckit": "^0.1.5", - "tslib": "^2.2.0", - "unified": "^9.2.1", - "vfile": "^4.2.1" + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "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==", + "bin": { + "atob": "bin/atob.js" }, "engines": { - "node": ">=10.0.0" + "node": ">= 4.5.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "follow-redirects": "^1.10.0" } }, - "node_modules/eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", - "dev": true, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "object.assign": "^4.1.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@babel/helper-plugin-utils": "7.10.4" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", "engines": { - "node": ">=10" + "node": ">=6.9.0" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", "dependencies": { - "sprintf-js": "~1.0.2" + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", "dependencies": { - "type-fest": "^0.20.2" + "@babel/helper-define-polyfill-provider": "^0.2.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, + "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==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "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": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "estraverse": "^5.1.0" + "kind-of": "^6.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "estraverse": "^5.2.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" + "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==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" } }, - "node_modules/eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dependencies": { - "require-like": ">= 0.1.1" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "engines": { "node": ">= 0.8" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "node_modules/execa": { + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "shebang-regex": "^1.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "dependencies": { - "isexe": "^2.0.0" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" }, "bin": { - "which": "bin/which" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "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" + "browserslist": "cli.js" }, "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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==", "dependencies": { - "is-extendable": "^0.1.0" + "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/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "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" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "is-descriptor": "^1.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/extglob/node_modules/is-descriptor": { + "node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dependencies": { - "punycode": "^1.3.2" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "dependencies": { - "reusify": "^1.0.4" + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "engines": { - "node": ">=0.8.0" + "node": ">= 6" } }, - "node_modules/fbemitter": { + "node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dependencies": { - "fbjs": "^3.0.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "dependencies": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "node_modules/caniuse-lite": { + "version": "1.0.30001245", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", + "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dependencies": { - "xml-js": "^1.6.11" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 10.13.0" + "node": ">=7.0.0" } }, - "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">= 0.4.0" + "node": ">=8" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "to-regex-range": "^5.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/cheerio/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/cheerio/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true + "node_modules/cheerio/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, - "node_modules/flux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", - "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", + "node_modules/cheerio/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.0" + "dom-serializer": "0", + "domelementtype": "1" } }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "node_modules/cheerio/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/cheerio/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=4.0" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/for-in": { + "node_modules/chrome-trace-event": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dependencies": { + "tslib": "^1.9.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "node_modules/chrome-trace-event/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "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==", "dependencies": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "engines": { - "node": ">=6.11.5", - "yarn": ">=1.0.0" + "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "color-convert": "^1.9.0" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/clean-css": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.3.tgz", + "integrity": "sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA==", "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" + "source-map": "~0.6.0" }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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==", "engines": { "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", + "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.1.1", + "d": "^1.0.1", + "es5-ext": "^0.10.51", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.14", + "timers-ext": "^0.1.7" + } + }, + "node_modules/cli-color/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "node_modules/cliui/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -9506,2850 +9927,3117 @@ "color-name": "1.1.3" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "node_modules/cliui/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/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==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "is-plain-object": "^2.0.4" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "mimic-response": "^1.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/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==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dependencies": { - "kind-of": "^3.0.2" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "is-buffer": "^1.1.5" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "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" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "color-name": "1.1.3" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "node_modules/coa/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", - "engines": { - "node": "*" + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dependencies": { - "map-cache": "^0.2.2" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/colord": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", + "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==" }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "node_modules/github-slugger": { + "node_modules/component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } - }, - "node_modules/github-slugger/node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": "*" + "node": ">= 0.6" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { - "is-glob": "^4.0.1" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { + "node_modules/compression/node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/global-modules": { + "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dependencies": { - "global-prefix": "^3.0.0" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "node_modules/configstore/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, + "node_modules/configstore/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { - "which": "bin/which" + "semver": "bin/semver.js" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "engines": { - "node": ">=4" + "node": ">=0.8" } }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "safe-buffer": "5.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "engines": { - "node": ">=8.6" + "node": ">= 0.6" } }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "engines": { - "node": ">=6.0" + "node": ">=0.10.0" } }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "node_modules/copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" + "toggle-selection": "^1.0.6" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "node_modules/core-js": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/core-js-compat": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", "dependencies": { - "function-bind": "^1.1.1" + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">= 0.4.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "node_modules/core-js-compat/node_modules/electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/has-symbols": { + "node_modules/core-js-pure": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dependencies": { + "node-fetch": "2.6.1" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/has-values/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==" + "node_modules/css-color-names": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", + "engines": { + "node": "*" + } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", "dependencies": { - "kind-of": "^3.0.2" + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "p-limit": "^3.0.2", + "postcss": "^8.3.5", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + } } }, - "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/css-minimizer-webpack-plugin/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dependencies": { - "is-buffer": "^1.1.5" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "node_modules/css-minimizer-webpack-plugin/node_modules/cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", "dependencies": { - "is-buffer": "^1.1.5" + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "node_modules/css-minimizer-webpack-plugin/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==", "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" + "node": ">=0.10.0" } }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "node_modules/css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "bin": { - "he": "bin/he" + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "node_modules/cssnano-preset-advanced": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", + "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" + "autoprefixer": "^10.2.0", + "cssnano-preset-default": "^5.1.3", + "postcss-discard-unused": "^5.0.1", + "postcss-merge-idents": "^5.0.1", + "postcss-reduce-idents": "^5.0.1", + "postcss-zindex": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "node_modules/cssnano-preset-advanced/node_modules/autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", "dependencies": { - "react-is": "^16.7.0" + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/cssnano-preset-advanced/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/cssnano-preset-advanced/node_modules/electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" }, - "node_modules/hpack.js/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==", + "node_modules/cssnano-preset-default": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", "dependencies": { - "safe-buffer": "~5.1.0" + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "node_modules/cssnano-preset-default/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" }, "bin": { - "html-minifier-terser": "cli.js" + "browserslist": "cli.js" }, "engines": { - "node": ">=6" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "node_modules/cssnano-preset-default/node_modules/css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "dependencies": { - "source-map": "~0.6.0" + "timsort": "^0.3.0" }, "engines": { - "node": ">= 4.0" + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/cssnano-preset-default/node_modules/electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "node_modules/cssnano-preset-default/node_modules/postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/html-minifier-terser/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==", + "node_modules/cssnano-preset-default/node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/html-minifier-terser/node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, + "node_modules/cssnano-preset-default/node_modules/postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "node_modules/cssnano-preset-default/node_modules/postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "node_modules/html-webpack-plugin": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", - "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", + "node_modules/cssnano-preset-default/node_modules/postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.21", - "pretty-error": "^3.0.4", - "tapable": "^2.0.0" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" }, "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "node_modules/cssnano-preset-default/node_modules/postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/htmlparser2/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/cssnano-preset-default/node_modules/postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "node_modules/cssnano-preset-default/node_modules/postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "node_modules/htmlparser2/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "node_modules/cssnano-preset-default/node_modules/postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "dependencies": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "node_modules/htmlparser2/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "node_modules/cssnano-preset-default/node_modules/postcss-ordered-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "dependencies": { - "domelementtype": "1" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/htmlparser2/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/cssnano-preset-default/node_modules/postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, + "node_modules/cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "css-tree": "^1.1.2" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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" - }, + "node_modules/csso/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==", "engines": { "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/csstype": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "ms": "2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "engines": { "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "mimic-response": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dependencies": { - "is-extendable": "^0.1.0" + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/http-proxy-middleware/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==" + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dependencies": { - "is-buffer": "^1.1.5" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "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" + "object-keys": "^1.0.12" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "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==", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { - "node": ">=10.17.0" + "node": ">=0.10.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=0.10.0" } }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "repeat-string": "^1.5.4" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/import-lazy": { + "node_modules/detect-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "address": "^1.0.1", + "debug": "^2.6.0" }, "bin": { - "import-local-fixture": "fixtures/cli.js" + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" }, "engines": { - "node": ">=6" + "node": ">= 4.2.1" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" + "ms": "2.0.0" } }, - "node_modules/import-local/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/import-local/node_modules/p-locate": { + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/import-local/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" } }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dependencies": { - "find-up": "^3.0.0" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" + "node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" + "node_modules/domutils/node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/infima": { - "version": "0.2.0-alpha.26", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", - "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==", - "engines": { - "node": ">=12" + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } + "node_modules/electron-to-chromium": { + "version": "1.3.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", + "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "engines": { - "node": ">= 0.10" + "node": ">= 4" } }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "engines": { - "node": ">=4" + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "engines": { - "node": ">= 0.10" + "node": ">= 0.8" } }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dependencies": { - "kind-of": "^3.0.2" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/is-accessor-descriptor/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==" - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "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==", "dependencies": { - "call-bind": "^1.0.0" + "prr": "~1.0.1" }, - "engines": { - "node": ">= 0.4" + "bin": { + "errno": "cli.js" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "is-arrayish": "^0.2.1" } }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "node_modules/es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "engines": { - "node": ">=4" - } + "node_modules/es-module-lexer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==" }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" }, - "bin": { - "is-ci": "bin.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-color-stop/node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "engines": { - "node": "*" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, "dependencies": { - "has": "^1.0.3" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/is-data-descriptor/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==" - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "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, "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-descriptor/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==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, "bin": { - "is-docker": "cli.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/eslint-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", + "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", + "dev": true, + "dependencies": { + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "tslib": "^2.2.0", + "unified": "^9.2.1" + }, "engines": { - "node": ">=8" + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/eslint-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/eslint-plugin-markdown": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", + "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", + "dev": true, "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "mdast-util-from-markdown": "^0.8.5" }, "engines": { - "node": ">=10" + "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "node_modules/eslint-plugin-mdx": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", + "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.13.0", + "eslint-plugin-markdown": "^2.1.0", + "remark-mdx": "^1.6.22", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "synckit": "^0.1.5", + "tslib": "^2.2.0", + "unified": "^9.2.1", + "vfile": "^4.2.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "engines": { - "node": ">= 0.4" + "node_modules/eslint-plugin-mdx/node_modules/@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" } }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" + "@babel/types": "^7.12.13" } }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "node_modules/eslint-plugin-mdx/node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" + "node_modules/eslint-plugin-mdx/node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/parser": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "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==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "node_modules/eslint-plugin-mdx/node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@babel/highlight": "^7.12.13" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-plugin-mdx/node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "node_modules/eslint-plugin-mdx/node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" + "node_modules/eslint-plugin-mdx/node_modules/@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-plugin-mdx/node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "node_modules/eslint-plugin-mdx/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/eslint-plugin-mdx/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" - }, - "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-plugin-mdx/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "node_modules/eslint-plugin-mdx/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "node_modules/eslint-plugin-mdx/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/eslint-plugin-mdx/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, + "node_modules/eslint-plugin-mdx/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "engines": { - "node": ">= 10.13.0" + "node": ">=4" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/eslint-plugin-mdx/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/joi": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.1.tgz", - "integrity": "sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ==", + "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/eslint-plugin-mdx/node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/eslint-plugin-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { - "jsesc": "bin/jsesc" + "semver": "bin/semver" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "node_modules/eslint-plugin-mdx/node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "node_modules/eslint-plugin-mdx/node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" + "esutils": "^2.0.2" }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/eslint/node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, "engines": { - "node": ">=6.11.5" + "node": ">=4" } }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=8.9.0" + "node": ">=4" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "node_modules/eta": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", "engines": { - "node": ">= 0.6.0" + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/eval": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", + "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "require-like": ">= 0.1.1" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">= 0.8" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, "dependencies": { - "tslib": "^2.0.3" + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.x" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dependencies": { - "yallist": "^4.0.0" + "original": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.12.0" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dependencies": { - "semver": "^6.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dependencies": { - "object-visit": "^1.0.0" + "shebang-regex": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "dependencies": { - "repeat-string": "^1.0.0" + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "unist-util-remove": "^2.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "dev": true, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dependencies": { - "unist-util-visit": "^2.0.0" + "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/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "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==", "dependencies": { - "unist-util-visit": "^2.0.0" + "ms": "2.0.0" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "node_modules/mdast-util-to-string": { + "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.10.0" } }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "ms": "2.0.0" } }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/memory-fs/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==", + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "type": "^2.0.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "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.6" + "node": ">=0.10.0" } }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "kind-of": "^6.0.0" }, "engines": { - "node": ">=8.6" + "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==", - "bin": { - "mime": "cli.js" + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dependencies": { - "mime-db": "1.48.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/mimic-fn": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dependencies": { + "punycode": "^1.3.2" } }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" + "reusify": "^1.0.4" } }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=0.8.0" } }, - "node_modules/mini-css-extract-plugin/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==", - "engines": { - "node": ">=0.10.0" + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "dependencies": { - "brace-expansion": "^1.1.7" + "xml-js": "^1.6.11" }, "engines": { - "node": "*" + "node": ">=0.4.0" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "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==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dependencies": { - "minimist": "^1.2.5" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + "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==", + "optional": true }, - "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, + "node_modules/filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">= 0.4.0" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "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" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "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==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "is-plain-object": "^2.0.4" + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/no-case": { + "node_modules/flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/flux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", + "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", "dependencies": { - "lodash.toarray": "^4.4.0" + "fbemitter": "^3.0.0", + "fbjs": "^3.0.0" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" } }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": "4.x || >=6.0.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "engines": { - "node": ">= 6.0.0" + "node": ">=0.10.0" } }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - }, - "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==", + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dependencies": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.11.5", + "yarn": ">=1.0.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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": ">=10" + "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "path-key": "^2.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { "node": ">=4" } }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" - }, - "node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "boolbase": "^1.0.0" + "color-name": "1.1.3" } }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { - "node": ">= 10.13.0" + "node": ">=0.8.0" } }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">= 10.13.0" + "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": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, "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": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "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/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "is-descriptor": "^0.1.0" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/is-buffer": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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==" }, - "node_modules/object-copy/node_modules/kind-of": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", @@ -12360,5780 +13048,9983 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "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.4" + "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==", - "engines": { - "node": ">= 0.4" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "isobject": "^3.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, + "node_modules/fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", "engines": { - "node": ">= 0.8" + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dependencies": { - "isobject": "^3.0.1" + "map-cache": "^0.2.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dependencies": { - "wrappy": "1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { - "mimic-fn": "^2.1.0" + "pump": "^3.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "engines": { - "node": ">=8" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" + "node": ">=0.10.0" } }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "node_modules/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" + "emoji-regex": ">=6.0.0 <=6.1.1" } }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } + "node_modules/github-slugger/node_modules/emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "node_modules/glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "dependencies": { + "@types/glob": "*" + }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "glob": "*" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dependencies": { - "yocto-queue": "^0.1.0" + "ini": "2.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dependencies": { - "p-try": "^2.0.0" + "global-prefix": "^3.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dependencies": { - "aggregate-error": "^3.0.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "retry": "^0.12.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "which": "bin/which" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { - "callsites": "^3.0.0" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.6" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", - "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" + "node": ">=6.0" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.4.0" } }, - "node_modules/path-is-absolute": { + "node_modules/has-bigints": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { + "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, "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": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dependencies": { - "pinkie": "^2.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/has-values/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==" + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "find-up": "^4.0.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "find-up": "^3.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dependencies": { - "locate-path": "^3.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "dependencies": { - "p-try": "^2.0.0" + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", "dependencies": { - "p-limit": "^2.0.0" + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" }, - "engines": { - "node": ">= 0.12.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "dependencies": { - "ms": "^2.1.1" + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "node_modules/postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "react-is": "^16.7.0" } }, - "node_modules/postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/hpack.js/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" } }, - "node_modules/postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "source-map": "~0.6.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 4.0" } }, - "node_modules/postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 6" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "node_modules/html-minifier-terser/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==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6.0.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" } }, - "node_modules/postcss-discard-unused": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", - "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" } }, - "node_modules/postcss-merge-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", - "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" } }, - "node_modules/postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dependencies": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "domelementtype": "1" } }, - "node_modules/postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "node_modules/htmlparser2/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "dom-serializer": "0", + "domelementtype": "1" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.6" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8.0.0" } }, - "node_modules/postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dependencies": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=4.0.0" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" + "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": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "node_modules/http-proxy-middleware/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "is-plain-object": "^2.0.4" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-values": { + "node_modules/http-proxy-middleware/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "icss-utils": "^5.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "node_modules/http-proxy-middleware/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==" + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "kind-of": "^3.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "postcss-value-parser": "^4.1.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "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": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "node_modules/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "postcss-value-parser": "^4.1.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10.17.0" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", - "dependencies": { - "is-absolute-url": "^3.0.3", - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" - }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 4" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" } }, - "node_modules/postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=4" } }, - "node_modules/postcss-reduce-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", - "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "browserslist": "^4.16.0", - "caniuse-api": "^3.0.0" + "locate-path": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "p-try": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-sort-media-queries": { - "version": "3.11.12", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", - "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "sort-css-media-queries": "1.5.4" + "p-limit": "^2.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=6" } }, - "node_modules/postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", - "dependencies": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" - }, + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=4" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" + "find-up": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" } }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", - "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.8.19" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "node_modules/infima": { + "version": "0.2.0-alpha.26", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", + "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==", "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/pretty-error": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", - "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.6" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/prism-react-renderer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", - "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==" + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "node_modules/prismjs": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", - "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "engines": { + "node": ">=4" + } }, - "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==" + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "asap": "~2.0.3" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "node_modules/is-accessor-descriptor/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==" + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { - "xtend": "^4.0.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "call-bind": "^1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { - "escape-goat": "^2.0.0" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dependencies": { + "call-bind": "^1.0.2" + }, "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "engines": { - "node": ">=0.6" + "node": ">=4" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "engines": { - "node": ">=0.4.x" - } + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dependencies": { - "safe-buffer": "^5.1.0" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/is-color-stop/node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/raw-body": { + "node_modules/is-core-module": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "has": "^1.0.3" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "kind-of": "^3.0.2" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "engines": { "node": ">=0.10.0" } }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/is-data-descriptor/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==" + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==" - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" + "node_modules/is-descriptor/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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "dependencies": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" - }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dependencies": { - "color-name": "1.1.3" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/react-dev-utils/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-dev-utils/node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">= 4.2.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=4" + "node": ">=0.12.0" } }, - "node_modules/react-dev-utils/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "engines": { - "node": ">= 4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-dev-utils/node_modules/ms": { + "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } }, - "node_modules/react-dev-utils/node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dependencies": { - "has-flag": "^3.0.0" + "is-path-inside": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "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==", "dependencies": { - "prop-types": "^15.5.0" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "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 + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dependencies": { - "@babel/runtime": "^7.10.3" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" } }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/react-textarea-autosize": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", - "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", - "dependencies": { - "clsx": "^1.1.1" + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "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==", "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "picomatch": "^2.2.1" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, - "node_modules/reading-time": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", - "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "node_modules/jest-worker": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dependencies": { - "minimatch": "3.0.4" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "regenerate": "^1.4.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "node_modules/joi": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.1.tgz", + "integrity": "sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ==", "dependencies": { - "@babel/runtime": "^7.8.4" + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" } }, - "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==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "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==", + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-uxU9Ix+MVszvCTvBucQiIcNEny3oAEFg7EQHSZw2bquCCuqUqEPEczIdv/Uqo1Zv4/wDPZqOI+ulrMk1ncMtjQ==", + "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "@apidevtools/json-schema-ref-parser": "9.0.7" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "node_modules/json-schema-to-typescript": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.3.tgz", + "integrity": "sha512-yiyDK1sSSWhLN2JAuAyAE7jscFJj2hR7AhdF19BmdLh/N/QPdnIqrGa23CSc7z92OSSzKVPclAKof+rV8S8weA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "@types/json-schema": "^7.0.6", + "@types/lodash": "^4.14.168", + "@types/prettier": "^2.1.5", + "cli-color": "^2.0.0", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "is-glob": "^4.0.1", + "json-schema-ref-parser": "^9.0.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.20", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.2.0", + "stdin": "0.0.1" + }, + "bin": { + "json2ts": "dist/src/cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" } }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "node_modules/json-schema-to-typescript/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "node_modules/json-schema-to-typescript/node_modules/prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dependencies": { - "rc": "^1.2.8" + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "rc": "^1.2.8" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, "dependencies": { - "jsesc": "~0.5.0" + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" + "engines": { + "node": ">=4.0" } }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" + "json-buffer": "3.0.0" } }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" }, - "node_modules/rehype-parse/node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rehype-parse/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", "engines": { - "node": ">= 0.10" + "node": ">= 8" } }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" } }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "engines": { + "node": ">=6.11.5" } }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=8.9.0" } }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - } + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, - "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - } + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" }, - "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" }, - "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==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "engines": { - "node": ">=0.10" - } + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "engines": { - "node": "*" + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" + "tslib": "^2.0.3" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dev": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "es5-ext": "~0.10.2" } }, - "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==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, "engines": { - "node": ">=0.12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "engines": { - "node": ">= 4" + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "node_modules/rgba-regex": { + "node_modules/map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dependencies": { - "glob": "^7.1.3" + "object-visit": "^1.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rtl-detect": { + "node_modules/markdown-escapes": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/rtlcss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.3.0.tgz", - "integrity": "sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A==", + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, "dependencies": { - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "mkdirp": "^1.0.4", - "postcss": "^8.2.4", - "strip-json-comments": "^3.1.1" + "repeat-string": "^1.0.0" }, - "bin": { - "rtlcss": "bin/rtlcss.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "unist-util-remove": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "unist-util-visit": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rtlcss/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "dependencies": { - "tslib": "^1.9.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" }, - "engines": { - "npm": ">=2.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "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==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dependencies": { - "ret": "~0.1.10" + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, - "node_modules/schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "engines": { - "node": ">= 10.13.0" + "node": ">= 0.6" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "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" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "node_modules/memoizee/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 }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dependencies": { - "node-forge": "^0.10.0" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "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/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/memory-fs/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==", "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "randombytes": "^2.1.0" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "engines": { - "node": ">= 0.8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "engines": { "node": ">= 0.6" } }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dependencies": { - "mime-db": "~1.33.0" + "mime-db": "1.48.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "prop-types": "^15.0.0", + "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "dependencies": { - "ms": "2.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">= 0.6" + "node": ">=8.9.0" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "node_modules/mini-css-extract-plugin/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==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.8.0" + "node": "*" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "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==", + "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==", "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "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==", "dependencies": { - "kind-of": "^6.0.2" + "is-plain-object": "^2.0.4" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "shebang-regex": "^3.0.0" + "minimist": "^1.2.5" }, - "engines": { - "node": ">=8" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } + "node_modules/module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" }, "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" + "multicast-dns": "cli.js" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, - "node_modules/sirv": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", - "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "dependencies": { - "@polka/url": "^1.0.0-next.15", - "mime": "^2.3.1", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sirv/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true }, - "node_modules/sitemap": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", - "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", - "dependencies": { - "@types/node": "^15.0.1", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "bin": { - "sitemap": "dist/cli.js" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "15.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", - "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "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": ">=10" + "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==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "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" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "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==", + "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==", "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "is-plain-object": "^2.0.4" }, "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/next-tick": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", "dependencies": { - "kind-of": "^6.0.0" - }, + "lodash.toarray": "^4.4.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "engines": { - "node": ">=0.10.0" + "node": ">= 6.0.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==", - "dependencies": { - "kind-of": "^3.2.0" - }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "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==", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util/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==" - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "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==", - "dependencies": { - "ms": "2.0.0" + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dependencies": { - "is-descriptor": "^0.1.0" + "path-key": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" } }, - "node_modules/sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "node_modules/nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "dev": true, "dependencies": { - "ms": "^2.1.1" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "bin": { - "uuid": "bin/uuid" + "node_modules/null-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/sort-css-media-queries": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", - "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">= 6.3.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, "engines": { "node": ">=0.10.0" } }, - "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==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "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" + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "node_modules/object-copy/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==" }, - "node_modules/source-map-support/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==", + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.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==" + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/space-separated-tokens": { + "node_modules/object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "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==", + "engines": { + "node": ">= 0.4" } }, - "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==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dependencies": { - "extend-shallow": "^3.0.0" + "isobject": "^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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/object.entries/node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "dependencies": { - "ci-info": "^3.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/string-replace-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.3.tgz", - "integrity": "sha512-8c26Dl6H9XmKNj3mFBvaUYR7ImOxQ4YRBFuUju78wXpa1cDpyDYvKmqGg8mfkxdYexQ/BBogB7PELlLnmR08nw==", + "node_modules/object.entries/node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "webpack": "^5" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-replace-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "node_modules/object.fromentries/node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "has": "^1.0.3", "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "node_modules/object.fromentries/node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, + "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, + "node_modules/object.getownpropertydescriptors/node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dependencies": { - "ansi-regex": "^5.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "node_modules/object.values/node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "node_modules/object.values/node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dependencies": { - "inline-style-parser": "0.1.1" + "wrappy": "1" } }, - "node_modules/stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dependencies": { - "has-flag": "^4.0.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } }, - "node_modules/svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", - "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dependencies": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" + "is-wsl": "^1.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=4" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/synckit": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", - "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { - "tslib": "^2.2.0", - "uuid": "^8.3.2" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { - "node": ">=4.0" + "node": ">= 0.8.0" } }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" + "url-parse": "^1.4.3" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" } }, - "node_modules/table/node_modules/json-schema-traverse": { + "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" } }, - "node_modules/terser-webpack-plugin/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==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": ">=4" + "node": ">=6" } }, - "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { - "kind-of": "^3.0.2" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/to-object-path/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==" + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { "node": ">=6" } }, - "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==", + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "is-number": "^7.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, + "node_modules/parse-numeric-range": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", + "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "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==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dependencies": { - "is-plain-object": "^2.0.4" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "engines": { "node": ">=0.10.0" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } }, - "node_modules/ts-essentials": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", - "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "engines": { - "node": ">=10" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "node_modules/pify/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/pify/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "is-typedarray": "^1.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "node_modules/pify/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "node_modules/pify/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "color-name": "1.1.3" } }, - "node_modules/unherit": { + "node_modules/pify/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/pify/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "node_modules/pify/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/pify/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "node_modules/pify/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/pify/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==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "node_modules/pify/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" } }, - "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==", + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "pinkie": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { - "crypto-random-string": "^2.0.0" + "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "node_modules/unist-util-position": { + "node_modules/pkg-up": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dependencies": { - "unist-util-is": "^4.0.0" + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "unist-util-visit": "^2.0.0" + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "@types/unist": "^2.0.2" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "p-try": "^2.0.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.12.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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ms": "^2.1.1" } }, - "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "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==", + "node_modules/postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, "engines": { - "node": ">=4", - "yarn": "*" + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "node_modules/postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "dependencies": { - "punycode": "^2.1.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/postcss-colormin/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, "engines": { - "node": ">=6" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "node_modules/postcss-colormin/node_modules/electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "node_modules/postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "node_modules/postcss-discard-unused": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", + "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">= 10.13.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "node_modules/postcss-merge-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", + "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "dependencies": { - "prepend-http": "^2.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "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==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/use-composed-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", - "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", + "node_modules/postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "dependencies": { - "ts-essentials": "^2.0.3" + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "node_modules/postcss-minify-selectors": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "dependencies": { - "use-isomorphic-layout-effect": "^1.0.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">= 4" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "node_modules/postcss-modules-local-by-default/node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "engines": { - "node": ">= 0.4.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "node_modules/postcss-modules-values/node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "node_modules/postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/wait-on": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "dependencies": { - "axios": "^0.21.1", - "joi": "^17.3.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^6.6.3" - }, - "bin": { - "wait-on": "bin/wait-on" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=8.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "dependencies": { - "minimalistic-assert": "^1.0.0" + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" - }, - "node_modules/web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" - }, - "node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "node_modules/postcss-normalize-unicode/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" }, "bin": { - "webpack": "bin/webpack.js" + "browserslist": "cli.js" }, "engines": { - "node": ">=10.13.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", - "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", + "node_modules/postcss-normalize-unicode/node_modules/electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-normalize-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^6.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=0.4.0" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "engines": { - "node": ">= 6" - } + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "dependencies": { - "duplexer": "^0.1.2" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-reduce-idents": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", + "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" + "node_modules/postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "dependencies": { + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "node_modules/postcss-reduce-initial/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" }, "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "browserslist": "cli.js" }, "engines": { - "node": ">= 6.11.5" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } + "node_modules/postcss-reduce-initial/node_modules/electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, - "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dependencies": { - "remove-trailing-separator": "^1.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/postcss-sort-media-queries": { + "version": "3.11.12", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", + "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", "dependencies": { - "array-uniq": "^1.0.1" + "sort-css-media-queries": "1.5.4" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.3.1" } }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "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" + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-unique-selectors": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dependencies": { - "is-extendable": "^0.1.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", + "uniqs": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "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" + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", + "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", + "engines": { + "node": "^10 || ^12 || >=14.0" }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "node_modules/prebuild-webpack-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", + "dev": true, "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" + "debug": "^4.1.1", + "glob": "^7.1.5", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=6" + "node": ">=8.9.0" } }, - "node_modules/webpack-dev-server/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/webpack-dev-server/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "^2.0.4" + "node_modules/prettier": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/pretty-error": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", + "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", "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" + "lodash": "^4.17.20", + "renderkid": "^2.0.6" } }, - "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, + "node_modules/pretty-error/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "engines": { "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" + "node_modules/pretty-error/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } ], - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "node_modules/pretty-error/node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" } }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "node_modules/pretty-error/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/prismjs": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", + "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" + }, + "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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "asap": "~2.0.3" } }, - "node_modules/webpack-dev-server/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==" - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dependencies": { - "kind-of": "^3.0.2" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "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" + "xtend": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "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" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/webpack-dev-server/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==", + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "escape-goat": "^2.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "engines": { - "node": ">= 4" + "node": ">=0.6" } }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" } }, - "node_modules/webpack-dev-server/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==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dependencies": { - "has-flag": "^3.0.0" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "rc": "cli.js" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" + "node_modules/react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "peerDependencies": { + "react": ">=16.3.1" } }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "bin": { - "uuid": "bin/uuid" + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" } }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "node_modules/react-copy-to-clipboard": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", + "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" }, - "engines": { - "node": ">=10.0.0" + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "node_modules/react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "node_modules/webpack-sources/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==", - "engines": { - "node": ">=0.10.0" + "node_modules/react-dev-utils/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "node_modules/react-dev-utils/node_modules/browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=10" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "color-name": "1.1.3" + } + }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/react-dev-utils/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/react-dev-utils/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "ms": "2.0.0" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/react-dev-utils/node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "dependencies": { - "string-width": "^4.0.0" + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" }, "engines": { - "node": ">=8" + "node": ">= 4.2.1" } }, - "node_modules/wildcard": { + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dependencies": { - "microevent.ts": "~0.1.1" + "node": ">=8" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/react-dev-utils/node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { - "node": ">=8.3.0" + "node": ">= 8" } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "engines": { "node": ">=8" } }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "sax": "^1.2.4" + "fill-range": "^7.0.1" }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { - "node": ">=0.4" + "node": ">=8" } }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" } }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "node_modules/react-dev-utils/node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" } }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=6" + "node": ">=8.6" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/react-dev-utils/node_modules/globby/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/yargs/node_modules/find-up": { + "node_modules/react-dev-utils/node_modules/globby/node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" } }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/react-dev-utils/node_modules/immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=6" + "node": ">=8.9.0" } }, - "node_modules/yargs/node_modules/p-limit": { + "node_modules/react-dev-utils/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/react-dev-utils/node_modules/picomatch": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/react-dev-utils/node_modules/prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", "dependencies": { - "p-try": "^2.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/react-dev-utils/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "p-limit": "^2.0.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "node_modules/react-dev-utils/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { - "ansi-regex": "^4.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "react": "17.0.2" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - } + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz", - "integrity": "sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw==", - "requires": { - "@algolia/autocomplete-shared": "1.2.1" - } + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz", - "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", - "requires": { - "@algolia/autocomplete-shared": "1.2.1" + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" } }, - "@algolia/autocomplete-shared": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", - "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "@algolia/cache-browser-local-storage": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", - "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", - "requires": { - "@algolia/cache-common": "4.10.3" + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" } }, - "@algolia/cache-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", - "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "@algolia/cache-in-memory": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", - "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", - "requires": { - "@algolia/cache-common": "4.10.3" + "node_modules/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "dependencies": { + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "*" } }, - "@algolia/client-account": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", - "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/transporter": "4.10.3" + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "@algolia/client-analytics": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", - "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" + "node_modules/react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "@algolia/client-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", - "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", - "requires": { - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" } }, - "@algolia/client-personalization": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", - "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" + "node_modules/react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "@algolia/client-search": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", - "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" + "node_modules/react-router/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/react-router/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" } }, - "@algolia/logger-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", - "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" + "node_modules/react-side-effect": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", + "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0" + } }, - "@algolia/logger-console": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", - "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", - "requires": { - "@algolia/logger-common": "4.10.3" + "node_modules/react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" } }, - "@algolia/requester-browser-xhr": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", - "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", - "requires": { - "@algolia/requester-common": "4.10.3" + "node_modules/react-toastify": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", + "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" } }, - "@algolia/requester-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", - "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "@algolia/requester-node-http": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", - "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", - "requires": { - "@algolia/requester-common": "4.10.3" + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "@algolia/transporter": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", - "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", - "requires": { - "@algolia/cache-common": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/requester-common": "4.10.3" + "node_modules/reading-time": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", + "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, - "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "requires": { + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "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==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "dependencies": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "dependencies": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "dependencies": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "dependencies": { + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" + } + }, + "node_modules/remark-admonitions/node_modules/unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/generator/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-function-name/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-function-name/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dependencies": { "@babel/template": "^7.14.5", "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", "@babel/types": "^7.14.5", - "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-mdx/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-mdx/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/remark-mdx/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/remark-mdx/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/remark-mdx/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "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==", + "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": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "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": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "engines": { + "node": "*" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.3.0.tgz", + "integrity": "sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A==", + "dependencies": { + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "mkdirp": "^1.0.4", + "postcss": "^8.2.4", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "peerDependencies": { + "postcss": "^8.2.4" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "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==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "dependencies": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "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==", + "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/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-clone/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/sirv": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", + "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", + "dependencies": { + "@polka/url": "^1.0.0-next.15", + "mime": "^2.3.1", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sirv/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", + "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", + "dependencies": { + "@types/node": "^15.0.1", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "15.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", + "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "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==", + "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==", + "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "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==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/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==" + }, + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "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==", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", + "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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==", + "engines": { + "node": ">=0.10.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==" + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "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==", + "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/std-env": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", + "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", + "dependencies": { + "ci-info": "^1.6.0" + } + }, + "node_modules/stdin": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", + "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-replace-loader": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.3.tgz", + "integrity": "sha512-8c26Dl6H9XmKNj3mFBvaUYR7ImOxQ4YRBFuUju78wXpa1cDpyDYvKmqGg8mfkxdYexQ/BBogB7PELlLnmR08nw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "peerDependencies": { + "webpack": "^5" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dependencies": { + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylehacks/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/stylehacks/node_modules/electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", + "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", + "dependencies": { + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", + "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/synckit/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "node_modules/tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/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==" + }, + "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "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==", + "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": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-essentials": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", + "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" + }, + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "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==", + "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/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "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==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-parse-lax/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-composed-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", + "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", + "dependencies": { + "ts-essentials": "^2.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util.promisify/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/wait-on": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", + "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "dependencies": { + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-tree-sitter": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", + "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^6.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "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/webpack-dev-server/node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow/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==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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==" + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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/webpack-dev-server/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/webpack-dev-server/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==", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + } + }, + "node_modules/webpack-dev-server/node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/url-parse": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-merge/node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz", + "integrity": "sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw==", + "requires": { + "@algolia/autocomplete-shared": "1.2.1" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz", + "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", + "requires": { + "@algolia/autocomplete-shared": "1.2.1" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", + "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" + }, + "@algolia/client-personalization": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", + "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + }, + "dependencies": { + "@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } + "@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", "requires": { - "color-name": "1.1.3" + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, + } + } + }, + "@apidevtools/json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", + "dev": true, + "requires": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + }, + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", "requires": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.12.1", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" + "@babel/compat-data": "^7.12.1", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.12.0", + "semver": "^5.5.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { + "@babel/compat-data": { "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" }, - "@babel/helper-optimise-call-expression": { + "@babel/helper-compilation-targets": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" } }, - "@babel/helper-replace-supers": { + "@babel/helper-module-imports": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" } }, - "@babel/helper-split-export-declaration": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/template": { + "@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, "@babel/types": { "version": "7.14.5", @@ -18144,6 +23035,195 @@ "to-fast-properties": "^2.0.0" } }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "requires": { + "lodash": "^4.17.19" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -18182,218 +23262,62 @@ }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", - "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "has-flag": "^3.0.0" } } } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" }, - "@babel/helper-remap-async-to-generator": { + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" }, "dependencies": { - "@babel/helper-validator-identifier": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "@babel/types": { + "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { + }, "@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, "@babel/types": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", @@ -18405,33 +23329,33 @@ } } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", "requires": { - "@babel/types": "^7.12.13" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } }, - "@babel/helper-wrap-function": { + "@babel/plugin-proposal-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "dependencies": { "@babel/code-frame": { @@ -18452,6 +23376,27 @@ "source-map": "^0.5.0" } }, + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, "@babel/helper-function-name": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", @@ -18470,6 +23415,46 @@ "@babel/types": "^7.14.5" } }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, "@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", @@ -18584,353 +23569,327 @@ } } }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==" - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { + "@babel/plugin-proposal-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "dependencies": { - "@babel/helper-plugin-utils": { + "@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "dependencies": { + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", - "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, - "@babel/plugin-transform-parameters": { + "@babel/highlight": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } - } - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/template": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { @@ -18942,11 +23901,11 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-class-static-block": { @@ -18989,18 +23948,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -19067,60 +24020,467 @@ } }, "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } + }, + "@babel/plugin-transform-modules-systemjs": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "requires": { + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", + "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "requires": { + "@babel/types": "^7.14.8" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, - "@babel/plugin-syntax-typescript": { + "@babel/plugin-transform-modules-umd": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "requires": { + "@babel/helper-module-transforms": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5" }, "dependencies": { - "@babel/helper-plugin-utils": { + "@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "requires": { + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "dependencies": { + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-module-imports": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", @@ -19129,46 +24489,199 @@ "@babel/types": "^7.14.5" } }, + "@babel/helper-module-transforms": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", + "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "@babel/helper-validator-identifier": { + "@babel/helper-replace-supers": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } }, - "@babel/types": { + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "requires": { + "@babel/types": "^7.14.8" + } + }, + "@babel/helper-split-export-declaration": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" }, "dependencies": { - "@babel/helper-plugin-utils": { + "@babel/helper-annotate-as-pure": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + }, + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } } } }, - "@babel/plugin-transform-block-scoping": { + "@babel/plugin-transform-new-target": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -19180,18 +24693,13 @@ } } }, - "@babel/plugin-transform-classes": { + "@babel/plugin-transform-object-super": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" + "@babel/helper-replace-supers": "^7.14.5" }, "dependencies": { "@babel/code-frame": { @@ -19203,11 +24711,11 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -19230,6 +24738,14 @@ "@babel/types": "^7.14.5" } }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-member-expression-to-functions": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", @@ -19271,9 +24787,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -19286,9 +24802,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "@babel/template": { "version": "7.14.5", @@ -19301,27 +24817,27 @@ } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } }, @@ -19360,28 +24876,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.13.0" }, "dependencies": { "@babel/helper-plugin-utils": { @@ -19391,10 +24894,10 @@ } } }, - "@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -19406,12 +24909,11 @@ } } }, - "@babel/plugin-transform-dotall-regex": { + "@babel/plugin-transform-react-constant-elements": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", + "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5" }, "dependencies": { @@ -19422,10 +24924,10 @@ } } }, - "@babel/plugin-transform-duplicate-keys": { + "@babel/plugin-transform-react-display-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -19437,68 +24939,149 @@ } } }, - "@babel/plugin-transform-exponentiation-operator": { + "@babel/plugin-transform-react-jsx": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } } } }, - "@babel/plugin-transform-for-of": { + "@babel/plugin-transform-react-jsx-development": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5" }, "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + }, + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } } } }, - "@babel/plugin-transform-function-name": { + "@babel/plugin-transform-regenerator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "requires": { - "@babel/helper-function-name": "^7.14.5", "@babel/helper-plugin-utils": "^7.14.5" }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/helper-function-name": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-module-imports": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { "@babel/types": "^7.14.5" } @@ -19513,31 +25096,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, "@babel/types": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", @@ -19547,61 +25105,70 @@ "to-fast-properties": "^2.0.0" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "requires": { - "color-name": "1.1.3" + "@babel/types": "^7.14.5" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "has-flag": "^3.0.0" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" } } } }, - "@babel/plugin-transform-literals": { + "@babel/plugin-transform-sticky-regex": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -19613,10 +25180,10 @@ } } }, - "@babel/plugin-transform-member-expression-literals": { + "@babel/plugin-transform-template-literals": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -19628,14 +25195,29 @@ } } }, - "@babel/plugin-transform-modules-amd": { + "@babel/plugin-transform-typeof-symbol": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "requires": { - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.6", "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/plugin-syntax-typescript": "^7.14.5" }, "dependencies": { "@babel/code-frame": { @@ -19647,15 +25229,36 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, "@babel/helper-function-name": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", @@ -19674,34 +25277,19 @@ "@babel/types": "^7.14.5" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { + "@babel/helper-hoist-variables": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "requires": { "@babel/types": "^7.14.5" } }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" } }, @@ -19729,14 +25317,6 @@ "@babel/types": "^7.14.5" } }, - "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "requires": { - "@babel/types": "^7.14.5" - } - }, "@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", @@ -19746,9 +25326,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -19761,9 +25341,17 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + }, + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, "@babel/template": { "version": "7.14.5", @@ -19776,27 +25364,27 @@ } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } }, @@ -19808,14 +25396,6 @@ "color-convert": "^1.9.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -19843,144 +25423,249 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, - "@babel/plugin-transform-modules-commonjs": { + "@babel/plugin-transform-unicode-escapes": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.14.5" }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", "@babel/types": "^7.14.5" } }, - "@babel/helper-get-function-arity": { + "@babel/helper-create-regexp-features-plugin": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" } }, - "@babel/helper-module-imports": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" } - }, + } + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + }, + "dependencies": { "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "@babel/helper-replace-supers": { + "@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + } + } + }, + "@babel/preset-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", + "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "requires": { - "@babel/types": "^7.14.5" - } + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "@babel/helper-split-export-declaration": { + "@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + } + } + }, + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", + "requires": { + "core-js-pure": "^3.15.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/highlight": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -19993,44 +25678,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "ansi-styles": { "version": "3.2.1", @@ -20040,14 +25690,6 @@ "color-convert": "^1.9.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -20075,32 +25717,22 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { @@ -20108,98 +25740,68 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/highlight": "^7.14.5" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { + "@babel/helper-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, - "@babel/helper-simple-access": { + "@babel/helper-get-function-arity": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "requires": { "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-split-export-declaration": { @@ -20208,12 +25810,23 @@ "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "requires": { "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -20226,9 +25839,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "@babel/template": { "version": "7.14.5", @@ -20238,31 +25851,17 @@ "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.14.5", "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, "ansi-styles": { @@ -20273,14 +25872,6 @@ "color-convert": "^1.9.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -20308,29 +25899,124 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "@babel/types": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + } + } + }, + "@docsearch/css": { + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", + "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" + }, + "@docsearch/react": { + "version": "3.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", + "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", + "requires": { + "@algolia/autocomplete-core": "1.2.1", + "@algolia/autocomplete-preset-algolia": "1.2.1", + "@docsearch/css": "3.0.0-alpha.37", + "algoliasearch": "^4.0.0" + } + }, + "@docusaurus/core": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", + "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", + "requires": { + "@babel/core": "^7.12.16", + "@babel/generator": "^7.12.15", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.16", + "@babel/runtime": "^7.12.5", + "@babel/runtime-corejs3": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@docusaurus/cssnano-preset": "2.0.0-beta.3", + "@docusaurus/react-loadable": "5.5.0", + "@docusaurus/types": "2.0.0-beta.3", + "@docusaurus/utils": "2.0.0-beta.3", + "@docusaurus/utils-common": "2.0.0-beta.3", + "@docusaurus/utils-validation": "2.0.0-beta.3", + "@slorber/static-site-generator-webpack-plugin": "^4.0.0", + "@svgr/webpack": "^5.5.0", + "autoprefixer": "^10.2.5", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^5.0.1", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "clean-css": "^5.1.2", + "commander": "^5.1.0", + "copy-webpack-plugin": "^9.0.0", + "core-js": "^3.9.1", + "css-loader": "^5.1.1", + "css-minimizer-webpack-plugin": "^3.0.1", + "cssnano": "^5.0.4", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^1.12.1", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "github-slugger": "^1.3.0", + "globby": "^11.0.2", + "html-minifier-terser": "^5.1.1", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.3.2", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.20", + "mini-css-extract-plugin": "^1.6.0", + "module-alias": "^2.2.2", + "nprogress": "^0.2.0", + "postcss": "^8.2.15", + "postcss-loader": "^5.3.0", + "prompts": "^2.4.1", + "react-dev-utils": "^11.0.1", + "react-error-overlay": "^6.0.9", + "react-helmet": "^6.1.0", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "resolve-pathname": "^3.0.0", + "rtl-detect": "^1.0.3", + "semver": "^7.3.4", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "strip-ansi": "^6.0.0", + "terser-webpack-plugin": "^5.1.3", + "tslib": "^2.2.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^5.3.0", + "webpack": "^5.40.0", + "webpack-bundle-analyzer": "^4.4.2", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.0-3" }, "dependencies": { "@babel/code-frame": { @@ -20341,6 +26027,56 @@ "@babel/highlight": "^7.14.5" } }, + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" + }, + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "@babel/generator": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", @@ -20351,6 +26087,71 @@ "source-map": "^0.5.0" } }, + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-function-name": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", @@ -20369,6 +26170,14 @@ "@babel/types": "^7.14.5" } }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-member-expression-to-functions": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", @@ -20398,6 +26207,24 @@ "@babel/template": "^7.14.5", "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + } } }, "@babel/helper-optimise-call-expression": { @@ -20413,6 +26240,16 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, + "@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, "@babel/helper-replace-supers": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", @@ -20422,6 +26259,24 @@ "@babel/helper-optimise-call-expression": "^7.14.5", "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + } } }, "@babel/helper-simple-access": { @@ -20432,6 +26287,14 @@ "@babel/types": "^7.14.5" } }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", @@ -20445,722 +26308,396 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, - "@babel/highlight": { + "@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, - "@babel/template": { + "@babel/helper-wrap-function": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + } } }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + } } }, - "@babel/types": { + "@babel/highlight": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "@babel/helper-function-name": { + "@babel/plugin-proposal-class-properties": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/helper-get-function-arity": { + "@babel/plugin-proposal-dynamic-import": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "@babel/helper-optimise-call-expression": { + "@babel/plugin-proposal-export-namespace-from": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { + "@babel/plugin-proposal-json-strings": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "@babel/helper-split-export-declaration": { + "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "@babel/helper-validator-identifier": { + "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } }, - "@babel/highlight": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "@babel/parser": { + "@babel/plugin-proposal-object-rest-spread": { "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + } }, - "@babel/template": { + "@babel/plugin-proposal-optional-catch-binding": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "@babel/types": { + "@babel/plugin-proposal-private-methods": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "requires": { - "color-convert": "^1.9.0" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { - "color-name": "1.1.3" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "requires": { - "has-flag": "^3.0.0" + "@babel/helper-plugin-utils": "^7.14.5" } - } - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", - "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", - "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", - "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/helper-module-imports": { + }, + "@babel/plugin-transform-async-to-generator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" } }, - "@babel/helper-plugin-utils": { + "@babel/plugin-transform-block-scoped-functions": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, - "@babel/helper-validator-identifier": { + "@babel/plugin-transform-block-scoping": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, - "@babel/types": { + "@babel/plugin-transform-classes": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" } - } - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/helper-module-imports": { + }, + "@babel/plugin-transform-computed-properties": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, - "@babel/helper-validator-identifier": { + "@babel/plugin-transform-dotall-regex": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } }, - "@babel/types": { + "@babel/plugin-transform-duplicate-keys": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "@babel/plugin-transform-exponentiation-operator": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", - "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.6", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", - "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } }, - "@babel/helper-validator-identifier": { + "@babel/plugin-transform-modules-commonjs": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + } + } }, "@babel/plugin-transform-parameters": { "version": "7.14.5", @@ -21170,6 +26707,103 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/preset-env": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, "@babel/types": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", @@ -21179,214 +26813,422 @@ "to-fast-properties": "^2.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/preset-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", - "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "boxen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "requires": { + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "requires": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob-parent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", + "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "html-webpack-plugin": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", + "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "html-minifier-terser": "^5.0.1", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", + "tapable": "^2.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "postcss-loader": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + } } } }, - "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", - "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", - "requires": { - "core-js-pure": "^3.15.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@docsearch/css": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", - "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" - }, - "@docsearch/react": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", - "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", - "requires": { - "@algolia/autocomplete-core": "1.2.1", - "@algolia/autocomplete-preset-algolia": "1.2.1", - "@docsearch/css": "3.0.0-alpha.37", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", - "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.3", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@slorber/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.1", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "clean-css": "^5.1.2", - "commander": "^5.1.0", - "copy-webpack-plugin": "^9.0.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^3.0.1", - "cssnano": "^5.0.4", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.3.2", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.6.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.15", - "postcss-loader": "^5.3.0", - "prompts": "^2.4.1", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.3", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.3", - "tslib": "^2.2.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.3.0", - "webpack": "^5.40.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.0-3" - } - }, "@docusaurus/cssnano-preset": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", @@ -21419,8 +27261,95 @@ "unist-util-visit": "^2.0.2", "url-loader": "^4.1.1", "webpack": "^5.40.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "requires": {} + }, + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + } + }, + "webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + } + } } }, + "@docusaurus/module-type-aliases": { + "version": "2.0.0-alpha.72", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-alpha.72.tgz", + "integrity": "sha512-z8qGXvvyF8FYgnc0c7v5BqulrUJ0A01jsb2gT4miC6Gc/pKnpahZqBXcm1MrQiiUrlHMEjdOAxlHQVZuOwSSRQ==", + "dev": true + }, "@docusaurus/plugin-content-blog": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", @@ -21442,6 +27371,76 @@ "remark-admonitions": "^1.2.1", "tslib": "^2.2.0", "webpack": "^5.40.0" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + } + }, + "webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + } + } } }, "@docusaurus/plugin-content-docs": { @@ -21471,11 +27470,26 @@ "webpack": "^5.40.0" }, "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -21492,11 +27506,30 @@ "strip-final-newline": "^2.0.0" } }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -21535,6 +27568,59 @@ "requires": { "path-key": "^3.0.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + } + }, + "webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + } } } }, @@ -21555,6 +27641,66 @@ "slash": "^3.0.0", "tslib": "^2.1.0", "webpack": "^5.40.0" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + } + }, + "webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + } + } } }, "@docusaurus/plugin-debug": { @@ -21598,6 +27744,18 @@ "fs-extra": "^10.0.0", "sitemap": "^7.0.0", "tslib": "^2.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "@docusaurus/preset-classic": { @@ -21655,6 +27813,35 @@ "prop-types": "^15.7.2", "react-router-dom": "^5.2.0", "rtlcss": "^3.1.2" + }, + "dependencies": { + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "requires": {} + }, + "copy-text-to-clipboard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", + "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "prism-react-renderer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", + "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", + "requires": {} + } } }, "@docusaurus/theme-common": { @@ -21697,6 +27884,66 @@ "querystring": "0.2.0", "webpack": "^5.40.0", "webpack-merge": "^5.8.0" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + } + }, + "webpack": { + "version": "5.45.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", + "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + } + } } }, "@docusaurus/utils": { @@ -21713,6 +27960,18 @@ "lodash": "^4.17.20", "resolve-pathname": "^3.0.0", "tslib": "^2.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "@docusaurus/utils-common": { @@ -21793,9 +28052,9 @@ } }, "@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", + "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" }, "@hapi/topo": { "version": "5.1.0", @@ -21822,6 +28081,12 @@ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, + "@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, "@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -21871,6 +28136,198 @@ "source-map": "^0.5.0" } }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, "@babel/plugin-syntax-jsx": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", @@ -21879,23 +28336,67 @@ "@babel/helper-plugin-utils": "^7.10.4" } }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -22038,6 +28539,31 @@ "@svgr/plugin-jsx": "^5.5.0", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.0" + }, + "dependencies": { + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + } } }, "@svgr/hast-util-to-babel-ast": { @@ -22048,17 +28574,6 @@ "@babel/types": "^7.12.6" } }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, "@svgr/plugin-svgo": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", @@ -22100,6 +28615,18 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, "css-select": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", @@ -22226,6 +28753,19 @@ "@svgr/plugin-jsx": "^5.5.0", "@svgr/plugin-svgo": "^5.5.0", "loader-utils": "^2.0.0" + }, + "dependencies": { + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + } } }, "@szmarczak/http-timer": { @@ -22241,6 +28781,12 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" }, + "@tsconfig/docusaurus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.2.tgz", + "integrity": "sha512-x4rRVb346vjyym6QbeB1Tv01XXwhbkujOmvDmtf0bT20oc2gbDhbmwpskKqZ5Of2Q/Vk4jNk1WMiLsZdJ9t7Dw==", + "dev": true + }, "@types/eslint": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", @@ -22286,6 +28832,12 @@ "@types/unist": "*" } }, + "@types/history": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", + "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==", + "dev": true + }, "@types/html-minifier-terser": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", @@ -22296,6 +28848,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" }, + "@types/lodash": { + "version": "4.14.168", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", + "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "dev": true + }, "@types/mdast": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", @@ -22324,10 +28882,61 @@ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, + "@types/prettier": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "@types/react": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", + "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-PYRoU1XJFOzQ3BHvWL1T8iDNbRjdMDJMT5hFmZKGbsq09kbSqJy61uwEpTrbTNWDopVphUT34zUSVLK9pjsgYQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-router": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz", + "integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", + "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } }, "@types/sax": { "version": "1.2.3", @@ -22337,6 +28946,11 @@ "@types/node": "*" } }, + "@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + }, "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", @@ -22538,12 +29152,14 @@ "ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "algoliasearch": { "version": "4.10.3", @@ -22564,6 +29180,113 @@ "@algolia/requester-common": "4.10.3", "@algolia/requester-node-http": "4.10.3", "@algolia/transporter": "4.10.3" + }, + "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", + "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", + "requires": { + "@algolia/cache-common": "4.10.3" + } + }, + "@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + }, + "@algolia/cache-in-memory": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", + "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", + "requires": { + "@algolia/cache-common": "4.10.3" + } + }, + "@algolia/client-account": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", + "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-analytics": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", + "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", + "requires": { + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-search": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", + "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" + }, + "@algolia/logger-console": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", + "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", + "requires": { + "@algolia/logger-common": "4.10.3" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", + "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", + "requires": { + "@algolia/requester-common": "4.10.3" + } + }, + "@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + }, + "@algolia/requester-node-http": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", + "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", + "requires": { + "@algolia/requester-common": "4.10.3" + } + }, + "@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", + "requires": { + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" + } + } } }, "algoliasearch-helper": { @@ -22663,6 +29386,12 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -22716,6 +29445,40 @@ "es-abstract": "^1.18.0-next.2", "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + } + } + } } }, "array-union": { @@ -22784,19 +29547,6 @@ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, - "autoprefixer": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", - "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001243", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - } - }, "axios": { "version": "0.21.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", @@ -22805,47 +29555,6 @@ "follow-redirects": "^1.10.0" } }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, "babel-plugin-apply-mdx-type-prop": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", @@ -22859,6 +29568,11 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" } } }, @@ -22895,6 +29609,11 @@ "semver": "^6.1.1" }, "dependencies": { + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -22999,6 +29718,15 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -23061,21 +29789,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -23094,15 +29807,14 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } }, "buffer-from": { @@ -23179,6 +29891,12 @@ "get-intrinsic": "^1.0.2" } }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -23231,6 +29949,42 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "character-entities": { @@ -23347,14 +30101,24 @@ } }, "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } }, "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" }, "class-utils": { "version": "0.3.6", @@ -23407,6 +30171,28 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, + "cli-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", + "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", + "dev": true, + "requires": { + "ansi-regex": "^2.1.1", + "d": "^1.0.1", + "es5-ext": "^0.10.51", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.14", + "timers-ext": "^0.1.7" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -23478,16 +30264,6 @@ } } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -23682,6 +30458,21 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "connect-history-api-fallback": { @@ -23730,11 +30521,6 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, - "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" - }, "copy-to-clipboard": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", @@ -23743,30 +30529,6 @@ "toggle-selection": "^1.0.6" } }, - "copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "requires": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, "core-js": { "version": "3.15.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", @@ -23781,6 +30543,23 @@ "semver": "7.0.0" }, "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + }, "semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", @@ -23798,18 +30577,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, "cross-fetch": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", @@ -23822,6 +30589,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -23838,31 +30606,6 @@ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" }, - "css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", - "requires": { - "timsort": "^0.3.0" - } - }, - "css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "requires": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - } - }, "css-minimizer-webpack-plugin": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", @@ -23877,6 +30620,28 @@ "source-map": "^0.6.1" }, "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "requires": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -23927,16 +30692,6 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", - "requires": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - } - }, "cssnano-preset-advanced": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", @@ -23948,6 +30703,38 @@ "postcss-merge-idents": "^5.0.1", "postcss-reduce-idents": "^5.0.1", "postcss-zindex": "^5.0.1" + }, + "dependencies": { + "autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + } } }, "cssnano-preset-default": { @@ -23984,12 +30771,131 @@ "postcss-reduce-transforms": "^5.0.1", "postcss-svgo": "^5.0.2", "postcss-unique-selectors": "^5.0.1" + }, + "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "requires": { + "timsort": "^0.3.0" + } + }, + "electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + }, + "postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "requires": {} + }, + "postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "requires": { + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + } + }, + "postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + } + }, + "postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "requires": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-ordered-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + } } }, "cssnano-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==" + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "requires": {} }, "csso": { "version": "4.2.0", @@ -23997,6 +30903,37 @@ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "requires": { "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "csstype": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, "debug": { @@ -24113,21 +31050,6 @@ } } }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -24222,16 +31144,6 @@ "utila": "~0.4" } }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", @@ -24253,6 +31165,18 @@ "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + } } }, "dot-case": { @@ -24288,9 +31212,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + "version": "1.3.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", + "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" }, "emoji-regex": { "version": "7.0.3", @@ -24327,6 +31251,13 @@ "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + } } }, "enquirer": { @@ -24360,26 +31291,23 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, "requires": { - "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-module-lexer": { @@ -24397,6 +31325,50 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "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, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -24474,33 +31446,14 @@ "@babel/highlight": "^7.10.4" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "requires": { "type-fest": "^0.20.2" } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } } } }, @@ -24508,7 +31461,8 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true + "dev": true, + "requires": {} }, "eslint-mdx": { "version": "1.13.0", @@ -24565,6 +31519,294 @@ "vfile": "^4.2.1" }, "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, "unified": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", @@ -24738,6 +31980,16 @@ "require-like": ">= 0.1.1" } }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -24749,9 +32001,9 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "requires": { "original": "^1.0.0" } @@ -24904,6 +32156,23 @@ } } }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -25086,8 +32355,26 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, + "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==", + "optional": true + }, "filesize": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", @@ -25160,9 +32447,9 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "flux": { @@ -25401,16 +32688,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -25507,6 +32784,15 @@ "is-glob": "^4.0.1" } }, + "glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "requires": { + "@types/glob": "*" + } + }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -25923,18 +33209,6 @@ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" }, - "html-webpack-plugin": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", - "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.21", - "pretty-error": "^3.0.4", - "tapable": "^2.0.0" - } - }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -26187,26 +33461,16 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" - }, "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -26646,6 +33910,12 @@ "isobject": "^3.0.1" } }, + "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 + }, "is-regex": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", @@ -26676,9 +33946,9 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" }, "is-symbol": { "version": "1.0.4", @@ -26802,6 +34072,52 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-uxU9Ix+MVszvCTvBucQiIcNEny3oAEFg7EQHSZw2bquCCuqUqEPEczIdv/Uqo1Zv4/wDPZqOI+ulrMk1ncMtjQ==", + "dev": true, + "requires": { + "@apidevtools/json-schema-ref-parser": "9.0.7" + } + }, + "json-schema-to-typescript": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.3.tgz", + "integrity": "sha512-yiyDK1sSSWhLN2JAuAyAE7jscFJj2hR7AhdF19BmdLh/N/QPdnIqrGa23CSc7z92OSSzKVPclAKof+rV8S8weA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "@types/lodash": "^4.14.168", + "@types/prettier": "^2.1.5", + "cli-color": "^2.0.0", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "is-glob": "^4.0.1", + "json-schema-ref-parser": "^9.0.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.20", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.2.0", + "stdin": "0.0.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + } + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -26813,6 +34129,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -27071,6 +34393,15 @@ "yallist": "^4.0.0" } }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dev": true, + "requires": { + "es5-ext": "~0.10.2" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -27186,6 +34517,30 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "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" + }, + "dependencies": { + "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 + } + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -27261,6 +34616,13 @@ "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + } } }, "mime": { @@ -27310,6 +34672,16 @@ "webpack-sources": "^1.1.0" }, "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -27395,6 +34767,23 @@ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true + }, "nanoid": { "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", @@ -27453,6 +34842,12 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -27543,6 +34938,17 @@ "schema-utils": "^3.0.0" }, "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "schema-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", @@ -27641,6 +35047,38 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + } } }, "object.fromentries": { @@ -27653,6 +35091,38 @@ "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + } } }, "object.getownpropertydescriptors": { @@ -27663,6 +35133,36 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + } } }, "object.pick": { @@ -27681,6 +35181,36 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + } } }, "obuf": { @@ -27939,9 +35469,9 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "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==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "0.1.7", @@ -27954,14 +35484,99 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "pinkie": { "version": "2.0.4", @@ -28085,6 +35700,25 @@ "caniuse-api": "^3.0.0", "colord": "^2.0.1", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + } } }, "postcss-convert-values": { @@ -28095,26 +35729,6 @@ "postcss-value-parser": "^4.1.0" } }, - "postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==" - }, - "postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==" - }, - "postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==" - }, - "postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==" - }, "postcss-discard-unused": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", @@ -28123,16 +35737,6 @@ "postcss-selector-parser": "^6.0.5" } }, - "postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - } - }, "postcss-merge-idents": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", @@ -28142,34 +35746,19 @@ "postcss-value-parser": "^4.1.0" } }, - "postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", - "requires": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - } - }, - "postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" - } - }, "postcss-minify-font-values": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "requires": { "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-minify-gradients": { @@ -28180,18 +35769,13 @@ "cssnano-utils": "^2.0.1", "is-color-stop": "^1.1.0", "postcss-value-parser": "^4.1.0" - } - }, - "postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", - "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-minify-selectors": { @@ -28201,13 +35785,19 @@ "requires": { "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" - }, "postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", @@ -28216,14 +35806,14 @@ "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" + }, + "dependencies": { + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + } } }, "postcss-modules-values": { @@ -28232,20 +35822,14 @@ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "requires": { "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==" - }, - "postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + } } }, "postcss-normalize-positions": { @@ -28254,6 +35838,13 @@ "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "requires": { "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-normalize-repeat-style": { @@ -28263,6 +35854,13 @@ "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-normalize-string": { @@ -28271,6 +35869,13 @@ "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "requires": { "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-normalize-timing-functions": { @@ -28280,6 +35885,13 @@ "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-normalize-unicode": { @@ -28289,6 +35901,30 @@ "requires": { "browserslist": "^4.16.0", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-normalize-url": { @@ -28299,6 +35935,13 @@ "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-normalize-whitespace": { @@ -28307,15 +35950,13 @@ "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "requires": { "postcss-value-parser": "^4.1.0" - } - }, - "postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-reduce-idents": { @@ -28333,15 +35974,25 @@ "requires": { "browserslist": "^4.16.0", "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + } } }, "postcss-selector-parser": { @@ -28368,6 +36019,13 @@ "requires": { "postcss-value-parser": "^4.1.0", "svgo": "^2.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "postcss-unique-selectors": { @@ -28388,7 +36046,19 @@ "postcss-zindex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", - "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==" + "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", + "requires": {} + }, + "prebuild-webpack-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "glob": "^7.1.5", + "minimatch": "^3.0.4" + } }, "prelude-ls": { "version": "1.2.1", @@ -28396,11 +36066,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, "prettier": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", @@ -28414,6 +36079,44 @@ "requires": { "lodash": "^4.17.20", "renderkid": "^2.0.6" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "pretty-time": { @@ -28421,11 +36124,6 @@ "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" }, - "prism-react-renderer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", - "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==" - }, "prismjs": { "version": "1.24.1", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", @@ -28597,7 +36295,8 @@ "react-async": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==" + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "requires": {} }, "react-base16-styling": { "version": "0.6.0", @@ -28707,6 +36406,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -28740,6 +36449,70 @@ "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } } }, "has-flag": { @@ -28747,16 +36520,31 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -28766,6 +36554,21 @@ "sisteransi": "^1.0.5" } }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -28901,7 +36704,8 @@ "react-side-effect": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" + "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", + "requires": {} }, "react-textarea-autosize": { "version": "8.3.3", @@ -29024,9 +36828,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { @@ -29200,11 +37004,203 @@ "source-map": "^0.5.0" } }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", @@ -29223,10 +37219,64 @@ "@babel/helper-plugin-utils": "^7.10.4" } }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -29288,44 +37338,6 @@ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -29794,6 +37806,13 @@ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { "kind-of": "^6.0.2" + }, + "dependencies": { + "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==" + } } }, "shebang-command": { @@ -30011,36 +38030,6 @@ "faye-websocket": "^0.11.3", "uuid": "^3.4.0", "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } } }, "sort-css-media-queries": { @@ -30193,13 +38182,19 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", + "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", "requires": { - "ci-info": "^3.0.0" + "ci-info": "^1.6.0" } }, + "stdin": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", + "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", + "dev": true + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -30223,19 +38218,6 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, "string-width": { @@ -30269,6 +38251,38 @@ "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + } } }, "string.prototype.trimend": { @@ -30360,14 +38374,49 @@ "requires": { "browserslist": "^4.16.0", "postcss-selector-parser": "^6.0.4" + }, + "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "electron-to-chromium": { + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + } } }, "svg-parser": { @@ -30389,10 +38438,27 @@ "stable": "^0.1.8" }, "dependencies": { + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -30404,6 +38470,14 @@ "requires": { "tslib": "^2.2.0", "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } } }, "table": { @@ -30421,9 +38495,9 @@ }, "dependencies": { "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -30440,11 +38514,6 @@ } } }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, "terser": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", @@ -30467,36 +38536,44 @@ } } }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", @@ -30623,6 +38700,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -30654,6 +38737,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true + }, "ua-parser-js": { "version": "0.7.28", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", @@ -30714,6 +38803,18 @@ "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + } } }, "union-value": { @@ -30859,31 +38960,10 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "requires": { "punycode": "^2.1.0" }, @@ -30917,12 +38997,24 @@ "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -30934,6 +39026,13 @@ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + } } }, "use": { @@ -30952,7 +39051,8 @@ "use-isomorphic-layout-effect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "requires": {} }, "use-latest": { "version": "1.2.0", @@ -30976,6 +39076,26 @@ "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "utila": { @@ -30994,10 +39114,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { "version": "2.3.0", @@ -31084,43 +39203,6 @@ "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - } - } - }, "webpack-bundle-analyzer": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", @@ -31142,6 +39224,15 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -31154,13 +39245,27 @@ "requires": { "duplexer": "^0.1.2" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "requires": {} } } }, "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "requires": { "memory-fs": "^0.4.1", "mime": "^2.4.4", @@ -31357,7 +39462,11 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } }, "glob-parent": { "version": "3.1.0", @@ -31505,6 +39614,29 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, + "sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -31538,12 +39670,13 @@ "repeat-string": "^1.6.1" } }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "url-parse": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "requires": { - "async-limiter": "~1.0.0" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } } } @@ -31561,11 +39694,6 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, @@ -31576,6 +39704,18 @@ "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" + }, + "dependencies": { + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + } } }, "webpack-sources": { @@ -31594,21 +39734,6 @@ } } }, - "webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" - } - }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -31684,6 +39809,25 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + } + } + } } }, "wrappy": { @@ -31703,9 +39847,12 @@ } }, "ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } }, "xdg-basedir": { "version": "4.0.0", diff --git a/docs/package.json b/docs/package.json index ca8955c833c..14fab7b7da3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -44,8 +44,16 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", + "json-schema-to-typescript": "^10.1.3", "null-loader": "^4.0.0", + "prebuild-webpack-plugin": "^1.1.1", "prettier": "2.3.1", - "string-replace-loader": "^3.0.3" + "string-replace-loader": "^3.0.3", + "typescript": "^4.2.3", + "@docusaurus/module-type-aliases": "^2.0.0-alpha.72", + "@tsconfig/docusaurus": "^1.0.2", + "@types/react": "^17.0.3", + "@types/react-helmet": "^6.1.0", + "@types/react-router-dom": "^5.1.7" } } diff --git a/docs/src/.gitignore b/docs/src/.gitignore new file mode 100644 index 00000000000..3a722c803fe --- /dev/null +++ b/docs/src/.gitignore @@ -0,0 +1 @@ +hardware-metadata.d.ts diff --git a/docs/src/data/.gitignore b/docs/src/data/.gitignore new file mode 100644 index 00000000000..201a309813b --- /dev/null +++ b/docs/src/data/.gitignore @@ -0,0 +1 @@ +hardware-metadata.json diff --git a/docs/src/docusaurus-tree-sitter-plugin/index.js b/docs/src/docusaurus-tree-sitter-plugin/index.js index c8a9500ee7d..e782aea8d4e 100644 --- a/docs/src/docusaurus-tree-sitter-plugin/index.js +++ b/docs/src/docusaurus-tree-sitter-plugin/index.js @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + module.exports = function () { return { configureWebpack(config, isServer) { diff --git a/docs/src/hardware-metadata-collection-plugin/index.js b/docs/src/hardware-metadata-collection-plugin/index.js new file mode 100644 index 00000000000..cbea805fa7b --- /dev/null +++ b/docs/src/hardware-metadata-collection-plugin/index.js @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +var PrebuildPlugin = require("prebuild-webpack-plugin"); +const fs = require("fs"); +const yaml = require("js-yaml"); +const glob = require("glob"); +const { compile, compileFromFile } = require('json-schema-to-typescript'); + +function generateHardwareMetadataAggregate() { + glob("../app/boards/**/*.zmk.yml", (error, files) => { + const aggregated = files.flatMap(f => yaml.safeLoadAll(fs.readFileSync(f, "utf8"))); + fs.writeFileSync("src/data/hardware-metadata.json", JSON.stringify(aggregated)); + }); +} + +module.exports = function () { + return { + name: "hardware-metadata-collection-plugin", + configureWebpack() { + return { + plugins: [ + new PrebuildPlugin({ + build: generateHardwareMetadataAggregate, + }), + ], + }; + }, + }; +}; \ No newline at end of file diff --git a/docs/src/hardware-schema-typescript-plugin/index.js b/docs/src/hardware-schema-typescript-plugin/index.js new file mode 100644 index 00000000000..2ccbf19c39a --- /dev/null +++ b/docs/src/hardware-schema-typescript-plugin/index.js @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +var PrebuildPlugin = require("prebuild-webpack-plugin"); +const fs = require("fs"); +const { compileFromFile } = require('json-schema-to-typescript'); + +async function generateHardwareMetadataTypescript() { + const ts = await compileFromFile("../schema/hardware-metadata.schema.json"); + fs.writeFileSync("src/hardware-metadata.d.ts", ts); +} + +module.exports = function () { + return { + name: "hardware-metadata-typescript-plugin", + configureWebpack() { + return { + plugins: [ + new PrebuildPlugin({ + build: generateHardwareMetadataTypescript, + }), + ], + }; + }, + }; +}; \ No newline at end of file diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 00000000000..77c5f752db3 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@tsconfig/docusaurus/tsconfig.json", + "include": ["src/"] +} \ No newline at end of file From 47abbe7925dece8a50b1001b0b9f32c64268f61b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Mar 2021 01:20:57 +0000 Subject: [PATCH 0120/1130] feat(docs): Add dynamic hardware list component. --- docs/docs/hardware.md | 56 ------ docs/docs/hardware.mdx | 26 +++ docs/docusaurus.config.js | 2 +- docs/src/components/hardware-list.tsx | 176 ++++++++++++++++++ .../index.js | 12 +- .../index.js | 4 +- docs/tsconfig.json | 2 +- 7 files changed, 214 insertions(+), 64 deletions(-) delete mode 100644 docs/docs/hardware.md create mode 100644 docs/docs/hardware.mdx create mode 100644 docs/src/components/hardware-list.tsx diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md deleted file mode 100644 index 4aacf95d53b..00000000000 --- a/docs/docs/hardware.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Supported Hardware -sidebar_label: Supported Hardware ---- - -:::warning - -ZMK Firmware is still an early stage project. Many features are still waiting to be implemented, and only a select few keyboards -have had their hardware details codified in boards/shields for ZMK. - -::: - -With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. -That being said, there are currently only a few specific [boards](faq.md#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been written and tested by the ZMK contributors. - -## Boards - -- [nice!nano](https://nicekeyboards.com/nice-nano) (`nice_nano`, `nice_nano_v2`) -- [nrfMicro](https://github.com/joric/nrfmicro) (`nrfmicro_13`, `nrfmicro_11`, `nrfmicro_11_flipped`) -- [BlueMicro840](https://store.jpconstantineau.com/#/group/bluemicro) (`bluemicro840_v1`) -- [QMK Proton-C](https://qmk.fm/proton-c/) (`proton_c`) -- [BDN9 Rev2](https://keeb.io/products/bdn9-rev-2-3x3-9-key-macropad-rotary-encoder-and-rgb) (`bdn9_rev2`) - -## Keyboard Shields - -- [Kyria](https://splitkb.com/products/kyria-pcb-kit) (`kyria_left` and `kyria_right`) -- [Corne](https://github.com/foostan/crkbd) (`corne_left` and `corne_right`) -- [Helix](https://github.com/mcmadhatter/helix) (`helix_left` and `helix_right`) -- [Lily58](https://github.com/kata0510/Lily58) (`lily58_left` and `lily58_right`) -- [Sofle](https://github.com/josefadamcik/SofleKeyboard) (`sofle_left` and `sofle_right`) -- [Splitreus62](https://github.com/Na-Cly/splitreus62) (`splitreus62_left` and `splitreus62_right`) -- [Jorne](https://github.com/joric/jorne) (`jorne_left` and `jorne_right`) -- [Jian](https://github.com/KGOH/Jian-Info) (`jian_left` and `jian_right`) -- [Reviung41](https://github.com/gtips/reviung/tree/master/reviung41) (`reviung41`) -- [RoMac+ v4](https://www.littlekeyboards.com/products/romac) (`romac_plus`) -- [RoMac v2](https://mechboards.co.uk/shop/kits/romac-macro-pad/) (`romac`) -- [Boardsource 3x4 Macro](https://boardsource.xyz/store/5ecc2008eee64242946c98c1) (`boardsource3x4`) -- [QAZ](https://www.cbkbd.com/product/qaz-keyboard-kit) (`qaz`) -- [CRBN](https://keygem.store/collections/group-buys/products/group-buy-featherlight-40-kit) (`crbn`) -- [tidbit](https://nullbits.co/tidbit/) (`tidbit`) -- [Eek!](https://www.cbkbd.com/product/eek-keyboard) (`eek`) -- [BFO-9000](https://keeb.io/products/bfo-9000-keyboard-customizable-full-size-split-ortholinear) (`bfo9000_left` and `bfo9000_right`) - -## Other Hardware - -In addition to the basic keyboard functionality, there is some initial support for additional keyboard hardware: - -- Encoders -- OLEDs -- RGB Underglow - -Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite). - -## Contributing - -If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation. diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx new file mode 100644 index 00000000000..ccdd063e1bf --- /dev/null +++ b/docs/docs/hardware.mdx @@ -0,0 +1,26 @@ +--- +title: Supported Hardware +sidebar_label: Supported Hardware +--- + +import HardwareList from "@site/src/components/hardware-list"; +import Metadata from "@site/src/data/hardware-metadata.json"; + +With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. +That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been implemented and tested by the ZMK contributors. + + + +## Other Hardware + +In addition to the basic keyboard functionality, there is some initial support for additional keyboard hardware: + +- Encoders +- Displays +- RGB Underglow + +Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite). + +## Contributing + +If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 6eba9fc97ec..fc5677c2d4d 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -11,7 +11,7 @@ module.exports = { plugins: [ path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin"), path.resolve(__dirname, "src/hardware-metadata-collection-plugin"), - path.resolve(__dirname, "src/hardware-schema-typescript-plugin") + path.resolve(__dirname, "src/hardware-schema-typescript-plugin"), ], themeConfig: { colorMode: { diff --git a/docs/src/components/hardware-list.tsx b/docs/src/components/hardware-list.tsx new file mode 100644 index 00000000000..ec7e8a108f9 --- /dev/null +++ b/docs/src/components/hardware-list.tsx @@ -0,0 +1,176 @@ +import React from "react"; + +import { + Board, + HardwareMetadata, + Interconnect, + Shield, +} from "../hardware-metadata"; + +interface HardwareListProps { + items: HardwareMetadata[]; +} + +type ElementOrString = JSX.Element | string; + +function itemHasMultiple(item: HardwareMetadata) { + return ( + (item.type == "board" || item.type == "shield") && + (item.siblings?.length ?? 1) > 1 + ); +} + +function itemIds(item: HardwareMetadata) { + if (item.type == "board" || item.type == "shield") { + let nodes = (item.siblings ?? [item.id]) + .map((id) => {id}) + .reduce( + (prev, curr, index) => [...prev, index > 0 ? ", " : "", curr], + [] as ElementOrString[] + ); + return {nodes}; + } else { + return {item.id}; + } +} + +const TYPE_LABELS: Record< + HardwareMetadata["type"], + Record<"singular" | "plural", string> +> = { + board: { plural: "Boards: ", singular: "Board: " }, + shield: { singular: "Shield: ", plural: "Shields: " }, + interconnect: { singular: "Interconnect: ", plural: "Interconnects: " }, +}; + +function HardwareLineItem({ item }: { item: HardwareMetadata }) { + return ( +
  • + {item.name} ( + {TYPE_LABELS[item.type][itemHasMultiple(item) ? "plural" : "singular"]}{" "} + {itemIds(item)}) +
  • + ); +} + +interface InterconnectDetails { + interconnect?: Interconnect; + boards: Board[]; + shields: Shield[]; +} + +function mapInterconnect({ + interconnect, + boards, + shields, +}: InterconnectDetails) { + if (!interconnect) { + return null; + } + + return ( +
    +

    {interconnect.name} Keyboards

    + {interconnect.description &&

    {interconnect.description}

    } +
    Boards
    +
      + {boards.map((s) => ( + + ))} +
    +
    Shields
    +
      + {shields.map((s) => ( + + ))} +
    +
    + ); +} + +interface GroupedMetadata { + onboard: Board[]; + interconnects: Record; +} + +function groupedBoard(agg: GroupedMetadata, board: Board) { + if (board.features?.includes("keys")) { + agg.onboard.push(board); + } else if (board.exposes) { + board.exposes.forEach((element) => { + let ic = agg.interconnects[element] ?? { + boards: [], + shields: [], + }; + ic.boards.push(board); + agg.interconnects[element] = ic; + }); + } else { + console.error("Board without keys or interconnect"); + } + + return agg; +} + +function groupedShield(agg: GroupedMetadata, shield: Shield) { + shield.requires.forEach((id) => { + let ic = agg.interconnects[id] ?? { boards: [], shields: [] }; + ic.shields.push(shield); + agg.interconnects[id] = ic; + }); + + return agg; +} + +function groupedInterconnect(agg: GroupedMetadata, item: Interconnect) { + let ic = agg.interconnects[item.id] ?? { boards: [], shields: [] }; + ic.interconnect = item; + agg.interconnects[item.id] = ic; + + return agg; +} + +function HardwareList({ items }: HardwareListProps) { + let grouped = items.reduce( + (agg, hm) => { + switch (hm.type) { + case "board": + return groupedBoard(agg, hm); + case "shield": + return groupedShield(agg, hm); + case "interconnect": + return groupedInterconnect(agg, hm); + } + }, + { onboard: [] as Board[], interconnects: {} } + ); + + return ( + <> +

    Keyboards

    +

    Onboard Controller Boards

    +

    + Keyboards with onboard controllers are single PCBs that contain all the + components of a keyboard, including the controller chip, switch + footprints, etc. +

    +
      + {grouped["onboard"] + .sort((a, b) => a.name.localeCompare(b.name)) + .map((s) => ( + + ))} +
    +

    Composite Boards

    +

    + Composite keyboards are composed of two main PCBs: a small controller + board with exposed pads, and a larger keyboard PCB (a shield, in ZMK + lingo) with switch footprints and location a where the controller is + added. +

    + {Object.values(grouped.interconnects).map(mapInterconnect)} + + ); +} + +export default HardwareList; diff --git a/docs/src/hardware-metadata-collection-plugin/index.js b/docs/src/hardware-metadata-collection-plugin/index.js index cbea805fa7b..5f5660bb8e6 100644 --- a/docs/src/hardware-metadata-collection-plugin/index.js +++ b/docs/src/hardware-metadata-collection-plugin/index.js @@ -8,12 +8,16 @@ var PrebuildPlugin = require("prebuild-webpack-plugin"); const fs = require("fs"); const yaml = require("js-yaml"); const glob = require("glob"); -const { compile, compileFromFile } = require('json-schema-to-typescript'); function generateHardwareMetadataAggregate() { glob("../app/boards/**/*.zmk.yml", (error, files) => { - const aggregated = files.flatMap(f => yaml.safeLoadAll(fs.readFileSync(f, "utf8"))); - fs.writeFileSync("src/data/hardware-metadata.json", JSON.stringify(aggregated)); + const aggregated = files.flatMap((f) => + yaml.safeLoadAll(fs.readFileSync(f, "utf8")) + ); + fs.writeFileSync( + "src/data/hardware-metadata.json", + JSON.stringify(aggregated) + ); }); } @@ -30,4 +34,4 @@ module.exports = function () { }; }, }; -}; \ No newline at end of file +}; diff --git a/docs/src/hardware-schema-typescript-plugin/index.js b/docs/src/hardware-schema-typescript-plugin/index.js index 2ccbf19c39a..728d501dc06 100644 --- a/docs/src/hardware-schema-typescript-plugin/index.js +++ b/docs/src/hardware-schema-typescript-plugin/index.js @@ -6,7 +6,7 @@ var PrebuildPlugin = require("prebuild-webpack-plugin"); const fs = require("fs"); -const { compileFromFile } = require('json-schema-to-typescript'); +const { compileFromFile } = require("json-schema-to-typescript"); async function generateHardwareMetadataTypescript() { const ts = await compileFromFile("../schema/hardware-metadata.schema.json"); @@ -26,4 +26,4 @@ module.exports = function () { }; }, }; -}; \ No newline at end of file +}; diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 77c5f752db3..4360f0da16d 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "@tsconfig/docusaurus/tsconfig.json", "include": ["src/"] -} \ No newline at end of file +} From 683991aa9346a29c265299020a59c0b4c1805926 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Mar 2021 01:22:05 +0000 Subject: [PATCH 0121/1130] feat(docs): Type check the docs TSX components. --- .github/workflows/doc-checks.yml | 13 +++++++++++++ docs/package.json | 3 ++- docs/tsconfig.json | 12 +++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/doc-checks.yml b/.github/workflows/doc-checks.yml index b5b278e9414..a9b2d5ae0f6 100644 --- a/.github/workflows/doc-checks.yml +++ b/.github/workflows/doc-checks.yml @@ -31,3 +31,16 @@ jobs: - name: Prettier check run: npm run prettier:check working-directory: docs + typecheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: bahmutov/npm-install@v1 + with: + working-directory: docs + - name: Build + run: npm run build + working-directory: docs + - name: TypeScript check + run: npm run typecheck + working-directory: docs diff --git a/docs/package.json b/docs/package.json index 14fab7b7da3..b58100b2f44 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,7 +11,8 @@ "clear": "docusaurus clear", "lint": "eslint . --ext js,jsx,md,mdx", "prettier:check": "prettier --check .", - "prettier:format": "prettier --write ." + "prettier:format": "prettier --write .", + "typecheck": "tsc" }, "dependencies": { "@docusaurus/core": "^2.0.0-beta.3", diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 4360f0da16d..811eb1839e6 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,4 +1,14 @@ { "extends": "@tsconfig/docusaurus/tsconfig.json", - "include": ["src/"] + "include": ["src/"], + "compilerOptions": { + "jsx": "react", + "moduleResolution": "Node", + "esModuleInterop": true, + "resolveJsonModule": true, + "strict": true, + "noEmit": true, + "target": "ES6", + "lib": ["ES2019.Array", "DOM", "DOM.Iterable"] + } } From b82bbb5ba22ef5c4346e82ccd41d3f794a4bf376 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 26 Jul 2021 00:25:34 -0400 Subject: [PATCH 0122/1130] feat: Generate setup scripts from metadata. --- docs/.prettierignore | 4 +- docs/docusaurus.config.js | 1 + docs/package-lock.json | 352 +++++++++------ docs/package.json | 7 +- .../setup-script-generation-plugin/index.js | 62 +++ .../templates/setup.ps1.mustache} | 410 +++++++++--------- .../templates/setup.sh.mustache} | 115 +++-- docs/static/.gitignore | 5 + 8 files changed, 564 insertions(+), 392 deletions(-) create mode 100644 docs/src/setup-script-generation-plugin/index.js rename docs/{static/setup.ps1 => src/templates/setup.ps1.mustache} (85%) rename docs/{static/setup.sh => src/templates/setup.sh.mustache} (66%) create mode 100644 docs/static/.gitignore diff --git a/docs/.prettierignore b/docs/.prettierignore index d6fb34a7883..2e03c0b0813 100644 --- a/docs/.prettierignore +++ b/docs/.prettierignore @@ -1,3 +1,5 @@ node_modules build -.docusaurus \ No newline at end of file +.docusaurus +*.mustache +hardware-metadata.json diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index fc5677c2d4d..ed018f304e1 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -12,6 +12,7 @@ module.exports = { path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin"), path.resolve(__dirname, "src/hardware-metadata-collection-plugin"), path.resolve(__dirname, "src/hardware-schema-typescript-plugin"), + path.resolve(__dirname, "src/setup-script-generation-plugin"), ], themeConfig: { colorMode: { diff --git a/docs/package-lock.json b/docs/package-lock.json index e133b8a9cf5..127baf687d2 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -24213,11 +24213,11 @@ } }, "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "requires": { - "@babel/types": "^7.14.8", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -24265,18 +24265,18 @@ } }, "@babel/helper-module-transforms": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", - "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "requires": { "@babel/helper-module-imports": "^7.14.5", "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-simple-access": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-optimise-call-expression": { @@ -24304,11 +24304,11 @@ } }, "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.14.5" } }, "@babel/helper-split-export-declaration": { @@ -24320,9 +24320,15 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } }, "@babel/highlight": { "version": "7.14.5", @@ -24335,9 +24341,9 @@ } }, "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, "@babel/template": { "version": "7.14.5", @@ -24350,27 +24356,27 @@ } }, "@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", + "@babel/generator": "^7.14.5", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -25150,16 +25156,16 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -25229,11 +25235,11 @@ } }, "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "requires": { - "@babel/types": "^7.14.8", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -25247,13 +25253,13 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", - "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "requires": { "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-member-expression-to-functions": "^7.14.5", "@babel/helper-optimise-call-expression": "^7.14.5", "@babel/helper-replace-supers": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5" @@ -25326,9 +25332,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/highlight": { "version": "7.14.5", @@ -25341,9 +25347,9 @@ } }, "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, "@babel/plugin-syntax-typescript": { "version": "7.14.5", @@ -25364,27 +25370,27 @@ } }, "@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", + "@babel/generator": "^7.14.5", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -25473,16 +25479,16 @@ "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -25663,9 +25669,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/highlight": { "version": "7.14.5", @@ -25678,9 +25684,9 @@ } }, "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, "ansi-styles": { "version": "3.2.1", @@ -25744,21 +25750,21 @@ } }, "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "requires": { - "@babel/types": "^7.14.8", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -25775,11 +25781,11 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -25794,11 +25800,11 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -25813,20 +25819,20 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/highlight": { "version": "7.14.5", @@ -25839,9 +25845,9 @@ } }, "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, "@babel/template": { "version": "7.14.5", @@ -25854,11 +25860,11 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } } @@ -25912,9 +25918,9 @@ }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" } } }, @@ -27345,9 +27351,9 @@ } }, "@docusaurus/module-type-aliases": { - "version": "2.0.0-alpha.72", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-alpha.72.tgz", - "integrity": "sha512-z8qGXvvyF8FYgnc0c7v5BqulrUJ0A01jsb2gT4miC6Gc/pKnpahZqBXcm1MrQiiUrlHMEjdOAxlHQVZuOwSSRQ==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.3.tgz", + "integrity": "sha512-vciejziDBu39cyfmdvbpn865YlvugJMUOeD2m/7Kg4RLUPIZzQTWns0ZGIMc/iToiwebHwkoJtRsHaHzj8FpnA==", "dev": true }, "@docusaurus/plugin-content-blog": { @@ -28397,6 +28403,11 @@ } } }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -30556,9 +30567,9 @@ } }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" }, "semver": { "version": "7.0.0", @@ -34767,6 +34778,12 @@ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, + "mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -35916,9 +35933,9 @@ } }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" }, "postcss-value-parser": { "version": "4.1.0", @@ -35989,9 +36006,9 @@ } }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" } } }, @@ -38389,9 +38406,9 @@ } }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.3.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" }, "postcss-selector-parser": { "version": "6.0.6", @@ -38514,6 +38531,12 @@ } } }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + }, "terser": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", @@ -38536,6 +38559,28 @@ } } }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "dev": true, + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "dependencies": { + "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 + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -39203,6 +39248,61 @@ "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, + "webpack": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.46.0.tgz", + "integrity": "sha512-qxD0t/KTedJbpcXUmvMxY5PUvXDbF8LsThCzqomeGaDlCA6k998D8yYVwZMvO8sSM3BTEOaD4uzFniwpHaTIJw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.1" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true + }, + "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 + }, + "webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, "webpack-bundle-analyzer": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", @@ -39671,9 +39771,9 @@ } }, "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/docs/package.json b/docs/package.json index b58100b2f44..c7f3bcd2134 100644 --- a/docs/package.json +++ b/docs/package.json @@ -26,7 +26,8 @@ "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.19.4" + "web-tree-sitter": "^0.19.4", + "@mdx-js/react": "^1.6.22" }, "browserslist": { "production": [ @@ -46,12 +47,14 @@ "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", "json-schema-to-typescript": "^10.1.3", + "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", "prettier": "2.3.1", "string-replace-loader": "^3.0.3", "typescript": "^4.2.3", - "@docusaurus/module-type-aliases": "^2.0.0-alpha.72", + "webpack": "^5.46.0", + "@docusaurus/module-type-aliases": "^2.0.0-beta.3", "@tsconfig/docusaurus": "^1.0.2", "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.0", diff --git a/docs/src/setup-script-generation-plugin/index.js b/docs/src/setup-script-generation-plugin/index.js new file mode 100644 index 00000000000..e97a4d0ffdd --- /dev/null +++ b/docs/src/setup-script-generation-plugin/index.js @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +var PrebuildPlugin = require("prebuild-webpack-plugin"); +const fs = require("fs"); +const glob = require("glob"); +const yaml = require("js-yaml"); +const Mustache = require("mustache"); + +function generateSetupScripts() { + return glob("../app/boards/**/*.zmk.yml", (error, files) => { + const aggregated = files.flatMap((f) => + yaml.safeLoadAll(fs.readFileSync(f, "utf8")) + ); + + const data = aggregated.reduce( + (agg, item) => { + switch (item.type) { + case "shield": + item.compatible = true; + item.split = item.siblings?.length > 1; + agg.keyboards.push(item); + break; + case "board": + if (!item.features?.includes("keys")) { + agg.boards.push(item); + } + break; + } + return agg; + }, + { keyboards: [], boards: [] } + ); + + for (let script_ext of ["sh", "ps1"]) { + const templateBuffer = fs.readFileSync( + `src/templates/setup.${script_ext}.mustache`, + "utf8" + ); + const script = Mustache.render(templateBuffer, data); + fs.writeFileSync(`static/setup.${script_ext}`, script); + } + }); +} + +module.exports = function () { + return { + name: "setup-script-generation-plugin", + configureWebpack() { + return { + plugins: [ + new PrebuildPlugin({ + build: generateSetupScripts, + }), + ], + }; + }, + }; +}; diff --git a/docs/static/setup.ps1 b/docs/src/templates/setup.ps1.mustache similarity index 85% rename from docs/static/setup.ps1 rename to docs/src/templates/setup.ps1.mustache index 307b402f3fb..0d2b4c5014c 100644 --- a/docs/static/setup.ps1 +++ b/docs/src/templates/setup.ps1.mustache @@ -1,205 +1,205 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -$ErrorActionPreference = "Stop" - -function Get-Choice-From-Options { - param( - [String[]] $Options, - [String] $Prompt - ) - - while ($true) { - for ($i = 0; $i -lt $Options.length; $i++) { - Write-Host "$($i + 1)) $($Options[$i])" - } - - Write-Host "$($Options.length + 1)) Quit" - $selection = (Read-Host $Prompt) -as [int] - - if ($selection -eq $Options.length + 1) { - Write-Host "Goodbye!" - exit 1 - } - elseif ($selection -le $Options.length -and $selection -gt 0) { - $choice = $($selection - 1) - break - } - else { - Write-Host "Invalid Option. Try another one." - } - } - - return $choice -} - -function Test-Git-Config { - param( - [String] $Option, - [String] $ErrMsg - ) - - git config $Option | Out-Null - - if ($lastExitCode -ne 0) { - Write-Host $ErrMsg - exit 1 - } -} - -try { - git | Out-Null -} -catch [System.Management.Automation.CommandNotFoundException] { - Write-Host "Git is not installed, and is required for this script!" - exit 1 -} - -Test-Git-Config -Option "user.name" -ErrMsg "Git username not set!`nRun: git config --global user.name 'My Name'" -Test-Git-Config -Option "user.email" -ErrMsg "Git email not set!`nRun: git config --global user.email 'example@myemail.com'" - -$permission = (Get-Acl $pwd).Access | -?{$_.IdentityReference -match $env:UserName ` - -and $_.FileSystemRights -match "FullControl" ` - -or $_.FileSystemRights -match "Write" } | - - Select IdentityReference,FileSystemRights - -If (-Not $permission){ - Write-Host "Sorry, you do not have write permissions in this directory." - Write-Host "Please try running this script again from a directory that you do have write permissions for." - exit 1 -} - -$repo_path = "https://github.com/zmkfirmware/zmk-config-split-template.git" - -$title = "ZMK Config Setup:" -$prompt = "Pick an MCU board" -$options = "nice!nano v1", "nice!nano v2", "QMK Proton-C", "BlueMicro840 (v1)", "makerdiary nRF52840 M.2" -$boards = "nice_nano", "nice_nano_v2", "proton_c", "bluemicro840_v1", "nrf52840_m2" - -Write-Host "$title" -Write-Host "" -Write-Host "MCU Board Selection:" - -$choice = Get-Choice-From-Options -Options $options -Prompt $prompt -$board = $($boards[$choice]) - -Write-Host "" -Write-Host "Keyboard Shield Selection:" -$prompt = "Pick a keyboard" - -# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -$options = "Kyria", "Lily58", "Corne", "Splitreus62", "Sofle", "Iris", "Reviung41", "RoMac", "RoMac+", "makerdiary M60", "Microdox", "TG4X", "QAZ", "NIBBLE", "Jorne", "Jian", "CRBN", "Tidbit", "Eek!", "BFO-9000", "Helix" -$names = "kyria", "lily58", "corne", "splitreus62", "sofle", "iris", "reviung41", "romac", "romac_plus", "m60", "microdox", "tg4x", "qaz", "nibble", "jorne", "jian", "crbn", "tidbit", "eek", "bfo9000", "helix" -$splits = "y", "y", "y", "y", "y", "y", "n", "n", "n", "n", "y", "n", "n", "n", "y", "y", "n", "n", "n", "n", "y" - -$choice = Get-Choice-From-Options -Options $options -Prompt $prompt -$shield_title = $($options[$choice]) -$shield = $($names[$choice]) -$split = $($splits[$choice]) - -if ($split -eq "n") { - $repo_path = "https://github.com/zmkfirmware/zmk-config-template.git" -} - -$copy_keymap = Read-Host "Copy in the stock keymap for customisation? [Yn]" - -if ($copy_keymap -eq "" -or $copy_keymap -eq "Y" -or $copy_keymap -eq "y") { - $copy_keymap = "yes" -} - -$github_user = Read-Host "GitHub Username (leave empty to skip GitHub repo creation)" - -if ($github_user -ne "") { - $repo_name = Read-Host "GitHub Repo Name [zmk-config]" - - if ($repo_name -eq "") { - $repo_name = "zmk-config" - } - - $github_repo = Read-Host "GitHub Repo [https://github.com/$github_user/$repo_name.git]" - - if ($github_repo -eq "") { - $github_repo = "https://github.com/$github_user/$repo_name.git" - } -} -else { - $repo_name = "zmk-config" - $github_repo = "" -} - -Write-Host "" -Write-Host "Preparing a user config for:" -Write-Host "* MCU Board: ${board}" -Write-Host "* Shield: ${shield}" - -if ($copy_keymap -eq "yes") { - Write-Host "* Copy Keymap?: Yes" -} -else { - Write-Host "* Copy Keymap?: No" -} - -if ($github_repo -ne "") { - Write-Host "* GitHub Repo to Push (please create this in GH first!): $github_repo" -} - -Write-Host "" -$do_it = Read-Host "Continue? [Yn]" - -if ($do_it -ne "" -and $do_it -ne "Y" -and $do_it -ne "y") { - Write-Host "Aborting..." - exit 1 -} - -git clone --single-branch "$repo_path" "$repo_name" -Set-Location "$repo_name" - -Push-Location config - -Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" -OutFile "${shield}.conf" - -if ($copy_keymap -eq "yes") { - Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" -OutFile "${shield}.keymap" -} - -Pop-Location - -$build_file = (Get-Content .github/workflows/build.yml).replace("BOARD_NAME", $board) -$build_file = $build_file.replace("SHIELD_NAME", $shield) -$build_file = $build_file.replace("KEYBOARD_TITLE", $shield_title) - -if ($board -eq "proton_c") { - $build_file = $build_file.replace("uf2", "hex") -} - -Set-Content -Path .github/workflows/build.yml -Value $build_file - -Remove-Item -Recurse -Force .git -git init . -git add . -git commit -m "Initial User Config." - -if ($github_repo -ne "") { - git remote add origin "$github_repo" - - git push --set-upstream origin $(git symbolic-ref --short HEAD) - - # If push failed, assume that the origin was incorrect and give instructions on fixing. - if ($lastExitCode -ne 0) { - Write-Host "Remote repository $github_repo not found..." - Write-Host "Check GitHub URL, and try adding again." - Write-Host "Run the following: " - Write-Host " git remote rm origin" - Write-Host " git remote add origin FIXED_URL" - Write-Host " git push --set-upstream origin $(git symbolic-ref --short HEAD)" - Write-Host "Once pushed, your firmware should be availalbe from GitHub Actions at: $actions" - exit 1 - } - - if ($github_repo -imatch "https") { - $actions = "$($github_repo.substring(0, $github_repo.length - 4))/actions" - Write-Host "Your firmware should be availalbe from GitHub Actions shortly: $actions" - } -} +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +$ErrorActionPreference = "Stop" + +function Get-Choice-From-Options { + param( + [String[]] $Options, + [String] $Prompt + ) + + while ($true) { + for ($i = 0; $i -lt $Options.length; $i++) { + Write-Host "$($i + 1)) $($Options[$i])" + } + + Write-Host "$($Options.length + 1)) Quit" + $selection = (Read-Host $Prompt) -as [int] + + if ($selection -eq $Options.length + 1) { + Write-Host "Goodbye!" + exit 1 + } + elseif ($selection -le $Options.length -and $selection -gt 0) { + $choice = $($selection - 1) + break + } + else { + Write-Host "Invalid Option. Try another one." + } + } + + return $choice +} + +function Test-Git-Config { + param( + [String] $Option, + [String] $ErrMsg + ) + + git config $Option | Out-Null + + if ($lastExitCode -ne 0) { + Write-Host $ErrMsg + exit 1 + } +} + +try { + git | Out-Null +} +catch [System.Management.Automation.CommandNotFoundException] { + Write-Host "Git is not installed, and is required for this script!" + exit 1 +} + +Test-Git-Config -Option "user.name" -ErrMsg "Git username not set!`nRun: git config --global user.name 'My Name'" +Test-Git-Config -Option "user.email" -ErrMsg "Git email not set!`nRun: git config --global user.email 'example@myemail.com'" + +$permission = (Get-Acl $pwd).Access | +?{$_.IdentityReference -match $env:UserName ` + -and $_.FileSystemRights -match "FullControl" ` + -or $_.FileSystemRights -match "Write" } | + + Select IdentityReference,FileSystemRights + +If (-Not $permission){ + Write-Host "Sorry, you do not have write permissions in this directory." + Write-Host "Please try running this script again from a directory that you do have write permissions for." + exit 1 +} + +$repo_path = "https://github.com/zmkfirmware/zmk-config-split-template.git" + +$title = "ZMK Config Setup:" +$prompt = "Pick an MCU board" +$options = {{#boards}}"{{{name}}}", {{/boards}} "" | Where-Object { $_ -ne "" } +$boards = {{#boards}}"{{id}}", {{/boards}} "" | Where-Object { $_ -ne "" } + +Write-Host "$title" +Write-Host "" +Write-Host "MCU Board Selection:" + +$choice = Get-Choice-From-Options -Options $options -Prompt $prompt +$board = $($boards[$choice]) + +Write-Host "" +Write-Host "Keyboard Shield Selection:" +$prompt = "Pick a keyboard" + +# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. +$options = {{#keyboards}}"{{name}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } +$names = {{#keyboards}}"{{id}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } +$splits = {{#keyboards}}"{{#split}}y{{/split}}{{^split}}n{{/split}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } + +$choice = Get-Choice-From-Options -Options $options -Prompt $prompt +$shield_title = $($options[$choice]) +$shield = $($names[$choice]) +$split = $($splits[$choice]) + +if ($split -eq "n") { + $repo_path = "https://github.com/zmkfirmware/zmk-config-template.git" +} + +$copy_keymap = Read-Host "Copy in the stock keymap for customisation? [Yn]" + +if ($copy_keymap -eq "" -or $copy_keymap -eq "Y" -or $copy_keymap -eq "y") { + $copy_keymap = "yes" +} + +$github_user = Read-Host "GitHub Username (leave empty to skip GitHub repo creation)" + +if ($github_user -ne "") { + $repo_name = Read-Host "GitHub Repo Name [zmk-config]" + + if ($repo_name -eq "") { + $repo_name = "zmk-config" + } + + $github_repo = Read-Host "GitHub Repo [https://github.com/$github_user/$repo_name.git]" + + if ($github_repo -eq "") { + $github_repo = "https://github.com/$github_user/$repo_name.git" + } +} +else { + $repo_name = "zmk-config" + $github_repo = "" +} + +Write-Host "" +Write-Host "Preparing a user config for:" +Write-Host "* MCU Board: ${board}" +Write-Host "* Shield: ${shield}" + +if ($copy_keymap -eq "yes") { + Write-Host "* Copy Keymap?: Yes" +} +else { + Write-Host "* Copy Keymap?: No" +} + +if ($github_repo -ne "") { + Write-Host "* GitHub Repo to Push (please create this in GH first!): $github_repo" +} + +Write-Host "" +$do_it = Read-Host "Continue? [Yn]" + +if ($do_it -ne "" -and $do_it -ne "Y" -and $do_it -ne "y") { + Write-Host "Aborting..." + exit 1 +} + +git clone --single-branch "$repo_path" "$repo_name" +Set-Location "$repo_name" + +Push-Location config + +Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" -OutFile "${shield}.conf" + +if ($copy_keymap -eq "yes") { + Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" -OutFile "${shield}.keymap" +} + +Pop-Location + +$build_file = (Get-Content .github/workflows/build.yml).replace("BOARD_NAME", $board) +$build_file = $build_file.replace("SHIELD_NAME", $shield) +$build_file = $build_file.replace("KEYBOARD_TITLE", $shield_title) + +if ($board -eq "proton_c") { + $build_file = $build_file.replace("uf2", "hex") +} + +Set-Content -Path .github/workflows/build.yml -Value $build_file + +Remove-Item -Recurse -Force .git +git init . +git add . +git commit -m "Initial User Config." + +if ($github_repo -ne "") { + git remote add origin "$github_repo" + + git push --set-upstream origin $(git symbolic-ref --short HEAD) + + # If push failed, assume that the origin was incorrect and give instructions on fixing. + if ($lastExitCode -ne 0) { + Write-Host "Remote repository $github_repo not found..." + Write-Host "Check GitHub URL, and try adding again." + Write-Host "Run the following: " + Write-Host " git remote rm origin" + Write-Host " git remote add origin FIXED_URL" + Write-Host " git push --set-upstream origin $(git symbolic-ref --short HEAD)" + Write-Host "Once pushed, your firmware should be availalbe from GitHub Actions at: $actions" + exit 1 + } + + if ($github_repo -imatch "https") { + $actions = "$($github_repo.substring(0, $github_repo.length - 4))/actions" + Write-Host "Your firmware should be availalbe from GitHub Actions shortly: $actions" + } +} diff --git a/docs/static/setup.sh b/docs/src/templates/setup.sh.mustache similarity index 66% rename from docs/static/setup.sh rename to docs/src/templates/setup.sh.mustache index c089a5f8800..2b414376d48 100644 --- a/docs/static/setup.sh +++ b/docs/src/templates/setup.sh.mustache @@ -65,71 +65,70 @@ fi repo_path="https://github.com/zmkfirmware/zmk-config-split-template.git" title="ZMK Config Setup:" -prompt="Pick an MCU board:" -options=("nice!nano v1" "nice!nano v2" "QMK Proton-C" "BlueMicro840 (v1)" "makerdiary nRF52840 M.2") - -echo "$title" echo "" -echo "MCU Board Selection:" -PS3="$prompt " +echo "Keyboard Selection:" +PS3="Pick a keyboard: " +options=({{#keyboards}}"{{{name}}}" {{/keyboards}}) +keyboards_id=({{#keyboards}}"{{id}}" {{/keyboards}}) +keyboards_type=({{#keyboards}}"{{type}}" {{/keyboards}}) +keyboards_split=({{#keyboards}}"{{#split}}y{{/split}}{{^split}}n{{/split}}" {{/keyboards}}) +keyboards_shield=({{#keyboards}}"{{#compatible}}y{{/compatible}}{{^compatible}}n{{/compatible}}" {{/keyboards}}) select opt in "${options[@]}" "Quit"; do - case "$REPLY" in - - 1 ) board="nice_nano"; break;; - 2 ) board="nice_nano_v2"; break;; - 3 ) board="proton_c"; break;; - 4 ) board="bluemicro840_v1"; break;; - 5 ) board="nrf52840_m2"; break;; - - $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; - *) echo "Invalid option. Try another one."; continue;; + ''|*[!0-9]*) echo "Invalid option. Try another one."; continue;; + + $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; + *) + if [ $REPLY -gt $(( ${#options[@]}+1 )) ] || [ $REPLY -lt 0 ]; then + echo "Invalid option. Try another one." + continue + fi + keyboard_index=$(( $REPLY-1 )) + keyboard=${keyboards_id[$keyboard_index]} + keyboard_title=${options[$keyboard_index]} + split=${keyboards_split[$keyboard_index]} + type=${keyboards_type[$keyboard_index]} + keyboard_shield=${keyboards_shield[$keyboard_index]} + break + ;; esac done -echo "" -echo "Keyboard Shield Selection:" - -prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris" "Reviung41" "RoMac" "RoMac+" "makerdiary M60" "Microdox" "TG4X" "QAZ" "NIBBLE" "Jorne" "Jian" "CRBN" "Tidbit" "Eek!" "BFO-9000" "Helix") - -PS3="$prompt " -# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -# select opt in "${options[@]}" "Other" "Quit"; do -select opt in "${options[@]}" "Quit"; do - - case "$REPLY" in - - 1 ) shield_title="Kyria" shield="kyria"; split="y"; break;; - 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; - 3 ) shield_title="Corne" shield="corne"; split="y"; break;; - 4 ) shield_title="Splitreus62" shield="splitreus62"; split="y"; break;; - 5 ) shield_title="Sofle" shield="sofle"; split="y"; break;; - 6 ) shield_title="Iris" shield="iris"; split="y"; break;; - 7 ) shield_title="Reviung41" shield="reviung41"; split="n"; break;; - 8 ) shield_title="RoMac" shield="romac"; split="n"; break;; - 9 ) shield_title="RoMac+" shield="romac_plus"; split="n"; break;; - 10 ) shield_title="M60" shield="m60"; split="n"; break;; - 11 ) shield_title="Microdox" shield="microdox"; split="y"; break;; - 12 ) shield_title="TG4X" shield="tg4x"; split="n"; break;; - 13 ) shield_title="QAZ" shield="qaz"; split="n"; break;; - 14 ) shield_title="NIBBLE" shield="nibble"; split="n"; break;; - 15 ) shield_title="Jorne" shield="jorne"; split="y"; break;; - 16 ) shield_title="Jian" shield="jian"; split="y"; break;; - 17 ) shield_title="CRBN" shield="crbn"; split="n"; break;; - 18 ) shield_title="Tidbit" shield="tidbit"; split="n"; break;; - 19 ) shield_title="Eek!" shield="eek"; split="n"; break;; - 20 ) shield_title="BFO-9000" shield="bfo9000"; split="y"; break;; - 21 ) shield_title="Helix" shield="helix"; split="y"; break;; - - # Add link to docs on adding your own custom shield in your ZMK config! - # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; - $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; - *) echo "Invalid option. Try another one.";continue;; - - esac -done +if [ "$keyboard_shield" == "y" ]; then + shield=${keyboard} + shield_title=${keyboard_title} + + prompt="Pick an MCU board:" + options=({{#boards}}"{{{name}}}" {{/boards}}) + board_ids=({{#boards}}"{{id}}" {{/boards}}) + + echo "" + echo "MCU Board Selection:" + PS3="$prompt " + select opt in "${options[@]}" "Quit"; do + case "$REPLY" in + ''|*[!0-9]*) echo "Invalid option. Try another one."; continue;; + + $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; + *) + if [ $REPLY -gt $(( ${#options[@]}+1 )) ] || [ $REPLY -lt 0 ]; then + echo "Invalid option. Try another one." + continue + fi + board_index=$(( $REPLY-1 )) + board=${board_ids[$board_index]} + board_title=${options[$board_index]} + break + ;; + + esac + done +else + board=${keyboard} + echo "Support for onboard microcontroller keyboards is still a work in progress." + exit 1 +fi if [ "$split" == "n" ]; then repo_path="https://github.com/zmkfirmware/zmk-config-template.git" diff --git a/docs/static/.gitignore b/docs/static/.gitignore new file mode 100644 index 00000000000..fc7d2745100 --- /dev/null +++ b/docs/static/.gitignore @@ -0,0 +1,5 @@ + +# Ignore generated setup script + +setup.ps1 +setup.sh From f8e88d78c47b614f7a057ff84107149978f0dc96 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 28 Jul 2021 00:55:36 -0400 Subject: [PATCH 0123/1130] docs: Add docs on hardware metadata files. --- .../development/hardware-metadata-files.md | 112 ++++++++++++++++++ docs/docs/development/new-shield.md | 26 ++++ docs/sidebars.js | 5 +- 3 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 docs/docs/development/hardware-metadata-files.md diff --git a/docs/docs/development/hardware-metadata-files.md b/docs/docs/development/hardware-metadata-files.md new file mode 100644 index 00000000000..ffe896e2479 --- /dev/null +++ b/docs/docs/development/hardware-metadata-files.md @@ -0,0 +1,112 @@ +--- +title: Hardware Metadata Files +--- + +## Overview + +ZMK makes use of an additional metadata YAML file for all boards and shields to provide high level information about the hardware to be incorporated into setup scripts/utilities, website hardware list, etc. + +The naming convention for metadata files is `{item_id}.zmk.yml`, where the `item_id` is the board/shield identifier, including version information but excluding any optional split `_left`/`_right` suffix, e.g. `corne.zmk.yml` or `nrfmicro_11.zmk.yml`. + +## Example File + +Here is a sample `corne.zmk.yml` file from the repository: + +```yaml +file_format: "1" +id: corne +name: Corne +type: shield +url: https://github.com/foostan/crkbd/ +requires: + - pro_micro +exposes: + - i2c_oled +features: + - keys + - display +siblings: + - corne_left + - corne_right +``` + +## Schema + +ZMK uses a [JSON Schema](https://github.com/zmkfirmware/zmk/blob/main/schema/hardware-metadata.schema.json) file to validate metadata files and sure all required properties are present, and all other optional properties provided conform to the expected format. You can validate all metadata files in the repository by running `west metadata check` from your configured ZMK repository. + +## File Format + +The first line of every metadata file should contain the file format. As of today, the only acceptable file format is `1`, which should be written like: + +```yaml +file_format: "1" +``` + +:::note + +ZMK plans to expand on the initial based set of metadata properties, while maintaining backwards compatibility. In particular, new _optional_ properties may be added to file format `1` as time progress, and when new set of properties is settled upon as being required moving forward, a new major version of the file format will be created to encompass those changes. + +::: + +### Item ID and Name + +All metadata files should then contain two key pieces of identifying information, the `id` for the item, and the `name` which used a the human readable display name in various UI locations: + +```yaml +id: corne +name: Corne +``` + +### Item Types + +Each metadata file includes a `type` property uniquely identifying the type of item, be it `board`, `shield`, or the less frequently needed `interconnect` (which is used to document generic hardware interconnects like the Pro Micro format): + +```yaml +type: shield +``` + +### URL + +The `url` property should contain the canonical URL used to learn more about the board/shield, e.g. the main vendor website or GitHub repository for a given keyboard/controller: + +```yaml +url: https://github.com/foostan/crkbd/ +``` + +### Interconnect Requires/Exposes + +For boards and shields, one of the key pieces of high level information is compatibility between the two items. In particular, a board usually exposes one ore more "interconnects", the physical location/type of connections available, and their assigned possible uses (e.g. GPIO, power, ground, i2c, etc). Similarly, a shield is usually designed around one (or sometimes more) "interconnects" that allow it to connect to one of those boards. + +In ZMK, we encode both of those scenarios with the `exposes` and `requires` properties, respectively. For example, for a Corne shield that requires a Pro Micro compatible controller to function, and simultaneously exposes a four pin header to be used by standard i2c OLED modules, the metadata file contains: + +```yaml +requires: + - pro_micro +exposes: + - i2c_oled +``` + +### Features + +Boards and shields should document the sets of hardware features found on them using the `features` array. There is a fixed enum of possible values to use here, which will be expanded over time. The current set of possible `features` values is: + +- `keys` - Any board or shield that contains keyboard keys should include this feature. It is a central feature used to determine if we have a "complete combination" for ZMK to produce a keyboard firmware when performing setup. +- `display` - Indicates the hardware includes a display for use with the ZMK display functionality. +- `encoder` - Indicates the hardware contains one or more rotary encoders. +- `underglow` - Indicates the hardware includes underglow LEDs. +- `pointer` (future) - Used to indicate the hardware includes one or more pointer inputs, e.g. joystick, touchpad, or trackpoint. + +### Siblings + +The `siblings` array is used to identify multiple hardware items designed to be used together as one logical device. Right now, that primarily is used to identify the two halves of a split keyboard, but future enhancements will include more complicated and flexible combinations. + +The array should contrain the complete harware IDs of the siblings that combine in the logical device, e.g. with the `corne.zmk.yml` file: + +```yaml +id: corne +siblings: + - corne_left + - corne_right +``` + +Future versions of the metadata file format will be expanded to allow documenting any specifics of each sibling that are unique, e.g. if only the left side contains the `encoder` feature. diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 857d3a3b629..2ed2b12bf51 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -368,6 +368,32 @@ Further documentation on behaviors and bindings is forthcoming, but a summary of - `trans` is the "transparent" behavior, useful to be place in higher layers above `mo` bindings to be sure the key release is handled by the lower layer. No binding arguments are required. - `mt` is the "mod-tap" behavior, and takes two binding arguments, the modifier to use if held, and the keycode to send if tapped. +## Metadata + +ZMK makes use of an additional metadata YAML file for all boards and shields to provide high level information about the hardware to be incorporated into setup scripts/utilities, website hardware list, etc. + +The naming convention for metadata files is `{item_id}.zmk.yml`, where the `item_id` is the board/shield identifier, including version information but excluding any optional split `_left`/`_right` suffix, e.g. `corne.zmk.yml` or `nrfmicro_11.zmk.yml`. + +Here is a sample `corne.zmk.yml` file from the repository: + +```yaml +file_format: "1" +id: corne +name: Corne +type: shield +url: https://github.com/foostan/crkbd/ +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display +siblings: + - corne_left + - corne_right +``` + +You should place a properly named `foo.zmk.yml` file in the directory next to your other shield values, and fill it out completely and accurately. See [Hardware Metadata Files](/docs/development/hardware-metadata-files) for the full details. + ## Adding Features ### Encoders diff --git a/docs/sidebars.js b/docs/sidebars.js index 4ae23c5975d..8865b5777f0 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -56,7 +56,10 @@ module.exports = { type: "category", label: "Guides", collapsed: false, - items: ["development/new-shield"], + items: [ + "development/new-shield", + "development/hardware-metadata-files", + ], }, ], }, From 2907704f9f72c0cb3d8c45377e15089f1408bd75 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Sep 2021 04:49:09 +0000 Subject: [PATCH 0124/1130] refactor(shields): Add pro-micro shield metadata. --- app/boards/shields/bfo9000/bfo9000.zmk.yml | 11 +++++++++++ .../shields/boardsource3x4/boardsource3x4.zmk.yml | 8 ++++++++ app/boards/shields/corne/corne.zmk.yml | 5 +++-- app/boards/shields/cradio/cradio.zmk.yml | 12 ++++++++++++ app/boards/shields/crbn/crbn.zmk.yml | 9 +++++++++ app/boards/shields/eek/eek.zmk.yml | 8 ++++++++ app/boards/shields/helix/helix.zmk.yml | 13 +++++++++++++ app/boards/shields/iris/iris.zmk.yml | 14 ++++++++++++++ app/boards/shields/jian/jian.zmk.yml | 11 +++++++++++ app/boards/shields/jorne/jorne.zmk.yml | 14 ++++++++++++++ app/boards/shields/kyria/kyria.zmk.yml | 15 +++++++++++++++ app/boards/shields/lily58/lily58.zmk.yml | 13 +++++++++++++ app/boards/shields/microdox/microdox.zmk.yml | 13 +++++++++++++ app/boards/shields/nibble/nibble.zmk.yml | 9 +++++++++ app/boards/shields/qaz/qaz.zmk.yml | 8 ++++++++ app/boards/shields/quefrency/quefrency.zmk.yml | 12 ++++++++++++ app/boards/shields/reviung41/reviung41.zmk.yml | 8 ++++++++ app/boards/shields/romac/romac.zmk.yml | 8 ++++++++ app/boards/shields/romac_plus/romac_plus.zmk.yml | 10 ++++++++++ app/boards/shields/sofle/sofle.zmk.yml | 14 ++++++++++++++ .../shields/splitreus62/splitreus62.zmk.yml | 11 +++++++++++ app/boards/shields/tg4x/tg4x.zmk.yml | 8 ++++++++ app/boards/shields/tidbit/tidbit.zmk.yml | 10 ++++++++++ 23 files changed, 242 insertions(+), 2 deletions(-) create mode 100644 app/boards/shields/bfo9000/bfo9000.zmk.yml create mode 100644 app/boards/shields/boardsource3x4/boardsource3x4.zmk.yml create mode 100644 app/boards/shields/cradio/cradio.zmk.yml create mode 100644 app/boards/shields/crbn/crbn.zmk.yml create mode 100644 app/boards/shields/eek/eek.zmk.yml create mode 100644 app/boards/shields/helix/helix.zmk.yml create mode 100644 app/boards/shields/iris/iris.zmk.yml create mode 100644 app/boards/shields/jian/jian.zmk.yml create mode 100644 app/boards/shields/jorne/jorne.zmk.yml create mode 100644 app/boards/shields/kyria/kyria.zmk.yml create mode 100644 app/boards/shields/lily58/lily58.zmk.yml create mode 100644 app/boards/shields/microdox/microdox.zmk.yml create mode 100644 app/boards/shields/nibble/nibble.zmk.yml create mode 100644 app/boards/shields/qaz/qaz.zmk.yml create mode 100644 app/boards/shields/quefrency/quefrency.zmk.yml create mode 100644 app/boards/shields/reviung41/reviung41.zmk.yml create mode 100644 app/boards/shields/romac/romac.zmk.yml create mode 100644 app/boards/shields/romac_plus/romac_plus.zmk.yml create mode 100644 app/boards/shields/sofle/sofle.zmk.yml create mode 100644 app/boards/shields/splitreus62/splitreus62.zmk.yml create mode 100644 app/boards/shields/tg4x/tg4x.zmk.yml create mode 100644 app/boards/shields/tidbit/tidbit.zmk.yml diff --git a/app/boards/shields/bfo9000/bfo9000.zmk.yml b/app/boards/shields/bfo9000/bfo9000.zmk.yml new file mode 100644 index 00000000000..c63e7e31781 --- /dev/null +++ b/app/boards/shields/bfo9000/bfo9000.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: bfo9000 +name: BFO-9000 +type: shield +url: https://keeb.io/products/bfo-9000-keyboard-customizable-full-size-split-ortholinear +requires: [pro_micro] +features: + - keys +siblings: + - bfo9000_left + - bfo9000_right diff --git a/app/boards/shields/boardsource3x4/boardsource3x4.zmk.yml b/app/boards/shields/boardsource3x4/boardsource3x4.zmk.yml new file mode 100644 index 00000000000..fee279659a2 --- /dev/null +++ b/app/boards/shields/boardsource3x4/boardsource3x4.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: boardsource3x4 +name: Boardsource 3x4 Macropad +type: shield +url: https://boardsource.xyz/store/5ecc2008eee64242946c98c1 +requires: [pro_micro] +features: + - keys diff --git a/app/boards/shields/corne/corne.zmk.yml b/app/boards/shields/corne/corne.zmk.yml index d09bf71d7a4..1e8a5fbb79b 100644 --- a/app/boards/shields/corne/corne.zmk.yml +++ b/app/boards/shields/corne/corne.zmk.yml @@ -8,6 +8,7 @@ exposes: [i2c_oled] features: - keys - display + - underglow siblings: -- corne_left -- corne_right + - corne_left + - corne_right diff --git a/app/boards/shields/cradio/cradio.zmk.yml b/app/boards/shields/cradio/cradio.zmk.yml new file mode 100644 index 00000000000..76cf1ab283d --- /dev/null +++ b/app/boards/shields/cradio/cradio.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: cradio +name: Cradio/Sweep +type: shield +url: https://github.com/davidphilipbarr/Sweep +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys +siblings: + - cradio_left + - cradio_right diff --git a/app/boards/shields/crbn/crbn.zmk.yml b/app/boards/shields/crbn/crbn.zmk.yml new file mode 100644 index 00000000000..baa73ea066d --- /dev/null +++ b/app/boards/shields/crbn/crbn.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: crbn +name: CRBN Featherlight +type: shield +url: https://github.com/PolarityWorks/CRBN-Featherlight +requires: [pro_micro] +features: + - keys + - encoder diff --git a/app/boards/shields/eek/eek.zmk.yml b/app/boards/shields/eek/eek.zmk.yml new file mode 100644 index 00000000000..bac88f636d6 --- /dev/null +++ b/app/boards/shields/eek/eek.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: eek +name: eek! +type: shield +url: https://github.com/Klackygears/eek_doc +requires: [pro_micro] +features: + - keys diff --git a/app/boards/shields/helix/helix.zmk.yml b/app/boards/shields/helix/helix.zmk.yml new file mode 100644 index 00000000000..f24b9e09cd0 --- /dev/null +++ b/app/boards/shields/helix/helix.zmk.yml @@ -0,0 +1,13 @@ +file_format: "1" +id: helix +name: Helix +type: shield +url: https://github.com/MakotoKurauchi/helix +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display +siblings: + - helix_left + - helix_right diff --git a/app/boards/shields/iris/iris.zmk.yml b/app/boards/shields/iris/iris.zmk.yml new file mode 100644 index 00000000000..2b25ec3e5c9 --- /dev/null +++ b/app/boards/shields/iris/iris.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: iris +name: Iris +type: shield +url: https://keeb.io/products/iris-keyboard-split-ergonomic-keyboard +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder +siblings: + - iris_left + - iris_right diff --git a/app/boards/shields/jian/jian.zmk.yml b/app/boards/shields/jian/jian.zmk.yml new file mode 100644 index 00000000000..84ed69d748c --- /dev/null +++ b/app/boards/shields/jian/jian.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: jian +name: Jian +type: shield +url: https://github.com/KGOH/Jian-Info +requires: [pro_micro] +features: + - keys +siblings: + - jian_left + - jian_right diff --git a/app/boards/shields/jorne/jorne.zmk.yml b/app/boards/shields/jorne/jorne.zmk.yml new file mode 100644 index 00000000000..16efe2ae8af --- /dev/null +++ b/app/boards/shields/jorne/jorne.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: jorne +name: Jorne +type: shield +url: https://github.com/joric/jorne +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - underglow +siblings: + - jorne_left + - jorne_right diff --git a/app/boards/shields/kyria/kyria.zmk.yml b/app/boards/shields/kyria/kyria.zmk.yml new file mode 100644 index 00000000000..95e6c3b7ebe --- /dev/null +++ b/app/boards/shields/kyria/kyria.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: kyria +name: Kyria +type: shield +url: https://splitkb.com/products/kyria-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - kyria_left + - kyria_right diff --git a/app/boards/shields/lily58/lily58.zmk.yml b/app/boards/shields/lily58/lily58.zmk.yml new file mode 100644 index 00000000000..65069a13e9f --- /dev/null +++ b/app/boards/shields/lily58/lily58.zmk.yml @@ -0,0 +1,13 @@ +file_format: "1" +id: lily58 +name: Lily58 +type: shield +url: https://github.com/kata0510/Lily58 +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display +siblings: + - lily58_left + - lily58_right diff --git a/app/boards/shields/microdox/microdox.zmk.yml b/app/boards/shields/microdox/microdox.zmk.yml new file mode 100644 index 00000000000..389fbca494f --- /dev/null +++ b/app/boards/shields/microdox/microdox.zmk.yml @@ -0,0 +1,13 @@ +file_format: "1" +id: microdox +name: Microdox +type: shield +url: https://boardsource.xyz/store/5f2e7e4a2902de7151494f92 +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display +siblings: + - microdox_left + - microdox_right diff --git a/app/boards/shields/nibble/nibble.zmk.yml b/app/boards/shields/nibble/nibble.zmk.yml new file mode 100644 index 00000000000..cfc1409e53b --- /dev/null +++ b/app/boards/shields/nibble/nibble.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: nibble +name: Nibble +type: shield +url: https://nullbits.co/nibble/ +requires: [pro_micro] +features: + - keys + - encoder diff --git a/app/boards/shields/qaz/qaz.zmk.yml b/app/boards/shields/qaz/qaz.zmk.yml new file mode 100644 index 00000000000..3305e3da996 --- /dev/null +++ b/app/boards/shields/qaz/qaz.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: qaz +name: QAZ +type: shield +url: https://www.cbkbd.com/product/qaz-keyboard-kit +requires: [pro_micro] +features: + - keys diff --git a/app/boards/shields/quefrency/quefrency.zmk.yml b/app/boards/shields/quefrency/quefrency.zmk.yml new file mode 100644 index 00000000000..f741a702c9f --- /dev/null +++ b/app/boards/shields/quefrency/quefrency.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: quefrency +name: Quefrency Rev. 1 +type: shield +url: https://github.com/keebio/quefrency-rev1-pcb +requires: [pro_micro] +features: + - keys + - encoder +siblings: + - quenfrency_left + - quenfrency_right diff --git a/app/boards/shields/reviung41/reviung41.zmk.yml b/app/boards/shields/reviung41/reviung41.zmk.yml new file mode 100644 index 00000000000..9783b9d94c0 --- /dev/null +++ b/app/boards/shields/reviung41/reviung41.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: reviung41 +name: REVIUNG41 +type: shield +url: https://github.com/gtips/reviung/tree/master/reviung41 +requires: [pro_micro] +features: + - keys diff --git a/app/boards/shields/romac/romac.zmk.yml b/app/boards/shields/romac/romac.zmk.yml new file mode 100644 index 00000000000..b2f95d87877 --- /dev/null +++ b/app/boards/shields/romac/romac.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: romac +name: Romac Macropad +type: shield +url: https://mechboards.co.uk/shop/kits/romac-macro-pad/ +requires: [pro_micro] +features: + - keys diff --git a/app/boards/shields/romac_plus/romac_plus.zmk.yml b/app/boards/shields/romac_plus/romac_plus.zmk.yml new file mode 100644 index 00000000000..b9984e5de9c --- /dev/null +++ b/app/boards/shields/romac_plus/romac_plus.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: romac_plus +name: Romac+ Macropad +type: shield +url: https://example.org +requires: [pro_micro] +features: + - keys + - encoder + - display diff --git a/app/boards/shields/sofle/sofle.zmk.yml b/app/boards/shields/sofle/sofle.zmk.yml new file mode 100644 index 00000000000..5f6f99c3fed --- /dev/null +++ b/app/boards/shields/sofle/sofle.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: sofle +name: Sofle +type: shield +url: https://github.com/josefadamcik/SofleKeyboard +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder +siblings: + - sofle_left + - sofle_right diff --git a/app/boards/shields/splitreus62/splitreus62.zmk.yml b/app/boards/shields/splitreus62/splitreus62.zmk.yml new file mode 100644 index 00000000000..b1ee991cb53 --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: splitreus62 +name: Splitreus62 +type: shield +url: https://github.com/Na-Cly/splitreus62 +requires: [pro_micro] +features: + - keys +siblings: + - splitreus62_left + - splitreus62_right diff --git a/app/boards/shields/tg4x/tg4x.zmk.yml b/app/boards/shields/tg4x/tg4x.zmk.yml new file mode 100644 index 00000000000..ec7c72fb3ad --- /dev/null +++ b/app/boards/shields/tg4x/tg4x.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: tg4x +name: TG4x +type: shield +url: https://github.com/MythosMann/tg4x +requires: [pro_micro] +features: + - keys diff --git a/app/boards/shields/tidbit/tidbit.zmk.yml b/app/boards/shields/tidbit/tidbit.zmk.yml new file mode 100644 index 00000000000..393effb929d --- /dev/null +++ b/app/boards/shields/tidbit/tidbit.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: tidbit +name: Tidbit Numpad +type: shield +url: https://nullbits.co/tidbit/ +requires: [pro_micro] +features: + - keys + - encoder + - display From 7d65539735d2d224f982dd14f85bedceba3bda47 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Sep 2021 04:55:46 +0000 Subject: [PATCH 0125/1130] fix(docs): Deploy when boards/shields change. --- docs/netlify.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/netlify.toml b/docs/netlify.toml index 37f077e58b4..9b0fd7270aa 100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@ -1,3 +1,6 @@ +[build] + ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../app/boards/" + [[redirects]] from = "/community/discord/invite" to = "https://discord.gg/sycytVQ" From 0c3f1309c619a619fc466e4204f0ed73ff8dd21a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Sep 2021 05:11:25 +0000 Subject: [PATCH 0126/1130] refactor(boards): Add metadata for boards. * Standalone and pro-micro format board metadata added. --- app/boards/arm/bdn9/bdn9_rev2.yml | 11 +++++++++++ app/boards/arm/bluemicro840/bluemicro840_v1.zmk.yml | 10 ++++++++++ app/boards/arm/nice60/nice60.zmk.yml | 12 ++++++++++++ app/boards/arm/nice_nano/nice_nano.zmk.yml | 10 ++++++++++ app/boards/arm/nice_nano/nice_nano_v2.zmk.yml | 10 ++++++++++ app/boards/arm/planck/planck_rev6.zmk.yml | 10 ++++++++++ app/boards/arm/proton_c/proton_c.zmk.yml | 9 +++++++++ 7 files changed, 72 insertions(+) create mode 100644 app/boards/arm/bdn9/bdn9_rev2.yml create mode 100644 app/boards/arm/bluemicro840/bluemicro840_v1.zmk.yml create mode 100644 app/boards/arm/nice60/nice60.zmk.yml create mode 100644 app/boards/arm/nice_nano/nice_nano.zmk.yml create mode 100644 app/boards/arm/nice_nano/nice_nano_v2.zmk.yml create mode 100644 app/boards/arm/planck/planck_rev6.zmk.yml create mode 100644 app/boards/arm/proton_c/proton_c.zmk.yml diff --git a/app/boards/arm/bdn9/bdn9_rev2.yml b/app/boards/arm/bdn9/bdn9_rev2.yml new file mode 100644 index 00000000000..01ebd3e0b5c --- /dev/null +++ b/app/boards/arm/bdn9/bdn9_rev2.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: bdn9_rev2 +name: BDN9 Rev2 +type: board +arch: arm +features: + - keys + - encoder +outputs: + - usb +url: https://keeb.io/products/bdn9-rev-2-3x3-9-key-macropad-rotary-encoder-and-rgb diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.zmk.yml b/app/boards/arm/bluemicro840/bluemicro840_v1.zmk.yml new file mode 100644 index 00000000000..c1d3c6b9463 --- /dev/null +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: bluemicro840_v1 +name: BlueMicro840 v1 +type: board +arch: arm +outputs: + - usb + - ble +url: https://nrf52.jpconstantineau.com/docs/bluemicro840_v1/ +exposes: [pro_micro] diff --git a/app/boards/arm/nice60/nice60.zmk.yml b/app/boards/arm/nice60/nice60.zmk.yml new file mode 100644 index 00000000000..cbcc8130cf0 --- /dev/null +++ b/app/boards/arm/nice60/nice60.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: nice60 +name: nice!60 +type: board +arch: arm +features: + - keys + - underglow +outputs: + - usb + - ble +url: https://nicekeyboards.com/nice-60 diff --git a/app/boards/arm/nice_nano/nice_nano.zmk.yml b/app/boards/arm/nice_nano/nice_nano.zmk.yml new file mode 100644 index 00000000000..1799c0def49 --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nice_nano +name: nice!nano v1 +type: board +arch: arm +outputs: + - usb + - ble +url: https://nicekeyboards.com/nice-nano +exposes: [pro_micro] diff --git a/app/boards/arm/nice_nano/nice_nano_v2.zmk.yml b/app/boards/arm/nice_nano/nice_nano_v2.zmk.yml new file mode 100644 index 00000000000..3d1149a0c25 --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano_v2.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nice_nano_v2 +name: nice!nano v2 +type: board +arch: arm +outputs: + - usb + - ble +url: https://nicekeyboards.com/nice-nano +exposes: [pro_micro] diff --git a/app/boards/arm/planck/planck_rev6.zmk.yml b/app/boards/arm/planck/planck_rev6.zmk.yml new file mode 100644 index 00000000000..56c0000671f --- /dev/null +++ b/app/boards/arm/planck/planck_rev6.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: planck_rev6 +name: Planck Rev6 +type: board +arch: arm +features: + - keys +outputs: + - usb +url: https://olkb.com/collections/planck diff --git a/app/boards/arm/proton_c/proton_c.zmk.yml b/app/boards/arm/proton_c/proton_c.zmk.yml new file mode 100644 index 00000000000..682783ce606 --- /dev/null +++ b/app/boards/arm/proton_c/proton_c.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: proton_c +name: QMK Proton-C +type: board +arch: arm +outputs: + - usb +url: https://qmk.fm/proton-c/ +exposes: [pro_micro] From 7bf68f2a0024accaeed3ba1abdbe075b2d29ccb2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Sep 2021 05:40:36 +0000 Subject: [PATCH 0127/1130] refactor(docs): Remove build.yml for new shield. * No longer recommending that all new shields get added to the build matrix in `build.yml`, so we avoid conflicts. --- docs/docs/development/new-shield.md | 34 ----------------------------- 1 file changed, 34 deletions(-) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 2ed2b12bf51..83b1fc62eec 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -509,37 +509,3 @@ Please have a look at documentation specific to Further testing your keyboard shield without altering the root keymap file can be done with the use of `-DZMK_CONFIG` in your `west build` command, shown [here](build-flash.md#building-from-zmk-config-folder) ::: - -## Updating `build.yml` - -Before publishing your shield to the public via a PR, navigate to `build.yml` found in `.github/workflows` and add your shield to the appropriate list. An example edit to `build.yml` is shown below. - -``` -jobs: - build: - runs-on: ubuntu-latest - name: Build Test - strategy: - matrix: - board: [proton_c, nice_nano, bluemicro840_v1, nrfmicro_13] - shield: - - corne_left - - corne_right - - kyria_left - - kyria_right - - lily58_left - - lily58_right - - iris_left - - iris_right - - romac - - - - - - - include: - - board: proton_c - shield: clueboard_california -``` - -:::note -Notice that both the left and right halves of a split board need to be added to the list of shields for proper error checking. -:::note From 39eb80562d5174e42c8a184e0261674888ac5fd7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Sep 2021 14:29:51 +0000 Subject: [PATCH 0128/1130] feat(metadata): Add MakerDiary nRF52840 M.2 interconnect * Add interconnect details. * Add m60 and nrf52840_m2 metadata files. --- app/boards/arm/nrf52840_m2/nrf52840_m2.zmk.yml | 10 ++++++++++ .../makerdiary_nrf52840_m2.zmk.yml | 10 ++++++++++ app/boards/shields/m60/m60.zmk.yml | 8 ++++++++ 3 files changed, 28 insertions(+) create mode 100644 app/boards/arm/nrf52840_m2/nrf52840_m2.zmk.yml create mode 100644 app/boards/interconnects/makerdiary_nrf52840_m2/makerdiary_nrf52840_m2.zmk.yml create mode 100644 app/boards/shields/m60/m60.zmk.yml diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2.zmk.yml b/app/boards/arm/nrf52840_m2/nrf52840_m2.zmk.yml new file mode 100644 index 00000000000..2a4ccb0cec0 --- /dev/null +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrf52840_m2 +name: nRF52840 M.2 Module +type: board +arch: arm +outputs: + - usb + - ble +url: https://wiki.makerdiary.com/nrf52840-m2/ +exposes: [makerdiary_nrf52840_m2] diff --git a/app/boards/interconnects/makerdiary_nrf52840_m2/makerdiary_nrf52840_m2.zmk.yml b/app/boards/interconnects/makerdiary_nrf52840_m2/makerdiary_nrf52840_m2.zmk.yml new file mode 100644 index 00000000000..890c5dedf4b --- /dev/null +++ b/app/boards/interconnects/makerdiary_nrf52840_m2/makerdiary_nrf52840_m2.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: makerdiary_nrf52840_m2 +name: MakerDiary nRF52840 M.2 +type: interconnect +url: https://wiki.makerdiary.com/nrf52840-m2/ +manufacturer: MakerDiary +description: | + The MakerDiary nRF52840 M.2 module is a module using the M.2/NGFF form factor to expose a + large number of GPIO pins, allowing use of a variety of peripherals such using I2C, SPI, + etc. diff --git a/app/boards/shields/m60/m60.zmk.yml b/app/boards/shields/m60/m60.zmk.yml new file mode 100644 index 00000000000..8050df45629 --- /dev/null +++ b/app/boards/shields/m60/m60.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: m60 +name: MakerDiary m60 +type: shield +url: https://makerdiary.com/pages/m60-mechanical-keyboard +requires: [makerdiary_nrf52840_m2] +features: + - keys From c7e513634d2425dbdf21ccd693872301f80cad65 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Sep 2021 16:33:39 +0000 Subject: [PATCH 0129/1130] feat(metadata): Add YAML check/format npm scripts. --- .../hardware-metadata-validation.yml | 16 +++++++-- app/.gitignore | 1 + app/.prettierrc.js | 3 ++ app/package-lock.json | 36 +++++++++++++++++++ app/package.json | 23 ++++++++++++ 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 app/.prettierrc.js create mode 100644 app/package-lock.json create mode 100644 app/package.json diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index 3972ed8109c..1318b4bd22f 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -15,6 +15,17 @@ on: - "app/scripts/west_commands/metadata.py" jobs: + check-metadata-format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/checkout@v2 + - uses: bahmutov/npm-install@v1 + with: + working-directory: app + - name: Prettier Check + run: npm run prettier:check + working-directory: app validate-metadata: runs-on: ubuntu-latest container: @@ -30,6 +41,5 @@ jobs: - name: Export Zephyr CMake package (west zephyr-export) run: west zephyr-export - name: Validate Hardware Metadata - run: | - cd app - west metadata check + working-directory: app + run: west metadata check diff --git a/app/.gitignore b/app/.gitignore index 567609b1234..3e2e84b087a 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,2 @@ build/ +node_modules/ diff --git a/app/.prettierrc.js b/app/.prettierrc.js new file mode 100644 index 00000000000..806328d9234 --- /dev/null +++ b/app/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + endOfLine: "auto", +}; diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 00000000000..afd730a51b1 --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,36 @@ +{ + "name": "zmkfirmware", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "zmkfirmware", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "prettier": "^2.4.0" + } + }, + "node_modules/prettier": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + } + }, + "dependencies": { + "prettier": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "dev": true + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 00000000000..e75d96956cc --- /dev/null +++ b/app/package.json @@ -0,0 +1,23 @@ +{ + "name": "zmkfirmware", + "version": "1.0.0", + "description": "ZMK Firmware tooling", + "private": "true", + "scripts": { + "prettier:check": "prettier --check boards/**/*.yml", + "prettier:format": "prettier --write boards/**/*.yml" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/zmkfirware/zmk.git" + }, + "author": "ZMK Contributors", + "license": "MIT", + "bugs": { + "url": "https://github.com/zmkfirware/zmk/issues" + }, + "homepage": "https://zmk.dev/", + "devDependencies": { + "prettier": "^2.4.0" + } +} \ No newline at end of file From 2f0ad4cc8c7c4a4b0344206bce638a8241b85b95 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 11 Sep 2021 05:16:40 +0000 Subject: [PATCH 0130/1130] fix(setup): Fix setup.ps1 to check Get-Acl exists * `Get-Acl` not found in Linux Powershell version, so only call it if it exists. --- docs/src/templates/setup.ps1.mustache | 35 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index 0d2b4c5014c..12fd545e2b5 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -58,17 +58,30 @@ catch [System.Management.Automation.CommandNotFoundException] { Test-Git-Config -Option "user.name" -ErrMsg "Git username not set!`nRun: git config --global user.name 'My Name'" Test-Git-Config -Option "user.email" -ErrMsg "Git email not set!`nRun: git config --global user.email 'example@myemail.com'" -$permission = (Get-Acl $pwd).Access | -?{$_.IdentityReference -match $env:UserName ` - -and $_.FileSystemRights -match "FullControl" ` - -or $_.FileSystemRights -match "Write" } | - - Select IdentityReference,FileSystemRights - -If (-Not $permission){ - Write-Host "Sorry, you do not have write permissions in this directory." - Write-Host "Please try running this script again from a directory that you do have write permissions for." - exit 1 +function Test-CommandExists { + param ($command) + + $oldPreference = $ErrorActionPreference + $ErrorActionPreference = ‘stop’ + + try { + if(Get-Command $command){ return $true } + } Catch { return $false } + Finally { $ErrorActionPreference=$oldPreference } +} + +if (Test-CommandExists Get-Acl) { + $permission = (Get-Acl $pwd).Access | + ?{$_.IdentityReference -match $env:UserName ` + -and $_.FileSystemRights -match "FullControl" ` + -or $_.FileSystemRights -match "Write" } | + Select IdentityReference,FileSystemRights + + If (-Not $permission){ + Write-Host "Sorry, you do not have write permissions in this directory." + Write-Host "Please try running this script again from a directory that you do have write permissions for." + exit 1 + } } $repo_path = "https://github.com/zmkfirmware/zmk-config-split-template.git" From 647110e5e5adef98a133f5f65b212110e614309b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 28 Jan 2021 22:54:44 -0500 Subject: [PATCH 0131/1130] feat(drivers): Add mcp23017 driver based on upstream mcp23s17 one. * Upstream Zephyr has in progress driver, so doing this locally here, until we can move over to that driver. --- app/drivers/CMakeLists.txt | 3 +- app/drivers/Kconfig | 3 +- app/drivers/gpio/CMakeLists.txt | 8 + app/drivers/gpio/Kconfig | 1 + app/drivers/gpio/Kconfig.mcp23017 | 21 ++ app/drivers/gpio/gpio_mcp23017.c | 332 ++++++++++++++++++ app/drivers/gpio/gpio_mcp23017.h | 86 +++++ .../dts/bindings/gpio/microchip,mcp23017.yaml | 29 ++ 8 files changed, 481 insertions(+), 2 deletions(-) create mode 100644 app/drivers/gpio/CMakeLists.txt create mode 100644 app/drivers/gpio/Kconfig create mode 100644 app/drivers/gpio/Kconfig.mcp23017 create mode 100644 app/drivers/gpio/gpio_mcp23017.c create mode 100644 app/drivers/gpio/gpio_mcp23017.h create mode 100644 app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml diff --git a/app/drivers/CMakeLists.txt b/app/drivers/CMakeLists.txt index c1625f2fdea..c58ada483d5 100644 --- a/app/drivers/CMakeLists.txt +++ b/app/drivers/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT +add_subdirectory(gpio) add_subdirectory(kscan) add_subdirectory(sensor) -add_subdirectory(display) \ No newline at end of file +add_subdirectory(display) diff --git a/app/drivers/Kconfig b/app/drivers/Kconfig index 5bcc522d4c0..c57ed3347c9 100644 --- a/app/drivers/Kconfig +++ b/app/drivers/Kconfig @@ -1,6 +1,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT +rsource "gpio/Kconfig" rsource "kscan/Kconfig" rsource "sensor/Kconfig" -rsource "display/Kconfig" \ No newline at end of file +rsource "display/Kconfig" diff --git a/app/drivers/gpio/CMakeLists.txt b/app/drivers/gpio/CMakeLists.txt new file mode 100644 index 00000000000..b879b2386d8 --- /dev/null +++ b/app/drivers/gpio/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +zephyr_library_named(zmk__drivers__gpio) +zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) + +zephyr_library_sources_ifdef(CONFIG_GPIO_MCP23017 gpio_mcp23017.c) +zephyr_library_sources_ifndef(CONFIG_GPIO_MCP23017 ${ZEPHYR_BASE}/misc/empty_file.c) diff --git a/app/drivers/gpio/Kconfig b/app/drivers/gpio/Kconfig new file mode 100644 index 00000000000..09f9609f171 --- /dev/null +++ b/app/drivers/gpio/Kconfig @@ -0,0 +1 @@ +rsource "Kconfig.mcp23017" diff --git a/app/drivers/gpio/Kconfig.mcp23017 b/app/drivers/gpio/Kconfig.mcp23017 new file mode 100644 index 00000000000..4953b924cf1 --- /dev/null +++ b/app/drivers/gpio/Kconfig.mcp23017 @@ -0,0 +1,21 @@ +# MCP23017 GPIO configuration options + +# Copyright (c) 2021 Pete Johanson +# SPDX-License-Identifier: Apache-2.0 + +menuconfig GPIO_MCP23017 + bool "MCP23017 I2C-based GPIO chip" + depends on I2C + select HAS_DTS_GPIO + help + Enable driver for MCP23017 I2C-based GPIO chip. + +if GPIO_MCP23017 + +config GPIO_MCP23017_INIT_PRIORITY + int "Init priority" + default 75 + help + Device driver initialization priority. + +endif #GPIO_MCP23017 diff --git a/app/drivers/gpio/gpio_mcp23017.c b/app/drivers/gpio/gpio_mcp23017.c new file mode 100644 index 00000000000..eb38ce50788 --- /dev/null +++ b/app/drivers/gpio/gpio_mcp23017.c @@ -0,0 +1,332 @@ +/* + * Copyright (c) 2020 Geanix ApS + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define DT_DRV_COMPAT microchip_mcp23017 + +/** + * @file Driver for MCP23017 SPI-based GPIO driver. + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include "gpio_mcp23017.h" + +#define LOG_LEVEL CONFIG_GPIO_LOG_LEVEL +#include +LOG_MODULE_REGISTER(gpio_mcp23017); + +/** + * @brief Read both port 0 and port 1 registers of certain register function. + * + * Given the register in reg, read the pair of port 0 and port 1. + * + * @param dev Device struct of the MCP23017. + * @param reg Register to read (the PORTA of the pair of registers). + * @param buf Buffer to read data into. + * + * @return 0 if successful, failed otherwise. + */ +static int read_port_regs(const struct device *dev, uint8_t reg, uint16_t *buf) { + const struct mcp23017_config *const config = dev->config; + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + int ret; + uint16_t port_data; + + uint8_t addr = config->slave; + + ret = i2c_burst_read(drv_data->i2c, addr, reg, (uint8_t *)&port_data, sizeof(port_data)); + if (ret) { + LOG_DBG("i2c_write_read FAIL %d\n", ret); + return ret; + } + + *buf = sys_le16_to_cpu(port_data); + + LOG_DBG("MCP23017: Read: REG[0x%X] = 0x%X, REG[0x%X] = 0x%X", reg, (*buf & 0xFF), (reg + 1), + (*buf >> 8)); + + return 0; +} + +/** + * @brief Write both port 0 and port 1 registers of certain register function. + * + * Given the register in reg, write the pair of port 0 and port 1. + * + * @param dev Device struct of the MCP23017. + * @param reg Register to write into (the PORTA of the pair of registers). + * @param buf Buffer to write data from. + * + * @return 0 if successful, failed otherwise. + */ +static int write_port_regs(const struct device *dev, uint8_t reg, uint16_t value) { + const struct mcp23017_config *const config = dev->config; + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + int ret; + uint16_t port_data; + + LOG_DBG("MCP23017: Write: REG[0x%X] = 0x%X, REG[0x%X] = 0x%X", reg, (value & 0xFF), (reg + 1), + (value >> 8)); + + port_data = sys_cpu_to_le16(value); + + ret = i2c_burst_write(drv_data->i2c, config->slave, reg, (uint8_t *)&port_data, + sizeof(port_data)); + if (ret) { + LOG_DBG("i2c_write FAIL %d\n", ret); + return ret; + } + + return 0; +} + +/** + * @brief Setup the pin direction (input or output) + * + * @param dev Device struct of the MCP23017 + * @param pin The pin number + * @param flags Flags of pin or port + * + * @return 0 if successful, failed otherwise + */ +static int setup_pin_dir(const struct device *dev, uint32_t pin, int flags) { + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + uint16_t *dir = &drv_data->reg_cache.iodir; + uint16_t *output = &drv_data->reg_cache.gpio; + int ret; + + if ((flags & GPIO_OUTPUT) != 0U) { + if ((flags & GPIO_OUTPUT_INIT_HIGH) != 0U) { + *output |= BIT(pin); + } else if ((flags & GPIO_OUTPUT_INIT_LOW) != 0U) { + *output &= ~BIT(pin); + } + *dir &= ~BIT(pin); + } else { + *dir |= BIT(pin); + } + + ret = write_port_regs(dev, REG_GPIO_PORTA, *output); + if (ret != 0) { + return ret; + } + + ret = write_port_regs(dev, REG_IODIR_PORTA, *dir); + + return ret; +} + +/** + * @brief Setup the pin pull up/pull down status + * + * @param dev Device struct of the MCP23017 + * @param pin The pin number + * @param flags Flags of pin or port + * + * @return 0 if successful, failed otherwise + */ +static int setup_pin_pullupdown(const struct device *dev, uint32_t pin, int flags) { + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + uint16_t port; + int ret; + + /* Setup pin pull up or pull down */ + port = drv_data->reg_cache.gppu; + + /* pull down == 0, pull up == 1 */ + if ((flags & GPIO_PULL_DOWN) != 0U) { + return -ENOTSUP; + } + + WRITE_BIT(port, pin, (flags & GPIO_PULL_UP) != 0U); + + ret = write_port_regs(dev, REG_GPPU_PORTA, port); + if (ret == 0) { + drv_data->reg_cache.gppu = port; + } + + return ret; +} + +static int mcp23017_config(const struct device *dev, gpio_pin_t pin, gpio_flags_t flags) { + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + int ret; + + /* Can't do SPI bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + if ((flags & GPIO_OPEN_DRAIN) != 0U) { + ret = -ENOTSUP; + goto done; + }; + + ret = setup_pin_dir(dev, pin, flags); + if (ret) { + LOG_ERR("MCP23017: error setting pin direction (%d)", ret); + goto done; + } + + ret = setup_pin_pullupdown(dev, pin, flags); + if (ret) { + LOG_ERR("MCP23017: error setting pin pull up/down (%d)", ret); + goto done; + } + +done: + k_sem_give(&drv_data->lock); + return ret; +} + +static int mcp23017_port_get_raw(const struct device *dev, uint32_t *value) { + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + uint16_t buf; + int ret; + + /* Can't do SPI bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + ret = read_port_regs(dev, REG_GPIO_PORTA, &buf); + if (ret != 0) { + goto done; + } + + *value = buf; + +done: + k_sem_give(&drv_data->lock); + return ret; +} + +static int mcp23017_port_set_masked_raw(const struct device *dev, uint32_t mask, uint32_t value) { + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + uint16_t buf; + int ret; + + /* Can't do SPI bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + buf = drv_data->reg_cache.gpio; + buf = (buf & ~mask) | (mask & value); + + ret = write_port_regs(dev, REG_GPIO_PORTA, buf); + if (ret == 0) { + drv_data->reg_cache.gpio = buf; + } + + k_sem_give(&drv_data->lock); + + return ret; +} + +static int mcp23017_port_set_bits_raw(const struct device *dev, uint32_t mask) { + return mcp23017_port_set_masked_raw(dev, mask, mask); +} + +static int mcp23017_port_clear_bits_raw(const struct device *dev, uint32_t mask) { + return mcp23017_port_set_masked_raw(dev, mask, 0); +} + +static int mcp23017_port_toggle_bits(const struct device *dev, uint32_t mask) { + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + uint16_t buf; + int ret; + + /* Can't do SPI bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + buf = drv_data->reg_cache.gpio; + buf ^= mask; + + ret = write_port_regs(dev, REG_GPIO_PORTA, buf); + if (ret == 0) { + drv_data->reg_cache.gpio = buf; + } + + k_sem_give(&drv_data->lock); + + return ret; +} + +static int mcp23017_pin_interrupt_configure(const struct device *dev, gpio_pin_t pin, + enum gpio_int_mode mode, enum gpio_int_trig trig) { + return -ENOTSUP; +} + +static const struct gpio_driver_api api_table = { + .pin_configure = mcp23017_config, + .port_get_raw = mcp23017_port_get_raw, + .port_set_masked_raw = mcp23017_port_set_masked_raw, + .port_set_bits_raw = mcp23017_port_set_bits_raw, + .port_clear_bits_raw = mcp23017_port_clear_bits_raw, + .port_toggle_bits = mcp23017_port_toggle_bits, + .pin_interrupt_configure = mcp23017_pin_interrupt_configure, +}; + +/** + * @brief Initialization function of MCP23017 + * + * @param dev Device struct + * @return 0 if successful, failed otherwise. + */ +static int mcp23017_init(const struct device *dev) { + const struct mcp23017_config *const config = dev->config; + struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; + + drv_data->i2c = device_get_binding((char *)config->i2c_dev_name); + if (!drv_data->i2c) { + LOG_DBG("Unable to get i2c device"); + return -ENODEV; + } + + k_sem_init(&drv_data->lock, 1, 1); + + return 0; +} + +#define MCP23017_INIT(inst) \ + static struct mcp23017_config mcp23017_##inst##_config = { \ + .i2c_dev_name = DT_INST_BUS_LABEL(inst), \ + .slave = DT_INST_REG_ADDR(inst), \ + \ + }; \ + \ + static struct mcp23017_drv_data mcp23017_##inst##_drvdata = { \ + /* Default for registers according to datasheet */ \ + .reg_cache.iodir = 0xFFFF, .reg_cache.ipol = 0x0, .reg_cache.gpinten = 0x0, \ + .reg_cache.defval = 0x0, .reg_cache.intcon = 0x0, .reg_cache.iocon = 0x0, \ + .reg_cache.gppu = 0x0, .reg_cache.intf = 0x0, .reg_cache.intcap = 0x0, \ + .reg_cache.gpio = 0x0, .reg_cache.olat = 0x0, \ + }; \ + \ + /* This has to init after SPI master */ \ + DEVICE_DT_INST_DEFINE(inst, mcp23017_init, device_pm_control_nop, &mcp23017_##inst##_drvdata, \ + &mcp23017_##inst##_config, POST_KERNEL, \ + CONFIG_GPIO_MCP23017_INIT_PRIORITY, &api_table); + +DT_INST_FOREACH_STATUS_OKAY(MCP23017_INIT) diff --git a/app/drivers/gpio/gpio_mcp23017.h b/app/drivers/gpio/gpio_mcp23017.h new file mode 100644 index 00000000000..026565cd00f --- /dev/null +++ b/app/drivers/gpio/gpio_mcp23017.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020 Geanix ApS, Pete Johanson + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file Header file for the MCP23017 driver. + */ + +#ifndef ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ +#define ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ + +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Register definitions */ +#define REG_IODIR_PORTA 0x00 +#define REG_IODIR_PORTB 0x01 +#define REG_IPOL_PORTA 0x02 +#define REG_IPOL_PORTB 0x03 +#define REG_GPINTEN_PORTA 0x04 +#define REG_GPINTEN_PORTB 0x05 +#define REG_DEFVAL_PORTA 0x06 +#define REG_DEFVAL_PORTB 0x07 +#define REG_INTCON_PORTA 0x08 +#define REG_INTCON_PORTB 0x09 +#define REG_GPPU_PORTA 0x0C +#define REG_GPPU_PORTB 0x0D +#define REG_INTF_PORTA 0x0E +#define REG_INTF_PORTB 0x0F +#define REG_INTCAP_PORTA 0x10 +#define REG_INTCAP_PORTB 0x11 +#define REG_GPIO_PORTA 0x12 +#define REG_GPIO_PORTB 0x13 +#define REG_OLAT_PORTA 0x14 +#define REG_OLAT_PORTB 0x15 + +#define MCP23017_ADDR 0x40 +#define MCP23017_READBIT 0x01 + +/** Configuration data */ +struct mcp23017_config { + /* gpio_driver_data needs to be first */ + struct gpio_driver_config common; + + const char *const i2c_dev_name; + const uint16_t slave; +}; + +/** Runtime driver data */ +struct mcp23017_drv_data { + /* gpio_driver_data needs to be first */ + struct gpio_driver_config data; + + /** Master SPI device */ + const struct device *i2c; + + struct k_sem lock; + + struct { + uint16_t iodir; + uint16_t ipol; + uint16_t gpinten; + uint16_t defval; + uint16_t intcon; + uint16_t iocon; + uint16_t gppu; + uint16_t intf; + uint16_t intcap; + uint16_t gpio; + uint16_t olat; + } reg_cache; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ */ diff --git a/app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml b/app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml new file mode 100644 index 00000000000..75e19c49745 --- /dev/null +++ b/app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml @@ -0,0 +1,29 @@ +# +# Copyright (c) 2020 Geanix ApS +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: > + This is a representation of the Microchip MCP23017 I2C Gpio Expander. + +compatible: "microchip,mcp23017" + +include: [gpio-controller.yaml, i2c-device.yaml] + +properties: + label: + required: true + + "#gpio-cells": + const: 2 + + ngpios: + type: int + required: true + const: 16 + description: Number of gpios supported + +gpio-cells: + - pin + - flags From e42590a049f256953ba7edfa4d7cd7f8280731b9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 13 Sep 2021 22:18:58 -0400 Subject: [PATCH 0132/1130] feat(board): Add Ferris 0.2 boards * Onboard stm32f072 with mcp23018 IO expander. * No underglow support yet. * Miryoku inspired default layout. --- app/boards/arm/ferris/Kconfig.board | 8 ++ app/boards/arm/ferris/Kconfig.defconfig | 23 +++ app/boards/arm/ferris/README.md | 16 +++ app/boards/arm/ferris/board.cmake | 7 + app/boards/arm/ferris/ferris_rev02.dts | 139 +++++++++++++++++++ app/boards/arm/ferris/ferris_rev02.keymap | 79 +++++++++++ app/boards/arm/ferris/ferris_rev02.yaml | 12 ++ app/boards/arm/ferris/ferris_rev02.zmk.yml | 10 ++ app/boards/arm/ferris/ferris_rev02_defconfig | 43 ++++++ 9 files changed, 337 insertions(+) create mode 100644 app/boards/arm/ferris/Kconfig.board create mode 100644 app/boards/arm/ferris/Kconfig.defconfig create mode 100644 app/boards/arm/ferris/README.md create mode 100644 app/boards/arm/ferris/board.cmake create mode 100644 app/boards/arm/ferris/ferris_rev02.dts create mode 100644 app/boards/arm/ferris/ferris_rev02.keymap create mode 100644 app/boards/arm/ferris/ferris_rev02.yaml create mode 100644 app/boards/arm/ferris/ferris_rev02.zmk.yml create mode 100644 app/boards/arm/ferris/ferris_rev02_defconfig diff --git a/app/boards/arm/ferris/Kconfig.board b/app/boards/arm/ferris/Kconfig.board new file mode 100644 index 00000000000..ad96271ab3f --- /dev/null +++ b/app/boards/arm/ferris/Kconfig.board @@ -0,0 +1,8 @@ +# Ferris board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_FERRIS + bool "Ferris rev 0.2" + depends on SOC_STM32F072XB diff --git a/app/boards/arm/ferris/Kconfig.defconfig b/app/boards/arm/ferris/Kconfig.defconfig new file mode 100644 index 00000000000..23bc8a1eb20 --- /dev/null +++ b/app/boards/arm/ferris/Kconfig.defconfig @@ -0,0 +1,23 @@ +# Ferris board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_FERRIS + +config BOARD + default "ferris_rev02" + +config ZMK_KEYBOARD_NAME + default "Ferris rev 0.2" + +config ZMK_USB + default y + +config ZMK_KSCAN_MATRIX_POLLING + default y + +config ZMK_KSCAN_COMPOSITE_DRIVER + default y + +endif # BOARD_FERRIS diff --git a/app/boards/arm/ferris/README.md b/app/boards/arm/ferris/README.md new file mode 100644 index 00000000000..2793c6fac4e --- /dev/null +++ b/app/boards/arm/ferris/README.md @@ -0,0 +1,16 @@ +# Building ZMK for the Ferris 0.2 + + +## Standard Build + +``` +west build -p -d build/ferris --board ferris_rev02 +``` + +## Flashing + +`west` can be used to flash the board directly. Press the reset button once, and run: + +``` +west flash -d build/ferris +``` diff --git a/app/boards/arm/ferris/board.cmake b/app/boards/arm/ferris/board.cmake new file mode 100644 index 00000000000..4f430e12b0e --- /dev/null +++ b/app/boards/arm/ferris/board.cmake @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F072CB" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts new file mode 100644 index 00000000000..848760fa757 --- /dev/null +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include + +#include + +/ { + model = "Ferris rev0.2"; + compatible = "ferris,rev02", "st,stm32f072"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan; + zmk,matrix_transform = &transform; + /* TODO: Enable once we support the IC for underglow + zmk,underglow = &led_strip; + */ + }; + + transform: transform { + compatible = "zmk,matrix-transform"; + rows = <4>; + columns = <10>; + + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) + >; + }; + + kscan: kscan { + compatible = "zmk,kscan-composite"; + label = "KSCAN"; + rows = <4>; + columns = <10>; + + left { + kscan = <&kscan_left>; + }; + + right { + kscan = <&kscan_right>; + column-offset = <5>; + }; + }; + + kscan_left: kscan_left { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN_LEFT"; + + diode-direction = "col2row"; + + col-gpios + = <&gpiob 8 (GPIO_ACTIVE_HIGH)> + , <&gpiob 4 (GPIO_ACTIVE_HIGH)> + , <&gpiob 3 (GPIO_ACTIVE_HIGH)> + , <&gpioa 15 (GPIO_ACTIVE_HIGH)> + , <&gpioa 14 (GPIO_ACTIVE_HIGH)> + ; + row-gpios + = <&gpiob 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + kscan_right: kscan_right { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN_RIGHT"; + + diode-direction = "row2col"; + + col-gpios + = <&right_io 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + row-gpios + = <&right_io 8 (GPIO_ACTIVE_LOW)> + , <&right_io 9 (GPIO_ACTIVE_LOW)> + , <&right_io 10 (GPIO_ACTIVE_LOW)> + , <&right_io 11 (GPIO_ACTIVE_LOW)> + ; + }; +}; + +&i2c2 { + pinctrl-0 = <&i2c2_scl_pb10 &i2c2_sda_pb11>; + status = "okay"; + clock-frequency = ; + + right_io: mcp23017@20 { + compatible = "microchip,mcp23017"; + status = "okay"; + gpio-controller; + reg = <0x20>; + label = "RIGHT_IO"; + #gpio-cells = <2>; + ngpios = <16>; + }; +}; + +&usb { + status = "okay"; +}; + +&rtc { + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http: //docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 128Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0001e800 0x00001800>; + }; + }; +}; diff --git a/app/boards/arm/ferris/ferris_rev02.keymap b/app/boards/arm/ferris/ferris_rev02.keymap new file mode 100644 index 00000000000..18fad42328e --- /dev/null +++ b/app/boards/arm/ferris/ferris_rev02.keymap @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define NAV_L 1 +#define OTHER_L 2 +#define NUM_L 3 +#define SYM_L 4 + +// Using layer taps on thumbs, having quick tap as well helps w/ repeating space/backspace +< { quick_tap_ms = <200>; }; + +/ { + behaviors { + hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "homerow mods"; + #binding-cells = <2>; + tapping_term_ms = <200>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp H &hm RSHFT J &hm RCTRL K &hm LALT L &hm LGUI QUOT + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH + < NAV_L TAB &kp ENTER < NUM_L SPACE < SYM_L BKSP + >; + }; + + nav_layer { + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &kp LARW &kp DARW &kp UARW &kp RARW + &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_DN &kp PG_UP &kp END + &trans &trans &kp ESC &kp DEL + >; + }; + + other_layer { + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &kp HOME &trans &trans &trans + &trans &trans &trans &trans + >; + }; + + num_layer { + bindings = < + &kp LBKT &kp N7 &kp N8 &kp N9 &kp RBKT &trans &trans &trans &trans &trans + &kp SEMI &kp N4 &kp N5 &kp N6 &kp EQUAL &trans &trans &trans &trans &trans + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp BSLH &trans &trans &trans &trans &trans + &kp N0 &kp MINUS &trans &trans + >; + }; + + sym_layer { + bindings = < + &kp LBRC &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp RBRC &trans &trans &trans &trans &trans + &kp COLON &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp PLUS &trans &trans &trans &trans &trans + &kp TILDE &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(BSLH) &trans &trans &trans &trans &trans + &kp LS(N0) &kp UNDER &trans &trans + >; + }; + }; +}; diff --git a/app/boards/arm/ferris/ferris_rev02.yaml b/app/boards/arm/ferris/ferris_rev02.yaml new file mode 100644 index 00000000000..f4cbdcaf72c --- /dev/null +++ b/app/boards/arm/ferris/ferris_rev02.yaml @@ -0,0 +1,12 @@ +identifier: ferris_rev02 +name: Ferris 0.2 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 40 +supported: + - switches + - underglow diff --git a/app/boards/arm/ferris/ferris_rev02.zmk.yml b/app/boards/arm/ferris/ferris_rev02.zmk.yml new file mode 100644 index 00000000000..da3a7f53469 --- /dev/null +++ b/app/boards/arm/ferris/ferris_rev02.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: ferris_rev02 +name: Ferris 0.2 +type: board +arch: arm +features: + - keys +outputs: + - usb +url: https://github.com/pierrechevalier83/ferris/tree/main/0.2 diff --git a/app/boards/arm/ferris/ferris_rev02_defconfig b/app/boards/arm/ferris/ferris_rev02_defconfig new file mode 100644 index 00000000000..99c0b3296fe --- /dev/null +++ b/app/boards/arm/ferris/ferris_rev02_defconfig @@ -0,0 +1,43 @@ +# SPDX-License-Identifier: MIT + +CONFIG_BOARD_FERRIS=y +CONFIG_SOC_SERIES_STM32F0X=y +CONFIG_SOC_STM32F072XB=y +# 48MHz system clock +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=48000000 + +# enable PINMUX +CONFIG_PINMUX=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable i2c +CONFIG_I2C=y + +# ZMK Settings +CONFIG_ZMK_USB=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=y +CONFIG_ZMK_KSCAN_COMPOSITE_DRIVER=y +CONFIG_ZMK_KSCAN_MATRIX_POLLING=y +CONFIG_USB_SELF_POWERED=n + +# Enable IO multiplexer +CONFIG_GPIO_MCP23017=y + +# Needed to reduce this to size that will fit on F072 +CONFIG_HEAP_MEM_POOL_SIZE=1024 + +# clock configuration +CONFIG_CLOCK_CONTROL=y + +# Clock configuration for Cube Clock control driver +CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y +# use HSI as PLL input +CONFIG_CLOCK_STM32_PLL_SRC_HSI=y +# produce 48MHz clock at PLL output +# CONFIG_CLOCK_STM32_PLL_PREDIV=1 +CONFIG_CLOCK_STM32_PLL_MULTIPLIER=6 +CONFIG_CLOCK_STM32_AHB_PRESCALER=1 +CONFIG_CLOCK_STM32_APB1_PRESCALER=1 +# CONFIG_CLOCK_STM32_APB2_PRESCALER=1 From c9a671d8d5f6144771e3835322ce421012c39375 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 2 Mar 2021 11:10:21 -0500 Subject: [PATCH 0133/1130] fix(kscan): Allow composite driver to handle missing children. For split keyboards using an IO expander over TRRS/i2c, if the right half isn't connected, we should be able to gracefully fallback to the left side still working. --- app/drivers/kscan/kscan_composite.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index 2aeb047c871..0d40c6fad10 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -41,7 +41,12 @@ static int kscan_composite_enable_callback(const struct device *dev) { for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - kscan_enable_callback(device_get_binding(cfg->label)); + const struct device *dev = device_get_binding(cfg->label); + if (!dev) { + LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label)); + continue; + } + kscan_enable_callback(dev); } return 0; } @@ -50,7 +55,12 @@ static int kscan_composite_disable_callback(const struct device *dev) { for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - kscan_disable_callback(device_get_binding(cfg->label)); + const struct device *dev = device_get_binding(cfg->label); + if (!dev) { + LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label)); + continue; + } + kscan_disable_callback(dev); } return 0; } From 33fa15a235ec731db976d8c1eb6342d6d0f84581 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 14 Sep 2021 17:51:05 -0700 Subject: [PATCH 0134/1130] feat(docs): Add note to clarify shared .conf files do not apply outside zmk-config --- docs/docs/development/new-shield.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 83b1fc62eec..6e1733692ac 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -286,6 +286,10 @@ In most case you'll only need to use the .conf file that affects both halves of CONFIG_ZMK_SLEEP=y ``` +:::note +The shared configuration in `my_awesome_split_board.conf` is only applied when you are building with a [`zmk-config` folder](build-flash#building-from-zmk-config-folder) and when it is present at `config/my_awesome_split_board.conf`. If you are not using a `zmk-config` folder, you will need to include the shared configuration in both `my_awesome_split_board_left.conf` and `my_awesome_split_board_right.conf` files. +::: + From 93fbf8dd97bc90e56c6ddee5a933ceca5064297b Mon Sep 17 00:00:00 2001 From: nevin <60362123+enbyautumn@users.noreply.github.com> Date: Thu, 16 Sep 2021 21:33:18 -0400 Subject: [PATCH 0135/1130] fix: Use correct Quotation marks on line 65 (#942) --- docs/src/templates/setup.ps1.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index 12fd545e2b5..ade8d134c16 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -62,7 +62,7 @@ function Test-CommandExists { param ($command) $oldPreference = $ErrorActionPreference - $ErrorActionPreference = ‘stop’ + $ErrorActionPreference = "stop" try { if(Get-Command $command){ return $true } From d769618b3f6784a6e6541c68c1d1dc94ad9f620e Mon Sep 17 00:00:00 2001 From: Richard Titmuss Date: Mon, 6 Sep 2021 18:37:25 +0200 Subject: [PATCH 0136/1130] fix(docs): Remove unnecessary security warning for MacOS The security warning applies for downloaded executables. If you are following the instructions the toolchain is installed with brew and the security warning does not apply. This is explained in the removed link. --- docs/docs/development/setup.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 0d0f9b8cc8f..00a484b37b8 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -335,20 +335,12 @@ Since the Zephyr™ SDK is not available for Windows, we recommending following #### GNU ARM Embedded -Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.5.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). - -The install command is: +Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the GNU ARM Embedded toolchain: ``` brew install --cask gcc-arm-embedded ``` -:::warning Security Controls Workaround - -Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.5.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer - -::: - From 05b03532197e8d6f454094f0bb548d0223965d25 Mon Sep 17 00:00:00 2001 From: Michael van Eerd Date: Sun, 15 Aug 2021 22:06:40 +0200 Subject: [PATCH 0137/1130] feat(docs) Clarify Bluetooth profile pairing --- docs/docs/behaviors/bluetooth.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 3c33aa31bc3..459ada5094e 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -9,12 +9,12 @@ The bluetooth behavior allows management of various settings and states related between the keyboard and the host. By default, ZMK supports five "profiles" for selecting which bonded host computer/laptop/keyboard should receive the keyboard input; many of the commands here operation on those profiles. -:::note Number of Profiles -Please note there are only five available Bluetooth profiles by default. If you need to increase the number of available profiles you can set `CONFIG_BT_MAX_CONN` in your `zmk-config` `.conf` file. -::: - :::note Connection Management +When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or by clearing an existing profile using `BT_CLR`. + A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. + +Please note there are only five available Bluetooth profiles by default. If you need to increase the number of available profiles you can set `CONFIG_BT_MAX_CONN` in your `zmk-config` `.conf` file. ::: ## Bluetooth Command Defines From 748bc75587d58d348542358a31b7bf1cec35e05e Mon Sep 17 00:00:00 2001 From: Michael van Eerd Date: Sun, 15 Aug 2021 22:50:58 +0200 Subject: [PATCH 0138/1130] fix(docs) Move Number of Profiles note down --- docs/docs/behaviors/bluetooth.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 459ada5094e..0c945a0929c 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -13,8 +13,6 @@ computer/laptop/keyboard should receive the keyboard input; many of the commands When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or by clearing an existing profile using `BT_CLR`. A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. - -Please note there are only five available Bluetooth profiles by default. If you need to increase the number of available profiles you can set `CONFIG_BT_MAX_CONN` in your `zmk-config` `.conf` file. ::: ## Bluetooth Command Defines @@ -83,6 +81,10 @@ ZMK support bluetooth “profiles” which allows connection to multiple devices The bluetooth MAC address and negotiated keys during pairing are stored in the permanent storage on your chip and can be reused even after reflashing the firmware. If for some reason you want to delete the stored information, you can bind the `BT_CLR` behavior described above to a key and use it to clear the _current_ profile. +:::note Number of Profiles +Please note there are only five available Bluetooth profiles by default. If you need to increase the number of available profiles you can set `CONFIG_BT_MAX_CONN` in your `zmk-config` `.conf` file. +::: + :::note If you clear bond of a paired profile, make sure you do the same thing on the peer device as well (typically achieved by _removing_ or _forgetting_ the bluetooth connection). Otherwise the peer will try to connect to your keyboard whenever it discovers it. But while the MAC address of both devices could remain the same, the security key no longer match: the peer device still possess the old key negotiated in the previous pairing procedure, but our keyboard firmware has deleted that key. So the connection will fail. If you [enabled USB logging](../development/usb-logging.md), you might see a lot of failed connection attempts due to the reason of “Security failed”. ::: From c27c1048e4486e5dd046d8d98a4278f0d77d2937 Mon Sep 17 00:00:00 2001 From: Michael van Eerd Date: Sun, 15 Aug 2021 22:51:31 +0200 Subject: [PATCH 0139/1130] fix(docs) Bluetooth behavior typo --- docs/docs/behaviors/bluetooth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 0c945a0929c..d4690f9933e 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -7,7 +7,7 @@ sidebar_label: Bluetooth The bluetooth behavior allows management of various settings and states related to the bluetooth connection(s) between the keyboard and the host. By default, ZMK supports five "profiles" for selecting which bonded host -computer/laptop/keyboard should receive the keyboard input; many of the commands here operation on those profiles. +computer/laptop/keyboard should receive the keyboard input; many of the commands here operate on those profiles. :::note Connection Management When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or by clearing an existing profile using `BT_CLR`. From 50174af658872b8bd317bb00b0c18b140e1ccbaa Mon Sep 17 00:00:00 2001 From: Michael van Eerd Date: Sun, 15 Aug 2021 22:54:31 +0200 Subject: [PATCH 0140/1130] fix(docs) add `BT_PRV` as suggested Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/bluetooth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index d4690f9933e..df264cee0c4 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -10,7 +10,7 @@ between the keyboard and the host. By default, ZMK supports five "profiles" for computer/laptop/keyboard should receive the keyboard input; many of the commands here operate on those profiles. :::note Connection Management -When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or by clearing an existing profile using `BT_CLR`. +When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or `BT_PRV` bindings, or by clearing an existing profile using `BT_CLR`. A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. ::: From 8bdd270c91a6aeb9686c2d32096040558b967a9e Mon Sep 17 00:00:00 2001 From: Dom H Date: Fri, 17 Sep 2021 12:25:40 +0100 Subject: [PATCH 0141/1130] fix(docs): Set "Mouse Keys" as "Under Development" --- docs/docs/intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 2c9b19bd884..39a52c6c7e9 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -31,7 +31,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | One Shot Keys | ✅ | ✅ | ✅ | | [Combo Keys](features/combos.md) | ✅ | | ✅ | | Macros | 🚧 | ✅ | ✅ | -| Mouse Keys | 💡 | ✅ | ✅ | +| Mouse Keys | 🚧 | ✅ | ✅ | | Low Active Power Usage | ✅ | | | | Low Power Sleep States | ✅ | ✅ | | | [Low Power Mode (VCC Shutoff)](behaviors/power.md) | ✅ | ✅ | | From a7908a94de851b8e9cec41ec11ecc0fe2cef2d47 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 15 Sep 2021 13:26:48 +0000 Subject: [PATCH 0142/1130] fix(hog): encrypt perm for HID report map/ref. * Workaround for ensuring macOS pairing happens early enough, for their stack, we require encryption for the hids report map and report ref characteristics as well, to trigger pairing ealier in the connection process for macOS. --- app/src/hog.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/hog.c b/app/src/hog.c index 0734309796b..cc459a7fded 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -126,19 +126,19 @@ BT_GATT_SERVICE_DEFINE( // BT_GATT_PERM_WRITE, NULL, write_proto_mode, &proto_mode), BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_INFO, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_hids_info, NULL, &info), - BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT_MAP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT_MAP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_map, NULL, NULL), BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, read_hids_input_report, NULL, NULL), BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), - BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, read_hids_report_ref, NULL, - &input), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, + NULL, &input), BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, read_hids_consumer_input_report, NULL, NULL), BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), - BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, read_hids_report_ref, NULL, - &consumer_input), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, + NULL, &consumer_input), BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); From c52887e2366ec7cd8848cd7fe00854be07ad7172 Mon Sep 17 00:00:00 2001 From: Dom H Date: Wed, 22 Sep 2021 22:29:46 +0100 Subject: [PATCH 0143/1130] fix(docs): Remove build.yml from new shield steps --- docs/docs/development/new-shield.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 6e1733692ac..f29a96e5edc 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -17,7 +17,6 @@ The high level steps are: - (Optional) Add the matrix transform for mapping KSCAN row/column values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. - Add a default keymap, which users can override in their own configs as needed. - Add support for features such as encoders, OLED displays, or RGB underglow. -- Update build.yml It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. From 0c15c2291e2b7c3dfd24fc5d5c1527169d5a9a31 Mon Sep 17 00:00:00 2001 From: Dom H Date: Wed, 22 Sep 2021 21:25:53 +0100 Subject: [PATCH 0144/1130] feat(shield): Add Architeuthis Dux shield --- .../architeuthis_dux/Kconfig.defconfig | 26 ++++++++++ .../shields/architeuthis_dux/Kconfig.shield | 8 +++ app/boards/shields/architeuthis_dux/README.md | 15 ++++++ .../architeuthis_dux/architeuthis_dux.conf | 2 + .../architeuthis_dux/architeuthis_dux.dtsi | 52 +++++++++++++++++++ .../architeuthis_dux/architeuthis_dux.keymap | 26 ++++++++++ .../architeuthis_dux/architeuthis_dux.zmk.yml | 11 ++++ .../architeuthis_dux_left.overlay | 7 +++ .../architeuthis_dux_right.overlay | 11 ++++ 9 files changed, 158 insertions(+) create mode 100644 app/boards/shields/architeuthis_dux/Kconfig.defconfig create mode 100644 app/boards/shields/architeuthis_dux/Kconfig.shield create mode 100644 app/boards/shields/architeuthis_dux/README.md create mode 100644 app/boards/shields/architeuthis_dux/architeuthis_dux.conf create mode 100644 app/boards/shields/architeuthis_dux/architeuthis_dux.dtsi create mode 100644 app/boards/shields/architeuthis_dux/architeuthis_dux.keymap create mode 100644 app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml create mode 100644 app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay create mode 100644 app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay diff --git a/app/boards/shields/architeuthis_dux/Kconfig.defconfig b/app/boards/shields/architeuthis_dux/Kconfig.defconfig new file mode 100644 index 00000000000..29a403f1e9f --- /dev/null +++ b/app/boards/shields/architeuthis_dux/Kconfig.defconfig @@ -0,0 +1,26 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ARCHITEUTHIS_DUX_LEFT + +config ZMK_KEYBOARD_NAME + default "Architeuthis Dux" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_ARCHITEUTHIS_DUX_RIGHT + +config ZMK_KEYBOARD_NAME + default "A. Dux Right" + +endif + +if SHIELD_ARCHITEUTHIS_DUX_LEFT || SHIELD_ARCHITEUTHIS_DUX_RIGHT + +config ZMK_SPLIT + default y + +endif diff --git a/app/boards/shields/architeuthis_dux/Kconfig.shield b/app/boards/shields/architeuthis_dux/Kconfig.shield new file mode 100644 index 00000000000..b89878d7888 --- /dev/null +++ b/app/boards/shields/architeuthis_dux/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ARCHITEUTHIS_DUX_LEFT + def_bool $(shields_list_contains,architeuthis_dux_left) + +config SHIELD_ARCHITEUTHIS_DUX_RIGHT + def_bool $(shields_list_contains,architeuthis_dux_right) diff --git a/app/boards/shields/architeuthis_dux/README.md b/app/boards/shields/architeuthis_dux/README.md new file mode 100644 index 00000000000..ee3830234ab --- /dev/null +++ b/app/boards/shields/architeuthis_dux/README.md @@ -0,0 +1,15 @@ +# Architeuthis Dux + +Shield configuration for [Architeuthis Dux by Tapi][1]. + +![Wireless Architeuthis Dux with nice!nano controllers][2] + +This shield is an adaptation of the direct pin [Cradio shield by @davidphilipbarr][3]. + +## Cephalopoda + +Check out the rest of Tapi's Cephalopoda collection of low profile split ergonomic mechanical keyboards at . + +[1]: https://github.com/tapioki/cephalopoda/tree/main/Architeuthis%20dux +[2]: https://media.discordapp.net/attachments/855822038287908864/866315666802081792/image0.jpg +[3]: https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields/cradio diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.conf b/app/boards/shields/architeuthis_dux/architeuthis_dux.conf new file mode 100644 index 00000000000..fa9715791ee --- /dev/null +++ b/app/boards/shields/architeuthis_dux/architeuthis_dux.conf @@ -0,0 +1,2 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.dtsi b/app/boards/shields/architeuthis_dux/architeuthis_dux.dtsi new file mode 100644 index 00000000000..4c28d655bb6 --- /dev/null +++ b/app/boards/shields/architeuthis_dux/architeuthis_dux.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + input-gpios = + <&pro_micro_d 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_a 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + +}; diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.keymap b/app/boards/shields/architeuthis_dux/architeuthis_dux.keymap new file mode 100644 index 00000000000..eda03ff9097 --- /dev/null +++ b/app/boards/shields/architeuthis_dux/architeuthis_dux.keymap @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/ { + + keymap { + compatible = "zmk,keymap"; + + // This is a sample keymap intended to be replaced with your own + base_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH + &kp TAB &kp BSPC &kp SPACE &kp ENTER + >; + }; + + }; +}; diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml b/app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml new file mode 100644 index 00000000000..704d96bcf1e --- /dev/null +++ b/app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: architeuthis_dux +name: Architeuthis Dux +type: shield +url: https://github.com/tapioki/cephalopoda/ +requires: [pro_micro] +features: + - keys +siblings: + - architeuthis_dux_left + - architeuthis_dux_right diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay b/app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay new file mode 100644 index 00000000000..0baa95a5fd3 --- /dev/null +++ b/app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "architeuthis_dux.dtsi" diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay b/app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay new file mode 100644 index 00000000000..13880d6dfa4 --- /dev/null +++ b/app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "architeuthis_dux.dtsi" + +&default_transform { + col-offset = <17>; +}; From 80b01c726587780d3568c02fad8054c823020edb Mon Sep 17 00:00:00 2001 From: Dom H Date: Thu, 23 Sep 2021 07:10:36 +0100 Subject: [PATCH 0145/1130] refactor(shield): "Architeuthis Dux" to "A. Dux" The shorter name is more user-friendly. --- .../shields/{architeuthis_dux => a_dux}/Kconfig.defconfig | 8 ++++---- app/boards/shields/a_dux/Kconfig.shield | 8 ++++++++ app/boards/shields/{architeuthis_dux => a_dux}/README.md | 4 ++-- .../architeuthis_dux.conf => a_dux/a_dux.conf} | 0 .../architeuthis_dux.dtsi => a_dux/a_dux.dtsi} | 0 .../architeuthis_dux.keymap => a_dux/a_dux.keymap} | 0 .../architeuthis_dux.zmk.yml => a_dux/a_dux.zmk.yml} | 8 ++++---- .../a_dux_left.overlay} | 2 +- .../a_dux_right.overlay} | 2 +- app/boards/shields/architeuthis_dux/Kconfig.shield | 8 -------- 10 files changed, 20 insertions(+), 20 deletions(-) rename app/boards/shields/{architeuthis_dux => a_dux}/Kconfig.defconfig (61%) create mode 100644 app/boards/shields/a_dux/Kconfig.shield rename app/boards/shields/{architeuthis_dux => a_dux}/README.md (84%) rename app/boards/shields/{architeuthis_dux/architeuthis_dux.conf => a_dux/a_dux.conf} (100%) rename app/boards/shields/{architeuthis_dux/architeuthis_dux.dtsi => a_dux/a_dux.dtsi} (100%) rename app/boards/shields/{architeuthis_dux/architeuthis_dux.keymap => a_dux/a_dux.keymap} (100%) rename app/boards/shields/{architeuthis_dux/architeuthis_dux.zmk.yml => a_dux/a_dux.zmk.yml} (56%) rename app/boards/shields/{architeuthis_dux/architeuthis_dux_left.overlay => a_dux/a_dux_left.overlay} (72%) rename app/boards/shields/{architeuthis_dux/architeuthis_dux_right.overlay => a_dux/a_dux_right.overlay} (79%) delete mode 100644 app/boards/shields/architeuthis_dux/Kconfig.shield diff --git a/app/boards/shields/architeuthis_dux/Kconfig.defconfig b/app/boards/shields/a_dux/Kconfig.defconfig similarity index 61% rename from app/boards/shields/architeuthis_dux/Kconfig.defconfig rename to app/boards/shields/a_dux/Kconfig.defconfig index 29a403f1e9f..f2911df4a9f 100644 --- a/app/boards/shields/architeuthis_dux/Kconfig.defconfig +++ b/app/boards/shields/a_dux/Kconfig.defconfig @@ -1,24 +1,24 @@ # Copyright (c) 2021 The ZMK Contributors # SPDX-License-Identifier: MIT -if SHIELD_ARCHITEUTHIS_DUX_LEFT +if SHIELD_A_DUX_LEFT config ZMK_KEYBOARD_NAME - default "Architeuthis Dux" + default "A. Dux" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y endif -if SHIELD_ARCHITEUTHIS_DUX_RIGHT +if SHIELD_A_DUX_RIGHT config ZMK_KEYBOARD_NAME default "A. Dux Right" endif -if SHIELD_ARCHITEUTHIS_DUX_LEFT || SHIELD_ARCHITEUTHIS_DUX_RIGHT +if SHIELD_A_DUX_LEFT || SHIELD_A_DUX_RIGHT config ZMK_SPLIT default y diff --git a/app/boards/shields/a_dux/Kconfig.shield b/app/boards/shields/a_dux/Kconfig.shield new file mode 100644 index 00000000000..6058f29084a --- /dev/null +++ b/app/boards/shields/a_dux/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_A_DUX_LEFT + def_bool $(shields_list_contains,a_dux_left) + +config SHIELD_A_DUX_RIGHT + def_bool $(shields_list_contains,a_dux_right) diff --git a/app/boards/shields/architeuthis_dux/README.md b/app/boards/shields/a_dux/README.md similarity index 84% rename from app/boards/shields/architeuthis_dux/README.md rename to app/boards/shields/a_dux/README.md index ee3830234ab..2f84e31a34e 100644 --- a/app/boards/shields/architeuthis_dux/README.md +++ b/app/boards/shields/a_dux/README.md @@ -1,6 +1,6 @@ -# Architeuthis Dux +# A. Dux -Shield configuration for [Architeuthis Dux by Tapi][1]. +Shield configuration for [Architeuthis Dux by Tapi][1] (aka A. Dux, A.D., "Giant Squid"). ![Wireless Architeuthis Dux with nice!nano controllers][2] diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.conf b/app/boards/shields/a_dux/a_dux.conf similarity index 100% rename from app/boards/shields/architeuthis_dux/architeuthis_dux.conf rename to app/boards/shields/a_dux/a_dux.conf diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.dtsi b/app/boards/shields/a_dux/a_dux.dtsi similarity index 100% rename from app/boards/shields/architeuthis_dux/architeuthis_dux.dtsi rename to app/boards/shields/a_dux/a_dux.dtsi diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.keymap b/app/boards/shields/a_dux/a_dux.keymap similarity index 100% rename from app/boards/shields/architeuthis_dux/architeuthis_dux.keymap rename to app/boards/shields/a_dux/a_dux.keymap diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml b/app/boards/shields/a_dux/a_dux.zmk.yml similarity index 56% rename from app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml rename to app/boards/shields/a_dux/a_dux.zmk.yml index 704d96bcf1e..a8c23587e9e 100644 --- a/app/boards/shields/architeuthis_dux/architeuthis_dux.zmk.yml +++ b/app/boards/shields/a_dux/a_dux.zmk.yml @@ -1,11 +1,11 @@ file_format: "1" -id: architeuthis_dux -name: Architeuthis Dux +id: a_dux +name: A. Dux type: shield url: https://github.com/tapioki/cephalopoda/ requires: [pro_micro] features: - keys siblings: - - architeuthis_dux_left - - architeuthis_dux_right + - a_dux_left + - a_dux_right diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay b/app/boards/shields/a_dux/a_dux_left.overlay similarity index 72% rename from app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay rename to app/boards/shields/a_dux/a_dux_left.overlay index 0baa95a5fd3..c69106077b4 100644 --- a/app/boards/shields/architeuthis_dux/architeuthis_dux_left.overlay +++ b/app/boards/shields/a_dux/a_dux_left.overlay @@ -4,4 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "architeuthis_dux.dtsi" +#include "a_dux.dtsi" diff --git a/app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay b/app/boards/shields/a_dux/a_dux_right.overlay similarity index 79% rename from app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay rename to app/boards/shields/a_dux/a_dux_right.overlay index 13880d6dfa4..0034317e39c 100644 --- a/app/boards/shields/architeuthis_dux/architeuthis_dux_right.overlay +++ b/app/boards/shields/a_dux/a_dux_right.overlay @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include "architeuthis_dux.dtsi" +#include "a_dux.dtsi" &default_transform { col-offset = <17>; diff --git a/app/boards/shields/architeuthis_dux/Kconfig.shield b/app/boards/shields/architeuthis_dux/Kconfig.shield deleted file mode 100644 index b89878d7888..00000000000 --- a/app/boards/shields/architeuthis_dux/Kconfig.shield +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2021 The ZMK Contributors -# SPDX-License-Identifier: MIT - -config SHIELD_ARCHITEUTHIS_DUX_LEFT - def_bool $(shields_list_contains,architeuthis_dux_left) - -config SHIELD_ARCHITEUTHIS_DUX_RIGHT - def_bool $(shields_list_contains,architeuthis_dux_right) From db4bbbf9ebda2e0fc50ab57750ec4086b50a70a4 Mon Sep 17 00:00:00 2001 From: Dom H Date: Thu, 23 Sep 2021 19:10:39 +0100 Subject: [PATCH 0146/1130] fix(shield): Update URL in A. Dux metadata --- app/boards/shields/a_dux/a_dux.zmk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/a_dux/a_dux.zmk.yml b/app/boards/shields/a_dux/a_dux.zmk.yml index a8c23587e9e..b19a24219bd 100644 --- a/app/boards/shields/a_dux/a_dux.zmk.yml +++ b/app/boards/shields/a_dux/a_dux.zmk.yml @@ -2,7 +2,7 @@ file_format: "1" id: a_dux name: A. Dux type: shield -url: https://github.com/tapioki/cephalopoda/ +url: https://github.com/tapioki/cephalopoda/tree/main/Architeuthis%20dux requires: [pro_micro] features: - keys From 212a05feb38d9c7c800f97c776e04bf9e21257a7 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Thu, 23 Sep 2021 20:05:50 -0400 Subject: [PATCH 0147/1130] fix(hog): use OR instead of AND for bitmap --- app/src/hog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/hog.c b/app/src/hog.c index cc459a7fded..e8aceca3280 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -37,7 +37,7 @@ struct hids_report { static struct hids_info info = { .version = 0x0000, .code = 0x00, - .flags = HIDS_NORMALLY_CONNECTABLE & HIDS_REMOTE_WAKE, + .flags = HIDS_NORMALLY_CONNECTABLE | HIDS_REMOTE_WAKE, }; enum { From 5d2120ad1770f971b56f3526fe2c0a4b14ff5fbc Mon Sep 17 00:00:00 2001 From: Richard Titmuss Date: Fri, 24 Sep 2021 07:59:47 +0200 Subject: [PATCH 0148/1130] fix(docs): Typo EC11_CONFIG This should be CONFIG_EC11 --- docs/docs/features/encoders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index f1bb8bc8488..225ee6f39c4 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -11,7 +11,7 @@ Encoders are currently only support on the left/central sides of splits. For pro ## Enabling EC11 Encoders -To enable encoders for boards that have existing encoder support, uncomment the `EC11_CONFIG=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware. +To enable encoders for boards that have existing encoder support, uncomment the `CONFIG_EC11=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware. ## Customizing EC11 Encoder Behavior From 9f2785786fed6e195949f4f88acd8b272f95e1d3 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 24 Sep 2021 10:28:37 -0700 Subject: [PATCH 0149/1130] fix(setup): Fix sed delimiters for Cradio --- docs/src/templates/setup.sh.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index 2b414376d48..9dbdcfd628f 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -189,7 +189,7 @@ popd sed -i'.orig' \ -e "s/BOARD_NAME/$board/" \ -e "s/SHIELD_NAME/$shield/" \ - -e "s/KEYBOARD_TITLE/$shield_title/" \ + -e "s|KEYBOARD_TITLE|$shield_title|" \ .github/workflows/build.yml if [ "$board" == "proton_c" ]; then From 063d98e3dfa8e0089aa0039b24489d29b062cf5e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 12 Aug 2021 03:43:07 +0000 Subject: [PATCH 0150/1130] feat(display): Optional dedicated work queue. * Add new Kconfig settingsx to allow selecting system or dedicated work queue for performing UI updates. * Allow UI updates to not block other system tasks when display is updating, especially important for e-ink displays. --- app/include/zmk/display.h | 2 ++ app/src/display/Kconfig | 23 +++++++++++++++++++++++ app/src/display/main.c | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/app/include/zmk/display.h b/app/include/zmk/display.h index 3f4eb52459a..d3bd042e6e2 100644 --- a/app/include/zmk/display.h +++ b/app/include/zmk/display.h @@ -6,4 +6,6 @@ #pragma once +struct k_work_q *zmk_display_work_q(); + int zmk_display_init(); \ No newline at end of file diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 95b5d47947a..9c70911ef3c 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -29,6 +29,29 @@ config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM endchoice +choice ZMK_DISPLAY_WORK_QUEUE + prompt "Work queue selection for UI updates" + +config ZMK_DISPLAY_WORK_QUEUE_SYSTEM + bool "Use default system work queue for UI updates" + +config ZMK_DISPLAY_WORK_QUEUE_DEDICATED + bool "Use dedicated work queue for UI updates" + +endchoice + +if ZMK_DISPLAY_WORK_QUEUE_DEDICATED + +config ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE + int "Stack size for dedicated UI thread/queue" + default 2048 + +config ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY + int "Thread priority for dedicated UI thread/queue" + default 5 + +endif # ZMK_DISPLAY_WORK_QUEUE_DEDICATED + rsource "widgets/Kconfig" endif diff --git a/app/src/display/main.c b/app/src/display/main.c index 17d68bf3aea..95b607e82ce 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: MIT */ +#include #include #include #include @@ -32,19 +33,41 @@ void display_tick_cb(struct k_work *work) { lv_task_handler(); } K_WORK_DEFINE(display_tick_work, display_tick_cb); +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) + +K_THREAD_STACK_DEFINE(display_work_stack_area, CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE); + +static struct k_work_q display_work_q; + +#endif + +struct k_work_q *zmk_display_work_q() { +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) + return &display_work_q; +#else + return &k_sys_work_q; +#endif +} + void display_timer_cb() { lv_tick_inc(TICK_MS); - k_work_submit(&display_tick_work); + k_work_submit_to_queue(zmk_display_work_q(), &display_tick_work); } +void blank_display_cb(struct k_work *work) { display_blanking_on(display); } + +void unblank_display_cb(struct k_work *work) { display_blanking_off(display); } + K_TIMER_DEFINE(display_timer, display_timer_cb, NULL); +K_WORK_DEFINE(blank_display_work, blank_display_cb); +K_WORK_DEFINE(unblank_display_work, unblank_display_cb); static void start_display_updates() { if (display == NULL) { return; } - display_blanking_off(display); + k_work_submit_to_queue(zmk_display_work_q(), &unblank_display_work); k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS)); } @@ -54,7 +77,7 @@ static void stop_display_updates() { return; } - display_blanking_on(display); + k_work_submit_to_queue(zmk_display_work_q(), &blank_display_work); k_timer_stop(&display_timer); } @@ -68,6 +91,12 @@ int zmk_display_init() { return -EINVAL; } +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) + k_work_q_start(&display_work_q, display_work_stack_area, + K_THREAD_STACK_SIZEOF(display_work_stack_area), + CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY); +#endif + screen = zmk_display_status_screen(); if (screen == NULL) { @@ -105,4 +134,4 @@ int display_event_handler(const zmk_event_t *eh) { } ZMK_LISTENER(display, display_event_handler); -ZMK_SUBSCRIPTION(display, zmk_activity_state_changed); \ No newline at end of file +ZMK_SUBSCRIPTION(display, zmk_activity_state_changed); From 2128b2b55f85a6190194d83696f7419eb53c6642 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 12 Aug 2021 03:44:38 +0000 Subject: [PATCH 0151/1130] refactor(display): Output/layer/battery thread safety. * Submit widget updates to display queue. * Use mutex to control access to shared state for widgets. --- app/include/zmk/display.h | 51 +++++++++++++++- app/src/display/main.c | 5 ++ app/src/display/widgets/battery_status.c | 53 +++++++++++------ app/src/display/widgets/layer_status.c | 50 +++++++++------- app/src/display/widgets/output_status.c | 76 +++++++++++++++--------- app/src/display/widgets/wpm_status.c | 37 +++++++----- 6 files changed, 190 insertions(+), 82 deletions(-) diff --git a/app/include/zmk/display.h b/app/include/zmk/display.h index d3bd042e6e2..45a4bee0350 100644 --- a/app/include/zmk/display.h +++ b/app/include/zmk/display.h @@ -4,8 +4,57 @@ * SPDX-License-Identifier: MIT */ +/** @file display.h + * @brief Display functions and macros. + */ + #pragma once struct k_work_q *zmk_display_work_q(); -int zmk_display_init(); \ No newline at end of file +bool zmk_display_is_initialized(); +int zmk_display_init(); + +/** + * @brief Macro to define a ZMK event listener that handles the thread safety of fetching + * the necessary state from the system work queue context, invoking a work callback + * in the display queue context, and properly accessing that state safely when performing + * display/LVGL updates. + * + * @param listener THe ZMK Event manager listener name. + * @param state_type The struct/enum type used to store/transfer state. + * @param cb The callback to invoke in the dispaly queue context to update the UI. Should be `void + * func(state_type)` signature. + * @param state_func The callback function to invoke to fetch the updated state from ZMK core. + * Should be `state type func(const zmk_event_t *eh)` signature. + * @retval listner##_init Generates a function `listener##_init` that should be called by the widget + * once ready to be updated. + **/ +#define ZMK_DISPLAY_WIDGET_LISTENER(listener, state_type, cb, state_func) \ + K_MUTEX_DEFINE(listener##_mutex); \ + static state_type __##listener##_state; \ + static state_type listener##_get_local_state() { \ + k_mutex_lock(&listener##_mutex, K_FOREVER); \ + state_type copy = __##listener##_state; \ + k_mutex_unlock(&listener##_mutex); \ + return copy; \ + }; \ + static void listener##_work_cb(struct k_work *work) { cb(listener##_get_local_state()); }; \ + K_WORK_DEFINE(listener##_work, listener##_work_cb); \ + static void listener##_refresh_state(const zmk_event_t *eh) { \ + k_mutex_lock(&listener##_mutex, K_FOREVER); \ + __##listener##_state = state_func(eh); \ + k_mutex_unlock(&listener##_mutex); \ + }; \ + static void listener##_init() { \ + listener##_refresh_state(NULL); \ + listener##_work_cb(NULL); \ + } \ + static int listener##_cb(const zmk_event_t *eh) { \ + if (zmk_display_is_initialized()) { \ + listener##_refresh_state(eh); \ + k_work_submit_to_queue(zmk_display_work_q(), &listener##_work); \ + } \ + return ZMK_EV_EVENT_BUBBLE; \ + } \ + ZMK_LISTENER(listener, listener##_cb); diff --git a/app/src/display/main.c b/app/src/display/main.c index 95b607e82ce..57fab2b0729 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -22,6 +22,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define ZMK_DISPLAY_NAME CONFIG_LVGL_DISPLAY_DEV_NAME static const struct device *display; +static bool initialized = false; static lv_obj_t *screen; @@ -82,6 +83,8 @@ static void stop_display_updates() { k_timer_stop(&display_timer); } +int zmk_display_is_initialized() { return initialized; } + int zmk_display_init() { LOG_DBG(""); @@ -108,6 +111,8 @@ int zmk_display_init() { start_display_updates(); + initialized = true; + LOG_DBG(""); return 0; } diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 309c3e9d0c6..7503c616750 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -4,11 +4,13 @@ * SPDX-License-Identifier: MIT */ +#include #include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include #include @@ -33,12 +35,20 @@ void battery_status_init() { lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); } -void set_battery_symbol(lv_obj_t *label) { +struct battery_status_state { + uint8_t level; +#if IS_ENABLED(CONFIG_USB) + bool usb_present; +#endif +}; + +static void set_battery_symbol(lv_obj_t *label, struct battery_status_state state) { char text[2] = " "; - uint8_t level = bt_bas_get_battery_level(); + + uint8_t level = state.level; #if IS_ENABLED(CONFIG_USB) - if (zmk_usb_is_powered()) { + if (state.usb_present) { strcpy(text, LV_SYMBOL_CHARGE); } #endif /* IS_ENABLED(CONFIG_USB) */ @@ -57,32 +67,41 @@ void set_battery_symbol(lv_obj_t *label) { lv_label_set_text(label, text); } +void battery_status_update_cb(struct battery_status_state state) { + struct zmk_widget_battery_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_battery_symbol(widget->obj, state); } +} + +static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + return (struct battery_status_state) { + .level = bt_bas_get_battery_level(), +#if IS_ENABLED(CONFIG_USB) + .usb_present = zmk_usb_is_powered(), +#endif /* IS_ENABLED(CONFIG_USB) */ + }; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_battery_status, struct battery_status_state, + battery_status_update_cb, battery_status_get_state) + +ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); +#if IS_ENABLED(CONFIG_USB) +ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); +#endif /* IS_ENABLED(CONFIG_USB) */ + int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent) { battery_status_init(); widget->obj = lv_label_create(parent, NULL); lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_obj_set_size(widget->obj, 40, 15); - set_battery_symbol(widget->obj); sys_slist_append(&widgets, &widget->node); + widget_battery_status_init(); return 0; } lv_obj_t *zmk_widget_battery_status_obj(struct zmk_widget_battery_status *widget) { - LOG_DBG("Label: %p", widget->obj); return widget->obj; } - -int battery_status_listener(const zmk_event_t *eh) { - struct zmk_widget_battery_status *widget; - SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_battery_symbol(widget->obj); } - return ZMK_EV_EVENT_BUBBLE; -} - -ZMK_LISTENER(widget_battery_status, battery_status_listener) -ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); -#if IS_ENABLED(CONFIG_USB) -ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); -#endif /* IS_ENABLED(CONFIG_USB) */ diff --git a/app/src/display/widgets/layer_status.c b/app/src/display/widgets/layer_status.c index 9960f2a0c65..3c63565bd26 100644 --- a/app/src/display/widgets/layer_status.c +++ b/app/src/display/widgets/layer_status.c @@ -4,9 +4,11 @@ * SPDX-License-Identifier: MIT */ +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include #include @@ -18,7 +20,12 @@ static lv_style_t label_style; static bool style_initialized = false; -void layer_status_init() { +struct layer_status_state { + uint8_t index; + const char *label; +}; + +static void layer_status_init() { if (style_initialized) { return; } @@ -31,49 +38,50 @@ void layer_status_init() { lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); } -void set_layer_symbol(lv_obj_t *label) { - int active_layer_index = zmk_keymap_highest_layer_active(); - - LOG_DBG("Layer changed to %i", active_layer_index); - - const char *layer_label = zmk_keymap_layer_label(active_layer_index); - if (layer_label == NULL) { +static void set_layer_symbol(lv_obj_t *label, struct layer_status_state state) { + if (state.label == NULL) { char text[6] = {}; - sprintf(text, LV_SYMBOL_KEYBOARD "%i", active_layer_index); + sprintf(text, LV_SYMBOL_KEYBOARD "%i", state.index); lv_label_set_text(label, text); } else { char text[12] = {}; - snprintf(text, 12, LV_SYMBOL_KEYBOARD "%s", layer_label); + snprintf(text, 12, LV_SYMBOL_KEYBOARD "%s", state.label); lv_label_set_text(label, text); } } +static void layer_status_update_cb(struct layer_status_state state) { + struct zmk_widget_layer_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_layer_symbol(widget->obj, state); } +} + +static struct layer_status_state layer_status_get_state(const zmk_event_t *eh) { + uint8_t index = zmk_keymap_highest_layer_active(); + return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_label(index)}; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, layer_status_update_cb, + layer_status_get_state) + +ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); + int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent) { layer_status_init(); widget->obj = lv_label_create(parent, NULL); lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_obj_set_size(widget->obj, 40, 15); - set_layer_symbol(widget->obj); sys_slist_append(&widgets, &widget->node); + widget_layer_status_init(); return 0; } lv_obj_t *zmk_widget_layer_status_obj(struct zmk_widget_layer_status *widget) { return widget->obj; -} - -int layer_status_listener(const zmk_event_t *eh) { - struct zmk_widget_layer_status *widget; - SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_layer_symbol(widget->obj); } - return 0; -} - -ZMK_LISTENER(widget_layer_status, layer_status_listener) -ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); \ No newline at end of file +} \ No newline at end of file diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 3bfbebf6f85..b1a3710ddd4 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -4,11 +4,13 @@ * SPDX-License-Identifier: MIT */ +#include #include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include #include @@ -23,7 +25,14 @@ static lv_style_t label_style; static bool style_initialized = false; -void output_status_init() { +struct output_status_state { + enum zmk_endpoint selected_endpoint; + bool active_profile_connected; + bool active_profile_bonded; + uint8_t active_profile_index; +}; + +static void output_status_init() { if (style_initialized) { return; } @@ -36,26 +45,34 @@ void output_status_init() { lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); } -void set_status_symbol(lv_obj_t *label) { - enum zmk_endpoint selected_endpoint = zmk_endpoints_selected(); - bool active_profile_connected = zmk_ble_active_profile_is_connected(); - bool active_profie_bonded = !zmk_ble_active_profile_is_open(); - uint8_t active_profile_index = zmk_ble_active_profile_index(); +static struct output_status_state get_state(const zmk_event_t *_eh) { + return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), + .active_profile_connected = + zmk_ble_active_profile_is_connected(), + .active_profile_bonded = !zmk_ble_active_profile_is_open(), + .active_profile_index = zmk_ble_active_profile_index()}; + ; +} + +static void set_status_symbol(lv_obj_t *label, struct output_status_state state) { char text[6] = {}; - switch (selected_endpoint) { + switch (state.selected_endpoint) { case ZMK_ENDPOINT_USB: strcat(text, LV_SYMBOL_USB " "); break; case ZMK_ENDPOINT_BLE: - if (active_profie_bonded) { - if (active_profile_connected) { - sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_OK, active_profile_index); + if (state.active_profile_bonded) { + if (state.active_profile_connected) { + snprintf(text, sizeof(text), LV_SYMBOL_WIFI "%i " LV_SYMBOL_OK, + state.active_profile_index); } else { - sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_CLOSE, active_profile_index); + snprintf(text, sizeof(text), LV_SYMBOL_WIFI "%i " LV_SYMBOL_CLOSE, + state.active_profile_index); } } else { - sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_SETTINGS, active_profile_index); + snprintf(text, sizeof(text), LV_SYMBOL_WIFI "%i " LV_SYMBOL_SETTINGS, + state.active_profile_index); } break; } @@ -63,35 +80,36 @@ void set_status_symbol(lv_obj_t *label) { lv_label_set_text(label, text); } +static void output_status_update_cb(struct output_status_state state) { + struct zmk_widget_output_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_status_symbol(widget->obj, state); } +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, + output_status_update_cb, get_state) +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); + +#if defined(CONFIG_USB) +ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); +#endif +#if defined(CONFIG_ZMK_BLE) +ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); +#endif + int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent) { output_status_init(); + widget->obj = lv_label_create(parent, NULL); lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_obj_set_size(widget->obj, 40, 15); - set_status_symbol(widget->obj); sys_slist_append(&widgets, &widget->node); + widget_output_status_init(); return 0; } lv_obj_t *zmk_widget_output_status_obj(struct zmk_widget_output_status *widget) { return widget->obj; } - -int output_status_listener(const zmk_event_t *eh) { - struct zmk_widget_output_status *widget; - SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_status_symbol(widget->obj); } - return ZMK_EV_EVENT_BUBBLE; -} - -ZMK_LISTENER(widget_output_status, output_status_listener) -ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); - -#if defined(CONFIG_USB) -ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); -#endif -#if defined(CONFIG_ZMK_BLE) -ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); -#endif diff --git a/app/src/display/widgets/wpm_status.c b/app/src/display/widgets/wpm_status.c index 41ee3685945..bee34135564 100644 --- a/app/src/display/widgets/wpm_status.c +++ b/app/src/display/widgets/wpm_status.c @@ -7,6 +7,7 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include #include @@ -18,6 +19,10 @@ static lv_style_t label_style; static bool style_initialized = false; +struct wpm_status_state { + uint8_t wpm; +}; + void wpm_status_init() { if (style_initialized) { return; @@ -31,37 +36,41 @@ void wpm_status_init() { lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); } -void set_wpm_symbol(lv_obj_t *label, int wpm) { +struct wpm_status_state wpm_status_get_state(const zmk_event_t *eh) { + return (struct wpm_status_state){.wpm = zmk_wpm_get_state()}; +}; + +void set_wpm_symbol(lv_obj_t *label, struct wpm_status_state state) { char text[4] = {}; - LOG_DBG("WPM changed to %i", wpm); - sprintf(text, "%i ", wpm); + LOG_DBG("WPM changed to %i", state.wpm); + snprintf(text, sizeof(text), "%i ", state.wpm); lv_label_set_text(label, text); } +void wpm_status_update_cb(struct wpm_status_state state) { + struct zmk_widget_wpm_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_wpm_symbol(widget->obj, state); } +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_wpm_status, struct wpm_status_state, wpm_status_update_cb, + wpm_status_get_state) +ZMK_SUBSCRIPTION(widget_wpm_status, zmk_wpm_state_changed); + int zmk_widget_wpm_status_init(struct zmk_widget_wpm_status *widget, lv_obj_t *parent) { wpm_status_init(); + widget->obj = lv_label_create(parent, NULL); lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_label_set_align(widget->obj, LV_LABEL_ALIGN_RIGHT); lv_obj_set_size(widget->obj, 40, 15); - set_wpm_symbol(widget->obj, 0); sys_slist_append(&widgets, &widget->node); + widget_wpm_status_init(); return 0; } lv_obj_t *zmk_widget_wpm_status_obj(struct zmk_widget_wpm_status *widget) { return widget->obj; } - -int wpm_status_listener(const zmk_event_t *eh) { - struct zmk_wpm_state_changed *ev = as_zmk_wpm_state_changed(eh); - struct zmk_widget_wpm_status *widget; - SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_wpm_symbol(widget->obj, ev->state); } - return 0; -} - -ZMK_LISTENER(widget_wpm_status, wpm_status_listener) -ZMK_SUBSCRIPTION(widget_wpm_status, zmk_wpm_state_changed); \ No newline at end of file From 3e6a3758edf1960c64d1d8b0424ac84283166f52 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 1 Apr 2021 21:22:48 -0400 Subject: [PATCH 0152/1130] refactor(display): Saner font selection/defaults. * Only select fonts for the default built in status screen * Leverage theme default fonts, instead of hardcoding theme details in each component. --- app/src/display/Kconfig | 21 ++++++++++++++++++++- app/src/display/status_screen.c | 3 +++ app/src/display/widgets/Kconfig | 4 ---- app/src/display/widgets/battery_status.c | 18 ------------------ app/src/display/widgets/layer_status.c | 18 ------------------ app/src/display/widgets/output_status.c | 19 ------------------- app/src/display/widgets/wpm_status.c | 19 ------------------- 7 files changed, 23 insertions(+), 79 deletions(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 9c70911ef3c..8023025a0cd 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -18,7 +18,6 @@ endchoice choice ZMK_DISPLAY_STATUS_SCREEN prompt "Default status screen for displays" - default ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN config ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN bool "Built in status screen" @@ -52,6 +51,26 @@ config ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY endif # ZMK_DISPLAY_WORK_QUEUE_DEDICATED +if ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN + +config LVGL_FONT_MONTSERRAT_16 + default y + +choice LVGL_THEME_DEFAULT_FONT_NORMAL + default LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_16 + +endchoice + +config LVGL_FONT_MONTSERRAT_12 + default y + +choice LVGL_THEME_DEFAULT_FONT_SMALL + default LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_12 + +endchoice + +endif # ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN + rsource "widgets/Kconfig" endif diff --git a/app/src/display/status_screen.c b/app/src/display/status_screen.c index 6f32b2832c6..ff678afa172 100644 --- a/app/src/display/status_screen.c +++ b/app/src/display/status_screen.c @@ -48,6 +48,9 @@ lv_obj_t *zmk_display_status_screen() { #if IS_ENABLED(CONFIG_ZMK_WIDGET_LAYER_STATUS) zmk_widget_layer_status_init(&layer_status_widget, screen); + lv_obj_set_style_local_text_font(zmk_widget_layer_status_obj(&layer_status_widget), + LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, + lv_theme_get_font_small()); lv_obj_align(zmk_widget_layer_status_obj(&layer_status_widget), NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); #endif diff --git a/app/src/display/widgets/Kconfig b/app/src/display/widgets/Kconfig index b20babcfe8b..0a6bf5c4705 100644 --- a/app/src/display/widgets/Kconfig +++ b/app/src/display/widgets/Kconfig @@ -8,27 +8,23 @@ config ZMK_WIDGET_LAYER_STATUS default y depends on !ZMK_SPLIT || ZMK_SPLIT_BLE_ROLE_CENTRAL select LVGL_USE_LABEL - select LVGL_FONT_MONTSERRAT_12 config ZMK_WIDGET_BATTERY_STATUS bool "Widget for battery charge information, using small icons" depends on BT default y if BT select LVGL_USE_LABEL - select LVGL_FONT_MONTSERRAT_16 config ZMK_WIDGET_OUTPUT_STATUS bool "Widget for keyboard output status icons" depends on BT default y if BT select LVGL_USE_LABEL - select LVGL_FONT_MONTSERRAT_16 config ZMK_WIDGET_WPM_STATUS bool "Widget for displaying typed words per minute" depends on !ZMK_SPLIT || ZMK_SPLIT_BLE_ROLE_CENTRAL select LVGL_USE_LABEL - select LVGL_FONT_MONTSERRAT_16 select ZMK_WPM endmenu diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 7503c616750..362bdaa227b 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -18,22 +18,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); -static lv_style_t label_style; - -static bool style_initialized = false; - -void battery_status_init() { - if (style_initialized) { - return; - } - - style_initialized = true; - lv_style_init(&label_style); - lv_style_set_text_color(&label_style, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_style_set_text_font(&label_style, LV_STATE_DEFAULT, &lv_font_montserrat_16); - lv_style_set_text_letter_space(&label_style, LV_STATE_DEFAULT, 1); - lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); -} struct battery_status_state { uint8_t level; @@ -90,9 +74,7 @@ ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); #endif /* IS_ENABLED(CONFIG_USB) */ int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent) { - battery_status_init(); widget->obj = lv_label_create(parent, NULL); - lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_obj_set_size(widget->obj, 40, 15); diff --git a/app/src/display/widgets/layer_status.c b/app/src/display/widgets/layer_status.c index 3c63565bd26..32bdb82821e 100644 --- a/app/src/display/widgets/layer_status.c +++ b/app/src/display/widgets/layer_status.c @@ -16,28 +16,12 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); -static lv_style_t label_style; - -static bool style_initialized = false; struct layer_status_state { uint8_t index; const char *label; }; -static void layer_status_init() { - if (style_initialized) { - return; - } - - style_initialized = true; - lv_style_init(&label_style); - lv_style_set_text_color(&label_style, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_style_set_text_font(&label_style, LV_STATE_DEFAULT, &lv_font_montserrat_12); - lv_style_set_text_letter_space(&label_style, LV_STATE_DEFAULT, 1); - lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); -} - static void set_layer_symbol(lv_obj_t *label, struct layer_status_state state) { if (state.label == NULL) { char text[6] = {}; @@ -70,9 +54,7 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, laye ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent) { - layer_status_init(); widget->obj = lv_label_create(parent, NULL); - lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_obj_set_size(widget->obj, 40, 15); diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index b1a3710ddd4..4c32faea139 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -21,9 +21,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); -static lv_style_t label_style; - -static bool style_initialized = false; struct output_status_state { enum zmk_endpoint selected_endpoint; @@ -32,19 +29,6 @@ struct output_status_state { uint8_t active_profile_index; }; -static void output_status_init() { - if (style_initialized) { - return; - } - - style_initialized = true; - lv_style_init(&label_style); - lv_style_set_text_color(&label_style, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_style_set_text_font(&label_style, LV_STATE_DEFAULT, &lv_font_montserrat_16); - lv_style_set_text_letter_space(&label_style, LV_STATE_DEFAULT, 1); - lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); -} - static struct output_status_state get_state(const zmk_event_t *_eh) { return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), .active_profile_connected = @@ -97,10 +81,7 @@ ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); #endif int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent) { - output_status_init(); - widget->obj = lv_label_create(parent, NULL); - lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_obj_set_size(widget->obj, 40, 15); diff --git a/app/src/display/widgets/wpm_status.c b/app/src/display/widgets/wpm_status.c index bee34135564..7ed047c30c6 100644 --- a/app/src/display/widgets/wpm_status.c +++ b/app/src/display/widgets/wpm_status.c @@ -15,27 +15,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); -static lv_style_t label_style; - -static bool style_initialized = false; struct wpm_status_state { uint8_t wpm; }; -void wpm_status_init() { - if (style_initialized) { - return; - } - - style_initialized = true; - lv_style_init(&label_style); - lv_style_set_text_color(&label_style, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_style_set_text_font(&label_style, LV_STATE_DEFAULT, &lv_font_montserrat_12); - lv_style_set_text_letter_space(&label_style, LV_STATE_DEFAULT, 1); - lv_style_set_text_line_space(&label_style, LV_STATE_DEFAULT, 1); -} - struct wpm_status_state wpm_status_get_state(const zmk_event_t *eh) { return (struct wpm_status_state){.wpm = zmk_wpm_get_state()}; }; @@ -59,10 +43,7 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_wpm_status, struct wpm_status_state, wpm_stat ZMK_SUBSCRIPTION(widget_wpm_status, zmk_wpm_state_changed); int zmk_widget_wpm_status_init(struct zmk_widget_wpm_status *widget, lv_obj_t *parent) { - wpm_status_init(); - widget->obj = lv_label_create(parent, NULL); - lv_obj_add_style(widget->obj, LV_LABEL_PART_MAIN, &label_style); lv_label_set_align(widget->obj, LV_LABEL_ALIGN_RIGHT); lv_obj_set_size(widget->obj, 40, 15); From 36ced48e532dbb8f703d2affe37ea3e84a9d1c84 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Mon, 1 Feb 2021 14:39:30 -0600 Subject: [PATCH 0153/1130] refactor(boards): Remove split right keyboard names --- app/boards/shields/bfo9000/Kconfig.defconfig | 7 ------- app/boards/shields/corne/Kconfig.defconfig | 7 ------- app/boards/shields/cradio/Kconfig.defconfig | 9 +-------- app/boards/shields/helix/Kconfig.defconfig | 7 ------- app/boards/shields/iris/Kconfig.defconfig | 7 ------- app/boards/shields/jian/Kconfig.defconfig | 8 -------- app/boards/shields/jorne/Kconfig.defconfig | 8 -------- app/boards/shields/kyria/Kconfig.defconfig | 8 -------- app/boards/shields/lily58/Kconfig.defconfig | 7 ------- app/boards/shields/microdox/Kconfig.defconfig | 8 -------- app/boards/shields/quefrency/Kconfig.defconfig | 7 ------- app/boards/shields/sofle/Kconfig.defconfig | 7 ------- app/boards/shields/splitreus62/Kconfig.defconfig | 7 ------- 13 files changed, 1 insertion(+), 96 deletions(-) diff --git a/app/boards/shields/bfo9000/Kconfig.defconfig b/app/boards/shields/bfo9000/Kconfig.defconfig index a85848862a3..fdad5508a63 100644 --- a/app/boards/shields/bfo9000/Kconfig.defconfig +++ b/app/boards/shields/bfo9000/Kconfig.defconfig @@ -11,13 +11,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_BFO9000_RIGHT - -config ZMK_KEYBOARD_NAME - default "BFO9000 Right" - -endif - if SHIELD_BFO9000_LEFT || SHIELD_BFO9000_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/corne/Kconfig.defconfig b/app/boards/shields/corne/Kconfig.defconfig index ef4817b5a17..35bc29910ae 100644 --- a/app/boards/shields/corne/Kconfig.defconfig +++ b/app/boards/shields/corne/Kconfig.defconfig @@ -8,13 +8,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_CORNE_RIGHT - -config ZMK_KEYBOARD_NAME - default "Corne Right" - -endif - if SHIELD_CORNE_LEFT || SHIELD_CORNE_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/cradio/Kconfig.defconfig b/app/boards/shields/cradio/Kconfig.defconfig index 1a008d69323..d5f8f4e0bba 100644 --- a/app/boards/shields/cradio/Kconfig.defconfig +++ b/app/boards/shields/cradio/Kconfig.defconfig @@ -11,14 +11,7 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_CRADIO_RIGHT - -config ZMK_KEYBOARD_NAME - default "Cradio_Right" - -endif - -if SHIELD_CRADIO_RIGHT || SHIELD_CRADIO_LEFT +if SHIELD_CRADIO_LEFT || SHIELD_CRADIO_RIGHT config ZMK_SPLIT default y diff --git a/app/boards/shields/helix/Kconfig.defconfig b/app/boards/shields/helix/Kconfig.defconfig index f0a4f8805fc..656ec2df763 100644 --- a/app/boards/shields/helix/Kconfig.defconfig +++ b/app/boards/shields/helix/Kconfig.defconfig @@ -11,13 +11,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_HELIX_RIGHT - -config ZMK_KEYBOARD_NAME - default "Helix Right" - -endif - if SHIELD_HELIX_LEFT || SHIELD_HELIX_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/iris/Kconfig.defconfig b/app/boards/shields/iris/Kconfig.defconfig index 57b8c1ee73d..308e3cefb11 100644 --- a/app/boards/shields/iris/Kconfig.defconfig +++ b/app/boards/shields/iris/Kconfig.defconfig @@ -11,13 +11,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_IRIS_RIGHT - -config ZMK_KEYBOARD_NAME - default "Iris Right" - -endif - if SHIELD_IRIS_LEFT || SHIELD_IRIS_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/jian/Kconfig.defconfig b/app/boards/shields/jian/Kconfig.defconfig index fc1f199588e..2de9660fc98 100644 --- a/app/boards/shields/jian/Kconfig.defconfig +++ b/app/boards/shields/jian/Kconfig.defconfig @@ -9,14 +9,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif - -if SHIELD_JIAN_RIGHT - -config ZMK_KEYBOARD_NAME - default "Jian Right" - -endif - if SHIELD_JIAN_LEFT || SHIELD_JIAN_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/jorne/Kconfig.defconfig b/app/boards/shields/jorne/Kconfig.defconfig index 860cb12fd5f..adec67d75e6 100644 --- a/app/boards/shields/jorne/Kconfig.defconfig +++ b/app/boards/shields/jorne/Kconfig.defconfig @@ -9,14 +9,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif - -if SHIELD_JORNE_RIGHT - -config ZMK_KEYBOARD_NAME - default "Jorne Right" - -endif - if SHIELD_JORNE_LEFT || SHIELD_JORNE_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 99e47bfeed7..79a7338879a 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -9,14 +9,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif - -if SHIELD_KYRIA_RIGHT - -config ZMK_KEYBOARD_NAME - default "Kyria Right" - -endif - if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/lily58/Kconfig.defconfig b/app/boards/shields/lily58/Kconfig.defconfig index 915cc70e117..190286264bb 100644 --- a/app/boards/shields/lily58/Kconfig.defconfig +++ b/app/boards/shields/lily58/Kconfig.defconfig @@ -9,13 +9,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_LILY58_RIGHT - -config ZMK_KEYBOARD_NAME - default "Lily58 Right" - -endif - if SHIELD_LILY58_LEFT || SHIELD_LILY58_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index be39c9f8c82..bfc867ed3d1 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -11,14 +11,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif - -if SHIELD_MICRODOX_RIGHT - -config ZMK_KEYBOARD_NAME - default "Microdox Right" - -endif - if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/quefrency/Kconfig.defconfig b/app/boards/shields/quefrency/Kconfig.defconfig index de44702fcd0..6d342ee6cd9 100644 --- a/app/boards/shields/quefrency/Kconfig.defconfig +++ b/app/boards/shields/quefrency/Kconfig.defconfig @@ -12,13 +12,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_QUEFRENCY_RIGHT - -config ZMK_KEYBOARD_NAME - default "Quefrency Right" - -endif - if SHIELD_QUEFRENCY_LEFT || SHIELD_QUEFRENCY_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 6a580bfee45..3ea6ee4b3b3 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -11,13 +11,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_SOFLE_RIGHT - -config ZMK_KEYBOARD_NAME - default "Sofle Right" - -endif - if SHIELD_SOFLE_LEFT || SHIELD_SOFLE_RIGHT config ZMK_SPLIT diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index 41c1218a0e6..e8f74148458 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -13,13 +13,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_SPLITREUS62_RIGHT - -config ZMK_KEYBOARD_NAME - default "Splitreus62 Rt" - -endif - if SHIELD_SPLITREUS62_LEFT || SHIELD_SPLITREUS62_RIGHT config ZMK_SPLIT From 478cf9437421cd14fd8a67cef3f80aff03001bb6 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sat, 27 Mar 2021 14:03:05 -0500 Subject: [PATCH 0154/1130] refactor(boards): Remove "left" from split keyboard names --- app/boards/shields/bfo9000/Kconfig.defconfig | 2 +- app/boards/shields/helix/Kconfig.defconfig | 2 +- app/boards/shields/iris/Kconfig.defconfig | 2 +- app/boards/shields/jian/Kconfig.defconfig | 2 +- app/boards/shields/jorne/Kconfig.defconfig | 2 +- app/boards/shields/kyria/Kconfig.defconfig | 2 +- app/boards/shields/lily58/Kconfig.defconfig | 2 +- app/boards/shields/microdox/Kconfig.defconfig | 2 +- app/boards/shields/quefrency/Kconfig.defconfig | 2 +- app/boards/shields/sofle/Kconfig.defconfig | 2 +- app/boards/shields/splitreus62/Kconfig.defconfig | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/boards/shields/bfo9000/Kconfig.defconfig b/app/boards/shields/bfo9000/Kconfig.defconfig index fdad5508a63..c927ea2d3e2 100644 --- a/app/boards/shields/bfo9000/Kconfig.defconfig +++ b/app/boards/shields/bfo9000/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_BFO9000_LEFT config ZMK_KEYBOARD_NAME - default "BFO9000 Left" + default "BFO-9000" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/helix/Kconfig.defconfig b/app/boards/shields/helix/Kconfig.defconfig index 656ec2df763..385b95ead78 100644 --- a/app/boards/shields/helix/Kconfig.defconfig +++ b/app/boards/shields/helix/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_HELIX_LEFT config ZMK_KEYBOARD_NAME - default "Helix Left" + default "Helix" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/iris/Kconfig.defconfig b/app/boards/shields/iris/Kconfig.defconfig index 308e3cefb11..59e4f3884d5 100644 --- a/app/boards/shields/iris/Kconfig.defconfig +++ b/app/boards/shields/iris/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_IRIS_LEFT config ZMK_KEYBOARD_NAME - default "Iris Left" + default "Iris" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/jian/Kconfig.defconfig b/app/boards/shields/jian/Kconfig.defconfig index 2de9660fc98..e2bbb40764c 100644 --- a/app/boards/shields/jian/Kconfig.defconfig +++ b/app/boards/shields/jian/Kconfig.defconfig @@ -2,7 +2,7 @@ if SHIELD_JIAN_LEFT config ZMK_KEYBOARD_NAME - default "Jian Left" + default "Jian" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/jorne/Kconfig.defconfig b/app/boards/shields/jorne/Kconfig.defconfig index adec67d75e6..5e5830db1f2 100644 --- a/app/boards/shields/jorne/Kconfig.defconfig +++ b/app/boards/shields/jorne/Kconfig.defconfig @@ -2,7 +2,7 @@ if SHIELD_JORNE_LEFT config ZMK_KEYBOARD_NAME - default "Jorne Left" + default "Jorne" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 79a7338879a..57a701a9abb 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -2,7 +2,7 @@ if SHIELD_KYRIA_LEFT config ZMK_KEYBOARD_NAME - default "Kyria Left" + default "Kyria" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/lily58/Kconfig.defconfig b/app/boards/shields/lily58/Kconfig.defconfig index 190286264bb..c09fcd7d4dd 100644 --- a/app/boards/shields/lily58/Kconfig.defconfig +++ b/app/boards/shields/lily58/Kconfig.defconfig @@ -2,7 +2,7 @@ if SHIELD_LILY58_LEFT config ZMK_KEYBOARD_NAME - default "Lily58 Left" + default "Lily58" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index bfc867ed3d1..4115577dd0a 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_MICRODOX_LEFT config ZMK_KEYBOARD_NAME - default "Microdox Left" + default "Microdox" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/quefrency/Kconfig.defconfig b/app/boards/shields/quefrency/Kconfig.defconfig index 6d342ee6cd9..1122199ed35 100644 --- a/app/boards/shields/quefrency/Kconfig.defconfig +++ b/app/boards/shields/quefrency/Kconfig.defconfig @@ -5,7 +5,7 @@ if SHIELD_QUEFRENCY_LEFT config ZMK_KEYBOARD_NAME - default "Quefrency Left" + default "Quefrency" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 3ea6ee4b3b3..fcee7fbeab3 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_SOFLE_LEFT config ZMK_KEYBOARD_NAME - default "Sofle Left" + default "Sofle" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index e8f74148458..21cc325634f 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -6,7 +6,7 @@ if SHIELD_SPLITREUS62_LEFT config ZMK_KEYBOARD_NAME - default "Splitreus62 Left" + default "Splitreus62" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y From 10870b24bf30ebe9f1037695f84a9cd7b378d450 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Mon, 1 Feb 2021 14:41:53 -0600 Subject: [PATCH 0155/1130] fix(docs): Update split naming system --- docs/docs/development/new-shield.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index f29a96e5edc..2403261f321 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -98,20 +98,13 @@ Finally, you'll want to turn on the split option for both sides. This can all be if SHIELD_MY_BOARD_LEFT config ZMK_KEYBOARD_NAME - default "My Awesome Keyboard Left" + default "My Awesome Keyboard" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y endif -if SHIELD_MY_BOARD_RIGHT - -config ZMK_KEYBOARD_NAME - default "My Awesome Keyboard Right" - -endif - if SHIELD_MY_BOARD_LEFT || SHIELD_MY_BOARD_RIGHT config ZMK_SPLIT From 014e5ba93c9328d74f6905f30b87241c2a47f253 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 26 Sep 2021 01:21:49 +0000 Subject: [PATCH 0156/1130] refactor(boards): Remove leftover right split name --- app/boards/shields/a_dux/Kconfig.defconfig | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/boards/shields/a_dux/Kconfig.defconfig b/app/boards/shields/a_dux/Kconfig.defconfig index f2911df4a9f..3d77a5f8423 100644 --- a/app/boards/shields/a_dux/Kconfig.defconfig +++ b/app/boards/shields/a_dux/Kconfig.defconfig @@ -11,13 +11,6 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_A_DUX_RIGHT - -config ZMK_KEYBOARD_NAME - default "A. Dux Right" - -endif - if SHIELD_A_DUX_LEFT || SHIELD_A_DUX_RIGHT config ZMK_SPLIT From 4a03214e069f7f879a1f1ae5ed62ab2e701d91bd Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sat, 24 Jul 2021 14:15:57 -0500 Subject: [PATCH 0157/1130] feat(boards): Add D18-21 to Pro Micro pin mappings --- .../bluemicro840/arduino_pro_micro_pins.dtsi | 15 ++++++++++----- .../arm/nice_nano/arduino_pro_micro_pins.dtsi | 15 ++++++++++----- .../arm/nrfmicro/arduino_pro_micro_pins.dtsi | 17 +++++++++++------ .../arduino_pro_micro_pins_flipped.dtsi | 19 ++++++++++++------- .../arm/proton_c/arduino_pro_micro_pins.dtsi | 15 ++++++++++----- 5 files changed, 53 insertions(+), 28 deletions(-) diff --git a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi index 0dfe3be5fd7..237f5c450dc 100644 --- a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -5,7 +5,7 @@ */ / { - pro_micro_d: connector_d { + pro_micro: connector { compatible = "arduino-pro-micro"; #gpio-cells = <2>; gpio-map-mask = <0xffffffff 0xffffffc0>; @@ -25,6 +25,10 @@ , <16 0 &gpio0 28 0> /* D16 B2*/ , <14 0 &gpio0 3 0> /* D14 B3*/ , <15 0 &gpio1 13 0> /* D15 B1*/ + , <18 0 &gpio0 2 0> /* D18/A0 F7*/ + , <19 0 &gpio0 29 0> /* D19/A1 F6*/ + , <20 0 &gpio0 26 0> /* D20/A2 F5*/ + , <21 0 &gpio0 30 0> /* D21/A3 F4*/ ; }; @@ -34,10 +38,10 @@ gpio-map-mask = <0xffffffff 0xffffffc0>; gpio-map-pass-thru = <0 0x3f>; gpio-map - = <0 0 &gpio0 2 0> /* A0 F7*/ - , <1 0 &gpio0 29 0> /* A1 F6*/ - , <2 0 &gpio0 26 0> /* A2 F5*/ - , <3 0 &gpio0 30 0> /* A3 F4*/ + = <0 0 &gpio0 2 0> /* D18/A0 F7*/ + , <1 0 &gpio0 29 0> /* D19/A1 F6*/ + , <2 0 &gpio0 26 0> /* D20/A2 F5*/ + , <3 0 &gpio0 30 0> /* D21/A3 F4*/ , <6 0 &gpio0 20 0> /* D4/A6 D4*/ , <7 0 &gpio0 24 0> /* D6/A7 D7*/ , <8 0 &gpio0 10 0> /* D8/A8 B4*/ @@ -47,6 +51,7 @@ }; }; +pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; pro_micro_spi: &spi0 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi b/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi index 806cd2444ef..b972451bb5e 100644 --- a/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi @@ -5,7 +5,7 @@ */ / { - pro_micro_d: connector_d { + pro_micro: connector { compatible = "arduino-pro-micro"; #gpio-cells = <2>; gpio-map-mask = <0xffffffff 0xffffffc0>; @@ -25,6 +25,10 @@ , <16 0 &gpio0 10 0> /* D16 */ , <14 0 &gpio1 11 0> /* D14 */ , <15 0 &gpio1 13 0> /* D15 */ + , <18 0 &gpio1 15 0> /* D18/A0 */ + , <19 0 &gpio0 2 0> /* D19/A1 */ + , <20 0 &gpio0 29 0> /* D20/A2 */ + , <21 0 &gpio0 31 0> /* D21/A3 */ ; }; @@ -34,10 +38,10 @@ gpio-map-mask = <0xffffffff 0xffffffc0>; gpio-map-pass-thru = <0 0x3f>; gpio-map - = <0 0 &gpio1 15 0> /* A0 */ - , <1 0 &gpio0 2 0> /* A1 */ - , <2 0 &gpio0 29 0> /* A2 */ - , <3 0 &gpio0 31 0> /* A3 */ + = <0 0 &gpio1 15 0> /* D18/A0 */ + , <1 0 &gpio0 2 0> /* D19/A1 */ + , <2 0 &gpio0 29 0> /* D20/A2 */ + , <3 0 &gpio0 31 0> /* D21/A3 */ , <6 0 &gpio0 22 0> /* D4/A6 */ , <7 0 &gpio1 0 0> /* D6/A7 */ , <8 0 &gpio1 4 0> /* D8/A8 */ @@ -47,6 +51,7 @@ }; }; +pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; pro_micro_spi: &spi0 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi index 558391dd681..537aaed35b0 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi @@ -6,7 +6,7 @@ / { - pro_micro_d: connector_d { + pro_micro: connector { compatible = "arduino-pro-micro"; #gpio-cells = <2>; gpio-map-mask = <0xffffffff 0xffffffc0>; @@ -24,8 +24,12 @@ , <9 0 &gpio1 6 0> /* D9/A9 */ , <10 0 &gpio1 11 0> /* D10/A10 */ , <16 0 &gpio0 28 0> /* D16 */ - , <14 0 &gpio0 3 0> /* D14 */ + , <14 0 &gpio0 3 0> /* D14 */ , <15 0 &gpio1 13 0> /* D15 */ + , <18 0 &gpio0 2 0> /* D18/A0 */ + , <19 0 &gpio0 29 0> /* D19/A1 */ + , <20 0 &gpio0 31 0> /* D20/A2 */ + , <21 0 &gpio0 30 0> /* D21/A3 */ ; }; @@ -35,10 +39,10 @@ gpio-map-mask = <0xffffffff 0xffffffc0>; gpio-map-pass-thru = <0 0x3f>; gpio-map - = <0 0 &gpio0 2 0> /* A0 */ - , <1 0 &gpio0 29 0> /* A1 */ - , <2 0 &gpio0 31 0> /* A2 */ - , <3 0 &gpio0 30 0> /* A3 */ + = <0 0 &gpio0 2 0> /* D18/A0 */ + , <1 0 &gpio0 29 0> /* D19/A1 */ + , <2 0 &gpio0 31 0> /* D20/A2 */ + , <3 0 &gpio0 30 0> /* D21/A3 */ , <6 0 &gpio0 20 0> /* D4/A6 */ , <7 0 &gpio0 24 0> /* D6/A7 */ , <8 0 &gpio0 10 0> /* D8/A8 */ @@ -49,6 +53,7 @@ }; +pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; pro_micro_spi: &spi0 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi index 68ca266ded0..887a31446c5 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi @@ -5,7 +5,7 @@ */ / { - pro_micro_d: connector_d { + pro_micro: connector { compatible = "arduino-pro-micro"; #gpio-cells = <2>; gpio-map-mask = <0xffffffff 0xffffffc0>; @@ -21,10 +21,14 @@ , <7 0 &gpio0 3 0> /* D7 */ , <8 0 &gpio0 28 0> /* D8/A8 */ , <9 0 &gpio1 11 0> /* D9/A9 */ - , <10 0 &gpio1 6 0> /* D10/A10 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ , <16 0 &gpio0 10 0> /* D16 */ - , <14 0 &gpio0 9 0> /* D14 */ + , <14 0 &gpio0 9 0> /* D14 */ , <15 0 &gpio0 24 0> /* D15 */ + , <18 0 &gpio0 13 0> /* D18/A0 */ + , <19 0 &gpio0 20 0> /* D19/A1 */ + , <20 0 &gpio0 17 0> /* D20/A2 */ + , <21 0 &gpio0 15 0> /* D21/A3 */ ; }; @@ -34,10 +38,10 @@ gpio-map-mask = <0xffffffff 0xffffffc0>; gpio-map-pass-thru = <0 0x3f>; gpio-map - = <0 0 &gpio0 13 0> /* A0 */ - , <1 0 &gpio0 20 0> /* A1 */ - , <2 0 &gpio0 17 0> /* A2 */ - , <3 0 &gpio0 15 0> /* A3 */ + = <0 0 &gpio0 13 0> /* D18/A0 */ + , <1 0 &gpio0 20 0> /* D19/A1 */ + , <2 0 &gpio0 17 0> /* D20/A2 */ + , <3 0 &gpio0 15 0> /* D21/A3 */ , <6 0 &gpio0 29 0> /* D4/A6 */ , <7 0 &gpio1 13 0> /* D6/A7 */ , <8 0 &gpio0 28 0> /* D8/A8 */ @@ -47,6 +51,7 @@ }; }; +pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; pro_micro_spi: &spi0 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi b/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi index 2c32319e386..9a026adf0d8 100644 --- a/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi @@ -5,7 +5,7 @@ */ / { - pro_micro_d: connector_d { + pro_micro: connector { compatible = "arduino-pro-micro"; #gpio-cells = <2>; gpio-map-mask = <0xffffffff 0xffffffc0>; @@ -25,6 +25,10 @@ , <16 0 &gpiob 15 0> /* D16 */ , <14 0 &gpiob 14 0> /* D14 */ , <15 0 &gpiob 13 0> /* D15 */ + , <18 0 &gpiob 8 0> /* D18/A0 */ + , <19 0 &gpioa 0 0> /* D19/A1 */ + , <20 0 &gpioa 1 0> /* D20/A2 */ + , <21 0 &gpioa 2 0> /* D21/A3 */ ; }; @@ -34,10 +38,10 @@ gpio-map-mask = <0xffffffff 0xffffffc0>; gpio-map-pass-thru = <0 0x3f>; gpio-map - = <0 0 &gpiob 8 0> /* A0 */ - , <1 0 &gpioa 0 0> /* A1 */ - , <2 0 &gpioa 1 0> /* A2 */ - , <3 0 &gpioa 2 0> /* A3 */ + = <0 0 &gpiob 8 0> /* D18/A0 */ + , <1 0 &gpioa 0 0> /* D19/A1 */ + , <2 0 &gpioa 1 0> /* D20/A2 */ + , <3 0 &gpioa 2 0> /* D21/A3 */ , <6 0 &gpiob 5 0> /* D4/A6 */ , <7 0 &gpiob 3 0> /* D6/A7 */ , <8 0 &gpiob 1 0> /* D8/A8 */ @@ -47,6 +51,7 @@ }; }; +pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c1 {}; pro_micro_spi: &spi2 {}; pro_micro_serial: &usart1 {}; From 687e91ab18bbff88f16d30d6b88125e6d03addf4 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sat, 24 Jul 2021 14:19:43 -0500 Subject: [PATCH 0158/1130] feat(boards): Remove usage of pro_micro_a/d nodes --- app/boards/shields/bfo9000/bfo9000.dtsi | 12 +++--- .../shields/bfo9000/bfo9000_left.overlay | 18 ++++----- .../shields/bfo9000/bfo9000_right.overlay | 18 ++++----- .../boardsource3x4/boardsource3x4.overlay | 14 +++---- app/boards/shields/corne/corne.dtsi | 8 ++-- app/boards/shields/corne/corne_left.overlay | 12 +++--- app/boards/shields/corne/corne_right.overlay | 12 +++--- app/boards/shields/cradio/cradio.dtsi | 34 ++++++++--------- app/boards/shields/crbn/crbn.overlay | 36 +++++++++--------- app/boards/shields/eek/eek.overlay | 28 +++++++------- app/boards/shields/helix/helix.dtsi | 10 ++--- app/boards/shields/helix/helix_left.overlay | 14 +++---- app/boards/shields/helix/helix_right.overlay | 14 +++---- app/boards/shields/iris/iris.dtsi | 10 ++--- app/boards/shields/iris/iris_left.overlay | 12 +++--- app/boards/shields/iris/iris_right.overlay | 12 +++--- app/boards/shields/jian/jian.dtsi | 8 ++-- app/boards/shields/jian/jian_left.overlay | 12 +++--- app/boards/shields/jian/jian_right.overlay | 12 +++--- app/boards/shields/jorne/jorne.dtsi | 8 ++-- app/boards/shields/jorne/jorne_left.overlay | 12 +++--- app/boards/shields/jorne/jorne_right.overlay | 12 +++--- app/boards/shields/kyria/kyria.dtsi | 16 ++++---- app/boards/shields/kyria/kyria_left.overlay | 16 ++++---- app/boards/shields/kyria/kyria_right.overlay | 16 ++++---- app/boards/shields/lily58/lily58.dtsi | 14 +++---- app/boards/shields/lily58/lily58_left.overlay | 12 +++--- .../shields/lily58/lily58_right.overlay | 12 +++--- app/boards/shields/microdox/microdox.dtsi | 8 ++-- .../shields/microdox/microdox_left.overlay | 10 ++--- .../shields/microdox/microdox_right.overlay | 10 ++--- app/boards/shields/nibble/nibble.overlay | 22 +++++------ app/boards/shields/qaz/qaz.overlay | 26 ++++++------- .../shields/quefrency/quefrency_left.overlay | 24 ++++++------ .../shields/quefrency/quefrency_right.overlay | 28 +++++++------- .../shields/reviung41/reviung41.overlay | 26 ++++++------- app/boards/shields/romac/romac.overlay | 14 +++---- app/boards/shields/romac_plus/romac_plus.dtsi | 12 +++--- .../shields/romac_plus/romac_plus.overlay | 6 +-- .../settings_reset/settings_reset.overlay | 2 +- app/boards/shields/sofle/sofle.dtsi | 18 ++++----- app/boards/shields/sofle/sofle_left.overlay | 12 +++--- app/boards/shields/sofle/sofle_right.overlay | 12 +++--- .../shields/splitreus62/splitreus62.dtsi | 12 +++--- .../splitreus62/splitreus62_left.overlay | 12 +++--- .../splitreus62/splitreus62_right.overlay | 12 +++--- app/boards/shields/tg4x/tg4x.overlay | 30 +++++++-------- app/boards/shields/tidbit/tidbit.dtsi | 38 +++++++++---------- 48 files changed, 374 insertions(+), 374 deletions(-) diff --git a/app/boards/shields/bfo9000/bfo9000.dtsi b/app/boards/shields/bfo9000/bfo9000.dtsi index 33b364e1f37..0ceb9127048 100644 --- a/app/boards/shields/bfo9000/bfo9000.dtsi +++ b/app/boards/shields/bfo9000/bfo9000.dtsi @@ -32,12 +32,12 @@ diode-direction = "col2row"; row-gpios - = <&pro_micro_d 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/bfo9000/bfo9000_left.overlay b/app/boards/shields/bfo9000/bfo9000_left.overlay index 777f08359d1..3f034d955a3 100644 --- a/app/boards/shields/bfo9000/bfo9000_left.overlay +++ b/app/boards/shields/bfo9000/bfo9000_left.overlay @@ -8,14 +8,14 @@ &kscan0 { col-gpios - = <&pro_micro_d 9 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/bfo9000/bfo9000_right.overlay b/app/boards/shields/bfo9000/bfo9000_right.overlay index ab3fb55f98b..30bd35e2ca3 100644 --- a/app/boards/shields/bfo9000/bfo9000_right.overlay +++ b/app/boards/shields/bfo9000/bfo9000_right.overlay @@ -12,14 +12,14 @@ &kscan0 { col-gpios - = <&pro_micro_d 9 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/boardsource3x4/boardsource3x4.overlay b/app/boards/shields/boardsource3x4/boardsource3x4.overlay index 0b8f849882f..afbc9abf2af 100644 --- a/app/boards/shields/boardsource3x4/boardsource3x4.overlay +++ b/app/boards/shields/boardsource3x4/boardsource3x4.overlay @@ -17,16 +17,16 @@ diode-direction = "col2row"; row-gpios - = <&pro_micro_a 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; col-gpios - = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> ; }; }; \ No newline at end of file diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index bb37d67ab84..167c0916ee4 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -50,10 +50,10 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 diode-direction = "col2row"; row-gpios - = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/corne/corne_left.overlay b/app/boards/shields/corne/corne_left.overlay index 399bddd12d7..fe7e3c78baf 100644 --- a/app/boards/shields/corne/corne_left.overlay +++ b/app/boards/shields/corne/corne_left.overlay @@ -8,11 +8,11 @@ &kscan0 { col-gpios - = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/corne/corne_right.overlay b/app/boards/shields/corne/corne_right.overlay index 4250ac5546b..6e79a858d20 100644 --- a/app/boards/shields/corne/corne_right.overlay +++ b/app/boards/shields/corne/corne_right.overlay @@ -12,11 +12,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/cradio/cradio.dtsi b/app/boards/shields/cradio/cradio.dtsi index db222581312..ca464c9580a 100644 --- a/app/boards/shields/cradio/cradio.dtsi +++ b/app/boards/shields/cradio/cradio.dtsi @@ -29,23 +29,23 @@ compatible = "zmk,kscan-gpio-direct"; label = "KSCAN"; input-gpios - = <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> ; }; diff --git a/app/boards/shields/crbn/crbn.overlay b/app/boards/shields/crbn/crbn.overlay index 7520daecda4..18382cce2da 100644 --- a/app/boards/shields/crbn/crbn.overlay +++ b/app/boards/shields/crbn/crbn.overlay @@ -17,33 +17,33 @@ diode-direction = "col2row"; col-gpios - = <&pro_micro_d 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 4 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 7 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 8 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 3 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; encoder: encoder { compatible = "alps,ec11"; label = "ENCODER"; - a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <2>; status = "okay"; }; diff --git a/app/boards/shields/eek/eek.overlay b/app/boards/shields/eek/eek.overlay index 11b986864c4..3f830f079e9 100644 --- a/app/boards/shields/eek/eek.overlay +++ b/app/boards/shields/eek/eek.overlay @@ -30,23 +30,23 @@ diode-direction = "col2row"; col-gpios - = <&pro_micro_d 4 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; }; \ No newline at end of file diff --git a/app/boards/shields/helix/helix.dtsi b/app/boards/shields/helix/helix.dtsi index 8df943f0a20..4545756085a 100644 --- a/app/boards/shields/helix/helix.dtsi +++ b/app/boards/shields/helix/helix.dtsi @@ -36,11 +36,11 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9 diode-direction = "col2row"; row-gpios - = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/helix/helix_left.overlay b/app/boards/shields/helix/helix_left.overlay index 733e55f99d8..5b0c7623454 100644 --- a/app/boards/shields/helix/helix_left.overlay +++ b/app/boards/shields/helix/helix_left.overlay @@ -8,12 +8,12 @@ &kscan0 { col-gpios - = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/helix/helix_right.overlay b/app/boards/shields/helix/helix_right.overlay index 2383a30ecdc..42dd0f52166 100644 --- a/app/boards/shields/helix/helix_right.overlay +++ b/app/boards/shields/helix/helix_right.overlay @@ -12,12 +12,12 @@ &kscan0 { col-gpios - = <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi index eb065736f75..24099f61f83 100644 --- a/app/boards/shields/iris/iris.dtsi +++ b/app/boards/shields/iris/iris.dtsi @@ -36,11 +36,11 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/iris/iris_left.overlay b/app/boards/shields/iris/iris_left.overlay index 7ded678b227..2c52fca8035 100644 --- a/app/boards/shields/iris/iris_left.overlay +++ b/app/boards/shields/iris/iris_left.overlay @@ -8,11 +8,11 @@ &kscan0 { col-gpios - = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/iris/iris_right.overlay b/app/boards/shields/iris/iris_right.overlay index 519658210e5..2ed712a208b 100644 --- a/app/boards/shields/iris/iris_right.overlay +++ b/app/boards/shields/iris/iris_right.overlay @@ -12,11 +12,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/jian/jian.dtsi b/app/boards/shields/jian/jian.dtsi index 88bac831273..34c0298ed6f 100644 --- a/app/boards/shields/jian/jian.dtsi +++ b/app/boards/shields/jian/jian.dtsi @@ -66,10 +66,10 @@ diode-direction = "col2row"; row-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/jian/jian_left.overlay b/app/boards/shields/jian/jian_left.overlay index 553dbd05c36..e7f9d5b5ed0 100644 --- a/app/boards/shields/jian/jian_left.overlay +++ b/app/boards/shields/jian/jian_left.overlay @@ -8,11 +8,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 8 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/jian/jian_right.overlay b/app/boards/shields/jian/jian_right.overlay index 1430b817cee..f3b0da3d2c9 100644 --- a/app/boards/shields/jian/jian_right.overlay +++ b/app/boards/shields/jian/jian_right.overlay @@ -12,11 +12,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 8 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 1 GPIO_ACTIVE_HIGH> + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index c782d520bd9..a84798cc4b9 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -66,10 +66,10 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 diode-direction = "col2row"; row-gpios - = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/jorne/jorne_left.overlay b/app/boards/shields/jorne/jorne_left.overlay index 065a23daf1b..7e132cd97e7 100644 --- a/app/boards/shields/jorne/jorne_left.overlay +++ b/app/boards/shields/jorne/jorne_left.overlay @@ -8,11 +8,11 @@ &kscan0 { col-gpios - = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/jorne/jorne_right.overlay b/app/boards/shields/jorne/jorne_right.overlay index 5a0be2cc25e..4f138b0be34 100644 --- a/app/boards/shields/jorne/jorne_right.overlay +++ b/app/boards/shields/jorne/jorne_right.overlay @@ -12,11 +12,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/kyria/kyria.dtsi b/app/boards/shields/kyria/kyria.dtsi index c0bec79b060..2d5114ec48b 100644 --- a/app/boards/shields/kyria/kyria.dtsi +++ b/app/boards/shields/kyria/kyria.dtsi @@ -50,10 +50,10 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; @@ -61,8 +61,8 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; @@ -70,8 +70,8 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) right_encoder: encoder_right { compatible = "alps,ec11"; label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; diff --git a/app/boards/shields/kyria/kyria_left.overlay b/app/boards/shields/kyria/kyria_left.overlay index c8b5be27166..20ced548e6b 100644 --- a/app/boards/shields/kyria/kyria_left.overlay +++ b/app/boards/shields/kyria/kyria_left.overlay @@ -8,14 +8,14 @@ &kscan0 { col-gpios - = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/kyria/kyria_right.overlay b/app/boards/shields/kyria/kyria_right.overlay index 8163c95e8b1..eefd76bf6d9 100644 --- a/app/boards/shields/kyria/kyria_right.overlay +++ b/app/boards/shields/kyria/kyria_right.overlay @@ -12,14 +12,14 @@ &kscan0 { col-gpios - = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index db54cf4dead..8e8ed3f2155 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -36,11 +36,11 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; @@ -48,8 +48,8 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; }; diff --git a/app/boards/shields/lily58/lily58_left.overlay b/app/boards/shields/lily58/lily58_left.overlay index 7397f1889d7..daa53651ff3 100644 --- a/app/boards/shields/lily58/lily58_left.overlay +++ b/app/boards/shields/lily58/lily58_left.overlay @@ -8,12 +8,12 @@ &kscan0 { col-gpios - = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/lily58/lily58_right.overlay b/app/boards/shields/lily58/lily58_right.overlay index 4fc460cf371..18ec806bd7b 100644 --- a/app/boards/shields/lily58/lily58_right.overlay +++ b/app/boards/shields/lily58/lily58_right.overlay @@ -12,11 +12,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index a692ce4d0e7..d489430e7c6 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -34,10 +34,10 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/microdox/microdox_left.overlay b/app/boards/shields/microdox/microdox_left.overlay index 4d0378e55f1..307776e721a 100644 --- a/app/boards/shields/microdox/microdox_left.overlay +++ b/app/boards/shields/microdox/microdox_left.overlay @@ -8,10 +8,10 @@ &kscan0 { col-gpios - = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/microdox/microdox_right.overlay b/app/boards/shields/microdox/microdox_right.overlay index 0801c7e1ea9..5475c31fbeb 100644 --- a/app/boards/shields/microdox/microdox_right.overlay +++ b/app/boards/shields/microdox/microdox_right.overlay @@ -17,10 +17,10 @@ &kscan0 { col-gpios - = <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index 3fd3c06c3b0..9e2fced8709 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -15,8 +15,8 @@ encoder_1: encoder_1 { compatible = "alps,ec11"; label = "Encoder 1"; - a-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; resolution = <4>; status = "okay"; }; @@ -26,17 +26,17 @@ label = "KSCAN"; polling-interval-msec = <25>; input-gpios - = <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_d 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + = <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> ; output-gpios - = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay index 205f7c26d01..098c9f02ef2 100644 --- a/app/boards/shields/qaz/qaz.overlay +++ b/app/boards/shields/qaz/qaz.overlay @@ -31,22 +31,22 @@ diode-direction = "col2row"; col-gpios - = <&pro_micro_d 8 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + = <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/quefrency/quefrency_left.overlay b/app/boards/shields/quefrency/quefrency_left.overlay index a385cc58ae4..a0f483efae9 100644 --- a/app/boards/shields/quefrency/quefrency_left.overlay +++ b/app/boards/shields/quefrency/quefrency_left.overlay @@ -17,21 +17,21 @@ col-gpios - = <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + = <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; }; diff --git a/app/boards/shields/quefrency/quefrency_right.overlay b/app/boards/shields/quefrency/quefrency_right.overlay index 53e0f77c86d..8e42d55508d 100644 --- a/app/boards/shields/quefrency/quefrency_right.overlay +++ b/app/boards/shields/quefrency/quefrency_right.overlay @@ -23,23 +23,23 @@ col-gpios - = <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> + = <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; }; diff --git a/app/boards/shields/reviung41/reviung41.overlay b/app/boards/shields/reviung41/reviung41.overlay index 5336853bc61..55900cc9d47 100644 --- a/app/boards/shields/reviung41/reviung41.overlay +++ b/app/boards/shields/reviung41/reviung41.overlay @@ -31,22 +31,22 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) diode-direction = "col2row"; col-gpios - = <&pro_micro_d 4 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 7 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 8 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; }; diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index e0880d3fa03..827273a47a2 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -17,16 +17,16 @@ diode-direction = "col2row"; row-gpios - = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; col-gpios - = <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + = <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/romac_plus/romac_plus.dtsi b/app/boards/shields/romac_plus/romac_plus.dtsi index 48f73412d81..0fd4374a3ad 100644 --- a/app/boards/shields/romac_plus/romac_plus.dtsi +++ b/app/boards/shields/romac_plus/romac_plus.dtsi @@ -31,18 +31,18 @@ RC(3,0) RC(3,1) RC(3,2) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; diff --git a/app/boards/shields/romac_plus/romac_plus.overlay b/app/boards/shields/romac_plus/romac_plus.overlay index 86430349320..4ef3874404d 100644 --- a/app/boards/shields/romac_plus/romac_plus.overlay +++ b/app/boards/shields/romac_plus/romac_plus.overlay @@ -18,9 +18,9 @@ diode-direction = "col2row"; col-gpios - = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/settings_reset/settings_reset.overlay b/app/boards/shields/settings_reset/settings_reset.overlay index 7a6629f8859..51e04ba7bc7 100644 --- a/app/boards/shields/settings_reset/settings_reset.overlay +++ b/app/boards/shields/settings_reset/settings_reset.overlay @@ -16,7 +16,7 @@ label = "KSCAN"; input-gpios - = <&pro_micro_d 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> ; }; diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 9c55fc3c5c3..9646b59dc5c 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -36,19 +36,19 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; @@ -56,8 +56,8 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) right_encoder: encoder_right { compatible = "alps,ec11"; label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; diff --git a/app/boards/shields/sofle/sofle_left.overlay b/app/boards/shields/sofle/sofle_left.overlay index eb2bfeda726..13bfb3977e6 100644 --- a/app/boards/shields/sofle/sofle_left.overlay +++ b/app/boards/shields/sofle/sofle_left.overlay @@ -8,12 +8,12 @@ &kscan0 { col-gpios - = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/sofle/sofle_right.overlay b/app/boards/shields/sofle/sofle_right.overlay index c35cf52ce72..53b10e601af 100644 --- a/app/boards/shields/sofle/sofle_right.overlay +++ b/app/boards/shields/sofle/sofle_right.overlay @@ -12,12 +12,12 @@ &kscan0 { col-gpios - = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index d88d06cb379..4b55bb8d183 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -38,12 +38,12 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) diode-direction = "row2col"; row-gpios - = <&pro_micro_d 1 GPIO_ACTIVE_HIGH > - , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 4 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + = <&pro_micro 1 GPIO_ACTIVE_HIGH > + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/splitreus62/splitreus62_left.overlay b/app/boards/shields/splitreus62/splitreus62_left.overlay index b156d608308..ba5c21ffb13 100644 --- a/app/boards/shields/splitreus62/splitreus62_left.overlay +++ b/app/boards/shields/splitreus62/splitreus62_left.overlay @@ -8,11 +8,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/splitreus62/splitreus62_right.overlay b/app/boards/shields/splitreus62/splitreus62_right.overlay index 5db87cc3c58..f301ab999bb 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.overlay +++ b/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -12,11 +12,11 @@ &kscan0 { col-gpios - = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; diff --git a/app/boards/shields/tg4x/tg4x.overlay b/app/boards/shields/tg4x/tg4x.overlay index 38e4faa74c5..0df94a2b59e 100644 --- a/app/boards/shields/tg4x/tg4x.overlay +++ b/app/boards/shields/tg4x/tg4x.overlay @@ -14,24 +14,24 @@ diode-direction = "col2row"; row-gpios - = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; col-gpios - = <&pro_micro_d 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> ; }; diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index 004de3105ac..2b08ad499d0 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -14,18 +14,18 @@ diode-direction = "row2col"; row-gpios - = <&pro_micro_d 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; col-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; @@ -47,8 +47,8 @@ encoder_1_top_row: encoder_1_top_row { compatible = "alps,ec11"; label = "Top Row Encoder"; - a-gpios = <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; @@ -56,8 +56,8 @@ encoder_1: encoder_1 { compatible = "alps,ec11"; label = "Encoder 1"; - a-gpios = <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; @@ -65,8 +65,8 @@ encoder_2: encoder_2 { compatible = "alps,ec11"; label = "Encoder 2"; - a-gpios = <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; @@ -74,8 +74,8 @@ encoder_3: encoder_3 { compatible = "alps,ec11"; label = "Encoder 3"; - a-gpios = <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; @@ -83,8 +83,8 @@ encoder_4: encoder_4 { compatible = "alps,ec11"; label = "Encoder 4"; - a-gpios = <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; resolution = <4>; status = "disabled"; }; From e6645882c32454251466949fa9a6447b195acd72 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Mon, 2 Aug 2021 21:47:11 -0500 Subject: [PATCH 0159/1130] feat(docs): Update documentation to match new Pro Micro nodes --- .../pro-micro/pro-micro-pins-labelled.jpg | Bin 115573 -> 490463 bytes .../development/boards-shields-keymaps.md | 2 +- docs/docs/development/new-shield.md | 48 +++++++++--------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/docs/assets/pro-micro/pro-micro-pins-labelled.jpg b/docs/docs/assets/pro-micro/pro-micro-pins-labelled.jpg index f72d407719e9ff4d20ed45d93d12dead8caa9da5..88161e39fb28ad78583f06088ba3b1f18a8b6fe3 100644 GIT binary patch literal 490463 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

    -A*d}}yJKXn#nj^?Qc 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YUTjGtM{ty!nKgRwq-ouim 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≶?EJ>wO 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�`3f&?T=_v(0=$}(rBxvQDM>X=kWyi_PcJx6eO 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 IZ}RVd03%F@hyVZp literal 115573 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 DB^7&W diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 539168842f1..4444537e3ae 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -47,6 +47,6 @@ in the `app/boards/shields/${board_name}` directory, e.g. `app/boards/shields/cl - A `Kconfig.shield` that defines the toplevel Kconfig value for the shield, which uses a supplied utility to function to default the value based on the shield list, e.g. `def_bool $(shields_list_contains,clueboard_california)`. - A `Kconfig.defconfig` file to set default values for things like `ZMK_KEYBOARD_NAME` - A `${shield_name}.overlay` file, which is a devicetree overlay file, that includes: - - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro_a` and `&pro_micro_d` aliases can be used to reference the standard `A#` and `D#` pins in shields. + - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. - (Optional) A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 2403261f321..d8b416986c7 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -117,7 +117,7 @@ endif ![Labelled Pro Micro pins](../assets/pro-micro/pro-micro-pins-labelled.jpg) -ZMK uses the green color coded pin names to generate devicetree node references. For example, to refer to the node `D0` in the devicetree files, use `&pro_micro_d 0` or to refer to `A1`, use `&pro_micro_a 1`. +ZMK uses the blue color coded pin names to generate devicetree node references. For example, to refer to the node `0` in the devicetree files, use `&pro_micro 0`. - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> ; row-gpios - = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; }; @@ -200,11 +200,11 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) diode-direction = "col2row"; row-gpios - = <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A from the schematic file - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B from the schematic file - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C from the schematic file - , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D from the schematic file - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row E from the schematic file + = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A from the schematic file + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B from the schematic file + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C from the schematic file + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D from the schematic file + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row E from the schematic file ; }; @@ -228,12 +228,12 @@ This is exemplified with the iris .overlay files. &kscan0 { col-gpios - = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> // col1 in the schematic - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> // col2 in the schematic - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> // col3 in the schematic - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> // col4 in the schematic - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> // col5 in the schematic - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> // col6 in the schematic + = <&pro_micro 19 GPIO_ACTIVE_HIGH> // col1 in the schematic + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col2 in the schematic + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col3 in the schematic + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col4 in the schematic + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col5 in the schematic + , <&pro_micro 10 GPIO_ACTIVE_HIGH> // col6 in the schematic ; }; ``` @@ -249,12 +249,12 @@ This is exemplified with the iris .overlay files. &kscan0 { col-gpios - = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> // col6 in the schematic - , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> // col5 in the schematic - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> // col4 in the schematic - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> // col3 in the schematic - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> // col2 in the schematic - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> // col1 in the schematic + = <&pro_micro 10 GPIO_ACTIVE_HIGH> // col6 in the schematic + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col5 in the schematic + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col4 in the schematic + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col3 in the schematic + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col2 in the schematic + , <&pro_micro 19 GPIO_ACTIVE_HIGH> // col1 in the schematic ; }; From 3b8244e4662c4f01f049c0d6ee1e2fa1c2de3779 Mon Sep 17 00:00:00 2001 From: Brandon Xie <30637265+xiushak@users.noreply.github.com> Date: Sun, 3 Oct 2021 23:23:54 -0400 Subject: [PATCH 0160/1130] feat(shields): Add Naked60BMP shield --- app/boards/shields/naked60/Kconfig.defconfig | 9 ++ app/boards/shields/naked60/Kconfig.shield | 5 + app/boards/shields/naked60/naked60.conf | 0 app/boards/shields/naked60/naked60.keymap | 99 ++++++++++++++++++++ app/boards/shields/naked60/naked60.overlay | 40 ++++++++ app/boards/shields/naked60/naked60.zmk.yml | 8 ++ 6 files changed, 161 insertions(+) create mode 100644 app/boards/shields/naked60/Kconfig.defconfig create mode 100644 app/boards/shields/naked60/Kconfig.shield create mode 100644 app/boards/shields/naked60/naked60.conf create mode 100644 app/boards/shields/naked60/naked60.keymap create mode 100644 app/boards/shields/naked60/naked60.overlay create mode 100644 app/boards/shields/naked60/naked60.zmk.yml diff --git a/app/boards/shields/naked60/Kconfig.defconfig b/app/boards/shields/naked60/Kconfig.defconfig new file mode 100644 index 00000000000..ff5978bc527 --- /dev/null +++ b/app/boards/shields/naked60/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_NAKED60 + +config ZMK_KEYBOARD_NAME + default "Naked60BMP" + +endif \ No newline at end of file diff --git a/app/boards/shields/naked60/Kconfig.shield b/app/boards/shields/naked60/Kconfig.shield new file mode 100644 index 00000000000..61053686a1b --- /dev/null +++ b/app/boards/shields/naked60/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_NAKED60 + def_bool $(shields_list_contains,naked60) diff --git a/app/boards/shields/naked60/naked60.conf b/app/boards/shields/naked60/naked60.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/naked60/naked60.keymap b/app/boards/shields/naked60/naked60.keymap new file mode 100644 index 00000000000..d380a599746 --- /dev/null +++ b/app/boards/shields/naked60/naked60.keymap @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + // ---------------------------------------------------------------------------------------------------------- + // | ESC | 1 | 2 | 3 | 4 | 5 |-------|-------| 6 | 7 | 8 | 9 | 0 | BSPC | + // | TAB | Q | W | E | R | T |-------|-------| Y | U | I | O | P | \ | + // | SHIFT | A | S | D | F | G |-------|-------| H | J | K | L | ; | ' | + // | CTRL | Z | X | C | V | B |-------|-------| N | M | , | . | / | ENTER | + // |-------|ADJUST| LCTL | LALT | LGUI | LOWR | SPACE | SPACE | RAIS | LARW | DARW | UARW | RARW |-------| + + + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp LSHFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET + &mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + }; + + lower { + // ---------------------------------------------------------------------------------------------------------- + // | ESC | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | F12 | + // | ~ | ! | @ | # | $ | % |-------|-------| ^ | & | * | ( | ) | DEL | + // | | F1 | F2 | F3 | F4 | F5 |-------|-------| F6 | _ | + | { | } | | | + // | | F7 | F8 | F9 | F10 | F11 |-------|-------| F12 | LS(#) |LS(|) | | | | + // |-------| | | | | | | | | NEXT | Vol- | Vol+ | PLAY |-------| + bindings = < + &kp ESC &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(NON_US_HASH) &kp LS(NON_US_BSLH) &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE + >; + }; + + raise { + // ---------------------------------------------------------------------------------------------------------- + // | ESC | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | F12 | + // | ~ | 1 | 2 | 3 | 4 | 5 |-------|-------| 6 | 7 | 8 | 9 | 0 | DEL | + // | DEL | F1 | F2 | F3 | F4 | F5 |-------|-------| F6 | - | = | [ | ] | \ | + // | | F7 | F8 | F9 | F10 | F11 |-------|-------| F12 | # | | | | | | + // |-------| | | | | | | | | | | | |-------| + bindings = < + &kp ESC &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &kp TILDE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp NON_US_HASH &kp NON_US_BSLH &trans &trans &trans + &trans &trans &trans &trans &mo 3 &trans &trans &trans &trans &trans &trans &trans + >; + }; + + adjust { + // ---------------------------------------------------------------------------------------------------------- + // |tog(4)| F2 | F3 | F4 | F5 | F6 |------|------| F7 | F8 | F9 | F10 | F11 | F12 | + // | | NA | NA | NA | NA | NA |------|------| NA | NA | NA | NA | NA |LALT(PRTSN)| + // | | NA | NA | NA | NA | NA |------|------| NA | NA | NA | NA | NA | PRTSN | + // | | NA | NA | NA | NA | NA |------|------| NA | NA | NA | NA | NA |LCTRL(DEL) | + // |------| | | | | |BOOTLD|BOOTLD| | | | | |-----------| + bindings = < + &tog 4 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &none &none &none &none &none &none &none &none &none &none &kp LA(PSCRN) + &trans &none &none &none &none &none &none &none &none &none &none &kp PSCRN + &trans &none &none &none &none &none &none &none &none &none &none &kp LC(DEL) + &trans &trans &trans &trans &trans &bootloader &bootloader &trans &trans &trans &trans &trans + >; + }; + + flock { + // ---------------------------------------------------------------------------------------------------------- + // |tog(4) | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | | + // |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|-------|-------|BT_PRV|BT_NXT|BT_CLR| | | | + // | | | | | | |-------|-------| | | | | | | + // | | | | | | |-------|-------| | | | | | | + // |-------| | | | | | | | | | | | |------| + bindings = < + &tog 4 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans + &out OUT_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/naked60/naked60.overlay b/app/boards/shields/naked60/naked60.overlay new file mode 100644 index 00000000000..2260a4afc9f --- /dev/null +++ b/app/boards/shields/naked60/naked60.overlay @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> // col 0 + , <&pro_micro 20 GPIO_ACTIVE_HIGH> // col 1 + , <&pro_micro 19 GPIO_ACTIVE_HIGH> // col 2 + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col 3 + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col 4 + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col 5 + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col 6 + , <&pro_micro 6 GPIO_ACTIVE_HIGH> // col 7 + , <&pro_micro 7 GPIO_ACTIVE_HIGH> // col 8 + , <&pro_micro 8 GPIO_ACTIVE_HIGH> // col 9 + , <&pro_micro 9 GPIO_ACTIVE_HIGH> // col 10 + , <&pro_micro 1 GPIO_ACTIVE_HIGH> // col 11 + ; + + row-gpios + = <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // row 0 + , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // row 1 + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // row 2 + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // row 3 + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // row 4 + ; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/naked60/naked60.zmk.yml b/app/boards/shields/naked60/naked60.zmk.yml new file mode 100644 index 00000000000..932c229841c --- /dev/null +++ b/app/boards/shields/naked60/naked60.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: naked60 +name: Naked60 +type: shield +url: https://salicylic-acid3.hatenablog.com/ +requires: [pro_micro] +features: + - keys From 19a7d686fbb7ed1bc53444f1536a1cc2c5bd2d8d Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sun, 3 Oct 2021 22:29:59 -0500 Subject: [PATCH 0161/1130] chore: Add board/shield checklist for new PRs. --- .github/pull_request_template.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000000..c191ccca2a5 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,11 @@ + +## Board/Shield Check-list + - [ ] This board/shield is tested working on real hardware + - [ ] Definitions follow the general style of other shields/boards upstream ([Reference](https://zmk.dev/docs/development/new-shield)) + - [ ] `.zmk.yml` metadata file added + - [ ] Proper Copyright + License headers added to applicable files + - [ ] General consistent formatting of DeviceTree files + - [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader)) + - [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable + - [ ] If split, no name added for the right/peripheral half + - [ ] `.conf` file has optional extra features commented out From 063b496c26316026e95cf7cdb0ba6c343b6c6efb Mon Sep 17 00:00:00 2001 From: Aleblazer <60912320+Aleblazer@users.noreply.github.com> Date: Sun, 3 Oct 2021 22:47:23 -0500 Subject: [PATCH 0162/1130] feat(boards): Add Zodiark shield --- app/boards/shields/zodiark/Kconfig.defconfig | 55 ++++++++++++ app/boards/shields/zodiark/Kconfig.shield | 8 ++ app/boards/shields/zodiark/zodiark.conf | 9 ++ app/boards/shields/zodiark/zodiark.dtsi | 86 +++++++++++++++++++ app/boards/shields/zodiark/zodiark.keymap | 69 +++++++++++++++ app/boards/shields/zodiark/zodiark.zmk.yml | 14 +++ .../shields/zodiark/zodiark_left.overlay | 23 +++++ .../shields/zodiark/zodiark_right.overlay | 27 ++++++ 8 files changed, 291 insertions(+) create mode 100644 app/boards/shields/zodiark/Kconfig.defconfig create mode 100644 app/boards/shields/zodiark/Kconfig.shield create mode 100644 app/boards/shields/zodiark/zodiark.conf create mode 100644 app/boards/shields/zodiark/zodiark.dtsi create mode 100644 app/boards/shields/zodiark/zodiark.keymap create mode 100644 app/boards/shields/zodiark/zodiark.zmk.yml create mode 100644 app/boards/shields/zodiark/zodiark_left.overlay create mode 100644 app/boards/shields/zodiark/zodiark_right.overlay diff --git a/app/boards/shields/zodiark/Kconfig.defconfig b/app/boards/shields/zodiark/Kconfig.defconfig new file mode 100644 index 00000000000..cdad43f6e7e --- /dev/null +++ b/app/boards/shields/zodiark/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ZODIARK_LEFT + +config ZMK_KEYBOARD_NAME + default "Zodiark" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_ZODIARK_LEFT || SHIELD_ZODIARK_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES_MAX + default 128 + +config LVGL_VER_RES_MAX + default 64 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/zodiark/Kconfig.shield b/app/boards/shields/zodiark/Kconfig.shield new file mode 100644 index 00000000000..25e23a1441b --- /dev/null +++ b/app/boards/shields/zodiark/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ZODIARK_LEFT + def_bool $(shields_list_contains,zodiark_left) + +config SHIELD_ZODIARK_RIGHT + def_bool $(shields_list_contains,zodiark_right) diff --git a/app/boards/shields/zodiark/zodiark.conf b/app/boards/shields/zodiark/zodiark.conf new file mode 100644 index 00000000000..6478485000e --- /dev/null +++ b/app/boards/shields/zodiark/zodiark.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the Zodiark OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi new file mode 100644 index 00000000000..0adb7f672b7 --- /dev/null +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <18>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW13 | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | SW13 | +// | SW20 | SW19 | SW18 | SW17 | SW16 | SW15 | SW14 | | SW14 | SW15 | SW16 | SW17 | SW18 | SW19 | SW20 | +// | SW28 | SW27 | SW26 | SW25 | SW24 | SW23 | SW22 | SW21 | | SW21 | SW22 | SW23 | SW24 | SW25 | SW26 | SW27 | SW28 | +// | SW35 | SW34 | SW33 | SW32 | SW31 | SW30 | SW29 | | SW29 | SW30 | SW31 | SW32 | SW33 | SW34 | SW35 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(0,6) RC(0,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(1,6) RC(1,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(2,6) RC(3,6) RC(3,7) RC(2,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/zodiark/zodiark.keymap b/app/boards/shields/zodiark/zodiark.keymap new file mode 100644 index 00000000000..21fdef10c9b --- /dev/null +++ b/app/boards/shields/zodiark/zodiark.keymap @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSPC | +// | TAB | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | +// | CAPS | A | S | D | F | G | - | | = | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | ` | MUTE | | PRNT | DEL | N | M | , | . | / | ENTER | +// | CTRL | ALT | GUI | MENU | LOWER| SPACE | ENTER | | ENTER | SPACE | RAISE| LEFT | DOWN | UP | RIGHT | + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp LBKT &kp RBKT &kp Y &kp U &kp I &kp O &kp P &kp BSLH +&kp TAB &kp A &kp S &kp D &kp F &kp G &kp MINUS &kp EQUAL &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp GRAVE &kp C_MUTE &kp PSCRN &kp DEL &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET +&kp LCTRL &kp LALT &kp LGUI &kp K_CMENU &mo 1 &kp SPACE &kp RET &kp RET &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | +// | N.LC | 7 | 8 | 9 |PRTSC | SCRLK| | | | PAUSE| | 7 | 8 | 9 | F12 | +// | | 4 | 5 | 6 | INS | HOME | | | | PGUP| | 4 | 5 | 6 | | +// | | 1 | 2 | 3 | DEL | END | | | | | | PGDN| | 1 | 2 | 3 | | +// | | 0 | . | Enter| | | | | | | | 0 | . | Enter | | + bindings = < +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&kp KP_NUM &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp PSCRN &kp SLCK &trans &trans &kp PAUSE_BREAK &trans &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp F12 +&trans &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp INS &kp HOME &trans &trans &kp PG_UP &trans &kp KP_N4 &kp KP_N5 &kp KP_N6 &trans +&trans &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp DEL &kp END &trans &trans &trans &trans &kp PG_DN &trans &kp KP_N1 &kp KP_N2 &kp KP_N3 &trans +&trans &kp KP_N0 &kp KP_DOT &kp KP_ENTER &trans &trans &trans &trans &trans &trans &kp KP_N0 &kp KP_DOT &kp KP_ENTER &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// |BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | RESET | +// | | | | | | | | | | | | | | |BLOADER| +// | | | | | | | | | | | | | | | | +// | | | | | | | | | | | | | | | | | | +// | | | | | | | | | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &reset +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; diff --git a/app/boards/shields/zodiark/zodiark.zmk.yml b/app/boards/shields/zodiark/zodiark.zmk.yml new file mode 100644 index 00000000000..fc68588152c --- /dev/null +++ b/app/boards/shields/zodiark/zodiark.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: zodiark +name: Zodiark +type: shield +url: https://www.splitlogic.xyz/buildguides/zodiark-build-guide +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder +siblings: + - zodiark_left + - zodiark_right diff --git a/app/boards/shields/zodiark/zodiark_left.overlay b/app/boards/shields/zodiark/zodiark_left.overlay new file mode 100644 index 00000000000..fe55edc6bb3 --- /dev/null +++ b/app/boards/shields/zodiark/zodiark_left.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "zodiark.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/zodiark/zodiark_right.overlay b/app/boards/shields/zodiark/zodiark_right.overlay new file mode 100644 index 00000000000..3405f59bd08 --- /dev/null +++ b/app/boards/shields/zodiark/zodiark_right.overlay @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "zodiark.dtsi" + +&default_transform { + col-offset = <7>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; From 91ba034896c3b1668b88286e18d8f38314ec39c3 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 15 Mar 2021 00:40:09 -0400 Subject: [PATCH 0163/1130] feat(hid): Configurable NKRO HID report support. * Add Kconfig settings for NKRO or HKRO (boot compatible), HID report types for keyboard page. * Updated report storage and set/unset for each config. --- app/Kconfig | 40 +++++++++++++++++++++++++++++++++-- app/include/zmk/hid.h | 49 ++++++++++++++++++++++++++++++++++--------- app/src/hid.c | 44 ++++++++++++++++++++++++++++++++++---- 3 files changed, 117 insertions(+), 16 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index f23930b4fff..629dfa70073 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -25,7 +25,40 @@ config USB_DEVICE_PID config USB_DEVICE_MANUFACTURER default "ZMK Project" -menu "HID Output Types" +menu "HID" + +choice ZMK_HID_REPORT_TYPE + prompt "HID Report Type" + +config ZMK_HID_REPORT_TYPE_HKRO + bool "#-Key Roll Over (HKRO) HID Report" + help + Enable # key roll over for HID report. This selection is "boot keyboard" compatible + but limits the total number of possible keys to report as held to #. + +config ZMK_HID_REPORT_TYPE_NKRO + bool "Full N-Key Roll Over (NKRO) HID Report" + help + Enable full N-Key Roll Over for HID output. This selection will prevent the keyboard + from working with some BIOS/UEFI versions that only support "boot keyboard" support. + This option also prevents using some infrequently used higher range HID usages. + +endchoice + +if ZMK_HID_REPORT_TYPE_HKRO + +config ZMK_HID_KEYBOARD_REPORT_SIZE + int "# Keyboard Keys Reportable" + default 6 + + +endif + +config ZMK_HID_CONSUMER_REPORT_SIZE + int "# Consumer Keys Reportable" + default 6 + +menu "Output Types" config ZMK_USB bool "USB" @@ -92,7 +125,10 @@ config ZMK_BLE_PASSKEY_ENTRY #ZMK_BLE endif -#HID Output Types +#Output Types +endmenu + +# HID endmenu menu "Split Support" diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 5aa004c2d2d..be88c1753b7 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -13,11 +13,9 @@ #include #include -#define COLLECTION_REPORT 0x03 - -#define ZMK_HID_KEYBOARD_NKRO_SIZE 6 +#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL -#define ZMK_HID_CONSUMER_NKRO_SIZE 6 +#define COLLECTION_REPORT 0x03 static const uint8_t zmk_hid_report_desc[] = { /* USAGE_PAGE (Generic Desktop) */ @@ -74,6 +72,30 @@ static const uint8_t zmk_hid_report_desc[] = { /* USAGE_PAGE (Keyboard/Keypad) */ HID_GI_USAGE_PAGE, HID_USAGE_KEY, + +#if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (1) */ + HID_GI_LOGICAL_MAX(1), + 0x01, + /* USAGE_MINIMUM (Reserved) */ + HID_LI_USAGE_MIN(1), + 0x00, + /* USAGE_MAXIMUM (Keyboard Application) */ + HID_LI_USAGE_MAX(1), + ZMK_HID_KEYBOARD_NKRO_MAX_USAGE, + /* REPORT_SIZE (8) */ + HID_GI_REPORT_SIZE, + 0x01, + /* REPORT_COUNT (6) */ + HID_GI_REPORT_COUNT, + ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1, + /* INPUT (Data,Ary,Abs) */ + HID_MI_INPUT, + 0x02, +#elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) /* LOGICAL_MINIMUM (0) */ HID_GI_LOGICAL_MIN(1), 0x00, @@ -89,12 +111,15 @@ static const uint8_t zmk_hid_report_desc[] = { /* REPORT_SIZE (1) */ HID_GI_REPORT_SIZE, 0x08, - /* REPORT_COUNT (ZMK_HID_KEYBOARD_NKRO_SIZE) */ + /* REPORT_COUNT (CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE) */ HID_GI_REPORT_COUNT, - ZMK_HID_KEYBOARD_NKRO_SIZE, + CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE, /* INPUT (Data,Ary,Abs) */ HID_MI_INPUT, 0x00, +#else +#error "A proper HID report type must be selected" +#endif /* END_COLLECTION */ HID_MI_COLLECTION_END, @@ -130,9 +155,9 @@ static const uint8_t zmk_hid_report_desc[] = { /* REPORT_SIZE (16) */ HID_GI_REPORT_SIZE, 0x10, - /* REPORT_COUNT (ZMK_HID_CONSUMER_NKRO_SIZE) */ + /* REPORT_COUNT (CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE) */ HID_GI_REPORT_COUNT, - ZMK_HID_CONSUMER_NKRO_SIZE, + CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE, HID_MI_INPUT, 0x00, /* END COLLECTION */ @@ -149,7 +174,11 @@ static const uint8_t zmk_hid_report_desc[] = { struct zmk_hid_keyboard_report_body { zmk_mod_flags_t modifiers; uint8_t _reserved; - uint8_t keys[ZMK_HID_KEYBOARD_NKRO_SIZE]; +#if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) + uint8_t keys[(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1) / 8]; +#elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) + uint8_t keys[CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE]; +#endif } __packed; struct zmk_hid_keyboard_report { @@ -158,7 +187,7 @@ struct zmk_hid_keyboard_report { } __packed; struct zmk_hid_consumer_report_body { - uint16_t keys[ZMK_HID_CONSUMER_NKRO_SIZE]; + uint16_t keys[CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE]; } __packed; struct zmk_hid_consumer_report { diff --git a/app/src/hid.c b/app/src/hid.c index 7ab080e5789..756ed9005e8 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -69,8 +69,30 @@ int zmk_hid_unregister_mods(zmk_mod_flags_t modifiers) { return 0; } +#if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) + +#define TOGGLE_KEYBOARD(code, val) WRITE_BIT(keyboard_report.body.keys[code / 8], code % 8, val) + +static inline int select_keyboard_usage(zmk_key_t usage) { + if (usage > ZMK_HID_KEYBOARD_NKRO_MAX_USAGE) { + return -EINVAL; + } + TOGGLE_KEYBOARD(usage, 1); + return 0; +} + +static inline int deselect_keyboard_usage(zmk_key_t usage) { + if (usage > ZMK_HID_KEYBOARD_NKRO_MAX_USAGE) { + return -EINVAL; + } + TOGGLE_KEYBOARD(usage, 0); + return 0; +} + +#elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) + #define TOGGLE_KEYBOARD(match, val) \ - for (int idx = 0; idx < ZMK_HID_KEYBOARD_NKRO_SIZE; idx++) { \ + for (int idx = 0; idx < CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE; idx++) { \ if (keyboard_report.body.keys[idx] != match) { \ continue; \ } \ @@ -80,8 +102,22 @@ int zmk_hid_unregister_mods(zmk_mod_flags_t modifiers) { } \ } +static inline int select_keyboard_usage(zmk_key_t usage) { + TOGGLE_KEYBOARD(0U, usage); + return 0; +} + +static inline int deselect_keyboard_usage(zmk_key_t usage) { + TOGGLE_KEYBOARD(usage, 0U); + return 0; +} + +#else +#error "A proper HID report type must be selected" +#endif + #define TOGGLE_CONSUMER(match, val) \ - for (int idx = 0; idx < ZMK_HID_CONSUMER_NKRO_SIZE; idx++) { \ + for (int idx = 0; idx < CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE; idx++) { \ if (consumer_report.body.keys[idx] != match) { \ continue; \ } \ @@ -105,7 +141,7 @@ int zmk_hid_keyboard_press(zmk_key_t code) { if (code >= HID_USAGE_KEY_KEYBOARD_LEFTCONTROL && code <= HID_USAGE_KEY_KEYBOARD_RIGHT_GUI) { return zmk_hid_register_mod(code - HID_USAGE_KEY_KEYBOARD_LEFTCONTROL); } - TOGGLE_KEYBOARD(0U, code); + select_keyboard_usage(code); return 0; }; @@ -113,7 +149,7 @@ int zmk_hid_keyboard_release(zmk_key_t code) { if (code >= HID_USAGE_KEY_KEYBOARD_LEFTCONTROL && code <= HID_USAGE_KEY_KEYBOARD_RIGHT_GUI) { return zmk_hid_unregister_mod(code - HID_USAGE_KEY_KEYBOARD_LEFTCONTROL); } - TOGGLE_KEYBOARD(code, 0U); + deselect_keyboard_usage(code); return 0; }; From bc179b1030ccf9dd02818f77ecd9b5b9f14e85b7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 5 Oct 2021 02:41:56 +0000 Subject: [PATCH 0164/1130] feat(hid): Kconfig for basic/full consumer usages. * Add ZMK_HID_CONSUMER_REPORT_USAGES choice to allow choosing between full consumer usage range, with poor OS compat, or basic consumer usage range, with broader compat. --- app/Kconfig | 19 ++++++++++++++++++- app/include/zmk/hid.h | 25 +++++++++++++++++++++++++ app/src/hid.c | 2 ++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 629dfa70073..35bf77da89f 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -51,13 +51,30 @@ config ZMK_HID_KEYBOARD_REPORT_SIZE int "# Keyboard Keys Reportable" default 6 - endif config ZMK_HID_CONSUMER_REPORT_SIZE int "# Consumer Keys Reportable" default 6 + +choice ZMK_HID_CONSUMER_REPORT_USAGES + prompt "HID Report Type" + +config ZMK_HID_CONSUMER_REPORT_USAGES_FULL + bool "Full Consumer HID Usage Support" + help + Enable full Consumer usage ID values to be sent to hosts. Allows for less + frequently used usages, but has compatibability issues with some host OSes. + +config ZMK_HID_CONSUMER_REPORT_USAGES_BASIC + bool "Basic Consumer HID Usage Support" + help + Enable Consumer usage ID values up to "Playback Speed - Slow" to be sent to + hosts. Allows for broader compatibability with more host OSes. + +endchoice + menu "Output Types" config ZMK_USB diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index be88c1753b7..95b82d46859 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -138,6 +138,24 @@ static const uint8_t zmk_hid_report_desc[] = { /* USAGE_PAGE (Consumer) */ HID_GI_USAGE_PAGE, HID_USAGE_CONSUMER, + +#if IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC) + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (0xFFFF) */ + HID_GI_LOGICAL_MAX(1), + 0xFF, + HID_LI_USAGE_MIN(1), + 0x00, + /* USAGE_MAXIMUM (0xFFFF) */ + HID_LI_USAGE_MAX(1), + 0xFF, + /* INPUT (Data,Ary,Abs) */ + /* REPORT_SIZE (8) */ + HID_GI_REPORT_SIZE, + 0x08, +#elif IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL) /* LOGICAL_MINIMUM (0) */ HID_GI_LOGICAL_MIN(1), 0x00, @@ -155,6 +173,9 @@ static const uint8_t zmk_hid_report_desc[] = { /* REPORT_SIZE (16) */ HID_GI_REPORT_SIZE, 0x10, +#else +#error "A proper consumer HID report usage range must be selected" +#endif /* REPORT_COUNT (CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE) */ HID_GI_REPORT_COUNT, CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE, @@ -187,7 +208,11 @@ struct zmk_hid_keyboard_report { } __packed; struct zmk_hid_consumer_report_body { +#if IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC) + uint8_t keys[CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE]; +#elif IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL) uint16_t keys[CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE]; +#endif } __packed; struct zmk_hid_consumer_report { diff --git a/app/src/hid.c b/app/src/hid.c index 756ed9005e8..b524b09f729 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -117,6 +117,8 @@ static inline int deselect_keyboard_usage(zmk_key_t usage) { #endif #define TOGGLE_CONSUMER(match, val) \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC), \ + (if (val > 0xFF) { return -ENOTSUP; }), ()) \ for (int idx = 0; idx < CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE; idx++) { \ if (consumer_report.body.keys[idx] != match) { \ continue; \ From 96fea949d5dc6aa59bb4a8bbdcf128994b1dcdf9 Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Sat, 2 Oct 2021 11:48:52 -0400 Subject: [PATCH 0165/1130] docs(docs): Document up-to-date Node.js repo For example, Debian Bullseye (current stable) packages Node.js version 12, which is too old to build the docs successfully. At least version 14 is required, and version 16 is current. General advice seems to be to install from the NodeSource repo instead of your distro's repo, so I added a suggestion to the docs. --- docs/docs/development/documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/documentation.md b/docs/docs/development/documentation.md index 221bb1608c8..ff45d80aa76 100644 --- a/docs/docs/development/documentation.md +++ b/docs/docs/development/documentation.md @@ -19,7 +19,7 @@ If you are working with the documentation from within VS Code+Docker please be a ::: :::note -You will need `Node.js` and `npm` installed to update the documentation. If you're using the ZMK dev container (Docker) the necessary dependencies are already installed. +You will need `Node.js` and `npm` installed to update the documentation. If you're using the ZMK dev container (Docker) the necessary dependencies are already installed. Otherwise, you must install these dependencies yourself. Since `Node.js` packages in Linux distributions tend to be outdated, it's recommended to install the current version from a repository like [NodeSource](https://github.com/nodesource/distributions) to avoid build errors. ::: ## Testing Documentation Updates Locally From c5b8dd85fdf28d1912ef0d2cefce8b55652c0db7 Mon Sep 17 00:00:00 2001 From: Simon Malinge Date: Thu, 7 Oct 2021 03:54:49 +0000 Subject: [PATCH 0166/1130] feat(underglow): Add support for configurable min/max brightness Co-authored-by: jrhrsmit --- app/Kconfig | 12 +++++++++++- app/src/rgb_underglow.c | 29 +++++++++++++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 35bf77da89f..fa1682428ef 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -209,7 +209,7 @@ endif endif #ZMK_SPLIT -endif +endif if ZMK_BLE @@ -262,6 +262,16 @@ config ZMK_RGB_UNDERGLOW_EXT_POWER bool "RGB underglow toggling also controls external power" default y +config ZMK_RGB_UNDERGLOW_BRT_MIN + int "RGB underglow minimum brightness in percent" + range 0 100 + default 0 + +config ZMK_RGB_UNDERGLOW_BRT_MAX + int "RGB underglow maximum brightness in percent" + range 0 100 + default 100 + config ZMK_RGB_UNDERGLOW_HUE_STEP int "RGB underglow hue step in degrees of 360" default 10 diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 5f38aba76b9..738261803d7 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -28,6 +28,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define SAT_MAX 100 #define BRT_MAX 100 +BUILD_ASSERT(CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN <= CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX, + "ERROR: RGB underglow maximum brightness is less than minimum brightness"); + enum rgb_underglow_effect { UNDERGLOW_EFFECT_SOLID, UNDERGLOW_EFFECT_BREATHE, @@ -54,6 +57,17 @@ static struct rgb_underglow_state state; static const struct device *ext_power; #endif +static struct zmk_led_hsb hsb_scale_min_max(struct zmk_led_hsb hsb) { + hsb.b = CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN + + (CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX - CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN) * hsb.b / BRT_MAX; + return hsb; +} + +static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) { + hsb.b = hsb.b * CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX / BRT_MAX; + return hsb; +} + static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) { double r, g, b; @@ -105,7 +119,7 @@ static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) { static void zmk_rgb_underglow_effect_solid() { for (int i = 0; i < STRIP_NUM_PIXELS; i++) { - pixels[i] = hsb_to_rgb(state.color); + pixels[i] = hsb_to_rgb(hsb_scale_min_max(state.color)); } } @@ -114,7 +128,7 @@ static void zmk_rgb_underglow_effect_breathe() { struct zmk_led_hsb hsb = state.color; hsb.b = abs(state.animation_step - 1200) / 12; - pixels[i] = hsb_to_rgb(hsb); + pixels[i] = hsb_to_rgb(hsb_scale_zero_max(hsb)); } state.animation_step += state.animation_speed * 10; @@ -129,7 +143,7 @@ static void zmk_rgb_underglow_effect_spectrum() { struct zmk_led_hsb hsb = state.color; hsb.h = state.animation_step; - pixels[i] = hsb_to_rgb(hsb); + pixels[i] = hsb_to_rgb(hsb_scale_min_max(hsb)); } state.animation_step += state.animation_speed; @@ -141,7 +155,7 @@ static void zmk_rgb_underglow_effect_swirl() { struct zmk_led_hsb hsb = state.color; hsb.h = (HUE_MAX / STRIP_NUM_PIXELS * i + state.animation_step) % HUE_MAX; - pixels[i] = hsb_to_rgb(hsb); + pixels[i] = hsb_to_rgb(hsb_scale_min_max(hsb)); } state.animation_step += state.animation_speed * 2; @@ -371,12 +385,7 @@ struct zmk_led_hsb zmk_rgb_underglow_calc_brt(int direction) { struct zmk_led_hsb color = state.color; int b = color.b + (direction * CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP); - if (b < 0) { - b = 0; - } else if (b > BRT_MAX) { - b = BRT_MAX; - } - color.b = b; + color.b = CLAMP(b, 0, BRT_MAX); return color; } From f23f427cae7140939238bc68fc7a3d0fb350af91 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sun, 10 Oct 2021 19:23:25 -0500 Subject: [PATCH 0167/1130] fix(underglow): Run clang-format --- app/src/rgb_underglow.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 738261803d7..40d99c7d15d 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -29,7 +29,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define BRT_MAX 100 BUILD_ASSERT(CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN <= CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX, - "ERROR: RGB underglow maximum brightness is less than minimum brightness"); + "ERROR: RGB underglow maximum brightness is less than minimum brightness"); enum rgb_underglow_effect { UNDERGLOW_EFFECT_SOLID, @@ -59,7 +59,7 @@ static const struct device *ext_power; static struct zmk_led_hsb hsb_scale_min_max(struct zmk_led_hsb hsb) { hsb.b = CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN + - (CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX - CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN) * hsb.b / BRT_MAX; + (CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX - CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN) * hsb.b / BRT_MAX; return hsb; } From f221ff1dc7a8100ca8037f322033cb73c4575fd6 Mon Sep 17 00:00:00 2001 From: "git@jrhrsmit.nl" Date: Mon, 11 Oct 2021 10:50:47 +0200 Subject: [PATCH 0168/1130] add ranges and descriptions from #669 --- app/Kconfig | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index fa1682428ef..8817d506532 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -269,39 +269,47 @@ config ZMK_RGB_UNDERGLOW_BRT_MIN config ZMK_RGB_UNDERGLOW_BRT_MAX int "RGB underglow maximum brightness in percent" - range 0 100 + range ZMK_RGB_UNDERGLOW_BRT_MIN 100 default 100 config ZMK_RGB_UNDERGLOW_HUE_STEP - int "RGB underglow hue step in degrees of 360" + int "RGB underglow hue step in degrees" + range 0 359 default 10 config ZMK_RGB_UNDERGLOW_SAT_STEP - int "RGB underglow sturation step in percent" + int "RGB underglow saturation step in percent" + range 0 100 default 10 config ZMK_RGB_UNDERGLOW_BRT_STEP int "RGB underglow brightness step in percent" + range 0 100 default 10 config ZMK_RGB_UNDERGLOW_HUE_START - int "RGB underglow start hue value from 0-359" + int "RGB underglow start hue value in degrees" + range 0 359 default 0 config ZMK_RGB_UNDERGLOW_SAT_START - int "RGB underglow start saturations value from 0-100" + int "RGB underglow start saturations value in percent" + range 0 100 default 100 config ZMK_RGB_UNDERGLOW_BRT_START - int "RGB underglow start brightness value from 0-100" - default 100 + int "RGB underglow start brightness value in percent" + range ZMK_RGB_UNDERGLOW_BRT_MIN ZMK_RGB_UNDERGLOW_BRT_MAX + default ZMK_RGB_UNDERGLOW_BRT_MAX config ZMK_RGB_UNDERGLOW_SPD_START - int "RGB underglow start animation speed value from 1-5" + int "RGB underglow start animation speed value" + range 1 5 default 3 config ZMK_RGB_UNDERGLOW_EFF_START int "RGB underglow start effect int value related to the effect enum list" + range 0 3 default 0 config ZMK_RGB_UNDERGLOW_ON_START From a774ce855517fb9e74ca8c8ebef9cb85b7d65e6c Mon Sep 17 00:00:00 2001 From: Richard Kjerstadius Date: Tue, 12 Oct 2021 16:13:00 +0200 Subject: [PATCH 0169/1130] fix(display): Increase char buffer size to fit all symbols Recent refactoring of the font handling seems to have broken the display of the last symbol of the output status widget. From my analysis the last symbol is truncated because the buffer simply is too small. Increasing the buffer size to 9 fits all three possible symbols. --- app/src/display/widgets/output_status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 4c32faea139..89993c69cb2 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -39,7 +39,7 @@ static struct output_status_state get_state(const zmk_event_t *_eh) { } static void set_status_symbol(lv_obj_t *label, struct output_status_state state) { - char text[6] = {}; + char text[9] = {}; switch (state.selected_endpoint) { case ZMK_ENDPOINT_USB: From e11477f7b1f3cf7d8e87718ab5dc889067f255ae Mon Sep 17 00:00:00 2001 From: Dom H Date: Tue, 12 Oct 2021 21:25:04 +0100 Subject: [PATCH 0170/1130] chore: Add note about copyrights on PR checklist --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c191ccca2a5..7443c24d4eb 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,7 +3,7 @@ - [ ] This board/shield is tested working on real hardware - [ ] Definitions follow the general style of other shields/boards upstream ([Reference](https://zmk.dev/docs/development/new-shield)) - [ ] `.zmk.yml` metadata file added - - [ ] Proper Copyright + License headers added to applicable files + - [ ] Proper Copyright + License headers added to applicable files (Generally, we stick to "The ZMK Contributors" for copyrights to help avoid churn when files get edited) - [ ] General consistent formatting of DeviceTree files - [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader)) - [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable From 51298f1d22767df02942f65b5782a193907366de Mon Sep 17 00:00:00 2001 From: eyenseo Date: Sun, 27 Dec 2020 16:13:42 +0100 Subject: [PATCH 0171/1130] Add ergodash --- app/boards/shields/ergodash/Kconfig.defconfig | 19 ++++ app/boards/shields/ergodash/Kconfig.shield | 8 ++ app/boards/shields/ergodash/ergodash.conf | 0 app/boards/shields/ergodash/ergodash.dtsi | 62 +++++++++++++ app/boards/shields/ergodash/ergodash.keymap | 86 +++++++++++++++++++ app/boards/shields/ergodash/ergodash.zmk.yml | 12 +++ .../shields/ergodash/ergodash_left.overlay | 8 ++ .../shields/ergodash/ergodash_right.overlay | 11 +++ 8 files changed, 206 insertions(+) create mode 100644 app/boards/shields/ergodash/Kconfig.defconfig create mode 100644 app/boards/shields/ergodash/Kconfig.shield create mode 100644 app/boards/shields/ergodash/ergodash.conf create mode 100644 app/boards/shields/ergodash/ergodash.dtsi create mode 100644 app/boards/shields/ergodash/ergodash.keymap create mode 100644 app/boards/shields/ergodash/ergodash.zmk.yml create mode 100644 app/boards/shields/ergodash/ergodash_left.overlay create mode 100644 app/boards/shields/ergodash/ergodash_right.overlay diff --git a/app/boards/shields/ergodash/Kconfig.defconfig b/app/boards/shields/ergodash/Kconfig.defconfig new file mode 100644 index 00000000000..b908584bc8d --- /dev/null +++ b/app/boards/shields/ergodash/Kconfig.defconfig @@ -0,0 +1,19 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ERGODASH_LEFT + +config ZMK_KEYBOARD_NAME + default "Ergodash" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_ERGODASH_LEFT || SHIELD_ERGODASH_RIGHT + +config ZMK_SPLIT + default y + +endif diff --git a/app/boards/shields/ergodash/Kconfig.shield b/app/boards/shields/ergodash/Kconfig.shield new file mode 100644 index 00000000000..b3cca293134 --- /dev/null +++ b/app/boards/shields/ergodash/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ERGODASH_LEFT + def_bool $(shields_list_contains,ergodash_left) + +config SHIELD_ERGODASH_RIGHT + def_bool $(shields_list_contains,ergodash_right) diff --git a/app/boards/shields/ergodash/ergodash.conf b/app/boards/shields/ergodash/ergodash.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/ergodash/ergodash.dtsi b/app/boards/shields/ergodash/ergodash.dtsi new file mode 100644 index 00000000000..152e9b93b3b --- /dev/null +++ b/app/boards/shields/ergodash/ergodash.dtsi @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; +// Numbering based on rev 1.2 schema +// * keys that can be in different positions are denoted as MW +// * MW40 can be broken off +// | SW1 | SW5 | SW9 | SW13 | SW17 | SW21 | SW25 | | | | SW25 | SW21 | SW17 | SW13 | SW9 | SW5 | SW1 | +// | SW2 | SW6 | SW10 | SW14 | SW18 | SW22 | SW26 | | | | SW26 | SW22 | SW18 | SW14 | SW10 | SW6 | SW2 | +// | SW3 | SW7 | SW11 | SW15 | SW19 | SW23 | SW27 | | | | SW27 | SW23 | SW19 | SW15 | SW11 | SW7 | SW3 | +// | SW4 | SW8 | SW12 | SW16 | SW20 | SW24 | | MW28 | | MW28 | | SW24 | SW20 | SW16 | SW12 | SW8 | SW4 | +// | SW30 | SW31 | SW32 | MW33 | SW34 | | MW35 | MW40 | | MW40 | MW35 | | SW34 | MW33 | SW32 | SW31 | SW30 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,13) RC(0,12) RC(0,11) RC(0,10) RC(0,9) RC(0,8) RC(0,7) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,13) RC(1,12) RC(1,11) RC(1,10) RC(1,9) RC(1,8) RC(1,7) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,13) RC(2,12) RC(2,11) RC(2,10) RC(2,9) RC(2,8) RC(2,7) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,13) RC(3,12) RC(3,11) RC(3,10) RC(3,9) RC(3,8) RC(3,7) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,13) RC(4,12) RC(4,11) RC(4,10) RC(4,9) RC(4,8) RC(4,7) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + debounce-period=<20>; + + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; + diff --git a/app/boards/shields/ergodash/ergodash.keymap b/app/boards/shields/ergodash/ergodash.keymap new file mode 100644 index 00000000000..92892122613 --- /dev/null +++ b/app/boards/shields/ergodash/ergodash.keymap @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 + + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +/* Colemak + * .----------------------------------------------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | PScr | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | Tab | A | S | D | F | G | Del | | Bksp | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | End | | Home | N | M | , | . | / | Shift| + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | Ctrl | | PGDN | Win |||||||| Alt | Space| Lower|||||||| Raise| Enter| RAlt |||||||| | PGUP | Ins | RCtrl| + * .----------------------------------------------------------------------------------------------------------------------. + */ + bindings = < +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp LBKT &kp RBKT &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp PRSC +&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp MINUS &kp EQUAL &kp Y &kp U &kp I &kp O &kp P &kp BSLH +&kp TAB &kp A &kp S &kp D &kp F &kp G &kp DEL &kp BSPC &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp END &kp HOME &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT +&kp LCTRL &none &kp PG_DN &kp LMETA &kp LALT &kp SPACE &mo LOWER &mo RAISE &kp RET &kp RALT &none &kp PG_UP &kp INS &kp RCTRL + >; + }; + lower_layer { +/* .----------------------------------------------------------------------------------------------------------------------. + * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | REST | BOOT | | | | | | | | | | | | | | | | + * .----------------------------------------------------------------------------------------------------------------------. + */ + bindings = < +&kp F11 &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp &none &kp &none &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F12 +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&reset &bootloader &none &none &none &none &none &none &none &none &none &none &none &none + >; + }; + raise_layer { +/* .----------------------------------------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | | | | | | | | | | | | | | | | BOOT | REST | + * .----------------------------------------------------------------------------------------------------------------------. + */ + bindings = < +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &none &none &none &none &none &none &bootloader &reset + >; + }; + }; +}; + diff --git a/app/boards/shields/ergodash/ergodash.zmk.yml b/app/boards/shields/ergodash/ergodash.zmk.yml new file mode 100644 index 00000000000..23160caa6ae --- /dev/null +++ b/app/boards/shields/ergodash/ergodash.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: ergodash +name: Ergodash +type: shield +url: https://github.com/omkbd/ErgoDash +requires: [pro_micro] +exposes: [] +features: + - keys +siblings: + - ergodash_left + - ergodash_right diff --git a/app/boards/shields/ergodash/ergodash_left.overlay b/app/boards/shields/ergodash/ergodash_left.overlay new file mode 100644 index 00000000000..40263aa4b5d --- /dev/null +++ b/app/boards/shields/ergodash/ergodash_left.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "ergodash.dtsi" + diff --git a/app/boards/shields/ergodash/ergodash_right.overlay b/app/boards/shields/ergodash/ergodash_right.overlay new file mode 100644 index 00000000000..464b3f5d12c --- /dev/null +++ b/app/boards/shields/ergodash/ergodash_right.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "ergodash.dtsi" + +&default_transform { + col-offset = <7>; +}; From 6f294530417051da13ae2200ede3361261b32f49 Mon Sep 17 00:00:00 2001 From: eyenseo Date: Tue, 12 Oct 2021 22:43:05 +0200 Subject: [PATCH 0172/1130] [squash] implement feedback --- app/boards/shields/ergodash/ergodash.dtsi | 1 - app/boards/shields/ergodash/ergodash.keymap | 28 ++++++++++---------- app/boards/shields/ergodash/ergodash.zmk.yml | 1 - 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/app/boards/shields/ergodash/ergodash.dtsi b/app/boards/shields/ergodash/ergodash.dtsi index 152e9b93b3b..a2b76075328 100644 --- a/app/boards/shields/ergodash/ergodash.dtsi +++ b/app/boards/shields/ergodash/ergodash.dtsi @@ -36,7 +36,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,13) RC(4,12 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; label = "KSCAN"; - debounce-period=<20>; diode-direction = "col2row"; diff --git a/app/boards/shields/ergodash/ergodash.keymap b/app/boards/shields/ergodash/ergodash.keymap index 92892122613..65cc1178c71 100644 --- a/app/boards/shields/ergodash/ergodash.keymap +++ b/app/boards/shields/ergodash/ergodash.keymap @@ -18,7 +18,7 @@ compatible = "zmk,keymap"; default_layer { -/* Colemak +/* QWERTY * .----------------------------------------------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | PScr | * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| @@ -32,7 +32,7 @@ * .----------------------------------------------------------------------------------------------------------------------. */ bindings = < -&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp LBKT &kp RBKT &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp PRSC +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp LBKT &kp RBKT &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp PSCRN &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp MINUS &kp EQUAL &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp TAB &kp A &kp S &kp D &kp F &kp G &kp DEL &kp BSPC &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp END &kp HOME &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT @@ -47,38 +47,38 @@ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | | | | * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | + * | Shift| Boot | Reset| | | | | | | | | | | | Shift| * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | REST | BOOT | | | | | | | | | | | | | | | | + * | Ctlr | | | Win |||||||| Alt | | Lower|||||||| Raise| | RAlt |||||||| | | | RCtrl| * .----------------------------------------------------------------------------------------------------------------------. - */ + */ /* FIXME boot and reset are not yet locale aware */ bindings = < &kp F11 &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp &none &kp &none &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F12 &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none -&none &none &none &none &none &none &none &none &none &none &none &none &none &none -&reset &bootloader &none &none &none &none &none &none &none &none &none &none &none &none +&trans &bootloader &reset &none &none &none &none &none &none &none &none &none &none &trans +&trans &none &none &trans &trans &none &trans &trans &none &trans &none &none &none &trans >; }; raise_layer { /* .----------------------------------------------------------------------------------------------------------------------. - * | | | | | | | | | | | | | | | | + * | | BT 0 | BT 1 | BT 2 | BT 3 | | BTCL | | | | | | | | | * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | | | | * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | | | | * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | + * | Shift| | | | | | | | | | | | Boot | Reset| Shift| * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | | | | | | | | | | | | | | | | BOOT | REST | + * | Ctlr | | | Win |||||||| Alt | | Lower|||||||| Raise| | RAlt |||||||| | | | RCtrl| * .----------------------------------------------------------------------------------------------------------------------. - */ + */ /* FIXME boot and reset are not yet locale aware */ bindings = < +&none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none -&none &none &none &none &none &none &none &none &none &none &none &none &none &none -&none &none &none &none &none &none &none &none &none &none &none &none &none &none -&none &none &none &none &none &none &none &none &none &none &none &none &bootloader &reset +&trans &none &none &none &none &none &none &none &none &none &none &bootloader &reset &trans +&trans &none &none &trans &trans &none &trans &trans &none &trans &none &none &none &trans >; }; }; diff --git a/app/boards/shields/ergodash/ergodash.zmk.yml b/app/boards/shields/ergodash/ergodash.zmk.yml index 23160caa6ae..376831a6786 100644 --- a/app/boards/shields/ergodash/ergodash.zmk.yml +++ b/app/boards/shields/ergodash/ergodash.zmk.yml @@ -4,7 +4,6 @@ name: Ergodash type: shield url: https://github.com/omkbd/ErgoDash requires: [pro_micro] -exposes: [] features: - keys siblings: From e544d74948097864a9e0d846694ea16e5a443f22 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 12 Oct 2021 05:31:56 +0000 Subject: [PATCH 0173/1130] refactor: Config setup scripts to support onboard keyboards. * Use unified config template repo that uses an external build matrix YAML file. * Proper handling for onboard keyboards, including splits, and supports for appending the right build matrix once selected. --- .../setup-script-generation-plugin/index.js | 15 ++- docs/src/templates/setup.ps1.mustache | 94 +++++++++++++------ docs/src/templates/setup.sh.mustache | 77 ++++++++++----- 3 files changed, 129 insertions(+), 57 deletions(-) diff --git a/docs/src/setup-script-generation-plugin/index.js b/docs/src/setup-script-generation-plugin/index.js index e97a4d0ffdd..0d768d7491b 100644 --- a/docs/src/setup-script-generation-plugin/index.js +++ b/docs/src/setup-script-generation-plugin/index.js @@ -5,6 +5,7 @@ */ var PrebuildPlugin = require("prebuild-webpack-plugin"); +const path = require("path"); const fs = require("fs"); const glob = require("glob"); const yaml = require("js-yaml"); @@ -12,9 +13,10 @@ const Mustache = require("mustache"); function generateSetupScripts() { return glob("../app/boards/**/*.zmk.yml", (error, files) => { - const aggregated = files.flatMap((f) => - yaml.safeLoadAll(fs.readFileSync(f, "utf8")) - ); + const aggregated = files.map((f) => ({ + ...yaml.safeLoadAll(fs.readFileSync(f, "utf8"))[0], + base_dir: path.basename(path.dirname(f)), + })); const data = aggregated.reduce( (agg, item) => { @@ -25,7 +27,9 @@ function generateSetupScripts() { agg.keyboards.push(item); break; case "board": - if (!item.features?.includes("keys")) { + if (item.features?.includes("keys")) { + agg.keyboards.push(item); + } else { agg.boards.push(item); } break; @@ -35,6 +39,9 @@ function generateSetupScripts() { { keyboards: [], boards: [] } ); + data.keyboards.sort((a, b) => a.name.localeCompare(b.name)); + data.boards.sort((a, b) => a.name.localeCompare(b.name)); + for (let script_ext of ["sh", "ps1"]) { const templateBuffer = fs.readFileSync( `src/templates/setup.${script_ext}.mustache`, diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index ade8d134c16..d4b92ff4447 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -84,20 +84,9 @@ if (Test-CommandExists Get-Acl) { } } -$repo_path = "https://github.com/zmkfirmware/zmk-config-split-template.git" +$repo_path = "https://github.com/zmkfirmware/unified-zmk-config-template.git" $title = "ZMK Config Setup:" -$prompt = "Pick an MCU board" -$options = {{#boards}}"{{{name}}}", {{/boards}} "" | Where-Object { $_ -ne "" } -$boards = {{#boards}}"{{id}}", {{/boards}} "" | Where-Object { $_ -ne "" } - -Write-Host "$title" -Write-Host "" -Write-Host "MCU Board Selection:" - -$choice = Get-Choice-From-Options -Options $options -Prompt $prompt -$board = $($boards[$choice]) - Write-Host "" Write-Host "Keyboard Shield Selection:" $prompt = "Pick a keyboard" @@ -105,17 +94,41 @@ $prompt = "Pick a keyboard" # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. $options = {{#keyboards}}"{{name}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } $names = {{#keyboards}}"{{id}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } +$types = {{#keyboards}}"{{type}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } +$basedirs = {{#keyboards}}"{{base_dir}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } $splits = {{#keyboards}}"{{#split}}y{{/split}}{{^split}}n{{/split}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } +$arches = {{#keyboards}}"{{arch}}", {{/keyboards}} "REMOVEME" | Where-Object { $_ -ne "REMOVEME" } +$basedirs = {{#keyboards}}"{{base_dir}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } +$sibling_sets = {{#keyboards}}{{#siblings.0}}( {{#siblings}}"{{.}}",{{/siblings}} "" | Where-Object { $_ -ne "" } ){{/siblings.0}}{{^siblings.0}}( "{{id}}" ){{/siblings.0}}, {{/keyboards}} "REMOVEME" | Where-Object { $_ -ne "REMOVEME" } $choice = Get-Choice-From-Options -Options $options -Prompt $prompt -$shield_title = $($options[$choice]) -$shield = $($names[$choice]) -$split = $($splits[$choice]) +$keyboard_title = $($options[$choice]) +$keyboard = $($names[$choice]) +$basedir = $($basedirs[$choice]) +$keyboard_split = $($splits[$choice]) +$keyboard_arch = $($arches[$choice]) +$keyboard_siblings = $($sibling_sets[$choice]) +$keyboard_type = $($types[$choice]) -if ($split -eq "n") { - $repo_path = "https://github.com/zmkfirmware/zmk-config-template.git" +if ($keyboard_type -eq "shield") { + $prompt = "Pick an MCU board" + $options = {{#boards}}"{{{name}}}", {{/boards}} "" | Where-Object { $_ -ne "" } + $boards = {{#boards}}"{{id}}", {{/boards}} "" | Where-Object { $_ -ne "" } + + Write-Host "$title" + Write-Host "" + Write-Host "MCU Board Selection:" + + $choice = Get-Choice-From-Options -Options $options -Prompt $prompt + $shields = $keyboard_siblings + $board = $($boards[$choice]) + $boards = ( $board ) +} else { + $boards = ( $keyboard_siblings ) + $shields = @( ) } + $copy_keymap = Read-Host "Copy in the stock keymap for customisation? [Yn]" if ($copy_keymap -eq "" -or $copy_keymap -eq "Y" -or $copy_keymap -eq "y") { @@ -144,8 +157,12 @@ else { Write-Host "" Write-Host "Preparing a user config for:" -Write-Host "* MCU Board: ${board}" -Write-Host "* Shield: ${shield}" +if ($keyboard_type -eq "shield") { + Write-Host "* MCU Board: ${boards}" + Write-Host "* Shield(s): ${shields}" +} else { + Write-Host "* Board(s): ${boards}" +} if ($copy_keymap -eq "yes") { Write-Host "* Copy Keymap?: Yes" @@ -171,24 +188,43 @@ Set-Location "$repo_name" Push-Location config -Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" -OutFile "${shield}.conf" +$config_file = "${keyboard}.conf" +$keymap_file = "${keyboard}.keymap" + +if ($keyboard_type -eq "shield") { + $config_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${basedir}/${keyboard}.conf" + $keymap_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${basedir}/${keyboard}.keymap" +} else { + $config_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${basedir}/${keyboard}.conf" + $keymap_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${basedir}/${keyboard}.keymap" +} + +Write-Host "Downloading config file (${config_url})" +Try { + Invoke-RestMethod -Uri "${config_url}" -OutFile "${config_file}" +} Catch { + Set-Content -Path $config_file "# Place configuration items here" +} if ($copy_keymap -eq "yes") { - Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" -OutFile "${shield}.keymap" + Write-Host "Downloading keymap file (${keymap_url})" + Invoke-RestMethod -Uri "${keymap_url}" -OutFile "${keymap_file}" } Pop-Location -$build_file = (Get-Content .github/workflows/build.yml).replace("BOARD_NAME", $board) -$build_file = $build_file.replace("SHIELD_NAME", $shield) -$build_file = $build_file.replace("KEYBOARD_TITLE", $shield_title) - -if ($board -eq "proton_c") { - $build_file = $build_file.replace("uf2", "hex") +Add-Content -Path "build.yaml" -Value "include:" +foreach ($b in ${boards}) { + if ($keyboard_type -eq "shield") { + foreach ($s in ${shields}) { + Add-Content -Path "build.yaml" -Value " - board: $b" + Add-Content -Path "build.yaml" -Value " shield: $s" + } + } else { + Add-Content -Path "build.yaml" -Value " - board: $b" + } } -Set-Content -Path .github/workflows/build.yml -Value $build_file - Remove-Item -Recurse -Force .git git init . git add . diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index 9dbdcfd628f..03df993cada 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -51,7 +51,7 @@ if [[ $curl_exists == "true" && $wget_exists == "true" ]]; then if [[ $force_wget == "true" ]]; then download_command="wget " else - download_command="curl -O " + download_command="curl -fsOL " fi elif [[ $curl_exists == "true" ]]; then download_command="curl -O " @@ -62,7 +62,7 @@ else exit 1 fi -repo_path="https://github.com/zmkfirmware/zmk-config-split-template.git" +repo_path="https://github.com/zmkfirmware/unified-zmk-config-template.git" title="ZMK Config Setup:" echo "" @@ -71,8 +71,17 @@ PS3="Pick a keyboard: " options=({{#keyboards}}"{{{name}}}" {{/keyboards}}) keyboards_id=({{#keyboards}}"{{id}}" {{/keyboards}}) keyboards_type=({{#keyboards}}"{{type}}" {{/keyboards}}) +keyboards_arch=({{#keyboards}}"{{arch}}" {{/keyboards}}) +keyboards_basedir=({{#keyboards}}"{{base_dir}}" {{/keyboards}}) keyboards_split=({{#keyboards}}"{{#split}}y{{/split}}{{^split}}n{{/split}}" {{/keyboards}}) keyboards_shield=({{#keyboards}}"{{#compatible}}y{{/compatible}}{{^compatible}}n{{/compatible}}" {{/keyboards}}) + +{{#keyboards}} +{{#siblings.0}} +{{id}}_siblings=({{#siblings}}"{{.}}" {{/siblings}}) +{{/siblings.0}} +{{/keyboards}} + select opt in "${options[@]}" "Quit"; do case "$REPLY" in ''|*[!0-9]*) echo "Invalid option. Try another one."; continue;; @@ -85,9 +94,17 @@ select opt in "${options[@]}" "Quit"; do fi keyboard_index=$(( $REPLY-1 )) keyboard=${keyboards_id[$keyboard_index]} + keyboard_arch=${keyboards_arch[$keyboard_index]} + keyboard_basedir=${keyboards_basedir[$keyboard_index]} keyboard_title=${options[$keyboard_index]} + keyboard_sibling_var=${keyboard}_siblings[@] + keyboard_sibling_first=${keyboard}_siblings[0] + if [ -n "${!keyboard_sibling_first}" ]; then + keyboard_siblings=${!keyboard_sibling_var} + else + keyboard_siblings=( "${keyboard}" ) + fi split=${keyboards_split[$keyboard_index]} - type=${keyboards_type[$keyboard_index]} keyboard_shield=${keyboards_shield[$keyboard_index]} break ;; @@ -96,6 +113,7 @@ select opt in "${options[@]}" "Quit"; do done if [ "$keyboard_shield" == "y" ]; then + shields=$keyboard_siblings shield=${keyboard} shield_title=${keyboard_title} @@ -119,6 +137,7 @@ if [ "$keyboard_shield" == "y" ]; then board_index=$(( $REPLY-1 )) board=${board_ids[$board_index]} board_title=${options[$board_index]} + boards=( "${board}" ) break ;; @@ -126,12 +145,7 @@ if [ "$keyboard_shield" == "y" ]; then done else board=${keyboard} - echo "Support for onboard microcontroller keyboards is still a work in progress." - exit 1 -fi - -if [ "$split" == "n" ]; then - repo_path="https://github.com/zmkfirmware/zmk-config-template.git" + boards=$keyboard_siblings fi read -r -e -p "Copy in the stock keymap for customization? [Yn]: " copy_keymap @@ -152,8 +166,12 @@ fi echo "" echo "Preparing a user config for:" -echo "* MCU Board: ${board}" -echo "* Shield: ${shield}" +if [ "$keyboard_shield" == "y" ]; then + echo "* MCU Board: ${boards}" + echo "* Shield(s): ${shields}" +else + echo "* Board(s): ${boards}" +fi if [ "$copy_keymap" == "yes" ]; then echo "* Copy Keymap?: ✓" @@ -178,26 +196,37 @@ cd ${repo_name} pushd config -$download_command "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" +if [ "$keyboard_shield" == "y" ]; then + config_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${keyboard_basedir}/${shield}.conf" + + keymap_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${keyboard_basedir}/${shield}.keymap" +else + config_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${keyboard_basedir}/${board}.conf" + keymap_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${keyboard_basedir}/${board}.keymap" +fi +echo "Downloading config file (${config_file})" +$download_command "${config_file}" || echo "# Put configuration options here" > "${keyboard}.conf" if [ "$copy_keymap" == "yes" ]; then - $download_command "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" + echo "Downloading keymap file (${keymap_file})" + $download_command "${keymap_file}" fi popd -sed -i'.orig' \ - -e "s/BOARD_NAME/$board/" \ - -e "s/SHIELD_NAME/$shield/" \ - -e "s|KEYBOARD_TITLE|$shield_title|" \ - .github/workflows/build.yml - -if [ "$board" == "proton_c" ]; then - # Proton-C board still fa - sed -i'.orig' -e "s/uf2/hex/g" .github/workflows/build.yml -fi +echo "include:" >> build.yaml -rm .github/workflows/*.yml.orig +for b in ${boards}; do + if [ -n "${shields}" ]; + then + for s in ${shields}; do + echo " - board: ${b}" >> build.yaml + echo " shield: ${s}" >> build.yaml + done + else + echo " - board: ${b}" >> build.yaml + fi +done rm -rf .git git init . From 01d2102c2326b86b0f87bb008c2a3eb3871e3963 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 16 Oct 2021 02:42:38 +0000 Subject: [PATCH 0174/1130] refactor: Add js-yaml dep, scrtipt gen tweaks. * Make the synthetic "base name" property double underscore prefixed, since internal, and to avoid future conflicts w/ YAML format add'ns. * Switch to PS hash dictionaries for our metadata collections for saner data inspection/use. --- docs/package-lock.json | 1968 +++++------------ docs/package.json | 17 +- .../index.js | 2 +- .../setup-script-generation-plugin/index.js | 4 +- docs/src/templates/setup.ps1.mustache | 54 +- docs/src/templates/setup.sh.mustache | 2 +- 6 files changed, 601 insertions(+), 1446 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 127baf687d2..367a7138221 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13,7 +13,9 @@ "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", + "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", + "js-yaml": "^4.1.0", "react": "^17.0.2", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", @@ -22,7 +24,7 @@ "web-tree-sitter": "^0.19.4" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.0.0-alpha.72", + "@docusaurus/module-type-aliases": "^2.0.0-beta.3", "@tsconfig/docusaurus": "^1.0.2", "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.0", @@ -32,11 +34,13 @@ "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.23.2", "json-schema-to-typescript": "^10.1.3", + "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", "prettier": "2.3.1", "string-replace-loader": "^3.0.3", - "typescript": "^4.2.3" + "typescript": "^4.2.3", + "webpack": "^5.46.0" } }, "node_modules/@algolia/autocomplete-core": { @@ -119,6 +123,28 @@ "js-yaml": "^3.13.1" } }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", @@ -5390,17 +5416,6 @@ "node": ">=6.9.0" } }, - "node_modules/@docusaurus/core/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@docusaurus/core/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -5857,62 +5872,6 @@ "node": ">=4" } }, - "node_modules/@docusaurus/core/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/core/node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@docusaurus/core/node_modules/terser-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@docusaurus/core/node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -5940,68 +5899,6 @@ "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/@docusaurus/core/node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core/node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/@docusaurus/core/node_modules/webpackbar": { "version": "5.0.0-3", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", @@ -6075,29 +5972,6 @@ "node": ">=6.0.0" } }, - "node_modules/@docusaurus/mdx-loader/node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@docusaurus/mdx-loader/node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -6111,94 +5985,10 @@ "node": ">=12" } }, - "node_modules/@docusaurus/mdx-loader/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/@docusaurus/module-type-aliases": { - "version": "2.0.0-alpha.72", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-alpha.72.tgz", - "integrity": "sha512-z8qGXvvyF8FYgnc0c7v5BqulrUJ0A01jsb2gT4miC6Gc/pKnpahZqBXcm1MrQiiUrlHMEjdOAxlHQVZuOwSSRQ==", + "version": "2.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.6.tgz", + "integrity": "sha512-TrJ0u4F3mZ7uQNga22why3SsoNwlHp6vltDLlWI80jZmZpnk9BJglpcR8MPOTSEjyUgMxJ6B3q0PA/rWzupWZA==", "dev": true }, "node_modules/@docusaurus/plugin-content-blog": { @@ -6231,17 +6021,6 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@docusaurus/plugin-content-blog/node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -6255,90 +6034,6 @@ "node": ">=12" } }, - "node_modules/@docusaurus/plugin-content-blog/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/@docusaurus/plugin-content-docs": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", @@ -6373,22 +6068,6 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "node_modules/@docusaurus/plugin-content-docs/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6471,17 +6150,6 @@ "node": ">=8" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -6517,90 +6185,6 @@ "node": ">=8" } }, - "node_modules/@docusaurus/plugin-content-docs/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/@docusaurus/plugin-content-pages": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", @@ -6627,101 +6211,6 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/@docusaurus/plugin-debug": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", @@ -6880,18 +6369,6 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/theme-classic/node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, "node_modules/@docusaurus/theme-classic/node_modules/copy-text-to-clipboard": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", @@ -6981,101 +6458,6 @@ "webpack-merge": "^5.8.0" } }, - "node_modules/@docusaurus/types/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@docusaurus/types/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docusaurus/types/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/types/node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/@docusaurus/utils": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", @@ -7154,6 +6536,15 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", @@ -7169,6 +6560,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "0.2.35", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", @@ -7648,6 +7052,18 @@ "node": ">=4" } }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -7951,6 +7367,14 @@ "node": ">=4" } }, + "node_modules/@svgr/plugin-svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@svgr/plugin-svgo/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -8076,6 +7500,18 @@ "node": ">=4" } }, + "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -8256,9 +7692,9 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "node_modules/@types/lodash": { "version": "4.14.168", @@ -8890,12 +8326,9 @@ "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/arr-diff": { "version": "4.0.0", @@ -11323,9 +10756,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -11334,14 +10767,6 @@ "node": ">=10.13.0" } }, - "node_modules/enhanced-resolve/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "engines": { - "node": ">=6" - } - }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -11408,9 +10833,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", - "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==" + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "node_modules/es-to-primitive": { "version": "1.2.1", @@ -12127,6 +11552,15 @@ "@babel/highlight": "^7.10.4" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/eslint/node_modules/globals": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", @@ -12142,6 +11576,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -12713,23 +12160,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "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", @@ -13426,6 +12856,26 @@ "node": ">=6.0" } }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -14951,12 +14401,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -15876,6 +15325,15 @@ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -16112,24 +15570,6 @@ "node": ">=8.9.0" } }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -19599,11 +19039,11 @@ } }, "node_modules/schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -20217,9 +19657,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -20799,14 +20239,22 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" @@ -20815,6 +20263,48 @@ "node": ">=10" } }, + "node_modules/terser-webpack-plugin": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "dependencies": { + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -21465,23 +20955,6 @@ } } }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/url-parse": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", @@ -21748,6 +21221,52 @@ "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, + "node_modules/webpack": { + "version": "5.58.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", + "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/webpack-bundle-analyzer": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", @@ -22412,23 +21931,30 @@ } }, "node_modules/webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack-sources/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==", + "node_modules/webpack/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" } }, "node_modules/websocket-driver": { @@ -22850,6 +22376,27 @@ "@jsdevtools/ono": "^7.1.3", "call-me-maybe": "^1.0.1", "js-yaml": "^3.13.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "@babel/code-frame": { @@ -24213,11 +23760,11 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -24265,18 +23812,18 @@ } }, "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", + "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", "requires": { "@babel/helper-module-imports": "^7.14.5", "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" } }, "@babel/helper-optimise-call-expression": { @@ -24304,11 +23851,11 @@ } }, "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.8" } }, "@babel/helper-split-export-declaration": { @@ -24320,15 +23867,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -24341,9 +23882,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "@babel/template": { "version": "7.14.5", @@ -24356,27 +23897,27 @@ } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } }, @@ -25156,16 +24697,16 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } @@ -25235,11 +24776,11 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -25253,13 +24794,13 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", "@babel/helper-optimise-call-expression": "^7.14.5", "@babel/helper-replace-supers": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5" @@ -25332,9 +24873,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -25347,9 +24888,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "@babel/plugin-syntax-typescript": { "version": "7.14.5", @@ -25370,27 +24911,27 @@ } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } }, @@ -25479,16 +25020,16 @@ "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } @@ -25669,9 +25210,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -25684,9 +25225,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "ansi-styles": { "version": "3.2.1", @@ -25750,21 +25291,21 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } @@ -25781,11 +25322,11 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } @@ -25800,11 +25341,11 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } @@ -25819,20 +25360,20 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/highlight": { "version": "7.14.5", @@ -25845,9 +25386,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "@babel/template": { "version": "7.14.5", @@ -25860,11 +25401,11 @@ }, "dependencies": { "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" } } @@ -25918,9 +25459,9 @@ }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" } } }, @@ -26819,11 +26360,6 @@ "to-fast-properties": "^2.0.0" } }, - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -27120,41 +26656,6 @@ "has-flag": "^3.0.0" } }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -27176,48 +26677,6 @@ "xdg-basedir": "^4.0.0" } }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, "webpackbar": { "version": "5.0.0-3", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", @@ -27274,17 +26733,6 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -27294,66 +26742,13 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - } } } }, "@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.3.tgz", - "integrity": "sha512-vciejziDBu39cyfmdvbpn865YlvugJMUOeD2m/7Kg4RLUPIZzQTWns0ZGIMc/iToiwebHwkoJtRsHaHzj8FpnA==", + "version": "2.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.6.tgz", + "integrity": "sha512-TrJ0u4F3mZ7uQNga22why3SsoNwlHp6vltDLlWI80jZmZpnk9BJglpcR8MPOTSEjyUgMxJ6B3q0PA/rWzupWZA==", "dev": true }, "@docusaurus/plugin-content-blog": { @@ -27379,11 +26774,6 @@ "webpack": "^5.40.0" }, "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -27393,59 +26783,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - } } } }, @@ -27476,16 +26813,6 @@ "webpack": "^5.40.0" }, "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -27541,14 +26868,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -27574,59 +26893,6 @@ "requires": { "path-key": "^3.0.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - } } } }, @@ -27647,66 +26913,6 @@ "slash": "^3.0.0", "tslib": "^2.1.0", "webpack": "^5.40.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - } - } } }, "@docusaurus/plugin-debug": { @@ -27821,12 +27027,6 @@ "rtlcss": "^3.1.2" }, "dependencies": { - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, "copy-text-to-clipboard": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", @@ -27890,66 +27090,6 @@ "querystring": "0.2.0", "webpack": "^5.40.0", "webpack-merge": "^5.8.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "webpack": { - "version": "5.45.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.45.1.tgz", - "integrity": "sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - } - } } }, "@docusaurus/utils": { @@ -28017,6 +27157,15 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "globals": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", @@ -28025,6 +27174,16 @@ "requires": { "type-fest": "^0.20.2" } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } } } }, @@ -28406,7 +27565,8 @@ "@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -28603,6 +27763,14 @@ "color-convert": "^1.9.0" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -28703,6 +27871,15 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -28855,9 +28032,9 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "@types/lodash": { "version": "4.14.168", @@ -29418,12 +28595,9 @@ "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "arr-diff": { "version": "4.0.0", @@ -30567,9 +29741,9 @@ } }, "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, "semver": { "version": "7.0.0", @@ -31256,19 +30430,12 @@ } }, "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" - }, - "dependencies": { - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - } } }, "enquirer": { @@ -31322,9 +30489,9 @@ } }, "es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", - "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==" + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es-to-primitive": { "version": "1.2.1", @@ -31457,6 +30624,15 @@ "@babel/highlight": "^7.10.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "globals": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", @@ -31465,6 +30641,16 @@ "requires": { "type-fest": "^0.20.2" } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } } } }, @@ -32366,18 +31552,6 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, "file-uri-to-path": { @@ -32909,6 +32083,25 @@ "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "gzip-size": { @@ -34055,12 +33248,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsesc": { @@ -34965,17 +34157,6 @@ "emojis-list": "^3.0.0", "json5": "^2.1.2" } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } } } }, @@ -35933,9 +35114,9 @@ } }, "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, "postcss-value-parser": { "version": "4.1.0", @@ -36006,9 +35187,9 @@ } }, "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" } } }, @@ -37576,11 +36757,11 @@ } }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -38082,9 +37263,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -38406,9 +37587,9 @@ } }, "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + "version": "1.3.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", + "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, "postcss-selector-parser": { "version": "6.0.6", @@ -38532,19 +37713,18 @@ } }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "commander": { @@ -38560,24 +37740,22 @@ } }, "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dev": true, + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", "requires": { - "jest-worker": "^27.0.2", + "jest-worker": "^27.0.6", "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", - "terser": "^5.7.0" + "terser": "^5.7.2" }, "dependencies": { "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 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -39042,18 +38220,6 @@ "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, "url-parse": { @@ -39249,10 +38415,9 @@ "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, "webpack": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.46.0.tgz", - "integrity": "sha512-qxD0t/KTedJbpcXUmvMxY5PUvXDbF8LsThCzqomeGaDlCA6k998D8yYVwZMvO8sSM3BTEOaD4uzFniwpHaTIJw==", - "dev": true, + "version": "5.58.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", + "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", "requires": { "@types/eslint-scope": "^3.7.0", "@types/estree": "^0.0.50", @@ -39260,10 +38425,11 @@ "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -39276,30 +38442,19 @@ "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.2.0", - "webpack-sources": "^2.3.1" + "webpack-sources": "^3.2.0" }, "dependencies": { "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true - }, - "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 + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" }, - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} } } }, @@ -39771,9 +38926,9 @@ } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -39819,20 +38974,9 @@ } }, "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==" }, "websocket-driver": { "version": "0.7.4", diff --git a/docs/package.json b/docs/package.json index c7f3bcd2134..2e2ead99b60 100644 --- a/docs/package.json +++ b/docs/package.json @@ -20,14 +20,15 @@ "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", + "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", + "js-yaml": "^4.1.0", "react": "^17.0.2", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.19.4", - "@mdx-js/react": "^1.6.22" + "web-tree-sitter": "^0.19.4" }, "browserslist": { "production": [ @@ -42,6 +43,11 @@ ] }, "devDependencies": { + "@docusaurus/module-type-aliases": "^2.0.0-beta.3", + "@tsconfig/docusaurus": "^1.0.2", + "@types/react": "^17.0.3", + "@types/react-helmet": "^6.1.0", + "@types/react-router-dom": "^5.1.7", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", @@ -53,11 +59,6 @@ "prettier": "2.3.1", "string-replace-loader": "^3.0.3", "typescript": "^4.2.3", - "webpack": "^5.46.0", - "@docusaurus/module-type-aliases": "^2.0.0-beta.3", - "@tsconfig/docusaurus": "^1.0.2", - "@types/react": "^17.0.3", - "@types/react-helmet": "^6.1.0", - "@types/react-router-dom": "^5.1.7" + "webpack": "^5.46.0" } } diff --git a/docs/src/hardware-metadata-collection-plugin/index.js b/docs/src/hardware-metadata-collection-plugin/index.js index 5f5660bb8e6..89f057a83a7 100644 --- a/docs/src/hardware-metadata-collection-plugin/index.js +++ b/docs/src/hardware-metadata-collection-plugin/index.js @@ -12,7 +12,7 @@ const glob = require("glob"); function generateHardwareMetadataAggregate() { glob("../app/boards/**/*.zmk.yml", (error, files) => { const aggregated = files.flatMap((f) => - yaml.safeLoadAll(fs.readFileSync(f, "utf8")) + yaml.loadAll(fs.readFileSync(f, "utf8")) ); fs.writeFileSync( "src/data/hardware-metadata.json", diff --git a/docs/src/setup-script-generation-plugin/index.js b/docs/src/setup-script-generation-plugin/index.js index 0d768d7491b..908ac6597d2 100644 --- a/docs/src/setup-script-generation-plugin/index.js +++ b/docs/src/setup-script-generation-plugin/index.js @@ -14,8 +14,8 @@ const Mustache = require("mustache"); function generateSetupScripts() { return glob("../app/boards/**/*.zmk.yml", (error, files) => { const aggregated = files.map((f) => ({ - ...yaml.safeLoadAll(fs.readFileSync(f, "utf8"))[0], - base_dir: path.basename(path.dirname(f)), + ...yaml.load(fs.readFileSync(f, "utf8")), + __base_dir: path.basename(path.dirname(f)), })); const data = aggregated.reduce( diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index d4b92ff4447..4af4d79d300 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -91,44 +91,54 @@ Write-Host "" Write-Host "Keyboard Shield Selection:" $prompt = "Pick a keyboard" +$keyboards = [ordered]@{ + {{#keyboards}} + "{{id}}" = @{ + name = "{{{name}}}"; + type = "{{type}}"; + basedir = "{{__base_dir}}"; + split = "{{split}}"; + arch = "{{arch}}"; + siblings = {{#siblings.0}}@( + {{#siblings}} + "{{.}}" + {{/siblings}} + ){{/siblings.0}}{{^siblings.0}}( "{{id}}" ){{/siblings.0}}; + } + {{/keyboards}} +} # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -$options = {{#keyboards}}"{{name}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } -$names = {{#keyboards}}"{{id}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } -$types = {{#keyboards}}"{{type}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } -$basedirs = {{#keyboards}}"{{base_dir}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } -$splits = {{#keyboards}}"{{#split}}y{{/split}}{{^split}}n{{/split}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } -$arches = {{#keyboards}}"{{arch}}", {{/keyboards}} "REMOVEME" | Where-Object { $_ -ne "REMOVEME" } -$basedirs = {{#keyboards}}"{{base_dir}}", {{/keyboards}} "" | Where-Object { $_ -ne "" } -$sibling_sets = {{#keyboards}}{{#siblings.0}}( {{#siblings}}"{{.}}",{{/siblings}} "" | Where-Object { $_ -ne "" } ){{/siblings.0}}{{^siblings.0}}( "{{id}}" ){{/siblings.0}}, {{/keyboards}} "REMOVEME" | Where-Object { $_ -ne "REMOVEME" } - -$choice = Get-Choice-From-Options -Options $options -Prompt $prompt -$keyboard_title = $($options[$choice]) -$keyboard = $($names[$choice]) -$basedir = $($basedirs[$choice]) -$keyboard_split = $($splits[$choice]) -$keyboard_arch = $($arches[$choice]) -$keyboard_siblings = $($sibling_sets[$choice]) -$keyboard_type = $($types[$choice]) + +$choice = Get-Choice-From-Options -Options ($keyboards.values | % { $_['name'] }) -Prompt $prompt +$keyboard = $($($keyboards.keys)[$choice]) +$keyboard_title = $keyboards[$keyboard].name +$basedir = $keyboards[$keyboard].basedir +$keyboard_split = $keyboards[$keyboard].split +$keyboard_arch = $keyboards[$keyboard].arch +$keyboard_siblings = $keyboards[$keyboard].siblings +$keyboard_type = $keyboards[$keyboard].type if ($keyboard_type -eq "shield") { $prompt = "Pick an MCU board" - $options = {{#boards}}"{{{name}}}", {{/boards}} "" | Where-Object { $_ -ne "" } - $boards = {{#boards}}"{{id}}", {{/boards}} "" | Where-Object { $_ -ne "" } + $boards = [ordered]@{ + {{#boards}} + {{id}} = "{{{name}}}"; + {{/boards}} + } Write-Host "$title" Write-Host "" Write-Host "MCU Board Selection:" - $choice = Get-Choice-From-Options -Options $options -Prompt $prompt + $choice = Get-Choice-From-Options -Options $boards.values -Prompt $prompt $shields = $keyboard_siblings - $board = $($boards[$choice]) + $board = $($($boards.keys)[$choice]) $boards = ( $board ) } else { $boards = ( $keyboard_siblings ) $shields = @( ) } - $copy_keymap = Read-Host "Copy in the stock keymap for customisation? [Yn]" if ($copy_keymap -eq "" -or $copy_keymap -eq "Y" -or $copy_keymap -eq "y") { diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index 03df993cada..54405fae5e6 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -72,7 +72,7 @@ options=({{#keyboards}}"{{{name}}}" {{/keyboards}}) keyboards_id=({{#keyboards}}"{{id}}" {{/keyboards}}) keyboards_type=({{#keyboards}}"{{type}}" {{/keyboards}}) keyboards_arch=({{#keyboards}}"{{arch}}" {{/keyboards}}) -keyboards_basedir=({{#keyboards}}"{{base_dir}}" {{/keyboards}}) +keyboards_basedir=({{#keyboards}}"{{__base_dir}}" {{/keyboards}}) keyboards_split=({{#keyboards}}"{{#split}}y{{/split}}{{^split}}n{{/split}}" {{/keyboards}}) keyboards_shield=({{#keyboards}}"{{#compatible}}y{{/compatible}}{{^compatible}}n{{/compatible}}" {{/keyboards}}) From 742f4c28268c80a0e9682532cd938d1e0886ee72 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 18 Oct 2021 02:50:11 +0000 Subject: [PATCH 0175/1130] fix(keymaps): Properly locate split board keymaps. * Find the unified keymap filename for onboard controller split keyboards. --- app/cmake/zmk_config.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/cmake/zmk_config.cmake b/app/cmake/zmk_config.cmake index 145352a3575..4cf43e0850d 100644 --- a/app/cmake/zmk_config.cmake +++ b/app/cmake/zmk_config.cmake @@ -67,6 +67,7 @@ foreach(root ${BOARD_ROOT}) NO_DEFAULT_PATH ) if(BOARD_DIR) + get_filename_component(BOARD_DIR_NAME ${BOARD_DIR} NAME) list(APPEND KEYMAP_DIRS ${BOARD_DIR}) endif() @@ -130,7 +131,7 @@ endif() if(NOT KEYMAP_FILE) foreach(keymap_dir ${KEYMAP_DIRS}) - foreach(keymap_prefix ${SHIELD} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR}) + foreach(keymap_prefix ${SHIELD} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR_NAME}) if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap) set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file") message(STATUS "Using keymap file: ${KEYMAP_FILE}") From 0dc7d46eb16fcd654eaa9dc4c36fc39e8004e7f7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 18 Oct 2021 14:44:13 +0000 Subject: [PATCH 0176/1130] fix: Only search for board one not found yet. --- app/cmake/zmk_config.cmake | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/cmake/zmk_config.cmake b/app/cmake/zmk_config.cmake index 4cf43e0850d..27c25dcf137 100644 --- a/app/cmake/zmk_config.cmake +++ b/app/cmake/zmk_config.cmake @@ -61,14 +61,16 @@ foreach(root ${BOARD_ROOT}) if (EXISTS "${root}/boards/${BOARD}.overlay") list(APPEND ZMK_DTC_FILES "${root}/boards/${BOARD}.overlay") endif() - find_path(BOARD_DIR - NAMES ${BOARD}_defconfig - PATHS ${root}/boards/*/* - NO_DEFAULT_PATH - ) - if(BOARD_DIR) - get_filename_component(BOARD_DIR_NAME ${BOARD_DIR} NAME) - list(APPEND KEYMAP_DIRS ${BOARD_DIR}) + if (NOT DEFINED BOARD_DIR) + find_path(BOARD_DIR + NAMES ${BOARD}_defconfig + PATHS ${root}/boards/*/* + NO_DEFAULT_PATH + ) + if(BOARD_DIR) + get_filename_component(BOARD_DIR_NAME ${BOARD_DIR} NAME) + list(APPEND KEYMAP_DIRS ${BOARD_DIR}) + endif() endif() if(DEFINED SHIELD) From e6c815f1b0b1bae88a373fa0633e0e6d8db9cafd Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 19 Oct 2021 13:29:36 +0000 Subject: [PATCH 0177/1130] fix: Properly find boards in user config repos. --- app/cmake/zmk_config.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/cmake/zmk_config.cmake b/app/cmake/zmk_config.cmake index 27c25dcf137..dec31104b73 100644 --- a/app/cmake/zmk_config.cmake +++ b/app/cmake/zmk_config.cmake @@ -61,7 +61,7 @@ foreach(root ${BOARD_ROOT}) if (EXISTS "${root}/boards/${BOARD}.overlay") list(APPEND ZMK_DTC_FILES "${root}/boards/${BOARD}.overlay") endif() - if (NOT DEFINED BOARD_DIR) + if (NOT DEFINED BOARD_DIR_NAME) find_path(BOARD_DIR NAMES ${BOARD}_defconfig PATHS ${root}/boards/*/* From 05167c65394083d6ea7c31f8b74dba32cd3d44ef Mon Sep 17 00:00:00 2001 From: Manuel Transfeld Date: Thu, 21 Oct 2021 04:54:48 +0200 Subject: [PATCH 0178/1130] fix(docs): Typo fix, open -> upon --- docs/docs/behaviors/layers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 098952e7b12..5aa988795a6 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -27,7 +27,7 @@ This allows you to use those defines, e.g. `LOWER` later in your keymap. ## Momentary Layer The "momentary layer" behavior enables a layer while a certain key is pressed. Immediately upon -activation of the key, the layer is enabled, and immediately open release of the key, the layer is disabled +activation of the key, the layer is enabled, and immediately upon release of the key, the layer is disabled again. ### Behavior Binding From 503bb0ec2f91ee6c500cc688e04a339184dd9a3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 05:06:36 +0000 Subject: [PATCH 0179/1130] chore(deps): bump @fortawesome/react-fontawesome in /docs Bumps [@fortawesome/react-fontawesome](https://github.com/FortAwesome/react-fontawesome) from 0.1.14 to 0.1.16. - [Release notes](https://github.com/FortAwesome/react-fontawesome/releases) - [Changelog](https://github.com/FortAwesome/react-fontawesome/blob/master/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/react-fontawesome/compare/0.1.14...0.1.16) --- updated-dependencies: - dependency-name: "@fortawesome/react-fontawesome" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 16 ++++++++-------- docs/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 367a7138221..af50fa602a0 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -12,7 +12,7 @@ "@docusaurus/preset-classic": "^2.0.0-beta.3", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.14", + "@fortawesome/react-fontawesome": "^0.1.16", "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", "js-yaml": "^4.1.0", @@ -6607,14 +6607,14 @@ } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", - "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.16.tgz", + "integrity": "sha512-aLmzDwC9rEOAJv2UJdMns89VZR5Ry4IHu5dQQh24Z/lWKEm44lfQr1UNalZlkUaQN8d155tNh+CS7ntntj1VMA==", "dependencies": { "prop-types": "^15.7.2" }, "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/fontawesome-svg-core": "~1 || >=1.3.0-beta1", "react": ">=16.x" } }, @@ -27209,9 +27209,9 @@ } }, "@fortawesome/react-fontawesome": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", - "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.16.tgz", + "integrity": "sha512-aLmzDwC9rEOAJv2UJdMns89VZR5Ry4IHu5dQQh24Z/lWKEm44lfQr1UNalZlkUaQN8d155tNh+CS7ntntj1VMA==", "requires": { "prop-types": "^15.7.2" } diff --git a/docs/package.json b/docs/package.json index 2e2ead99b60..f8b65ceeac9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "@docusaurus/preset-classic": "^2.0.0-beta.3", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.14", + "@fortawesome/react-fontawesome": "^0.1.16", "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", "js-yaml": "^4.1.0", From e3eb77dfc6c48b3f8bcf72101973d6342d6fc3f4 Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Wed, 6 Oct 2021 21:53:39 -0500 Subject: [PATCH 0180/1130] refactor(combos): Use ZMK_KEYMAP_EXTRACT_BINDING Now that PR #506 is merged, we can address this TODO. --- app/src/combo.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/app/src/combo.c b/app/src/combo.c index 16091cdd175..bcdaac0152c 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -469,22 +469,12 @@ static int position_state_changed_listener(const zmk_event_t *ev) { ZMK_LISTENER(combo, position_state_changed_listener); ZMK_SUBSCRIPTION(combo, zmk_position_state_changed); -// todo: remove this once #506 is merged and #include -#define KEY_BINDING_TO_STRUCT(idx, drv_inst) \ - { \ - .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(drv_inst, bindings, idx)), \ - .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(drv_inst, bindings, idx, param1), (0), \ - (DT_PHA_BY_IDX(drv_inst, bindings, idx, param1))), \ - .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(drv_inst, bindings, idx, param2), (0), \ - (DT_PHA_BY_IDX(drv_inst, bindings, idx, param2))), \ - } - #define COMBO_INST(n) \ static struct combo_cfg combo_config_##n = { \ .timeout_ms = DT_PROP(n, timeout_ms), \ .key_positions = DT_PROP(n, key_positions), \ .key_position_len = DT_PROP_LEN(n, key_positions), \ - .behavior = KEY_BINDING_TO_STRUCT(0, n), \ + .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, n), \ .virtual_key_position = ZMK_KEYMAP_LEN + __COUNTER__, \ .slow_release = DT_PROP(n, slow_release), \ .layers = DT_PROP(n, layers), \ From 5cc7c280a5d97df99e08bace0e373e24cad13abd Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 18 Oct 2021 18:08:51 +0000 Subject: [PATCH 0181/1130] refactor: Move to explicit docker.io/* image references. * Some runtimes (e.g. podman), require explicit registries in image URLs or will prompt for the user to select one, which breaks things like VSCode remote container rebuilds. --- .devcontainer/Dockerfile | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/hardware-metadata-validation.yml | 2 +- .github/workflows/test.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 40cf129d863..7aed488007d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM zmkfirmware/zmk-dev-arm:2.5 +FROM docker.io/zmkfirmware/zmk-dev-arm:2.5 COPY .bashrc tmp RUN mv /tmp/.bashrc ~/.bashrc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36bca31df7b..b790b665683 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,7 @@ jobs: build: runs-on: ubuntu-latest container: - image: zmkfirmware/zmk-build-arm:2.5 + image: docker.io/zmkfirmware/zmk-build-arm:2.5 strategy: matrix: board: diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index 1318b4bd22f..5c2fd375d0b 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -29,7 +29,7 @@ jobs: validate-metadata: runs-on: ubuntu-latest container: - image: zmkfirmware/zmk-dev-arm:2.5 + image: docker.io/zmkfirmware/zmk-dev-arm:2.5 steps: - uses: actions/checkout@v2 - name: Install dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f8e443afd2..e8cdcedfbe5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: integration_test: runs-on: ubuntu-latest container: - image: zmkfirmware/zmk-build-arm:2.5 + image: docker.io/zmkfirmware/zmk-build-arm:2.5 steps: - name: Checkout uses: actions/checkout@v2 From f946dc68931a712bae1c2be0ed1581815ccc8767 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 31 Jul 2021 01:23:33 -0500 Subject: [PATCH 0182/1130] feat(kscan): Improve matrix debouncing Switched the GPIO matrix driver to debouncing using a simple integrator algorithm. Whenever a key is pressed, we now scan at a rate controlled by debounce-scan-period-ms (default 1 ms) until all keys are released, then return to either waiting for an interrupt or polling more slowly. The timers for key press and release can now be controlled separately, so debounce-period is deprecated in favor of debounce-press-ms and debounce-release-ms. Global Kconfig options ZMK_KSCAN_DEBOUNCE_PRESS_MS and ZMK_KSCAN_DEBOUNCE_RELEASE_MS are also added to make these easier to set. Added documentation for debouncing options. --- app/drivers/kscan/CMakeLists.txt | 1 + app/drivers/kscan/Kconfig | 18 ++ app/drivers/kscan/debounce.c | 62 +++++++ app/drivers/kscan/debounce.h | 56 +++++++ app/drivers/kscan/kscan_gpio_matrix.c | 157 +++++++++++------- .../bindings/kscan/zmk,kscan-gpio-matrix.yaml | 17 +- docs/docs/features/debouncing.md | 100 +++++++++++ docs/sidebars.js | 1 + 8 files changed, 348 insertions(+), 64 deletions(-) create mode 100644 app/drivers/kscan/debounce.c create mode 100644 app/drivers/kscan/debounce.h create mode 100644 docs/docs/features/debouncing.md diff --git a/app/drivers/kscan/CMakeLists.txt b/app/drivers/kscan/CMakeLists.txt index b5f86abde40..c19fa431f26 100644 --- a/app/drivers/kscan/CMakeLists.txt +++ b/app/drivers/kscan/CMakeLists.txt @@ -4,6 +4,7 @@ zephyr_library_named(zmk__drivers__kscan) zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) +zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER debounce.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio_matrix.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio_direct.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio_demux.c) diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index 555b7b98002..3ffec09c05c 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -14,6 +14,24 @@ config ZMK_KSCAN_MATRIX_POLLING config ZMK_KSCAN_DIRECT_POLLING bool "Poll for key event triggers instead of using interrupts on direct wired boards." +config ZMK_KSCAN_DEBOUNCE_PRESS_MS + int "Debounce time for key press in milliseconds." + default -1 + help + Global debounce time for key press in milliseconds. + If this is -1, the debounce time is controlled by the debounce-press-ms + Devicetree property, which defaults to 5 ms. Otherwise this overrides the + debounce time for all key scan drivers to the chosen value. + +config ZMK_KSCAN_DEBOUNCE_RELEASE_MS + int "Debounce time for key release in milliseconds." + default -1 + help + Global debounce time for key release in milliseconds. + If this is -1, the debounce time is controlled by the debounce-release-ms + Devicetree property, which defaults to 5 ms. Otherwise this overrides the + debounce time for all key scan drivers to the chosen value. + endif config ZMK_KSCAN_INIT_PRIORITY diff --git a/app/drivers/kscan/debounce.c b/app/drivers/kscan/debounce.c new file mode 100644 index 00000000000..b38782267e8 --- /dev/null +++ b/app/drivers/kscan/debounce.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "debounce.h" + +static uint32_t get_threshold(const struct debounce_state *state, + const struct debounce_config *config) { + return state->pressed ? config->debounce_release_ms : config->debounce_press_ms; +} + +static void increment_counter(struct debounce_state *state, const int elapsed_ms) { + if (state->counter + elapsed_ms > DEBOUNCE_COUNTER_MAX) { + state->counter = DEBOUNCE_COUNTER_MAX; + } else { + state->counter += elapsed_ms; + } +} + +static void decrement_counter(struct debounce_state *state, const int elapsed_ms) { + if (state->counter < elapsed_ms) { + state->counter = 0; + } else { + state->counter -= elapsed_ms; + } +} + +void debounce_update(struct debounce_state *state, const bool active, const int elapsed_ms, + const struct debounce_config *config) { + // This uses a variation of the integrator debouncing described at + // https://www.kennethkuhn.com/electronics/debounce.c + // Every update where "active" does not match the current state, we increment + // a counter, otherwise we decrement it. When the counter reaches a + // threshold, the state flips and we reset the counter. + state->changed = false; + + if (active == state->pressed) { + decrement_counter(state, elapsed_ms); + return; + } + + const uint32_t flip_threshold = get_threshold(state, config); + + if (state->counter < flip_threshold) { + increment_counter(state, elapsed_ms); + return; + } + + state->pressed = !state->pressed; + state->counter = 0; + state->changed = true; +} + +bool debounce_is_active(const struct debounce_state *state) { + return state->pressed || state->counter > 0; +} + +bool debounce_is_pressed(const struct debounce_state *state) { return state->pressed; } + +bool debounce_get_changed(const struct debounce_state *state) { return state->changed; } \ No newline at end of file diff --git a/app/drivers/kscan/debounce.h b/app/drivers/kscan/debounce.h new file mode 100644 index 00000000000..9fa4531bd0d --- /dev/null +++ b/app/drivers/kscan/debounce.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +#define DEBOUNCE_COUNTER_BITS 14 +#define DEBOUNCE_COUNTER_MAX BIT_MASK(DEBOUNCE_COUNTER_BITS) + +struct debounce_state { + bool pressed : 1; + bool changed : 1; + uint16_t counter : DEBOUNCE_COUNTER_BITS; +}; + +struct debounce_config { + /** Duration a switch must be pressed to latch as pressed. */ + uint32_t debounce_press_ms; + /** Duration a switch must be released to latch as released. */ + uint32_t debounce_release_ms; +}; + +/** + * Debounces one switch. + * + * @param state The state for the switch to debounce. + * @param active Is the switch currently pressed? + * @param elapsed_ms Time elapsed since the previous update in milliseconds. + * @param config Debounce settings. + */ +void debounce_update(struct debounce_state *state, const bool active, const int elapsed_ms, + const struct debounce_config *config); + +/** + * @returns whether the switch is either latched as pressed or it is potentially + * pressed but the debouncer has not yet made a decision. If this returns true, + * the kscan driver should continue to poll quickly. + */ +bool debounce_is_active(const struct debounce_state *state); + +/** + * @returns whether the switch is latched as pressed. + */ +bool debounce_is_pressed(const struct debounce_state *state); + +/** + * @returns whether the pressed state of the switch changed in the last call to + * debounce_update. + */ +bool debounce_get_changed(const struct debounce_state *state); diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 5465dd30a37..e5a7e56233b 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -4,10 +4,13 @@ * SPDX-License-Identifier: MIT */ +#include "debounce.h" + #include #include #include #include +#include #include #include #include @@ -27,6 +30,20 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define INST_MATRIX_LEN(n) (INST_ROWS_LEN(n) * INST_COLS_LEN(n)) #define INST_INPUTS_LEN(n) COND_DIODE_DIR(n, (INST_COLS_LEN(n)), (INST_ROWS_LEN(n))) +#if CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS >= 0 +#define INST_DEBOUNCE_PRESS_MS(n) CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS +#else +#define INST_DEBOUNCE_PRESS_MS(n) \ + DT_INST_PROP_OR(n, debounce_period, DT_INST_PROP(n, debounce_press_ms)) +#endif + +#if CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS >= 0 +#define INST_DEBOUNCE_RELEASE_MS(n) CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS +#else +#define INST_DEBOUNCE_RELEASE_MS(n) \ + DT_INST_PROP_OR(n, debounce_period, DT_INST_PROP(n, debounce_release_ms)) +#endif + #define USE_POLLING IS_ENABLED(CONFIG_ZMK_KSCAN_MATRIX_POLLING) #define USE_INTERRUPTS (!USE_POLLING) @@ -66,26 +83,23 @@ enum kscan_diode_direction { struct kscan_matrix_irq_callback { const struct device *dev; struct gpio_callback callback; - struct k_delayed_work *work; }; struct kscan_matrix_data { const struct device *dev; kscan_callback_t callback; struct k_delayed_work work; -#if USE_POLLING - struct k_timer poll_timer; -#else +#if USE_INTERRUPTS /** Array of length config->inputs.len */ struct kscan_matrix_irq_callback *irqs; #endif + /** Timestamp of the current or scheduled scan. */ + int64_t scan_time; /** * Current state of the matrix as a flattened 2D array of length * (config->rows.len * config->cols.len) */ - bool *current_state; - /** Buffer for reading in the next matrix state. Parallel array to current_state. */ - bool *next_state; + struct debounce_state *matrix_state; }; struct kscan_gpio_list { @@ -102,7 +116,8 @@ struct kscan_matrix_config { struct kscan_gpio_list cols; struct kscan_gpio_list inputs; struct kscan_gpio_list outputs; - int32_t debounce_period_ms; + struct debounce_config debounce_config; + int32_t debounce_scan_period_ms; int32_t poll_period_ms; enum kscan_diode_direction diode_direction; }; @@ -190,18 +205,48 @@ static int kscan_matrix_interrupt_disable(const struct device *dev) { #if USE_INTERRUPTS static void kscan_matrix_irq_callback_handler(const struct device *port, struct gpio_callback *cb, const gpio_port_pins_t pin) { - struct kscan_matrix_irq_callback *data = + struct kscan_matrix_irq_callback *irq_data = CONTAINER_OF(cb, struct kscan_matrix_irq_callback, callback); - const struct kscan_matrix_config *config = data->dev->config; + struct kscan_matrix_data *data = irq_data->dev->data; // Disable our interrupts temporarily to avoid re-entry while we scan. kscan_matrix_interrupt_disable(data->dev); + data->scan_time = k_uptime_get(); + + // TODO (Zephyr 2.6): use k_work_reschedule() + k_delayed_work_cancel(&data->work); + k_delayed_work_submit(&data->work, K_NO_WAIT); +} +#endif + +static void kscan_matrix_read_continue(const struct device *dev) { + const struct kscan_matrix_config *config = dev->config; + struct kscan_matrix_data *data = dev->data; + + data->scan_time += config->debounce_scan_period_ms; + // TODO (Zephyr 2.6): use k_work_reschedule() - k_delayed_work_cancel(data->work); - k_delayed_work_submit(data->work, K_MSEC(config->debounce_period_ms)); + k_delayed_work_cancel(&data->work); + k_delayed_work_submit(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); } + +static void kscan_matrix_read_end(const struct device *dev) { +#if USE_INTERRUPTS + // Return to waiting for an interrupt. + kscan_matrix_interrupt_enable(dev); +#else + struct kscan_matrix_data *data = dev->data; + const struct kscan_matrix_config *config = dev->config; + + data->scan_time += config->poll_period_ms; + + // Return to polling slowly. + // TODO (Zephyr 2.6): use k_work_reschedule() + k_delayed_work_cancel(&data->work); + k_delayed_work_submit(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); #endif +} static int kscan_matrix_read(const struct device *dev) { struct kscan_matrix_data *data = dev->data; @@ -221,7 +266,10 @@ static int kscan_matrix_read(const struct device *dev) { const struct kscan_gpio_dt_spec *in_gpio = &config->inputs.gpios[i]; const int index = state_index_io(config, i, o); - data->next_state[index] = gpio_pin_get(in_gpio->port, in_gpio->pin); + const bool active = gpio_pin_get(in_gpio->port, in_gpio->pin); + + debounce_update(&data->matrix_state[index], active, config->debounce_scan_period_ms, + &config->debounce_config); } err = gpio_pin_set(out_gpio->port, out_gpio->pin, 0); @@ -232,50 +280,36 @@ static int kscan_matrix_read(const struct device *dev) { } // Process the new state. -#if USE_INTERRUPTS - bool submit_followup_read = false; -#endif + bool continue_scan = false; for (int r = 0; r < config->rows.len; r++) { for (int c = 0; c < config->cols.len; c++) { const int index = state_index_rc(config, r, c); - const bool pressed = data->next_state[index]; + struct debounce_state *state = &data->matrix_state[index]; + + if (debounce_get_changed(state)) { + const bool pressed = debounce_is_pressed(state); - // Follow up reads are needed if any key is pressed because further - // interrupts won't fire on already tripped GPIO pins. -#if USE_INTERRUPTS - submit_followup_read = submit_followup_read || pressed; -#endif - if (pressed != data->current_state[index]) { LOG_DBG("Sending event at %i,%i state %s", r, c, pressed ? "on" : "off"); - data->current_state[index] = pressed; data->callback(dev, r, c, pressed); } + + continue_scan = continue_scan || debounce_is_active(state); } } -#if USE_INTERRUPTS - if (submit_followup_read) { - // At least one key is pressed. Poll until everything is released. - // TODO (Zephyr 2.6): use k_work_reschedule() - k_delayed_work_cancel(&data->work); - k_delayed_work_submit(&data->work, K_MSEC(config->debounce_period_ms)); + if (continue_scan) { + // At least one key is pressed or the debouncer has not yet decided if + // it is pressed. Poll quickly until everything is released. + kscan_matrix_read_continue(dev); } else { - // All keys are released. Return to waiting for an interrupt. - kscan_matrix_interrupt_enable(dev); + // All keys are released. Return to normal. + kscan_matrix_read_end(dev); } -#endif return 0; } -#if USE_POLLING -static void kscan_matrix_timer_handler(struct k_timer *timer) { - struct kscan_matrix_data *data = CONTAINER_OF(timer, struct kscan_matrix_data, poll_timer); - k_delayed_work_submit(&data->work, K_NO_WAIT); -} -#endif - static void kscan_matrix_work_handler(struct k_work *work) { struct k_delayed_work *dwork = CONTAINER_OF(work, struct k_delayed_work, work); struct kscan_matrix_data *data = CONTAINER_OF(dwork, struct kscan_matrix_data, work); @@ -294,27 +328,23 @@ static int kscan_matrix_configure(const struct device *dev, const kscan_callback } static int kscan_matrix_enable(const struct device *dev) { -#if USE_POLLING struct kscan_matrix_data *data = dev->data; - const struct kscan_matrix_config *config = dev->config; - k_timer_start(&data->poll_timer, K_MSEC(config->poll_period_ms), - K_MSEC(config->poll_period_ms)); - return 0; -#else - // Read will automatically enable interrupts once done. + data->scan_time = k_uptime_get(); + + // Read will automatically start interrupts/polling once done. return kscan_matrix_read(dev); -#endif } static int kscan_matrix_disable(const struct device *dev) { -#if USE_POLLING struct kscan_matrix_data *data = dev->data; - k_timer_stop(&data->poll_timer); - return 0; -#else + k_delayed_work_cancel(&data->work); + +#if USE_INTERRUPTS return kscan_matrix_interrupt_disable(dev); +#else + return 0; #endif } @@ -338,7 +368,6 @@ static int kscan_matrix_init_input_inst(const struct device *dev, struct kscan_matrix_irq_callback *irq = &data->irqs[index]; irq->dev = dev; - irq->work = &data->work; gpio_init_callback(&irq->callback, kscan_matrix_irq_callback_handler, BIT(gpio->pin)); err = gpio_add_callback(gpio->port, &irq->callback); if (err) { @@ -407,10 +436,6 @@ static int kscan_matrix_init(const struct device *dev) { k_delayed_work_init(&data->work, kscan_matrix_work_handler); -#if USE_POLLING - k_timer_init(&data->poll_timer, kscan_matrix_timer_handler, NULL); -#endif - return 0; } @@ -421,21 +446,24 @@ static const struct kscan_driver_api kscan_matrix_api = { }; #define KSCAN_MATRIX_INIT(index) \ + BUILD_ASSERT(INST_DEBOUNCE_PRESS_MS(index) <= DEBOUNCE_COUNTER_MAX, \ + "ZMK_KSCAN_DEBOUNCE_PRESS_MS or debounce-press-ms is too large"); \ + BUILD_ASSERT(INST_DEBOUNCE_RELEASE_MS(index) <= DEBOUNCE_COUNTER_MAX, \ + "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ + \ static const struct kscan_gpio_dt_spec kscan_matrix_rows_##index[] = { \ UTIL_LISTIFY(INST_ROWS_LEN(index), KSCAN_GPIO_ROW_CFG_INIT, index)}; \ \ static const struct kscan_gpio_dt_spec kscan_matrix_cols_##index[] = { \ UTIL_LISTIFY(INST_COLS_LEN(index), KSCAN_GPIO_COL_CFG_INIT, index)}; \ \ - static bool kscan_current_state_##index[INST_MATRIX_LEN(index)]; \ - static bool kscan_next_state_##index[INST_MATRIX_LEN(index)]; \ + static struct debounce_state kscan_matrix_state_##index[INST_MATRIX_LEN(index)]; \ \ COND_INTERRUPTS((static struct kscan_matrix_irq_callback \ kscan_matrix_irqs_##index[INST_INPUTS_LEN(index)];)) \ \ static struct kscan_matrix_data kscan_matrix_data_##index = { \ - .current_state = kscan_current_state_##index, \ - .next_state = kscan_next_state_##index, \ + .matrix_state = kscan_matrix_state_##index, \ COND_INTERRUPTS((.irqs = kscan_matrix_irqs_##index, ))}; \ \ static struct kscan_matrix_config kscan_matrix_config_##index = { \ @@ -445,7 +473,12 @@ static const struct kscan_driver_api kscan_matrix_api = { COND_DIODE_DIR(index, (kscan_matrix_cols_##index), (kscan_matrix_rows_##index))), \ .outputs = KSCAN_GPIO_LIST( \ COND_DIODE_DIR(index, (kscan_matrix_rows_##index), (kscan_matrix_cols_##index))), \ - .debounce_period_ms = DT_INST_PROP(index, debounce_period), \ + .debounce_config = \ + { \ + .debounce_press_ms = INST_DEBOUNCE_PRESS_MS(index), \ + .debounce_release_ms = INST_DEBOUNCE_RELEASE_MS(index), \ + }, \ + .debounce_scan_period_ms = DT_INST_PROP(index, debounce_scan_period_ms), \ .poll_period_ms = DT_INST_PROP(index, poll_period_ms), \ .diode_direction = INST_DIODE_DIR(index), \ }; \ diff --git a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml b/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml index 20ee4ac5f4d..2ec6dc6cfa3 100644 --- a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml +++ b/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml @@ -15,13 +15,26 @@ properties: type: phandle-array required: true debounce-period: + type: int + required: false + deprecated: true + description: Deprecated. Use debounce-press-ms and debounce-release-ms instead. + debounce-press-ms: + type: int + default: 5 + description: Debounce time for key press in milliseconds. Use 0 for eager debouncing. + debounce-release-ms: type: int default: 5 - description: Debounce time in milliseconds + description: Debounce time for key release in milliseconds. + debounce-scan-period-ms: + type: int + default: 1 + description: Time between reads in milliseconds when any key is pressed. poll-period-ms: type: int default: 10 - description: Time between reads in milliseconds when polling is enabled + description: Time between reads in milliseconds when no key is pressed and ZMK_KSCAN_MATRIX_POLLING is enabled. diode-direction: type: string default: row2col diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md new file mode 100644 index 00000000000..f0022a59626 --- /dev/null +++ b/docs/docs/features/debouncing.md @@ -0,0 +1,100 @@ +--- +title: Debouncing +sidebar_label: Debouncing +--- + +To prevent contact bounce (also known as chatter) and noise spikes from causing +unwanted key presses, ZMK uses a [cycle-based debounce algorithm](https://www.kennethkuhn.com/electronics/debounce.c), +with each key debounced independently. + +By default the debounce algorithm decides that a key is pressed or released after +the input is stable for 5 milliseconds. You can decrease this to improve latency +or increase it to improve reliability. + +If you are having problems with a single key press registering multiple inputs, +you can try increasing the debounce press and/or release times to compensate. +You should also check for mechanical issues that might be causing the bouncing, +such as hot swap sockets that are making poor contact. You can try replacing the +socket or using some sharp tweezers to bend the contacts back together. + +## Debounce Configuration + +### Global Options + +You can set these options in your `.conf` file to control debouncing globally. +Values must be <= 127. + +- `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS`: Debounce time for key press in milliseconds. Default = 5. +- `CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS`: Debounce time for key release in milliseconds. Default = 5. + +For example, this would shorten the debounce time for both press and release: + +```ini +CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=3 +CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=3 +``` + +### Per-driver Options + +You can add these Devicetree properties to a kscan node to control debouncing for +that instance of the driver. Values must be <= 127. + +- `debounce-press-ms`: Debounce time for key press in milliseconds. Default = 5. +- `debounce-release-ms`: Debounce time for key release in milliseconds. Default = 5. +- ~~`debounce-period`~~: Deprecated. Sets both press and release debounce times. +- `debounce-scan-period-ms`: Time between reads in milliseconds when any key is pressed. Default = 1. + +If one of the global options described above is set, it overrides the corresponding +per-driver option. + +For example, if your board/shield has a kscan driver labeled `kscan0` in its +`.overlay`, `.dts`, or `.dtsi` files, + +```devicetree +kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + ... +}; +``` + +then you could add this to your `.keymap`: + +```devicetree +&kscan0 { + debounce-press-ms = <3>; + debounce-release-ms = <3>; +}; +``` + +This must be placed outside of any blocks surrounded by curly braces (`{...}`). + +`debounce-scan-period-ms` determines how often the keyboard scans while debouncing. It defaults to 1 ms, but it can be increased to reduce power use. Note that the debounce press/release timers are rounded up to the next multiple of the scan period. For example, if the scan period is 2 ms and debounce timer is 5 ms, key presses will take 6 ms to register instead of 5. + +## Eager Debouncing + +Eager debouncing means reporting a key change immediately and then ignoring +further changes for the debounce time. This eliminates latency but it is not +noise-resistant. + +ZMK does not currently support true eager debouncing, but you can get something +very close by setting the time to detect a key press to zero and the time to detect +a key release to a larger number. This will detect a key press immediately, then +debounce the key release. + +```ini +CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=0 +CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5 +``` + +Also consider setting `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=1` instead, which adds +one millisecond of latency but protects against short noise spikes. + +## Comparison With QMK + +ZMK's default debouncing is similar to QMK's `sym_defer_pk` algorithm. + +Setting `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=0` for eager debouncing would be similar +to QMK's (unimplemented as of this writing) `asym_eager_defer_pk`. + +See [QMK's Debounce API documentation](https://beta.docs.qmk.fm/using-qmk/software-features/feature_debounce_type) +for more information. diff --git a/docs/sidebars.js b/docs/sidebars.js index 8865b5777f0..2a406589f65 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -11,6 +11,7 @@ module.exports = { Features: [ "features/keymaps", "features/combos", + "features/debouncing", "features/displays", "features/encoders", "features/underglow", From 19ee7849f80e18d8f29ac47ffeee3bb223c35a80 Mon Sep 17 00:00:00 2001 From: jmding8 <44815547+jmding8@users.noreply.github.com> Date: Mon, 1 Nov 2021 09:37:20 -0700 Subject: [PATCH 0183/1130] feat(behaviors) Required keys for tap-hold behaviors * Add optional `hold-trigger-key-positions` hold-tap configuration * Leverage configuration for decision making around when to trigger hold decision in hold-taps. * Add docs for new configuration. * Tests for the new config/decision logic. --- .../behaviors/zmk,behavior-hold-tap.yaml | 4 ++ app/src/behaviors/behavior_hold_tap.c | 54 +++++++++++++++++++ .../2-dn-timer-up/events.patterns | 4 ++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++ .../2-dn-timer-up/native_posix.keymap | 11 ++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 7 +++ .../native_posix.keymap | 14 +++++ .../4a-dn-tgdn-timer-tgup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 +++ .../native_posix.keymap | 14 +++++ .../7-positional/behavior_keymap.dtsi | 29 ++++++++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 9 ++++ .../native_posix.keymap | 16 ++++++ .../2-dn-timer-up/events.patterns | 4 ++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++ .../2-dn-timer-up/native_posix.keymap | 11 ++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 7 +++ .../native_posix.keymap | 14 +++++ .../4a-dn-tgdn-timer-tgup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 +++ .../native_posix.keymap | 14 +++++ .../7-positional/behavior_keymap.dtsi | 29 ++++++++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 9 ++++ .../native_posix.keymap | 16 ++++++ .../2-dn-timer-up/events.patterns | 4 ++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++ .../2-dn-timer-up/native_posix.keymap | 11 ++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 7 +++ .../native_posix.keymap | 14 +++++ .../4a-dn-tgdn-timer-tgup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 +++ .../native_posix.keymap | 14 +++++ .../7-positional/behavior_keymap.dtsi | 29 ++++++++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 9 ++++ .../native_posix.keymap | 16 ++++++ docs/docs/behaviors/hold-tap.md | 42 +++++++++++++++ docs/docs/development/tests.md | 8 +-- 43 files changed, 488 insertions(+), 4 deletions(-) create mode 100644 app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index f46b36a47fc..9d489e80b58 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -30,3 +30,7 @@ properties: - "tap-preferred" retro-tap: type: boolean + hold-trigger-key-positions: + type: array + required: false + default: [] diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 02ca5e3a37d..a5c4e90d74c 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -58,6 +58,8 @@ struct behavior_hold_tap_config { int quick_tap_ms; enum flavor flavor; bool retro_tap; + int32_t hold_trigger_key_positions_len; + int32_t hold_trigger_key_positions[]; }; // this data is specific for each hold-tap @@ -70,6 +72,9 @@ struct active_hold_tap { const struct behavior_hold_tap_config *config; struct k_delayed_work work; bool work_is_cancelled; + + // initialized to -1, which is to be interpreted as "no other key has been pressed yet" + int32_t position_of_first_other_key_pressed; }; // The undecided hold tap is the hold tap that needs to be decided before @@ -206,6 +211,7 @@ static struct active_hold_tap *store_hold_tap(uint32_t position, uint32_t param_ active_hold_taps[i].param_hold = param_hold; active_hold_taps[i].param_tap = param_tap; active_hold_taps[i].timestamp = timestamp; + active_hold_taps[i].position_of_first_other_key_pressed = -1; return &active_hold_taps[i]; } return NULL; @@ -359,6 +365,39 @@ static int release_binding(struct active_hold_tap *hold_tap) { return behavior_keymap_binding_released(&binding, event); } +static bool is_first_other_key_pressed_trigger_key(struct active_hold_tap *hold_tap) { + for (int i = 0; i < hold_tap->config->hold_trigger_key_positions_len; i++) { + if (hold_tap->config->hold_trigger_key_positions[i] == + hold_tap->position_of_first_other_key_pressed) { + return true; + } + } + return false; +} + +// Force a tap decision if the positional conditions for a hold decision are not met. +static void decide_positional_hold(struct active_hold_tap *hold_tap) { + // Only force a tap decision if the positional hold/tap feature is enabled. + if (!(hold_tap->config->hold_trigger_key_positions_len > 0)) { + return; + } + + // Only force a tap decision if another key was pressed after + // the hold/tap key. + if (hold_tap->position_of_first_other_key_pressed == -1) { + return; + } + + // Only force a tap decision if the first other key to be pressed + // (after the hold/tap key) is not one of the trigger keys. + if (is_first_other_key_pressed_trigger_key(hold_tap)) { + return; + } + + // Since the positional key conditions have failed, force a TAP decision. + hold_tap->status = STATUS_TAP; +} + static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment decision_moment) { if (hold_tap->status != STATUS_UNDECIDED) { @@ -370,6 +409,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, return; } + // If the hold-tap behavior is still undecided, attempt to decide it. switch (hold_tap->config->flavor) { case FLAVOR_HOLD_PREFERRED: decide_hold_preferred(hold_tap, decision_moment); @@ -383,6 +423,10 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, return; } + decide_positional_hold(hold_tap); + + // Since the hold-tap has been decided, clean up undecided_hold_tap and + // execute the decided behavior. LOG_DBG("%d decided %s (%s decision moment %s)", hold_tap->position, status_str(hold_tap->status), flavor_str(hold_tap->config->flavor), decision_moment_str(decision_moment)); @@ -501,6 +545,14 @@ static int position_state_changed_listener(const zmk_event_t *eh) { return ZMK_EV_EVENT_BUBBLE; } + // Store the position of pressed key for positional hold-tap purposes. + if ((ev->state) // i.e. key pressed (not released) + && (undecided_hold_tap->position_of_first_other_key_pressed == + -1) // i.e. no other key has been pressed yet + ) { + undecided_hold_tap->position_of_first_other_key_pressed = ev->position; + } + if (undecided_hold_tap->position == ev->position) { if (ev->state) { // keydown LOG_ERR("hold-tap listener should be called before before most other listeners!"); @@ -604,6 +656,8 @@ static struct behavior_hold_tap_data behavior_hold_tap_data; .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ + .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ + .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, device_pm_control_nop, \ &behavior_hold_tap_data, &behavior_hold_tap_config_##n, APPLICATION, \ diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/events.patterns b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..926174b4e3e --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000000..11d033f40d9 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..1b5cc8f233f --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap new file mode 100644 index 00000000000..d1d2b756c32 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,1,200) // non trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..242b31f2216 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap new file mode 100644 index 00000000000..94d9a923cc2 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) // trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi new file mode 100644 index 00000000000..5657644d3bd --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <2>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &kp D &kp E>; + }; + }; +}; diff --git a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..1e1ea6b9072 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot @@ -0,0 +1,9 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap new file mode 100644 index 00000000000..6ddf87f895c --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap @@ -0,0 +1,16 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) // trigger key + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,400) // not trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..827ac986654 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000000..11d033f40d9 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..964cbafe45a --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap new file mode 100644 index 00000000000..d1d2b756c32 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,1,200) // non trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..1d2b827ec6f --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap new file mode 100644 index 00000000000..94d9a923cc2 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) // trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi new file mode 100644 index 00000000000..bf681004012 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + ht_hold: behavior_hold_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "hold_hold_tap"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <2>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_hold LEFT_SHIFT F &ht_hold LEFT_CONTROL J + &kp D &kp E>; + }; + }; +}; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..2838194d498 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot @@ -0,0 +1,9 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap new file mode 100644 index 00000000000..6ddf87f895c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap @@ -0,0 +1,16 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) // trigger key + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,400) // not trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..4bf3e7ca8b8 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000000..11d033f40d9 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..337af3e9f20 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap new file mode 100644 index 00000000000..d1d2b756c32 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,1,200) // non trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..2d985568488 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap new file mode 100644 index 00000000000..94d9a923cc2 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) // trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi new file mode 100644 index 00000000000..e4be8d15dc5 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <2>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp LEFT_SHIFT F &tp LEFT_CONTROL J + &kp D &kp E>; + }; + }; +}; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot new file mode 100644 index 00000000000..4ecb1b8e08a --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/keycode_events.snapshot @@ -0,0 +1,9 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap new file mode 100644 index 00000000000..6ddf87f895c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap @@ -0,0 +1,16 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) // trigger key + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,400) // not trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 6817c602dff..360a9e3d6ef 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -59,6 +59,48 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin }; ``` +#### Positional hold-tap and `hold-trigger-key-positions` + +- Including `hold-trigger-key-postions` in your hold-tap definition turns on the positional hold-tap feature. +- With positional hold-tap enabled, if you press any key **NOT** listed in `hold-trigger-key-positions` before `tapping-term-ms` expires, it will produce a tap. +- In all other situations, positional hold-tap will not modify the behavior of your hold-tap. +- Positional hold-tap is useful with home-row modifiers. If you have a home-row modifier key in the left hand for example, by including only keys positions from the right hand in `hold-trigger-key-positions`, you will only get hold behaviors during cross-hand key combinations. +- Note that `hold-trigger-key-postions` is an array of key position indexes. Key positions are numbered according to your keymap, starting with 0. So if the first key in your keymap is Q, this key is in position 0. The next key (probably W) will be in position 1, et cetera. +- See the following example, which uses a hold-tap behavior definition, configured with the `hold-preferrred` flavor, and with positional hold-tap enabled: + +``` +#include +#include +/ { + behaviors { + pht: positional_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "POSITIONAL_HOLD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <400>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <1>; // <---[[the W key]] + }; + }; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + default_layer { + bindings = < + // position 0 position 1 position 2 + &pht LEFT_SHIFT Q &kp W &kp E + >; + }; + }; +}; +``` + +- The sequence `(pht_down, E_down, E_up, pht_up)` produces `qe`. The normal hold behavior (LEFT_SHIFT) **IS** modified into a tap behavior (Q) by positional hold-tap because the first key pressed after the hold-tap key is the `E key`, which is in position 2, which **is NOT** included in `hold-trigger-key-positions`. +- The sequence `(pht_down, W_down, W_up, pht_up)` produces `W`. The normal hold behavior (LEFT_SHIFT) **is NOT** modified into a tap behavior (Q) by positional hold-tap because the first key pressed after the hold-tap key is the `W key`, which is in position 1, which **IS** included in `hold-trigger-key-positions`. +- If the `LEFT_SHIFT / Q key` is held by itself for longer than `tapping-term-ms`, a hold behavior is produced. This is because positional hold-tap only modifies the behavior of a hold-tap if another key is pressed before the `tapping-term-ms` period expires. + #### Home row mods This example configures a hold-tap that works well for homerow mods: diff --git a/docs/docs/development/tests.md b/docs/docs/development/tests.md index 5ebf14f2c54..e84acf8d19a 100644 --- a/docs/docs/development/tests.md +++ b/docs/docs/development/tests.md @@ -3,10 +3,10 @@ title: Tests sidebar_label: Tests --- -Running tests requires [native posix support](posix-board.md). Any folder under `/app/tests` -containing `native_posix.keymap` will be selected when running `west test`. - -Run a single test with `west test `, like `west test tests/toggle-layer/normal`. +- Running tests requires [native posix support](posix-board.md). +- Any folder under `/app/tests` containing `native_posix.keymap` will be selected when running `west test`. +- Run tests from within the `/zmk/app` directory. +- Run a single test with `west test `, like `west test tests/toggle-layer/normal`. ## Creating a New Test Set From 73fd4b9230bec4333fc3ecc74e455af78016f0e2 Mon Sep 17 00:00:00 2001 From: jmding8 <44815547+jmding8@users.noreply.github.com> Date: Mon, 1 Nov 2021 10:51:12 -0700 Subject: [PATCH 0184/1130] fix(behavior): Properly break in decision switch statement. Co-authored-by: jding --- app/src/behaviors/behavior_hold_tap.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index a5c4e90d74c..1871df704e5 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -413,10 +413,13 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, switch (hold_tap->config->flavor) { case FLAVOR_HOLD_PREFERRED: decide_hold_preferred(hold_tap, decision_moment); + break; case FLAVOR_BALANCED: decide_balanced(hold_tap, decision_moment); + break; case FLAVOR_TAP_PREFERRED: decide_tap_preferred(hold_tap, decision_moment); + break; } if (hold_tap->status == STATUS_UNDECIDED) { From 0b0b49d62666cfec2157900fd0dbf62460aa33f9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 17 Oct 2021 02:27:10 +0000 Subject: [PATCH 0185/1130] fix(split): Properly rediscover peripherals. * Handle disconnects of peripherals, and properly clean up and resume discovering for when the peripheral re-appears. --- app/Kconfig | 1 + app/src/split/bluetooth/central.c | 88 ++++++++++++++++++------------- 2 files changed, 52 insertions(+), 37 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 8817d506532..3502c652757 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -167,6 +167,7 @@ menuconfig ZMK_SPLIT_BLE_ROLE_CENTRAL bool "Central" select BT_CENTRAL select BT_GATT_CLIENT + select BT_GATT_AUTO_DISCOVER_CCC if ZMK_SPLIT_BLE_ROLE_CENTRAL diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index a56b0b81c6d..9a7f01b2b16 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -29,9 +29,10 @@ static int start_scan(void); static struct bt_conn *default_conn; -static struct bt_uuid_128 uuid = BT_UUID_INIT_128(ZMK_SPLIT_BT_SERVICE_UUID); +static const struct bt_uuid_128 split_service_uuid = BT_UUID_INIT_128(ZMK_SPLIT_BT_SERVICE_UUID); static struct bt_gatt_discover_params discover_params; static struct bt_gatt_subscribe_params subscribe_params; +static struct bt_gatt_discover_params sub_discover_params; K_MSGQ_DEFINE(peripheral_event_msgq, sizeof(struct zmk_position_state_changed), CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE, 4); @@ -83,15 +84,12 @@ static uint8_t split_central_notify_func(struct bt_conn *conn, return BT_GATT_ITER_CONTINUE; } -static int split_central_subscribe(struct bt_conn *conn) { +static void split_central_subscribe(struct bt_conn *conn) { int err = bt_gatt_subscribe(conn, &subscribe_params); switch (err) { case -EALREADY: LOG_DBG("[ALREADY SUBSCRIBED]"); break; - // break; - // bt_gatt_unsubscribe(conn, &subscribe_params); - // return split_central_subscribe(conn); case 0: LOG_DBG("[SUBSCRIBED]"); break; @@ -99,54 +97,67 @@ static int split_central_subscribe(struct bt_conn *conn) { LOG_ERR("Subscribe failed (err %d)", err); break; } - - return 0; } -static uint8_t split_central_discovery_func(struct bt_conn *conn, const struct bt_gatt_attr *attr, - struct bt_gatt_discover_params *params) { - int err; - +static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, + const struct bt_gatt_attr *attr, + struct bt_gatt_discover_params *params) { if (!attr) { LOG_DBG("Discover complete"); - (void)memset(params, 0, sizeof(*params)); + return BT_GATT_ITER_STOP; + } + + if (!attr->user_data) { + LOG_ERR("Required user data not passed to discovery"); return BT_GATT_ITER_STOP; } LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); - if (!bt_uuid_cmp(discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { - memcpy(&uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID), sizeof(uuid)); - discover_params.uuid = &uuid.uuid; - discover_params.start_handle = attr->handle + 1; + if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID))) { + LOG_DBG("Found position state characteristic"); + discover_params.uuid = NULL; + discover_params.start_handle = attr->handle + 2; discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; - err = bt_gatt_discover(conn, &discover_params); - if (err) { - LOG_ERR("Discover failed (err %d)", err); - } - } else if (!bt_uuid_cmp(discover_params.uuid, - BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID))) { - memcpy(&uuid, BT_UUID_GATT_CCC, sizeof(uuid)); - discover_params.uuid = &uuid.uuid; - discover_params.start_handle = attr->handle + 2; - discover_params.type = BT_GATT_DISCOVER_DESCRIPTOR; + subscribe_params.disc_params = &sub_discover_params; + subscribe_params.end_handle = discover_params.end_handle; subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); - - err = bt_gatt_discover(conn, &discover_params); - if (err) { - LOG_ERR("Discover failed (err %d)", err); - } - } else { subscribe_params.notify = split_central_notify_func; subscribe_params.value = BT_GATT_CCC_NOTIFY; - subscribe_params.ccc_handle = attr->handle; - split_central_subscribe(conn); + } + + return subscribe_params.value_handle ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; +} +static uint8_t split_central_service_discovery_func(struct bt_conn *conn, + const struct bt_gatt_attr *attr, + struct bt_gatt_discover_params *params) { + if (!attr) { + LOG_DBG("Discover complete"); + (void)memset(params, 0, sizeof(*params)); return BT_GATT_ITER_STOP; } + LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); + + if (bt_uuid_cmp(discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { + LOG_DBG("Found other service"); + return BT_GATT_ITER_CONTINUE; + } + + LOG_DBG("Found split service"); + discover_params.uuid = NULL; + discover_params.func = split_central_chrc_discovery_func; + discover_params.start_handle = attr->handle + 1; + discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + + int err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_ERR("Failed to start discovering split service characteristics (err %d)", err); + } return BT_GATT_ITER_STOP; } @@ -161,9 +172,9 @@ static void split_central_process_connection(struct bt_conn *conn) { return; } - if (conn == default_conn && !subscribe_params.value) { - discover_params.uuid = &uuid.uuid; - discover_params.func = split_central_discovery_func; + if (conn == default_conn && !subscribe_params.value_handle) { + discover_params.uuid = &split_service_uuid.uuid; + discover_params.func = split_central_service_discovery_func; discover_params.start_handle = 0x0001; discover_params.end_handle = 0xffff; discover_params.type = BT_GATT_DISCOVER_PRIMARY; @@ -318,6 +329,9 @@ static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { bt_conn_unref(default_conn); default_conn = NULL; + // Clean up previously discovered handles; + subscribe_params.value_handle = 0; + start_scan(); } From 944f93170454008759200a27a11225da40935edf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Oct 2021 05:06:35 +0000 Subject: [PATCH 0186/1130] chore(deps): bump DoozyX/clang-format-lint-action from 0.12 to 0.13 Bumps [DoozyX/clang-format-lint-action](https://github.com/DoozyX/clang-format-lint-action) from 0.12 to 0.13. - [Release notes](https://github.com/DoozyX/clang-format-lint-action/releases) - [Commits](https://github.com/DoozyX/clang-format-lint-action/compare/v0.12...v0.13) --- updated-dependencies: - dependency-name: DoozyX/clang-format-lint-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/clang-format-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clang-format-lint.yml b/.github/workflows/clang-format-lint.yml index e9b3e077c0c..375bcd4e521 100644 --- a/.github/workflows/clang-format-lint.yml +++ b/.github/workflows/clang-format-lint.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: DoozyX/clang-format-lint-action@v0.12 + - uses: DoozyX/clang-format-lint-action@v0.13 with: source: "./app" extensions: "h,c" From f2e0642291621611f3abce69f73a22c33b1ce801 Mon Sep 17 00:00:00 2001 From: Hai-Ninh Dang <30751439+mrninhvn@users.noreply.github.com> Date: Tue, 9 Nov 2021 12:57:24 +0700 Subject: [PATCH 0187/1130] feat(boards): Add Mikoto board * Supports selecting from several possible charge currents Co-authored-by: Pete Johanson --- app/boards/arm/mikoto/CMakeLists.txt | 14 +++ app/boards/arm/mikoto/Kconfig | 29 +++++ app/boards/arm/mikoto/Kconfig.board | 8 ++ app/boards/arm/mikoto/Kconfig.defconfig | 40 ++++++ .../arm/mikoto/arduino_pro_micro_pins.dtsi | 59 +++++++++ app/boards/arm/mikoto/board.cmake | 5 + app/boards/arm/mikoto/mikoto_520.dts | 115 ++++++++++++++++++ app/boards/arm/mikoto/mikoto_520.yaml | 15 +++ app/boards/arm/mikoto/mikoto_520.zmk.yml | 10 ++ app/boards/arm/mikoto/mikoto_520_defconfig | 20 +++ app/boards/arm/mikoto/pinmux.c | 48 ++++++++ 11 files changed, 363 insertions(+) create mode 100644 app/boards/arm/mikoto/CMakeLists.txt create mode 100644 app/boards/arm/mikoto/Kconfig create mode 100644 app/boards/arm/mikoto/Kconfig.board create mode 100644 app/boards/arm/mikoto/Kconfig.defconfig create mode 100644 app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi create mode 100644 app/boards/arm/mikoto/board.cmake create mode 100644 app/boards/arm/mikoto/mikoto_520.dts create mode 100644 app/boards/arm/mikoto/mikoto_520.yaml create mode 100644 app/boards/arm/mikoto/mikoto_520.zmk.yml create mode 100644 app/boards/arm/mikoto/mikoto_520_defconfig create mode 100644 app/boards/arm/mikoto/pinmux.c diff --git a/app/boards/arm/mikoto/CMakeLists.txt b/app/boards/arm/mikoto/CMakeLists.txt new file mode 100644 index 00000000000..cd4843af1f0 --- /dev/null +++ b/app/boards/arm/mikoto/CMakeLists.txt @@ -0,0 +1,14 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() \ No newline at end of file diff --git a/app/boards/arm/mikoto/Kconfig b/app/boards/arm/mikoto/Kconfig new file mode 100644 index 00000000000..646d119c181 --- /dev/null +++ b/app/boards/arm/mikoto/Kconfig @@ -0,0 +1,29 @@ +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_MIKOTO_520) + +choice BOARD_MIKOTO_CHARGER_CURRENT + prompt "Charge current to supply to attached batteries" + depends on (BOARD_MIKOTO_520) + +config BOARD_MIKOTO_CHARGER_CURRENT_40MA + bool "40mA charge current, for battery capacity 40mAh or higher" + +config BOARD_MIKOTO_CHARGER_CURRENT_100MA + bool "100mA charge current, for battery capacity 100mAh or higher" + +config BOARD_MIKOTO_CHARGER_CURRENT_150MA + bool "150mA charge current, for battery capacity 150mAh or higher" + +config BOARD_MIKOTO_CHARGER_CURRENT_250MA + bool "250mA charge current, for battery capacity 250mAh or higher" + +config BOARD_MIKOTO_CHARGER_CURRENT_350MA + bool "350mA charge current, for battery capacity 350mAh or higher" + +config BOARD_MIKOTO_CHARGER_CURRENT_NONE + bool "Disable charge current" + +endchoice \ No newline at end of file diff --git a/app/boards/arm/mikoto/Kconfig.board b/app/boards/arm/mikoto/Kconfig.board new file mode 100644 index 00000000000..067c2fbe7a5 --- /dev/null +++ b/app/boards/arm/mikoto/Kconfig.board @@ -0,0 +1,8 @@ +# mikoto board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_MIKOTO_520 + bool "mikoto_520" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/mikoto/Kconfig.defconfig b/app/boards/arm/mikoto/Kconfig.defconfig new file mode 100644 index 00000000000..2ca77b9e626 --- /dev/null +++ b/app/boards/arm/mikoto/Kconfig.defconfig @@ -0,0 +1,40 @@ +# Electronut Labs Papyr board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_MIKOTO_520 + +config BOARD + default "mikoto" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config PINMUX + default y + +choice BOARD_MIKOTO_CHARGER_CURRENT + default BOARD_MIKOTO_CHARGER_CURRENT_100MA +endchoice + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +endif # BOARD_MIKOTO_520 diff --git a/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi b/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi new file mode 100644 index 00000000000..7c5cd12f95d --- /dev/null +++ b/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 4 0> /* D0 */ + , <1 0 &gpio0 8 0> /* D1 */ + , <2 0 &gpio0 17 0> /* D2 */ + , <3 0 &gpio0 20 0> /* D3 */ + , <4 0 &gpio0 22 0> /* D4/A6 */ + , <5 0 &gpio0 24 0> /* D5 */ + , <6 0 &gpio1 0 0> /* D6/A7 */ + , <7 0 &gpio1 2 0> /* D7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio1 13 0> /* D14 */ + , <15 0 &gpio0 2 0> /* D15 */ + , <18 0 &gpio0 29 0> /* D18/A0 */ + , <19 0 &gpio0 31 0> /* D19/A1 */ + , <20 0 &gpio0 25 0> /* D20/A2 */ + , <21 0 &gpio0 11 0> /* D21/A3 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 29 0> /* D18/A0 */ + , <1 0 &gpio0 31 0> /* D19/A1 */ + , <2 0 &gpio0 25 0> /* D20/A2 */ + , <3 0 &gpio0 11 0> /* D21/A3 */ + , <6 0 &gpio0 22 0> /* D4/A6 */ + , <7 0 &gpio1 0 0> /* D6/A7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + ; + }; +}; + + +pro_micro_d: &pro_micro {}; +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/mikoto/board.cmake b/app/boards/arm/mikoto/board.cmake new file mode 100644 index 00000000000..fa847d50595 --- /dev/null +++ b/app/boards/arm/mikoto/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts new file mode 100644 index 00000000000..20703e8514d --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "mikoto"; + compatible = "zhiayang,mikoto"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <10000000>; + full-ohms = <(10000000 + 4000000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <17>; + scl-pin = <20>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + tx-pin = <8>; + rx-pin = <4>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/mikoto/mikoto_520.yaml b/app/boards/arm/mikoto/mikoto_520.yaml new file mode 100644 index 00000000000..8d9f49ae855 --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_520.yaml @@ -0,0 +1,15 @@ +identifier: mikoto_520 +name: mikoto_520 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/mikoto/mikoto_520.zmk.yml b/app/boards/arm/mikoto/mikoto_520.zmk.yml new file mode 100644 index 00000000000..91dcc9e09a6 --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_520.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: mikoto_520 +name: Mikoto 5.20 +type: board +arch: arm +outputs: + - usb + - ble +url: https://github.com/zhiayang/mikoto +exposes: [pro_micro] diff --git a/app/boards/arm/mikoto/mikoto_520_defconfig b/app/boards/arm/mikoto/mikoto_520_defconfig new file mode 100644 index 00000000000..925711c005c --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_520_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_MIKOTO_520=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y diff --git a/app/boards/arm/mikoto/pinmux.c b/app/boards/arm/mikoto/pinmux.c new file mode 100644 index 00000000000..59a38fbf7e9 --- /dev/null +++ b/app/boards/arm/mikoto/pinmux.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +static int pinmux_mikoto_init(const struct device *port) { + ARG_UNUSED(port); + +#if CONFIG_BOARD_MIKOTO_520 + const struct device *p0 = device_get_binding("GPIO_0"); + const struct device *p1 = device_get_binding("GPIO_1"); +#if CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_40MA + gpio_pin_configure(p0, 26, GPIO_INPUT | GPIO_PULL_DOWN); + gpio_pin_configure(p1, 15, GPIO_INPUT); +#elif CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_100MA + gpio_pin_configure(p0, 26, GPIO_OUTPUT); + gpio_pin_set(p0, 26, 0); + gpio_pin_configure(p1, 15, GPIO_INPUT); +#elif CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_150MA + gpio_pin_configure(p0, 26, GPIO_OUTPUT); + gpio_pin_set(p0, 26, 0); + gpio_pin_configure(p1, 15, GPIO_INPUT | GPIO_PULL_DOWN); +#elif CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_250MA + gpio_pin_configure(p0, 26, GPIO_INPUT); + gpio_pin_configure(p1, 15, GPIO_OUTPUT); + gpio_pin_set(p1, 15, 0); +#elif CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_350MA + gpio_pin_configure(p0, 26, GPIO_OUTPUT); + gpio_pin_set(p0, 26, 0); + gpio_pin_configure(p1, 15, GPIO_OUTPUT); + gpio_pin_set(p1, 15, 0); +#elif CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_NONE + gpio_pin_configure(p0, 26, GPIO_INPUT); + gpio_pin_configure(p1, 15, GPIO_INPUT); +#endif +#endif + return 0; +} + +SYS_INIT(pinmux_mikoto_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); From 4e62319982ea258741eca2b79cf952fe7b8d6b3b Mon Sep 17 00:00:00 2001 From: jding Date: Sat, 6 Nov 2021 21:31:23 +0000 Subject: [PATCH 0188/1130] feat: hold/tap flavor tap-unless-interrupted Implements new hold/tap flavor, tap-unless-interrupted Adds tests Adds docs --- .../behaviors/zmk,behavior-hold-tap.yaml | 1 + app/src/behaviors/behavior_hold_tap.c | 26 +++++++ .../1-dn-up/events.patterns | 4 ++ .../1-dn-up/keycode_events.snapshot | 5 ++ .../1-dn-up/native_posix.keymap | 11 +++ .../2-dn-timer-up/events.patterns | 4 ++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++ .../2-dn-timer-up/native_posix.keymap | 11 +++ .../3a-moddn-dn-modup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../3a-moddn-dn-modup-up/native_posix.keymap | 13 ++++ .../events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../native_posix.keymap | 14 ++++ .../3c-kcdn-dn-kcup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 ++++ .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../native_posix.keymap | 13 ++++ .../4a-dn-htdn-timer-htup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 10 +++ .../native_posix.keymap | 14 ++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../native_posix.keymap | 14 ++++ .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../native_posix.keymap | 14 ++++ .../4c-dn-kcdn-kcup-up/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 ++++ .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 ++ .../keycode_events.snapshot | 7 ++ .../native_posix.keymap | 14 ++++ .../5-quick-tap/events.patterns | 4 ++ .../5-quick-tap/keycode_events.snapshot | 10 +++ .../5-quick-tap/native_posix.keymap | 14 ++++ .../behavior_keymap.dtsi | 30 ++++++++ docs/docs/behaviors/hold-tap.md | 68 ++++++++++++++++++- 40 files changed, 415 insertions(+), 3 deletions(-) create mode 100644 app/tests/hold-tap/tap-unless-interrupted/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/events.patterns create mode 100644 app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index 9d489e80b58..096911598f2 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -28,6 +28,7 @@ properties: - "hold-preferred" - "balanced" - "tap-preferred" + - "tap-unless-interrupted" retro-tap: type: boolean hold-trigger-key-positions: diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 1871df704e5..548d6ef87bc 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -34,6 +34,7 @@ enum flavor { FLAVOR_HOLD_PREFERRED, FLAVOR_BALANCED, FLAVOR_TAP_PREFERRED, + FLAVOR_TAP_UNLESS_INTERRUPTED, }; enum status { @@ -258,6 +259,26 @@ static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision } } +static void decide_tap_unless_interrupted(struct active_hold_tap *hold_tap, + enum decision_moment event) { + switch (event) { + case HT_KEY_UP: + hold_tap->status = STATUS_TAP; + return; + case HT_OTHER_KEY_DOWN: + hold_tap->status = STATUS_HOLD_INTERRUPT; + return; + case HT_TIMER_EVENT: + hold_tap->status = STATUS_TAP; + return; + case HT_QUICK_TAP: + hold_tap->status = STATUS_TAP; + return; + default: + return; + } +} + static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) { switch (event) { case HT_KEY_UP: @@ -285,6 +306,8 @@ static inline const char *flavor_str(enum flavor flavor) { return "balanced"; case FLAVOR_TAP_PREFERRED: return "tap-preferred"; + case FLAVOR_TAP_UNLESS_INTERRUPTED: + return "tap-unless-interrupted"; default: return "UNKNOWN FLAVOR"; } @@ -420,6 +443,9 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, case FLAVOR_TAP_PREFERRED: decide_tap_preferred(hold_tap, decision_moment); break; + case FLAVOR_TAP_UNLESS_INTERRUPTED: + decide_tap_unless_interrupted(hold_tap, decision_moment); + break; } if (hold_tap->status == STATUS_UNDECIDED) { diff --git a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000000..1eb2d1e3246 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-unless-interrupted decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix.keymap new file mode 100644 index 00000000000..040cdd3ee78 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..e036acb9d28 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-unless-interrupted decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000000..11d033f40d9 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 00000000000..a733739d0ea --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-unless-interrupted decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 00000000000..abb31b4b3a1 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..d292813122b --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-unless-interrupted decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 00000000000..38575e9a204 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000000..3a9b3dcb502 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-unless-interrupted decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000000..21baa447eba --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..0a72c83a3a0 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-unless-interrupted decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000000..cd7ff384bfc --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 00000000000..b138d6cfdb4 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-unless-interrupted decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 00000000000..b84aa6265b7 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000000..6fa61725ee0 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000000..bdfaf9d3d9e --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000000..6fa61725ee0 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000000..c0fd1bd184b --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000000..6fa61725ee0 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000000..69c19676e77 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000000..fc685a377ad --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000000..301ef0ac5f2 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/keycode_events.snapshot new file mode 100644 index 00000000000..070b9938b18 --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-unless-interrupted decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-unless-interrupted decision moment quick-tap) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix.keymap new file mode 100644 index 00000000000..8f90ffadb4e --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi new file mode 100644 index 00000000000..18f68d632ff --- /dev/null +++ b/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi @@ -0,0 +1,30 @@ +#include +#include +#include + + + +/ { + behaviors { + ht_tui: behavior_hold_tap_tap_unless_interrupted { + compatible = "zmk,behavior-hold-tap"; + label = "hold_tap_tap_unless_interrupted"; + #binding-cells = <2>; + flavor = "tap-unless-interrupted"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_tui LEFT_SHIFT F &ht_tui LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 360a9e3d6ef..972df0be992 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -26,6 +26,7 @@ We call this the 'hold-preferred' flavor of hold-taps. While this flavor may wor - The 'hold-preferred' flavor triggers the hold behavior when the `tapping-term-ms` has expired or another key is pressed. - The 'balanced' flavor will trigger the hold behavior when the `tapping-term-ms` has expired or another key is pressed and released. - The 'tap-preferred' flavor triggers the hold behavior when the `tapping-term-ms` has expired. It triggers the tap behavior when another key is pressed. +- The 'tap-unless-interrupted' flavor triggers a hold behavior only when another key is pressed before `tapping-term-ms` has expired. It triggers the tap behavior in all other situations. When the hold-tap key is released and the hold behavior has not been triggered, the tap behavior will trigger. @@ -103,7 +104,40 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin #### Home row mods -This example configures a hold-tap that works well for homerow mods: +The following are suggested hold-tap configurations that work well with home row mods: + +##### Option 1: cross-hand only modifiers, using `tap-unless-interrupted` and positional hold-tap (`hold-trigger-key-positions`) + +``` +#include +#include +/ { + behaviors { + lh_pht: left_hand_positional_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "POSITIONAL_HOLD_TAP"; + #binding-cells = <2>; + flavor = "tap-unless-interrupted"; + tapping-term-ms = <100>; // <---[[produces tap if held longer than tapping-term-ms]] + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <5 6 7 8 9 10>; // <---[[right-hand keys]] + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + // position 0 pos 1 pos 2 pos 3 pos 4 pos 5 pos 6 pos 7 pos 8 pos 9 pos 10 + &lh_pht LSFT A &lh_pht LGUI S &lh_pht LALT D &lh_pht LCTL F &kp G &kp H &kp I &kp J &kp K &kp L &kp SCLN + >; + }; + }; +}; +``` + +##### Option 2: `tap-preferred` ``` #include @@ -124,7 +158,6 @@ This example configures a hold-tap that works well for homerow mods: keymap { compatible = "zmk,keymap"; - default_layer { bindings = < &hm LCTRL A &hm LGUI S &hm LALT D &hm LSHIFT F @@ -135,7 +168,36 @@ This example configures a hold-tap that works well for homerow mods: ``` -If this config does not work for you, try the flavor "balanced" with a medium `tapping-term-ms` such as 200ms. +##### Option 3: `balanced` + +``` +#include +#include + +/ { + behaviors { + bhm: balanced_homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "HOMEROW_MODS"; + #binding-cells = <2>; + tapping-term-ms = <200>; // <---[[moderate duration]] + quick_tap_ms = <0>; + flavor = "balanced"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &bhm LCTRL A &bhm LGUI S &bhm LALT D &bhm LSHIFT F + >; + }; + }; +}; + +``` #### Comparison to QMK From c412fad40da718b5df518c92b08b4913d26621c6 Mon Sep 17 00:00:00 2001 From: "Viet (Drake) Tran" Date: Tue, 9 Nov 2021 22:26:21 +0700 Subject: [PATCH 0189/1130] fix(shields): Fix some keycodes in reviung41 keymap Notice some keycodes are not matched with the expected keys. --- app/boards/shields/reviung41/reviung41.keymap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/shields/reviung41/reviung41.keymap b/app/boards/shields/reviung41/reviung41.keymap index 9c18975950c..f0450b195b7 100644 --- a/app/boards/shields/reviung41/reviung41.keymap +++ b/app/boards/shields/reviung41/reviung41.keymap @@ -35,8 +35,8 @@ // | | | RET | ADJ | | bindings = < &trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp N8 &kp LPAR &kp RPAR &kp DEL - &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp GRAVE &kp GRAVE - &trans &kp ESC &kp LGUI &kp LALT &kp CLCK &kp SQT &kp HOME &kp END &kp PG_UP &kp PG_DN &kp PSCRN &mt RSHFT RET + &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp GRAVE &kp TILDE + &trans &kp ESC &kp LGUI &kp LALT &kp CLCK &kp DQT &kp HOME &kp END &kp PG_UP &kp PG_DN &kp PSCRN &mt RSHFT RET &trans &trans &kp RET &mo 3 &trans >; }; @@ -50,7 +50,7 @@ bindings = < &trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 - &trans &kp ESC &kp LGUI &kp RALT &kp CLCK &kp SQT &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &kp ESC &kp LGUI &kp RALT &kp CLCK &kp DQT &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &mo 3 &kp BSPC &trans &trans >; }; @@ -58,7 +58,7 @@ adjust_layer { // ----------------------------------------------------------------------------------------- // | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | BT1 | BT2 | BT3 | BT4 | BT5 | BT CLR | -// | RGB BRI- | RGB SAT- | RGB HUE- | RGB ANI+ | | | | | | | | | | +// | RGB BRI- | RGB SAT- | RGB HUE- | RGB ANI- | | | | | | | | | | // | | | | | | | | RESET | | | | | | // | | | | | | bindings = < From f8018b22d0bcba97e54652a01e8bdefb15f83c4c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 8 Nov 2021 21:21:01 +0000 Subject: [PATCH 0190/1130] fix(hid): Basic consumer code fixes for signed logical max. * Logical max values are signed, so for the report descriptor, use a two byte logical max descriptor item to impart proper 0xFF max logical value. --- app/include/zmk/hid.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 95b82d46859..e23caff99d0 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -143,12 +143,14 @@ static const uint8_t zmk_hid_report_desc[] = { /* LOGICAL_MINIMUM (0) */ HID_GI_LOGICAL_MIN(1), 0x00, - /* LOGICAL_MAXIMUM (0xFFFF) */ - HID_GI_LOGICAL_MAX(1), + /* LOGICAL_MAXIMUM (0x00FF) - little endian, and requires two bytes because logical max is + signed */ + HID_GI_LOGICAL_MAX(2), 0xFF, + 0x00, HID_LI_USAGE_MIN(1), 0x00, - /* USAGE_MAXIMUM (0xFFFF) */ + /* USAGE_MAXIMUM (0xFF) */ HID_LI_USAGE_MAX(1), 0xFF, /* INPUT (Data,Ary,Abs) */ From e9140b2da914ee121e7f40eaeb8c6cf827d03622 Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Wed, 9 Jun 2021 18:51:28 -0500 Subject: [PATCH 0191/1130] feat(conditional-layers): Implement feature This is a generalization of the existing concept of tri-layer support that's already well known. Essentially, a conditional-layer configuration activates a particular layer (the then-layer) when one or more other layers (the if-layers) are activated. This is commonly used on ortho keyboards to activate a third "adjust" layer while the primary two layers ("lower" and "raise") are active. --- app/CMakeLists.txt | 1 + app/dts/bindings/zmk,conditional-layers.yaml | 17 ++++ app/src/conditional_layer.c | 91 ++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 app/dts/bindings/zmk,conditional-layers.yaml create mode 100644 app/src/conditional_layer.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 5092deffe16..9c7befec775 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -57,6 +57,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) target_sources(app PRIVATE src/combo.c) + target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/keymap.c) endif() target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) diff --git a/app/dts/bindings/zmk,conditional-layers.yaml b/app/dts/bindings/zmk,conditional-layers.yaml new file mode 100644 index 00000000000..7e79038ea33 --- /dev/null +++ b/app/dts/bindings/zmk,conditional-layers.yaml @@ -0,0 +1,17 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Conditional layers allow layer combinations to trigger additional layers + +compatible: "zmk,conditional-layers" + +child-binding: + description: "Single conditional layer that activates then-layer when if-layers are active" + + properties: + if-layers: + type: array + required: true + then-layer: + type: int + required: true diff --git a/app/src/conditional_layer.c b/app/src/conditional_layer.c new file mode 100644 index 00000000000..4beb87e325a --- /dev/null +++ b/app/src/conditional_layer.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_conditional_layers + +#include + +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +// Conditional layer configuration that activates the specified then-layer when all if-layers are +// active. With two if-layers, this is referred to as "tri-layer", and is commonly used to activate +// a third "adjust" layer if and only if the "lower" and "raise" layers are both active. +struct conditional_layer_cfg { + // A bitmask of each layer that must be pressed for this conditional layer config to activate. + zmk_keymap_layers_state_t if_layers_state_mask; + + // The layer number that should be active while all layers in the if-layers mask are active. + int8_t then_layer; +}; + +#define IF_LAYER_BIT(i, n) BIT(DT_PROP_BY_IDX(n, if_layers, i)) | + +// Evaluates to conditional_layer_cfg struct initializer. +#define CONDITIONAL_LAYER_DECL(n) \ + { \ + /* TODO: Replace UTIL_LISTIFY with DT_FOREACH_PROP_ELEM after Zepyhr 2.6.0 upgrade. */ \ + .if_layers_state_mask = UTIL_LISTIFY(DT_PROP_LEN(n, if_layers), IF_LAYER_BIT, n) 0, \ + .then_layer = DT_PROP(n, then_layer), \ + }, + +// All conditional layer configurations in the keymap. +static const struct conditional_layer_cfg CONDITIONAL_LAYER_CFGS[] = { + DT_INST_FOREACH_CHILD(0, CONDITIONAL_LAYER_DECL)}; + +static const int32_t NUM_CONDITIONAL_LAYER_CFGS = + sizeof(CONDITIONAL_LAYER_CFGS) / sizeof(*CONDITIONAL_LAYER_CFGS); + +static void conditional_layer_activate(int8_t layer) { + // This may trigger another event that could, in turn, activate additional then-layers. However, + // the process will eventually terminate (at worst, when every layer is active). + if (!zmk_keymap_layer_active(layer)) { + LOG_DBG("layer %d", layer); + zmk_keymap_layer_activate(layer); + } +} + +static void conditional_layer_deactivate(int8_t layer) { + // This may deactivate a then-layer that's already active via another mechanism (e.g., a + // momentary layer behavior). However, the same problem arises when multiple keys with the same + // &mo binding are held and then one is released, so it's probably not an issue in practice. + if (zmk_keymap_layer_active(layer)) { + LOG_DBG("layer %d", layer); + zmk_keymap_layer_deactivate(layer); + } +} + +// On layer state changes, examines each conditional layer config to determine if then-layer in the +// config should activate based on the currently active set of if-layers. +static int layer_state_changed_listener(const zmk_event_t *ev) { + for (int i = 0; i < NUM_CONDITIONAL_LAYER_CFGS; i++) { + const struct conditional_layer_cfg *cfg = CONDITIONAL_LAYER_CFGS + i; + zmk_keymap_layers_state_t mask = cfg->if_layers_state_mask; + + // Activate then-layer if and only if all if-layers are already active. Note that we + // reevaluate the current layer state for each config since activation of one layer can also + // trigger activation of another. + if ((zmk_keymap_layer_state() & mask) == mask) { + conditional_layer_activate(cfg->then_layer); + } else { + conditional_layer_deactivate(cfg->then_layer); + } + } + return 0; +} + +ZMK_LISTENER(conditional_layer, layer_state_changed_listener); +ZMK_SUBSCRIPTION(conditional_layer, zmk_layer_state_changed); + +#endif From cbf6e28e34444b584b9dbaf97d7d40f587d22e82 Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Fri, 1 Oct 2021 22:05:37 -0400 Subject: [PATCH 0192/1130] docs(conditional-layers): Document feature --- docs/docs/features/conditional-layers.md | 56 ++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 57 insertions(+) create mode 100644 docs/docs/features/conditional-layers.md diff --git a/docs/docs/features/conditional-layers.md b/docs/docs/features/conditional-layers.md new file mode 100644 index 00000000000..a685bcabd93 --- /dev/null +++ b/docs/docs/features/conditional-layers.md @@ -0,0 +1,56 @@ +--- +title: Conditional Layers +--- + +Conditional layers support activating a particular layer (called the `then-layer`) when all layers +in a specified set (called the `if-layers`) are active. This feature generalizes what's commonly +known as tri-layer support, allowing activation of two layers (usually called "lower" and "raise") +to trigger a third (usually called "adjust"). + +Another way to think of this feature is as a simple combo system for layers, just like the usual +[combos for behaviors](combos.md). + +## Configuration + +Conditional layers are configured via a `conditional_layers` node in your `.keymap` file as follows: + +``` +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; + }; + }; +}; +``` + +Each conditional layer configuration may have whatever name you like, but it's helpful to choose +something self explanatory like `tri_layer`. The following properties are supported: + +- `if-layers` specifies a set of layer numbers, all of which must be active for the conditional + layer to trigger. +- `then-layer` specifies a layer number that should be activated if and only if all the layers + specified in the `if-layers` property are active. + +Therefore, in this example, layer 3 ("adjust") will be activated if and only if both layers 1 +("lower") and 2 ("raise") are active. + +:::tip +Since higher-numbered layers are processed first, a `then-layer` should generally have a higher +number than its associated `if-layers` so the `then-layer` can be accessed when active. +::: + +:::info +Activating a `then-layer` in one conditional layer configuration can trigger the `if-layers` +condition in another configuration, possibly repeatedly. +::: + +:::caution +When configured as a `then-layer`, a layer's activation status is entirely controlled by the +conditional layers feature. Even if the layer is activated for another reason (such as a [momentary +layer](../behaviors/layers.md#momentary-layer) behavior), it will be immediately deactivated if the +associated `then-layers` configuration is not met. As such, we recommend avoiding using regular +layer behaviors for `then-layer` targets. +::: diff --git a/docs/sidebars.js b/docs/sidebars.js index 2a406589f65..04389695bf1 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -11,6 +11,7 @@ module.exports = { Features: [ "features/keymaps", "features/combos", + "features/conditional-layers", "features/debouncing", "features/displays", "features/encoders", From df110beac4c028ac658eb58925dc79176e0b334c Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Wed, 9 Jun 2021 18:55:57 -0500 Subject: [PATCH 0193/1130] test(conditional-layers): Add basic unit tests --- .../quad-layer/events.patterns | 3 + .../quad-layer/keycode_events.snapshot | 10 ++++ .../quad-layer/native_posix.keymap | 60 +++++++++++++++++++ .../tri-layer/events.patterns | 3 + .../tri-layer/keycode_events.snapshot | 8 +++ .../tri-layer/native_posix.keymap | 52 ++++++++++++++++ 6 files changed, 136 insertions(+) create mode 100644 app/tests/conditional-layer/quad-layer/events.patterns create mode 100644 app/tests/conditional-layer/quad-layer/keycode_events.snapshot create mode 100644 app/tests/conditional-layer/quad-layer/native_posix.keymap create mode 100644 app/tests/conditional-layer/tri-layer/events.patterns create mode 100644 app/tests/conditional-layer/tri-layer/keycode_events.snapshot create mode 100644 app/tests/conditional-layer/tri-layer/native_posix.keymap diff --git a/app/tests/conditional-layer/quad-layer/events.patterns b/app/tests/conditional-layer/quad-layer/events.patterns new file mode 100644 index 00000000000..14ded7959fd --- /dev/null +++ b/app/tests/conditional-layer/quad-layer/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*conditional_layer/cl/p diff --git a/app/tests/conditional-layer/quad-layer/keycode_events.snapshot b/app/tests/conditional-layer/quad-layer/keycode_events.snapshot new file mode 100644 index 00000000000..fb54a6caa3e --- /dev/null +++ b/app/tests/conditional-layer/quad-layer/keycode_events.snapshot @@ -0,0 +1,10 @@ +mo_pressed: position 2 layer 1 +mo_pressed: position 3 layer 2 +mo_pressed: position 1 layer 3 +cl_activate: layer 4 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 1 layer 3 +cl_deactivate: layer 4 +mo_released: position 3 layer 2 +mo_released: position 2 layer 1 diff --git a/app/tests/conditional-layer/quad-layer/native_posix.keymap b/app/tests/conditional-layer/quad-layer/native_posix.keymap new file mode 100644 index 00000000000..300b1f75f24 --- /dev/null +++ b/app/tests/conditional-layer/quad-layer/native_posix.keymap @@ -0,0 +1,60 @@ +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + quad_layer { + if-layers = <1 2 3>; + then-layer = <4>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A &mo 3 + &mo 1 &mo 2 + >; + }; + layer_1 { + bindings = < + &kp B &trans + &trans &trans + >; + }; + layer_2 { + bindings = < + &kp C &trans + &trans &trans + >; + }; + layer_3 { + bindings = < + &kp D &trans + &trans &trans + >; + }; + layer_4 { + bindings = < + &kp E &trans + &trans &trans + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; diff --git a/app/tests/conditional-layer/tri-layer/events.patterns b/app/tests/conditional-layer/tri-layer/events.patterns new file mode 100644 index 00000000000..14ded7959fd --- /dev/null +++ b/app/tests/conditional-layer/tri-layer/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*conditional_layer/cl/p diff --git a/app/tests/conditional-layer/tri-layer/keycode_events.snapshot b/app/tests/conditional-layer/tri-layer/keycode_events.snapshot new file mode 100644 index 00000000000..b23e61b2ddc --- /dev/null +++ b/app/tests/conditional-layer/tri-layer/keycode_events.snapshot @@ -0,0 +1,8 @@ +mo_pressed: position 2 layer 1 +mo_pressed: position 3 layer 2 +cl_activate: layer 3 +kp_pressed: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 3 layer 2 +cl_deactivate: layer 3 +mo_released: position 2 layer 1 diff --git a/app/tests/conditional-layer/tri-layer/native_posix.keymap b/app/tests/conditional-layer/tri-layer/native_posix.keymap new file mode 100644 index 00000000000..150d6dd1ad6 --- /dev/null +++ b/app/tests/conditional-layer/tri-layer/native_posix.keymap @@ -0,0 +1,52 @@ +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A &kp B + &mo 1 &mo 2 + >; + }; + layer_1 { + bindings = < + &kp C &kp D + &trans &trans + >; + }; + layer_2 { + bindings = < + &kp E &kp F + &trans &trans + >; + }; + layer_3 { + bindings = < + &kp G &kp H + &trans &trans + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; From a908396013f4af15dd906cc882e23baa121bf89c Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Sat, 2 Oct 2021 00:02:51 -0400 Subject: [PATCH 0194/1130] test(conditional-layers): Add multi-config tests --- .../multiple-configs/events.patterns | 3 + .../multiple-configs/keycode_events.snapshot | 16 ++++ .../multiple-configs/native_posix.keymap | 74 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 app/tests/conditional-layer/multiple-configs/events.patterns create mode 100644 app/tests/conditional-layer/multiple-configs/keycode_events.snapshot create mode 100644 app/tests/conditional-layer/multiple-configs/native_posix.keymap diff --git a/app/tests/conditional-layer/multiple-configs/events.patterns b/app/tests/conditional-layer/multiple-configs/events.patterns new file mode 100644 index 00000000000..14ded7959fd --- /dev/null +++ b/app/tests/conditional-layer/multiple-configs/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*conditional_layer/cl/p diff --git a/app/tests/conditional-layer/multiple-configs/keycode_events.snapshot b/app/tests/conditional-layer/multiple-configs/keycode_events.snapshot new file mode 100644 index 00000000000..a076a639e06 --- /dev/null +++ b/app/tests/conditional-layer/multiple-configs/keycode_events.snapshot @@ -0,0 +1,16 @@ +mo_pressed: position 2 layer 1 +mo_pressed: position 3 layer 2 +cl_activate: layer 4 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +mo_pressed: position 1 layer 3 +cl_activate: layer 5 +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 1 layer 3 +cl_deactivate: layer 5 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 3 layer 2 +cl_deactivate: layer 4 +mo_released: position 2 layer 1 diff --git a/app/tests/conditional-layer/multiple-configs/native_posix.keymap b/app/tests/conditional-layer/multiple-configs/native_posix.keymap new file mode 100644 index 00000000000..8290649f9e4 --- /dev/null +++ b/app/tests/conditional-layer/multiple-configs/native_posix.keymap @@ -0,0 +1,74 @@ +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <4>; + }; + quad_layer { + if-layers = <1 2 3>; + then-layer = <5>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A &mo 3 + &mo 1 &mo 2 + >; + }; + layer_1 { + bindings = < + &kp B &trans + &trans &trans + >; + }; + layer_2 { + bindings = < + &kp C &trans + &trans &trans + >; + }; + layer_3 { + bindings = < + &kp D &trans + &trans &trans + >; + }; + layer_4 { + bindings = < + &kp E &trans + &trans &trans + >; + }; + layer_5 { + bindings = < + &kp F &trans + &trans &trans + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; From 6cd1734851c31884cdf14b40fddc5a9df273b296 Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Sat, 2 Oct 2021 00:27:49 -0400 Subject: [PATCH 0195/1130] test(conditional-layers): Add interleaved up/downs --- .../tri-layer-alt-order/events.patterns | 3 ++ .../keycode_events.snapshot | 8 +++ .../tri-layer-alt-order/native_posix.keymap | 52 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 app/tests/conditional-layer/tri-layer-alt-order/events.patterns create mode 100644 app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot create mode 100644 app/tests/conditional-layer/tri-layer-alt-order/native_posix.keymap diff --git a/app/tests/conditional-layer/tri-layer-alt-order/events.patterns b/app/tests/conditional-layer/tri-layer-alt-order/events.patterns new file mode 100644 index 00000000000..14ded7959fd --- /dev/null +++ b/app/tests/conditional-layer/tri-layer-alt-order/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*conditional_layer/cl/p diff --git a/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot b/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot new file mode 100644 index 00000000000..05337b29f5d --- /dev/null +++ b/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot @@ -0,0 +1,8 @@ +mo_pressed: position 3 layer 2 +mo_pressed: position 2 layer 1 +cl_activate: layer 3 +kp_pressed: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 3 layer 2 +cl_deactivate: layer 3 +mo_released: position 2 layer 1 +kp_released: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/conditional-layer/tri-layer-alt-order/native_posix.keymap b/app/tests/conditional-layer/tri-layer-alt-order/native_posix.keymap new file mode 100644 index 00000000000..a31540380bc --- /dev/null +++ b/app/tests/conditional-layer/tri-layer-alt-order/native_posix.keymap @@ -0,0 +1,52 @@ +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A &kp B + &mo 1 &mo 2 + >; + }; + layer_1 { + bindings = < + &kp C &kp D + &trans &trans + >; + }; + layer_2 { + bindings = < + &kp E &kp F + &trans &trans + >; + }; + layer_3 { + bindings = < + &kp G &kp H + &trans &trans + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; From 30ed2375335acf47da0216c6832ecfd30ea7097c Mon Sep 17 00:00:00 2001 From: Jonathan Rascher Date: Sat, 2 Oct 2021 01:15:21 -0400 Subject: [PATCH 0196/1130] test(conditional-layers): Add tests for edge cases --- .../chained-activation/events.patterns | 3 + .../keycode_events.snapshot | 10 +++ .../chained-activation/native_posix.keymap | 62 +++++++++++++++++++ .../mo-overlap/events.patterns | 3 + .../mo-overlap/keycode_events.snapshot | 17 +++++ .../mo-overlap/native_posix.keymap | 60 ++++++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 app/tests/conditional-layer/chained-activation/events.patterns create mode 100644 app/tests/conditional-layer/chained-activation/keycode_events.snapshot create mode 100644 app/tests/conditional-layer/chained-activation/native_posix.keymap create mode 100644 app/tests/conditional-layer/mo-overlap/events.patterns create mode 100644 app/tests/conditional-layer/mo-overlap/keycode_events.snapshot create mode 100644 app/tests/conditional-layer/mo-overlap/native_posix.keymap diff --git a/app/tests/conditional-layer/chained-activation/events.patterns b/app/tests/conditional-layer/chained-activation/events.patterns new file mode 100644 index 00000000000..14ded7959fd --- /dev/null +++ b/app/tests/conditional-layer/chained-activation/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*conditional_layer/cl/p diff --git a/app/tests/conditional-layer/chained-activation/keycode_events.snapshot b/app/tests/conditional-layer/chained-activation/keycode_events.snapshot new file mode 100644 index 00000000000..422b075c73f --- /dev/null +++ b/app/tests/conditional-layer/chained-activation/keycode_events.snapshot @@ -0,0 +1,10 @@ +mo_pressed: position 2 layer 1 +mo_pressed: position 3 layer 2 +cl_activate: layer 3 +cl_activate: layer 4 +kp_pressed: usage_page 0x07 keycode 0x0c implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0c implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 3 layer 2 +cl_deactivate: layer 3 +cl_deactivate: layer 4 +mo_released: position 2 layer 1 diff --git a/app/tests/conditional-layer/chained-activation/native_posix.keymap b/app/tests/conditional-layer/chained-activation/native_posix.keymap new file mode 100644 index 00000000000..d799cc5e5e6 --- /dev/null +++ b/app/tests/conditional-layer/chained-activation/native_posix.keymap @@ -0,0 +1,62 @@ +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + conditional_layer_1 { + if-layers = <1 2>; + then-layer = <3>; + }; + conditional_layer_2 { + if-layers = <1 3>; + then-layer = <4>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A &kp B + &mo 1 &mo 2 + >; + }; + layer_1 { + bindings = < + &kp C &kp D + &trans &trans + >; + }; + layer_2 { + bindings = < + &kp E &kp F + &trans &trans + >; + }; + layer_3 { + bindings = < + &kp G &kp H + &trans &trans + >; + }; + layer_4 { + bindings = < + &kp I &kp J + &trans &trans + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; diff --git a/app/tests/conditional-layer/mo-overlap/events.patterns b/app/tests/conditional-layer/mo-overlap/events.patterns new file mode 100644 index 00000000000..14ded7959fd --- /dev/null +++ b/app/tests/conditional-layer/mo-overlap/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*conditional_layer/cl/p diff --git a/app/tests/conditional-layer/mo-overlap/keycode_events.snapshot b/app/tests/conditional-layer/mo-overlap/keycode_events.snapshot new file mode 100644 index 00000000000..0200d8de968 --- /dev/null +++ b/app/tests/conditional-layer/mo-overlap/keycode_events.snapshot @@ -0,0 +1,17 @@ +mo_pressed: position 1 layer 3 +cl_deactivate: layer 3 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +mo_pressed: position 2 layer 1 +mo_pressed: position 3 layer 2 +cl_activate: layer 3 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 3 layer 2 +cl_deactivate: layer 3 +mo_released: position 2 layer 1 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +mo_released: position 1 layer 3 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/conditional-layer/mo-overlap/native_posix.keymap b/app/tests/conditional-layer/mo-overlap/native_posix.keymap new file mode 100644 index 00000000000..1518fc8a078 --- /dev/null +++ b/app/tests/conditional-layer/mo-overlap/native_posix.keymap @@ -0,0 +1,60 @@ +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A &mo 3 + &mo 1 &mo 2 + >; + }; + layer_1 { + bindings = < + &kp B &trans + &trans &trans + >; + }; + layer_2 { + bindings = < + &kp C &trans + &trans &trans + >; + }; + layer_3 { + bindings = < + &kp D &trans + &trans &trans + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; From 54dabffd0d371595a8142ee4da4f5d888a310cda Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 9 Jun 2021 06:10:20 +0000 Subject: [PATCH 0197/1130] feat(behaviors): Add caps word (`&caps_word`). * Add new `&caps_word` behavior that acts like caps lock, but releases automatically when any "break" keycode is pressed. --- app/CMakeLists.txt | 1 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/caps_word.dtsi | 19 ++ .../behaviors/zmk,behavior-caps-word.yaml | 15 ++ app/src/behaviors/behavior_caps_word.c | 186 ++++++++++++++++++ app/tests/caps-word/behavior_keymap.dtsi | 17 ++ .../events.patterns | 4 + .../keycode_events.snapshot | 17 ++ .../native_posix.keymap | 21 ++ .../events.patterns | 4 + .../keycode_events.snapshot | 14 ++ .../native_posix.keymap | 21 ++ .../events.patterns | 3 + .../keycode_events.snapshot | 13 ++ .../native_posix.keymap | 17 ++ .../events.patterns | 3 + .../keycode_events.snapshot | 9 + .../native_posix.keymap | 17 ++ docs/docs/behaviors/caps-word.md | 74 +++++++ docs/sidebars.js | 1 + 20 files changed, 457 insertions(+) create mode 100644 app/dts/behaviors/caps_word.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml create mode 100644 app/src/behaviors/behavior_caps_word.c create mode 100644 app/tests/caps-word/behavior_keymap.dtsi create mode 100644 app/tests/caps-word/continue-with-non-alpha-continue-list-item/events.patterns create mode 100644 app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot create mode 100644 app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix.keymap create mode 100644 app/tests/caps-word/continue-with-non-modified-numeric-usage-id/events.patterns create mode 100644 app/tests/caps-word/continue-with-non-modified-numeric-usage-id/keycode_events.snapshot create mode 100644 app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix.keymap create mode 100644 app/tests/caps-word/deactivate-by-non-alpha-non-continuation/events.patterns create mode 100644 app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot create mode 100644 app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix.keymap create mode 100644 app/tests/caps-word/deactivate-by-second-press/events.patterns create mode 100644 app/tests/caps-word/deactivate-by-second-press/keycode_events.snapshot create mode 100644 app/tests/caps-word/deactivate-by-second-press/native_posix.keymap create mode 100644 docs/docs/behaviors/caps-word.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 9c7befec775..970c6c204ae 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -47,6 +47,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) + target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) target_sources(app PRIVATE src/behaviors/behavior_outputs.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 4333ceeac61..5b5f72b4ee3 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -14,3 +14,4 @@ #include #include #include +#include diff --git a/app/dts/behaviors/caps_word.dtsi b/app/dts/behaviors/caps_word.dtsi new file mode 100644 index 00000000000..57d5cab7615 --- /dev/null +++ b/app/dts/behaviors/caps_word.dtsi @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + behaviors { + /omit-if-no-ref/ caps_word: behavior_caps_word { + compatible = "zmk,behavior-caps-word"; + label = "CAPS_WORD"; + #binding-cells = <0>; + continue-list = ; + }; + }; +}; + diff --git a/app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml b/app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml new file mode 100644 index 00000000000..cc1dda01370 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Caps word behavior + +compatible: "zmk,behavior-caps-word" + +include: zero_param.yaml + +properties: + continue-list: + type: array + required: true + mods: + type: int diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c new file mode 100644 index 00000000000..45e3d9d9a37 --- /dev/null +++ b/app/src/behaviors/behavior_caps_word.c @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_caps_word + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +struct caps_word_continue_item { + uint16_t page; + uint32_t id; + uint8_t implicit_modifiers; +}; + +struct behavior_caps_word_config { + zmk_mod_flags_t mods; + uint8_t index; + uint8_t continuations_count; + struct caps_word_continue_item continuations[]; +}; + +struct behavior_caps_word_data { + bool active; +}; + +static void activate_caps_word(const struct device *dev) { + struct behavior_caps_word_data *data = dev->data; + + data->active = true; +} + +static void deactivate_caps_word(const struct device *dev) { + struct behavior_caps_word_data *data = dev->data; + + data->active = false; +} + +static int on_caps_word_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + struct behavior_caps_word_data *data = dev->data; + + if (data->active) { + deactivate_caps_word(dev); + } else { + activate_caps_word(dev); + } + + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_caps_word_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_caps_word_driver_api = { + .binding_pressed = on_caps_word_binding_pressed, + .binding_released = on_caps_word_binding_released, +}; + +static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh); + +ZMK_LISTENER(behavior_caps_word, caps_word_keycode_state_changed_listener); +ZMK_SUBSCRIPTION(behavior_caps_word, zmk_keycode_state_changed); + +static const struct device *devs[DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT)]; + +static bool caps_word_is_caps_includelist(const struct behavior_caps_word_config *config, + uint16_t usage_page, uint8_t usage_id, + uint8_t implicit_modifiers) { + for (int i = 0; i < config->continuations_count; i++) { + const struct caps_word_continue_item *continuation = &config->continuations[i]; + LOG_DBG("Comparing with 0x%02X - 0x%02X (with implicit mods: 0x%02X)", continuation->page, + continuation->id, continuation->implicit_modifiers); + + if (continuation->page == usage_page && continuation->id == usage_id && + continuation->implicit_modifiers == implicit_modifiers) { + LOG_DBG("Continuing capsword, found included usage: 0x%02X - 0x%02X", usage_page, + usage_id); + return true; + } + } + + return false; +} + +static bool caps_word_is_alpha(uint8_t usage_id) { + return (usage_id >= HID_USAGE_KEY_KEYBOARD_A && usage_id <= HID_USAGE_KEY_KEYBOARD_Z); +} + +static bool caps_word_is_numeric(uint8_t usage_id) { + return (usage_id >= HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION && + usage_id <= HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS); +} + +static void caps_word_enhance_usage(const struct behavior_caps_word_config *config, + struct zmk_keycode_state_changed *ev) { + if (ev->usage_page != HID_USAGE_KEY || !caps_word_is_alpha(ev->keycode)) { + return; + } + + LOG_DBG("Enhancing usage 0x%02X with modifiers: 0x%02X", ev->keycode, config->mods); + ev->implicit_modifiers |= config->mods; +} + +static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh) { + struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); + if (ev == NULL || !ev->state) { + return ZMK_EV_EVENT_BUBBLE; + } + + for (int i = 0; i < DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT); i++) { + const struct device *dev = devs[i]; + if (dev == NULL) { + continue; + } + + struct behavior_caps_word_data *data = dev->data; + if (!data->active) { + continue; + } + + const struct behavior_caps_word_config *config = dev->config; + + caps_word_enhance_usage(config, ev); + + if (!caps_word_is_alpha(ev->keycode) && !caps_word_is_numeric(ev->keycode) && + !caps_word_is_caps_includelist(config, ev->usage_page, ev->keycode, + ev->implicit_modifiers)) { + LOG_DBG("Deactivating caps_word for 0x%02X - 0x%02X", ev->usage_page, ev->keycode); + deactivate_caps_word(dev); + } + } + + return ZMK_EV_EVENT_BUBBLE; +} + +static int behavior_caps_word_init(const struct device *dev) { + const struct behavior_caps_word_config *config = dev->config; + devs[config->index] = dev; + return 0; +} + +#define CAPS_WORD_LABEL(i, _n) DT_INST_LABEL(i) + +#define PARSE_BREAK(i) \ + {.page = (HID_USAGE_PAGE(i) & 0xFF), \ + .id = HID_USAGE_ID(i), \ + .implicit_modifiers = SELECT_MODS(i)}, + +#define BREAK_ITEM(i, n) PARSE_BREAK(DT_INST_PROP_BY_IDX(n, continue_list, i)) + +#define KP_INST(n) \ + static struct behavior_caps_word_data behavior_caps_word_data_##n = {.active = false}; \ + static struct behavior_caps_word_config behavior_caps_word_config_##n = { \ + .index = n, \ + .mods = DT_INST_PROP_OR(n, mods, MOD_LSFT), \ + .continuations = {UTIL_LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, n)}, \ + .continuations_count = DT_INST_PROP_LEN(n, continue_list), \ + }; \ + DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, device_pm_control_nop, \ + &behavior_caps_word_data_##n, &behavior_caps_word_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_caps_word_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KP_INST) + +#endif diff --git a/app/tests/caps-word/behavior_keymap.dtsi b/app/tests/caps-word/behavior_keymap.dtsi new file mode 100644 index 00000000000..04653bec127 --- /dev/null +++ b/app/tests/caps-word/behavior_keymap.dtsi @@ -0,0 +1,17 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &caps_word &kp A + &kp N6 &kp MINUS + >; + }; + }; +}; diff --git a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/events.patterns b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/events.patterns new file mode 100644 index 00000000000..dd4d3d3f700 --- /dev/null +++ b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p +s/.*caps_word_enhance_usage/enhance_usage/p +s/.*caps_word_is_caps_includelist/caps_includelist/p \ No newline at end of file diff --git a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot new file mode 100644 index 00000000000..fe705ba42cb --- /dev/null +++ b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot @@ -0,0 +1,17 @@ +enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 +press: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +caps_includelist: Comparing with 0x07 - 0x2d (with implicit mods: 0x02) +caps_includelist: Comparing with 0x07 - 0x2d (with implicit mods: 0x00) +caps_includelist: Continuing capsword, found included usage: 0x07 - 0x2d +pressed: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 +press: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix.keymap b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix.keymap new file mode 100644 index 00000000000..68c3249fa45 --- /dev/null +++ b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix.keymap @@ -0,0 +1,21 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&caps_word { + continue-list = ; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/events.patterns b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/events.patterns new file mode 100644 index 00000000000..dd4d3d3f700 --- /dev/null +++ b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p +s/.*caps_word_enhance_usage/enhance_usage/p +s/.*caps_word_is_caps_includelist/caps_includelist/p \ No newline at end of file diff --git a/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/keycode_events.snapshot b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/keycode_events.snapshot new file mode 100644 index 00000000000..23ddbe1b190 --- /dev/null +++ b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/keycode_events.snapshot @@ -0,0 +1,14 @@ +enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 +press: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x23 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x23 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 +press: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix.keymap b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix.keymap new file mode 100644 index 00000000000..40a4d4a9529 --- /dev/null +++ b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix.keymap @@ -0,0 +1,21 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&caps_word { + continue-list = ; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/events.patterns b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/events.patterns new file mode 100644 index 00000000000..fa75ab0c7df --- /dev/null +++ b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p +s/.*caps_word_enhance_usage/enhance_usage/p \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot new file mode 100644 index 00000000000..eb24c4bbc0b --- /dev/null +++ b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot @@ -0,0 +1,13 @@ +enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 +press: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix.keymap b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix.keymap new file mode 100644 index 00000000000..4219e3544ed --- /dev/null +++ b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-second-press/events.patterns b/app/tests/caps-word/deactivate-by-second-press/events.patterns new file mode 100644 index 00000000000..fa75ab0c7df --- /dev/null +++ b/app/tests/caps-word/deactivate-by-second-press/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p +s/.*caps_word_enhance_usage/enhance_usage/p \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-second-press/keycode_events.snapshot b/app/tests/caps-word/deactivate-by-second-press/keycode_events.snapshot new file mode 100644 index 00000000000..5181f75b1f8 --- /dev/null +++ b/app/tests/caps-word/deactivate-by-second-press/keycode_events.snapshot @@ -0,0 +1,9 @@ +enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 +press: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap b/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap new file mode 100644 index 00000000000..05f13fede3f --- /dev/null +++ b/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md new file mode 100644 index 00000000000..ee493741a44 --- /dev/null +++ b/docs/docs/behaviors/caps-word.md @@ -0,0 +1,74 @@ +--- +title: Caps Word Behavior +sidebar_label: Caps Word +--- + +## Summary + +The caps word behavior behaves similar to a caps lock, but will automatically deactivate when one of the configured "break keycodes" is pressed, or if the caps word key is pressed again. For smaller keyboards, using [mod-taps](/docs/behaviors/mod-tap), this can help avoid repeated alternating holds when typing words in all caps. + +The modifiers are applied only to to the alphabetic (`A` to `Z`) keycodes, to avoid automatically appliying them to numeric values, etc. + +### Behavior Binding + +- Reference: `&caps_word` + +Example: + +``` +&caps_word +``` + +### Configuration + +#### Continue List + +By default, the caps word will remain active when any alphanumeric character or the underscore (`UNDERSCORE`) characters are pressed. Any other keycode sent, +will turn off caps word. If you would like to override this, you can set a new array of keys in the `continue-list` property in your keymap: + +``` +&caps_word { + continue-list = ; +}; + +/ { + keymap { + ... + }; +}; +``` + +#### Applied Modifier(s) + +In addition, if you would like _multiple_ modifiers, instead of just `MOD_LSFT`, you can override the `mods` property: + +``` +&caps_word { + mods = ; +}; + +/ { + keymap { + ... + }; +}; +``` + +### Multiple Caps Breaks + +If you want to use multiple caps breaks with different codes to break the caps, you can add additional caps words instances to use in your keymap: + +``` +/ { + prog_caps: behavior_prog_caps_word { + compatible = "zmk,behavior-caps-word"; + label = "PROG_CAPS"; + #binding-cells = <0>; + continue-list = ; + }; + + keymap { + ... + }; +}; +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 04389695bf1..38256219183 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -27,6 +27,7 @@ module.exports = { "behaviors/mod-morph", "behaviors/sticky-key", "behaviors/sticky-layer", + "behaviors/caps-word", "behaviors/reset", "behaviors/bluetooth", "behaviors/outputs", From 0b4432161338368dc4ead0aae85332521c896c3e Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Sun, 28 Nov 2021 22:58:17 -0600 Subject: [PATCH 0198/1130] fix(shields): Fix typo on Quefrency .zmk.yml --- app/boards/shields/quefrency/quefrency.zmk.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/quefrency/quefrency.zmk.yml b/app/boards/shields/quefrency/quefrency.zmk.yml index f741a702c9f..e70ae68e68c 100644 --- a/app/boards/shields/quefrency/quefrency.zmk.yml +++ b/app/boards/shields/quefrency/quefrency.zmk.yml @@ -8,5 +8,5 @@ features: - keys - encoder siblings: - - quenfrency_left - - quenfrency_right + - quefrency_left + - quefrency_right From b9a35c6ae7e86de637a96bd9f76b362915f309a0 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 28 Nov 2021 21:49:59 -0800 Subject: [PATCH 0199/1130] fix(keymaps): Locate shared conf and overlay for split boards. --- app/cmake/zmk_config.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/cmake/zmk_config.cmake b/app/cmake/zmk_config.cmake index dec31104b73..c8aa1a00787 100644 --- a/app/cmake/zmk_config.cmake +++ b/app/cmake/zmk_config.cmake @@ -105,8 +105,10 @@ if (ZMK_CONFIG) endif() # TODO: Board revisions? + list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.overlay") list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD}.overlay") list(APPEND overlay_candidates "${ZMK_CONFIG}/default.overlay") + list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.conf") list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD}.conf") list(APPEND config_candidates "${ZMK_CONFIG}/default.conf") From 66f90dae3a46095330ef057c413baffbb56ce2fa Mon Sep 17 00:00:00 2001 From: Josh Johnson Date: Tue, 30 Nov 2021 04:39:46 +1100 Subject: [PATCH 0200/1130] feat(shield) Add Chalice support (#1022) * add chalice * add split bs transform * Update app/boards/shields/chalice/chalice.zmk.yml Co-authored-by: Nick Winans Co-authored-by: Nick Winans --- app/boards/shields/chalice/Kconfig.defconfig | 9 +++ app/boards/shields/chalice/Kconfig.shield | 5 ++ .../shields/chalice/boards/nice_nano.overlay | 28 +++++++ .../chalice/boards/nice_nano_v2.overlay | 28 +++++++ app/boards/shields/chalice/chalice.conf | 3 + app/boards/shields/chalice/chalice.keymap | 39 ++++++++++ app/boards/shields/chalice/chalice.overlay | 73 +++++++++++++++++++ app/boards/shields/chalice/chalice.zmk.yml | 9 +++ 8 files changed, 194 insertions(+) create mode 100644 app/boards/shields/chalice/Kconfig.defconfig create mode 100644 app/boards/shields/chalice/Kconfig.shield create mode 100644 app/boards/shields/chalice/boards/nice_nano.overlay create mode 100644 app/boards/shields/chalice/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/chalice/chalice.conf create mode 100644 app/boards/shields/chalice/chalice.keymap create mode 100644 app/boards/shields/chalice/chalice.overlay create mode 100644 app/boards/shields/chalice/chalice.zmk.yml diff --git a/app/boards/shields/chalice/Kconfig.defconfig b/app/boards/shields/chalice/Kconfig.defconfig new file mode 100644 index 00000000000..9987a79a21b --- /dev/null +++ b/app/boards/shields/chalice/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_CHALICE + +config ZMK_KEYBOARD_NAME + default "Chalice" + +endif diff --git a/app/boards/shields/chalice/Kconfig.shield b/app/boards/shields/chalice/Kconfig.shield new file mode 100644 index 00000000000..bd03bf7609b --- /dev/null +++ b/app/boards/shields/chalice/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_CHALICE + def_bool $(shields_list_contains,chalice) diff --git a/app/boards/shields/chalice/boards/nice_nano.overlay b/app/boards/shields/chalice/boards/nice_nano.overlay new file mode 100644 index 00000000000..21e28515d8b --- /dev/null +++ b/app/boards/shields/chalice/boards/nice_nano.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <14>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/chalice/boards/nice_nano_v2.overlay b/app/boards/shields/chalice/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..21e28515d8b --- /dev/null +++ b/app/boards/shields/chalice/boards/nice_nano_v2.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <14>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/chalice/chalice.conf b/app/boards/shields/chalice/chalice.conf new file mode 100644 index 00000000000..da642256827 --- /dev/null +++ b/app/boards/shields/chalice/chalice.conf @@ -0,0 +1,3 @@ +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y \ No newline at end of file diff --git a/app/boards/shields/chalice/chalice.keymap b/app/boards/shields/chalice/chalice.keymap new file mode 100644 index 00000000000..cba93d035e9 --- /dev/null +++ b/app/boards/shields/chalice/chalice.keymap @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + + bindings = < + &kp ESC &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp INSERT &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp DELETE &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp ENTER + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT &kp UP + &kp LCTRL &kp LALT &kp SPACE &mo 1 &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + }; + + function_layer { + + bindings = < + &bootloader &out OUT_TOG &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans + &trans &bt BT_CLR &rgb_ug RGB_TOG &rgb_ug RGB_HUD &rgb_ug RGB_HUI &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &bt BT_SEL 0 &rgb_ug RGB_EFF &rgb_ug RGB_SAD &rgb_ug RGB_SAI &trans &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_SEL 1 &rgb_ug RGB_EFR &rgb_ug RGB_BRD &rgb_ug RGB_BRI &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp PG_UP + &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_DN &kp END + >; + }; + }; +}; diff --git a/app/boards/shields/chalice/chalice.overlay b/app/boards/shields/chalice/chalice.overlay new file mode 100644 index 00000000000..34cbd34ea3d --- /dev/null +++ b/app/boards/shields/chalice/chalice.overlay @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <10>; + + map = < + RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) RC(0,5) RC(1,5) RC(0,6) RC(1,6) RC(4,6) + RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) RC(2,5) RC(3,5) RC(2,6) RC(3,6) RC(5,6) + RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6) + RC(6,0) RC(7,0) RC(6,1) RC(7,1) RC(6,2) RC(7,2) RC(6,3) RC(7,3) RC(6,4) RC(7,4) RC(6,5) RC(7,5) RC(8,6) RC(9,6) + RC(8,0) RC(9,1) RC(8,2) RC(9,2) RC(8,3) RC(9,3) RC(8,4) RC(9,4) RC(8,5) RC(9,5) + >; + }; + + splitbs_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <10>; + + map = < + RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) RC(0,5) RC(1,5) RC(0,6) RC(1,6) RC(4,6) RC(8,1) + RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) RC(2,5) RC(3,5) RC(2,6) RC(3,6) RC(5,6) + RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6) + RC(6,0) RC(7,0) RC(6,1) RC(7,1) RC(6,2) RC(7,2) RC(6,3) RC(7,3) RC(6,4) RC(7,4) RC(6,5) RC(7,5) RC(8,6) RC(9,6) + RC(8,0) RC(9,1) RC(8,2) RC(9,2) RC(8,3) RC(9,3) RC(8,4) RC(9,4) RC(8,5) RC(9,5) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/app/boards/shields/chalice/chalice.zmk.yml b/app/boards/shields/chalice/chalice.zmk.yml new file mode 100644 index 00000000000..a284dbe5785 --- /dev/null +++ b/app/boards/shields/chalice/chalice.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: chalice +name: Chalice +type: shield +url: https://customkbd.com/products/chalice-pre-order +requires: [pro_micro] +features: + - keys + - underglow From 99c5a8ee6fbda71686130a207e9a7719146be013 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Tue, 23 Nov 2021 14:23:40 +0000 Subject: [PATCH 0201/1130] feat(boards): Add BT60 Boards --- app/boards/arm/bt60/CMakeLists.txt | 8 + app/boards/arm/bt60/Kconfig | 7 + app/boards/arm/bt60/Kconfig.board | 12 ++ app/boards/arm/bt60/Kconfig.defconfig | 34 +++++ app/boards/arm/bt60/board.cmake | 5 + app/boards/arm/bt60/bt60.dtsi | 128 ++++++++++++++++ app/boards/arm/bt60/bt60_v1.dts | 113 ++++++++++++++ app/boards/arm/bt60/bt60_v1.keymap | 180 +++++++++++++++++++++++ app/boards/arm/bt60/bt60_v1.yaml | 15 ++ app/boards/arm/bt60/bt60_v1.zmk.yml | 12 ++ app/boards/arm/bt60/bt60_v1_defconfig | 24 +++ app/boards/arm/bt60/bt60_v1_hs.dts | 61 ++++++++ app/boards/arm/bt60/bt60_v1_hs.keymap | 37 +++++ app/boards/arm/bt60/bt60_v1_hs.yaml | 15 ++ app/boards/arm/bt60/bt60_v1_hs.zmk.yml | 12 ++ app/boards/arm/bt60/bt60_v1_hs_defconfig | 24 +++ 16 files changed, 687 insertions(+) create mode 100644 app/boards/arm/bt60/CMakeLists.txt create mode 100644 app/boards/arm/bt60/Kconfig create mode 100644 app/boards/arm/bt60/Kconfig.board create mode 100644 app/boards/arm/bt60/Kconfig.defconfig create mode 100644 app/boards/arm/bt60/board.cmake create mode 100644 app/boards/arm/bt60/bt60.dtsi create mode 100644 app/boards/arm/bt60/bt60_v1.dts create mode 100644 app/boards/arm/bt60/bt60_v1.keymap create mode 100644 app/boards/arm/bt60/bt60_v1.yaml create mode 100644 app/boards/arm/bt60/bt60_v1.zmk.yml create mode 100644 app/boards/arm/bt60/bt60_v1_defconfig create mode 100644 app/boards/arm/bt60/bt60_v1_hs.dts create mode 100644 app/boards/arm/bt60/bt60_v1_hs.keymap create mode 100644 app/boards/arm/bt60/bt60_v1_hs.yaml create mode 100644 app/boards/arm/bt60/bt60_v1_hs.zmk.yml create mode 100644 app/boards/arm/bt60/bt60_v1_hs_defconfig diff --git a/app/boards/arm/bt60/CMakeLists.txt b/app/boards/arm/bt60/CMakeLists.txt new file mode 100644 index 00000000000..00952c30987 --- /dev/null +++ b/app/boards/arm/bt60/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/app/boards/arm/bt60/Kconfig b/app/boards/arm/bt60/Kconfig new file mode 100644 index 00000000000..359e237dda5 --- /dev/null +++ b/app/boards/arm/bt60/Kconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_BT60_V1_HS || BOARD_BT60_V1) diff --git a/app/boards/arm/bt60/Kconfig.board b/app/boards/arm/bt60/Kconfig.board new file mode 100644 index 00000000000..0f0a9c6e341 --- /dev/null +++ b/app/boards/arm/bt60/Kconfig.board @@ -0,0 +1,12 @@ +# BT60 board configuration + +# Copyright (c) 2021 Polarity Works +# SPDX-License-Identifier: MIT + +config BOARD_BT60_V1 + bool "bt60" + depends on SOC_NRF52840_QIAA + +config BOARD_BT60_V1_HS + bool "bt60 hotswap" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/bt60/Kconfig.defconfig b/app/boards/arm/bt60/Kconfig.defconfig new file mode 100644 index 00000000000..7e7ab124f8d --- /dev/null +++ b/app/boards/arm/bt60/Kconfig.defconfig @@ -0,0 +1,34 @@ +# Copyright (c) 2021 Polarity Works +# SPDX-License-Identifier: MIT + +if BOARD_BT60_V1_HS || BOARD_BT60_V1 + +config BOARD + default "bt60" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +config ZMK_KEYBOARD_NAME + default "BT60" + +endif # BOARD_BT60 diff --git a/app/boards/arm/bt60/board.cmake b/app/boards/arm/bt60/board.cmake new file mode 100644 index 00000000000..fa847d50595 --- /dev/null +++ b/app/boards/arm/bt60/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi new file mode 100644 index 00000000000..48e4128b481 --- /dev/null +++ b/app/boards/arm/bt60/bt60.dtsi @@ -0,0 +1,128 @@ +/* +* Copyright (c) 2021 Polarity Works +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include +#include + +/ { + model = "BT60"; + compatible = "bt60"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; + + + +left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <17>; + scl-pin = <20>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + tx-pin = <6>; + rx-pin = <8>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/bt60/bt60_v1.dts b/app/boards/arm/bt60/bt60_v1.dts new file mode 100644 index 00000000000..83da2c07a5b --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1.dts @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2021 Polarity Works +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include "bt60.dtsi" + + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &ansi_transform; + }; + + ansi_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) + >; + }; + + hhkb_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + iso_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + all_1u_transform: keymap_transform_3 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,14) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) + >; + }; + + split_transform: keymap_transform_4 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&gpio1 13 GPIO_ACTIVE_HIGH> + , <&gpio1 10 GPIO_ACTIVE_HIGH> + , <&gpio1 11 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/app/boards/arm/bt60/bt60_v1.keymap b/app/boards/arm/bt60/bt60_v1.keymap new file mode 100644 index 00000000000..0985a605542 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1.keymap @@ -0,0 +1,180 @@ +#include +#include +#include + +#define ANSI true +//#define HHKB true +//#define ISO true +//#define ALL_1U true +//#define SPLIT_BKSP_RSHFT true + + + +/ { + chosen { + #ifdef ANSI + zmk,matrix_transform = &ansi_transform; + #elif defined(HHKB) + zmk,matrix_transform = &hhkb_transform; + #elif defined(ISO) + zmk,matrix_transform = &iso_transform; + #elif defined(ALL_1U) + zmk,matrix_transform = &all_1u_transform; + #else + zmk,matrix_transform = &split_transform; + #endif + }; + + + keymap { + compatible = "zmk,keymap"; + #ifdef ANSI + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // ------------------------------------------------------------------------------------------ + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | + // | TAB | Q | UP | E | R | T | Y | U | INS | O |PSCRN|SLCK |PSEBRK| RESET | + // | CAPS |LEFT |DOWN |RIGHT| F | G | H | J | K | L |HOME |PGUP | BOOTLOADER | + // | PREV |VOLUP |VOLDN|MUTE | V | B | N | M | , | END | PGDN | NEXT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | BT_CLR | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(HHKB) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | BSPC | + // | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 | + // | CAPS | ALT | WIN | SPACE | WIN | ALT | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSLH &kp GRAVE + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSPC + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &mo 1 + &kp LCTRL &kp LALT &kp LGUI &kp SPACE &kp RGUI &kp RALT &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp INS &kp DEL + &kp CLCK &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &kp UP &trans &reset + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp LEFT &kp RIGHT &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp DOWN &trans &trans + &trans &trans &trans &bootloader &trans &trans &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ISO) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | + // | SHIFT | | | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET + &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &reset &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &trans &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ALL_1U) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHFT | UP | 1 | + // | CTL | WIN | ALT | SPACE | ALT | CTRL | LEFT | DOWN | RIGHT | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &mo 1 + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp F1 + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #else + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP| DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 | + // | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &mo 1 + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &kp C_MENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &trans + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #endif + }; +}; diff --git a/app/boards/arm/bt60/bt60_v1.yaml b/app/boards/arm/bt60/bt60_v1.yaml new file mode 100644 index 00000000000..41fd7e40945 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1.yaml @@ -0,0 +1,15 @@ +identifier: bt60_v1 +name: BT60 V1 Soldered +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/bt60/bt60_v1.zmk.yml b/app/boards/arm/bt60/bt60_v1.zmk.yml new file mode 100644 index 00000000000..9909f191234 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: bt60_v1 +name: BT60 V1 Soldered +type: board +arch: arm +features: + - keys + - encoder +outputs: + - usb + - ble +url: https://polarityworks.com diff --git a/app/boards/arm/bt60/bt60_v1_defconfig b/app/boards/arm/bt60/bt60_v1_defconfig new file mode 100644 index 00000000000..0f13395b340 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1_defconfig @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BT60_V1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +# encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y diff --git a/app/boards/arm/bt60/bt60_v1_hs.dts b/app/boards/arm/bt60/bt60_v1_hs.dts new file mode 100644 index 00000000000..0e686fd9879 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1_hs.dts @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2021 Polarity Works +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include "bt60.dtsi" + + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(2,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,8) RC(4,9) RC(4,10) RC(4,11) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&gpio1 11 GPIO_ACTIVE_HIGH> + , <&gpio1 10 GPIO_ACTIVE_HIGH> + , <&gpio1 13 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 23 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/app/boards/arm/bt60/bt60_v1_hs.keymap b/app/boards/arm/bt60/bt60_v1_hs.keymap new file mode 100644 index 00000000000..6e62e1bbfe7 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1_hs.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &bt BT_CLR + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; +}; diff --git a/app/boards/arm/bt60/bt60_v1_hs.yaml b/app/boards/arm/bt60/bt60_v1_hs.yaml new file mode 100644 index 00000000000..5a73753b5e2 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1_hs.yaml @@ -0,0 +1,15 @@ +identifier: bt60_v1_hs +name: BT60 V1 Hotswap +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/bt60/bt60_v1_hs.zmk.yml b/app/boards/arm/bt60/bt60_v1_hs.zmk.yml new file mode 100644 index 00000000000..bc9acea46a7 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1_hs.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: bt60_v1_hs +name: BT60 V1 Hotswap +type: board +arch: arm +features: + - keys + - encoder +outputs: + - usb + - ble +url: https://polarityworks.com diff --git a/app/boards/arm/bt60/bt60_v1_hs_defconfig b/app/boards/arm/bt60/bt60_v1_hs_defconfig new file mode 100644 index 00000000000..27a224903c1 --- /dev/null +++ b/app/boards/arm/bt60/bt60_v1_hs_defconfig @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BT60_V1_HS=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +# encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y From b8774103798fb24b07b8987ccb89ef9b2cb892d4 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Sun, 28 Nov 2021 22:31:10 +0000 Subject: [PATCH 0202/1130] fix(boards): BT60 Formatting tweaks --- app/boards/arm/bt60/bt60.dtsi | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index 48e4128b481..d5109e76f62 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -10,7 +10,7 @@ / { model = "BT60"; - compatible = "bt60"; + compatible = "polarityworks,bt60"; chosen { zephyr,code-partition = &code_partition; @@ -21,20 +21,20 @@ }; sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder>; + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; }; -left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "okay"; - }; + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; leds { From c4ad3bc5dcfdf01f86b7538b42b7546487a694b0 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 1 Dec 2021 16:50:50 -0500 Subject: [PATCH 0203/1130] fix(docs): Make the modifier function examples clearer. * Ensure the list of available modifier functions is clearly shown as macros, not as basic defines. --- docs/docs/codes/modifiers.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/codes/modifiers.mdx b/docs/docs/codes/modifiers.mdx index c573a6702ae..483e34af026 100644 --- a/docs/docs/codes/modifiers.mdx +++ b/docs/docs/codes/modifiers.mdx @@ -41,6 +41,6 @@ These functions take the form: `XX(code)` - Some basic codes already include a modifier function in their definition: - `DOLLAR` = `LS(NUMBER_4)` - There are left- and right-handed versions of each modifier (also see table above): - - `LS`, `LC`, `LA`, `LG`, `RS`, `RC`, `RA`, `RG` + - `LS(x)`, `LC(x)`, `LA(x)`, `LG(x)`, `RS(x)`, `RC(x)`, `RA(x)`, `RG(x)` - Modified keys can safely be rolled-over. Modifier functions are released when another key is pressed. - Press `&kp LS(A)`, then press `&kp B`, release `&kp LS(A)` and release `&kp B` results in **Ab**. Only the A is capitalized. From 6ef1e7034ffaed14378e6194152269ed9ed5bdd1 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Nov 2021 19:34:40 +0000 Subject: [PATCH 0204/1130] fix(hid): Implicit mods on non-key page events * Properly send the KEY usage page report for modifier changes when there are state changes to other usages pages that include implicit modifiers. --- app/src/hid.c | 25 +++++++++++++++++-------- app/src/hid_listener.c | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 18 deletions(-) diff --git a/app/src/hid.c b/app/src/hid.c index b524b09f729..d6c63e1dd08 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -26,14 +26,17 @@ static zmk_mod_flags_t explicit_modifiers = 0; LOG_DBG("Modifiers set to 0x%02X", keyboard_report.body.modifiers); \ } +#define GET_MODIFIERS (keyboard_report.body.modifiers) + zmk_mod_flags_t zmk_hid_get_explicit_mods() { return explicit_modifiers; } int zmk_hid_register_mod(zmk_mod_t modifier) { explicit_modifier_counts[modifier]++; LOG_DBG("Modifier %d count %d", modifier, explicit_modifier_counts[modifier]); WRITE_BIT(explicit_modifiers, modifier, true); + zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers); - return 0; + return current == GET_MODIFIERS ? 0 : 1; } int zmk_hid_unregister_mod(zmk_mod_t modifier) { @@ -47,26 +50,30 @@ int zmk_hid_unregister_mod(zmk_mod_t modifier) { LOG_DBG("Modifier %d released", modifier); WRITE_BIT(explicit_modifiers, modifier, false); } + zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers); - return 0; + return current == GET_MODIFIERS ? 0 : 1; } int zmk_hid_register_mods(zmk_mod_flags_t modifiers) { + int ret = 0; for (zmk_mod_t i = 0; i < 8; i++) { if (modifiers & (1 << i)) { - zmk_hid_register_mod(i); + ret += zmk_hid_register_mod(i); } } - return 0; + return ret; } int zmk_hid_unregister_mods(zmk_mod_flags_t modifiers) { + int ret = 0; for (zmk_mod_t i = 0; i < 8; i++) { if (modifiers & (1 << i)) { - zmk_hid_unregister_mod(i); + ret += zmk_hid_unregister_mod(i); } } - return 0; + + return ret; } #if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) @@ -130,13 +137,15 @@ static inline int deselect_keyboard_usage(zmk_key_t usage) { } int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers) { + zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers | implicit_modifiers); - return 0; + return current == GET_MODIFIERS ? 0 : 1; } int zmk_hid_implicit_modifiers_release() { + zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers); - return 0; + return current == GET_MODIFIERS ? 0 : 1; } int zmk_hid_keyboard_press(zmk_key_t code) { diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c index d582c169e6a..c0a82c34271 100644 --- a/app/src/hid_listener.c +++ b/app/src/hid_listener.c @@ -17,56 +17,77 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *ev) { - int err; + int err, explicit_mods_changed, implicit_mods_changed; + LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X", ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers); switch (ev->usage_page) { case HID_USAGE_KEY: err = zmk_hid_keyboard_press(ev->keycode); - if (err) { + if (err < 0) { LOG_ERR("Unable to press keycode"); return err; } break; case HID_USAGE_CONSUMER: err = zmk_hid_consumer_press(ev->keycode); - if (err) { + if (err < 0) { LOG_ERR("Unable to press keycode"); return err; } break; } - zmk_hid_register_mods(ev->explicit_modifiers); - zmk_hid_implicit_modifiers_press(ev->implicit_modifiers); + explicit_mods_changed = zmk_hid_register_mods(ev->explicit_modifiers); + implicit_mods_changed = zmk_hid_implicit_modifiers_press(ev->implicit_modifiers); + if (ev->usage_page != HID_USAGE_KEY && + (explicit_mods_changed > 0 || implicit_mods_changed > 0)) { + err = zmk_endpoints_send_report(HID_USAGE_KEY); + if (err < 0) { + LOG_ERR("Failed to send key report for changed mofifiers for consumer page event (%d)", + err); + } + } + return zmk_endpoints_send_report(ev->usage_page); } static int hid_listener_keycode_released(const struct zmk_keycode_state_changed *ev) { - int err; + int err, explicit_mods_changed, implicit_mods_changed; + LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X", ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers); switch (ev->usage_page) { case HID_USAGE_KEY: err = zmk_hid_keyboard_release(ev->keycode); - if (err) { + if (err < 0) { LOG_ERR("Unable to release keycode"); return err; } break; case HID_USAGE_CONSUMER: err = zmk_hid_consumer_release(ev->keycode); - if (err) { + if (err < 0) { LOG_ERR("Unable to release keycode"); return err; } } - zmk_hid_unregister_mods(ev->explicit_modifiers); + + explicit_mods_changed = zmk_hid_unregister_mods(ev->explicit_modifiers); // There is a minor issue with this code. // If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released // prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time. // Solving this would require keeping track of which key's implicit modifiers are currently // active and only releasing modifiers at that time. - zmk_hid_implicit_modifiers_release(); + implicit_mods_changed = zmk_hid_implicit_modifiers_release(); + ; + if (ev->usage_page != HID_USAGE_KEY && + (explicit_mods_changed > 0 || implicit_mods_changed > 0)) { + err = zmk_endpoints_send_report(HID_USAGE_KEY); + if (err < 0) { + LOG_ERR("Failed to send key report for changed mofifiers for consumer page event (%d)", + err); + } + } return zmk_endpoints_send_report(ev->usage_page); } From 9148ffd05d409639a7d4088bc78bc73008316a7f Mon Sep 17 00:00:00 2001 From: toddmok <91770979+toddmok@users.noreply.github.com> Date: Thu, 2 Dec 2021 12:51:27 -0600 Subject: [PATCH 0205/1130] feat(shields) Add Redox Shield Support (#1002) * Add redox shield support * typo * Pull request fixes * requested changes add underglow, add copyright, remove display * remove because of no display * comment fix * bt clear --- app/boards/shields/redox/Kconfig.defconfig | 18 ++++ app/boards/shields/redox/Kconfig.shield | 7 ++ .../shields/redox/boards/nice_nano.overlay | 34 ++++++++ app/boards/shields/redox/redox.conf | 3 + app/boards/shields/redox/redox.dtsi | 48 +++++++++++ app/boards/shields/redox/redox.keymap | 82 +++++++++++++++++++ app/boards/shields/redox/redox.zmk.yml | 12 +++ app/boards/shields/redox/redox_left.overlay | 19 +++++ app/boards/shields/redox/redox_right.overlay | 23 ++++++ 9 files changed, 246 insertions(+) create mode 100644 app/boards/shields/redox/Kconfig.defconfig create mode 100644 app/boards/shields/redox/Kconfig.shield create mode 100644 app/boards/shields/redox/boards/nice_nano.overlay create mode 100644 app/boards/shields/redox/redox.conf create mode 100644 app/boards/shields/redox/redox.dtsi create mode 100644 app/boards/shields/redox/redox.keymap create mode 100644 app/boards/shields/redox/redox.zmk.yml create mode 100644 app/boards/shields/redox/redox_left.overlay create mode 100644 app/boards/shields/redox/redox_right.overlay diff --git a/app/boards/shields/redox/Kconfig.defconfig b/app/boards/shields/redox/Kconfig.defconfig new file mode 100644 index 00000000000..06554def5af --- /dev/null +++ b/app/boards/shields/redox/Kconfig.defconfig @@ -0,0 +1,18 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT +if SHIELD_REDOX_LEFT + +config ZMK_KEYBOARD_NAME + default "Redox" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_REDOX_LEFT || SHIELD_REDOX_RIGHT + +config ZMK_SPLIT + default y + +endif \ No newline at end of file diff --git a/app/boards/shields/redox/Kconfig.shield b/app/boards/shields/redox/Kconfig.shield new file mode 100644 index 00000000000..2df91c1115a --- /dev/null +++ b/app/boards/shields/redox/Kconfig.shield @@ -0,0 +1,7 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT +config SHIELD_REDOX_LEFT + def_bool $(shields_list_contains,redox_left) + +config SHIELD_REDOX_RIGHT + def_bool $(shields_list_contains,redox_right) diff --git a/app/boards/shields/redox/boards/nice_nano.overlay b/app/boards/shields/redox/boards/nice_nano.overlay new file mode 100644 index 00000000000..b81ba195642 --- /dev/null +++ b/app/boards/shields/redox/boards/nice_nano.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/redox/redox.conf b/app/boards/shields/redox/redox.conf new file mode 100644 index 00000000000..a1837ef9fa3 --- /dev/null +++ b/app/boards/shields/redox/redox.conf @@ -0,0 +1,3 @@ +# Uncomment the following lines to enable the Redox RGB Underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y \ No newline at end of file diff --git a/app/boards/shields/redox/redox.dtsi b/app/boards/shields/redox/redox.dtsi new file mode 100644 index 00000000000..4825a39f785 --- /dev/null +++ b/app/boards/shields/redox/redox.dtsi @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | SW13 | | SW13 | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | SW19 | SW20 | | SW20 | SW19 | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW21 | SW22 | SW23 | SW24 | SW25 | SW26 | SW27 | SW28 | | SW28 | SW27 | SW26 | SW25 | SW24 | SW23 | SW22 | SW21 | +// | SW29 | SW30 | SW31 | SW32 | SW33 | SW34 | SW35 | | SW35 | SW34 | SW33 | SW32 | SW31 | SW30 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(0,6) RC(0,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(1,6) RC(1,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(2,6) RC(3,6) RC(3,7) RC(2,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + +}; diff --git a/app/boards/shields/redox/redox.keymap b/app/boards/shields/redox/redox.keymap new file mode 100644 index 00000000000..aed22c4276d --- /dev/null +++ b/app/boards/shields/redox/redox.keymap @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap" ; + + default_layer { +// -------------------------------------------------------------------------------------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | BKSP | +// | TAB | Q | W | E | R | T | ( | --- | ) | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | [ | --- | ] | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | PG_UP | PG_DOWN | --- | HOME | END | N | M | , | . | / | SHFT(RET) | +// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | SPACE | RAISE | LEFT | DOWN | UP | RIGHT | + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp LPAR &kp RPAR &kp Y &kp U &kp I &kp O &kp P &kp MINUS + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp LBKT &kp RBKT &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp PG_UP &kp PG_DN &kp HOME &kp END &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RSHFT RET + &kp LCTRL &kp LALT &kp LGUI &mo 3 &kp LGUI &mo 1 &kp SPACE &kp DEL &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + + }; + + lower_layer { +// -------------------------------------------------------------------------------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL | +// | ESC | 1 | 2 | 3 | 4 | 5 | ( | --- | ) | 6 | 7 | 8 | 9 | 0 | DEL | +// | CTRL | - | = | [ | ] | \ | [ | --- | ] | * | 4 | 5 | 6 | + | - | +// | SHIFT | ESC | GUI | COPY | PASTE | | PG_UP | PG_DOWN | --- | HOME | END | \ | 1 | 2 | 3 | RET | RET | +// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | 0 | RAISE | LEFT | DOWN | UP | RIGHT | + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &trans &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &trans &trans &kp KP_MULTIPLY &kp N4 &kp N5 &kp N6 &kp KP_PLUS &kp KP_MINUS + &trans &kp ESC &kp LGUI &kp LG(C) &kp LG(V) &kp GRAVE &trans &trans &trans &trans &kp KP_DIVIDE &kp N1 &kp N2 &kp N3 &kp RET &kp RET + &trans &trans &trans &trans &trans &trans &trans &trans &kp N0 &mo 3 &trans &trans &trans &trans + >; + }; + + raise_layer { +// ---------------------------------------------------------------------------------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL | +// | ESC | ! | @ | # | $ | % | ( | --- | ) | ^ | & | * | ( | ) | DEL | +// | CTRL | _ | + | { | } | "|" | [ | --- | ] | HOME | PGUP | PRSC | UP | ` | ~ | +// | SHIFT | ESC | GUI | ( | ) | | PG_UP | PG_DOWN | --- | HOME | END | END | PGDN | LEFT | DOWN | RIGHT | RET | +// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | SPACE | RAISE | LEFT | DOWN | UP | RIGHT | + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp ESC &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &trans &trans &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL + &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &trans &kp HOME &kp PG_UP &kp PSCRN &kp UP &kp GRAVE &kp TILDE + &trans &kp ESC &kp LGUI &kp LPAR &kp RPAR &kp TILDE &trans &trans &trans &trans &kp END &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp RET + &trans &trans &trans &mo 3 &trans &mo 3 &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + + adjust_layer { +// ----------------------------------------------------------------------------------------- +// | F1 | F2 | F3 | F4 | F5 | F6 | --- | F7 | F8 | F9 | F10 | F11 | F12 | +// | TAB | | | | | | BOOTL | --- | ) | BT1 | BT2 | BT3 | BT4 | BT5 | OUTPUT TGL | +// | CTRL | MUTE | Vol Dn | Vol Up | Play/Pause | | RESET | --- | ] | F1 | F2 | F3 | F4 | F5 | F6 | +// | SHIFT | PSCRN | PSCRN | CAPS | | | PG_UP | PG_DOWN | --- | HOME | END | F7 | F8 | F9 | F10 | F11 | F12 | +// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | SPACE | RAISE | LEFT | DOWN | UP | RIGHT | + bindings = < + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &none &none &none &none &none &bootloader &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG + &trans &kp K_MUTE &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE &none &reset &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 + &trans &kp PSCRN &kp PSCRN &kp CLCK &none &none &trans &trans &trans &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/redox/redox.zmk.yml b/app/boards/shields/redox/redox.zmk.yml new file mode 100644 index 00000000000..fd22971deef --- /dev/null +++ b/app/boards/shields/redox/redox.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: redox +name: Redox +type: shield +url: https://github.com/mattdibi/redox-keyboard +requires: [pro_micro] +features: + - keys + - underglow +siblings: + - redox_left + - redox_right diff --git a/app/boards/shields/redox/redox_left.overlay b/app/boards/shields/redox/redox_left.overlay new file mode 100644 index 00000000000..322dca7954b --- /dev/null +++ b/app/boards/shields/redox/redox_left.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "redox.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/app/boards/shields/redox/redox_right.overlay b/app/boards/shields/redox/redox_right.overlay new file mode 100644 index 00000000000..f2dcfed0c0f --- /dev/null +++ b/app/boards/shields/redox/redox_right.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "redox.dtsi" + +&default_transform { + col-offset = <7>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + ; +}; From a8c7cf4f19ad80eb8e6148f872d3a9584b25befc Mon Sep 17 00:00:00 2001 From: Kyle McCreery Date: Thu, 2 Dec 2021 18:21:35 -0500 Subject: [PATCH 0206/1130] feat(boards): Add S40NC board definition (#1021) * initial commit * initial commit * Encode, OLED, and RGB Nice Nano support added as well as refining default keymap. * tweaking keymap * Prepared murphpad for PR. Includes adding support for second encoder, OLED, and underglow RGB * Enabled OLED by default. * Initial commit with settings updated to match schematic. * Removing test directories. * removed naked60 config files * Fixed dogbone definitions to be full working for murphpad. * Preparing S40NC for PR * Removed the murphpad test files that were not supposed to be a part of this PR. * Changing licensing to be from The ZMK Contributors. * Changed the licensing in the keymap file to be from The ZMK Contributors * Update s40nc.keymap --- app/boards/arm/s40nc/CMakeLists.txt | 8 ++ app/boards/arm/s40nc/Kconfig.board | 6 ++ app/boards/arm/s40nc/Kconfig.defconfig | 31 ++++++ app/boards/arm/s40nc/README.md | 9 ++ app/boards/arm/s40nc/board.cmake | 7 ++ app/boards/arm/s40nc/s40nc.dts | 139 +++++++++++++++++++++++++ app/boards/arm/s40nc/s40nc.keymap | 58 +++++++++++ app/boards/arm/s40nc/s40nc.yaml | 14 +++ app/boards/arm/s40nc/s40nc.zmk.yml | 11 ++ app/boards/arm/s40nc/s40nc_defconfig | 21 ++++ 10 files changed, 304 insertions(+) create mode 100644 app/boards/arm/s40nc/CMakeLists.txt create mode 100644 app/boards/arm/s40nc/Kconfig.board create mode 100644 app/boards/arm/s40nc/Kconfig.defconfig create mode 100644 app/boards/arm/s40nc/README.md create mode 100644 app/boards/arm/s40nc/board.cmake create mode 100644 app/boards/arm/s40nc/s40nc.dts create mode 100644 app/boards/arm/s40nc/s40nc.keymap create mode 100644 app/boards/arm/s40nc/s40nc.yaml create mode 100644 app/boards/arm/s40nc/s40nc.zmk.yml create mode 100644 app/boards/arm/s40nc/s40nc_defconfig diff --git a/app/boards/arm/s40nc/CMakeLists.txt b/app/boards/arm/s40nc/CMakeLists.txt new file mode 100644 index 00000000000..f833ff2e975 --- /dev/null +++ b/app/boards/arm/s40nc/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x1000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/app/boards/arm/s40nc/Kconfig.board b/app/boards/arm/s40nc/Kconfig.board new file mode 100644 index 00000000000..673e3b24c6a --- /dev/null +++ b/app/boards/arm/s40nc/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_S40NC + bool "S40NC" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/s40nc/Kconfig.defconfig b/app/boards/arm/s40nc/Kconfig.defconfig new file mode 100644 index 00000000000..0f4071516a7 --- /dev/null +++ b/app/boards/arm/s40nc/Kconfig.defconfig @@ -0,0 +1,31 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_S40NC + +config ZMK_KEYBOARD_NAME + default "S40NC" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +endif # BOARD_S40NC diff --git a/app/boards/arm/s40nc/README.md b/app/boards/arm/s40nc/README.md new file mode 100644 index 00000000000..32db57e9919 --- /dev/null +++ b/app/boards/arm/s40nc/README.md @@ -0,0 +1,9 @@ +# S40NC +![S40NC](https://i.imgur.com/fk8587n.jpg) + +Shorty40NoCordy (S40NC) is a limited run 40% bluetooth keyboard originally made and sold by MechWild. + +## Building S40NC ZMK firmware +``` +west build -p -b s40nc +``` diff --git a/app/boards/arm/s40nc/board.cmake b/app/boards/arm/s40nc/board.cmake new file mode 100644 index 00000000000..c50b2d9d8ad --- /dev/null +++ b/app/boards/arm/s40nc/board.cmake @@ -0,0 +1,7 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +set(OPENOCD_NRF5_SUBFAMILY nrf52) +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts new file mode 100644 index 00000000000..58e0c2deccd --- /dev/null +++ b/app/boards/arm/s40nc/s40nc.dts @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include + +/ { + model = "S40NC"; + compatible = "s40nc"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,11) + RC(2,0) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,0) RC(3,1) RC(3,2) RC(3,4) RC(3,6) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + >; + }; + + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio1 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio1 2 GPIO_ACTIVE_HIGH> + , <&gpio1 1 GPIO_ACTIVE_HIGH> + , <&gpio1 3 GPIO_ACTIVE_HIGH> + , <&gpio1 0 GPIO_ACTIVE_HIGH> + , <&gpio0 22 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&usbd { + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "mbr"; + reg = <0x00000000 0x00001000>; + }; + + code_partition: partition@1000 { + label = "code_partition"; + reg = <0x00001000 0x000d3000>; + }; + + /* + * The flash starting at 0x000d4000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@d4000 { + label = "storage"; + reg = <0x000d4000 0x00020000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/s40nc/s40nc.keymap b/app/boards/arm/s40nc/s40nc.keymap new file mode 100644 index 00000000000..d7f349d97b5 --- /dev/null +++ b/app/boards/arm/s40nc/s40nc.keymap @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 +#define CONTROL 3 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &mo LOWER &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp ENTER + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp FSLH &kp UP &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT < LOWER SPACE < CONTROL SPACE < RAISE SPACE &kp LEFT &kp DOWN &kp RIGHT + >; + }; + + lower_layer { + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &kp PSCRN &kp MINUS &kp EQUAL &trans &trans &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp APOS + &trans &trans &trans &trans &trans &trans &trans &kp COMMA &kp DOT &kp PG_UP &kp BSLH + &trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END + >; + }; + + raise_layer { + bindings = < + &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &trans + &kp PSCRN &kp UNDER &kp PLUS &trans &trans &trans &trans &kp LBRC &kp RBRC &kp COLON &kp DQT + &trans &trans &trans &trans &trans &trans &trans &kp LT &kp GT &kp PG_UP &kp PIPE + &trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END + >; + }; + + control_layer { + bindings = < + &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp C_PP + &bt BT_SEL 0 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &kp K_LOCK + &bt BT_SEL 1 &out OUT_USB &kp CAPS &kp KP_NUM &kp SLCK &trans &trans &kp COMMA &kp DOT &kp K_VOL_UP &kp K_MUTE + &bt BT_SEL 2 &out OUT_BLE &kp PAUSE_BREAK &reset &trans &bootloader &kp C_BRI_DN &kp K_VOL_DN &kp C_BRI_UP + >; + }; + }; +}; + diff --git a/app/boards/arm/s40nc/s40nc.yaml b/app/boards/arm/s40nc/s40nc.yaml new file mode 100644 index 00000000000..1fb23ee33f7 --- /dev/null +++ b/app/boards/arm/s40nc/s40nc.yaml @@ -0,0 +1,14 @@ +identifier: s40nc +name: S40NC +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/s40nc/s40nc.zmk.yml b/app/boards/arm/s40nc/s40nc.zmk.yml new file mode 100644 index 00000000000..57b30ecae69 --- /dev/null +++ b/app/boards/arm/s40nc/s40nc.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: s40nc +name: S40NC +type: board +arch: arm +features: + - keys +outputs: + - usb + - ble +url: https://mechwild.com diff --git a/app/boards/arm/s40nc/s40nc_defconfig b/app/boards/arm/s40nc/s40nc_defconfig new file mode 100644 index 00000000000..e9bbfc17d70 --- /dev/null +++ b/app/boards/arm/s40nc/s40nc_defconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_S40NC=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y From b23934cf9406ce6b00463cf705b32de455d91983 Mon Sep 17 00:00:00 2001 From: Sam Mohr Date: Fri, 10 Dec 2021 13:20:52 -0500 Subject: [PATCH 0207/1130] feat(shields): Add Osprette --- app/boards/shields/osprette/Kconfig.defconfig | 9 ++ app/boards/shields/osprette/Kconfig.shield | 5 + app/boards/shields/osprette/osprette.conf | 0 app/boards/shields/osprette/osprette.keymap | 113 ++++++++++++++++++ app/boards/shields/osprette/osprette.overlay | 52 ++++++++ app/boards/shields/osprette/osprette.zmk.yml | 8 ++ 6 files changed, 187 insertions(+) create mode 100644 app/boards/shields/osprette/Kconfig.defconfig create mode 100644 app/boards/shields/osprette/Kconfig.shield create mode 100644 app/boards/shields/osprette/osprette.conf create mode 100644 app/boards/shields/osprette/osprette.keymap create mode 100644 app/boards/shields/osprette/osprette.overlay create mode 100644 app/boards/shields/osprette/osprette.zmk.yml diff --git a/app/boards/shields/osprette/Kconfig.defconfig b/app/boards/shields/osprette/Kconfig.defconfig new file mode 100644 index 00000000000..d765b76485b --- /dev/null +++ b/app/boards/shields/osprette/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_OSPRETTE + +config ZMK_KEYBOARD_NAME + default "Osprette" + +endif diff --git a/app/boards/shields/osprette/Kconfig.shield b/app/boards/shields/osprette/Kconfig.shield new file mode 100644 index 00000000000..1e9cc87b139 --- /dev/null +++ b/app/boards/shields/osprette/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_OSPRETTE + def_bool $(shields_list_contains,osprette) diff --git a/app/boards/shields/osprette/osprette.conf b/app/boards/shields/osprette/osprette.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/osprette/osprette.keymap b/app/boards/shields/osprette/osprette.keymap new file mode 100644 index 00000000000..9c9213b6ff2 --- /dev/null +++ b/app/boards/shields/osprette/osprette.keymap @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2021 The ZMK Contributors +* +* SPDX-License-Identifier: MIT +*/ + +#include +#include +#include + +#define MAIN 0 +#define SYM 1 +#define NAV 2 +#define BT 3 + +&mt { + flavor = "tap-preferred"; + tapping_term_ms = <140>; +}; + +/ { + combos { + compatible = "zmk,combos"; + + combo_esc { + timeout-ms = <100>; + key-positions = <21 22>; + bindings = <&kp ESC>; + }; + + combo_tab { + timeout-ms = <100>; + key-positions = <22 23>; + bindings = <&kp TAB>; + }; + + combo_minus { + timeout-ms = <100>; + key-positions = <26 27>; + bindings = <&kp MINUS>; + }; + + combo_underscore { + timeout-ms = <100>; + key-positions = <26 28>; + bindings = <&kp UNDERSCORE>; + }; + + combo_colon { + timeout-ms = <100>; + key-positions = <7 8>; + bindings = <&kp COLON>; + }; + + combo_semicolon { + timeout-ms = <100>; + key-positions = <6 8>; + bindings = <&kp SEMICOLON>; + }; + + combo_backslash { + timeout-ms = <100>; + key-positions = <27 28>; + bindings = <&kp BSLH>; + }; + + combo_grave { + timeout-ms = <100>; + key-positions = <8 9>; + bindings = <&kp GRAVE>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + MAIN_layer { + bindings = < + &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O + &kp Q &kp A &kp S &kp D < SYM F &kp G &kp H < SYM J &kp K &kp L &kp SQT &kp P + &mt LSHFT Z &mt LALT X &mt LCTRL C &mt LGUI V &kp B &kp N &mt RGUI M &mt RCTRL COMMA &mt RALT DOT &mt RSHFT FSLH + < BT ENTER < NAV SPACE &sk RSHFT &kp BSPC + >; + }; + + SYM_layer { + bindings = < + &kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH + &kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none + &kp CARET &kp N4 &kp N5 &kp N6 &kp PLUS &kp TILDE &kp LBKT &kp RBKT &kp AT &kp PRCNT + &kp DOT &kp N0 &trans &none + >; + }; + + NAV_layer { + bindings = < + &kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9 + &kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12 + &kp HOME &kp PG_DN &kp PG_UP &kp END &kp LS(LC(TAB)) &kp CAPS &kp F4 &kp F5 &kp F6 &kp F11 + &none &none &trans &kp DEL + >; + }; + + BT_layer { + bindings = < + &none &none &none &none &none &none &none &none + &none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none + &none &none &none &none &none &none &bt BT_CLR &none &none &none + &none &none &none &none + >; + }; + }; +}; diff --git a/app/boards/shields/osprette/osprette.overlay b/app/boards/shields/osprette/osprette.overlay new file mode 100644 index 00000000000..546df783760 --- /dev/null +++ b/app/boards/shields/osprette/osprette.overlay @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; + map = < + RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) +RC(0,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(0,9) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) + >; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "row2col"; + + col-gpios + = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + row-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + ; + }; +}; diff --git a/app/boards/shields/osprette/osprette.zmk.yml b/app/boards/shields/osprette/osprette.zmk.yml new file mode 100644 index 00000000000..a144c22f941 --- /dev/null +++ b/app/boards/shields/osprette/osprette.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: osprette +name: Osprette +type: shield +url: https://github.com/smores56/osprette/ +requires: [pro_micro] +features: + - keys From eca051efa03b1dd533a6086f32699e621d24d337 Mon Sep 17 00:00:00 2001 From: Ryan Butler Date: Mon, 13 Dec 2021 14:41:52 -0500 Subject: [PATCH 0208/1130] Add support for keeb.io fourier split keyboard (#1056) * Add support for keeb.io fourier * Update app/boards/shields/fourier/fourier_right.overlay Co-authored-by: Nick Winans * Update app/boards/shields/fourier/fourier_left.overlay Co-authored-by: Nick Winans * Convert spaces to tabs in .dtsi Co-authored-by: Nick Winans --- app/boards/shields/fourier/Kconfig.defconfig | 20 ++++++ app/boards/shields/fourier/Kconfig.shield | 9 +++ app/boards/shields/fourier/fourier.dtsi | 43 +++++++++++++ app/boards/shields/fourier/fourier.keymap | 64 +++++++++++++++++++ app/boards/shields/fourier/fourier.zmk.yml | 12 ++++ .../shields/fourier/fourier_left.overlay | 18 ++++++ .../shields/fourier/fourier_right.overlay | 23 +++++++ 7 files changed, 189 insertions(+) create mode 100644 app/boards/shields/fourier/Kconfig.defconfig create mode 100644 app/boards/shields/fourier/Kconfig.shield create mode 100644 app/boards/shields/fourier/fourier.dtsi create mode 100644 app/boards/shields/fourier/fourier.keymap create mode 100644 app/boards/shields/fourier/fourier.zmk.yml create mode 100644 app/boards/shields/fourier/fourier_left.overlay create mode 100644 app/boards/shields/fourier/fourier_right.overlay diff --git a/app/boards/shields/fourier/Kconfig.defconfig b/app/boards/shields/fourier/Kconfig.defconfig new file mode 100644 index 00000000000..74a186e1436 --- /dev/null +++ b/app/boards/shields/fourier/Kconfig.defconfig @@ -0,0 +1,20 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + + +if SHIELD_FOURIER_LEFT + +config ZMK_KEYBOARD_NAME + default "Fourier" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_FOURIER_LEFT || SHIELD_FOURIER_RIGHT + +config ZMK_SPLIT + default y + +endif diff --git a/app/boards/shields/fourier/Kconfig.shield b/app/boards/shields/fourier/Kconfig.shield new file mode 100644 index 00000000000..2e337410756 --- /dev/null +++ b/app/boards/shields/fourier/Kconfig.shield @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + + +config SHIELD_FOURIER_LEFT + def_bool $(shields_list_contains,fourier_left) + +config SHIELD_FOURIER_RIGHT + def_bool $(shields_list_contains,fourier_right) diff --git a/app/boards/shields/fourier/fourier.dtsi b/app/boards/shields/fourier/fourier.dtsi new file mode 100644 index 00000000000..99027ea9510 --- /dev/null +++ b/app/boards/shields/fourier/fourier.dtsi @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + /* + * This transform correspondsto the 60% left without macro keypad and 65% right, even this + * combination of PCBs can have keys in different locations based on configuration. + */ + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <13>; + rows = <4>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) /**/ RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0, 11) RC(0,12) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) /**/ RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,12) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,6) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) /**/ RC(3,6) RC(3,9) RC(3,10) RC(3,11) RC(3,12) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D + ; + }; +}; diff --git a/app/boards/shields/fourier/fourier.keymap b/app/boards/shields/fourier/fourier.keymap new file mode 100644 index 00000000000..f0912bf1f73 --- /dev/null +++ b/app/boards/shields/fourier/fourier.keymap @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + +// ---------------------------------------------- ---------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | | BKSP | +// | TAB | A | S | D | F | G | | H | J | K | L | ' | ENTER | +// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | RSHFT | +// | LCTRL | LALT| LGUI | SPACE | | SPACE/L1 | L2 | RGUI | RALT |RCTRL| +// ------------------------------------------- ----------------------------------------------- + + default_layer { + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &none &kp BACKSPACE + &kp TAB &kp A &kp S &kp D &kp F &kp G /**/ &kp H &kp J &kp K &kp L &kp SQT &kp ENTER + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B /**/ &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LALT &kp LGUI &none &kp SPACE /**/ < 1 SPACE &mo 2 &kp RGUI &kp RALT &kp RCTRL + >; + }; + +// ---------------------------------------------- ---------------------------------------------- +// | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | O | PSCR | | DEL | +// | ` | | <- | ^ | -> | Vo+ | | [ | ] | - | = | ; | \ | +// | trans | | | | V | Vo- | | | | | | | trans | +// | trans | trans| trans | trans | | trans | trans | trans | trans|trans| +// ------------------------------------------- ----------------------------------------------- + + symbols_layer { + bindings = < + &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 /**/ &kp N7 &kp N8 &kp N9 &kp N0 &kp PSCRN &none &kp DEL + &kp GRAVE &none &kp LEFT &kp UP &kp RIGHT &kp C_VOL_UP /**/ &kp LBKT &kp RBKT &kp MINUS &kp EQUAL &kp SEMI &kp BACKSLASH + &trans &none &none &none &kp DOWN &kp C_VOL_DN /**/ &none &none &none &none &none &trans + &trans &trans &trans &none &trans /**/ &trans &trans &trans &trans &trans + >; + }; + +// ---------------------------------------------- ---------------------------------------------- +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F1O | F11 | | F12 | +// | CAP | | home| PgUp | End | | | | | | | | | +// | trans | RGB T | RGB M | PgDn | | | BT_NXT | BT_CLR | | | | |trans| +// | trans | trans| trans | trans | | trans | trans | trans | trans | trans | +// ------------------------------------------- ----------------------------------------------- + + fn_layer { + bindings = < + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &none &kp F12 + &kp CAPS &none &kp HOME &kp PG_UP &kp END &none /**/ &none &none &none &none &none &none + &trans &rgb_ug RGB_TOG &rgb_ug RGB_EFF &none &kp PG_DN &none /**/ &bt BT_NXT &bt BT_CLR &none &none &none &trans + &trans &trans &trans &none &trans /**/ &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/fourier/fourier.zmk.yml b/app/boards/shields/fourier/fourier.zmk.yml new file mode 100644 index 00000000000..d4e3b3ca958 --- /dev/null +++ b/app/boards/shields/fourier/fourier.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: fourier +name: Fourier Rev. 1 +type: shield +url: https://github.com/keebio/fourier +requires: + - pro_micro +features: + - keys +siblings: + - fourier_left + - fourier_right diff --git a/app/boards/shields/fourier/fourier_left.overlay b/app/boards/shields/fourier/fourier_left.overlay new file mode 100644 index 00000000000..1d0f2c81627 --- /dev/null +++ b/app/boards/shields/fourier/fourier_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "fourier.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 20 GPIO_ACTIVE_HIGH> // Col1 + , <&pro_micro 19 GPIO_ACTIVE_HIGH> // Col2 + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // Col3 + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // Col4 + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // Col5 + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // Col6 + ; +}; diff --git a/app/boards/shields/fourier/fourier_right.overlay b/app/boards/shields/fourier/fourier_right.overlay new file mode 100644 index 00000000000..77c00d60ac0 --- /dev/null +++ b/app/boards/shields/fourier/fourier_right.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "fourier.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 20 GPIO_ACTIVE_HIGH> // Col1 + , <&pro_micro 19 GPIO_ACTIVE_HIGH> // Col2 + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // Col3 + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // Col4 + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // Col5 + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // Col6 + , <&pro_micro 10 GPIO_ACTIVE_HIGH> // Col7 + ; +}; From df1ae494c7f01587dc56f856fd238a7748477d75 Mon Sep 17 00:00:00 2001 From: Felix Sargent Date: Mon, 13 Dec 2021 12:24:21 -0800 Subject: [PATCH 0209/1130] Add boardsource5x12 (#1027) * Initial commit of boardsource5x12 * Added copyright/license header * Update app/boards/shields/boardsource5x12/Kconfig.defconfig Co-authored-by: Pete Johanson * Update app/boards/shields/boardsource5x12/boardsource5x12.overlay Co-authored-by: Pete Johanson * Update app/boards/shields/boardsource5x12/Kconfig.shield Co-authored-by: Pete Johanson * Update app/boards/shields/boardsource5x12/boardsource5x12.keymap Co-authored-by: Pete Johanson * Swapping keymap for what used in Naked60 as it's another 60 key board, so it keeps it consistent. * Update app/boards/shields/boardsource5x12/boardsource5x12.keymap Co-authored-by: Nick Winans * renamed layers in boardsource5-12 Co-authored-by: Pete Johanson Co-authored-by: Nick Winans --- .../shields/boardsource5x12/Kconfig.defconfig | 9 ++ .../shields/boardsource5x12/Kconfig.shield | 5 + .../boardsource5x12/boardsource5x12.conf | 0 .../boardsource5x12/boardsource5x12.keymap | 99 +++++++++++++++++++ .../boardsource5x12/boardsource5x12.overlay | 42 ++++++++ .../boardsource5x12/boardsource5x12.zmk.yml | 8 ++ 6 files changed, 163 insertions(+) create mode 100644 app/boards/shields/boardsource5x12/Kconfig.defconfig create mode 100644 app/boards/shields/boardsource5x12/Kconfig.shield create mode 100644 app/boards/shields/boardsource5x12/boardsource5x12.conf create mode 100644 app/boards/shields/boardsource5x12/boardsource5x12.keymap create mode 100644 app/boards/shields/boardsource5x12/boardsource5x12.overlay create mode 100644 app/boards/shields/boardsource5x12/boardsource5x12.zmk.yml diff --git a/app/boards/shields/boardsource5x12/Kconfig.defconfig b/app/boards/shields/boardsource5x12/Kconfig.defconfig new file mode 100644 index 00000000000..ca7979d4981 --- /dev/null +++ b/app/boards/shields/boardsource5x12/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_BOARDSOURCE5X12 + +config ZMK_KEYBOARD_NAME + default "boardsource5x12" + +endif \ No newline at end of file diff --git a/app/boards/shields/boardsource5x12/Kconfig.shield b/app/boards/shields/boardsource5x12/Kconfig.shield new file mode 100644 index 00000000000..b2d7b63fba9 --- /dev/null +++ b/app/boards/shields/boardsource5x12/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_BOARDSOURCE5X12 + def_bool $(shields_list_contains,boardsource5x12) \ No newline at end of file diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.conf b/app/boards/shields/boardsource5x12/boardsource5x12.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.keymap b/app/boards/shields/boardsource5x12/boardsource5x12.keymap new file mode 100644 index 00000000000..8956ca9831b --- /dev/null +++ b/app/boards/shields/boardsource5x12/boardsource5x12.keymap @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | \ | + // | SHIFT | A | S | D | F | G | H | J | K | L | ; | ' | + // | CTRL | Z | X | C | V | B | N | M | , | . | / | ENTER | + // |ADJUST | LCTL | LALT | LGUI | LOWR | SPACE| SPACE | RAIS | LARW | DARW | UARW | RARW | + + + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp LSHFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET + &mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + }; + + lower_layer { + // ------------------------------------------------------------------------------------------- + // | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + // | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL | + // | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + // | | F7 | F8 | F9 | F10 | F11 | F12 | LS(#) |LS(|) | | | | + // | | | | | | | | | NEXT | Vol- | Vol+ | PLAY | + bindings = < + &kp ESC &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(NON_US_HASH) &kp LS(NON_US_BSLH) &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE + >; + }; + + raise_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + // | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL | + // | DEL | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + // | | F7 | F8 | F9 | F10 | F11 | F12 | # | | | | | | + // | | | | | | | | | | | | | + bindings = < + &kp ESC &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &kp TILDE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp NON_US_HASH &kp NON_US_BSLH &trans &trans &trans + &trans &trans &trans &trans &mo 3 &trans &trans &trans &trans &trans &trans &trans + >; + }; + + adjust_layer { + // ------------------------------------------------------------------------------------------ + // |tog(4)| F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + // | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |LALT(PRTSN)| + // | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | PRTSN | + // | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |LCTRL(DEL) | + // | | | | | |BOOTLD|BOOTLD| | | | | | + bindings = < + &tog 4 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &none &none &none &none &none &none &none &none &none &none &kp LA(PSCRN) + &trans &none &none &none &none &none &none &none &none &none &none &kp PSCRN + &trans &none &none &none &none &none &none &none &none &none &none &kp LC(DEL) + &trans &trans &trans &trans &trans &bootloader &bootloader &trans &trans &trans &trans &trans + >; + }; + + flock_layer { + // ---------------------------------------------------------------------------------------------- + // |tog(4) | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | | + // |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|BT_PRV|BT_NXT|BT_CLR| | | | + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + bindings = < + &tog 4 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans + &out OUT_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.overlay b/app/boards/shields/boardsource5x12/boardsource5x12.overlay new file mode 100644 index 00000000000..0fafe8a18c7 --- /dev/null +++ b/app/boards/shields/boardsource5x12/boardsource5x12.overlay @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + ; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.zmk.yml b/app/boards/shields/boardsource5x12/boardsource5x12.zmk.yml new file mode 100644 index 00000000000..6987e27a0ab --- /dev/null +++ b/app/boards/shields/boardsource5x12/boardsource5x12.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: boardsource5x12 +name: Boardsource 5x12 +type: shield +url: https://boardsource.xyz/store/5ecb802c86879c9a0c22db61 +requires: [pro_micro] +features: + - keys From 569a2ee2cc9016b6bd7b65c557b5762f1679f278 Mon Sep 17 00:00:00 2001 From: Kyle McCreery Date: Mon, 13 Dec 2021 15:41:35 -0500 Subject: [PATCH 0210/1130] [New Shield] Murphpad (#806) * initial commit * initial commit * Encode, OLED, and RGB Nice Nano support added as well as refining default keymap. * tweaking keymap * Prepared murphpad for PR. Includes adding support for second encoder, OLED, and underglow RGB * Enabled OLED by default. * removed naked60 config files * Per PR feedback from ZMK maintainers, added hardware metadata file and renamed Pro Micro pins. * removed tabs from keymap and replaced with normal spaces * Update app/boards/shields/murphpad/murphpad.keymap Co-authored-by: Nick Winans * Update app/boards/shields/murphpad/murphpad.zmk.yml Co-authored-by: Nick Winans * Update app/boards/shields/murphpad/murphpad.zmk.yml Co-authored-by: Nick Winans Co-authored-by: honorless <86894501+lesshonor@users.noreply.github.com> Co-authored-by: Nick Winans --- app/boards/shields/murphpad/Kconfig.defconfig | 45 ++++++++++ app/boards/shields/murphpad/Kconfig.shield | 5 ++ .../shields/murphpad/boards/nice_nano.conf | 3 + .../shields/murphpad/boards/nice_nano.overlay | 34 ++++++++ app/boards/shields/murphpad/murphpad.conf | 9 ++ app/boards/shields/murphpad/murphpad.keymap | 85 +++++++++++++++++++ app/boards/shields/murphpad/murphpad.overlay | 74 ++++++++++++++++ app/boards/shields/murphpad/murphpad.zmk.yml | 12 +++ 8 files changed, 267 insertions(+) create mode 100644 app/boards/shields/murphpad/Kconfig.defconfig create mode 100644 app/boards/shields/murphpad/Kconfig.shield create mode 100644 app/boards/shields/murphpad/boards/nice_nano.conf create mode 100644 app/boards/shields/murphpad/boards/nice_nano.overlay create mode 100644 app/boards/shields/murphpad/murphpad.conf create mode 100644 app/boards/shields/murphpad/murphpad.keymap create mode 100644 app/boards/shields/murphpad/murphpad.overlay create mode 100644 app/boards/shields/murphpad/murphpad.zmk.yml diff --git a/app/boards/shields/murphpad/Kconfig.defconfig b/app/boards/shields/murphpad/Kconfig.defconfig new file mode 100644 index 00000000000..6ec7e0969c4 --- /dev/null +++ b/app/boards/shields/murphpad/Kconfig.defconfig @@ -0,0 +1,45 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_MURPHPAD + +config ZMK_KEYBOARD_NAME + default "MurphPad" + +endif + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES_MAX + default 128 + +config LVGL_VER_RES_MAX + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL diff --git a/app/boards/shields/murphpad/Kconfig.shield b/app/boards/shields/murphpad/Kconfig.shield new file mode 100644 index 00000000000..389caa269ff --- /dev/null +++ b/app/boards/shields/murphpad/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_MURPHPAD + def_bool $(shields_list_contains,murphpad) \ No newline at end of file diff --git a/app/boards/shields/murphpad/boards/nice_nano.conf b/app/boards/shields/murphpad/boards/nice_nano.conf new file mode 100644 index 00000000000..dda71c13f51 --- /dev/null +++ b/app/boards/shields/murphpad/boards/nice_nano.conf @@ -0,0 +1,3 @@ +# Uncomment both to enable underglow +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay new file mode 100644 index 00000000000..b247334e886 --- /dev/null +++ b/app/boards/shields/murphpad/boards/nice_nano.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <31>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <8>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/murphpad/murphpad.conf b/app/boards/shields/murphpad/murphpad.conf new file mode 100644 index 00000000000..bdcd42552cd --- /dev/null +++ b/app/boards/shields/murphpad/murphpad.conf @@ -0,0 +1,9 @@ +# Uncomment to turn on logging, and set ZMK logging to debug output +# CONFIG_ZMK_USB_LOGGING=y + +# Uncomment both to enable encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment to enable OLED +CONFIG_ZMK_DISPLAY=y \ No newline at end of file diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap new file mode 100644 index 00000000000..aec58878562 --- /dev/null +++ b/app/boards/shields/murphpad/murphpad.keymap @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + + +#define TIMEOUT 300 + +&encoder_1 { + status = "okay"; +}; + +&encoder_2 { + status = "okay"; +}; + +/ { + combos { + compatible = "zmk,combos"; + combo_btclr { + timeout-ms = ; + key-positions = <1 6>; + bindings = <&bt BT_CLR>; + }; + combo_reset { + timeout-ms = ; + key-positions = <1 3>; + bindings = <&reset>; + }; + combo_bootloader { + timeout-ms = ; + key-positions = <1 2>; + bindings = <&bootloader>; + }; + combo_bt_nxt { + timeout-ms = ; + key-positions = <1 4>; + bindings = <&bt BT_NXT>; + }; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder_1 &encoder_2>; + }; + + + keymap0: keymap { + compatible = "zmk,keymap"; + + default_layer { + label = "default layer"; + bindings = < + &bt BT_CLR &kp TAB &kp F5 &kp LC(LA(C)) &kp LG(D) + &rgb_ug RGB_TOG &kp ESC &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS + &rgb_ug RGB_EFF &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS + &kp C_MUTE &kp KP_N4 &kp KP_N5 &kp KP_N6 &trans + &mo 1 &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER + &kp BSPC &kp KP_N0 &trans &kp KP_DOT &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + + }; + + fn_layer { + label = "fn layer"; + bindings = < + &trans &trans &trans &trans &trans + &trans &kp KP_NUM &trans &trans &trans + &trans &trans &trans &trans &trans + &bt BT_CLR &trans &trans &trans &trans + &trans &trans &trans &trans &trans + &kp DEL &trans &trans &trans &trans + >; + sensor-bindings = <&inc_dec_kp PG_UP PG_DN &inc_dec_kp C_VOL_UP C_VOL_DN>; + + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay new file mode 100644 index 00000000000..25bd10f9b40 --- /dev/null +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; + }; + + encoder_1: encoder_1 { + compatible = "alps,ec11"; + label = "Encoder 1"; + a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + encoder_2: encoder_2 { + compatible = "alps,ec11"; + label = "Encoder 2"; + a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/murphpad/murphpad.zmk.yml b/app/boards/shields/murphpad/murphpad.zmk.yml new file mode 100644 index 00000000000..2dda83d90e6 --- /dev/null +++ b/app/boards/shields/murphpad/murphpad.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: murphpad +name: MurphPad +type: shield +url: https://mechwild.com/product/murphpad/ +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow From af98a3fd6e5bd8b31e34416369d883eeb592c37c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 13 Dec 2021 17:00:54 -0500 Subject: [PATCH 0211/1130] fix(shields): Don't enable SSD1306 automatically. * Fix Murphpad conditional to ensure SSD1306 driver isn't enabled whenever `ZMK_DISPLAY` is enabled. --- app/boards/shields/murphpad/Kconfig.defconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/murphpad/Kconfig.defconfig b/app/boards/shields/murphpad/Kconfig.defconfig index 6ec7e0969c4..8e205a8eaad 100644 --- a/app/boards/shields/murphpad/Kconfig.defconfig +++ b/app/boards/shields/murphpad/Kconfig.defconfig @@ -6,8 +6,6 @@ if SHIELD_MURPHPAD config ZMK_KEYBOARD_NAME default "MurphPad" -endif - if ZMK_DISPLAY config I2C @@ -43,3 +41,5 @@ choice LVGL_COLOR_DEPTH endchoice endif # LVGL + +endif From f438fb87d8765633e8550e1108a7956e9f5d70c2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 13 Dec 2021 17:10:47 -0500 Subject: [PATCH 0212/1130] chore: Add a few more items to PR template. * Kconfig.defconfig conditional correctness. * Keyboard availability. --- .github/pull_request_template.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 7443c24d4eb..9c3543dd287 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,4 +8,6 @@ - [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader)) - [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable - [ ] If split, no name added for the right/peripheral half + - [ ] Kconfig.defconfig file correctly wraps *all* configuration in conditional on the shield symbol - [ ] `.conf` file has optional extra features commented out + - [ ] Keyboard/PCB is part of a shipped group buy or is generally available in stock to purchase (OSH/personal projects without general availability should create a zmk-config repo instead) From 7b023affbde618835ae9943cc34bba2de4ac03c9 Mon Sep 17 00:00:00 2001 From: Alexander Krikun <54907805+krikun98@users.noreply.github.com> Date: Tue, 14 Dec 2021 20:32:59 +0300 Subject: [PATCH 0213/1130] Add support for the Jiran (#1048) * initial files to get stuff working * Keymap by Ladniy * Format update to new standards * keymap update * header * Fixed transform, removed left and right .conf files * Apply suggestions from code review Formatting Co-authored-by: Nick Winans Co-authored-by: Nick Winans --- app/boards/shields/jiran/Kconfig.defconfig | 19 +++++ app/boards/shields/jiran/Kconfig.shield | 8 ++ app/boards/shields/jiran/jiran.conf | 1 + app/boards/shields/jiran/jiran.dtsi | 82 ++++++++++++++++++++ app/boards/shields/jiran/jiran.keymap | 35 +++++++++ app/boards/shields/jiran/jiran.zmk.yml | 11 +++ app/boards/shields/jiran/jiran_left.overlay | 18 +++++ app/boards/shields/jiran/jiran_right.overlay | 22 ++++++ 8 files changed, 196 insertions(+) create mode 100644 app/boards/shields/jiran/Kconfig.defconfig create mode 100644 app/boards/shields/jiran/Kconfig.shield create mode 100644 app/boards/shields/jiran/jiran.conf create mode 100644 app/boards/shields/jiran/jiran.dtsi create mode 100644 app/boards/shields/jiran/jiran.keymap create mode 100644 app/boards/shields/jiran/jiran.zmk.yml create mode 100644 app/boards/shields/jiran/jiran_left.overlay create mode 100644 app/boards/shields/jiran/jiran_right.overlay diff --git a/app/boards/shields/jiran/Kconfig.defconfig b/app/boards/shields/jiran/Kconfig.defconfig new file mode 100644 index 00000000000..1742197068c --- /dev/null +++ b/app/boards/shields/jiran/Kconfig.defconfig @@ -0,0 +1,19 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_JIRAN_LEFT + +config ZMK_KEYBOARD_NAME + default "Jiran" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_JIRAN_LEFT || SHIELD_JIRAN_RIGHT + +config ZMK_SPLIT + default y + +endif diff --git a/app/boards/shields/jiran/Kconfig.shield b/app/boards/shields/jiran/Kconfig.shield new file mode 100644 index 00000000000..8a24ace0d1e --- /dev/null +++ b/app/boards/shields/jiran/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_JIRAN_LEFT + def_bool $(shields_list_contains,jiran_left) + +config SHIELD_JIRAN_RIGHT + def_bool $(shields_list_contains,jiran_right) diff --git a/app/boards/shields/jiran/jiran.conf b/app/boards/shields/jiran/jiran.conf new file mode 100644 index 00000000000..406f9a44b1d --- /dev/null +++ b/app/boards/shields/jiran/jiran.conf @@ -0,0 +1 @@ +# CONFIG_ZMK_SLEEP=y \ No newline at end of file diff --git a/app/boards/shields/jiran/jiran.dtsi b/app/boards/shields/jiran/jiran.dtsi new file mode 100644 index 00000000000..5dfaa46b74a --- /dev/null +++ b/app/boards/shields/jiran/jiran.dtsi @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; + +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW0 | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | SW0 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | +// | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 | + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) + RC(4,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(4,11) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + jian_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; + +// | SW0 | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | SW0 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | +// | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 | + map = < + RC(4,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(4,11) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + crkbd_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; + +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | +// | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 | + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; +}; diff --git a/app/boards/shields/jiran/jiran.keymap b/app/boards/shields/jiran/jiran.keymap new file mode 100644 index 00000000000..e6c073cc8aa --- /dev/null +++ b/app/boards/shields/jiran/jiran.keymap @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS + &kp LGUI &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &mt RGUI RBKT + &kp LSHIFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &mt RSHIFT SQT + &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RCTRL BSLH + &mo 1 &kp SPACE &kp LALT &mt RALT RET &kp BSPC &mo 1 + >; + }; + + lower_layer { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp EQUAL + &kp F11 &kp TAB &bt BT_CLR &kp HOME &reset &kp PG_UP &kp C_VOL_UP &kp C_VOL_UP &kp PG_UP &reset &kp HOME &kp INS &kp DEL &kp F12 + &kp LSHIFT &bt BT_NXT &kp LEFT &kp UP &kp RIGHT &kp C_MUTE &kp C_MUTE &kp LEFT &kp UP &kp RIGHT &kp PSCRN &mt RSHIFT SLCK + &kp LCTRL &bt BT_PRV &kp END &kp DOWN &kp PG_DN &kp C_VOL_DN &kp C_VOL_DN &kp PG_DN &kp DOWN &kp END &kp PAUSE_BREAK &mt RCTRL KP_NUM + &trans &kp SPACE &kp LALT &mt RALT RET &kp BSPC &trans + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/jiran/jiran.zmk.yml b/app/boards/shields/jiran/jiran.zmk.yml new file mode 100644 index 00000000000..1e21df7c41b --- /dev/null +++ b/app/boards/shields/jiran/jiran.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: jiran +name: Jiran +type: shield +url: https://github.com/Ladniy/jiran +requires: [pro_micro] +features: + - keys +siblings: + - jiran_left + - jiran_right diff --git a/app/boards/shields/jiran/jiran_left.overlay b/app/boards/shields/jiran/jiran_left.overlay new file mode 100644 index 00000000000..4466202cdc8 --- /dev/null +++ b/app/boards/shields/jiran/jiran_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "jiran.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/app/boards/shields/jiran/jiran_right.overlay b/app/boards/shields/jiran/jiran_right.overlay new file mode 100644 index 00000000000..75b9fb5af43 --- /dev/null +++ b/app/boards/shields/jiran/jiran_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "jiran.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + ; +}; From 2666bd622cde5f55366636a8fe24ca104633be85 Mon Sep 17 00:00:00 2001 From: Lucas Yunkyu Lee Date: Mon, 13 Dec 2021 21:12:38 +0900 Subject: [PATCH 0214/1130] fix(keymaps): add row-offset property to matrix-transform --- app/dts/bindings/zmk,matrix-transform.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/dts/bindings/zmk,matrix-transform.yaml b/app/dts/bindings/zmk,matrix-transform.yaml index b7d000c597b..4392bf52e31 100644 --- a/app/dts/bindings/zmk,matrix-transform.yaml +++ b/app/dts/bindings/zmk,matrix-transform.yaml @@ -13,6 +13,9 @@ properties: col-offset: type: int default: 0 + row-offset: + type: int + default: 0 map: type: array required: true From 62e3b573b920b17f3f00781dde53d965dbe8a613 Mon Sep 17 00:00:00 2001 From: Evan Callicoat Date: Sun, 26 Dec 2021 13:21:58 -0600 Subject: [PATCH 0215/1130] Typos --- docs/docs/behaviors/hold-tap.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 972df0be992..8e35f75947a 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -62,12 +62,12 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin #### Positional hold-tap and `hold-trigger-key-positions` -- Including `hold-trigger-key-postions` in your hold-tap definition turns on the positional hold-tap feature. +- Including `hold-trigger-key-positions` in your hold-tap definition turns on the positional hold-tap feature. - With positional hold-tap enabled, if you press any key **NOT** listed in `hold-trigger-key-positions` before `tapping-term-ms` expires, it will produce a tap. - In all other situations, positional hold-tap will not modify the behavior of your hold-tap. - Positional hold-tap is useful with home-row modifiers. If you have a home-row modifier key in the left hand for example, by including only keys positions from the right hand in `hold-trigger-key-positions`, you will only get hold behaviors during cross-hand key combinations. -- Note that `hold-trigger-key-postions` is an array of key position indexes. Key positions are numbered according to your keymap, starting with 0. So if the first key in your keymap is Q, this key is in position 0. The next key (probably W) will be in position 1, et cetera. -- See the following example, which uses a hold-tap behavior definition, configured with the `hold-preferrred` flavor, and with positional hold-tap enabled: +- Note that `hold-trigger-key-positions` is an array of key position indexes. Key positions are numbered according to your keymap, starting with 0. So if the first key in your keymap is Q, this key is in position 0. The next key (probably W) will be in position 1, et cetera. +- See the following example, which uses a hold-tap behavior definition, configured with the `hold-preferred` flavor, and with positional hold-tap enabled: ``` #include From a562578fd20c6601667206a62910a60ff3a60ee8 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Tue, 28 Dec 2021 18:04:18 +0800 Subject: [PATCH 0216/1130] docs: change quick_tap_ms to quick-tap-ms (#1071) --- docs/docs/behaviors/hold-tap.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 8e35f75947a..edb9d593aa1 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -42,9 +42,9 @@ For basic usage, please see [mod-tap](mod-tap.md) and [layer-tap](layers.md) pag Defines how long a key must be pressed to trigger Hold behavior. -#### `quick_tap_ms` +#### `quick-tap-ms` -If you press a tapped hold-tap again within `quick_tap_ms` milliseconds, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). +If you press a tapped hold-tap again within `quick-tap-ms` milliseconds, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). In QMK, unlike ZMK, this functionality is enabled by default, and you turn it off using `TAPPING_FORCE_HOLD`. @@ -150,7 +150,7 @@ The following are suggested hold-tap configurations that work well with home row label = "HOMEROW_MODS"; #binding-cells = <2>; tapping-term-ms = <150>; - quick_tap_ms = <0>; + quick-tap-ms = <0>; flavor = "tap-preferred"; bindings = <&kp>, <&kp>; }; @@ -181,7 +181,7 @@ The following are suggested hold-tap configurations that work well with home row label = "HOMEROW_MODS"; #binding-cells = <2>; tapping-term-ms = <200>; // <---[[moderate duration]] - quick_tap_ms = <0>; + quick-tap-ms = <0>; flavor = "balanced"; bindings = <&kp>, <&kp>; }; From 3114ce00b9676625e60c49c05eb1a91db51deb7b Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Tue, 28 Dec 2021 03:52:16 -0700 Subject: [PATCH 0217/1130] docs: reiterate building from `zmk/app/` (#1031) Co-authored-by: Cem Aksoylar --- docs/docs/development/build-flash.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index cb00b1a92e0..ac75b83526f 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -99,6 +99,10 @@ For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" ``` +:::caution +The above command must still be invoked from the `zmk/app` directory as noted above, rather than the config directory. Otherwise, you will encounter errors such as `ERROR: source directory "." does not contain a CMakeLists.txt; is this really what you want to build?`. Alternatively you can add the `-s /path/to/zmk/app` flag to your `west` command. +::: + In order to make your `zmk-config` folder available when building within the VSCode Remote Container, you need to create a docker volume named `zmk-config` by binding it to the full path of your config directory. If you have run the VSCode Remote Container before, it is likely that docker has created this volume automatically -- we need to delete the default volume before binding it to the correct path. Follow the following steps: From 8c321063a05c0caa43f697a2724f221e8a147a7b Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 22 Oct 2021 18:31:08 -0700 Subject: [PATCH 0218/1130] feat(docs): Add note for USB power in outputs page --- docs/docs/behaviors/outputs.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/behaviors/outputs.md b/docs/docs/behaviors/outputs.md index ae81249740a..198d9acc617 100644 --- a/docs/docs/behaviors/outputs.md +++ b/docs/docs/behaviors/outputs.md @@ -12,6 +12,12 @@ keyboard to USB for power but outputting to a different device over bluetooth. By default, output is sent to USB when both USB and BLE are connected. Once you select a different output, it will be remembered until you change it again. +:::note Powering the keyboard via USB +ZMK is not always able to detect if the other end of a USB connection accepts keyboard input or not. +So if you are using USB only to power your keyboard (for example with a charger or a portable power bank), you will want +to select the BLE output through below behavior to be able to send keystrokes to the selected bluetooth profile. +::: + ## Output Command Defines Output command defines are provided through the [`dt-bindings/zmk/outputs.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/outputs.h) From ef0d088cb8c5cfafe48db24973f42637c2f75380 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 22 Oct 2021 18:40:36 -0700 Subject: [PATCH 0219/1130] feat(docs): Link to outputs page in troubleshooting re: BT output --- docs/docs/troubleshooting.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index d3f3eeaea93..3055c131ecf 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -3,9 +3,7 @@ title: Troubleshooting sidebar_title: Troubleshooting --- -### Summary - -The following page provides suggestions for common errors that may occur during firmware compilation. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite). +The following page provides suggestions for common errors that may occur during firmware compilation or other issues with keyboard usage. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite). ### File Transfer Error @@ -76,3 +74,7 @@ CONFIG_BT_CTLR_TX_PWR_PLUS_8=y ``` For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_BT_CTLR_TX_PWR_PLUS_8.html) + +### Other notes and warnings + +- If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../docs/behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. From 93e76835e4ea1b5b058066990abea720084ca470 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Wed, 22 Dec 2021 22:24:47 -0800 Subject: [PATCH 0220/1130] fix(setup): Use right flags for curl when wget doesn't exist. --- docs/src/templates/setup.sh.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index 54405fae5e6..cec164a2184 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -54,7 +54,7 @@ if [[ $curl_exists == "true" && $wget_exists == "true" ]]; then download_command="curl -fsOL " fi elif [[ $curl_exists == "true" ]]; then - download_command="curl -O " + download_command="curl -fsOL " elif [[ $wget_exists == "true" ]]; then download_command="wget " else From 387926761580fbfde98b2d43cfd9fce7b6fae11e Mon Sep 17 00:00:00 2001 From: KingCoinless <33333456+KingCoinless@users.noreply.github.com> Date: Wed, 29 Dec 2021 02:40:31 -0800 Subject: [PATCH 0221/1130] docs(codes): Windows Support: Display Adjustment Commands Co-authored-by: Cem Aksoylar --- docs/src/data/hid.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 31e11d2326a..4432db74553 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -5043,7 +5043,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: false, android: true, macos: null, @@ -5148,7 +5148,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, @@ -5169,7 +5169,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: true, linux: true, android: null, macos: true, @@ -5190,7 +5190,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: true, linux: true, android: null, macos: true, @@ -5211,7 +5211,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, @@ -5232,7 +5232,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, @@ -5253,7 +5253,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, @@ -5274,7 +5274,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, From ee0f24412b7ac0e17444245892dfa9966b9f8d26 Mon Sep 17 00:00:00 2001 From: Kiessling Date: Fri, 8 Jan 2021 14:17:07 -0800 Subject: [PATCH 0222/1130] docs(codes): Windows Support: Symbols, Operations, and Punctuation --- docs/src/data/hid.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 4432db74553..cd53b10569d 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -1368,7 +1368,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -1393,7 +1393,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -2711,7 +2711,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: true, macos: null, @@ -3341,7 +3341,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: true, macos: null, @@ -3362,7 +3362,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: false, android: false, macos: null, @@ -4013,7 +4013,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4034,7 +4034,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, From 4a547555bfcf28a20db502efd6963da6674f8806 Mon Sep 17 00:00:00 2001 From: Kiessling Date: Fri, 8 Jan 2021 14:02:54 -0800 Subject: [PATCH 0223/1130] docs(codes): Windows Support: Workflow Commands and Locks --- docs/src/data/hid.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index cd53b10569d..c45fa10ee98 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -3089,7 +3089,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3110,7 +3110,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3131,7 +3131,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3152,7 +3152,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3173,7 +3173,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3278,7 +3278,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: false, android: false, macos: null, @@ -3320,7 +3320,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: false, android: false, macos: null, @@ -3866,7 +3866,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: false, android: false, macos: null, @@ -7143,7 +7143,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -7164,7 +7164,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -7185,7 +7185,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -7206,7 +7206,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -7626,7 +7626,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=152", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, From 1e4f0147ad7e269e339cd63174fe1d9d84320dfd Mon Sep 17 00:00:00 2001 From: Kiessling Date: Fri, 8 Jan 2021 13:20:10 -0800 Subject: [PATCH 0224/1130] docs(codes): Windows Support: Audio Controls --- docs/src/data/hid.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index c45fa10ee98..1d4c5d05729 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -3215,7 +3215,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: true, macos: true, @@ -3236,7 +3236,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -3257,7 +3257,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4375,7 +4375,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4397,7 +4397,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4419,7 +4419,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -6093,7 +6093,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", os: { - windows: null, + windows: true, linux: true, android: true, macos: null, @@ -6114,7 +6114,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -6135,7 +6135,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -6156,7 +6156,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, From 7b2edbad43cb8da271f3f348b3171b81ba408429 Mon Sep 17 00:00:00 2001 From: Kiessling Date: Fri, 8 Jan 2021 12:52:27 -0800 Subject: [PATCH 0225/1130] docs(codes): Windows Support: Language/International Inputs --- docs/src/data/hid.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 1d4c5d05729..774cf6c7030 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -3383,7 +3383,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3404,7 +3404,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3425,7 +3425,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3446,7 +3446,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3467,7 +3467,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3488,7 +3488,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3572,7 +3572,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: true, linux: true, android: false, macos: null, @@ -3593,7 +3593,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: true, linux: true, android: false, macos: null, @@ -3614,7 +3614,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3635,7 +3635,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -3656,7 +3656,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, From be343674de55bfa692cf943a06a11beb60be747f Mon Sep 17 00:00:00 2001 From: Evan Callicoat Date: Sun, 2 Jan 2022 04:34:21 -0600 Subject: [PATCH 0226/1130] docs: Fix typos and inconsistent spellings (#1079) --- docs/docs/development/build-flash.md | 2 +- docs/docs/development/hardware-metadata-files.md | 2 +- docs/docs/development/new-shield.md | 2 +- docs/docs/faq.md | 4 ++-- docs/docs/features/keymaps.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index ac75b83526f..95719d92a2b 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -26,7 +26,7 @@ From here on, building and flashing ZMK should all be done from the `app/` subdi cd app ``` -To build for your particular keyboard, the behaviour varies slightly depending on if you are building for a keyboard with +To build for your particular keyboard, the behavior varies slightly depending on if you are building for a keyboard with an onboard MCU, or one that uses an MCU board addon. ### Keyboard (Shield) + MCU Board diff --git a/docs/docs/development/hardware-metadata-files.md b/docs/docs/development/hardware-metadata-files.md index ffe896e2479..5d4902dc8b4 100644 --- a/docs/docs/development/hardware-metadata-files.md +++ b/docs/docs/development/hardware-metadata-files.md @@ -100,7 +100,7 @@ Boards and shields should document the sets of hardware features found on them u The `siblings` array is used to identify multiple hardware items designed to be used together as one logical device. Right now, that primarily is used to identify the two halves of a split keyboard, but future enhancements will include more complicated and flexible combinations. -The array should contrain the complete harware IDs of the siblings that combine in the logical device, e.g. with the `corne.zmk.yml` file: +The array should contain the complete hardware IDs of the siblings that combine in the logical device, e.g. with the `corne.zmk.yml` file: ```yaml id: corne diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index d8b416986c7..6f65d8698fa 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -360,7 +360,7 @@ The two `#include` lines at the top of the keymap are required in order to bring Further documentation on behaviors and bindings is forthcoming, but a summary of the current behaviors you can bind to key positions is as follows: - `kp` is the "key press" behavior, and takes a single binding argument of the key code from the 'keyboard/keypad" HID usage table. -- `mo` is the "momentary layer" behaviour, and takes a single binding argument of the numeric ID of the layer to momentarily enable when that key is held. +- `mo` is the "momentary layer" behavior, and takes a single binding argument of the numeric ID of the layer to momentarily enable when that key is held. - `trans` is the "transparent" behavior, useful to be place in higher layers above `mo` bindings to be sure the key release is handled by the lower layer. No binding arguments are required. - `mt` is the "mod-tap" behavior, and takes two binding arguments, the modifier to use if held, and the keycode to send if tapped. diff --git a/docs/docs/faq.md b/docs/docs/faq.md index d335d11e646..6a16f6f8fd9 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -12,7 +12,7 @@ As a best-in-class RTOS, Zephyr™ brings many [benefits](https://www.zephyrproj - Powerful hardware abstraction and configuration using [DeviceTree](https://docs.zephyrproject.org/latest/guides/dts/index.html) and [Kconfig](https://docs.zephyrproject.org/latest/guides/kconfig/index.html). - A BLE stack that periodically obtains [qualification](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-qual.html) listings, making it easier for final products to obtain qualification from the Bluetooth® SIG. - Multi-processor support, which is critical for power efficiency in upcoming MCUs. -- Permissive licencing with its Apache 2.0 open source [license](https://www.apache.org/licenses/LICENSE-2.0). +- Permissive licensing with its Apache 2.0 open source [license](https://www.apache.org/licenses/LICENSE-2.0). - A buzzing developer [community](https://github.com/zephyrproject-rtos/zephyr) including many leading [embedded technology](https://www.zephyrproject.org/project-members) companies. - Long term support (LTS) with security updates. @@ -23,7 +23,7 @@ That’s an excellent question! There are already great keyboard firmwares avail - Zephyr™ - See [Why Zephyr™?](#why-zephyr) - Licensing - - Just like other open source firmware, ZMK is all about the free and the sharing. However, some other projects use the GPL licence which prevents integration of libraries and drivers whose licenses are not GPL-compatible (such as some embedded BLE drivers). ZMK uses the permissive [MIT](https://github.com/zmkfirmware/zmk/blob/main/LICENSE) license which doesn’t have this limitation. + - Just like other open source firmware, ZMK is all about the free and the sharing. However, some other projects use the GPL license which prevents integration of libraries and drivers whose licenses are not GPL-compatible (such as some embedded BLE drivers). ZMK uses the permissive [MIT](https://github.com/zmkfirmware/zmk/blob/main/LICENSE) license which doesn’t have this limitation. - Wireless First - ZMK is designed for the future, and we believe the future is wireless. So power efficiency plays a critical role in every design decision, just like in Zephyr™. diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index be0aa203cf7..59577d8fef0 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -128,7 +128,7 @@ that defines just one layer for this keymap: Each layer should have: -1. A `bindings` property this will be a list of behaviour bindings, one for each key position for the keyboard. +1. A `bindings` property this will be a list of behavior bindings, one for each key position for the keyboard. 1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way) For the full set of possible behaviors, start at the [Key Press](../behaviors/key-press.md) behavior. From e7a52e2cee151bd22290cdc6228b66092d3f6268 Mon Sep 17 00:00:00 2001 From: KingCoinless <33333456+KingCoinless@users.noreply.github.com> Date: Sun, 2 Jan 2022 02:44:55 -0800 Subject: [PATCH 0227/1130] docs(codes): Windows Support: Media Controls Co-authored-by: Cem Aksoylar --- docs/src/data/hid.js | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 774cf6c7030..572ccb9522d 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -2664,7 +2664,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -4265,7 +4265,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4287,7 +4287,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4309,7 +4309,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4331,7 +4331,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -4507,7 +4507,7 @@ export default [ documentation: "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", os: { - windows: null, + windows: false, linux: true, android: true, macos: false, @@ -5001,7 +5001,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: true, macos: null, @@ -5022,7 +5022,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, @@ -5778,7 +5778,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: null, @@ -5799,7 +5799,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: null, @@ -5820,7 +5820,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: false, linux: true, android: true, macos: null, @@ -5841,7 +5841,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: null, @@ -5862,7 +5862,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: null, @@ -5883,7 +5883,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -5904,7 +5904,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -5925,7 +5925,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: false, linux: true, android: true, macos: null, @@ -5967,7 +5967,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -5988,7 +5988,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: false, linux: true, android: false, macos: null, @@ -6009,7 +6009,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, @@ -6051,7 +6051,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", os: { - windows: null, + windows: true, linux: true, android: true, macos: true, @@ -6177,7 +6177,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=141", os: { - windows: null, + windows: false, linux: true, android: null, macos: null, From e0620f1a2d726bee1859b8618ea4ed24b6b2145e Mon Sep 17 00:00:00 2001 From: Midge 't Hoen Date: Mon, 3 Jan 2022 14:14:38 +0100 Subject: [PATCH 0228/1130] Bump init delay to 50ms for nico-nano --- app/boards/arm/nice_nano/nice_nano_v2.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts index b17f478773d..8f72aad684d 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2.dts +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -12,7 +12,7 @@ compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; - init-delay-ms = <10>; + init-delay-ms = <50>; }; vbatt { From f767abe13647d1bf6b05a1b67baf615f58fc046c Mon Sep 17 00:00:00 2001 From: okke Date: Sat, 11 Dec 2021 20:36:59 +0100 Subject: [PATCH 0229/1130] chore: make west scripts more pythonic and apply Black --- .vscode/settings.json | 3 +- app/scripts/west_commands/metadata.py | 49 +++++++++++++++------------ app/scripts/west_commands/test.py | 36 ++++++++++++-------- 3 files changed, 50 insertions(+), 38 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index eba95704990..2730549a234 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,6 @@ "files.associations": { "*.overlay": "dts", "*.keymap": "dts" - } + }, + "python.formatting.provider": "black" } \ No newline at end of file diff --git a/app/scripts/west_commands/metadata.py b/app/scripts/west_commands/metadata.py index a06024c585f..244fb9bf6fd 100644 --- a/app/scripts/west_commands/metadata.py +++ b/app/scripts/west_commands/metadata.py @@ -1,59 +1,64 @@ # Copyright (c) 2021 The ZMK Contributors # SPDX-License-Identifier: MIT -'''Metadata command for ZMK.''' +"""Metadata command for ZMK.""" from functools import cached_property import glob import json -from jsonschema import validate, ValidationError -import os +import jsonschema import sys import yaml -from textwrap import dedent # just for nicer code indentation from west.commands import WestCommand -from west import log # use this for user output +from west import log # use this for user output class Metadata(WestCommand): def __init__(self): super().__init__( - 'metadata', # gets stored as self.name - 'ZMK hardware metadata commands', # self.help - # self.description: - dedent('''Operate on the board/shield metadata.''')) + name="metadata", + help="ZMK hardware metadata commands", + description="Operate on the board/shield metadata.", + ) def do_add_parser(self, parser_adder): - parser = parser_adder.add_parser(self.name, - help=self.help, - description=self.description) + parser = parser_adder.add_parser( + self.name, help=self.help, description=self.description + ) - parser.add_argument('subcommand', default="check", - help='The subcommand to run. Defaults to "check".', nargs="?") - return parser # gets stored as self.parser + parser.add_argument( + "subcommand", + default="check", + help='The subcommand to run. Defaults to "check".', + nargs="?", + ) + return parser # gets stored as self.parser @cached_property def schema(self): - return json.load( - open("../schema/hardware-metadata.schema.json", 'r')) + return json.load(open("../schema/hardware-metadata.schema.json", "r")) def validate_file(self, file): print("Validating: " + file) - with open(file, 'r') as stream: + with open(file, "r") as stream: try: - validate(yaml.safe_load(stream), self.schema) + jsonschema.validate(yaml.safe_load(stream), self.schema) except yaml.YAMLError as exc: print("Failed loading metadata yaml: " + file) print(exc) return False - except ValidationError as vexc: + except jsonschema.ValidationError as vexc: print("Failed validation of: " + file) print(vexc) return False return True def do_run(self, args, unknown_args): - status = all([self.validate_file(f) for f in glob.glob( - "boards/**/*.zmk.yml", recursive=True)]) + status = all( + [ + self.validate_file(f) + for f in glob.glob("boards/**/*.zmk.yml", recursive=True) + ] + ) sys.exit(0 if status else 1) diff --git a/app/scripts/west_commands/test.py b/app/scripts/west_commands/test.py index ac64bb6f73f..531334913b4 100644 --- a/app/scripts/west_commands/test.py +++ b/app/scripts/west_commands/test.py @@ -1,35 +1,41 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -'''Test runner for ZMK.''' +"""Test runner for ZMK.""" import os import subprocess -from textwrap import dedent # just for nicer code indentation from west.commands import WestCommand -from west import log # use this for user output +from west import log # use this for user output class Test(WestCommand): def __init__(self): super().__init__( - 'test', # gets stored as self.name - 'run ZMK testsuite', # self.help - # self.description: - dedent('''Run the ZMK testsuite.''')) + name="test", + help="run ZMK testsuite", + description="Run the ZMK testsuite.", + ) def do_add_parser(self, parser_adder): - parser = parser_adder.add_parser(self.name, - help=self.help, - description=self.description) + parser = parser_adder.add_parser( + self.name, + help=self.help, + description=self.description, + ) - parser.add_argument('test_path', default="all", - help='The path to the test. Defaults to "all".', nargs="?") - return parser # gets stored as self.parser + parser.add_argument( + "test_path", + default="all", + help='The path to the test. Defaults to "all".', + nargs="?", + ) + return parser def do_run(self, args, unknown_args): # the run-test script assumes the app directory is the current dir. - os.chdir(f'{self.topdir}/app') + os.chdir(f"{self.topdir}/app") completed_process = subprocess.run( - [f'{self.topdir}/app/run-test.sh', args.test_path]) + [f"{self.topdir}/app/run-test.sh", args.test_path] + ) exit(completed_process.returncode) From d59797ba13f623b6654e81cd9ee65ffca272d2d9 Mon Sep 17 00:00:00 2001 From: okke Date: Sat, 11 Dec 2021 20:41:20 +0100 Subject: [PATCH 0230/1130] test: Change length of fail and pend messages This makes scanning the output from "west test" easier, as the different states get different output lengths. --- app/run-test.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/run-test.sh b/app/run-test.sh index b39f2db20eb..cbc6fbbf792 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -28,17 +28,17 @@ echo "Running $testcase:" west build -d build/$testcase -b native_posix -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 if [ $? -gt 0 ]; then - echo "FAIL: $testcase did not build" >> ./build/tests/pass-fail.log + echo "FAILED: $testcase did not build" >> ./build/tests/pass-fail.log exit 1 else ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log if [ $? -gt 0 ]; then if [ -f $testcase/pending ]; then - echo "PEND: $testcase" >> ./build/tests/pass-fail.log + echo "PENDING: $testcase" >> ./build/tests/pass-fail.log exit 0 else - echo "FAIL: $testcase" >> ./build/tests/pass-fail.log + echo "FAILED: $testcase" >> ./build/tests/pass-fail.log exit 1 fi else From f692d64d0557f898ec08e26ec75320383d937337 Mon Sep 17 00:00:00 2001 From: okke Date: Sat, 11 Dec 2021 20:55:56 +0100 Subject: [PATCH 0231/1130] test: print test output immediately and decrease indenting --- app/run-test.sh | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/app/run-test.sh b/app/run-test.sh index cbc6fbbf792..da4803d6fab 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -28,21 +28,20 @@ echo "Running $testcase:" west build -d build/$testcase -b native_posix -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 if [ $? -gt 0 ]; then - echo "FAILED: $testcase did not build" >> ./build/tests/pass-fail.log + echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log exit 1 -else - ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log - diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log - if [ $? -gt 0 ]; then - if [ -f $testcase/pending ]; then - echo "PENDING: $testcase" >> ./build/tests/pass-fail.log - exit 0 - else - echo "FAILED: $testcase" >> ./build/tests/pass-fail.log - exit 1 - fi - else - echo "PASS: $testcase" >> ./build/tests/pass-fail.log +fi + +./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log +diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log +if [ $? -gt 0 ]; then + if [ -f $testcase/pending ]; then + echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log exit 0 fi + echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log + exit 1 fi + +echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log +exit 0 From d29236141e1b425669e049bb4e5ae5b65903cd62 Mon Sep 17 00:00:00 2001 From: zhiayang <500236+zhiayang@users.noreply.github.com> Date: Wed, 12 Jan 2022 05:07:30 +0800 Subject: [PATCH 0232/1130] fix(boards): Proper active high and init delay for Mikoto ext-power --- app/boards/arm/mikoto/mikoto_520.dts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index 20703e8514d..de831c54069 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -29,7 +29,8 @@ ext-power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; - control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + init-delay-ms = <50>; }; vbatt { From 970e63bec6a63d498989ae5f358d60c8e538bf35 Mon Sep 17 00:00:00 2001 From: David Fiander Date: Wed, 12 Jan 2022 21:36:08 -0500 Subject: [PATCH 0233/1130] fix(boards): Properly use dfu-util to flash DZ60 --- app/boards/arm/dz60rgb/board.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/dz60rgb/board.cmake b/app/boards/arm/dz60rgb/board.cmake index 10f6e291d4b..9da8ea91122 100644 --- a/app/boards/arm/dz60rgb/board.cmake +++ b/app/boards/arm/dz60rgb/board.cmake @@ -3,5 +3,5 @@ board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") board_runner_args(jlink "--device=STM32F303CC" "--speed=4000") -include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) From 2ad8f687c05dcbe2cc759a01174263d641554d16 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Thu, 13 Jan 2022 17:23:43 +0800 Subject: [PATCH 0234/1130] docs: Add a note for GitHub SSH scheme (#1089) Co-authored-by: Cem Aksoylar --- docs/docs/user-setup.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 6c80f882cd1..de47680f2d4 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -143,6 +143,10 @@ GitHub Repo: https://github.com/petejohanson/zmk-config.git Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit `Enter`. +:::note +If you are using SSH keys for git push, change GitHub Repo field to the SSH scheme, e.g. `git@github.com:petejohanson/zmk-config.git`. +::: + ### Confirming Selections The setup script will confirm all of your selections one last time, before performing the setup: From 4039a50ec344bff10d9798a350e244351ec02f8b Mon Sep 17 00:00:00 2001 From: iangus Date: Sun, 30 Jan 2022 14:48:35 -0500 Subject: [PATCH 0235/1130] Add Contra shield (#633) * Add Contra Shield (#1) * Add bluetooth control layer to contra keymap (#2) * fix contra keymap issues * add bluetooth control layer * clean up contra files * add contra.conf file * add missing bracket for default_layer * update copyright year to 2021 * add contra metadata file * refactor pro micro overlay for new syntax --- app/boards/shields/contra/Kconfig.defconfig | 9 ++++ app/boards/shields/contra/Kconfig.shield | 5 +++ app/boards/shields/contra/contra.conf | 0 app/boards/shields/contra/contra.keymap | 46 +++++++++++++++++++++ app/boards/shields/contra/contra.overlay | 39 +++++++++++++++++ app/boards/shields/contra/contra.zmk.yml | 8 ++++ 6 files changed, 107 insertions(+) create mode 100644 app/boards/shields/contra/Kconfig.defconfig create mode 100644 app/boards/shields/contra/Kconfig.shield create mode 100644 app/boards/shields/contra/contra.conf create mode 100644 app/boards/shields/contra/contra.keymap create mode 100644 app/boards/shields/contra/contra.overlay create mode 100644 app/boards/shields/contra/contra.zmk.yml diff --git a/app/boards/shields/contra/Kconfig.defconfig b/app/boards/shields/contra/Kconfig.defconfig new file mode 100644 index 00000000000..8fde0970d1a --- /dev/null +++ b/app/boards/shields/contra/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_CONTRA + +config ZMK_KEYBOARD_NAME + default "Contra Keyboard" + +endif \ No newline at end of file diff --git a/app/boards/shields/contra/Kconfig.shield b/app/boards/shields/contra/Kconfig.shield new file mode 100644 index 00000000000..59412ff5c7b --- /dev/null +++ b/app/boards/shields/contra/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_CONTRA + def_bool $(shields_list_contains,contra) \ No newline at end of file diff --git a/app/boards/shields/contra/contra.conf b/app/boards/shields/contra/contra.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/contra/contra.keymap b/app/boards/shields/contra/contra.keymap new file mode 100644 index 00000000000..e24b502867d --- /dev/null +++ b/app/boards/shields/contra/contra.keymap @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define DEFAULT 0 +#define NUM_MODS 1 +#define BT_CTRL 2 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ENTER + &kp LCTRL &kp LGUI &kp LALT &kp BSLH &to DEFAULT &kp SPACE &trans &to NUM_MODS &kp LEFT &kp RIGHT &kp UP &kp DOWN + >; + }; + + num_mods { + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &kp TAB &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp PG_UP &kp LBKT &kp RBKT &kp BSLH + &kp LSHFT &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp EQUAL &kp PG_DN &kp HOME &kp END &kp ENTER + &kp LCTRL &kp LGUI &kp LALT &reset &to DEFAULT &kp SPACE &trans &mo BT_CTRL &kp LEFT &kp RIGHT &kp UP &kp DOWN + >; + }; + + bt_control { + bindings = < + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_PRV &bt BT_NXT &trans &trans + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/contra/contra.overlay b/app/boards/shields/contra/contra.overlay new file mode 100644 index 00000000000..21e19425b29 --- /dev/null +++ b/app/boards/shields/contra/contra.overlay @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 3 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/contra/contra.zmk.yml b/app/boards/shields/contra/contra.zmk.yml new file mode 100644 index 00000000000..da3a9447443 --- /dev/null +++ b/app/boards/shields/contra/contra.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: contra +name: Contra +type: shield +url: https://github.com/ai03-2725/Contra +requires: [pro_micro] +features: + - keys From 4c317e0febdb9b507ca202b03aebba05384c7646 Mon Sep 17 00:00:00 2001 From: Sam Mohr Date: Sun, 30 Jan 2022 15:55:22 -0500 Subject: [PATCH 0236/1130] Add support for the Clog (#1092) * Add support for the Clog * format DTSI definition * add a default keymap * update copyright year, reduce conf to minimum --- app/boards/shields/clog/Kconfig.defconfig | 19 ++++ app/boards/shields/clog/Kconfig.shield | 8 ++ app/boards/shields/clog/README.md | 8 ++ app/boards/shields/clog/clog.conf | 0 app/boards/shields/clog/clog.dtsi | 51 ++++++++++ app/boards/shields/clog/clog.keymap | 113 +++++++++++++++++++++ app/boards/shields/clog/clog.zmk.yml | 11 ++ app/boards/shields/clog/clog_left.overlay | 7 ++ app/boards/shields/clog/clog_right.overlay | 11 ++ 9 files changed, 228 insertions(+) create mode 100644 app/boards/shields/clog/Kconfig.defconfig create mode 100644 app/boards/shields/clog/Kconfig.shield create mode 100644 app/boards/shields/clog/README.md create mode 100644 app/boards/shields/clog/clog.conf create mode 100644 app/boards/shields/clog/clog.dtsi create mode 100644 app/boards/shields/clog/clog.keymap create mode 100644 app/boards/shields/clog/clog.zmk.yml create mode 100644 app/boards/shields/clog/clog_left.overlay create mode 100644 app/boards/shields/clog/clog_right.overlay diff --git a/app/boards/shields/clog/Kconfig.defconfig b/app/boards/shields/clog/Kconfig.defconfig new file mode 100644 index 00000000000..60ef47e4aab --- /dev/null +++ b/app/boards/shields/clog/Kconfig.defconfig @@ -0,0 +1,19 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_CLOG_LEFT + +config ZMK_KEYBOARD_NAME + default "Clog" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_CLOG_LEFT || SHIELD_CLOG_RIGHT + +config ZMK_SPLIT + default y + +endif diff --git a/app/boards/shields/clog/Kconfig.shield b/app/boards/shields/clog/Kconfig.shield new file mode 100644 index 00000000000..2301af94f1a --- /dev/null +++ b/app/boards/shields/clog/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_CLOG_LEFT + def_bool $(shields_list_contains,clog_left) + +config SHIELD_CLOG_RIGHT + def_bool $(shields_list_contains,clog_right) diff --git a/app/boards/shields/clog/README.md b/app/boards/shields/clog/README.md new file mode 100644 index 00000000000..6b63889a852 --- /dev/null +++ b/app/boards/shields/clog/README.md @@ -0,0 +1,8 @@ +# The Clog + +The Clog is a 34-key choc v1 split board by S'mores. This firmware works for both the [Clog][clog], +as well as the [Sephirette][sephirette], the MX version. You can purchase kits for both boards +at smoresboards.com. + +[clog]: https://github.com/smores56/clog +[sephirette]: https://github.com/smores56/sephirette diff --git a/app/boards/shields/clog/clog.conf b/app/boards/shields/clog/clog.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/clog/clog.dtsi b/app/boards/shields/clog/clog.dtsi new file mode 100644 index 00000000000..279431006d3 --- /dev/null +++ b/app/boards/shields/clog/clog.dtsi @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) RC(0,21) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + + input-gpios + = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; +}; diff --git a/app/boards/shields/clog/clog.keymap b/app/boards/shields/clog/clog.keymap new file mode 100644 index 00000000000..885404f7325 --- /dev/null +++ b/app/boards/shields/clog/clog.keymap @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2022 The ZMK Contributors +* +* SPDX-License-Identifier: MIT +*/ + +#include +#include +#include + +#define MAIN 0 +#define SYM 1 +#define NAV 2 +#define BT 3 + +&mt { + flavor = "tap-preferred"; + tapping_term_ms = <140>; +}; + +/ { + combos { + compatible = "zmk,combos"; + + combo_esc { + timeout-ms = <100>; + key-positions = <21 22>; + bindings = <&kp ESC>; + }; + + combo_tab { + timeout-ms = <100>; + key-positions = <22 23>; + bindings = <&kp TAB>; + }; + + combo_minus { + timeout-ms = <100>; + key-positions = <26 27>; + bindings = <&kp MINUS>; + }; + + combo_underscore { + timeout-ms = <100>; + key-positions = <26 28>; + bindings = <&kp UNDERSCORE>; + }; + + combo_colon { + timeout-ms = <100>; + key-positions = <7 8>; + bindings = <&kp COLON>; + }; + + combo_semicolon { + timeout-ms = <100>; + key-positions = <6 8>; + bindings = <&kp SEMICOLON>; + }; + + combo_backslash { + timeout-ms = <100>; + key-positions = <27 28>; + bindings = <&kp BSLH>; + }; + + combo_grave { + timeout-ms = <100>; + key-positions = <8 9>; + bindings = <&kp GRAVE>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + MAIN_layer { + bindings = < + &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O + &kp Q &kp A &kp S &kp D < SYM F &kp G &kp H < SYM J &kp K &kp L &kp SQT &kp P + &mt LSHFT Z &mt LALT X &mt LCTRL C &mt LGUI V &kp B &kp N &mt RGUI M &mt RCTRL COMMA &mt RALT DOT &mt RSHFT FSLH + < BT ENTER < NAV SPACE &sk RSHFT &kp BSPC + >; + }; + + SYM_layer { + bindings = < + &kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH + &kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none + &kp CARET &kp N4 &kp N5 &kp N6 &kp PLUS &kp TILDE &kp LBKT &kp RBKT &kp AT &kp PRCNT + &kp DOT &kp N0 &trans &none + >; + }; + + NAV_layer { + bindings = < + &kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9 + &kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12 + &kp HOME &kp PG_DN &kp PG_UP &kp END &kp LS(LC(TAB)) &kp CAPS &kp F4 &kp F5 &kp F6 &kp F11 + &none &none &trans &kp DEL + >; + }; + + BT_layer { + bindings = < + &none &none &none &none &none &none &none &none + &none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none + &none &none &none &none &none &none &bt BT_CLR &none &none &none + &none &none &none &none + >; + }; + }; +}; diff --git a/app/boards/shields/clog/clog.zmk.yml b/app/boards/shields/clog/clog.zmk.yml new file mode 100644 index 00000000000..f71df0df4e0 --- /dev/null +++ b/app/boards/shields/clog/clog.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: clog +name: Clog +type: shield +url: https://github.com/smores56/clog +requires: [pro_micro] +features: + - keys +siblings: + - clog_left + - clog_right diff --git a/app/boards/shields/clog/clog_left.overlay b/app/boards/shields/clog/clog_left.overlay new file mode 100644 index 00000000000..582460252a6 --- /dev/null +++ b/app/boards/shields/clog/clog_left.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "clog.dtsi" diff --git a/app/boards/shields/clog/clog_right.overlay b/app/boards/shields/clog/clog_right.overlay new file mode 100644 index 00000000000..0dc5d64f759 --- /dev/null +++ b/app/boards/shields/clog/clog_right.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "clog.dtsi" + +&default_transform { + col-offset = <17>; +}; From ed48d1ae899bd774f70eedf137c80c38c9f45cea Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 24 Jan 2022 13:43:45 -0500 Subject: [PATCH 0237/1130] fix(ble): Restore BLE SC passkey entry for pairing. * Handle capturing numeric inputs while pairing and sending final passkey once six digits entered. --- app/include/zmk/ble.h | 3 +- app/src/ble.c | 95 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 20 deletions(-) diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index f6f6e191cd1..0bdbab3838d 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -21,8 +21,7 @@ bool zmk_ble_active_profile_is_connected(); char *zmk_ble_active_profile_name(); int zmk_ble_unpair_all(); -bool zmk_ble_handle_key_user(struct zmk_key_event *key_event); #if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) void zmk_ble_set_peripheral_addr(bt_addr_le_t *addr); -#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) */ \ No newline at end of file +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) */ diff --git a/app/src/ble.c b/app/src/ble.c index a9f2afe9ab8..68061129a0d 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -36,10 +36,24 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#define IS_HOST_PERIPHERAL \ + (!IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) +#define IS_SPLIT_PERIPHERAL \ + (IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) + +#define DO_PASSKEY_ENTRY (IS_ENABLED(CONFIG_ZMK_BLE_PASSKEY_ENTRY) && !IS_SPLIT_PERIPHERAL) + +#if DO_PASSKEY_ENTRY +#include + +#define PASSKEY_DIGITS 6 + static struct bt_conn *auth_passkey_entry_conn; -static uint8_t passkey_entries[6] = {0, 0, 0, 0, 0, 0}; +static uint8_t passkey_entries[PASSKEY_DIGITS] = {}; static uint8_t passkey_digit = 0; +#endif + #if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) #define PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - 1) #else @@ -66,11 +80,6 @@ static uint8_t active_profile; BUILD_ASSERT(DEVICE_NAME_LEN <= 16, "ERROR: BLE device name is too long. Max length: 16"); -#define IS_HOST_PERIPHERAL \ - (!IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) -#define IS_SPLIT_PERIPHERAL \ - (IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) - static const struct bt_data zmk_ble_ad[] = { #if IS_HOST_PERIPHERAL BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN), @@ -456,7 +465,7 @@ static void auth_passkey_display(struct bt_conn *conn, unsigned int passkey) { } */ -#ifdef CONFIG_ZMK_BLE_PASSKEY_ENTRY +#if DO_PASSKEY_ENTRY static void auth_passkey_entry(struct bt_conn *conn) { char addr[BT_ADDR_LE_STR_LEN]; @@ -464,6 +473,7 @@ static void auth_passkey_entry(struct bt_conn *conn) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); LOG_DBG("Passkey entry requested for %s", log_strdup(addr)); + passkey_digit = 0; auth_passkey_entry_conn = bt_conn_ref(conn); } @@ -474,12 +484,14 @@ static void auth_cancel(struct bt_conn *conn) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); +#if DO_PASSKEY_ENTRY if (auth_passkey_entry_conn) { bt_conn_unref(auth_passkey_entry_conn); auth_passkey_entry_conn = NULL; } passkey_digit = 0; +#endif LOG_DBG("Pairing cancelled: %s", log_strdup(addr)); } @@ -532,7 +544,7 @@ static struct bt_conn_auth_cb zmk_ble_auth_cb_display = { .pairing_complete = auth_pairing_complete, // .passkey_display = auth_passkey_display, -#ifdef CONFIG_ZMK_BLE_PASSKEY_ENTRY +#if DO_PASSKEY_ENTRY .passkey_entry = auth_passkey_entry, #endif .cancel = auth_cancel, @@ -612,32 +624,79 @@ int zmk_ble_unpair_all() { return resp; }; -bool zmk_ble_handle_key_user(struct zmk_key_event *key_event) { - zmk_key_t key = key_event->key; +#if DO_PASSKEY_ENTRY + +static bool zmk_ble_numeric_usage_to_value(const zmk_key_t key, const zmk_key_t one, + const zmk_key_t zero, uint32_t *value) { + if (key < one || key > zero) { + return false; + } + + *value = (key == zero) ? 0 : (key - one + 1); + return true; +} + +static int zmk_ble_handle_key_user(struct zmk_keycode_state_changed *event) { + zmk_key_t key = event->keycode; + + LOG_DBG("key %d", key); if (!auth_passkey_entry_conn) { - return true; + LOG_DBG("No connection for passkey entry"); + return ZMK_EV_EVENT_BUBBLE; + } + + if (!event->state) { + LOG_DBG("Key released, ignoring"); + return ZMK_EV_EVENT_BUBBLE; } - if (key < NUMBER_1 || key > NUMBER_0) { - return true; + if (key == HID_USAGE_KEY_KEYBOARD_ESCAPE) { + bt_conn_auth_cancel(auth_passkey_entry_conn); + return ZMK_EV_EVENT_HANDLED; } - uint32_t val = (key == NUMBER_0) ? 0 : (key - NUMBER_1 + 1); + uint32_t val; + if (!(zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION, + HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS, &val) || + zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYPAD_1_AND_END, + HID_USAGE_KEY_KEYPAD_0_AND_INSERT, &val))) { + LOG_DBG("Key not a number, ignoring"); + return ZMK_EV_EVENT_BUBBLE; + } passkey_entries[passkey_digit++] = val; + LOG_DBG("value entered: %d, digits collected so far: %d", val, passkey_digit); - if (passkey_digit == 6) { + if (passkey_digit == PASSKEY_DIGITS) { uint32_t passkey = 0; - for (int i = 5; i >= 0; i--) { - passkey = (passkey * 10) + val; + for (int i = 0; i < PASSKEY_DIGITS; i++) { + passkey = (passkey * 10) + passkey_entries[i]; } + + LOG_DBG("Final passkey: %d", passkey); bt_conn_auth_passkey_entry(auth_passkey_entry_conn, passkey); bt_conn_unref(auth_passkey_entry_conn); auth_passkey_entry_conn = NULL; } - return false; + return ZMK_EV_EVENT_HANDLED; } +static int zmk_ble_listener(const zmk_event_t *eh) { + struct zmk_keycode_state_changed *kc_state; + + kc_state = as_zmk_keycode_state_changed(eh); + + if (kc_state != NULL) { + return zmk_ble_handle_key_user(kc_state); + } + + return 0; +} + +ZMK_LISTENER(zmk_ble, zmk_ble_listener); +ZMK_SUBSCRIPTION(zmk_ble, zmk_keycode_state_changed); +#endif /* DO_PASSKEY_ENTRY */ + SYS_INIT(zmk_ble_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); From ac3c3170bd70f5186544495cb5ced7bfbf3f6764 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Dec 2021 05:06:40 +0000 Subject: [PATCH 0238/1130] chore(deps-dev): bump eslint-plugin-react from 7.24.0 to 7.28.0 in /docs Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.24.0 to 7.28.0. - [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases) - [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.24.0...v7.28.0) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 877 +++++++++++++---------------------------- docs/package.json | 2 +- 2 files changed, 272 insertions(+), 607 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index af50fa602a0..6fe700d9c08 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -32,7 +32,7 @@ "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", - "eslint-plugin-react": "^7.23.2", + "eslint-plugin-react": "^7.28.0", "json-schema-to-typescript": "^10.1.3", "mustache": "^4.2.0", "null-loader": "^4.0.0", @@ -8360,16 +8360,16 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" @@ -8378,48 +8378,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-includes/node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/es-abstract/node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -8445,15 +8403,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" @@ -10807,23 +10764,30 @@ } }, "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dependencies": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -11448,29 +11412,31 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", "doctrine": "^2.1.0", - "has": "^1.0.3", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -11485,6 +11451,15 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", @@ -11498,6 +11473,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -12653,6 +12637,21 @@ "node": ">=6" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -12931,6 +12930,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "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", @@ -13731,7 +13744,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -13911,9 +13923,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "engines": { "node": ">= 0.4" }, @@ -14223,12 +14235,12 @@ "dev": true }, "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14258,6 +14270,14 @@ "node": ">=6" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -14267,9 +14287,12 @@ } }, "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -14296,6 +14319,17 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -15619,9 +15653,9 @@ } }, "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15678,71 +15712,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.entries/node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "es-abstract": "^1.19.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries/node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -15751,48 +15742,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.fromentries/node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries/node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.getownpropertydescriptors": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", @@ -15809,41 +15758,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "node_modules/object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors/node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "engines": { - "node": ">= 0.4" + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15861,13 +15783,13 @@ } }, "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -15876,46 +15798,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.values/node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values/node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -19385,7 +19267,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -19872,14 +19753,14 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", @@ -19890,48 +19771,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.matchall/node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.matchall/node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -21050,30 +20889,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/util.promisify/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -28620,50 +28435,16 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - } - } - } + "is-string": "^1.0.7" } }, "array-union": { @@ -28682,15 +28463,14 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" } }, "asap": { @@ -30469,23 +30249,30 @@ } }, "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-module-lexer": { @@ -31021,23 +30808,25 @@ } }, "eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", "doctrine": "^2.1.0", - "has": "^1.0.3", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" }, "dependencies": { "doctrine": { @@ -31049,6 +30838,12 @@ "esutils": "^2.0.2" } }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, "resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", @@ -31058,6 +30853,12 @@ "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -31928,6 +31729,15 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -32141,6 +31951,14 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -32794,7 +32612,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -32909,9 +32726,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-ci": { "version": "2.0.0", @@ -33121,12 +32938,12 @@ "dev": true }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-regexp": { @@ -33144,15 +32961,23 @@ "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -33167,6 +32992,14 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -34199,9 +34032,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-is": { "version": "1.1.5", @@ -34237,90 +34070,25 @@ } }, "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - } + "es-abstract": "^1.19.1" } }, "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - } + "es-abstract": "^1.19.1" } }, "object.getownpropertydescriptors": { @@ -34331,36 +34099,16 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" - } + } + }, + "object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, "object.pick": { @@ -34372,43 +34120,13 @@ } }, "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" - } + "es-abstract": "^1.19.1" } }, "obuf": { @@ -37045,7 +36763,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -37436,51 +37153,19 @@ } }, "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - } } }, "string.prototype.trimend": { @@ -38287,26 +37972,6 @@ "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "utila": { diff --git a/docs/package.json b/docs/package.json index f8b65ceeac9..13add5d1ab4 100644 --- a/docs/package.json +++ b/docs/package.json @@ -51,7 +51,7 @@ "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", - "eslint-plugin-react": "^7.23.2", + "eslint-plugin-react": "^7.28.0", "json-schema-to-typescript": "^10.1.3", "mustache": "^4.2.0", "null-loader": "^4.0.0", From 70bb7c93349344e0990f12282abfcd8d00ba7208 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Nov 2021 04:26:22 +0000 Subject: [PATCH 0239/1130] feat(behaviors): `&key_repeat` behavior + tests. * Add new `&key_repeat` behavior that captures and re-sends the most recently triggered keycode. Closes: #853 --- app/CMakeLists.txt | 1 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/key_repeat.dtsi | 19 +++ .../behaviors/zmk,behavior-key-repeat.yaml | 13 ++ app/src/behaviors/behavior_key_repeat.c | 124 ++++++++++++++++++ app/tests/key-repeat/behavior_keymap.dtsi | 17 +++ .../events.patterns | 2 + .../keycode_events.snapshot | 12 ++ .../native_posix.keymap | 15 +++ .../events.patterns | 2 + .../keycode_events.snapshot | 8 ++ .../native_posix.keymap | 13 ++ .../events.patterns | 2 + .../keycode_events.snapshot | 0 .../native_posix.keymap | 11 ++ docs/docs/behaviors/key-repeat.md | 38 ++++++ 16 files changed, 278 insertions(+) create mode 100644 app/dts/behaviors/key_repeat.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-key-repeat.yaml create mode 100644 app/src/behaviors/behavior_key_repeat.c create mode 100644 app/tests/key-repeat/behavior_keymap.dtsi create mode 100644 app/tests/key-repeat/ignore-other-usage-page-events/events.patterns create mode 100644 app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot create mode 100644 app/tests/key-repeat/ignore-other-usage-page-events/native_posix.keymap create mode 100644 app/tests/key-repeat/press-and-release-after-key-usage/events.patterns create mode 100644 app/tests/key-repeat/press-and-release-after-key-usage/keycode_events.snapshot create mode 100644 app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap create mode 100644 app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/events.patterns create mode 100644 app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/keycode_events.snapshot create mode 100644 app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix.keymap create mode 100644 docs/docs/behaviors/key-repeat.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 970c6c204ae..c5b74aa536d 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -48,6 +48,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) + target_sources(app PRIVATE src/behaviors/behavior_key_repeat.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) target_sources(app PRIVATE src/behaviors/behavior_outputs.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 5b5f72b4ee3..06489616a66 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -15,3 +15,4 @@ #include #include #include +#include diff --git a/app/dts/behaviors/key_repeat.dtsi b/app/dts/behaviors/key_repeat.dtsi new file mode 100644 index 00000000000..aa8ffa0444c --- /dev/null +++ b/app/dts/behaviors/key_repeat.dtsi @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + behaviors { + /omit-if-no-ref/ key_repeat: behavior_key_repeat { + compatible = "zmk,behavior-key-repeat"; + label = "KEY_REPEAT"; + #binding-cells = <0>; + usage-pages = ; + }; + }; +}; + diff --git a/app/dts/bindings/behaviors/zmk,behavior-key-repeat.yaml b/app/dts/bindings/behaviors/zmk,behavior-key-repeat.yaml new file mode 100644 index 00000000000..10b3aa047fc --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-key-repeat.yaml @@ -0,0 +1,13 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Key repeat behavior + +compatible: "zmk,behavior-key-repeat" + +include: zero_param.yaml + +properties: + usage-pages: + type: array + required: true diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c new file mode 100644 index 00000000000..b2e28a6ee26 --- /dev/null +++ b/app/src/behaviors/behavior_key_repeat.c @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_key_repeat + +#include +#include +#include +#include + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +struct behavior_key_repeat_config { + uint8_t index; + uint8_t usage_pages_count; + uint16_t usage_pages[]; +}; + +struct behavior_key_repeat_data { + struct zmk_keycode_state_changed last_keycode_pressed; + struct zmk_keycode_state_changed current_keycode_pressed; +}; + +static int on_key_repeat_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + struct behavior_key_repeat_data *data = dev->data; + + if (data->last_keycode_pressed.usage_page == 0) { + return ZMK_BEHAVIOR_OPAQUE; + } + + memcpy(&data->current_keycode_pressed, &data->last_keycode_pressed, + sizeof(struct zmk_keycode_state_changed)); + data->current_keycode_pressed.timestamp = k_uptime_get(); + + ZMK_EVENT_RAISE(new_zmk_keycode_state_changed(data->current_keycode_pressed)); + + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_key_repeat_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + struct behavior_key_repeat_data *data = dev->data; + + if (data->current_keycode_pressed.usage_page == 0) { + return ZMK_BEHAVIOR_OPAQUE; + } + + data->current_keycode_pressed.timestamp = k_uptime_get(); + data->current_keycode_pressed.state = false; + + ZMK_EVENT_RAISE(new_zmk_keycode_state_changed(data->current_keycode_pressed)); + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_key_repeat_driver_api = { + .binding_pressed = on_key_repeat_binding_pressed, + .binding_released = on_key_repeat_binding_released, +}; + +static int key_repeat_keycode_state_changed_listener(const zmk_event_t *eh); + +ZMK_LISTENER(behavior_key_repeat, key_repeat_keycode_state_changed_listener); +ZMK_SUBSCRIPTION(behavior_key_repeat, zmk_keycode_state_changed); + +static const struct device *devs[DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT)]; + +static int key_repeat_keycode_state_changed_listener(const zmk_event_t *eh) { + struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); + if (ev == NULL || !ev->state) { + return ZMK_EV_EVENT_BUBBLE; + } + + for (int i = 0; i < DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT); i++) { + const struct device *dev = devs[i]; + if (dev == NULL) { + continue; + } + + struct behavior_key_repeat_data *data = dev->data; + const struct behavior_key_repeat_config *config = dev->config; + + for (int u = 0; u < config->usage_pages_count; u++) { + if (config->usage_pages[u] == ev->usage_page) { + memcpy(&data->last_keycode_pressed, ev, sizeof(struct zmk_keycode_state_changed)); + break; + } + } + } + + return ZMK_EV_EVENT_BUBBLE; +} + +static int behavior_key_repeat_init(const struct device *dev) { + const struct behavior_key_repeat_config *config = dev->config; + devs[config->index] = dev; + return 0; +} + +#define KR_INST(n) \ + static struct behavior_key_repeat_data behavior_key_repeat_data_##n = {}; \ + static struct behavior_key_repeat_config behavior_key_repeat_config_##n = { \ + .index = n, \ + .usage_pages = DT_INST_PROP(n, usage_pages), \ + .usage_pages_count = DT_INST_PROP_LEN(n, usage_pages), \ + }; \ + DEVICE_DT_INST_DEFINE(n, behavior_key_repeat_init, device_pm_control_nop, \ + &behavior_key_repeat_data_##n, &behavior_key_repeat_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_key_repeat_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KR_INST) + +#endif diff --git a/app/tests/key-repeat/behavior_keymap.dtsi b/app/tests/key-repeat/behavior_keymap.dtsi new file mode 100644 index 00000000000..93b6d0690e2 --- /dev/null +++ b/app/tests/key-repeat/behavior_keymap.dtsi @@ -0,0 +1,17 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &key_repeat &kp A + &kp B &kp C_VOL_UP + >; + }; + }; +}; diff --git a/app/tests/key-repeat/ignore-other-usage-page-events/events.patterns b/app/tests/key-repeat/ignore-other-usage-page-events/events.patterns new file mode 100644 index 00000000000..794719239fc --- /dev/null +++ b/app/tests/key-repeat/ignore-other-usage-page-events/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p \ No newline at end of file diff --git a/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot b/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot new file mode 100644 index 00000000000..c06d94a5ddc --- /dev/null +++ b/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x0c keycode 0xe9 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x0c keycode 0xe9 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/key-repeat/ignore-other-usage-page-events/native_posix.keymap b/app/tests/key-repeat/ignore-other-usage-page-events/native_posix.keymap new file mode 100644 index 00000000000..b042e8e0977 --- /dev/null +++ b/app/tests/key-repeat/ignore-other-usage-page-events/native_posix.keymap @@ -0,0 +1,15 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-after-key-usage/events.patterns b/app/tests/key-repeat/press-and-release-after-key-usage/events.patterns new file mode 100644 index 00000000000..794719239fc --- /dev/null +++ b/app/tests/key-repeat/press-and-release-after-key-usage/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-after-key-usage/keycode_events.snapshot b/app/tests/key-repeat/press-and-release-after-key-usage/keycode_events.snapshot new file mode 100644 index 00000000000..d568d378d83 --- /dev/null +++ b/app/tests/key-repeat/press-and-release-after-key-usage/keycode_events.snapshot @@ -0,0 +1,8 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap new file mode 100644 index 00000000000..98c8f6f8dbd --- /dev/null +++ b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/events.patterns b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/events.patterns new file mode 100644 index 00000000000..794719239fc --- /dev/null +++ b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p \ No newline at end of file diff --git a/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/keycode_events.snapshot b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/keycode_events.snapshot new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix.keymap b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix.keymap new file mode 100644 index 00000000000..9ff64468bbd --- /dev/null +++ b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/docs/docs/behaviors/key-repeat.md b/docs/docs/behaviors/key-repeat.md new file mode 100644 index 00000000000..5217bce8b5b --- /dev/null +++ b/docs/docs/behaviors/key-repeat.md @@ -0,0 +1,38 @@ +--- +title: Key Repeat Behavior +sidebar_label: Key Repeat +--- + +## Summary + +The key repeat behavior when triggered will send whatever keycode was last sent/triggered. + +### Behavior Binding + +- Reference: `&key_repeat` + +Example: + +``` +&key_repeat +``` + +### Configuration + +#### Usage Pages + +By default, the key repeat will only track the last pressed key from the HID "Key" usage page, and ignore events from other usages, e.g. Consumer page. + +If you'd rather have the repeat also capture and send Consumer page usages, you can update the existing behavior: + +``` +&key_repeat { + usage-pages = ; +}; + +/ { + keymap { + ... + }; +}; +``` From 52b1fd5dd3f1cb260cd0fba28c4b5aa23dd3d0f0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Nov 2021 15:41:22 +0000 Subject: [PATCH 0240/1130] fix(behaviors): Capture mods for `&key_repeat` * When tracking the last keycode, also capture the currently held explicit modifiers to use when replaying the key later. --- app/src/behaviors/behavior_key_repeat.c | 2 ++ app/tests/key-repeat/behavior_keymap.dtsi | 2 +- .../events.patterns | 2 ++ .../keycode_events.snapshot | 12 ++++++++++++ .../native_posix.keymap | 15 +++++++++++++++ 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 app/tests/key-repeat/press-and-release-with-explicit-modifiers/events.patterns create mode 100644 app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot create mode 100644 app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix.keymap diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index b2e28a6ee26..22de37d9731 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -93,6 +94,7 @@ static int key_repeat_keycode_state_changed_listener(const zmk_event_t *eh) { for (int u = 0; u < config->usage_pages_count; u++) { if (config->usage_pages[u] == ev->usage_page) { memcpy(&data->last_keycode_pressed, ev, sizeof(struct zmk_keycode_state_changed)); + data->last_keycode_pressed.implicit_modifiers |= zmk_hid_get_explicit_mods(); break; } } diff --git a/app/tests/key-repeat/behavior_keymap.dtsi b/app/tests/key-repeat/behavior_keymap.dtsi index 93b6d0690e2..24902fc6278 100644 --- a/app/tests/key-repeat/behavior_keymap.dtsi +++ b/app/tests/key-repeat/behavior_keymap.dtsi @@ -10,7 +10,7 @@ default_layer { bindings = < &key_repeat &kp A - &kp B &kp C_VOL_UP + &kp LCTRL &kp C_VOL_UP >; }; }; diff --git a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/events.patterns b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/events.patterns new file mode 100644 index 00000000000..794719239fc --- /dev/null +++ b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot new file mode 100644 index 00000000000..628214a4582 --- /dev/null +++ b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00 +press: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix.keymap b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix.keymap new file mode 100644 index 00000000000..ab9622e4447 --- /dev/null +++ b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix.keymap @@ -0,0 +1,15 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file From c74ae45e1721bc9e63332c07fd0654c0e4126be1 Mon Sep 17 00:00:00 2001 From: Temur Beissov Date: Mon, 31 Jan 2022 22:02:19 +0300 Subject: [PATCH 0241/1130] Lotus58 (#1090) * lotus58 shield added * lotus58 default keymap * lotus58 keymap legend update * Lotus58 keymap fix * lotus58 keymap update * lotus58 kb name fixed * lotus58 keymap update PR fix --- app/boards/shields/lotus58/Kconfig.defconfig | 55 +++++++++ app/boards/shields/lotus58/Kconfig.shield | 8 ++ app/boards/shields/lotus58/lotus58.conf | 9 ++ app/boards/shields/lotus58/lotus58.dtsi | 89 +++++++++++++++ app/boards/shields/lotus58/lotus58.keymap | 104 ++++++++++++++++++ app/boards/shields/lotus58/lotus58.zmk.yml | 14 +++ .../shields/lotus58/lotus58_left.overlay | 22 ++++ .../shields/lotus58/lotus58_right.overlay | 26 +++++ 8 files changed, 327 insertions(+) create mode 100644 app/boards/shields/lotus58/Kconfig.defconfig create mode 100644 app/boards/shields/lotus58/Kconfig.shield create mode 100644 app/boards/shields/lotus58/lotus58.conf create mode 100644 app/boards/shields/lotus58/lotus58.dtsi create mode 100644 app/boards/shields/lotus58/lotus58.keymap create mode 100644 app/boards/shields/lotus58/lotus58.zmk.yml create mode 100644 app/boards/shields/lotus58/lotus58_left.overlay create mode 100644 app/boards/shields/lotus58/lotus58_right.overlay diff --git a/app/boards/shields/lotus58/Kconfig.defconfig b/app/boards/shields/lotus58/Kconfig.defconfig new file mode 100644 index 00000000000..f0d35f4dd5e --- /dev/null +++ b/app/boards/shields/lotus58/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_LOTUS58_LEFT + +config ZMK_KEYBOARD_NAME + default "Lotus58" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_LOTUS58_LEFT || SHIELD_LOTUS58_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES_MAX + default 128 + +config LVGL_VER_RES_MAX + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/lotus58/Kconfig.shield b/app/boards/shields/lotus58/Kconfig.shield new file mode 100644 index 00000000000..dbf7ba010d6 --- /dev/null +++ b/app/boards/shields/lotus58/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_LOTUS58_LEFT + def_bool $(shields_list_contains,lotus58_left) + +config SHIELD_LOTUS58_RIGHT + def_bool $(shields_list_contains,lotus58_right) diff --git a/app/boards/shields/lotus58/lotus58.conf b/app/boards/shields/lotus58/lotus58.conf new file mode 100644 index 00000000000..193f1ab477d --- /dev/null +++ b/app/boards/shields/lotus58/lotus58.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the Lotus58 OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi new file mode 100644 index 00000000000..fb0d174f2a6 --- /dev/null +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | SW30 | | SW30 | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(4,0) RC(4,11) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/lotus58/lotus58.keymap b/app/boards/shields/lotus58/lotus58.keymap new file mode 100644 index 00000000000..cfe4342cf8a --- /dev/null +++ b/app/boards/shields/lotus58/lotus58.keymap @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + combos { + compatible = "zmk,combos"; + combo_dsklg { + timeout-ms = <100>; + key-positions = <24 52>; + layers = <0>; + bindings = <&kp LGUI>; + }; + }; + + behaviors { + fofunc: four_ffour { + compatible = "zmk,behavior-mod-morph"; + label = "FOUR_FUNCFOUR"; + #binding-cells = <0>; + bindings = <&kp N4>, <&kp F4>; + mods = <(MOD_LALT|MOD_RALT)>; + }; + sleft: s_left { + compatible = "zmk,behavior-mod-morph"; + label = "S_LEFT"; + #binding-cells = <0>; + bindings = <&kp S>, <&kp LEFT>; + mods = <(MOD_LGUI|MOD_RGUI)>; + }; + fright: f_right { + compatible = "zmk,behavior-mod-morph"; + label = "R_RIGHT"; + #binding-cells = <0>; + bindings = <&kp F>, <&kp RIGHT>; + mods = <(MOD_LGUI|MOD_RGUI)>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// 0| ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = | 11 +// 12| TAB | Q | W | E | R | T | | Y | U | I | O | P | [ | 23 +// 24| SFT | A | S | D | F | G | RESET | | RESET | H | J | K | L | ; | ' SFT | 37 +// 38| CTRL | Z | X | C | V | B | MUTE | | PLAY | N | M | , | . | / | \ CTRL| 51 +// 52 |ENT RS| ALT | SPACE|DELETE LW| |ENTER RS| BSPC | ] LW | RGUI | 59 + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &fofunc &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp EQUAL +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT +&kp LSHFT &kp A &sleft &kp D &fright &kp G &reset &reset &kp H &kp J &kp K &kp L &kp SEMI &mt RSHFT SQT +&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_MUTE &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RCTRL BSLH + < 2 RET &kp LALT &kp SPACE < 1 DEL < 2 RET &kp BSPC < 1 RBKT &kp LGUI + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP &inc_dec_kp PG_UP PG_DN>; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ` | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | +// | | ! | HOME| ^ | END | % | | VOL^ | PGUP | INS | ^ | PSCR | - | +// | | # | <- | v | -> | $ | | | | VOLv | <- | ^ | -> | ~ | _ | +// | | @ | - | ( | ) | & | | | | MUTE | PGDN | v | : | * | | | +// | F11 | | | | | | | | F12 | + bindings = < +&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp PLUS +&trans &kp EXCL &kp HOME &kp UP &kp END &kp PRCNT &kp C_VOL_UP &kp PG_UP &kp INS &kp CARET &kp PSCRN &kp MINUS +&trans &kp HASH &kp LEFT &kp DOWN &kp RIGHT &kp DLLR &trans &trans &kp C_VOL_DN &kp LEFT &kp UP &kp RIGHT &kp TILDE &kp UNDER +&trans &kp AT &kp MINUS &kp LBRC &kp RBRC &kp AMPS &trans &trans &kp C_MUTE &kp PG_DN &kp DOWN &kp COLON &kp STAR &kp PIPE + &kp F11 &trans &trans &trans &trans &trans &trans &kp F12 + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP &inc_dec_kp C_NEXT C_PREV>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// |BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | |OUTTOG|OUTUSB| OUTBT | | RESET | FLASH | +// | | INS | PSCR | GUI | RESET | | | PGUP | | ^ | | | | +// | | ALT | CTRL | SHIFT | FLASH | CAPS | | | | PGDN | <- | v | -> | DEL | BSPC | +// | | UNDO | CUT | COPY | PASTE | | | | | | |> | <|<| | |>|> | | | +// | | | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG &out OUT_USB &out OUT_BLE &trans &reset &bootloader +&trans &kp INS &kp PSCRN &kp K_CMENU &reset &trans &kp PG_UP &trans &kp UP &trans &trans &trans +&trans &kp LALT &kp LCTRL &kp LSHFT &bootloader &kp CLCK &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC +&trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &kp C_PP &kp C_PREV &kp C_NEXT &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; diff --git a/app/boards/shields/lotus58/lotus58.zmk.yml b/app/boards/shields/lotus58/lotus58.zmk.yml new file mode 100644 index 00000000000..5cabbd0ee4e --- /dev/null +++ b/app/boards/shields/lotus58/lotus58.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: lotus58 +name: Lotus58 +type: shield +url: https://github.com/TweetyDaBird/Lotus58 +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder +siblings: + - lotus58_left + - lotus58_right diff --git a/app/boards/shields/lotus58/lotus58_left.overlay b/app/boards/shields/lotus58/lotus58_left.overlay new file mode 100644 index 00000000000..9755ae0b3ea --- /dev/null +++ b/app/boards/shields/lotus58/lotus58_left.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "lotus58.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/lotus58/lotus58_right.overlay b/app/boards/shields/lotus58/lotus58_right.overlay new file mode 100644 index 00000000000..dffcaeb1817 --- /dev/null +++ b/app/boards/shields/lotus58/lotus58_right.overlay @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "lotus58.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; From 47f873b038c6468d29d97f855dfc05818f660418 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 20 Dec 2020 09:49:42 -0500 Subject: [PATCH 0242/1130] feature(split): behavior locality support. * GATT characteristic allowing passng data + behavior label to invoke the behavior on the peripheral side. * Behaviors have a locality setting to specify where they run. * Build reset/power/RGB on peripheral. --- app/CMakeLists.txt | 4 +- app/dts/behaviors/ext_power.dtsi | 2 +- app/dts/behaviors/reset.dtsi | 2 +- app/dts/behaviors/rgb_underglow.dtsi | 2 +- app/include/drivers/behavior.h | 46 ++++++++++++++ .../zmk/events/position_state_changed.h | 11 +++- app/include/zmk/keymap.h | 5 +- app/include/zmk/split/bluetooth/central.h | 8 +++ app/include/zmk/split/bluetooth/service.h | 14 +++++ app/include/zmk/split/bluetooth/uuid.h | 1 + app/src/behaviors/behavior_ext_power.c | 1 + app/src/behaviors/behavior_reset.c | 1 + app/src/behaviors/behavior_rgb_underglow.c | 1 + app/src/keymap.c | 61 ++++++++++++++++--- app/src/kscan.c | 9 ++- app/src/split/bluetooth/central.c | 49 ++++++++++++++- app/src/split/bluetooth/service.c | 50 +++++++++++++++ 17 files changed, 247 insertions(+), 20 deletions(-) create mode 100644 app/include/zmk/split/bluetooth/central.h diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index c5b74aa536d..1e153fb630d 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -42,9 +42,10 @@ target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/ble_active_profile_changed.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/battery_state_changed.c) target_sources_ifdef(CONFIG_USB app PRIVATE src/events/usb_conn_state_changed.c) +target_sources(app PRIVATE src/behaviors/behavior_reset.c) +target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) - target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) @@ -57,7 +58,6 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) target_sources(app PRIVATE src/behaviors/behavior_none.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) - target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) target_sources(app PRIVATE src/combo.c) target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/keymap.c) diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index 742e33aef8a..abb7f2ffe66 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -8,7 +8,7 @@ behaviors { /omit-if-no-ref/ ext_power: behavior_ext_power { compatible = "zmk,behavior-ext-power"; - label = "EXT_POWER_BEHAVIOR"; + label = "EXTPOWER"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index c720bc88f2f..e4ba56588cf 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -16,7 +16,7 @@ /omit-if-no-ref/ bootloader: behavior_reset_dfu { compatible = "zmk,behavior-reset"; - label = "BOOTLOADER_RESET"; + label = "BOOTLOAD"; type = ; #binding-cells = <0>; }; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index 60bdb3aaf31..265a1a52fe8 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -8,7 +8,7 @@ behaviors { /omit-if-no-ref/ rgb_ug: behavior_rgb_underglow { compatible = "zmk,behavior-rgb-underglow"; - label = "RGB_UNDERGLOW"; + label = "RGB_UG"; #binding-cells = <2>; }; }; diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 2bdffea5876..fcb24f6fbbd 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -8,6 +8,8 @@ #include #include +#include +#include #include #include #include @@ -26,7 +28,14 @@ typedef int (*behavior_sensor_keymap_binding_callback_t)(struct zmk_behavior_bin const struct device *sensor, int64_t timestamp); +enum behavior_locality { + BEHAVIOR_LOCALITY_CENTRAL, + BEHAVIOR_LOCALITY_EVENT_SOURCE, + BEHAVIOR_LOCALITY_GLOBAL +}; + __subsystem struct behavior_driver_api { + enum behavior_locality locality; behavior_keymap_binding_callback_t binding_convert_central_state_dependent_params; behavior_keymap_binding_callback_t binding_pressed; behavior_keymap_binding_callback_t binding_released; @@ -60,6 +69,28 @@ static inline int z_impl_behavior_keymap_binding_convert_central_state_dependent return api->binding_convert_central_state_dependent_params(binding, event); } +/** + * @brief Determine where the behavior should be run + * @param behavior Pointer to the device structure for the driver instance. + * + * @retval Zero if successful. + * @retval Negative errno code if failure. + */ +__syscall int behavior_get_locality(const struct device *behavior, + enum behavior_locality *locality); + +static inline int z_impl_behavior_get_locality(const struct device *behavior, + enum behavior_locality *locality) { + if (behavior == NULL) { + return -EINVAL; + } + + const struct behavior_driver_api *api = (const struct behavior_driver_api *)behavior->api; + *locality = api->locality; + + return 0; +} + /** * @brief Handle the keymap binding being pressed * @param dev Pointer to the device structure for the driver instance. @@ -75,6 +106,11 @@ __syscall int behavior_keymap_binding_pressed(struct zmk_behavior_binding *bindi static inline int z_impl_behavior_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { const struct device *dev = device_get_binding(binding->behavior_dev); + + if (dev == NULL) { + return -EINVAL; + } + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; if (api->binding_pressed == NULL) { @@ -98,6 +134,11 @@ __syscall int behavior_keymap_binding_released(struct zmk_behavior_binding *bind static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { const struct device *dev = device_get_binding(binding->behavior_dev); + + if (dev == NULL) { + return -EINVAL; + } + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; if (api->binding_released == NULL) { @@ -125,6 +166,11 @@ static inline int z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, const struct device *sensor, int64_t timestamp) { const struct device *dev = device_get_binding(binding->behavior_dev); + + if (dev == NULL) { + return -EINVAL; + } + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; if (api->sensor_binding_triggered == NULL) { diff --git a/app/include/zmk/events/position_state_changed.h b/app/include/zmk/events/position_state_changed.h index e2f68720674..59619db6863 100644 --- a/app/include/zmk/events/position_state_changed.h +++ b/app/include/zmk/events/position_state_changed.h @@ -8,10 +8,19 @@ #include #include +#include + +#if IS_ENABLED(CONFIG_ZMK_BLE) +typedef const bt_addr_le_t *zmk_position_state_changed_source_t; +#else +typedef void *zmk_position_state_changed_source_t; +#endif + struct zmk_position_state_changed { + zmk_position_state_changed_source_t source; uint32_t position; bool state; int64_t timestamp; }; -ZMK_EVENT_DECLARE(zmk_position_state_changed); \ No newline at end of file +ZMK_EVENT_DECLARE(zmk_position_state_changed); diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 7151930a3a5..0771542ce41 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -6,6 +6,8 @@ #pragma once +#include + typedef uint32_t zmk_keymap_layers_state_t; uint8_t zmk_keymap_layer_default(); @@ -18,7 +20,8 @@ int zmk_keymap_layer_toggle(uint8_t layer); int zmk_keymap_layer_to(uint8_t layer); const char *zmk_keymap_layer_label(uint8_t layer); -int zmk_keymap_position_state_changed(uint32_t position, bool pressed, int64_t timestamp); +int zmk_keymap_position_state_changed(zmk_position_state_changed_source_t source, uint32_t position, + bool pressed, int64_t timestamp); #define ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) \ { \ diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h new file mode 100644 index 00000000000..ab46a8f5627 --- /dev/null +++ b/app/include/zmk/split/bluetooth/central.h @@ -0,0 +1,8 @@ + +#pragma once + +#include +#include + +int zmk_split_bt_invoke_behavior(const bt_addr_le_t *source, struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, bool state); \ No newline at end of file diff --git a/app/include/zmk/split/bluetooth/service.h b/app/include/zmk/split/bluetooth/service.h index b9f9fc3e0b6..f0c1d79ff7d 100644 --- a/app/include/zmk/split/bluetooth/service.h +++ b/app/include/zmk/split/bluetooth/service.h @@ -6,5 +6,19 @@ #pragma once +#define ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN 9 + +struct zmk_split_run_behavior_data { + uint8_t position; + uint8_t state; + uint32_t param1; + uint32_t param2; +} __packed; + +struct zmk_split_run_behavior_payload { + struct zmk_split_run_behavior_data data; + char behavior_dev[ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN]; +} __packed; + int zmk_split_bt_position_pressed(uint8_t position); int zmk_split_bt_position_released(uint8_t position); \ No newline at end of file diff --git a/app/include/zmk/split/bluetooth/uuid.h b/app/include/zmk/split/bluetooth/uuid.h index a31884d9ebd..735f5751d0a 100644 --- a/app/include/zmk/split/bluetooth/uuid.h +++ b/app/include/zmk/split/bluetooth/uuid.h @@ -15,3 +15,4 @@ #define ZMK_BT_SPLIT_UUID(num) BT_UUID_128_ENCODE(num, 0x0096, 0x7107, 0xc967, 0xc5cfb1c2482a) #define ZMK_SPLIT_BT_SERVICE_UUID ZMK_BT_SPLIT_UUID(0x00000000) #define ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000001) +#define ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID ZMK_BT_SPLIT_UUID(0x00000002) diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index fdd890c9b28..27793318a40 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -71,6 +71,7 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { on_keymap_binding_convert_central_state_dependent_params, .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, + .locality = BEHAVIOR_LOCALITY_GLOBAL, }; DEVICE_DT_INST_DEFINE(0, behavior_ext_power_init, device_pm_control_nop, NULL, NULL, APPLICATION, diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index e19cf329340..eb0477db542 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -36,6 +36,7 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_reset_driver_api = { .binding_pressed = on_keymap_binding_pressed, + .locality = BEHAVIOR_LOCALITY_EVENT_SOURCE, }; #define RST_INST(n) \ diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 0243b54b79a..33af6556bee 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -134,6 +134,7 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { on_keymap_binding_convert_central_state_dependent_params, .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, + .locality = BEHAVIOR_LOCALITY_GLOBAL, }; DEVICE_DT_INST_DEFINE(0, behavior_rgb_underglow_init, device_pm_control_nop, NULL, NULL, diff --git a/app/src/keymap.c b/app/src/keymap.c index 1643f6474ce..16ec31692f6 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -4,7 +4,12 @@ * SPDX-License-Identifier: MIT */ +#define IS_BLE_CENTRAL \ + (IS_ENABLED(CONFIG_ZMK_SPLIT) && IS_ENABLED(CONFIG_ZMK_BLE) && \ + IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) + #include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -14,6 +19,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#if IS_BLE_CENTRAL +#include +#endif + #include #include #include @@ -152,7 +161,17 @@ const char *zmk_keymap_layer_label(uint8_t layer) { return zmk_keymap_layer_names[layer]; } -int zmk_keymap_apply_position_state(int layer, uint32_t position, bool pressed, int64_t timestamp) { +int invoke_locally(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + bool pressed) { + if (pressed) { + return behavior_keymap_binding_pressed(binding, event); + } else { + return behavior_keymap_binding_released(binding, event); + } +} + +int zmk_keymap_apply_position_state(zmk_position_state_changed_source_t source, int layer, + uint32_t position, bool pressed, int64_t timestamp) { // We want to make a copy of this, since it may be converted from // relative to absolute before being invoked struct zmk_behavior_binding binding = zmk_keymap[layer][position]; @@ -169,7 +188,7 @@ int zmk_keymap_apply_position_state(int layer, uint32_t position, bool pressed, behavior = device_get_binding(binding.behavior_dev); if (!behavior) { - LOG_DBG("No behavior assigned to %d on layer %d", position, layer); + LOG_WRN("No behavior assigned to %d on layer %d", position, layer); return 1; } @@ -179,20 +198,44 @@ int zmk_keymap_apply_position_state(int layer, uint32_t position, bool pressed, return err; } - if (pressed) { - return behavior_keymap_binding_pressed(&binding, event); - } else { - return behavior_keymap_binding_released(&binding, event); + enum behavior_locality locality = BEHAVIOR_LOCALITY_CENTRAL; + err = behavior_get_locality(behavior, &locality); + if (err) { + LOG_ERR("Failed to get behavior locality %d", err); + return err; + } + + switch (locality) { + case BEHAVIOR_LOCALITY_CENTRAL: + return invoke_locally(&binding, event, pressed); + case BEHAVIOR_LOCALITY_EVENT_SOURCE: +#if IS_BLE_CENTRAL + if (!bt_addr_le_cmp(source, BT_ADDR_LE_NONE)) { + return invoke_locally(&binding, event, pressed); + } else { + return zmk_split_bt_invoke_behavior(source, &binding, event, pressed); + } +#else + return invoke_locally(&binding, event, pressed); +#endif + case BEHAVIOR_LOCALITY_GLOBAL: +#if IS_BLE_CENTRAL + zmk_split_bt_invoke_behavior(BT_ADDR_LE_ANY, &binding, event, pressed); +#endif + return invoke_locally(&binding, event, pressed); } + + return -ENOTSUP; } -int zmk_keymap_position_state_changed(uint32_t position, bool pressed, int64_t timestamp) { +int zmk_keymap_position_state_changed(zmk_position_state_changed_source_t source, uint32_t position, + bool pressed, int64_t timestamp) { if (pressed) { zmk_keymap_active_behavior_layer[position] = _zmk_keymap_layer_state; } for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= _zmk_keymap_layer_default; layer--) { if (zmk_keymap_layer_active_with_state(layer, zmk_keymap_active_behavior_layer[position])) { - int ret = zmk_keymap_apply_position_state(layer, position, pressed, timestamp); + int ret = zmk_keymap_apply_position_state(source, layer, position, pressed, timestamp); if (ret > 0) { LOG_DBG("behavior processing to continue to next layer"); continue; @@ -249,7 +292,7 @@ int zmk_keymap_sensor_triggered(uint8_t sensor_number, const struct device *sens int keymap_listener(const zmk_event_t *eh) { const struct zmk_position_state_changed *pos_ev; if ((pos_ev = as_zmk_position_state_changed(eh)) != NULL) { - return zmk_keymap_position_state_changed(pos_ev->position, pos_ev->state, + return zmk_keymap_position_state_changed(pos_ev->source, pos_ev->position, pos_ev->state, pos_ev->timestamp); } diff --git a/app/src/kscan.c b/app/src/kscan.c index 3c9c201e6b0..13ad2ccb256 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -49,8 +50,12 @@ void zmk_kscan_process_msgq(struct k_work *item) { uint32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, (pressed ? "true" : "false")); - ZMK_EVENT_RAISE(new_zmk_position_state_changed((struct zmk_position_state_changed){ - .state = pressed, .position = position, .timestamp = k_uptime_get()})); + ZMK_EVENT_RAISE(new_zmk_position_state_changed((struct zmk_position_state_changed) { +#if IS_ENABLED(CONFIG_ZMK_BLE) + .source = BT_ADDR_LE_NONE, +#endif + .state = pressed, .position = position, .timestamp = k_uptime_get() + })); } } diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 9a7f01b2b16..5ac4f83c45e 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -18,7 +18,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include +#include #include +#include #include #include #include @@ -33,6 +35,7 @@ static const struct bt_uuid_128 split_service_uuid = BT_UUID_INIT_128(ZMK_SPLIT_ static struct bt_gatt_discover_params discover_params; static struct bt_gatt_subscribe_params subscribe_params; static struct bt_gatt_discover_params sub_discover_params; +static uint16_t run_behavior_handle; K_MSGQ_DEFINE(peripheral_event_msgq, sizeof(struct zmk_position_state_changed), CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE, 4); @@ -72,8 +75,10 @@ static uint8_t split_central_notify_func(struct bt_conn *conn, if (changed_positions[i] & BIT(j)) { uint32_t position = (i * 8) + j; bool pressed = position_state[i] & BIT(j); - struct zmk_position_state_changed ev = { - .position = position, .state = pressed, .timestamp = k_uptime_get()}; + struct zmk_position_state_changed ev = {.source = bt_conn_get_dst(conn), + .position = position, + .state = pressed, + .timestamp = k_uptime_get()}; k_msgq_put(&peripheral_event_msgq, &ev, K_NO_WAIT); k_work_submit(&peripheral_event_work); @@ -124,9 +129,28 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, subscribe_params.disc_params = &sub_discover_params; subscribe_params.end_handle = discover_params.end_handle; subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_ERR("Discover failed (err %d)", err); + } + } else if (!bt_uuid_cmp(discover_params.uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID))) { + run_behavior_handle = bt_gatt_attr_value_handle(attr); + } else { subscribe_params.notify = split_central_notify_func; subscribe_params.value = BT_GATT_CCC_NOTIFY; split_central_subscribe(conn); + + memcpy(&uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID), sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.start_handle = attr->handle + 1; + discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_ERR("Discover failed (err %d)", err); + } } return subscribe_params.value_handle ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; @@ -340,6 +364,27 @@ static struct bt_conn_cb conn_callbacks = { .disconnected = split_central_disconnected, }; +int zmk_split_bt_invoke_behavior(const bt_addr_le_t *source, struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, bool state) { + struct zmk_split_run_behavior_payload payload = {.data = { + .param1 = binding->param1, + .param2 = binding->param2, + .position = event.position, + .state = state, + }}; + strncpy(payload.behavior_dev, binding->behavior_dev, ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1); + payload.behavior_dev[ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1] = '\0'; + + int err = bt_gatt_write_without_response(default_conn, run_behavior_handle, &payload, + sizeof(struct zmk_split_run_behavior_payload), true); + + if (err) { + LOG_ERR("Failed to write the behavior characteristic (err %d)", err); + } + + return err; +}; + int zmk_split_bt_central_init(const struct device *_arg) { bt_conn_cb_register(&conn_callbacks); diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index fbac6446446..bb0202c3a5d 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -15,6 +15,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include +#include #include #include #include @@ -24,12 +26,57 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static uint8_t num_of_positions = ZMK_KEYMAP_LEN; static uint8_t position_state[POS_STATE_LEN]; +static struct zmk_split_run_behavior_payload behavior_run_payload; + static ssize_t split_svc_pos_state(struct bt_conn *conn, const struct bt_gatt_attr *attrs, void *buf, uint16_t len, uint16_t offset) { return bt_gatt_attr_read(conn, attrs, buf, len, offset, &position_state, sizeof(position_state)); } +static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt_attr *attrs, + const void *buf, uint16_t len, uint16_t offset, + uint8_t flags) { + struct zmk_split_run_behavior_payload *payload = attrs->user_data; + uint16_t end_addr = offset + len; + + LOG_DBG("offset %d len %d", offset, len); + + if (end_addr > sizeof(struct zmk_split_run_behavior_payload)) { + return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET); + } + + memcpy(payload + offset, buf, len); + + // We run if: + // 1: We've gotten all the position/state/param data. + // 2: We have a null terminated string for the behavior device label. + if ((end_addr > sizeof(struct zmk_split_run_behavior_data)) && + payload->behavior_dev[end_addr - sizeof(struct zmk_split_run_behavior_data)] == '\0') { + struct zmk_behavior_binding binding = { + .param1 = payload->data.param1, + .param2 = payload->data.param2, + .behavior_dev = payload->behavior_dev, + }; + LOG_DBG("INVOKE THE BEHAVIOR: %s with params %d %d", log_strdup(binding.behavior_dev), + binding.param1, binding.param2); + struct zmk_behavior_binding_event event = {.position = payload->data.position, + .timestamp = k_uptime_get()}; + int err; + if (payload->data.state > 0) { + err = behavior_keymap_binding_pressed(&binding, event); + } else { + err = behavior_keymap_binding_released(&binding, event); + } + + if (err) { + LOG_ERR("Failed to invoke behavior %s: %d", log_strdup(binding.behavior_dev), err); + } + } + + return len; +} + static ssize_t split_svc_num_of_positions(struct bt_conn *conn, const struct bt_gatt_attr *attrs, void *buf, uint16_t len, uint16_t offset) { return bt_gatt_attr_read(conn, attrs, buf, len, offset, attrs->user_data, sizeof(uint8_t)); @@ -45,6 +92,9 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, split_svc_pos_state, NULL, &position_state), BT_GATT_CCC(split_svc_pos_state_ccc, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), + BT_GATT_CHARACTERISTIC(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID), + BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE_ENCRYPT, NULL, + split_svc_run_behavior, &behavior_run_payload), BT_GATT_DESCRIPTOR(BT_UUID_NUM_OF_DIGITALS, BT_GATT_PERM_READ, split_svc_num_of_positions, NULL, &num_of_positions), ); From 0febaa142a2baca1be293aca339bdc6920500c01 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 12 Jan 2021 10:49:00 -0500 Subject: [PATCH 0243/1130] refactor(split): Clean up split GATT discovery. * Use Zephyr auto CCC discovery instead of doing it ourselves. * Split service versus characteristic discovery into dedicated steps in the flow. * Fix for not searching properly when connecting to a peripheral a second time. --- app/src/split/bluetooth/central.c | 28 ++++++++-------------------- app/src/split_listener.c | 2 -- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 5ac4f83c45e..d123f4ec8db 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -129,31 +129,18 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, subscribe_params.disc_params = &sub_discover_params; subscribe_params.end_handle = discover_params.end_handle; subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); - - err = bt_gatt_discover(conn, &discover_params); - if (err) { - LOG_ERR("Discover failed (err %d)", err); - } - } else if (!bt_uuid_cmp(discover_params.uuid, - BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID))) { - run_behavior_handle = bt_gatt_attr_value_handle(attr); - } else { subscribe_params.notify = split_central_notify_func; subscribe_params.value = BT_GATT_CCC_NOTIFY; split_central_subscribe(conn); - - memcpy(&uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID), sizeof(uuid)); - discover_params.uuid = &uuid.uuid; - discover_params.start_handle = attr->handle + 1; - discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; - - err = bt_gatt_discover(conn, &discover_params); - if (err) { - LOG_ERR("Discover failed (err %d)", err); - } + } else if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID))) { + LOG_DBG("Found run behavior handle"); + run_behavior_handle = bt_gatt_attr_value_handle(attr); } - return subscribe_params.value_handle ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; + bool subscribed = (run_behavior_handle && subscribe_params.value_handle); + + return subscribed ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; } static uint8_t split_central_service_discovery_func(struct bt_conn *conn, @@ -355,6 +342,7 @@ static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { // Clean up previously discovered handles; subscribe_params.value_handle = 0; + run_behavior_handle = 0; start_scan(); } diff --git a/app/src/split_listener.c b/app/src/split_listener.c index 8ac56c9f20d..01cd89d912f 100644 --- a/app/src/split_listener.c +++ b/app/src/split_listener.c @@ -4,8 +4,6 @@ * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT zmk_split_listener - #include #include #include From d486304f7987e6cfd5ab9a77f3e077087759a258 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 9 Nov 2021 05:04:54 +0000 Subject: [PATCH 0244/1130] fix(underglow): Handle cycling effects on splits. * Convert relative effect cycling to absolute effect selection. --- app/include/dt-bindings/zmk/rgb.h | 3 ++- app/include/zmk/rgb_underglow.h | 2 ++ app/src/behaviors/behavior_rgb_underglow.c | 12 ++++++++++++ app/src/rgb_underglow.c | 16 +++++++++++++--- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/app/include/dt-bindings/zmk/rgb.h b/app/include/dt-bindings/zmk/rgb.h index 95aa5029198..c1a8008273c 100644 --- a/app/include/dt-bindings/zmk/rgb.h +++ b/app/include/dt-bindings/zmk/rgb.h @@ -17,7 +17,8 @@ #define RGB_SPD_CMD 10 #define RGB_EFF_CMD 11 #define RGB_EFR_CMD 12 -#define RGB_COLOR_HSB_CMD 13 +#define RGB_EFS_CMD 13 +#define RGB_COLOR_HSB_CMD 14 #define RGB_TOG RGB_TOG_CMD 0 #define RGB_ON RGB_ON_CMD 0 diff --git a/app/include/zmk/rgb_underglow.h b/app/include/zmk/rgb_underglow.h index 4d452a6f8f0..797f0b19f1d 100644 --- a/app/include/zmk/rgb_underglow.h +++ b/app/include/zmk/rgb_underglow.h @@ -17,6 +17,8 @@ int zmk_rgb_underglow_get_state(bool *state); int zmk_rgb_underglow_on(); int zmk_rgb_underglow_off(); int zmk_rgb_underglow_cycle_effect(int direction); +int zmk_rgb_underglow_calc_effect(int direction); +int zmk_rgb_underglow_select_effect(int effect); struct zmk_led_hsb zmk_rgb_underglow_calc_hue(int direction); struct zmk_led_hsb zmk_rgb_underglow_calc_sat(int direction); struct zmk_led_hsb zmk_rgb_underglow_calc_brt(int direction); diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 33af6556bee..96f690485f6 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -77,6 +77,16 @@ on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_bin binding->param2 = RGB_COLOR_HSB_VAL(color.h, color.s, color.b); break; } + case RGB_EFR_CMD: { + binding->param1 = RGB_EFS_CMD; + binding->param2 = zmk_rgb_underglow_calc_effect(-1); + break; + } + case RGB_EFF_CMD: { + binding->param1 = RGB_EFS_CMD; + binding->param2 = zmk_rgb_underglow_calc_effect(1); + break; + } default: return 0; } @@ -111,6 +121,8 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, return zmk_rgb_underglow_change_spd(1); case RGB_SPD_CMD: return zmk_rgb_underglow_change_spd(-1); + case RGB_EFS_CMD: + return zmk_rgb_underglow_select_effect(binding->param2); case RGB_EFF_CMD: return zmk_rgb_underglow_cycle_effect(1); case RGB_EFR_CMD: diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 40d99c7d15d..427552fac17 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -332,18 +332,28 @@ int zmk_rgb_underglow_off() { return zmk_rgb_underglow_save_state(); } -int zmk_rgb_underglow_cycle_effect(int direction) { +int zmk_rgb_underglow_calc_effect(int direction) { + return (state.current_effect + UNDERGLOW_EFFECT_NUMBER + direction) % UNDERGLOW_EFFECT_NUMBER; +} + +int zmk_rgb_underglow_select_effect(int effect) { if (!led_strip) return -ENODEV; - state.current_effect += UNDERGLOW_EFFECT_NUMBER + direction; - state.current_effect %= UNDERGLOW_EFFECT_NUMBER; + if (effect < 0 || effect >= UNDERGLOW_EFFECT_NUMBER) { + return -EINVAL; + } + state.current_effect = effect; state.animation_step = 0; return zmk_rgb_underglow_save_state(); } +int zmk_rgb_underglow_cycle_effect(int direction) { + return zmk_rgb_underglow_select_effect(zmk_rgb_underglow_calc_effect(direction)); +} + int zmk_rgb_underglow_toggle() { return state.on ? zmk_rgb_underglow_off() : zmk_rgb_underglow_on(); } From ce3471d4feef7c51e28d52587ccc51b500853b4e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 20 Nov 2021 22:12:24 +0000 Subject: [PATCH 0245/1130] fix(split): Add queue for running remote behaviors --- app/Kconfig | 8 +++++ app/src/split/bluetooth/central.c | 59 ++++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 9 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 3502c652757..76035147ade 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -175,6 +175,14 @@ config ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE int "Max number of key position state events to queue when received from peripherals" default 5 +config ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE + int "BLE split central write thread stack size" + default 512 + +config ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE + int "Max number of behavior run events to queue to send to the peripheral(s)" + default 5 + endif if !ZMK_SPLIT_BLE_ROLE_CENTRAL diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index d123f4ec8db..c28941f16a6 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -352,6 +352,51 @@ static struct bt_conn_cb conn_callbacks = { .disconnected = split_central_disconnected, }; +K_THREAD_STACK_DEFINE(split_central_split_run_q_stack, + CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE); + +struct k_work_q split_central_split_run_q; + +K_MSGQ_DEFINE(zmk_split_central_split_run_msgq, sizeof(struct zmk_split_run_behavior_payload), + CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE, 4); + +void split_central_split_run_callback(struct k_work *work) { + struct zmk_split_run_behavior_payload payload; + + while (k_msgq_get(&zmk_split_central_split_run_msgq, &payload, K_NO_WAIT) == 0) { + int err = + bt_gatt_write_without_response(default_conn, run_behavior_handle, &payload, + sizeof(struct zmk_split_run_behavior_payload), true); + + if (err) { + LOG_ERR("Failed to write the behavior characteristic (err %d)", err); + } + } +} + +K_WORK_DEFINE(split_central_split_run_work, split_central_split_run_callback); + +static int split_bt_invoke_behavior_payload(struct zmk_split_run_behavior_payload payload) { + int err = k_msgq_put(&zmk_split_central_split_run_msgq, &payload, K_MSEC(100)); + if (err) { + switch (err) { + case -EAGAIN: { + LOG_WRN("Consumer message queue full, popping first message and queueing again"); + struct zmk_split_run_behavior_payload discarded_report; + k_msgq_get(&zmk_split_central_split_run_msgq, &discarded_report, K_NO_WAIT); + return split_bt_invoke_behavior_payload(payload); + } + default: + LOG_WRN("Failed to queue behavior to send (%d)", err); + return err; + } + } + + k_work_submit_to_queue(&split_central_split_run_q, &split_central_split_run_work); + + return 0; +}; + int zmk_split_bt_invoke_behavior(const bt_addr_le_t *source, struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, bool state) { struct zmk_split_run_behavior_payload payload = {.data = { @@ -363,17 +408,13 @@ int zmk_split_bt_invoke_behavior(const bt_addr_le_t *source, struct zmk_behavior strncpy(payload.behavior_dev, binding->behavior_dev, ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1); payload.behavior_dev[ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1] = '\0'; - int err = bt_gatt_write_without_response(default_conn, run_behavior_handle, &payload, - sizeof(struct zmk_split_run_behavior_payload), true); - - if (err) { - LOG_ERR("Failed to write the behavior characteristic (err %d)", err); - } - - return err; -}; + return split_bt_invoke_behavior_payload(payload); +} int zmk_split_bt_central_init(const struct device *_arg) { + k_work_q_start(&split_central_split_run_q, split_central_split_run_q_stack, + K_THREAD_STACK_SIZEOF(split_central_split_run_q_stack), + CONFIG_ZMK_BLE_THREAD_PRIORITY); bt_conn_cb_register(&conn_callbacks); return start_scan(); From e8540f17fcf2e99604c2d497dab5cf87092b45d5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 22 Nov 2021 06:02:05 +0000 Subject: [PATCH 0246/1130] fix: Ensure power and underglow behaviors built. * Remove `/omit-if-no-ref/` from the behavior nodes. --- app/dts/behaviors/ext_power.dtsi | 2 +- app/dts/behaviors/rgb_underglow.dtsi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index abb7f2ffe66..18e824e21fa 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -6,7 +6,7 @@ / { behaviors { - /omit-if-no-ref/ ext_power: behavior_ext_power { + ext_power: behavior_ext_power { compatible = "zmk,behavior-ext-power"; label = "EXTPOWER"; #binding-cells = <1>; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index 265a1a52fe8..54fe422e2ba 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -6,7 +6,7 @@ / { behaviors { - /omit-if-no-ref/ rgb_ug: behavior_rgb_underglow { + rgb_ug: behavior_rgb_underglow { compatible = "zmk,behavior-rgb-underglow"; label = "RGB_UG"; #binding-cells = <2>; From 9297c5f2b43bae138bea712928f9e8c66efb74a7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 2 Jan 2022 04:55:30 +0000 Subject: [PATCH 0247/1130] refactor(splits): Use index for event source. * Track peripherals by indexes slot, with all appropiate peripheral state stored in the slot. * Event sources tracked by peripheral slot index. --- app/include/zmk/ble.h | 11 + .../zmk/events/position_state_changed.h | 9 +- app/include/zmk/keymap.h | 4 +- app/include/zmk/split/bluetooth/central.h | 2 +- app/src/ble.c | 16 +- app/src/keymap.c | 25 +- app/src/kscan.c | 11 +- app/src/split/bluetooth/central.c | 279 +++++++++++++----- 8 files changed, 253 insertions(+), 104 deletions(-) diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 0bdbab3838d..f813ddc80a5 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -9,6 +9,17 @@ #include #include +#define ZMK_BLE_IS_CENTRAL \ + (IS_ENABLED(CONFIG_ZMK_SPLIT) && IS_ENABLED(CONFIG_ZMK_BLE) && \ + IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) + +#if ZMK_BLE_IS_CENTRAL +#define ZMK_BLE_PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - 1) +#define ZMK_BLE_SPLIT_PERIPHERAL_COUNT 1 +#else +#define ZMK_BLE_PROFILE_COUNT CONFIG_BT_MAX_PAIRED +#endif + int zmk_ble_clear_bonds(); int zmk_ble_prof_next(); int zmk_ble_prof_prev(); diff --git a/app/include/zmk/events/position_state_changed.h b/app/include/zmk/events/position_state_changed.h index 59619db6863..7685fe0fd37 100644 --- a/app/include/zmk/events/position_state_changed.h +++ b/app/include/zmk/events/position_state_changed.h @@ -8,16 +8,9 @@ #include #include -#include - -#if IS_ENABLED(CONFIG_ZMK_BLE) -typedef const bt_addr_le_t *zmk_position_state_changed_source_t; -#else -typedef void *zmk_position_state_changed_source_t; -#endif struct zmk_position_state_changed { - zmk_position_state_changed_source_t source; + uint8_t source; uint32_t position; bool state; int64_t timestamp; diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 0771542ce41..1195b94320e 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -20,8 +20,8 @@ int zmk_keymap_layer_toggle(uint8_t layer); int zmk_keymap_layer_to(uint8_t layer); const char *zmk_keymap_layer_label(uint8_t layer); -int zmk_keymap_position_state_changed(zmk_position_state_changed_source_t source, uint32_t position, - bool pressed, int64_t timestamp); +int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pressed, + int64_t timestamp); #define ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) \ { \ diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index ab46a8f5627..072408605cf 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -4,5 +4,5 @@ #include #include -int zmk_split_bt_invoke_behavior(const bt_addr_le_t *source, struct zmk_behavior_binding *binding, +int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, bool state); \ No newline at end of file diff --git a/app/src/ble.c b/app/src/ble.c index 68061129a0d..afc2e47f961 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -72,7 +72,7 @@ enum advertising_type { BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_ONE_TIME, BT_GAP_ADV_FAST_INT_MIN_2, \ BT_GAP_ADV_FAST_INT_MAX_2, NULL) -static struct zmk_ble_profile profiles[PROFILE_COUNT]; +static struct zmk_ble_profile profiles[ZMK_BLE_PROFILE_COUNT]; static uint8_t active_profile; #define DEVICE_NAME CONFIG_BT_DEVICE_NAME @@ -260,7 +260,7 @@ static int ble_save_profile() { } int zmk_ble_prof_select(uint8_t index) { - if (index >= PROFILE_COUNT) { + if (index >= ZMK_BLE_PROFILE_COUNT) { return -ERANGE; } @@ -281,12 +281,13 @@ int zmk_ble_prof_select(uint8_t index) { int zmk_ble_prof_next() { LOG_DBG(""); - return zmk_ble_prof_select((active_profile + 1) % PROFILE_COUNT); + return zmk_ble_prof_select((active_profile + 1) % ZMK_BLE_PROFILE_COUNT); }; int zmk_ble_prof_prev() { LOG_DBG(""); - return zmk_ble_prof_select((active_profile + PROFILE_COUNT - 1) % PROFILE_COUNT); + return zmk_ble_prof_select((active_profile + ZMK_BLE_PROFILE_COUNT - 1) % + ZMK_BLE_PROFILE_COUNT); }; bt_addr_le_t *zmk_ble_active_profile_addr() { return &profiles[active_profile].peer; } @@ -324,8 +325,9 @@ static int ble_profiles_handle_set(const char *name, size_t len, settings_read_c return -EINVAL; } - if (idx >= PROFILE_COUNT) { - LOG_WRN("Profile address for index %d is larger than max of %d", idx, PROFILE_COUNT); + if (idx >= ZMK_BLE_PROFILE_COUNT) { + LOG_WRN("Profile address for index %d is larger than max of %d", idx, + ZMK_BLE_PROFILE_COUNT); return -EINVAL; } @@ -591,7 +593,7 @@ static int zmk_ble_init(const struct device *_arg) { bt_unpair(i, NULL); } - for (int i = 0; i < PROFILE_COUNT; i++) { + for (int i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { char setting_name[15]; sprintf(setting_name, "ble/profiles/%d", i); diff --git a/app/src/keymap.c b/app/src/keymap.c index 16ec31692f6..8acc5ec1d58 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -4,10 +4,6 @@ * SPDX-License-Identifier: MIT */ -#define IS_BLE_CENTRAL \ - (IS_ENABLED(CONFIG_ZMK_SPLIT) && IS_ENABLED(CONFIG_ZMK_BLE) && \ - IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)) - #include #include #include @@ -19,7 +15,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -#if IS_BLE_CENTRAL +#include +#if ZMK_BLE_IS_CENTRAL #include #endif @@ -170,8 +167,8 @@ int invoke_locally(struct zmk_behavior_binding *binding, struct zmk_behavior_bin } } -int zmk_keymap_apply_position_state(zmk_position_state_changed_source_t source, int layer, - uint32_t position, bool pressed, int64_t timestamp) { +int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position, bool pressed, + int64_t timestamp) { // We want to make a copy of this, since it may be converted from // relative to absolute before being invoked struct zmk_behavior_binding binding = zmk_keymap[layer][position]; @@ -209,8 +206,8 @@ int zmk_keymap_apply_position_state(zmk_position_state_changed_source_t source, case BEHAVIOR_LOCALITY_CENTRAL: return invoke_locally(&binding, event, pressed); case BEHAVIOR_LOCALITY_EVENT_SOURCE: -#if IS_BLE_CENTRAL - if (!bt_addr_le_cmp(source, BT_ADDR_LE_NONE)) { +#if ZMK_BLE_IS_CENTRAL + if (source == UINT_MAX) { return invoke_locally(&binding, event, pressed); } else { return zmk_split_bt_invoke_behavior(source, &binding, event, pressed); @@ -219,8 +216,10 @@ int zmk_keymap_apply_position_state(zmk_position_state_changed_source_t source, return invoke_locally(&binding, event, pressed); #endif case BEHAVIOR_LOCALITY_GLOBAL: -#if IS_BLE_CENTRAL - zmk_split_bt_invoke_behavior(BT_ADDR_LE_ANY, &binding, event, pressed); +#if ZMK_BLE_IS_CENTRAL + for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { + zmk_split_bt_invoke_behavior(i, &binding, event, pressed); + } #endif return invoke_locally(&binding, event, pressed); } @@ -228,8 +227,8 @@ int zmk_keymap_apply_position_state(zmk_position_state_changed_source_t source, return -ENOTSUP; } -int zmk_keymap_position_state_changed(zmk_position_state_changed_source_t source, uint32_t position, - bool pressed, int64_t timestamp) { +int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pressed, + int64_t timestamp) { if (pressed) { zmk_keymap_active_behavior_layer[position] = _zmk_keymap_layer_state; } diff --git a/app/src/kscan.c b/app/src/kscan.c index 13ad2ccb256..3425fabe310 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -50,12 +50,11 @@ void zmk_kscan_process_msgq(struct k_work *item) { uint32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, (pressed ? "true" : "false")); - ZMK_EVENT_RAISE(new_zmk_position_state_changed((struct zmk_position_state_changed) { -#if IS_ENABLED(CONFIG_ZMK_BLE) - .source = BT_ADDR_LE_NONE, -#endif - .state = pressed, .position = position, .timestamp = k_uptime_get() - })); + ZMK_EVENT_RAISE(new_zmk_position_state_changed( + (struct zmk_position_state_changed){.source = UINT8_MAX, + .state = pressed, + .position = position, + .timestamp = k_uptime_get()})); } } diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index c28941f16a6..0d52d051ea6 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -29,17 +29,112 @@ static int start_scan(void); #define POSITION_STATE_DATA_LEN 16 -static struct bt_conn *default_conn; +enum peripheral_slot_state { + PERIPHERAL_SLOT_STATE_OPEN, + PERIPHERAL_SLOT_STATE_CONNECTING, + PERIPHERAL_SLOT_STATE_CONNECTED, +}; + +struct peripheral_slot { + enum peripheral_slot_state state; + struct bt_conn *conn; + struct bt_gatt_discover_params discover_params; + struct bt_gatt_subscribe_params subscribe_params; + struct bt_gatt_discover_params sub_discover_params; + uint16_t run_behavior_handle; + uint8_t position_state[POSITION_STATE_DATA_LEN]; + uint8_t changed_positions[POSITION_STATE_DATA_LEN]; +}; + +static struct peripheral_slot peripherals[ZMK_BLE_SPLIT_PERIPHERAL_COUNT]; static const struct bt_uuid_128 split_service_uuid = BT_UUID_INIT_128(ZMK_SPLIT_BT_SERVICE_UUID); -static struct bt_gatt_discover_params discover_params; -static struct bt_gatt_subscribe_params subscribe_params; -static struct bt_gatt_discover_params sub_discover_params; -static uint16_t run_behavior_handle; K_MSGQ_DEFINE(peripheral_event_msgq, sizeof(struct zmk_position_state_changed), CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE, 4); +int peripheral_slot_index_for_conn(struct bt_conn *conn) { + for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { + if (peripherals[i].conn == conn) { + return i; + } + } + + return -EINVAL; +} + +struct peripheral_slot *peripheral_slot_for_conn(struct bt_conn *conn) { + int idx = peripheral_slot_index_for_conn(conn); + if (idx < 0) { + return NULL; + } + + return &peripherals[idx]; +} + +int release_peripheral_slot(int index) { + if (index < 0 || index >= ZMK_BLE_SPLIT_PERIPHERAL_COUNT) { + return -EINVAL; + } + + struct peripheral_slot *slot = &peripherals[index]; + + if (slot->state == PERIPHERAL_SLOT_STATE_OPEN) { + return -EINVAL; + } + + LOG_DBG("Releasing peripheral slot at %d", index); + + if (slot->conn != NULL) { + bt_conn_unref(slot->conn); + slot->conn = NULL; + } + slot->state = PERIPHERAL_SLOT_STATE_OPEN; + + for (int i = 0; i < POSITION_STATE_DATA_LEN; i++) { + slot->position_state[i] = 0U; + slot->changed_positions[i] = 0U; + } + + // Clean up previously discovered handles; + slot->subscribe_params.value_handle = 0; + slot->run_behavior_handle = 0; + + return 0; +} + +int reserve_peripheral_slot() { + for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { + if (peripherals[i].state == PERIPHERAL_SLOT_STATE_OPEN) { + // Be sure the slot is fully reinitialized. + release_peripheral_slot(i); + peripherals[i].state = PERIPHERAL_SLOT_STATE_CONNECTING; + return i; + } + } + + return -ENOMEM; +} + +int release_peripheral_slot_for_conn(struct bt_conn *conn) { + int idx = peripheral_slot_index_for_conn(conn); + if (idx < 0) { + return idx; + } + + return release_peripheral_slot(idx); +} + +int confirm_peripheral_slot_conn(struct bt_conn *conn) { + int idx = peripheral_slot_index_for_conn(conn); + if (idx < 0) { + return idx; + } + + peripherals[idx].state = PERIPHERAL_SLOT_STATE_CONNECTED; + return 0; +} + void peripheral_event_work_callback(struct k_work *work) { struct zmk_position_state_changed ev; while (k_msgq_get(&peripheral_event_msgq, &ev, K_NO_WAIT) == 0) { @@ -53,9 +148,12 @@ K_WORK_DEFINE(peripheral_event_work, peripheral_event_work_callback); static uint8_t split_central_notify_func(struct bt_conn *conn, struct bt_gatt_subscribe_params *params, const void *data, uint16_t length) { - static uint8_t position_state[POSITION_STATE_DATA_LEN]; + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); - uint8_t changed_positions[POSITION_STATE_DATA_LEN]; + if (slot == NULL) { + LOG_ERR("No peripheral state found for connection"); + return BT_GATT_ITER_CONTINUE; + } if (!data) { LOG_DBG("[UNSUBSCRIBED]"); @@ -66,16 +164,18 @@ static uint8_t split_central_notify_func(struct bt_conn *conn, LOG_DBG("[NOTIFICATION] data %p length %u", data, length); for (int i = 0; i < POSITION_STATE_DATA_LEN; i++) { - changed_positions[i] = ((uint8_t *)data)[i] ^ position_state[i]; - position_state[i] = ((uint8_t *)data)[i]; + slot->changed_positions[i] = ((uint8_t *)data)[i] ^ slot->position_state[i]; + slot->position_state[i] = ((uint8_t *)data)[i]; + LOG_DBG("data: %d", slot->position_state[i]); } for (int i = 0; i < POSITION_STATE_DATA_LEN; i++) { for (int j = 0; j < 8; j++) { - if (changed_positions[i] & BIT(j)) { + if (slot->changed_positions[i] & BIT(j)) { uint32_t position = (i * 8) + j; - bool pressed = position_state[i] & BIT(j); - struct zmk_position_state_changed ev = {.source = bt_conn_get_dst(conn), + bool pressed = slot->position_state[i] & BIT(j); + struct zmk_position_state_changed ev = {.source = + peripheral_slot_index_for_conn(conn), .position = position, .state = pressed, .timestamp = k_uptime_get()}; @@ -90,7 +190,13 @@ static uint8_t split_central_notify_func(struct bt_conn *conn, } static void split_central_subscribe(struct bt_conn *conn) { - int err = bt_gatt_subscribe(conn, &subscribe_params); + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); + if (slot == NULL) { + LOG_ERR("No peripheral state found for connection"); + return; + } + + int err = bt_gatt_subscribe(conn, &slot->subscribe_params); switch (err) { case -EALREADY: LOG_DBG("[ALREADY SUBSCRIBED]"); @@ -117,28 +223,34 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, return BT_GATT_ITER_STOP; } + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); + if (slot == NULL) { + LOG_ERR("No peripheral state found for connection"); + return BT_GATT_ITER_STOP; + } + LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID))) { LOG_DBG("Found position state characteristic"); - discover_params.uuid = NULL; - discover_params.start_handle = attr->handle + 2; - discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; - - subscribe_params.disc_params = &sub_discover_params; - subscribe_params.end_handle = discover_params.end_handle; - subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); - subscribe_params.notify = split_central_notify_func; - subscribe_params.value = BT_GATT_CCC_NOTIFY; + slot->discover_params.uuid = NULL; + slot->discover_params.start_handle = attr->handle + 2; + slot->discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + + slot->subscribe_params.disc_params = &slot->sub_discover_params; + slot->subscribe_params.end_handle = slot->discover_params.end_handle; + slot->subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + slot->subscribe_params.notify = split_central_notify_func; + slot->subscribe_params.value = BT_GATT_CCC_NOTIFY; split_central_subscribe(conn); } else if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID))) { LOG_DBG("Found run behavior handle"); - run_behavior_handle = bt_gatt_attr_value_handle(attr); + slot->run_behavior_handle = bt_gatt_attr_value_handle(attr); } - bool subscribed = (run_behavior_handle && subscribe_params.value_handle); + bool subscribed = (slot->run_behavior_handle && slot->subscribe_params.value_handle); return subscribed ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; } @@ -154,18 +266,24 @@ static uint8_t split_central_service_discovery_func(struct bt_conn *conn, LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); - if (bt_uuid_cmp(discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); + if (slot == NULL) { + LOG_ERR("No peripheral state found for connection"); + return BT_GATT_ITER_STOP; + } + + if (bt_uuid_cmp(slot->discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { LOG_DBG("Found other service"); return BT_GATT_ITER_CONTINUE; } LOG_DBG("Found split service"); - discover_params.uuid = NULL; - discover_params.func = split_central_chrc_discovery_func; - discover_params.start_handle = attr->handle + 1; - discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + slot->discover_params.uuid = NULL; + slot->discover_params.func = split_central_chrc_discovery_func; + slot->discover_params.start_handle = attr->handle + 1; + slot->discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; - int err = bt_gatt_discover(conn, &discover_params); + int err = bt_gatt_discover(conn, &slot->discover_params); if (err) { LOG_ERR("Failed to start discovering split service characteristics (err %d)", err); } @@ -183,14 +301,20 @@ static void split_central_process_connection(struct bt_conn *conn) { return; } - if (conn == default_conn && !subscribe_params.value_handle) { - discover_params.uuid = &split_service_uuid.uuid; - discover_params.func = split_central_service_discovery_func; - discover_params.start_handle = 0x0001; - discover_params.end_handle = 0xffff; - discover_params.type = BT_GATT_DISCOVER_PRIMARY; + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); + if (slot == NULL) { + LOG_ERR("No peripheral state found for connection"); + return; + } - err = bt_gatt_discover(default_conn, &discover_params); + if (!slot->subscribe_params.value_handle) { + slot->discover_params.uuid = &split_service_uuid.uuid; + slot->discover_params.func = split_central_service_discovery_func; + slot->discover_params.start_handle = 0x0001; + slot->discover_params.end_handle = 0xffff; + slot->discover_params.type = BT_GATT_DISCOVER_PRIMARY; + + err = bt_gatt_discover(slot->conn, &slot->discover_params); if (err) { LOG_ERR("Discover failed(err %d)", err); return; @@ -251,21 +375,33 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) { continue; } - default_conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr); - if (default_conn) { + uint8_t slot_idx = reserve_peripheral_slot(); + if (slot_idx < 0) { + LOG_ERR("Faild to reserve peripheral slot (err %d)", slot_idx); + continue; + } + + struct peripheral_slot *slot = &peripherals[slot_idx]; + + slot->conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr); + if (slot->conn) { LOG_DBG("Found existing connection"); - split_central_process_connection(default_conn); + split_central_process_connection(slot->conn); + err = bt_conn_le_phy_update(slot->conn, BT_CONN_LE_PHY_PARAM_2M); + if (err) { + LOG_ERR("Update phy conn failed (err %d)", err); + } } else { param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); - err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &default_conn); + err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &slot->conn); if (err) { LOG_ERR("Create conn failed (err %d) (create conn? 0x%04x)", err, BT_HCI_OP_LE_CREATE_CONN); start_scan(); } - err = bt_conn_le_phy_update(default_conn, BT_CONN_LE_PHY_PARAM_2M); + err = bt_conn_le_phy_update(slot->conn, BT_CONN_LE_PHY_PARAM_2M); if (err) { LOG_ERR("Update phy conn failed (err %d)", err); start_scan(); @@ -314,8 +450,7 @@ static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { if (conn_err) { LOG_ERR("Failed to connect to %s (%u)", log_strdup(addr), conn_err); - bt_conn_unref(default_conn); - default_conn = NULL; + release_peripheral_slot_for_conn(conn); start_scan(); return; @@ -323,6 +458,7 @@ static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { LOG_DBG("Connected: %s", log_strdup(addr)); + confirm_peripheral_slot_conn(conn); split_central_process_connection(conn); } @@ -333,16 +469,7 @@ static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { LOG_DBG("Disconnected: %s (reason %d)", log_strdup(addr), reason); - if (default_conn != conn) { - return; - } - - bt_conn_unref(default_conn); - default_conn = NULL; - - // Clean up previously discovered handles; - subscribe_params.value_handle = 0; - run_behavior_handle = 0; + release_peripheral_slot_for_conn(conn); start_scan(); } @@ -357,16 +484,30 @@ K_THREAD_STACK_DEFINE(split_central_split_run_q_stack, struct k_work_q split_central_split_run_q; -K_MSGQ_DEFINE(zmk_split_central_split_run_msgq, sizeof(struct zmk_split_run_behavior_payload), +struct zmk_split_run_behavior_payload_wrapper { + uint8_t source; + struct zmk_split_run_behavior_payload payload; +}; + +K_MSGQ_DEFINE(zmk_split_central_split_run_msgq, + sizeof(struct zmk_split_run_behavior_payload_wrapper), CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE, 4); void split_central_split_run_callback(struct k_work *work) { - struct zmk_split_run_behavior_payload payload; + struct zmk_split_run_behavior_payload_wrapper payload_wrapper; - while (k_msgq_get(&zmk_split_central_split_run_msgq, &payload, K_NO_WAIT) == 0) { - int err = - bt_gatt_write_without_response(default_conn, run_behavior_handle, &payload, - sizeof(struct zmk_split_run_behavior_payload), true); + LOG_DBG(""); + + while (k_msgq_get(&zmk_split_central_split_run_msgq, &payload_wrapper, K_NO_WAIT) == 0) { + if (peripherals[payload_wrapper.source].state != PERIPHERAL_SLOT_STATE_CONNECTED) { + LOG_ERR("Source not connected"); + continue; + } + + int err = bt_gatt_write_without_response( + peripherals[payload_wrapper.source].conn, + peripherals[payload_wrapper.source].run_behavior_handle, &payload_wrapper.payload, + sizeof(struct zmk_split_run_behavior_payload), true); if (err) { LOG_ERR("Failed to write the behavior characteristic (err %d)", err); @@ -376,15 +517,18 @@ void split_central_split_run_callback(struct k_work *work) { K_WORK_DEFINE(split_central_split_run_work, split_central_split_run_callback); -static int split_bt_invoke_behavior_payload(struct zmk_split_run_behavior_payload payload) { - int err = k_msgq_put(&zmk_split_central_split_run_msgq, &payload, K_MSEC(100)); +static int +split_bt_invoke_behavior_payload(struct zmk_split_run_behavior_payload_wrapper payload_wrapper) { + LOG_DBG(""); + + int err = k_msgq_put(&zmk_split_central_split_run_msgq, &payload_wrapper, K_MSEC(100)); if (err) { switch (err) { case -EAGAIN: { LOG_WRN("Consumer message queue full, popping first message and queueing again"); - struct zmk_split_run_behavior_payload discarded_report; + struct zmk_split_run_behavior_payload_wrapper discarded_report; k_msgq_get(&zmk_split_central_split_run_msgq, &discarded_report, K_NO_WAIT); - return split_bt_invoke_behavior_payload(payload); + return split_bt_invoke_behavior_payload(payload_wrapper); } default: LOG_WRN("Failed to queue behavior to send (%d)", err); @@ -397,18 +541,19 @@ static int split_bt_invoke_behavior_payload(struct zmk_split_run_behavior_payloa return 0; }; -int zmk_split_bt_invoke_behavior(const bt_addr_le_t *source, struct zmk_behavior_binding *binding, +int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, bool state) { struct zmk_split_run_behavior_payload payload = {.data = { .param1 = binding->param1, .param2 = binding->param2, .position = event.position, - .state = state, + .state = state ? 1 : 0, }}; strncpy(payload.behavior_dev, binding->behavior_dev, ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1); payload.behavior_dev[ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1] = '\0'; - return split_bt_invoke_behavior_payload(payload); + struct zmk_split_run_behavior_payload_wrapper wrapper = {.source = source, .payload = payload}; + return split_bt_invoke_behavior_payload(wrapper); } int zmk_split_bt_central_init(const struct device *_arg) { From 4d55e60adb963b99c3be6e97c56f5c258d3c8bc5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 2 Jan 2022 04:57:37 +0000 Subject: [PATCH 0248/1130] refactor(behaviors): Always add reset behaviors. * Don'd omit unreferenced reset behaviors, so they are always available in split peripherals. --- app/dts/behaviors/reset.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index e4ba56588cf..cb246814bf6 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -8,13 +8,13 @@ / { behaviors { - /omit-if-no-ref/ reset: behavior_reset { + reset: behavior_reset { compatible = "zmk,behavior-reset"; label = "RESET"; #binding-cells = <0>; }; - /omit-if-no-ref/ bootloader: behavior_reset_dfu { + bootloader: behavior_reset_dfu { compatible = "zmk,behavior-reset"; label = "BOOTLOAD"; type = ; From fa110488b0c9e5c79066d51e0b6214447e223257 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 30 Jan 2022 03:38:10 +0000 Subject: [PATCH 0249/1130] fix(split): Add define for local source. * Add `ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL` and use it consinstently to fix bug w/ local `&reset`, `&bootloader`, etc. --- app/include/zmk/events/position_state_changed.h | 2 ++ app/src/keymap.c | 2 +- app/src/kscan.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/include/zmk/events/position_state_changed.h b/app/include/zmk/events/position_state_changed.h index 7685fe0fd37..5323e943ac0 100644 --- a/app/include/zmk/events/position_state_changed.h +++ b/app/include/zmk/events/position_state_changed.h @@ -9,6 +9,8 @@ #include #include +#define ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL UINT8_MAX + struct zmk_position_state_changed { uint8_t source; uint32_t position; diff --git a/app/src/keymap.c b/app/src/keymap.c index 8acc5ec1d58..e586316f4f4 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -207,7 +207,7 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position return invoke_locally(&binding, event, pressed); case BEHAVIOR_LOCALITY_EVENT_SOURCE: #if ZMK_BLE_IS_CENTRAL - if (source == UINT_MAX) { + if (source == ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL) { return invoke_locally(&binding, event, pressed); } else { return zmk_split_bt_invoke_behavior(source, &binding, event, pressed); diff --git a/app/src/kscan.c b/app/src/kscan.c index 3425fabe310..c7cf2881025 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -51,7 +51,7 @@ void zmk_kscan_process_msgq(struct k_work *item) { LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, (pressed ? "true" : "false")); ZMK_EVENT_RAISE(new_zmk_position_state_changed( - (struct zmk_position_state_changed){.source = UINT8_MAX, + (struct zmk_position_state_changed){.source = ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL, .state = pressed, .position = position, .timestamp = k_uptime_get()})); From dbefe92ea099a043619727a9ec33cc65de8e6a0c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 30 Jan 2022 04:50:10 +0000 Subject: [PATCH 0250/1130] fix(split): Slightly improved logging on peripherals. --- app/src/split/bluetooth/service.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index bb0202c3a5d..3b860197fcf 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -58,8 +58,8 @@ static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt .param2 = payload->data.param2, .behavior_dev = payload->behavior_dev, }; - LOG_DBG("INVOKE THE BEHAVIOR: %s with params %d %d", log_strdup(binding.behavior_dev), - binding.param1, binding.param2); + LOG_DBG("%s with params %d %d: pressed? %d", log_strdup(binding.behavior_dev), + binding.param1, binding.param2, payload->data.state); struct zmk_behavior_binding_event event = {.position = payload->data.position, .timestamp = k_uptime_get()}; int err; From b8700eaaa1e24837d6b9ff60430d706c555f9a2f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 30 Jan 2022 05:32:12 +0000 Subject: [PATCH 0251/1130] fix(split): Fix an off-by-one error in split svc. * Properly check end of behavior device string for null terminator. --- app/src/split/bluetooth/service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index 3b860197fcf..ca192d7d249 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -52,7 +52,7 @@ static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt // 1: We've gotten all the position/state/param data. // 2: We have a null terminated string for the behavior device label. if ((end_addr > sizeof(struct zmk_split_run_behavior_data)) && - payload->behavior_dev[end_addr - sizeof(struct zmk_split_run_behavior_data)] == '\0') { + payload->behavior_dev[end_addr - sizeof(struct zmk_split_run_behavior_data) - 1] == '\0') { struct zmk_behavior_binding binding = { .param1 = payload->data.param1, .param2 = payload->data.param2, From 74307504280573aae5819afad29aceaf97b8344e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 1 Feb 2022 03:29:50 +0000 Subject: [PATCH 0252/1130] refactor(splits): Minor cleanups to periph invocation * Add strlcpy from public domain version. * Leverage strlcpy to detect truncation of behavior dev strs, and log. * Use `offsetof` for cleaner detection on peripheral side. --- app/CMakeLists.txt | 1 + app/include/zmk/stdlib.h | 19 +++++++++++++++++++ app/src/split/bluetooth/central.c | 9 +++++++-- app/src/split/bluetooth/service.c | 4 +++- app/src/stdlib.c | 25 +++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 app/include/zmk/stdlib.h create mode 100644 app/src/stdlib.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 1e153fb630d..7681efab68b 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -23,6 +23,7 @@ zephyr_linker_sources(RODATA include/linker/zmk-events.ld) # find_package(Zephyr) which defines the target. target_include_directories(app PRIVATE include) target_sources_ifdef(CONFIG_ZMK_SLEEP app PRIVATE src/power.c) +target_sources(app PRIVATE src/stdlib.c) target_sources(app PRIVATE src/activity.c) target_sources(app PRIVATE src/kscan.c) target_sources(app PRIVATE src/matrix_transform.c) diff --git a/app/include/zmk/stdlib.h b/app/include/zmk/stdlib.h new file mode 100644 index 00000000000..fa8fe6737a1 --- /dev/null +++ b/app/include/zmk/stdlib.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include /* for size_t */ + +/* + * ANSI C version of strlcpy + * Based on the NetBSD strlcpy man page. + * + * Nathan Myers , 2003/06/03 + * Placed in the public domain. + */ + +size_t strlcpy(char *dst, const char *src, size_t size); \ No newline at end of file diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 0d52d051ea6..8a0e79eaa00 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -17,6 +17,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include #include @@ -549,8 +550,12 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi .position = event.position, .state = state ? 1 : 0, }}; - strncpy(payload.behavior_dev, binding->behavior_dev, ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1); - payload.behavior_dev[ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN - 1] = '\0'; + const size_t payload_dev_size = sizeof(payload.behavior_dev); + if (strlcpy(payload.behavior_dev, binding->behavior_dev, payload_dev_size) >= + payload_dev_size) { + LOG_ERR("Truncated behavior label %s to %s before invoking peripheral behavior", + log_strdup(binding->behavior_dev), log_strdup(payload.behavior_dev)); + } struct zmk_split_run_behavior_payload_wrapper wrapper = {.source = source, .payload = payload}; return split_bt_invoke_behavior_payload(wrapper); diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index ca192d7d249..7de78506fce 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -51,8 +51,10 @@ static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt // We run if: // 1: We've gotten all the position/state/param data. // 2: We have a null terminated string for the behavior device label. + const size_t behavior_dev_offset = + offsetof(struct zmk_split_run_behavior_payload, behavior_dev); if ((end_addr > sizeof(struct zmk_split_run_behavior_data)) && - payload->behavior_dev[end_addr - sizeof(struct zmk_split_run_behavior_data) - 1] == '\0') { + payload->behavior_dev[end_addr - behavior_dev_offset - 1] == '\0') { struct zmk_behavior_binding binding = { .param1 = payload->data.param1, .param2 = payload->data.param2, diff --git a/app/src/stdlib.c b/app/src/stdlib.c new file mode 100644 index 00000000000..5bca1696c8d --- /dev/null +++ b/app/src/stdlib.c @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/* + * ANSI C version of strlcpy + * Based on the NetBSD strlcpy man page. + * + * Nathan Myers , 2003/06/03 + * Placed in the public domain. + */ + +size_t strlcpy(char *dst, const char *src, size_t size) { + const size_t len = strlen(src); + if (size != 0) { + memcpy(dst, src, (len > size - 1) ? size - 1 : len); + dst[size - 1] = 0; + } + return len; +} From edbbbc75409c06f7828b8fd70323a2a3350980e6 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Wed, 2 Feb 2022 23:15:50 -0600 Subject: [PATCH 0253/1130] feat(ci): Use metadata for builds * Build per board * Nightly builds of all boards * Detect board changes and build those changed * Core set of boards/shields built otherwise. --- .github/workflows/build.yml | 447 +++++++++++++++++++++++++++++------- app/core-coverage.yml | 30 +++ 2 files changed, 391 insertions(+), 86 deletions(-) create mode 100644 app/core-coverage.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b790b665683..bfb195fe0b4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,75 +9,19 @@ on: paths: - ".github/workflows/build.yml" - "app/**" + schedule: + - cron: '22 4 * * *' jobs: build: + if: ${{ always() }} runs-on: ubuntu-latest container: image: docker.io/zmkfirmware/zmk-build-arm:2.5 + needs: compile-matrix strategy: matrix: - board: - - bluemicro840_v1 - - nice_nano - - nice_nano_v2 - - nrfmicro_13 - - proton_c - shield: - - bfo9000_left - - bfo9000_right - - boardsource3x4 - - corne_left - - corne_right - - cradio_left - - cradio_right - - crbn - - eek - - helix_left - - helix_right - - iris_left - - iris_right - - jian_left - - jian_right - - jorne_left - - jorne_right - - kyria_left - - kyria_right - - lily58_left - - lily58_right - - microdox_left - - microdox_right - - nibble - - qaz - - quefrency_left - - quefrency_right - - reviung41 - - romac - - romac_plus - - settings_reset - - sofle_left - - sofle_right - - splitreus62_left - - splitreus62_right - - tg4x - - tidbit - cmake-args: [""] - include: - - board: bdn9_rev2 - - board: dz60rgb_rev1 - - board: nrf52840_m2 - shield: m60 - - board: planck_rev6 - - board: proton_c - shield: clueboard_california - - board: nice_nano_v2 - shield: kyria_left - cmake-args: -DCONFIG_ZMK_DISPLAY=y - skip-archive: true - - board: nice_nano_v2 - shield: kyria_right - cmake-args: -DCONFIG_ZMK_DISPLAY=y - skip-archive: true + include: ${{ fromJSON(needs.compile-matrix.outputs.include-list) }} steps: - name: Checkout uses: actions/checkout@v2 @@ -104,29 +48,360 @@ jobs: run: west update - name: Export Zephyr CMake package (west zephyr-export) run: west zephyr-export - - name: Prepare variables - id: variables - run: | - SHIELD_ARG= - ARTIFACT_NAME="${{ matrix.board }}" - - if [ -n "${{ matrix.shield }}" ]; then - SHIELD_ARG="-DSHIELD=${{ matrix.shield }}" - ARTIFACT_NAME="${ARTIFACT_NAME}-${{ matrix.shield }}" - fi - - ARTIFACT_NAME="${ARTIFACT_NAME}-zmk" - - echo ::set-output name=shield-arg::${SHIELD_ARG} - echo ::set-output name=artifact-name::${ARTIFACT_NAME} - - name: Build (west build) - run: west build -s app -b ${{ matrix.board }} -- ${{ steps.variables.outputs.shield-arg }} ${{ matrix.cmake-args }} - - name: Archive artifacts - if: ${{ !matrix.skip-archive }} - uses: actions/upload-artifact@v2 + - name: Use Node.js + uses: actions/setup-node@v2 with: - name: "${{ steps.variables.outputs.artifact-name }}" - path: | - build/zephyr/zmk.hex - build/zephyr/zmk.uf2 - continue-on-error: true + node-version: '14.x' + - name: Install @actions/artifact + run: npm install @actions/artifact + - name: Build and upload artifacts + uses: actions/github-script@v4 + id: boards-list + with: + script: | + const fs = require('fs'); + const artifact = require('@actions/artifact'); + const artifactClient = artifact.create(); + + const execSync = require('child_process').execSync; + + const buildShieldArgs = JSON.parse(`${{ matrix.shieldArgs }}`); + + let error = false; + + for (const shieldArgs of buildShieldArgs) { + try { + const output = execSync(`west build -s app -p -b ${{ matrix.board }} -- ${shieldArgs.shield ? '-DSHIELD=' + shieldArgs.shield : ''} ${shieldArgs['cmake-args'] || ''}`); + + console.log(`::group::${{ matrix.board}} ${shieldArgs.shield} Build`) + console.log(output.toString()); + + const fileExtensions = ["hex", "uf2"]; + + const files = fileExtensions + .map(extension => "build/zephyr/zmk." + extension) + .filter(path => fs.existsSync(path)); + + const rootDirectory = 'build/zephyr'; + const options = { + continueOnError: true + } + + const cmakeName = shieldArgs['cmake-args'] ? '-' + (shieldArgs.nickname || shieldArgs['cmake-args'].split(' ').join('')) : ''; + const artifactName = `${{ matrix.board }}${shieldArgs.shield ? '-' + shieldArgs.shield : ''}${cmakeName}-zmk`; + + await artifactClient.uploadArtifact(artifactName, files, rootDirectory, options); + } catch (e) { + console.error(`::error::Failed to build or upload ${{ matrix.board }} ${shieldArgs.shield} ${shieldArgs['cmake-args']}`); + console.error(e); + error = true; + } finally { + console.log('::endgroup::'); + } + } + + if (error) { + throw new Error('Failed to build one or more configurations'); + } + compile-matrix: + if: ${{ always() }} + runs-on: ubuntu-latest + needs: [core-coverage, board-changes, nightly] + outputs: + include-list: ${{ steps.compile-list.outputs.result }} + steps: + - name: Join build lists + uses: actions/github-script@v4 + id: compile-list + with: + script: | + const coreCoverage = `${{ needs.core-coverage.outputs.core-include }}` || "[]"; + const boardChanges = `${{ needs.board-changes.outputs.boards-include }}` || "[]"; + const nightly = `${{ needs.nightly.outputs.nightly-include }}` || "[]"; + + const combined = [ + ...JSON.parse(coreCoverage), + ...JSON.parse(boardChanges), + ...JSON.parse(nightly) + ]; + const combinedUnique = [...new Map(combined.map(el => [JSON.stringify(el), el])).values()]; + + const perBoard = {}; + + for (const configuration of combinedUnique) { + if (!perBoard[configuration.board]) + perBoard[configuration.board] = []; + + perBoard[configuration.board].push({ + shield: configuration.shield, + 'cmake-args': configuration['cmake-args'], + nickname: configuration.nickname + }) + } + + return Object.entries(perBoard).map(([board, shieldArgs]) => ({ + board, + shieldArgs: JSON.stringify(shieldArgs), + })); + core-coverage: + if: ${{ needs.get-changed-files.outputs.core-changes == 'true' }} + runs-on: ubuntu-latest + needs: get-changed-files + outputs: + core-include: ${{ steps.core-list.outputs.result }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Use Node.js + uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Install js-yaml + run: npm install js-yaml + - uses: actions/github-script@v4 + id: core-list + with: + script: | + const fs = require('fs'); + const yaml = require('js-yaml'); + + const coreCoverage = yaml.load(fs.readFileSync('app/core-coverage.yml', 'utf8')); + + let include = coreCoverage.board.flatMap(board => + coreCoverage.shield.map(shield => ({ board, shield })) + ); + + return [...include, ...coreCoverage.include]; + board-changes: + if: ${{ needs.get-changed-files.outputs.board-changes == 'true' }} + runs-on: ubuntu-latest + needs: [get-grouped-hardware, get-changed-files] + outputs: + boards-include: ${{ steps.boards-list.outputs.result }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Use Node.js + uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Install js-yaml + run: npm install js-yaml + - uses: actions/github-script@v4 + id: boards-list + with: + script: | + const fs = require('fs'); + const yaml = require('js-yaml'); + + const changedFiles = JSON.parse(`${{ needs.get-changed-files.outputs.changed-files }}`); + const metadata = JSON.parse(`${{ needs.get-grouped-hardware.outputs.organized-metadata }}`); + const boardChanges = new Set(changedFiles.filter(f => f.startsWith('app/boards')).map(f => f.split('/').slice(0, 4).join('/'))); + + return (await Promise.all([...boardChanges].flatMap(async bc => { + const globber = await glob.create(bc + "/*.zmk.yml"); + const files = await globber.glob(); + + const aggregated = files.flatMap((f) => + yaml.loadAll(fs.readFileSync(f, "utf8")) + ); + + const boardAndShield = (b, s) => { + if (s.siblings) { + return s.siblings.map(shield => ({ + board: b.id, + shield, + })); + } else { + return { + board: b.id, + shield: s.id + }; + } + } + + return aggregated.flatMap(hm => { + switch (hm.type) { + case "board": + if (hm.features && hm.features.includes("keys")) { + if (hm.siblings) { + return hm.siblings.map(board => ({ + board, + })); + } else { + return { + board: hm.id + }; + } + } else if (hm.exposes) { + return hm.exposes.flatMap(i => + metadata.interconnects[i].shields.flatMap(s => boardAndShield(hm, s)) + ); + } else { + console.error("Board without keys or interconnect"); + } + break; + case "shield": + if (hm.features && hm.features.includes("keys")) { + return hm.requires.flatMap(i => + metadata.interconnects[i].boards.flatMap(b => boardAndShield(b, hm)) + ); + } + break; + case "interconnect": + break; + } + }); + }))).flat(); + nightly: + if: ${{ github.event_name == 'schedule' }} + runs-on: ubuntu-latest + needs: get-grouped-hardware + outputs: + nightly-include: ${{ steps.nightly-list.outputs.result }} + steps: + - name: Create nightly list + uses: actions/github-script@v4 + id: nightly-list + with: + script: | + const metadata = JSON.parse(`${{ needs.get-grouped-hardware.outputs.organized-metadata }}`); + + let includeOnboard = metadata.onboard.flatMap(b => { + if (b.siblings) { + return b.siblings.map(board => ({ + board, + })); + } else { + return { + board: b.id, + }; + } + }); + + let includeInterconnect = Object.values(metadata.interconnects).flatMap(i => + i.boards.flatMap(b => + i.shields.flatMap(s => { + if (s.siblings) { + return s.siblings.map(shield => ({ + board: b.id, + shield, + })); + } else { + return { + board: b.id, + shield: s.id, + }; + } + }) + ) + ); + + return [...includeOnboard, ...includeInterconnect]; + get-grouped-hardware: + runs-on: ubuntu-latest + outputs: + organized-metadata: ${{ steps.organize-metadata.outputs.result }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Use Node.js + uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Install js-yaml + run: npm install js-yaml + - name: Aggregate Metadata + uses: actions/github-script@v4 + id: aggregate-metadata + with: + script: | + const fs = require('fs'); + const yaml = require('js-yaml'); + + const globber = await glob.create("app/boards/**/*.zmk.yml"); + const files = await globber.glob(); + + const aggregated = files.flatMap((f) => + yaml.loadAll(fs.readFileSync(f, "utf8")) + ); + + return JSON.stringify(aggregated).replace(/\\/g,"\\\\"); + result-encoding: string + + - name: Organize Metadata + uses: actions/github-script@v4 + id: organize-metadata + with: + script: | + const hardware = JSON.parse(`${{ steps.aggregate-metadata.outputs.result }}`); + + const grouped = hardware.reduce((agg, hm) => { + switch (hm.type) { + case "board": + if (hm.features && hm.features.includes("keys")) { + agg.onboard.push(hm); + } else if (hm.exposes) { + hm.exposes.forEach((element) => { + let ic = agg.interconnects[element] || { + boards: [], + shields: [], + }; + ic.boards.push(hm); + agg.interconnects[element] = ic; + }); + } else { + console.error("Board without keys or interconnect"); + } + break; + case "shield": + if (hm.features && hm.features.includes("keys")) { + hm.requires.forEach((id) => { + let ic = agg.interconnects[id] || { boards: [], shields: [] }; + ic.shields.push(hm); + agg.interconnects[id] = ic; + }); + } + break; + case "interconnect": + let ic = agg.interconnects[hm.id] || { boards: [], shields: [] }; + ic.interconnect = hm; + agg.interconnects[hm.id] = ic; + break; + } + return agg; + }, + { onboard: [], interconnects: {} }); + + return JSON.stringify(grouped).replace(/\\/g,"\\\\"); + result-encoding: string + get-changed-files: + if: ${{ github.event_name != 'schedule' }} + runs-on: ubuntu-latest + outputs: + changed-files: ${{ steps.changed-files.outputs.all }} + board-changes: ${{ steps.board-changes.outputs.result }} + core-changes: ${{ steps.core-changes.outputs.result }} + steps: + - uses: Ana06/get-changed-files@v2.0.0 + id: changed-files + with: + format: 'json' + - uses: actions/github-script@v4 + id: board-changes + with: + script: | + const changedFiles = JSON.parse(`${{ steps.changed-files.outputs.all }}`); + const boardChanges = changedFiles.filter(f => f.startsWith('app/boards')); + return boardChanges.length ? 'true' : 'false'; + result-encoding: string + - uses: actions/github-script@v4 + id: core-changes + with: + script: | + const changedFiles = JSON.parse(`${{ steps.changed-files.outputs.all }}`); + const boardChanges = changedFiles.filter(f => f.startsWith('app/boards')); + const appChanges = changedFiles.filter(f => f.startsWith('app')); + const ymlChanges = changedFiles.includes('.github/workflows/build.yml'); + return boardChanges.length < appChanges.length || ymlChanges ? 'true' : 'false'; + result-encoding: string diff --git a/app/core-coverage.yml b/app/core-coverage.yml new file mode 100644 index 00000000000..6784287b382 --- /dev/null +++ b/app/core-coverage.yml @@ -0,0 +1,30 @@ +board: +- nice_nano_v2 +- nrfmicro_13 +- proton_c +shield: +- corne_left +- corne_right +- romac +- settings_reset +- tidbit +include: +- board: bdn9_rev2 +- board: nice60 +- board: nrf52840_m2 + shield: m60 +- board: planck_rev6 +- board: proton_c + shield: clueboard_california +- board: nice_nano_v2 + shield: kyria_left + cmake-args: "-DCONFIG_ZMK_DISPLAY=y" + nickname: "display" +- board: nice_nano_v2 + shield: kyria_right + cmake-args: "-DCONFIG_ZMK_DISPLAY=y" + nickname: "display" +- board: nice_nano + shield: romac_plus + cmake-args: "-DCONFIG_ZMK_RGB_UNDERGLOW=y -DCONFIG_WS2812_STRIP=y" + nickname: "underglow" From 4a1254bc27f23bc5025fb44970796eb425cd8469 Mon Sep 17 00:00:00 2001 From: Lucas Uyezu Date: Tue, 19 Oct 2021 23:39:04 -0400 Subject: [PATCH 0254/1130] Add support for Knob Goblin shield --- .../shields/knob_goblin/Kconfig.defconfig | 45 +++++++++++ app/boards/shields/knob_goblin/Kconfig.shield | 5 ++ .../shields/knob_goblin/knob_goblin.conf | 9 +++ .../shields/knob_goblin/knob_goblin.keymap | 40 ++++++++++ .../shields/knob_goblin/knob_goblin.overlay | 79 +++++++++++++++++++ .../shields/knob_goblin/knob_goblin.zmk.yml | 11 +++ 6 files changed, 189 insertions(+) create mode 100644 app/boards/shields/knob_goblin/Kconfig.defconfig create mode 100644 app/boards/shields/knob_goblin/Kconfig.shield create mode 100644 app/boards/shields/knob_goblin/knob_goblin.conf create mode 100644 app/boards/shields/knob_goblin/knob_goblin.keymap create mode 100644 app/boards/shields/knob_goblin/knob_goblin.overlay create mode 100644 app/boards/shields/knob_goblin/knob_goblin.zmk.yml diff --git a/app/boards/shields/knob_goblin/Kconfig.defconfig b/app/boards/shields/knob_goblin/Kconfig.defconfig new file mode 100644 index 00000000000..07df599697f --- /dev/null +++ b/app/boards/shields/knob_goblin/Kconfig.defconfig @@ -0,0 +1,45 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_KNOB_GOBLIN + +config ZMK_KEYBOARD_NAME + default "Knob Goblin" + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES_MAX + default 128 + +config LVGL_VER_RES_MAX + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif # SHIELD_KNOB_GOBLIN diff --git a/app/boards/shields/knob_goblin/Kconfig.shield b/app/boards/shields/knob_goblin/Kconfig.shield new file mode 100644 index 00000000000..5a140cb90f0 --- /dev/null +++ b/app/boards/shields/knob_goblin/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_KNOB_GOBLIN + def_bool $(shields_list_contains,knob_goblin) diff --git a/app/boards/shields/knob_goblin/knob_goblin.conf b/app/boards/shields/knob_goblin/knob_goblin.conf new file mode 100644 index 00000000000..2eefae4d9e6 --- /dev/null +++ b/app/boards/shields/knob_goblin/knob_goblin.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment to enable Encoders +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Knob Goblin OLED Display +CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/knob_goblin/knob_goblin.keymap b/app/boards/shields/knob_goblin/knob_goblin.keymap new file mode 100644 index 00000000000..8e4a7e6622a --- /dev/null +++ b/app/boards/shields/knob_goblin/knob_goblin.keymap @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + + bindings = < + &trans &kp EQUAL &kp KP_SLASH &kp KP_MULTIPLY &kp KP_MINUS + &trans &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_PLUS + &trans &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &kp KP_PLUS + &kp C_PLAY_PAUSE &kp KP_NUMBER_1 &kp KP_NUMBER_2 &kp KP_NUMBER_3 &kp KP_ENTER + &kp C_MUTE &mo 1 &kp KP_NUMBER_0 &kp KP_DOT &kp KP_ENTER + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + + num_layer { + bindings = < + &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 + &trans &kp HOME &trans &kp PAGE_UP &trans + &trans &kp END &kp UP_ARROW &kp PAGE_DOWN &trans + &trans &kp LEFT_ARROW &kp DOWN_ARROW &kp RIGHT_ARROW &kp SPACE + &trans &trans &kp BACKSPACE &kp DELETE &trans + >; + + }; + }; +}; + diff --git a/app/boards/shields/knob_goblin/knob_goblin.overlay b/app/boards/shields/knob_goblin/knob_goblin.overlay new file mode 100644 index 00000000000..82cc3dc372c --- /dev/null +++ b/app/boards/shields/knob_goblin/knob_goblin.overlay @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + ; + }; + + top_encoder: encoder_top { + compatible = "alps,ec11"; + label = "TOP_ENCODER"; + a-gpios = <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + bottom_encoder: encoder_bottom { + compatible = "alps,ec11"; + label = "BOTTOM_ENCODER"; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&top_encoder &bottom_encoder>; + }; + +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/knob_goblin/knob_goblin.zmk.yml b/app/boards/shields/knob_goblin/knob_goblin.zmk.yml new file mode 100644 index 00000000000..5383d1c2ee3 --- /dev/null +++ b/app/boards/shields/knob_goblin/knob_goblin.zmk.yml @@ -0,0 +1,11 @@ +file_format: "1" +id: knob_goblin +name: Knob Goblin +type: shield +url: https://knob-goblin.com/ +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder From 614e0f1b2b552af4d4e9cffc91655fd3bc643817 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Jan 2022 03:46:12 +0000 Subject: [PATCH 0255/1130] chore(deps): bump follow-redirects from 1.14.1 to 1.14.7 in /docs Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.1 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.1...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 1842 +--------------------------------------- 1 file changed, 6 insertions(+), 1836 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 6fe700d9c08..756a5a162bd 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -618,25 +618,6 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", @@ -1025,25 +1006,6 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", @@ -1448,25 +1410,6 @@ "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", @@ -1563,7 +1506,6 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -5718,14 +5660,6 @@ "node": ">=10.13.0" } }, - "node_modules/@docusaurus/core/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, "node_modules/@docusaurus/core/node_modules/html-webpack-plugin": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", @@ -5861,17 +5795,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/@docusaurus/core/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@docusaurus/core/node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -6068,19 +5991,6 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6960,17 +6870,6 @@ "node": ">=6.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@mdx-js/mdx/node_modules/@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", @@ -7025,14 +6924,6 @@ "node": ">=0.8.0" } }, - "node_modules/@mdx-js/mdx/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, "node_modules/@mdx-js/mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -7041,17 +6932,6 @@ "semver": "bin/semver" } }, - "node_modules/@mdx-js/mdx/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", @@ -7492,14 +7372,6 @@ "node": ">=0.8.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -7533,17 +7405,6 @@ "node": ">=0.10.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@svgr/plugin-svgo/node_modules/svgo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", @@ -8494,11 +8355,6 @@ "@babel/core": "^7.11.6" } }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", @@ -8528,11 +8384,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", @@ -8981,44 +8832,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9441,25 +9254,6 @@ "node": ">=0.8.0" } }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", @@ -9612,28 +9406,6 @@ "node": ">=8" } }, - "node_modules/configstore/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/configstore/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -9788,7 +9560,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10280,26 +10051,6 @@ "node": ">=8.0.0" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/csstype": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", @@ -11045,223 +10796,6 @@ "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -11278,121 +10812,6 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-mdx/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, "node_modules/eslint-plugin-mdx/node_modules/unified": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", @@ -12259,9 +11678,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "funding": [ { "type": "individual", @@ -12427,14 +11846,6 @@ "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -12493,17 +11904,6 @@ "semver": "bin/semver" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -14524,18 +13924,6 @@ "node": ">=10" } }, - "node_modules/json-schema-to-typescript/node_modules/prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -15247,19 +14635,6 @@ "webpack": "^4.4.0 || ^5.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/mini-css-extract-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -15590,20 +14965,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/null-loader/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -16543,11 +15904,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-minify-gradients": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", @@ -16564,11 +15920,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-minify-selectors": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", @@ -16584,18 +15935,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", @@ -16662,11 +16001,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-normalize-repeat-style": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", @@ -16682,11 +16016,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-normalize-string": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", @@ -16701,11 +16030,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-normalize-timing-functions": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", @@ -16721,11 +16045,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-normalize-unicode": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", @@ -16768,11 +16087,6 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-normalize-url": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", @@ -16789,11 +16103,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-normalize-whitespace": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", @@ -16808,11 +16117,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-reduce-idents": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", @@ -16910,11 +16214,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, "node_modules/postcss-unique-selectors": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", @@ -17335,14 +16634,6 @@ "node": ">=10" } }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/react-dev-utils/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -17409,19 +16700,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/react-dev-utils/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/react-dev-utils/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -17473,59 +16751,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/react-dev-utils/node_modules/globby/node_modules/ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -17534,42 +16759,6 @@ "node": ">= 4" } }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, "node_modules/react-dev-utils/node_modules/immer": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", @@ -17579,35 +16768,11 @@ "url": "https://opencollective.com/immer" } }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/react-dev-utils/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/react-dev-utils/node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/react-dev-utils/node_modules/prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -17620,36 +16785,6 @@ "node": ">= 6" } }, - "node_modules/react-dev-utils/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", @@ -18312,11 +17447,6 @@ "node": ">=6.9.0" } }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "node_modules/remark-mdx/node_modules/@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", @@ -18440,30 +17570,6 @@ "node": ">=6.0.0" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/remark-mdx/node_modules/@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", @@ -18518,14 +17624,6 @@ "node": ">=0.8.0" } }, - "node_modules/remark-mdx/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, "node_modules/remark-mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -18534,17 +17632,6 @@ "semver": "bin/semver" } }, - "node_modules/remark-mdx/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", @@ -19215,14 +18302,6 @@ "node": ">=8" } }, - "node_modules/shallow-clone/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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -19927,18 +19006,6 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -19983,21 +19050,6 @@ "node": ">=10.13.0" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -20006,17 +19058,6 @@ "node": ">= 10" } }, - "node_modules/svgo/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/synckit": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", @@ -20518,22 +19559,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unified/node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -21115,21 +20140,6 @@ "node": ">=0.4.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -21152,17 +20162,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", @@ -21876,24 +20875,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -22621,19 +21602,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -22915,19 +21883,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -23229,19 +22184,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -23313,7 +22255,6 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -26377,11 +25318,6 @@ "is-glob": "^4.0.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "html-webpack-plugin": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", @@ -26463,14 +25399,6 @@ "ajv-keywords": "^3.5.2" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -26628,16 +25556,6 @@ "webpack": "^5.40.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -27308,14 +26226,6 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", @@ -27357,23 +26267,10 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -27681,11 +26578,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -27713,14 +26605,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, "svgo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", @@ -28529,11 +27413,6 @@ "@mdx-js/util": "1.6.22" }, "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", @@ -28555,13 +27434,6 @@ "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "requires": { "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } } }, "babel-plugin-polyfill-corejs2": { @@ -28916,32 +27788,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29287,19 +28133,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -29423,21 +28256,6 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } } }, "connect-history-api-fallback": { @@ -29554,7 +28372,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -29868,22 +28685,6 @@ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "requires": { "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "csstype": { @@ -30503,204 +29304,6 @@ "vfile": "^4.2.1" }, "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } - } - }, - "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -30714,83 +29317,6 @@ "yaml": "^1.10.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, "unified": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", @@ -31448,9 +29974,9 @@ } }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" }, "for-in": { "version": "1.0.2", @@ -31574,11 +30100,6 @@ } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -31627,14 +30148,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -33145,12 +31658,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true } } }, @@ -33708,16 +32215,6 @@ "webpack-sources": "^1.1.0" }, "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -33978,19 +32475,6 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } } }, "object-assign": { @@ -34668,13 +33152,6 @@ "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "requires": { "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-minify-gradients": { @@ -34685,13 +33162,6 @@ "cssnano-utils": "^2.0.1", "is-color-stop": "^1.1.0", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-minify-selectors": { @@ -34701,17 +33171,6 @@ "requires": { "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } } }, "postcss-modules-local-by-default": { @@ -34754,13 +33213,6 @@ "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "requires": { "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-normalize-repeat-style": { @@ -34770,13 +33222,6 @@ "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-normalize-string": { @@ -34785,13 +33230,6 @@ "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "requires": { "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-normalize-timing-functions": { @@ -34801,13 +33239,6 @@ "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-normalize-unicode": { @@ -34835,11 +33266,6 @@ "version": "1.3.788", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" } } }, @@ -34851,13 +33277,6 @@ "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-normalize-whitespace": { @@ -34866,13 +33285,6 @@ "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "requires": { "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-reduce-idents": { @@ -34935,13 +33347,6 @@ "requires": { "postcss-value-parser": "^4.1.0", "svgo": "^2.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - } } }, "postcss-unique-selectors": { @@ -35265,14 +33670,6 @@ "text-table": "0.2.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -35322,16 +33719,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -35367,100 +33754,23 @@ "slash": "^3.0.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "immer": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -35469,29 +33779,6 @@ "kleur": "^3.0.3", "sisteransi": "^1.0.5" } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -36018,11 +34305,6 @@ } } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "@babel/helper-split-export-declaration": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", @@ -36117,24 +34399,6 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", @@ -36176,23 +34440,10 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -36722,13 +34973,6 @@ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { "kind-of": "^6.0.2" - }, - "dependencies": { - "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==" - } } }, "shebang-command": { @@ -37275,15 +35519,6 @@ "version": "1.3.788", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } } } }, @@ -37321,27 +35556,10 @@ "stable": "^0.1.8" }, "dependencies": { - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -37711,18 +35929,6 @@ "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - } } }, "union-value": { @@ -38144,15 +36350,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -38166,14 +36363,6 @@ "duplexer": "^0.1.2" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, "ws": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", @@ -38718,25 +36907,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - } - } - } } }, "wrappy": { From 8678a537c63faa4225599f08735d5131d8ed4d7f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Jan 2022 03:46:14 +0000 Subject: [PATCH 0256/1130] chore(deps): bump shelljs from 0.8.4 to 0.8.5 in /docs Bumps [shelljs](https://github.com/shelljs/shelljs) from 0.8.4 to 0.8.5. - [Release notes](https://github.com/shelljs/shelljs/releases) - [Changelog](https://github.com/shelljs/shelljs/blob/master/CHANGELOG.md) - [Commits](https://github.com/shelljs/shelljs/compare/v0.8.4...v0.8.5) --- updated-dependencies: - dependency-name: shelljs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 756a5a162bd..17aae20facf 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -18327,9 +18327,9 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -34994,9 +34994,9 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", From 84365e6def9f9084b6c166d250aa84638c0e288f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Feb 2022 05:16:46 +0000 Subject: [PATCH 0257/1130] chore(deps-dev): bump json-schema-to-typescript in /docs Bumps [json-schema-to-typescript](https://github.com/bcherny/json-schema-to-typescript) from 10.1.3 to 10.1.5. - [Release notes](https://github.com/bcherny/json-schema-to-typescript/releases) - [Changelog](https://github.com/bcherny/json-schema-to-typescript/blob/master/CHANGELOG.md) - [Commits](https://github.com/bcherny/json-schema-to-typescript/commits) --- updated-dependencies: - dependency-name: json-schema-to-typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 52 +++++++++++++++++++++++------------------- docs/package.json | 2 +- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 17aae20facf..f799ad70320 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -33,7 +33,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.28.0", - "json-schema-to-typescript": "^10.1.3", + "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", @@ -12026,6 +12026,18 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -13884,15 +13896,16 @@ } }, "node_modules/json-schema-to-typescript": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.3.tgz", - "integrity": "sha512-yiyDK1sSSWhLN2JAuAyAE7jscFJj2hR7AhdF19BmdLh/N/QPdnIqrGa23CSc7z92OSSzKVPclAKof+rV8S8weA==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", + "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.6", "@types/lodash": "^4.14.168", "@types/prettier": "^2.1.5", "cli-color": "^2.0.0", + "get-stdin": "^8.0.0", "glob": "^7.1.6", "glob-promise": "^3.4.0", "is-glob": "^4.0.1", @@ -13902,8 +13915,7 @@ "minimist": "^1.2.5", "mkdirp": "^1.0.4", "mz": "^2.7.0", - "prettier": "^2.2.0", - "stdin": "0.0.1" + "prettier": "^2.2.0" }, "bin": { "json2ts": "dist/src/cli.js" @@ -18767,12 +18779,6 @@ "ci-info": "^1.6.0" } }, - "node_modules/stdin": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", - "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", - "dev": true - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -30234,6 +30240,12 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -31631,15 +31643,16 @@ } }, "json-schema-to-typescript": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.3.tgz", - "integrity": "sha512-yiyDK1sSSWhLN2JAuAyAE7jscFJj2hR7AhdF19BmdLh/N/QPdnIqrGa23CSc7z92OSSzKVPclAKof+rV8S8weA==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", + "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", "dev": true, "requires": { "@types/json-schema": "^7.0.6", "@types/lodash": "^4.14.168", "@types/prettier": "^2.1.5", "cli-color": "^2.0.0", + "get-stdin": "^8.0.0", "glob": "^7.1.6", "glob-promise": "^3.4.0", "is-glob": "^4.0.1", @@ -31649,8 +31662,7 @@ "minimist": "^1.2.5", "mkdirp": "^1.0.4", "mz": "^2.7.0", - "prettier": "^2.2.0", - "stdin": "0.0.1" + "prettier": "^2.2.0" }, "dependencies": { "mkdirp": { @@ -35348,12 +35360,6 @@ "ci-info": "^1.6.0" } }, - "stdin": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", - "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", - "dev": true - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", diff --git a/docs/package.json b/docs/package.json index 13add5d1ab4..6a5b9f2f67d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -52,7 +52,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-mdx": "^1.13.0", "eslint-plugin-react": "^7.28.0", - "json-schema-to-typescript": "^10.1.3", + "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", From 85b2d30bd521424686ba7f1c5ac4fe492f5f2ca5 Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Sat, 9 Oct 2021 18:24:37 +0200 Subject: [PATCH 0258/1130] feat(lighting): add backlight behavior --- app/CMakeLists.txt | 2 + app/Kconfig | 37 ++- app/dts/behaviors.dtsi | 1 + app/dts/behaviors/backlight.dtsi | 15 ++ .../behaviors/zmk,behavior-backlight.yaml | 8 + app/include/dt-bindings/zmk/backlight.h | 11 + app/include/zmk/backlight.h | 19 ++ app/src/backlight.c | 224 ++++++++++++++++++ app/src/behaviors/behavior_backlight.c | 56 +++++ 9 files changed, 371 insertions(+), 2 deletions(-) create mode 100644 app/dts/behaviors/backlight.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-backlight.yaml create mode 100644 app/include/dt-bindings/zmk/backlight.h create mode 100644 app/include/zmk/backlight.h create mode 100644 app/src/backlight.c create mode 100644 app/src/behaviors/behavior_backlight.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 7681efab68b..25f6c6cd0ef 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -64,6 +64,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/keymap.c) endif() target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) +target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/behaviors/behavior_bt.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/battery.c) @@ -77,6 +78,7 @@ endif() target_sources_ifdef(CONFIG_USB app PRIVATE src/usb.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/hog.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) +target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/backlight.c) target_sources(app PRIVATE src/endpoints.c) target_sources(app PRIVATE src/hid_listener.c) target_sources(app PRIVATE src/main.c) diff --git a/app/Kconfig b/app/Kconfig index 76035147ade..49eec835e89 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -257,7 +257,7 @@ menu "Display/LED Options" rsource "src/display/Kconfig" -config ZMK_RGB_UNDERGLOW +menuconfig ZMK_RGB_UNDERGLOW bool "RGB Adressable LED Underglow" select LED_STRIP @@ -328,6 +328,39 @@ config ZMK_RGB_UNDERGLOW_ON_START #ZMK_RGB_UNDERGLOW endif +menuconfig ZMK_BACKLIGHT + bool "LED backlight" + select PWM + select LED + select ZMK_LED_PWM + +if ZMK_BACKLIGHT + +config ZMK_BACKLIGHT_BRT_STEP + int "Brightness step in percent" + range 1 100 + default 20 + +config ZMK_BACKLIGHT_BRT_START + int "Default brightness in percent" + range 1 100 + default 40 + +config ZMK_BACKLIGHT_ON_START + bool "Default backlight state" + default y + +config ZMK_BACKLIGHT_AUTO_OFF_IDLE + bool "Turn off backlight when keyboard goes into idle state" + default y + +config ZMK_BACKLIGHT_AUTO_OFF_USB + bool "Turn off backlight when USB is disconnected" + default n + +#ZMK_BACKLIGHT +endif + #Display/LED Options endmenu @@ -378,7 +411,7 @@ config ZMK_COMBO_MAX_KEYS_PER_COMBO int "Maximum number of keys per combo" default 4 -#Display/LED Options +#Combo options endmenu menu "Advanced" diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 06489616a66..3e797cc9a37 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -16,3 +16,4 @@ #include #include #include +#include diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi new file mode 100644 index 00000000000..b05d97ae2df --- /dev/null +++ b/app/dts/behaviors/backlight.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + / { + behaviors { + /omit-if-no-ref/ bl: behavior_backlight { + compatible = "zmk,behavior-backlight"; + label = "BACKLIGHT"; + #binding-cells = <1>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml b/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml new file mode 100644 index 00000000000..e035e15e604 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Backlight behavior + +compatible: "zmk,behavior-backlight" + +include: one_param.yaml diff --git a/app/include/dt-bindings/zmk/backlight.h b/app/include/dt-bindings/zmk/backlight.h new file mode 100644 index 00000000000..c33e4344557 --- /dev/null +++ b/app/include/dt-bindings/zmk/backlight.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define BL_TOG 0 +#define BL_ON 1 +#define BL_OFF 2 +#define BL_INC 3 +#define BL_DEC 4 diff --git a/app/include/zmk/backlight.h b/app/include/zmk/backlight.h new file mode 100644 index 00000000000..817efe7a253 --- /dev/null +++ b/app/include/zmk/backlight.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_backlight_set_on(bool on); +bool zmk_backlight_is_on(); + +int zmk_backlight_set_brt(int brt); +int zmk_backlight_get_brt(); + +int zmk_backlight_toggle(); +int zmk_backlight_on(); +int zmk_backlight_off(); +int zmk_backlight_inc(); +int zmk_backlight_dec(); diff --git a/app/src/backlight.c b/app/src/backlight.c new file mode 100644 index 00000000000..517e613337a --- /dev/null +++ b/app/src/backlight.c @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +BUILD_ASSERT(DT_HAS_CHOSEN(zmk_backlight), + "CONFIG_ZMK_BACKLIGHT is enabled but no zmk,backlight chosen node found"); + +static const struct device *const backlight_dev = DEVICE_DT_GET(DT_CHOSEN(zmk_backlight)); + +#define CHILD_COUNT(...) +1 +#define DT_NUM_CHILD(node_id) (DT_FOREACH_CHILD(node_id, CHILD_COUNT)) + +#define BACKLIGHT_NUM_LEDS (DT_NUM_CHILD(DT_CHOSEN(zmk_backlight))) + +struct backlight_state { + uint8_t brightness; + bool on; +}; + +static struct backlight_state state = {.brightness = CONFIG_ZMK_BACKLIGHT_BRT_START, + .on = IS_ENABLED(CONFIG_ZMK_BACKLIGHT_ON_START)}; + +static int zmk_backlight_update() { + uint8_t brt = state.on ? state.brightness : 0; + for (int i = 0; i < BACKLIGHT_NUM_LEDS; i++) { + int rc = led_set_brightness(backlight_dev, i, brt); + if (rc != 0) { + return rc; + } + } + return 0; +} + +#if IS_ENABLED(CONFIG_SETTINGS) +static int backlight_settings_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + const char *next; + + if (settings_name_steq(name, "state", &next) && !next) { + if (len != sizeof(state)) { + return -EINVAL; + } + + int rc = read_cb(cb_arg, &state, sizeof(state)); + if (rc < 0) { + return rc; + } + + return zmk_backlight_update(); + } + + return -ENOENT; +} + +static struct settings_handler backlight_conf = {.name = "backlight", + .h_set = backlight_settings_set}; + +static void zmk_backlight_save_state_work() { + settings_save_one("backlight/state", &state, sizeof(state)); +} + +static struct k_delayed_work backlight_save_work; +#endif // IS_ENABLED(CONFIG_SETTINGS) + +static int zmk_backlight_save_state() { +#if IS_ENABLED(CONFIG_SETTINGS) + k_delayed_work_cancel(&backlight_save_work); + return k_delayed_work_submit(&backlight_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); +#else + return 0; +#endif +} + +static int zmk_backlight_init(const struct device *_arg) { + if (!device_is_ready(backlight_dev)) { + LOG_ERR("Backlight device \"%s\" is not ready", backlight_dev->name); + return -ENODEV; + } + +#if IS_ENABLED(CONFIG_SETTINGS) + settings_subsys_init(); + + int err = settings_register(&backlight_conf); + if (err) { + LOG_ERR("Failed to register the backlight settings handler (err %d)", err); + return err; + } + + k_delayed_work_init(&backlight_save_work, zmk_backlight_save_state_work); + + settings_load_subtree("backlight"); +#endif + + return zmk_backlight_update(); +} + +int zmk_backlight_set_on(bool on) { + if (!state.on && state.brightness == 0) { + state.brightness = CONFIG_ZMK_BACKLIGHT_BRT_STEP; + } + state.on = on; + + int rc = zmk_backlight_update(); + if (rc != 0) { + return rc; + } + + return zmk_backlight_save_state(); +} + +bool zmk_backlight_is_on() { return state.on; } + +int zmk_backlight_set_brt(int brt) { + state.on = (brt > 0); + state.brightness = CLAMP(brt, 0, 100); + + int rc = zmk_backlight_update(); + if (rc != 0) { + return rc; + } + + return zmk_backlight_save_state(); +} + +int zmk_backlight_get_brt() { return state.on ? state.brightness : 0; } + +int zmk_backlight_toggle() { return zmk_backlight_set_on(!state.on); } + +int zmk_backlight_on() { return zmk_backlight_set_on(true); } + +int zmk_backlight_off() { return zmk_backlight_set_on(false); } + +int zmk_backlight_inc() { + if (!state.on) { + return zmk_backlight_set_brt(MAX(state.brightness, CONFIG_ZMK_BACKLIGHT_BRT_STEP)); + } + return zmk_backlight_set_brt(state.brightness + CONFIG_ZMK_BACKLIGHT_BRT_STEP); +} + +int zmk_backlight_dec() { + return zmk_backlight_set_brt(state.brightness - CONFIG_ZMK_BACKLIGHT_BRT_STEP); +} + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) +static bool auto_off_idle_prev_state = false; +#endif + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) +static bool auto_off_usb_prev_state = false; +#endif + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) +static int backlight_event_listener(const zmk_event_t *eh) { + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) + if (as_zmk_activity_state_changed(eh)) { + bool new_state = (zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE); + if (state.on == new_state) { + return 0; + } + if (new_state) { + state.on = auto_off_idle_prev_state; + auto_off_idle_prev_state = false; + } else { + state.on = false; + auto_off_idle_prev_state = true; + } + return zmk_backlight_update(); + } +#endif + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) + if (as_zmk_usb_conn_state_changed(eh)) { + bool new_state = zmk_usb_is_powered(); + if (state.on == new_state) { + return 0; + } + if (new_state) { + state.on = auto_off_usb_prev_state; + auto_off_usb_prev_state = false; + } else { + state.on = false; + auto_off_usb_prev_state = true; + } + return zmk_backlight_update(); + } +#endif + + return -ENOTSUP; +} + +ZMK_LISTENER(backlight, backlight_event_listener); +#endif // IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || + // IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) +ZMK_SUBSCRIPTION(backlight, zmk_activity_state_changed); +#endif + +#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) +ZMK_SUBSCRIPTION(backlight, zmk_usb_conn_state_changed); +#endif + +SYS_INIT(zmk_backlight_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c new file mode 100644 index 00000000000..8d921f45544 --- /dev/null +++ b/app/src/behaviors/behavior_backlight.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_backlight + +#include +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +static int behavior_backlight_init(const struct device *dev) { return 0; } + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + switch (binding->param1) { + case BL_TOG: + return zmk_backlight_toggle(); + case BL_ON: + return zmk_backlight_on(); + case BL_OFF: + return zmk_backlight_off(); + case BL_INC: + return zmk_backlight_inc(); + case BL_DEC: + return zmk_backlight_dec(); + default: + LOG_ERR("Unknown backlight command: %d", binding->param1); + } + + return -ENOTSUP; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_backlight_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + +DEVICE_DT_INST_DEFINE(0, behavior_backlight_init, device_pm_control_nop, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_backlight_driver_api); + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From da41391b1f1649d5ed24cb6411927c085268a70b Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Sat, 9 Oct 2021 18:25:00 +0200 Subject: [PATCH 0259/1130] feat(docs): add backlight documentation --- docs/blog/2021-01-27-zmk-sotf-4.md | 2 +- docs/docs/behaviors/backlight.md | 48 ++++++++ .../behaviors/{lighting.md => underglow.md} | 15 +-- .../development/hardware-metadata-files.md | 1 + docs/docs/features/backlight.md | 115 ++++++++++++++++++ docs/docs/hardware.mdx | 1 + docs/docs/intro.md | 1 + docs/sidebars.js | 4 +- 8 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 docs/docs/behaviors/backlight.md rename docs/docs/behaviors/{lighting.md => underglow.md} (88%) create mode 100644 docs/docs/features/backlight.md diff --git a/docs/blog/2021-01-27-zmk-sotf-4.md b/docs/blog/2021-01-27-zmk-sotf-4.md index d902b62df5f..cd84da88883 100644 --- a/docs/blog/2021-01-27-zmk-sotf-4.md +++ b/docs/blog/2021-01-27-zmk-sotf-4.md @@ -76,7 +76,7 @@ to your keymap will send `ESC` when pressed on its own, but will send `` ` `` wh #### RGB Underglow Color Selection -[mcrosson] updated the [RGB Underglow behavior](/docs/behaviors/lighting#rgb-underglow) to allow [binding an explicit color selection](/docs/behaviors/lighting#examples) to a key position. +[mcrosson] updated the [RGB Underglow behavior](/docs/behaviors/underglow) to allow [binding an explicit color selection](/docs/behaviors/underglow#examples) to a key position. #### Keymap Upgrader diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md new file mode 100644 index 00000000000..c1a92c90fb8 --- /dev/null +++ b/docs/docs/behaviors/backlight.md @@ -0,0 +1,48 @@ +--- +title: Backlight Behavior +sidebar_label: Backlight +--- + +## Summary + +This page contains [backlight](../features/backlight.md) behaviors supported by ZMK. + +## Backlight Action Defines + +Backlight actions defines are provided through the [`dt-bindings/zmk/backlight.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/backlight.h) header, +which is added at the top of the keymap file: + +``` +#include +``` + +This will allow you to reference the actions defined in this header such as `BL_TOG`. + +Here is a table describing the action for each define: + +| Define | Action | +| -------- | ---------------------------------------- | +| `BL_TOG` | Toggles the backlight on and off | +| `BL_ON` | Turn on backlight on and off | +| `BL_OFF` | Toggles the backlight feature on and off | +| `BL_INC` | Increase backlight brightness | +| `BL_DEC` | Decrease backlight brightness | + +## Behavior Binding + +- Reference: `&bl` +- Parameter #1: The backlight action define, e.g. `BL_TOG` or `BL_INC` + +### Examples + +1. Toggle backlight on/off + + ``` + &bl BL_TOG + ``` + +1. Increase backlight brightness + + ``` + &bl BL_INC + ``` diff --git a/docs/docs/behaviors/lighting.md b/docs/docs/behaviors/underglow.md similarity index 88% rename from docs/docs/behaviors/lighting.md rename to docs/docs/behaviors/underglow.md index 6e6732beec6..597c2491ac0 100644 --- a/docs/docs/behaviors/lighting.md +++ b/docs/docs/behaviors/underglow.md @@ -1,12 +1,11 @@ --- -title: Lighting Behavior -sidebar_label: Lighting +title: RGB Underglow Behavior +sidebar_label: RGB Underglow --- ## Summary -Lighting is often used for either aesthetics or for the practical purposes of lighting up keys in the dark. -Currently ZMK supports RGB underglow, which can be changed and configured using its behavior. +This page contains [RGB Underglow](../features/underglow.md) behaviors supported by ZMK. ## RGB Action Defines @@ -36,11 +35,7 @@ Here is a table describing the action for each define: | `RGB_EFR` | Cycles the RGB feature's effect reverse | | `RGB_COLOR_HSB` | Sets a specific [HSB (HSV)](https://en.wikipedia.org/wiki/HSL_and_HSV) value for the underglow | -## RGB Underglow - -The "RGB underglow" behavior completes an RGB action given on press. - -### Behavior Binding +## Behavior Binding - Reference: `&rgb_ug` - Parameter #1: The RGB action define, e.g. `RGB_TOG` or `RGB_BRI` @@ -58,7 +53,7 @@ Value Limits: ::: -### Examples +## Examples 1. Toggle underglow on/off diff --git a/docs/docs/development/hardware-metadata-files.md b/docs/docs/development/hardware-metadata-files.md index 5d4902dc8b4..46fad411abb 100644 --- a/docs/docs/development/hardware-metadata-files.md +++ b/docs/docs/development/hardware-metadata-files.md @@ -94,6 +94,7 @@ Boards and shields should document the sets of hardware features found on them u - `display` - Indicates the hardware includes a display for use with the ZMK display functionality. - `encoder` - Indicates the hardware contains one or more rotary encoders. - `underglow` - Indicates the hardware includes underglow LEDs. +- `backlight` - Indicates the hardware includes backlight LEDs. - `pointer` (future) - Used to indicate the hardware includes one or more pointer inputs, e.g. joystick, touchpad, or trackpoint. ### Siblings diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md new file mode 100644 index 00000000000..a917b1669a7 --- /dev/null +++ b/docs/docs/features/backlight.md @@ -0,0 +1,115 @@ +--- +title: Backlight +sidebar_label: Backlight +--- + +Backlight is a feature used to control array of LEDs, usually placed through or under switches. Unlike [RGB Underglow](underglow.md), backlight currently allows only one color per LED, also LEDs are not addressable, so you can't control individual LEDs. + +## Enabling Backlight + +To enable backlight on your board or shield, simply enable the `CONFIG_ZMK_BACKLIGHT` configuration values in the `.conf` file of your user config directory as such: + +``` +CONFIG_ZMK_BACKLIGHT=y +``` + +If your board or shield does not have backlight configured, refer to [Adding Backlight to a Board](#adding-backlight-to-a-board). + +## Configuring Backlight + +There are various Kconfig options used to configure the backlight feature. These can all be set in the `.conf` file. + +| Option | Description | Default | +| ------------------------------------ | ----------------------------------------------------- | ------- | +| `CONFIG_ZMK_BACKLIGHT_BRT_STEP` | Brightness step in percent | 20 | +| `CONFIG_ZMK_BACKLIGHT_BRT_START` | Default brightness in percent | 40 | +| `CONFIG_ZMK_BACKLIGHT_ON_START` | Default backlight state | y | +| `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | Turn off backlight when keyboard goes into idle state | y | +| `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB` | Turn off backlight when USB is disconnected | n | + +## Adding Backlight to a Board + +Backlight is always added to a board, not a shield. +If you have a shield with backlight, you must add a `boards/` directory within your shield folder to define the backlight individually for each board that supports the shield. +Inside the `boards/` folder, you define a `.overlay` for each different board. + +First, you need to enable PWM by adding the following lines to your `.overlay` file: + +``` +&pwm0 { + status = "okay"; + ch0-pin = <45>; + /* ch0-inverted; */ +}; +``` + +The value `ch0-pin` represents the pin that controls the LEDs. To calculate the value to use, you need a bit of math. You need the hardware port and run it through a function. +**32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". + +For example, _P1.13_ would give you _32 \* 1 + 13_ = `<45>` and _P0.15_ would give you _32 \* 0 + 15_ = `<15>`. + +If your board uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to enable `ch0-inverted`. + +Then you have to add the following lines to your `.dtsi` file inside the root devicetree node: + +``` +backlight: pwmleds { + compatible = "pwm-leds"; + label = "Backlight LEDs"; + pwm_led_0 { + pwms = <&pwm0 45>; + }; +}; +``` + +The value inside `pwm_led_0` must be the same as you used before. + +:::info +Note that every LED inside of the backlight node will be treated as a backlight LED, so if you have other PWM LEDs you need to declare them in a separate node. Refer to [Multiple backlight LEDs](#multiple-backlight-leds) if you have multiple backlight LEDs. +::: + +Finally you need to add backlight to the `chosen` element of the root devicetree node: + +``` +chosen { + ... + zmk,backlight = &backlight; +}; +``` + +### Multiple backlight LEDs + +It is possible to control multiple backlight LEDs at the same time. This is useful if, for example, you have a Caps Lock LED connected to a different pin and you want it to be part of the backlight. + +In order to do that, first you need to enable PWM for each pin: + +``` +&pwm0 { + status = "okay"; + ch0-pin = <45>; /* LED 0 */ + ch1-pin = <46>; /* LED 1 */ + ch2-pin = <47>; /* LED 2 */ + ... +}; +``` + +This part may vary based on your MCU as different MCUs may have a different number of modules and channels. + +Then you can simply add each of your LED to the backlight node: + +``` +backlight: pwmleds { + compatible = "pwm-leds"; + label = "Backlight LEDs"; + pwm_led_0 { + pwms = <&pwm0 45>; /* LED 0 */ + }; + pwm_led_1 { + pwms = <&pwm0 46>; /* LED 1 */ + }; + pwm_led_2 { + pwms = <&pwm0 47>; /* LED 2 */ + }; + ... +}; +``` diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index ccdd063e1bf..76a0a3cbb72 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -18,6 +18,7 @@ In addition to the basic keyboard functionality, there is some initial support f - Encoders - Displays - RGB Underglow +- Backlight Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite). diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 39a52c6c7e9..b8a6316c914 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -28,6 +28,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | [Encoders](features/encoders.md)[^1] | ✅ | ✅ | ✅ | | [Display Support](features/displays.md)[^2] | 🚧 | 🚧 | ✅ | | [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | +| [Backlight](features/backlight.md) | ✅ | ✅ | ✅ | | One Shot Keys | ✅ | ✅ | ✅ | | [Combo Keys](features/combos.md) | ✅ | | ✅ | | Macros | 🚧 | ✅ | ✅ | diff --git a/docs/sidebars.js b/docs/sidebars.js index 38256219183..090dcb0fcee 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -16,6 +16,7 @@ module.exports = { "features/displays", "features/encoders", "features/underglow", + "features/backlight", "features/beta-testing", ], Behaviors: [ @@ -31,7 +32,8 @@ module.exports = { "behaviors/reset", "behaviors/bluetooth", "behaviors/outputs", - "behaviors/lighting", + "behaviors/underglow", + "behaviors/backlight", "behaviors/power", ], Codes: [ From f8bf8bffd54b8394a45dbbae69b1e3f7dc728cd0 Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Sat, 9 Oct 2021 18:25:09 +0200 Subject: [PATCH 0260/1130] feat(docs): add backlight to power profiler --- docs/src/components/power-estimate.js | 34 ++++++++- docs/src/data/power.js | 12 +++ docs/src/pages/power-profiler.js | 101 +++++++++++++++++++++++++- schema/hardware-metadata.schema.json | 1 + 4 files changed, 146 insertions(+), 2 deletions(-) diff --git a/docs/src/components/power-estimate.js b/docs/src/components/power-estimate.js index 2619862682a..2c0a53cd242 100644 --- a/docs/src/components/power-estimate.js +++ b/docs/src/components/power-estimate.js @@ -6,7 +6,12 @@ import React from "react"; import PropTypes from "prop-types"; -import { displayPower, underglowPower, zmkBase } from "../data/power"; +import { + displayPower, + underglowPower, + backlightPower, + zmkBase, +} from "../data/power"; import "../css/power-estimate.css"; // Average monthly discharge percent @@ -82,6 +87,7 @@ function PowerEstimate({ batteryMilliAh, usage, underglow, + backlight, display, }) { if (!board || !board.powerSupply.type || !batteryMilliAh) { @@ -180,6 +186,31 @@ function PowerEstimate({ }); } + if (backlight.backlightEnabled) { + let backlightMicroA = + ((board.powerSupply.outputVoltage - backlight.backlightVoltage) / + backlight.backlightResistance) * + 1000000 * + backlight.backlightBrightness * + backlight.backlightQuantity; + + if ( + backlight.backlightBrightness > 0 && + backlight.backlightBrightness < 1 + ) { + backlightMicroA += backlightPower.pwmPower; + } + + const backlightMicroW = backlightMicroA * voltageEquivalent; + const backlightUsage = backlightMicroW * (1 - usage.percentAsleep); + + totalUsage += backlightUsage; + powerUsage.push({ + title: "Backlight", + usage: backlightUsage, + }); + } + if (display.displayEnabled && display.displayType) { const { activePercent, active, sleep } = displayPower[display.displayType]; @@ -260,6 +291,7 @@ PowerEstimate.propTypes = { batteryMilliAh: PropTypes.number, usage: PropTypes.Object, underglow: PropTypes.Object, + backlight: PropTypes.Object, display: PropTypes.Object, }; diff --git a/docs/src/data/power.js b/docs/src/data/power.js index 5fe5912c871..28e4b0edbd9 100644 --- a/docs/src/data/power.js +++ b/docs/src/data/power.js @@ -71,6 +71,18 @@ export const underglowPower = { ledOff: 460, // Quiescent current of a WS2812B }; +export const backlightLEDs = { + White: 3.2, + Blue: 3.0, + Green: 2.2, + Yellow: 2.1, + Red: 1.8, +}; + +export const backlightPower = { + pwmPower: 510, // Estimated power consumption of PWM module +}; + export const displayPower = { // Based on GoodDisplay's 1.02in epaper EPAPER: { diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js index e96999266b5..c230257058c 100644 --- a/docs/src/pages/power-profiler.js +++ b/docs/src/pages/power-profiler.js @@ -11,7 +11,7 @@ import styles from "./styles.module.css"; import PowerEstimate from "../components/power-estimate"; import CustomBoardForm from "../components/custom-board-form"; import { useInput } from "../utils/hooks"; -import { zmkBoards } from "../data/power"; +import { zmkBoards, backlightLEDs } from "../data/power"; import "../css/power-profiler.css"; const Disclaimer = `This profiler makes many assumptions about typing @@ -41,6 +41,17 @@ function PowerProfiler() { const { value: glowQuantity, bind: bindGlowQuantity } = useInput(10); const { value: glowBrightness, bind: bindGlowBrightness } = useInput(1); + const { value: backlightEnabled, bind: bindBacklightEnabled } = + useInput(false); + const { value: backlightQuantity, bind: bindBacklightQuantity } = + useInput(60); + const { value: backlightColor, bind: bindBacklightColor } = useInput(""); + const { value: backlightVoltage, bind: bindBacklightVoltage } = useInput(2.2); + const { value: backlightResistance, bind: bindBacklightResistance } = + useInput(100); + const { value: backlightBrightness, bind: bindBacklightBrightness } = + useInput(1); + const { value: displayEnabled, bind: bindDisplayEnabled } = useInput(false); const { value: displayType, bind: bindDisplayType } = useInput(""); @@ -63,6 +74,11 @@ function PowerProfiler() { } : zmkBoards[board]; + const currentBacklightVoltage = + backlightColor === "custom" + ? backlightVoltage + : backlightLEDs[backlightColor || "White"]; + return ( )} +

    +
    + + +
    @@ -244,6 +322,13 @@ function PowerProfiler() { batteryMilliAh={batteryMilliAh} usage={{ bondedQty, percentAsleep }} underglow={{ glowEnabled, glowBrightness, glowQuantity }} + backlight={{ + backlightEnabled, + backlightVoltage: currentBacklightVoltage, + backlightResistance, + backlightBrightness, + backlightQuantity, + }} display={{ displayEnabled, displayType }} /> @@ -262,6 +354,13 @@ function PowerProfiler() { batteryMilliAh={batteryMilliAh} usage={{ bondedQty, percentAsleep }} underglow={{ glowEnabled, glowBrightness, glowQuantity }} + backlight={{ + backlightEnabled, + backlightVoltage: currentBacklightVoltage, + backlightResistance, + backlightBrightness, + backlightQuantity, + }} display={{ displayEnabled, displayType }} /> )} diff --git a/schema/hardware-metadata.schema.json b/schema/hardware-metadata.schema.json index a74c6ef141a..49755749282 100644 --- a/schema/hardware-metadata.schema.json +++ b/schema/hardware-metadata.schema.json @@ -55,6 +55,7 @@ "display", "encoder", "underglow", + "backlight", "pointer" ] } From 5614a8bb80e24f7640f0e9f1f82dc41098cded4d Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 20 Dec 2021 09:40:19 +0000 Subject: [PATCH 0261/1130] feat(backlight): initial split support --- app/dts/behaviors/backlight.dtsi | 2 +- .../behaviors/zmk,behavior-backlight.yaml | 2 +- app/include/dt-bindings/zmk/backlight.h | 18 ++- app/include/zmk/backlight.h | 13 +-- app/src/backlight.c | 110 ++++++++++-------- app/src/behaviors/behavior_backlight.c | 51 ++++++-- 6 files changed, 126 insertions(+), 70 deletions(-) diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi index b05d97ae2df..6127f605f24 100644 --- a/app/dts/behaviors/backlight.dtsi +++ b/app/dts/behaviors/backlight.dtsi @@ -9,7 +9,7 @@ /omit-if-no-ref/ bl: behavior_backlight { compatible = "zmk,behavior-backlight"; label = "BACKLIGHT"; - #binding-cells = <1>; + #binding-cells = <2>; }; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml b/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml index e035e15e604..159a7c70698 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-backlight.yaml @@ -5,4 +5,4 @@ description: Backlight behavior compatible: "zmk,behavior-backlight" -include: one_param.yaml +include: two_param.yaml diff --git a/app/include/dt-bindings/zmk/backlight.h b/app/include/dt-bindings/zmk/backlight.h index c33e4344557..7057243777f 100644 --- a/app/include/dt-bindings/zmk/backlight.h +++ b/app/include/dt-bindings/zmk/backlight.h @@ -4,8 +4,16 @@ * SPDX-License-Identifier: MIT */ -#define BL_TOG 0 -#define BL_ON 1 -#define BL_OFF 2 -#define BL_INC 3 -#define BL_DEC 4 +#define BL_TOG_CMD 0 +#define BL_ON_CMD 1 +#define BL_OFF_CMD 2 +#define BL_INC_CMD 3 +#define BL_DEC_CMD 4 +#define BL_SET_CMD 5 + +#define BL_TOG BL_TOG_CMD 0 +#define BL_ON BL_ON_CMD 0 +#define BL_OFF BL_OFF_CMD 0 +#define BL_INC BL_INC_CMD 0 +#define BL_DEC BL_DEC_CMD 0 +#define BL_SET BL_SET_CMD diff --git a/app/include/zmk/backlight.h b/app/include/zmk/backlight.h index 817efe7a253..8711d884fa1 100644 --- a/app/include/zmk/backlight.h +++ b/app/include/zmk/backlight.h @@ -6,14 +6,11 @@ #pragma once -int zmk_backlight_set_on(bool on); -bool zmk_backlight_is_on(); - -int zmk_backlight_set_brt(int brt); -int zmk_backlight_get_brt(); - int zmk_backlight_toggle(); +bool zmk_backlight_get_on(); int zmk_backlight_on(); int zmk_backlight_off(); -int zmk_backlight_inc(); -int zmk_backlight_dec(); +uint8_t zmk_backlight_calc_brt(int direction); +int zmk_backlight_set_brt(uint8_t brightness); +int zmk_backlight_adjust_brt(int direction); +int zmk_backlight_get_brt(); diff --git a/app/src/backlight.c b/app/src/backlight.c index 517e613337a..fc8831c7d9b 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -32,6 +32,8 @@ static const struct device *const backlight_dev = DEVICE_DT_GET(DT_CHOSEN(zmk_ba #define BACKLIGHT_NUM_LEDS (DT_NUM_CHILD(DT_CHOSEN(zmk_backlight))) +#define BRT_MAX 100 + struct backlight_state { uint8_t brightness; bool on; @@ -80,16 +82,7 @@ static void zmk_backlight_save_state_work() { } static struct k_delayed_work backlight_save_work; -#endif // IS_ENABLED(CONFIG_SETTINGS) - -static int zmk_backlight_save_state() { -#if IS_ENABLED(CONFIG_SETTINGS) - k_delayed_work_cancel(&backlight_save_work); - return k_delayed_work_submit(&backlight_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); -#else - return 0; #endif -} static int zmk_backlight_init(const struct device *_arg) { if (!device_is_ready(backlight_dev)) { @@ -114,11 +107,22 @@ static int zmk_backlight_init(const struct device *_arg) { return zmk_backlight_update(); } -int zmk_backlight_set_on(bool on) { +static int zmk_backlight_save_state() { +#if IS_ENABLED(CONFIG_SETTINGS) + k_delayed_work_cancel(&backlight_save_work); + return k_delayed_work_submit(&backlight_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); +#else + return 0; +#endif +} + +bool zmk_backlight_get_on() { return state.on; } + +int zmk_backlight_on() { if (!state.on && state.brightness == 0) { state.brightness = CONFIG_ZMK_BACKLIGHT_BRT_STEP; } - state.on = on; + state.on = true; int rc = zmk_backlight_update(); if (rc != 0) { @@ -128,11 +132,9 @@ int zmk_backlight_set_on(bool on) { return zmk_backlight_save_state(); } -bool zmk_backlight_is_on() { return state.on; } +int zmk_backlight_off() { -int zmk_backlight_set_brt(int brt) { - state.on = (brt > 0); - state.brightness = CLAMP(brt, 0, 100); + state.on = false; int rc = zmk_backlight_update(); if (rc != 0) { @@ -144,21 +146,42 @@ int zmk_backlight_set_brt(int brt) { int zmk_backlight_get_brt() { return state.on ? state.brightness : 0; } -int zmk_backlight_toggle() { return zmk_backlight_set_on(!state.on); } +int zmk_backlight_toggle() { return state.on ? zmk_backlight_off() : zmk_backlight_on(); } -int zmk_backlight_on() { return zmk_backlight_set_on(true); } +int zmk_backlight_set_brt(uint8_t brightness) { + if (brightness > BRT_MAX) { + brightness = BRT_MAX; + } -int zmk_backlight_off() { return zmk_backlight_set_on(false); } + state.brightness = brightness; + state.on = (brightness > 0); -int zmk_backlight_inc() { - if (!state.on) { - return zmk_backlight_set_brt(MAX(state.brightness, CONFIG_ZMK_BACKLIGHT_BRT_STEP)); + int rc = zmk_backlight_update(); + if (rc != 0) { + return rc; } - return zmk_backlight_set_brt(state.brightness + CONFIG_ZMK_BACKLIGHT_BRT_STEP); + + return zmk_backlight_save_state(); } -int zmk_backlight_dec() { - return zmk_backlight_set_brt(state.brightness - CONFIG_ZMK_BACKLIGHT_BRT_STEP); +uint8_t zmk_backlight_calc_brt(int direction) { + uint8_t brightness = state.brightness; + + int b = state.brightness + (direction * CONFIG_ZMK_BACKLIGHT_BRT_STEP); + return CLAMP(b, 0, BRT_MAX); +} + +int zmk_backlight_adjust_brt(int direction) { + + state.brightness = zmk_backlight_calc_brt(direction); + state.on = (state.brightness > 0); + + int rc = zmk_backlight_update(); + if (rc != 0) { + return rc; + } + + return zmk_backlight_save_state(); } #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) @@ -170,39 +193,34 @@ static bool auto_off_usb_prev_state = false; #endif #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) +static int backlight_auto_state(bool *prev_state, bool *new_state) { + if (state.on == *new_state) { + return 0; + } + if (*new_state) { + state.on = *prev_state; + *prev_state = false; + return zmk_backlight_on(); + } else { + state.on = false; + *prev_state = true; + return zmk_backlight_off(); + } +} + static int backlight_event_listener(const zmk_event_t *eh) { #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) if (as_zmk_activity_state_changed(eh)) { bool new_state = (zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE); - if (state.on == new_state) { - return 0; - } - if (new_state) { - state.on = auto_off_idle_prev_state; - auto_off_idle_prev_state = false; - } else { - state.on = false; - auto_off_idle_prev_state = true; - } - return zmk_backlight_update(); + return backlight_auto_state(&auto_off_idle_prev_state, &new_state); } #endif #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) if (as_zmk_usb_conn_state_changed(eh)) { bool new_state = zmk_usb_is_powered(); - if (state.on == new_state) { - return 0; - } - if (new_state) { - state.on = auto_off_usb_prev_state; - auto_off_usb_prev_state = false; - } else { - state.on = false; - auto_off_usb_prev_state = true; - } - return zmk_backlight_update(); + return backlight_auto_state(&auto_off_usb_prev_state, &new_state); } #endif diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 8d921f45544..3dcbd3c4f61 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -20,21 +20,52 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static int behavior_backlight_init(const struct device *dev) { return 0; } +static int +on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + switch (binding->param1) { + case BL_TOG_CMD: { + binding->param1 = zmk_backlight_get_on() ? BL_OFF_CMD : BL_ON_CMD; + break; + } + case BL_INC_CMD: { + uint8_t brightness = zmk_backlight_calc_brt(1); + + binding->param1 = BL_SET_CMD; + binding->param2 = brightness; + break; + } + case BL_DEC_CMD: { + uint8_t brightness = zmk_backlight_calc_brt(-1); + + binding->param1 = BL_SET_CMD; + binding->param2 = brightness; + break; + } + default: + return 0; + } + + LOG_DBG("Backlight relative to absolute (%d/%d)", binding->param1, binding->param2); + + return 0; +} + static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { - case BL_TOG: + case BL_TOG_CMD: return zmk_backlight_toggle(); - case BL_ON: + case BL_ON_CMD: return zmk_backlight_on(); - case BL_OFF: + case BL_OFF_CMD: return zmk_backlight_off(); - case BL_INC: - return zmk_backlight_inc(); - case BL_DEC: - return zmk_backlight_dec(); - default: - LOG_ERR("Unknown backlight command: %d", binding->param1); + case BL_INC_CMD: + return zmk_backlight_adjust_brt(1); + case BL_DEC_CMD: + return zmk_backlight_adjust_brt(-1); + case BL_SET_CMD: + return zmk_backlight_set_brt(binding->param2); } return -ENOTSUP; @@ -46,6 +77,8 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, } static const struct behavior_driver_api behavior_backlight_driver_api = { + .binding_convert_central_state_dependent_params = + on_keymap_binding_convert_central_state_dependent_params, .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, }; From ce843825e8343354d3e9bcc497adcc898602b294 Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Mon, 20 Dec 2021 11:00:22 +0100 Subject: [PATCH 0262/1130] refactor(backlight): code cleanup --- app/Kconfig | 2 - app/dts/behaviors/backlight.dtsi | 2 +- app/include/dt-bindings/zmk/backlight.h | 8 +- app/include/zmk/backlight.h | 10 +- app/src/backlight.c | 137 +++++++----------------- app/src/behaviors/behavior_backlight.c | 37 ++++--- docs/docs/features/backlight.md | 4 +- 7 files changed, 67 insertions(+), 133 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 49eec835e89..02fef66a2f1 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -352,11 +352,9 @@ config ZMK_BACKLIGHT_ON_START config ZMK_BACKLIGHT_AUTO_OFF_IDLE bool "Turn off backlight when keyboard goes into idle state" - default y config ZMK_BACKLIGHT_AUTO_OFF_USB bool "Turn off backlight when USB is disconnected" - default n #ZMK_BACKLIGHT endif diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi index 6127f605f24..f9bd02b8159 100644 --- a/app/dts/behaviors/backlight.dtsi +++ b/app/dts/behaviors/backlight.dtsi @@ -8,7 +8,7 @@ behaviors { /omit-if-no-ref/ bl: behavior_backlight { compatible = "zmk,behavior-backlight"; - label = "BACKLIGHT"; + label = "BCKLGHT"; #binding-cells = <2>; }; }; diff --git a/app/include/dt-bindings/zmk/backlight.h b/app/include/dt-bindings/zmk/backlight.h index 7057243777f..fa6dc9b1ff2 100644 --- a/app/include/dt-bindings/zmk/backlight.h +++ b/app/include/dt-bindings/zmk/backlight.h @@ -4,16 +4,16 @@ * SPDX-License-Identifier: MIT */ -#define BL_TOG_CMD 0 -#define BL_ON_CMD 1 -#define BL_OFF_CMD 2 +#define BL_ON_CMD 0 +#define BL_OFF_CMD 1 +#define BL_TOG_CMD 2 #define BL_INC_CMD 3 #define BL_DEC_CMD 4 #define BL_SET_CMD 5 -#define BL_TOG BL_TOG_CMD 0 #define BL_ON BL_ON_CMD 0 #define BL_OFF BL_OFF_CMD 0 +#define BL_TOG BL_TOG_CMD 0 #define BL_INC BL_INC_CMD 0 #define BL_DEC BL_DEC_CMD 0 #define BL_SET BL_SET_CMD diff --git a/app/include/zmk/backlight.h b/app/include/zmk/backlight.h index 8711d884fa1..dd7d966a7de 100644 --- a/app/include/zmk/backlight.h +++ b/app/include/zmk/backlight.h @@ -6,11 +6,11 @@ #pragma once -int zmk_backlight_toggle(); -bool zmk_backlight_get_on(); int zmk_backlight_on(); int zmk_backlight_off(); -uint8_t zmk_backlight_calc_brt(int direction); +int zmk_backlight_toggle(); +bool zmk_backlight_is_on(); + int zmk_backlight_set_brt(uint8_t brightness); -int zmk_backlight_adjust_brt(int direction); -int zmk_backlight_get_brt(); +uint8_t zmk_backlight_get_brt(); +uint8_t zmk_backlight_calc_brt(int direction); diff --git a/app/src/backlight.c b/app/src/backlight.c index fc8831c7d9b..6ef7f8f0996 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -43,10 +43,11 @@ static struct backlight_state state = {.brightness = CONFIG_ZMK_BACKLIGHT_BRT_ST .on = IS_ENABLED(CONFIG_ZMK_BACKLIGHT_ON_START)}; static int zmk_backlight_update() { - uint8_t brt = state.on ? state.brightness : 0; + uint8_t brt = zmk_backlight_get_brt(); for (int i = 0; i < BACKLIGHT_NUM_LEDS; i++) { int rc = led_set_brightness(backlight_dev, i, brt); if (rc != 0) { + LOG_ERR("Failed to update backlight LED %d: %d", i, rc); return rc; } } @@ -54,34 +55,25 @@ static int zmk_backlight_update() { } #if IS_ENABLED(CONFIG_SETTINGS) -static int backlight_settings_set(const char *name, size_t len, settings_read_cb read_cb, - void *cb_arg) { +static int backlight_settings_load_cb(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg, void *param) { const char *next; - if (settings_name_steq(name, "state", &next) && !next) { if (len != sizeof(state)) { return -EINVAL; } int rc = read_cb(cb_arg, &state, sizeof(state)); - if (rc < 0) { - return rc; - } - - return zmk_backlight_update(); + return MIN(rc, 0); } - return -ENOENT; } -static struct settings_handler backlight_conf = {.name = "backlight", - .h_set = backlight_settings_set}; - -static void zmk_backlight_save_state_work() { +static void backlight_save_work_handler(struct k_work *work) { settings_save_one("backlight/state", &state, sizeof(state)); } -static struct k_delayed_work backlight_save_work; +static K_DELAYED_WORK_DEFINE(backlight_save_work, backlight_save_work_handler); #endif static int zmk_backlight_init(const struct device *_arg) { @@ -92,22 +84,21 @@ static int zmk_backlight_init(const struct device *_arg) { #if IS_ENABLED(CONFIG_SETTINGS) settings_subsys_init(); - - int err = settings_register(&backlight_conf); - if (err) { - LOG_ERR("Failed to register the backlight settings handler (err %d)", err); - return err; + int rc = settings_load_subtree_direct("backlight", backlight_settings_load_cb, NULL); + if (rc != 0) { + LOG_ERR("Failed to load backlight settings: %d", rc); } - - k_delayed_work_init(&backlight_save_work, zmk_backlight_save_state_work); - - settings_load_subtree("backlight"); #endif return zmk_backlight_update(); } -static int zmk_backlight_save_state() { +static int zmk_backlight_update_and_save() { + int rc = zmk_backlight_update(); + if (rc != 0) { + return rc; + } + #if IS_ENABLED(CONFIG_SETTINGS) k_delayed_work_cancel(&backlight_save_work); return k_delayed_work_submit(&backlight_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); @@ -116,111 +107,57 @@ static int zmk_backlight_save_state() { #endif } -bool zmk_backlight_get_on() { return state.on; } - int zmk_backlight_on() { - if (!state.on && state.brightness == 0) { - state.brightness = CONFIG_ZMK_BACKLIGHT_BRT_STEP; - } + state.brightness = MAX(state.brightness, CONFIG_ZMK_BACKLIGHT_BRT_STEP); state.on = true; - - int rc = zmk_backlight_update(); - if (rc != 0) { - return rc; - } - - return zmk_backlight_save_state(); + return zmk_backlight_update_and_save(); } int zmk_backlight_off() { - state.on = false; - - int rc = zmk_backlight_update(); - if (rc != 0) { - return rc; - } - - return zmk_backlight_save_state(); + return zmk_backlight_update_and_save(); } -int zmk_backlight_get_brt() { return state.on ? state.brightness : 0; } - int zmk_backlight_toggle() { return state.on ? zmk_backlight_off() : zmk_backlight_on(); } -int zmk_backlight_set_brt(uint8_t brightness) { - if (brightness > BRT_MAX) { - brightness = BRT_MAX; - } - - state.brightness = brightness; - state.on = (brightness > 0); - - int rc = zmk_backlight_update(); - if (rc != 0) { - return rc; - } - - return zmk_backlight_save_state(); -} - -uint8_t zmk_backlight_calc_brt(int direction) { - uint8_t brightness = state.brightness; - - int b = state.brightness + (direction * CONFIG_ZMK_BACKLIGHT_BRT_STEP); - return CLAMP(b, 0, BRT_MAX); -} - -int zmk_backlight_adjust_brt(int direction) { +bool zmk_backlight_is_on() { return state.on; } - state.brightness = zmk_backlight_calc_brt(direction); +int zmk_backlight_set_brt(uint8_t brightness) { + state.brightness = MIN(brightness, BRT_MAX); state.on = (state.brightness > 0); - - int rc = zmk_backlight_update(); - if (rc != 0) { - return rc; - } - - return zmk_backlight_save_state(); + return zmk_backlight_update_and_save(); } -#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) -static bool auto_off_idle_prev_state = false; -#endif +uint8_t zmk_backlight_get_brt() { return state.on ? state.brightness : 0; } -#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) -static bool auto_off_usb_prev_state = false; -#endif +uint8_t zmk_backlight_calc_brt(int direction) { + int brt = state.brightness + (direction * CONFIG_ZMK_BACKLIGHT_BRT_STEP); + return CLAMP(brt, 0, BRT_MAX); +} #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) -static int backlight_auto_state(bool *prev_state, bool *new_state) { - if (state.on == *new_state) { +static int backlight_auto_state(bool *prev_state, bool new_state) { + if (state.on == new_state) { return 0; } - if (*new_state) { - state.on = *prev_state; - *prev_state = false; - return zmk_backlight_on(); - } else { - state.on = false; - *prev_state = true; - return zmk_backlight_off(); - } + state.on = new_state && *prev_state; + *prev_state = !new_state; + return zmk_backlight_update(); } static int backlight_event_listener(const zmk_event_t *eh) { #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) if (as_zmk_activity_state_changed(eh)) { - bool new_state = (zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE); - return backlight_auto_state(&auto_off_idle_prev_state, &new_state); + static bool prev_state = false; + return backlight_auto_state(&prev_state, zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE); } #endif #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) if (as_zmk_usb_conn_state_changed(eh)) { - bool new_state = zmk_usb_is_powered(); - return backlight_auto_state(&auto_off_usb_prev_state, &new_state); + static bool prev_state = false; + return backlight_auto_state(&prev_state, zmk_usb_is_powered()); } #endif diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 3dcbd3c4f61..8dd6ee58f26 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -24,24 +24,17 @@ static int on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { - case BL_TOG_CMD: { - binding->param1 = zmk_backlight_get_on() ? BL_OFF_CMD : BL_ON_CMD; + case BL_TOG_CMD: + binding->param1 = zmk_backlight_is_on() ? BL_OFF_CMD : BL_ON_CMD; break; - } - case BL_INC_CMD: { - uint8_t brightness = zmk_backlight_calc_brt(1); - + case BL_INC_CMD: binding->param1 = BL_SET_CMD; - binding->param2 = brightness; + binding->param2 = zmk_backlight_calc_brt(1); break; - } - case BL_DEC_CMD: { - uint8_t brightness = zmk_backlight_calc_brt(-1); - + case BL_DEC_CMD: binding->param1 = BL_SET_CMD; - binding->param2 = brightness; + binding->param2 = zmk_backlight_calc_brt(-1); break; - } default: return 0; } @@ -54,18 +47,24 @@ on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_bin static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { - case BL_TOG_CMD: - return zmk_backlight_toggle(); case BL_ON_CMD: return zmk_backlight_on(); case BL_OFF_CMD: return zmk_backlight_off(); - case BL_INC_CMD: - return zmk_backlight_adjust_brt(1); - case BL_DEC_CMD: - return zmk_backlight_adjust_brt(-1); + case BL_TOG_CMD: + return zmk_backlight_toggle(); + case BL_INC_CMD: { + uint8_t brt = zmk_backlight_calc_brt(1); + return zmk_backlight_set_brt(brt); + } + case BL_DEC_CMD: { + uint8_t brt = zmk_backlight_calc_brt(-1); + return zmk_backlight_set_brt(brt); + } case BL_SET_CMD: return zmk_backlight_set_brt(binding->param2); + default: + LOG_ERR("Unknown backlight command: %d", binding->param1); } return -ENOTSUP; diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index a917b1669a7..f43c7357758 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -24,7 +24,7 @@ There are various Kconfig options used to configure the backlight feature. These | `CONFIG_ZMK_BACKLIGHT_BRT_STEP` | Brightness step in percent | 20 | | `CONFIG_ZMK_BACKLIGHT_BRT_START` | Default brightness in percent | 40 | | `CONFIG_ZMK_BACKLIGHT_ON_START` | Default backlight state | y | -| `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | Turn off backlight when keyboard goes into idle state | y | +| `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | Turn off backlight when keyboard goes into idle state | n | | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB` | Turn off backlight when USB is disconnected | n | ## Adding Backlight to a Board @@ -43,7 +43,7 @@ First, you need to enable PWM by adding the following lines to your `.overlay` f }; ``` -The value `ch0-pin` represents the pin that controls the LEDs. To calculate the value to use, you need a bit of math. You need the hardware port and run it through a function. +The value `ch0-pin` represents the pin that controls the LEDs. With nRF52 boards, you can calculate the value to use in the following way: you need the hardware port and run it through a function. **32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". For example, _P1.13_ would give you _32 \* 1 + 13_ = `<45>` and _P0.15_ would give you _32 \* 0 + 15_ = `<15>`. From 2c0fe3934d461fe8b565f90f3c5d092ba231caf1 Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Mon, 20 Dec 2021 13:58:31 +0100 Subject: [PATCH 0263/1130] feat(backlight): add tests --- app/Kconfig | 2 - app/src/backlight.c | 2 + app/tests/backlight/basic/events.patterns | 1 + .../backlight/basic/keycode_events.snapshot | 9 +++++ app/tests/backlight/basic/native_posix.conf | 14 +++++++ app/tests/backlight/basic/native_posix.keymap | 30 ++++++++++++++ app/tests/backlight/behavior_keymap.dtsi | 34 ++++++++++++++++ .../backlight/config-brt/events.patterns | 1 + .../config-brt/keycode_events.snapshot | 3 ++ .../backlight/config-brt/native_posix.conf | 15 +++++++ .../backlight/config-brt/native_posix.keymap | 12 ++++++ app/tests/backlight/config-on/events.patterns | 1 + .../config-on/keycode_events.snapshot | 3 ++ .../backlight/config-on/native_posix.conf | 15 +++++++ .../backlight/config-on/native_posix.keymap | 12 ++++++ .../backlight/config-step/events.patterns | 1 + .../config-step/keycode_events.snapshot | 11 ++++++ .../backlight/config-step/native_posix.conf | 16 ++++++++ .../backlight/config-step/native_posix.keymap | 36 +++++++++++++++++ .../backlight/low-brightness/events.patterns | 1 + .../low-brightness/keycode_events.snapshot | 12 ++++++ .../low-brightness/native_posix.conf | 14 +++++++ .../low-brightness/native_posix.keymap | 39 +++++++++++++++++++ docs/docs/features/backlight.md | 4 +- 24 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 app/tests/backlight/basic/events.patterns create mode 100644 app/tests/backlight/basic/keycode_events.snapshot create mode 100644 app/tests/backlight/basic/native_posix.conf create mode 100644 app/tests/backlight/basic/native_posix.keymap create mode 100644 app/tests/backlight/behavior_keymap.dtsi create mode 100644 app/tests/backlight/config-brt/events.patterns create mode 100644 app/tests/backlight/config-brt/keycode_events.snapshot create mode 100644 app/tests/backlight/config-brt/native_posix.conf create mode 100644 app/tests/backlight/config-brt/native_posix.keymap create mode 100644 app/tests/backlight/config-on/events.patterns create mode 100644 app/tests/backlight/config-on/keycode_events.snapshot create mode 100644 app/tests/backlight/config-on/native_posix.conf create mode 100644 app/tests/backlight/config-on/native_posix.keymap create mode 100644 app/tests/backlight/config-step/events.patterns create mode 100644 app/tests/backlight/config-step/keycode_events.snapshot create mode 100644 app/tests/backlight/config-step/native_posix.conf create mode 100644 app/tests/backlight/config-step/native_posix.keymap create mode 100644 app/tests/backlight/low-brightness/events.patterns create mode 100644 app/tests/backlight/low-brightness/keycode_events.snapshot create mode 100644 app/tests/backlight/low-brightness/native_posix.conf create mode 100644 app/tests/backlight/low-brightness/native_posix.keymap diff --git a/app/Kconfig b/app/Kconfig index 02fef66a2f1..1c9f929db66 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -330,9 +330,7 @@ endif menuconfig ZMK_BACKLIGHT bool "LED backlight" - select PWM select LED - select ZMK_LED_PWM if ZMK_BACKLIGHT diff --git a/app/src/backlight.c b/app/src/backlight.c index 6ef7f8f0996..46e3c9e34e1 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -44,6 +44,8 @@ static struct backlight_state state = {.brightness = CONFIG_ZMK_BACKLIGHT_BRT_ST static int zmk_backlight_update() { uint8_t brt = zmk_backlight_get_brt(); + LOG_DBG("Update backlight brightness: %d%%", brt); + for (int i = 0; i < BACKLIGHT_NUM_LEDS; i++) { int rc = led_set_brightness(backlight_dev, i, brt); if (rc != 0) { diff --git a/app/tests/backlight/basic/events.patterns b/app/tests/backlight/basic/events.patterns new file mode 100644 index 00000000000..bb11bc15e5b --- /dev/null +++ b/app/tests/backlight/basic/events.patterns @@ -0,0 +1 @@ +s/.*zmk_backlight_update: //p diff --git a/app/tests/backlight/basic/keycode_events.snapshot b/app/tests/backlight/basic/keycode_events.snapshot new file mode 100644 index 00000000000..4aa184cd33a --- /dev/null +++ b/app/tests/backlight/basic/keycode_events.snapshot @@ -0,0 +1,9 @@ +Update backlight brightness: 40% +Update backlight brightness: 60% +Update backlight brightness: 80% +Update backlight brightness: 60% +Update backlight brightness: 40% +Update backlight brightness: 0% +Update backlight brightness: 0% +Update backlight brightness: 40% +Update backlight brightness: 40% diff --git a/app/tests/backlight/basic/native_posix.conf b/app/tests/backlight/basic/native_posix.conf new file mode 100644 index 00000000000..565121d3199 --- /dev/null +++ b/app/tests/backlight/basic/native_posix.conf @@ -0,0 +1,14 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=y +CONFIG_GPIO_EMUL=y +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 + +CONFIG_LED_GPIO=y +CONFIG_ZMK_BACKLIGHT=y diff --git a/app/tests/backlight/basic/native_posix.keymap b/app/tests/backlight/basic/native_posix.keymap new file mode 100644 index 00000000000..185dbf7c8af --- /dev/null +++ b/app/tests/backlight/basic/native_posix.keymap @@ -0,0 +1,30 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; diff --git a/app/tests/backlight/behavior_keymap.dtsi b/app/tests/backlight/behavior_keymap.dtsi new file mode 100644 index 00000000000..26869272551 --- /dev/null +++ b/app/tests/backlight/behavior_keymap.dtsi @@ -0,0 +1,34 @@ +#include +#include +#include +#include + +/ { + chosen { + zmk,backlight = &backlight; + }; + + backlight: leds { + compatible = "gpio-leds"; + led_0 { + gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + led_1 { + gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 1"; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &bl BL_INC &bl BL_DEC + &bl BL_ON &bl BL_OFF + >; + }; + }; +}; diff --git a/app/tests/backlight/config-brt/events.patterns b/app/tests/backlight/config-brt/events.patterns new file mode 100644 index 00000000000..bb11bc15e5b --- /dev/null +++ b/app/tests/backlight/config-brt/events.patterns @@ -0,0 +1 @@ +s/.*zmk_backlight_update: //p diff --git a/app/tests/backlight/config-brt/keycode_events.snapshot b/app/tests/backlight/config-brt/keycode_events.snapshot new file mode 100644 index 00000000000..3297a7cd680 --- /dev/null +++ b/app/tests/backlight/config-brt/keycode_events.snapshot @@ -0,0 +1,3 @@ +Update backlight brightness: 60% +Update backlight brightness: 80% +Update backlight brightness: 60% diff --git a/app/tests/backlight/config-brt/native_posix.conf b/app/tests/backlight/config-brt/native_posix.conf new file mode 100644 index 00000000000..0d0758c0f9b --- /dev/null +++ b/app/tests/backlight/config-brt/native_posix.conf @@ -0,0 +1,15 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=y +CONFIG_GPIO_EMUL=y +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 + +CONFIG_LED_GPIO=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_BRT_START=60 diff --git a/app/tests/backlight/config-brt/native_posix.keymap b/app/tests/backlight/config-brt/native_posix.keymap new file mode 100644 index 00000000000..6617c9f69c7 --- /dev/null +++ b/app/tests/backlight/config-brt/native_posix.keymap @@ -0,0 +1,12 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; diff --git a/app/tests/backlight/config-on/events.patterns b/app/tests/backlight/config-on/events.patterns new file mode 100644 index 00000000000..bb11bc15e5b --- /dev/null +++ b/app/tests/backlight/config-on/events.patterns @@ -0,0 +1 @@ +s/.*zmk_backlight_update: //p diff --git a/app/tests/backlight/config-on/keycode_events.snapshot b/app/tests/backlight/config-on/keycode_events.snapshot new file mode 100644 index 00000000000..8797af58132 --- /dev/null +++ b/app/tests/backlight/config-on/keycode_events.snapshot @@ -0,0 +1,3 @@ +Update backlight brightness: 0% +Update backlight brightness: 40% +Update backlight brightness: 0% diff --git a/app/tests/backlight/config-on/native_posix.conf b/app/tests/backlight/config-on/native_posix.conf new file mode 100644 index 00000000000..241c66a7c60 --- /dev/null +++ b/app/tests/backlight/config-on/native_posix.conf @@ -0,0 +1,15 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=y +CONFIG_GPIO_EMUL=y +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 + +CONFIG_LED_GPIO=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_ON_START=n diff --git a/app/tests/backlight/config-on/native_posix.keymap b/app/tests/backlight/config-on/native_posix.keymap new file mode 100644 index 00000000000..a95ccd93ef0 --- /dev/null +++ b/app/tests/backlight/config-on/native_posix.keymap @@ -0,0 +1,12 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + >; +}; diff --git a/app/tests/backlight/config-step/events.patterns b/app/tests/backlight/config-step/events.patterns new file mode 100644 index 00000000000..bb11bc15e5b --- /dev/null +++ b/app/tests/backlight/config-step/events.patterns @@ -0,0 +1 @@ +s/.*zmk_backlight_update: //p diff --git a/app/tests/backlight/config-step/keycode_events.snapshot b/app/tests/backlight/config-step/keycode_events.snapshot new file mode 100644 index 00000000000..4532fed49b3 --- /dev/null +++ b/app/tests/backlight/config-step/keycode_events.snapshot @@ -0,0 +1,11 @@ +Update backlight brightness: 60% +Update backlight brightness: 90% +Update backlight brightness: 100% +Update backlight brightness: 100% +Update backlight brightness: 70% +Update backlight brightness: 40% +Update backlight brightness: 10% +Update backlight brightness: 0% +Update backlight brightness: 0% +Update backlight brightness: 30% +Update backlight brightness: 60% diff --git a/app/tests/backlight/config-step/native_posix.conf b/app/tests/backlight/config-step/native_posix.conf new file mode 100644 index 00000000000..4df7a86164c --- /dev/null +++ b/app/tests/backlight/config-step/native_posix.conf @@ -0,0 +1,16 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=y +CONFIG_GPIO_EMUL=y +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 + +CONFIG_LED_GPIO=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_BRT_START=60 +CONFIG_ZMK_BACKLIGHT_BRT_STEP=30 diff --git a/app/tests/backlight/config-step/native_posix.keymap b/app/tests/backlight/config-step/native_posix.keymap new file mode 100644 index 00000000000..96fbe96a03e --- /dev/null +++ b/app/tests/backlight/config-step/native_posix.keymap @@ -0,0 +1,36 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/backlight/low-brightness/events.patterns b/app/tests/backlight/low-brightness/events.patterns new file mode 100644 index 00000000000..bb11bc15e5b --- /dev/null +++ b/app/tests/backlight/low-brightness/events.patterns @@ -0,0 +1 @@ +s/.*zmk_backlight_update: //p diff --git a/app/tests/backlight/low-brightness/keycode_events.snapshot b/app/tests/backlight/low-brightness/keycode_events.snapshot new file mode 100644 index 00000000000..9fee324784f --- /dev/null +++ b/app/tests/backlight/low-brightness/keycode_events.snapshot @@ -0,0 +1,12 @@ +Update backlight brightness: 40% +Update backlight brightness: 20% +Update backlight brightness: 0% +Update backlight brightness: 20% +Update backlight brightness: 0% +Update backlight brightness: 40% +Update backlight brightness: 60% +Update backlight brightness: 0% +Update backlight brightness: 40% +Update backlight brightness: 20% +Update backlight brightness: 0% +Update backlight brightness: 20% diff --git a/app/tests/backlight/low-brightness/native_posix.conf b/app/tests/backlight/low-brightness/native_posix.conf new file mode 100644 index 00000000000..565121d3199 --- /dev/null +++ b/app/tests/backlight/low-brightness/native_posix.conf @@ -0,0 +1,14 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=y +CONFIG_GPIO_EMUL=y +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 + +CONFIG_LED_GPIO=y +CONFIG_ZMK_BACKLIGHT=y diff --git a/app/tests/backlight/low-brightness/native_posix.keymap b/app/tests/backlight/low-brightness/native_posix.keymap new file mode 100644 index 00000000000..3b01f7006ab --- /dev/null +++ b/app/tests/backlight/low-brightness/native_posix.keymap @@ -0,0 +1,39 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index f43c7357758..379cc770a09 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -7,9 +7,11 @@ Backlight is a feature used to control array of LEDs, usually placed through or ## Enabling Backlight -To enable backlight on your board or shield, simply enable the `CONFIG_ZMK_BACKLIGHT` configuration values in the `.conf` file of your user config directory as such: +To enable backlight on your board or shield, add the following lines to your `.conf` file of your user config directory as such: ``` +CONFIG_PWM=y +CONFIG_LED_PWM=y CONFIG_ZMK_BACKLIGHT=y ``` From 13a45153004a63dccc421463ddac9ac9075e32cd Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Sat, 22 Jan 2022 11:57:51 +0100 Subject: [PATCH 0264/1130] feat(backlight): add command to cycle brightness --- app/include/dt-bindings/zmk/backlight.h | 4 +- app/include/zmk/backlight.h | 1 + app/src/backlight.c | 8 ++ app/src/behaviors/behavior_backlight.c | 8 ++ app/tests/backlight/cycle/events.patterns | 1 + .../backlight/cycle/keycode_events.snapshot | 14 ++++ app/tests/backlight/cycle/native_posix.conf | 14 ++++ app/tests/backlight/cycle/native_posix.keymap | 78 +++++++++++++++++++ docs/docs/behaviors/backlight.md | 21 ++--- 9 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 app/tests/backlight/cycle/events.patterns create mode 100644 app/tests/backlight/cycle/keycode_events.snapshot create mode 100644 app/tests/backlight/cycle/native_posix.conf create mode 100644 app/tests/backlight/cycle/native_posix.keymap diff --git a/app/include/dt-bindings/zmk/backlight.h b/app/include/dt-bindings/zmk/backlight.h index fa6dc9b1ff2..0802e2ce4cc 100644 --- a/app/include/dt-bindings/zmk/backlight.h +++ b/app/include/dt-bindings/zmk/backlight.h @@ -9,11 +9,13 @@ #define BL_TOG_CMD 2 #define BL_INC_CMD 3 #define BL_DEC_CMD 4 -#define BL_SET_CMD 5 +#define BL_CYCLE_CMD 5 +#define BL_SET_CMD 6 #define BL_ON BL_ON_CMD 0 #define BL_OFF BL_OFF_CMD 0 #define BL_TOG BL_TOG_CMD 0 #define BL_INC BL_INC_CMD 0 #define BL_DEC BL_DEC_CMD 0 +#define BL_CYCLE BL_CYCLE_CMD 0 #define BL_SET BL_SET_CMD diff --git a/app/include/zmk/backlight.h b/app/include/zmk/backlight.h index dd7d966a7de..a0f52431175 100644 --- a/app/include/zmk/backlight.h +++ b/app/include/zmk/backlight.h @@ -14,3 +14,4 @@ bool zmk_backlight_is_on(); int zmk_backlight_set_brt(uint8_t brightness); uint8_t zmk_backlight_get_brt(); uint8_t zmk_backlight_calc_brt(int direction); +uint8_t zmk_backlight_calc_brt_cycle(); diff --git a/app/src/backlight.c b/app/src/backlight.c index 46e3c9e34e1..e87086425bb 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -137,6 +137,14 @@ uint8_t zmk_backlight_calc_brt(int direction) { return CLAMP(brt, 0, BRT_MAX); } +uint8_t zmk_backlight_calc_brt_cycle() { + if (state.brightness == BRT_MAX) { + return 0; + } else { + return zmk_backlight_calc_brt(1); + } +} + #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) static int backlight_auto_state(bool *prev_state, bool new_state) { if (state.on == new_state) { diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 8dd6ee58f26..bdad828d301 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -35,6 +35,10 @@ on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_bin binding->param1 = BL_SET_CMD; binding->param2 = zmk_backlight_calc_brt(-1); break; + case BL_CYCLE_CMD: + binding->param1 = BL_SET_CMD; + binding->param2 = zmk_backlight_calc_brt_cycle(); + break; default: return 0; } @@ -61,6 +65,10 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, uint8_t brt = zmk_backlight_calc_brt(-1); return zmk_backlight_set_brt(brt); } + case BL_CYCLE_CMD: { + uint8_t brt = zmk_backlight_calc_brt_cycle(); + return zmk_backlight_set_brt(brt); + } case BL_SET_CMD: return zmk_backlight_set_brt(binding->param2); default: diff --git a/app/tests/backlight/cycle/events.patterns b/app/tests/backlight/cycle/events.patterns new file mode 100644 index 00000000000..bb11bc15e5b --- /dev/null +++ b/app/tests/backlight/cycle/events.patterns @@ -0,0 +1 @@ +s/.*zmk_backlight_update: //p diff --git a/app/tests/backlight/cycle/keycode_events.snapshot b/app/tests/backlight/cycle/keycode_events.snapshot new file mode 100644 index 00000000000..70d0988c14a --- /dev/null +++ b/app/tests/backlight/cycle/keycode_events.snapshot @@ -0,0 +1,14 @@ +Update backlight brightness: 40% +Update backlight brightness: 60% +Update backlight brightness: 80% +Update backlight brightness: 100% +Update backlight brightness: 0% +Update backlight brightness: 20% +Update backlight brightness: 40% +Update backlight brightness: 60% +Update backlight brightness: 80% +Update backlight brightness: 100% +Update backlight brightness: 0% +Update backlight brightness: 20% +Update backlight brightness: 40% +Update backlight brightness: 60% diff --git a/app/tests/backlight/cycle/native_posix.conf b/app/tests/backlight/cycle/native_posix.conf new file mode 100644 index 00000000000..565121d3199 --- /dev/null +++ b/app/tests/backlight/cycle/native_posix.conf @@ -0,0 +1,14 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=y +CONFIG_GPIO_EMUL=y +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 + +CONFIG_LED_GPIO=y +CONFIG_ZMK_BACKLIGHT=y diff --git a/app/tests/backlight/cycle/native_posix.keymap b/app/tests/backlight/cycle/native_posix.keymap new file mode 100644 index 00000000000..a2f3c830c85 --- /dev/null +++ b/app/tests/backlight/cycle/native_posix.keymap @@ -0,0 +1,78 @@ +#include +#include +#include +#include + +/ { + chosen { + zmk,backlight = &backlight; + }; + + backlight: leds { + compatible = "gpio-leds"; + led_0 { + gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + led_1 { + gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 1"; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &bl BL_CYCLE &none + &none &none + >; + }; + }; +}; + +&kscan { + events = < + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index c1a92c90fb8..e8d3340e909 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -20,18 +20,21 @@ This will allow you to reference the actions defined in this header such as `BL_ Here is a table describing the action for each define: -| Define | Action | -| -------- | ---------------------------------------- | -| `BL_TOG` | Toggles the backlight on and off | -| `BL_ON` | Turn on backlight on and off | -| `BL_OFF` | Toggles the backlight feature on and off | -| `BL_INC` | Increase backlight brightness | -| `BL_DEC` | Decrease backlight brightness | +| Define | Action | +| ---------- | --------------------------- | +| `BL_ON` | Turn on backlight | +| `BL_OFF` | Turn off backlight | +| `BL_TOG` | Toggle backlight on and off | +| `BL_INC` | Increase brightness | +| `BL_DEC` | Decrease brightness | +| `BL_CYCLE` | Cycle brightness | +| `BL_SET` | Set a specific brightness | ## Behavior Binding - Reference: `&bl` - Parameter #1: The backlight action define, e.g. `BL_TOG` or `BL_INC` +- Parameter #2: Only applies to `BL_SET`and is the brightness value ### Examples @@ -41,8 +44,8 @@ Here is a table describing the action for each define: &bl BL_TOG ``` -1. Increase backlight brightness +1. Sets a specific brightness ``` - &bl BL_INC + &bl BL_SET 50 ``` From be94e049633e2481165ba5b1f9bd07a51b07e62c Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Fri, 21 Jan 2022 22:58:25 +0100 Subject: [PATCH 0265/1130] docs(backlight): improve documentation --- docs/docs/features/backlight.md | 146 ++++++++++++++++++++++++++++---- 1 file changed, 128 insertions(+), 18 deletions(-) diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index 379cc770a09..ef1c0521ad7 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -3,19 +3,20 @@ title: Backlight sidebar_label: Backlight --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + Backlight is a feature used to control array of LEDs, usually placed through or under switches. Unlike [RGB Underglow](underglow.md), backlight currently allows only one color per LED, also LEDs are not addressable, so you can't control individual LEDs. ## Enabling Backlight -To enable backlight on your board or shield, add the following lines to your `.conf` file of your user config directory as such: +To enable backlight on your board or shield, add the following line to your `.conf` file of your user config directory as such: ``` -CONFIG_PWM=y -CONFIG_LED_PWM=y CONFIG_ZMK_BACKLIGHT=y ``` -If your board or shield does not have backlight configured, refer to [Adding Backlight to a Board](#adding-backlight-to-a-board). +If your board or shield does not have backlight configured, refer to [Adding Backlight to a board or a shield](#adding-backlight-to-a-board-or-a-shield). ## Configuring Backlight @@ -29,13 +30,31 @@ There are various Kconfig options used to configure the backlight feature. These | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | Turn off backlight when keyboard goes into idle state | n | | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB` | Turn off backlight when USB is disconnected | n | -## Adding Backlight to a Board +## Adding Backlight to a board or a shield + + + + +First, you must enable PWM by adding the following lines to your `Kconfig.defconfig` file: + +``` +if ZMK_BACKLIGHT + +config PWM + default y -Backlight is always added to a board, not a shield. -If you have a shield with backlight, you must add a `boards/` directory within your shield folder to define the backlight individually for each board that supports the shield. -Inside the `boards/` folder, you define a `.overlay` for each different board. +config LED_PWM + default y + +endif # ZMK_BACKLIGHT +``` -First, you need to enable PWM by adding the following lines to your `.overlay` file: +Then you have to add the following lines to your `.dts` file: ``` &pwm0 { @@ -52,14 +71,17 @@ For example, _P1.13_ would give you _32 \* 1 + 13_ = `<45>` and _P0.15_ would gi If your board uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to enable `ch0-inverted`. -Then you have to add the following lines to your `.dtsi` file inside the root devicetree node: +Then you have to add the following lines inside the root devicetree node on the same file as before: ``` -backlight: pwmleds { - compatible = "pwm-leds"; - label = "Backlight LEDs"; - pwm_led_0 { - pwms = <&pwm0 45>; +/ { + backlight: pwmleds { + compatible = "pwm-leds"; + label = "Backlight LEDs"; + pwm_led_0 { + pwms = <&pwm0 45>; + label = "Backlight LED 0"; + }; }; }; ``` @@ -73,12 +95,100 @@ Note that every LED inside of the backlight node will be treated as a backlight Finally you need to add backlight to the `chosen` element of the root devicetree node: ``` -chosen { - ... - zmk,backlight = &backlight; +/ { + chosen { + zmk,backlight = &backlight; + }; +}: +``` + + + + +You must first add a `boards/` directory within your shield folder. For each board that supports the shield you must create a `.defconfig` file and a `.overlay` file inside the `boards/` folder. + +Inside your `.defconfig` file, add the following lines: + +``` +if ZMK_BACKLIGHT + +config PWM + default y + +config LED_PWM + default y + +endif # ZMK_BACKLIGHT +``` + +Then add the following lines to your `.overlay` file: + +``` +&pwm0 { + status = "okay"; + ch0-pin = <45>; + /* ch0-inverted; */ }; ``` +The value `ch0-pin` represents the pin that controls the LEDs. With nRF52 boards, you can calculate the value to use in the following way: you need the hardware port and run it through a function. +**32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". + +For example, _P1.13_ would give you _32 \* 1 + 13_ = `<45>` and _P0.15_ would give you _32 \* 0 + 15_ = `<15>`. + +If your shield uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to enable `ch0-inverted`. + +Then you have to add the following lines inside the root devicetree node on the same file: + +``` +/ { + backlight: pwmleds { + compatible = "pwm-leds"; + label = "Backlight LEDs"; + pwm_led_0 { + pwms = <&pwm0 45>; + label = "Backlight LED 0"; + }; + }; +}; +``` + +The value inside `pwm_led_0` must be the same as you used before. + +:::info +Note that every LED inside of the backlight node will be treated as a backlight LED, so if you have other PWM LEDs you need to declare them in a separate node. Refer to [Multiple backlight LEDs](#multiple-backlight-leds) if you have multiple backlight LEDs. +::: + +Finally you need to add backlight to the `chosen` element of the root devicetree node: + +``` +/ { + chosen { + zmk,backlight = &backlight; + }; +}: +``` + +Optionally, on Pro Micro compatible shields you can add a LED GPIO node to your devicetree, this could be useful if you want your shield to be compatible with newer or untested boards. To do that you have to enable `CONFIG_LED_GPIO` in your `.conf` file and then add the following lines inside the root devicetree node of your `.dtsi` or `.dts` file: + +``` +/ { + backlight: gpioleds { + compatible = "gpio-leds"; + label = "Backlight LEDs"; + gpio_led_0 { + gpios = <&pro_micro 20 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + }; +}; +``` + +If no suitable `.overlay` file is found, this node will act as a fallback, however, without PWM, backlight has limited functionality. + + + + ### Multiple backlight LEDs It is possible to control multiple backlight LEDs at the same time. This is useful if, for example, you have a Caps Lock LED connected to a different pin and you want it to be part of the backlight. From e2a90974e3ef859dfef9e5d47a59b61e8bb7a478 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 6 Feb 2022 21:04:42 -0500 Subject: [PATCH 0266/1130] fix(lighting): Proper split backlight support. Ensure the backlight behavior is run globally. --- app/src/behaviors/behavior_backlight.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index bdad828d301..8876c1f1cbc 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -88,6 +88,7 @@ static const struct behavior_driver_api behavior_backlight_driver_api = { on_keymap_binding_convert_central_state_dependent_params, .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, + .locality = BEHAVIOR_LOCALITY_GLOBAL, }; DEVICE_DT_INST_DEFINE(0, behavior_backlight_init, device_pm_control_nop, NULL, NULL, APPLICATION, From 5c4bf8a3bb2be96b47ddde0e3fa639ebbad404ad Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 6 Feb 2022 21:28:56 -0800 Subject: [PATCH 0267/1130] feat(docs): Document locality for reset behaviors --- docs/docs/behaviors/reset.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/behaviors/reset.md b/docs/docs/behaviors/reset.md index 8cf122b41c6..c06a13b7a4c 100644 --- a/docs/docs/behaviors/reset.md +++ b/docs/docs/behaviors/reset.md @@ -41,3 +41,11 @@ Example: ``` &bootloader ``` + +## Split Keyboards + +Both basic and bootloader reset behaviors are source-specific: This means that it affects the side of the keyboard that contains the behavior binding for split keyboards. For example if you press a key with the `&reset` binding on the left half of the keyboard, the left half will be reset. If you want to be able to reset both sides you can put the bindings on both sides of the keyboard and activate it on the side you would like to reset. + +:::note Peripheral invocation +The peripheral side of the keyboard has to be paired and connected to the central side in order to be able to activate these behaviors, even if it is possible to trigger the behavior using only keys on that side. This is because the key bindings are processed on the central side which would then instruct the peripheral side to reset. +::: From c0b5985ac788002f03511a6a42109f21b510bfbf Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 6 Feb 2022 21:35:50 -0800 Subject: [PATCH 0268/1130] feat(docs): Document locality for power management behaviors --- docs/docs/behaviors/power.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/behaviors/power.md b/docs/docs/behaviors/power.md index 0de50552741..805806095ac 100644 --- a/docs/docs/behaviors/power.md +++ b/docs/docs/behaviors/power.md @@ -62,3 +62,7 @@ Here is a table describing the command for each define: ``` &ext_power EP_TOG ``` + +## Split Keyboards + +Power management behaviors are global: This means that when triggered, they affects both the central and peripheral side of split keyboards. From a1ef7c8090b4dc7b85605b877c56abcc44b2ef4d Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 6 Feb 2022 21:53:30 -0800 Subject: [PATCH 0269/1130] feat(docs): Document locality for RGB underglow behaviors --- docs/docs/behaviors/underglow.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/behaviors/underglow.md b/docs/docs/behaviors/underglow.md index 597c2491ac0..a6a477192ff 100644 --- a/docs/docs/behaviors/underglow.md +++ b/docs/docs/behaviors/underglow.md @@ -66,3 +66,7 @@ Value Limits: ``` &rgb_ug RGB_COLOR_HSB(128,100,100) ``` + +## Split Keyboards + +RGB underglow behaviors are global: This means that when triggered, they affect both the central and peripheral side of split keyboards. From 76268bae8ffebc304d971342b14cbfcbca2f0b8a Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 6 Feb 2022 21:54:05 -0800 Subject: [PATCH 0270/1130] feat(docs): Document locality for backlight behaviors --- docs/docs/behaviors/backlight.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index e8d3340e909..cb9a85a830e 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -49,3 +49,7 @@ Here is a table describing the action for each define: ``` &bl BL_SET 50 ``` + +## Split Keyboards + +Backlight behaviors are global: This means that when triggered, they affect both the central and peripheral side of split keyboards. From c18c3d910653557db3c3e65b1440ee805f1d38cf Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 6 Feb 2022 23:03:33 -0800 Subject: [PATCH 0271/1130] feat(docs): Add note for combos invoking source-specific behaviors --- docs/docs/features/combos.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 1a19cfe46c0..550bd251597 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -43,6 +43,10 @@ Key positions are numbered like the keys in your keymap, starting at 0. So, if t - Fully overlapping combos like `0 1` and `0 1 2` are supported. - You are not limited to `&kp` bindings. You can use all ZMK behaviors there, like `&mo`, `&bt`, `&mt`, `<` etc. +:::note Source-specific behaviors on split keyboards +Invoking a source-specific behavior such as one of the [reset behaviors](behaviors/reset.md) using a combo will always trigger it on the central side of the keyboard, regardless of the side that the keys corresponding to `key-positions` are on. +::: + ### Advanced configuration There are three global combo parameters which are set through KConfig. You can set them in the `.conf` file in the same directory as your keymap file. From cfd0d3d81af858dc08fb72f26b31a59a0938b51f Mon Sep 17 00:00:00 2001 From: okke Date: Wed, 26 Jan 2022 20:42:14 +0100 Subject: [PATCH 0272/1130] Behaviors: Add 'ignore-modifiers' option to sticky keys To combine multiple sticky modifiers, the sticky keys must ignore other (sticky) modifier keypresses. This behavior is important for "callum-style mods", where all modifiers are sticky mods. Fixes #829 --- app/dts/behaviors/sticky_key.dtsi | 1 + .../behaviors/zmk,behavior-sticky-key.yaml | 2 + app/src/behaviors/behavior_sticky_key.c | 9 +++- .../10-callum-mods/events.patterns | 1 + .../10-callum-mods/keycode_events.snapshot | 8 ++++ .../10-callum-mods/native_posix.keymap | 43 +++++++++++++++++++ 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 app/tests/sticky-keys/10-callum-mods/events.patterns create mode 100644 app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/10-callum-mods/native_posix.keymap diff --git a/app/dts/behaviors/sticky_key.dtsi b/app/dts/behaviors/sticky_key.dtsi index 640320854d4..886d35b7dfc 100644 --- a/app/dts/behaviors/sticky_key.dtsi +++ b/app/dts/behaviors/sticky_key.dtsi @@ -12,6 +12,7 @@ #binding-cells = <1>; release-after-ms = <1000>; bindings = <&kp>; + ignore-modifiers; }; /omit-if-no-ref/ sl: behavior_sticky_layer { compatible = "zmk,behavior-sticky-key"; diff --git a/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml b/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml index 1c2ab7f34ec..c04883c06e0 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml @@ -15,3 +15,5 @@ properties: type: int quick-release: type: boolean + ignore-modifiers: + type: boolean diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 825ec7a68dd..3c75a7a3607 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -31,6 +31,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct behavior_sticky_key_config { uint32_t release_after_ms; bool quick_release; + bool ignore_modifiers; struct zmk_behavior_binding behavior; }; @@ -201,7 +202,7 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { continue; } - // If events were queued, the timer event may be queued late or not at all. + // If this event was queued, the timer may be triggered late or not at all. // Release the sticky key if the timer should've run out in the meantime. if (sticky_key->release_at != 0 && ev->timestamp > sticky_key->release_at) { stop_timer(sticky_key); @@ -210,6 +211,11 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { } if (ev->state) { // key down + if (sticky_key->config->ignore_modifiers && is_mod(ev->usage_page, ev->keycode)) { + // ignore modifier key press so we can stack sticky keys and combine with other + // modifiers + continue; + } if (sticky_key->modified_key_usage_page != 0 || sticky_key->modified_key_keycode != 0) { // this sticky key is already in use for a keycode continue; @@ -270,6 +276,7 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; static struct behavior_sticky_key_config behavior_sticky_key_config_##n = { \ .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ .release_after_ms = DT_INST_PROP(n, release_after_ms), \ + .ignore_modifiers = DT_INST_PROP(n, ignore_modifiers), \ .quick_release = DT_INST_PROP(n, quick_release), \ }; \ DEVICE_DT_INST_DEFINE(n, behavior_sticky_key_init, device_pm_control_nop, \ diff --git a/app/tests/sticky-keys/10-callum-mods/events.patterns b/app/tests/sticky-keys/10-callum-mods/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/sticky-keys/10-callum-mods/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot b/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot new file mode 100644 index 00000000000..fd2217a5d87 --- /dev/null +++ b/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot @@ -0,0 +1,8 @@ +pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/10-callum-mods/native_posix.keymap b/app/tests/sticky-keys/10-callum-mods/native_posix.keymap new file mode 100644 index 00000000000..9febf08c584 --- /dev/null +++ b/app/tests/sticky-keys/10-callum-mods/native_posix.keymap @@ -0,0 +1,43 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sk E &sl 1 + &kp A &kp B>; + }; + + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &sk LEFT_SHIFT &kp Z>; + }; + }; +}; + +&kscan { + events = < + /* press sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* release sl lower_layer */ + ZMK_MOCK_RELEASE(0,1,10) + /* tap A (with left control and left shift enabled) */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap A (no sticky keys anymore) */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file From 7474d985c95ab477b97f5715b97329fa0cb46adc Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Fri, 11 Feb 2022 18:05:04 +0800 Subject: [PATCH 0273/1130] docs: Add guide to build additional keyboards with GH Actions (#1126) Co-authored-by: Cem Aksoylar --- docs/docs/customization.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 31576e9a566..47ebe41712f 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -56,3 +56,28 @@ For normal keyboards, follow the same flashing instructions as before to flash y For split keyboards, only the central (left) side will need to be reflashed if you are just updating your keymap. More troubleshooting information for split keyboards can be found [here](troubleshooting.md#split-keyboard-halves-unable-to-pair). + +## Building Additional Keyboards + +You can build additional keyboards with GitHub actions by appending them to `build.yml` in your `zmk-config` folder. For instance assume that we have set up a Corne shield with nice!nano during [initial setup](user-setup.md) and we want to add a Lily58 shield with nice!nano v2. The following is an example `build.yaml` file that would accomplish that: + +``` +include: + - board: nice_nano + shield: corne_left + - board: nice_nano + shield: corne_right + - board: nice_nano_v2 + shield: lily58_left + - board: nice_nano_v2 + shield: lily58_right +``` + +In addition to updating `build.yaml`, Lily58's shield files should also be added into the `config` sub-folder inside `zmk-config` together with your Corne files, e.g.: + +``` +corne.conf +corne.keymap +lily58.conf +lily58.keymap +``` From 22ed4488433d579cde9dcb2f50a3ba105234bff4 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 11 Feb 2022 21:06:23 -0800 Subject: [PATCH 0274/1130] fix(docs): Replace deprecated keycode in positional-hold-tap example --- docs/docs/behaviors/hold-tap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index edb9d593aa1..e53c09b6f42 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -129,8 +129,8 @@ The following are suggested hold-tap configurations that work well with home row compatible = "zmk,keymap"; default_layer { bindings = < - // position 0 pos 1 pos 2 pos 3 pos 4 pos 5 pos 6 pos 7 pos 8 pos 9 pos 10 - &lh_pht LSFT A &lh_pht LGUI S &lh_pht LALT D &lh_pht LCTL F &kp G &kp H &kp I &kp J &kp K &kp L &kp SCLN + // position 0 pos 1 pos 2 pos 3 pos 4 pos 5 pos 6 pos 7 pos 8 pos 9 pos 10 + &lh_pht LSFT A &lh_pht LGUI S &lh_pht LALT D &lh_pht LCTL F &kp G &kp H &kp I &kp J &kp K &kp L &kp SEMI >; }; }; From 5c4f26ae741567df430fce08e5e6966855a9dadb Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 11 Feb 2022 21:07:41 -0800 Subject: [PATCH 0275/1130] fix(docs): Tweak label of left-hand positional hold-tap example behavior We see folks copying this behavior node and duplicating it for the right hand, then forgetting to modify the "label" value and getting confusing runtime behavior. If we modify the label to be left-specific like this it might be a better hint to change it when duplicating it. --- docs/docs/behaviors/hold-tap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index e53c09b6f42..f7c386b3f7b 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -115,7 +115,7 @@ The following are suggested hold-tap configurations that work well with home row behaviors { lh_pht: left_hand_positional_hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "POSITIONAL_HOLD_TAP"; + label = "LEFT_POSITIONAL_HOLD_TAP"; #binding-cells = <2>; flavor = "tap-unless-interrupted"; tapping-term-ms = <100>; // <---[[produces tap if held longer than tapping-term-ms]] From 8e91e5ada1cc42910008ee8eac08d6ab50eb6894 Mon Sep 17 00:00:00 2001 From: Dom H Date: Sat, 12 Feb 2022 08:46:08 +0000 Subject: [PATCH 0276/1130] fix(docs): Add `behaviors/key-repeat` to sidebar --- docs/sidebars.js | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/sidebars.js b/docs/sidebars.js index 090dcb0fcee..647399a787e 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -29,6 +29,7 @@ module.exports = { "behaviors/sticky-key", "behaviors/sticky-layer", "behaviors/caps-word", + "behaviors/key-repeat", "behaviors/reset", "behaviors/bluetooth", "behaviors/outputs", From 43ffa6c76077a446ee0ebc8ebc39ebc09eae4b57 Mon Sep 17 00:00:00 2001 From: chadbailey59 Date: Wed, 16 Feb 2022 05:46:15 -0600 Subject: [PATCH 0277/1130] docs: Clarifications within New Shield page (#1130) Co-authored-by: Cem Aksoylar --- docs/docs/development/new-shield.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 6f65d8698fa..26542310b72 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -48,16 +48,16 @@ shield to get it picked up for ZMK, `Kconfig.shield` and `Kconfig.defconfig`. ### Kconfig.shield -The `Kconfig.shield` file defines any additional Kconfig settings that may be relevant when using this keyboard. For most keyboards, there is just one additional configuration value for the shield itself, e.g.: +The `Kconfig.shield` file defines any additional Kconfig settings that may be relevant when using this keyboard. For most keyboards, there is just one additional configuration value for the shield itself. ``` config SHIELD_MY_BOARD def_bool $(shields_list_contains,my_board) ``` -This will make sure the new configuration `SHIELD_MY_BOARD` is set to true whenever `my_board` is added as a shield in your build. +This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.md) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. -**For split boards**, you will need to add configurations for the left and right sides. +**For split boards**, you will need to add configurations for the left and right sides. For example, if your split halves are named `my_board_left` and `my_board_right`, it would look like this: ``` config SHIELD_MY_BOARD_LEFT @@ -84,7 +84,7 @@ Do not make the keyboard name too long, otherwise the bluetooth advertising migh if SHIELD_MY_BOARD config ZMK_KEYBOARD_NAME - default "My Awesome Keyboard" + default "My Board" endif ``` @@ -98,7 +98,7 @@ Finally, you'll want to turn on the split option for both sides. This can all be if SHIELD_MY_BOARD_LEFT config ZMK_KEYBOARD_NAME - default "My Awesome Keyboard" + default "My Board" config ZMK_SPLIT_BLE_ROLE_CENTRAL default y From 322cc14da67fcfb31ece80a7b288a1aef616ad93 Mon Sep 17 00:00:00 2001 From: Dom H Date: Wed, 16 Feb 2022 12:07:56 +0000 Subject: [PATCH 0278/1130] fix(docs): Remove trailing whitespace Otherwise, prettier fails. --- docs/docs/development/new-shield.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 26542310b72..dc4db850450 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -55,7 +55,7 @@ config SHIELD_MY_BOARD def_bool $(shields_list_contains,my_board) ``` -This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.md) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. +This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.md) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. **For split boards**, you will need to add configurations for the left and right sides. For example, if your split halves are named `my_board_left` and `my_board_right`, it would look like this: From 5cc9b8f71a5abe3fabbf6187fff2953b6d0bcefb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Feb 2022 12:13:21 +0000 Subject: [PATCH 0279/1130] chore(deps): bump follow-redirects from 1.14.7 to 1.14.8 in /docs Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index f799ad70320..166a8d72d10 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -11678,9 +11678,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "funding": [ { "type": "individual", @@ -29980,9 +29980,9 @@ } }, "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" }, "for-in": { "version": "1.0.2", From b54128331eb03ac02edbc642a313c5f2e2139da5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 3 Feb 2022 06:10:03 +0000 Subject: [PATCH 0280/1130] feat(shields): Add Kyria Rev2 shield. * New matrix pin selections. * New encoder pins. --- app/boards/shields/kyria/Kconfig.defconfig | 4 +- app/boards/shields/kyria/Kconfig.shield | 13 ++++ app/boards/shields/kyria/kyria.dtsi | 72 +++++-------------- app/boards/shields/kyria/kyria_common.dtsi | 59 +++++++++++++++ app/boards/shields/kyria/kyria_rev2.conf | 10 +++ app/boards/shields/kyria/kyria_rev2.dtsi | 55 ++++++++++++++ app/boards/shields/kyria/kyria_rev2.zmk.yml | 15 ++++ app/boards/shields/kyria/kyria_rev2_left.conf | 0 .../shields/kyria/kyria_rev2_left.overlay | 30 ++++++++ .../shields/kyria/kyria_rev2_right.conf | 0 .../shields/kyria/kyria_rev2_right.overlay | 34 +++++++++ 11 files changed, 235 insertions(+), 57 deletions(-) create mode 100644 app/boards/shields/kyria/kyria_common.dtsi create mode 100644 app/boards/shields/kyria/kyria_rev2.conf create mode 100644 app/boards/shields/kyria/kyria_rev2.dtsi create mode 100644 app/boards/shields/kyria/kyria_rev2.zmk.yml create mode 100644 app/boards/shields/kyria/kyria_rev2_left.conf create mode 100644 app/boards/shields/kyria/kyria_rev2_left.overlay create mode 100644 app/boards/shields/kyria/kyria_rev2_right.conf create mode 100644 app/boards/shields/kyria/kyria_rev2_right.overlay diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 57a701a9abb..74a22520f0e 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -1,5 +1,5 @@ -if SHIELD_KYRIA_LEFT +if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_REV2_LEFT config ZMK_KEYBOARD_NAME default "Kyria" @@ -9,7 +9,7 @@ config ZMK_SPLIT_BLE_ROLE_CENTRAL endif -if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_RIGHT +if SHIELD_KYRIA config ZMK_SPLIT default y diff --git a/app/boards/shields/kyria/Kconfig.shield b/app/boards/shields/kyria/Kconfig.shield index 7dee0449518..6304f5d519b 100644 --- a/app/boards/shields/kyria/Kconfig.shield +++ b/app/boards/shields/kyria/Kconfig.shield @@ -1,8 +1,21 @@ # Copyright (c) 2020 Pete Johanson # SPDX-License-Identifier: MIT +config SHIELD_KYRIA + bool + config SHIELD_KYRIA_LEFT def_bool $(shields_list_contains,kyria_left) + select SHIELD_KYRIA config SHIELD_KYRIA_RIGHT def_bool $(shields_list_contains,kyria_right) + select SHIELD_KYRIA + +config SHIELD_KYRIA_REV2_LEFT + def_bool $(shields_list_contains,kyria_rev2_left) + select SHIELD_KYRIA + +config SHIELD_KYRIA_REV2_RIGHT + def_bool $(shields_list_contains,kyria_rev2_right) + select SHIELD_KYRIA diff --git a/app/boards/shields/kyria/kyria.dtsi b/app/boards/shields/kyria/kyria.dtsi index 2d5114ec48b..1b0ca9405b8 100644 --- a/app/boards/shields/kyria/kyria.dtsi +++ b/app/boards/shields/kyria/kyria.dtsi @@ -1,14 +1,13 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ -#include +#include "kyria_common.dtsi" / { chosen { - zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -43,60 +42,23 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) >; }; +}; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - }; - - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - right_encoder: encoder_right { - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; - - // TODO: RGB node(s) +&kscan0 { + row-gpios + = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; }; -&pro_micro_i2c { - status = "okay"; +&left_encoder { + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; +}; - ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <64>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <63>; - prechargep = <0x22>; - }; +&right_encoder { + a-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi new file mode 100644 index 00000000000..479f090ce83 --- /dev/null +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; + + // TODO: RGB node(s) +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/kyria/kyria_rev2.conf b/app/boards/shields/kyria/kyria_rev2.conf new file mode 100644 index 00000000000..7a0b5b6c54f --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev2.conf @@ -0,0 +1,10 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Kyria OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/kyria/kyria_rev2.dtsi b/app/boards/shields/kyria/kyria_rev2.dtsi new file mode 100644 index 00000000000..7c7d9efef49 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev2.dtsi @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria_common.dtsi" + +/ { + chosen { + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | +// | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | +// | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | +// | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(2,15) + RC(3,2) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) + >; + }; + +// | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | +// | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | +// | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | +// | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <4>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + >; + }; +}; + +&left_encoder { + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; +}; + +&right_encoder { + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; +}; \ No newline at end of file diff --git a/app/boards/shields/kyria/kyria_rev2.zmk.yml b/app/boards/shields/kyria/kyria_rev2.zmk.yml new file mode 100644 index 00000000000..d6b3b1085c6 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev2.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: kyria_rev2 +name: Kyria Rev2 +type: shield +url: https://splitkb.com/products/kyria-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - kyria_left + - kyria_right diff --git a/app/boards/shields/kyria/kyria_rev2_left.conf b/app/boards/shields/kyria/kyria_rev2_left.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/kyria/kyria_rev2_left.overlay b/app/boards/shields/kyria/kyria_rev2_left.overlay new file mode 100644 index 00000000000..cee2e2a81ea --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev2_left.overlay @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria_rev2.dtsi" + +&kscan0 { + row-gpios + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/kyria/kyria_rev2_right.conf b/app/boards/shields/kyria/kyria_rev2_right.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/kyria/kyria_rev2_right.overlay b/app/boards/shields/kyria/kyria_rev2_right.overlay new file mode 100644 index 00000000000..7476bcba145 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev2_right.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria_rev2.dtsi" + +&default_transform { + col-offset = <8>; +}; + +&kscan0 { + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; From 7b1b979461ee4ac6835a648befd4b6ec16adefd5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 20 Feb 2022 16:11:50 +0000 Subject: [PATCH 0281/1130] fix(shields): Proper siblings for Kyria Rev2. --- app/boards/shields/kyria/kyria_rev2.zmk.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/kyria/kyria_rev2.zmk.yml b/app/boards/shields/kyria/kyria_rev2.zmk.yml index d6b3b1085c6..6488f69055e 100644 --- a/app/boards/shields/kyria/kyria_rev2.zmk.yml +++ b/app/boards/shields/kyria/kyria_rev2.zmk.yml @@ -11,5 +11,5 @@ features: - encoder - underglow siblings: - - kyria_left - - kyria_right + - kyria_rev2_left + - kyria_rev2_right From 1d5b48cb52791335c818c55b348da2af943ba78d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 20 Feb 2022 16:24:55 +0000 Subject: [PATCH 0282/1130] fix(shields): Add missing kyria_rev2.keymap Needed for setup.sh script, which assumes the shield ID name, not the shield dir name for downloading. --- app/boards/shields/kyria/kyria_rev2.keymap | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/boards/shields/kyria/kyria_rev2.keymap diff --git a/app/boards/shields/kyria/kyria_rev2.keymap b/app/boards/shields/kyria/kyria_rev2.keymap new file mode 100644 index 00000000000..a8804dd9f6e --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev2.keymap @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; From f1b5dc408144e7f334bad59da6e9ac788a56e0c7 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 5 Mar 2022 13:01:41 -0500 Subject: [PATCH 0283/1130] fix(shields): Proper arrow comments in reference keymap swapped the up and down arrows to reflect the bindings --- app/boards/shields/lily58/lily58.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index 7708eb21196..dd935c7aefd 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -53,7 +53,7 @@ // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | v | ^ | -> | | // | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | // | | | | | | | | | | bindings = < From 594cc55e0c686e5ab61c2da13632e99670269acb Mon Sep 17 00:00:00 2001 From: Caleb Goates Date: Mon, 7 Mar 2022 22:25:50 -0700 Subject: [PATCH 0284/1130] fix(docs): Update instructions to find settings reset firmware --- .../splitpairing/corecoverage.png | Bin 0 -> 3420 bytes docs/docs/troubleshooting.md | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 docs/docs/assets/troubleshooting/splitpairing/corecoverage.png diff --git a/docs/docs/assets/troubleshooting/splitpairing/corecoverage.png b/docs/docs/assets/troubleshooting/splitpairing/corecoverage.png new file mode 100755 index 0000000000000000000000000000000000000000..a2a928be1f8e57c6feabd8b5058aa3b1130b35c6 GIT binary patch literal 3420 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 P5dq+ONLZbYeawFWzejJp literal 0 HcmV?d00001 diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 3055c131ecf..bfeaf0ee0f7 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -53,7 +53,7 @@ Since then, a much simpler procedure of performing a bluetooth reset for split k **New Procedure:** 1. [Open the GitHub `Actions` tab and select the `Build` workflow](https://github.com/zmkfirmware/zmk/actions?query=workflow%3ABuild+branch%3Amain+event%3Apush). -1. Select the top 'result' on that page. +1. Find one of the 'results' for which the core-coverage job was successfully run, indicated by a green checkmark in the core-coverage bubble. 1. From the next page under "Artifacts", download the `$boardname-settings_reset-zmk` zip file. 1. Unzip the downloaded file. 1. Put each half of the split keyboard into bootloader mode @@ -62,6 +62,10 @@ Since then, a much simpler procedure of performing a bluetooth reset for split k 1. Repeat step 3 with the other half of the split keyboard 1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half) +| ![Successful core-coverage Job](../docs/assets/troubleshooting/splitpairing/corecoverage.png) | +| :-------------------------------------------------------------------------------------------: | +| An example of a successful core-coverage job which will produce a settings_reset firmware. | + After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. From 37c830fb8a96e6cbb147689d05e0b965ec6ed90b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 7 Mar 2022 05:07:40 +0000 Subject: [PATCH 0285/1130] feat: Add blog post with Zephyr 3.0 prep. --- .../2022-03-08-zephyr-3-0-upgrade-prep.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/blog/2022-03-08-zephyr-3-0-upgrade-prep.md diff --git a/docs/blog/2022-03-08-zephyr-3-0-upgrade-prep.md b/docs/blog/2022-03-08-zephyr-3-0-upgrade-prep.md new file mode 100644 index 00000000000..2f3c79eef95 --- /dev/null +++ b/docs/blog/2022-03-08-zephyr-3-0-upgrade-prep.md @@ -0,0 +1,29 @@ +--- +title: "Zephyr 3.0 Update Preparation" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [firmware, zephyr, core] +--- + +As preparation for completing the [work](https://github.com/zmkfirmware/zmk/pull/1143) to upgrade ZMK to [Zephyr 3.0](https://docs.zephyrproject.org/3.0.0/releases/release-notes-3.0.html), users with user config repositories who wish to avoid future build failures with their GitHub Actions workflows can take steps to adjust +their repositories now. + +GitHub Actions needs to use our latest Docker image to ensure continued compatibility with the ZMK codebase on Zephyr 3.0 (and beyond). You should: + +- Open `.github/workflows/build.yml` in your editor/IDE +- Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found + +Once the changes are committed and pushed, the build will run as expected. + +A future blog post will outline the complete Zephyr 3.0 changes once that work is finalized. + +:::note + +If you created your user config repository a while ago, you may find that your `build.yml` file instead references +a `zephyr-west-action-arm` custom GitHub Action instead. In this case, the upgrade is not as direct. We suggest that +instead you [re-create your config repository](/docs/user-setup) to get an updated setup using the new automation +approach. + +::: From 745338dc10b1a4383f4c3205dfdf39d8a05a347c Mon Sep 17 00:00:00 2001 From: dnaq Date: Fri, 24 Sep 2021 13:24:56 +0200 Subject: [PATCH 0286/1130] feat(shield): Add Bat43 shield See https://kbd.dailycraft.jp/bat43/ for details. --- app/boards/shields/bat43/Kconfig.defconfig | 9 ++++ app/boards/shields/bat43/Kconfig.shield | 5 ++ app/boards/shields/bat43/bat43.keymap | 50 ++++++++++++++++++++ app/boards/shields/bat43/bat43.overlay | 54 ++++++++++++++++++++++ app/boards/shields/bat43/bat43.zmk.yml | 8 ++++ 5 files changed, 126 insertions(+) create mode 100644 app/boards/shields/bat43/Kconfig.defconfig create mode 100644 app/boards/shields/bat43/Kconfig.shield create mode 100644 app/boards/shields/bat43/bat43.keymap create mode 100644 app/boards/shields/bat43/bat43.overlay create mode 100644 app/boards/shields/bat43/bat43.zmk.yml diff --git a/app/boards/shields/bat43/Kconfig.defconfig b/app/boards/shields/bat43/Kconfig.defconfig new file mode 100644 index 00000000000..43de1fa8f88 --- /dev/null +++ b/app/boards/shields/bat43/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_BAT43 + +config ZMK_KEYBOARD_NAME + default "Bat43" + +endif diff --git a/app/boards/shields/bat43/Kconfig.shield b/app/boards/shields/bat43/Kconfig.shield new file mode 100644 index 00000000000..10ee88cee98 --- /dev/null +++ b/app/boards/shields/bat43/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_BAT43 + def_bool $(shields_list_contains,bat43) diff --git a/app/boards/shields/bat43/bat43.keymap b/app/boards/shields/bat43/bat43.keymap new file mode 100644 index 00000000000..34670d379e6 --- /dev/null +++ b/app/boards/shields/bat43/bat43.keymap @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#define LOWER 1 +#define RAISE 2 + +#define L_SPC < LOWER SPACE +#define R_RET < RAISE RET + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < +&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp TAB &kp A &kp S &kp D &kp F &kp G &kp BSPC &kp H &kp J &kp K &kp L &kp SEMI &kp RSHFT +&kp LCTL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp LANG2 L_SPC R_RET &kp LANG1 &kp RALT + &bt BT_CLR &out OUT_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 + >; + }; + lower_layer { + bindings = < +&trans &none &none &none &none &none &none &kp EQUAL &kp PLUS &kp STAR &kp PRCNT &trans +&trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans +&trans &none &none &none &none &none &none &none &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans + >; + }; + raise_layer { + bindings = < +&trans &kp BSLH &kp EXCL &kp AMPS &kp PIPE &none &none &kp EQUAL &kp PLUS &kp STAR &kp PRCNT &trans +&trans &kp HASH &kp GRAVE &kp DQT &kp SQT &kp TILDE &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp DLLR &trans +&trans &none &none &kp LBRC &kp LBKT &kp LPAR &kp RPAR &kp RBKT &kp RBRC &kp AT &kp CARET &trans + &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/bat43/bat43.overlay b/app/boards/shields/bat43/bat43.overlay new file mode 100644 index 00000000000..fc906e0f1e7 --- /dev/null +++ b/app/boards/shields/bat43/bat43.overlay @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <7>; + + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(3,0) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,3) RC(3,4) RC(3,5) RC(7,0) RC(7,1) RC(7,2) + RC(7,5) RC(7,4) RC(7,3) RC(3,1) RC(3,2) + >; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/app/boards/shields/bat43/bat43.zmk.yml b/app/boards/shields/bat43/bat43.zmk.yml new file mode 100644 index 00000000000..a84bf86297d --- /dev/null +++ b/app/boards/shields/bat43/bat43.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: bat43 +name: BAT43 +type: shield +url: https://kbd.dailycraft.jp/bat43/ +requires: [pro_micro] +features: + - keys From a1a8c30f7ff9f0b57ad9f278e6ccd47697855867 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Mon, 14 Mar 2022 00:36:29 -0500 Subject: [PATCH 0287/1130] Remove deprecated key codes from bat43 keymap --- app/boards/shields/bat43/bat43.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/bat43/bat43.keymap b/app/boards/shields/bat43/bat43.keymap index 34670d379e6..0f7e2d551ec 100644 --- a/app/boards/shields/bat43/bat43.keymap +++ b/app/boards/shields/bat43/bat43.keymap @@ -23,7 +23,7 @@ bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp TAB &kp A &kp S &kp D &kp F &kp G &kp BSPC &kp H &kp J &kp K &kp L &kp SEMI &kp RSHFT -&kp LCTL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTL +&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp LANG2 L_SPC R_RET &kp LANG1 &kp RALT &bt BT_CLR &out OUT_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 >; From 2b4d5dd7d9271dd520d9143a9bc5d95db08921a3 Mon Sep 17 00:00:00 2001 From: Carlos Filoteo Date: Sun, 13 Mar 2022 23:51:55 -0600 Subject: [PATCH 0288/1130] feat(shields): Add elephant42 Shield Support (#1009) * Initial Elephant42 implementation * Add underglow feature * Fix keymap * Copy corne defconfig for OLED and LED * Fix matrix positions * Add nice_nano_v2.overlay * Usability improvements to keymap * Update LED length * Delete nice_nano v1 overlay * Remove unused conf files * Add copyright/license headers * PR feedback * Try fixing formatting again * Minor format * More missed tabs * Format --- .../shields/elephant42/Kconfig.defconfig | 55 +++++++++++++++++ app/boards/shields/elephant42/Kconfig.shield | 8 +++ .../elephant42/boards/nice_nano_v2.overlay | 28 +++++++++ app/boards/shields/elephant42/elephant42.conf | 6 ++ app/boards/shields/elephant42/elephant42.dtsi | 60 +++++++++++++++++++ .../shields/elephant42/elephant42.keymap | 55 +++++++++++++++++ .../shields/elephant42/elephant42.zmk.yml | 14 +++++ .../elephant42/elephant42_left.overlay | 18 ++++++ .../elephant42/elephant42_right.overlay | 22 +++++++ 9 files changed, 266 insertions(+) create mode 100644 app/boards/shields/elephant42/Kconfig.defconfig create mode 100644 app/boards/shields/elephant42/Kconfig.shield create mode 100644 app/boards/shields/elephant42/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/elephant42/elephant42.conf create mode 100644 app/boards/shields/elephant42/elephant42.dtsi create mode 100644 app/boards/shields/elephant42/elephant42.keymap create mode 100644 app/boards/shields/elephant42/elephant42.zmk.yml create mode 100644 app/boards/shields/elephant42/elephant42_left.overlay create mode 100644 app/boards/shields/elephant42/elephant42_right.overlay diff --git a/app/boards/shields/elephant42/Kconfig.defconfig b/app/boards/shields/elephant42/Kconfig.defconfig new file mode 100644 index 00000000000..db2fa230e5c --- /dev/null +++ b/app/boards/shields/elephant42/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ELEPHANT42_LEFT + +config ZMK_KEYBOARD_NAME + default "Elephant42" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_ELEPHANT42_LEFT || SHIELD_ELEPHANT42_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES_MAX + default 128 + +config LVGL_VER_RES_MAX + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif \ No newline at end of file diff --git a/app/boards/shields/elephant42/Kconfig.shield b/app/boards/shields/elephant42/Kconfig.shield new file mode 100644 index 00000000000..258418684d6 --- /dev/null +++ b/app/boards/shields/elephant42/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ELEPHANT42_LEFT + def_bool $(shields_list_contains,elephant42_left) + +config SHIELD_ELEPHANT42_RIGHT + def_bool $(shields_list_contains,elephant42_right) \ No newline at end of file diff --git a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..6cd5de8c5a0 --- /dev/null +++ b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + /* Cannot be used together with i2c0. */ + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <27>; /* There are per-key RGB and the LAST 6 are underglow */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/elephant42/elephant42.conf b/app/boards/shields/elephant42/elephant42.conf new file mode 100644 index 00000000000..1b41763fa60 --- /dev/null +++ b/app/boards/shields/elephant42/elephant42.conf @@ -0,0 +1,6 @@ +# Uncomment the following lines to enable the Elephant42 RGB Underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y + +# Uncomment the following line to enable the Elephant42 OLED Display +# CONFIG_ZMK_DISPLAY=y \ No newline at end of file diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi new file mode 100644 index 00000000000..e2b708ca6c3 --- /dev/null +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) + RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/elephant42/elephant42.keymap b/app/boards/shields/elephant42/elephant42.keymap new file mode 100644 index 00000000000..8594c1171f3 --- /dev/null +++ b/app/boards/shields/elephant42/elephant42.keymap @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#define LOWR 1 +#define RAIS 2 +#define ADJT 3 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + < ADJT ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL + &mt LCTRL TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH + &kp LSHFT &mo LOWR &kp LGUI &kp BSPC &kp SPACE &kp ENTER &mo RAIS &kp LALT + >; + }; + + lower { + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp C_PLAY_PAUSE + &trans &trans &trans &trans &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans + &trans &trans &trans &trans &kp LBKT &kp RBKT &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + raise { + bindings = < + &kp TILDE &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp C_PLAY_PAUSE + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH + &trans &trans &trans &trans &kp LBKT &kp RBKT &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + + adjust { + bindings = < + &trans &bt BT_NXT &bt BT_PRV &trans &trans &bt BT_CLR &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &out OUT_TOG &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/elephant42/elephant42.zmk.yml b/app/boards/shields/elephant42/elephant42.zmk.yml new file mode 100644 index 00000000000..60eb377793b --- /dev/null +++ b/app/boards/shields/elephant42/elephant42.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: elephant42 +name: Elephant42 +type: shield +url: https://github.com/illness072/elephant42 +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - underglow +siblings: + - elephant42_left + - elephant42_right diff --git a/app/boards/shields/elephant42/elephant42_left.overlay b/app/boards/shields/elephant42/elephant42_left.overlay new file mode 100644 index 00000000000..72fe2251d79 --- /dev/null +++ b/app/boards/shields/elephant42/elephant42_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "elephant42.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; +}; \ No newline at end of file diff --git a/app/boards/shields/elephant42/elephant42_right.overlay b/app/boards/shields/elephant42/elephant42_right.overlay new file mode 100644 index 00000000000..35bd5895efc --- /dev/null +++ b/app/boards/shields/elephant42/elephant42_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "elephant42.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; +}; From d6a2290d5ef5da561b590f9b1d236c40005940fe Mon Sep 17 00:00:00 2001 From: Aaron Nunley Date: Fri, 29 Jan 2021 17:52:33 -0800 Subject: [PATCH 0289/1130] Added support for 2% Milk (Updated with metadata) Update app/boards/shields/two_percent_milk/two_percent_milk.overlay Co-Authored-By: Nick Winans --- .../two_percent_milk/Kconfig.defconfig | 9 +++++++ .../shields/two_percent_milk/Kconfig.shield | 5 ++++ .../two_percent_milk/two_percent_milk.conf | 2 ++ .../two_percent_milk/two_percent_milk.keymap | 22 +++++++++++++++++ .../two_percent_milk/two_percent_milk.overlay | 24 +++++++++++++++++++ .../two_percent_milk/two_percent_milk.zmk.yml | 8 +++++++ 6 files changed, 70 insertions(+) create mode 100644 app/boards/shields/two_percent_milk/Kconfig.defconfig create mode 100644 app/boards/shields/two_percent_milk/Kconfig.shield create mode 100644 app/boards/shields/two_percent_milk/two_percent_milk.conf create mode 100644 app/boards/shields/two_percent_milk/two_percent_milk.keymap create mode 100644 app/boards/shields/two_percent_milk/two_percent_milk.overlay create mode 100644 app/boards/shields/two_percent_milk/two_percent_milk.zmk.yml diff --git a/app/boards/shields/two_percent_milk/Kconfig.defconfig b/app/boards/shields/two_percent_milk/Kconfig.defconfig new file mode 100644 index 00000000000..1046f53c1fa --- /dev/null +++ b/app/boards/shields/two_percent_milk/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_TWO_PERCENT_MILK + +config ZMK_KEYBOARD_NAME + default "2% Milk" + +endif diff --git a/app/boards/shields/two_percent_milk/Kconfig.shield b/app/boards/shields/two_percent_milk/Kconfig.shield new file mode 100644 index 00000000000..ec2c3b1f46a --- /dev/null +++ b/app/boards/shields/two_percent_milk/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_TWO_PERCENT_MILK + def_bool $(shields_list_contains,two_percent_milk) diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.conf b/app/boards/shields/two_percent_milk/two_percent_milk.conf new file mode 100644 index 00000000000..fb23f20ccd2 --- /dev/null +++ b/app/boards/shields/two_percent_milk/two_percent_milk.conf @@ -0,0 +1,2 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.keymap b/app/boards/shields/two_percent_milk/two_percent_milk.keymap new file mode 100644 index 00000000000..71152de2fac --- /dev/null +++ b/app/boards/shields/two_percent_milk/two_percent_milk.keymap @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + #include + #include + #include + + / { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp X + &kp Z + >; + }; + }; + }; \ No newline at end of file diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.overlay b/app/boards/shields/two_percent_milk/two_percent_milk.overlay new file mode 100644 index 00000000000..d43ed32133d --- /dev/null +++ b/app/boards/shields/two_percent_milk/two_percent_milk.overlay @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + + label = "KSCAN"; + + input-gpios + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + + }; + +}; \ No newline at end of file diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.zmk.yml b/app/boards/shields/two_percent_milk/two_percent_milk.zmk.yml new file mode 100644 index 00000000000..c53c2df2a60 --- /dev/null +++ b/app/boards/shields/two_percent_milk/two_percent_milk.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: two_percent_milk +name: 2% Milk +type: shield +url: https://github.com/Spaceboards/SpaceboardsHardware/tree/master/Keyboards/2%25%20Milk +requires: [pro_micro] +features: + - keys From 459972fddd3d9e778b91b824888de9e0bbeffbce Mon Sep 17 00:00:00 2001 From: Krzysztof Gutkowski Date: Sat, 12 Mar 2022 19:18:25 +0000 Subject: [PATCH 0290/1130] fix(boards): Adjust matrix for BT60v1 to fix the broken right Shift key according to the diagram from the board creators, it should be RC(3,12) instead of RC(3,13) --- app/boards/arm/bt60/bt60_v1.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/bt60/bt60_v1.dts b/app/boards/arm/bt60/bt60_v1.dts index 83da2c07a5b..8b2f0cb41bb 100644 --- a/app/boards/arm/bt60/bt60_v1.dts +++ b/app/boards/arm/bt60/bt60_v1.dts @@ -22,7 +22,7 @@ RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) - RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) >; }; From ad5a12a7bcdc7c0962fdef7c23eaa0cf14d0b7ed Mon Sep 17 00:00:00 2001 From: okke Date: Sun, 27 Feb 2022 14:11:36 +0100 Subject: [PATCH 0291/1130] fix(behaviors): Fix bug in nested sticky keys If multiple sticky keys with quick release were nested, only the first one was properly released. This fix makes sure all of them are released properly. Fixes https://github.com/zmkfirmware/zmk/issues/1149 --- app/src/behaviors/behavior_sticky_key.c | 14 +++- .../sticky-keys/10-sl-sl-kp/events.patterns | 1 + .../10-sl-sl-kp/keycode_events.snapshot | 8 +++ .../10-sl-sl-kp/native_posix.keymap | 65 +++++++++++++++++++ 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 app/tests/sticky-keys/10-sl-sl-kp/events.patterns create mode 100644 app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 3c75a7a3607..7909e1af941 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -188,6 +188,9 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { if (ev == NULL) { return ZMK_EV_EVENT_BUBBLE; } + + // keep track whether the event has been reraised, so we only reraise it once + bool event_reraised = false; for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { struct active_sticky_key *sticky_key = &active_sticky_keys[i]; if (sticky_key->position == ZMK_BHV_STICKY_KEY_POSITION_FREE) { @@ -223,10 +226,12 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { if (sticky_key->timer_started) { stop_timer(sticky_key); if (sticky_key->config->quick_release) { - // continue processing the event. Release the sticky key afterwards. - ZMK_EVENT_RAISE_AFTER(eh, behavior_sticky_key); + // immediately release the sticky key after the key press is handled. + if (!event_reraised) { + ZMK_EVENT_RAISE_AFTER(eh, behavior_sticky_key); + event_reraised = true; + } release_sticky_key_behavior(sticky_key, ev->timestamp); - return ZMK_EV_EVENT_CAPTURED; } } sticky_key->modified_key_usage_page = ev->usage_page; @@ -240,6 +245,9 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { } } } + if (event_reraised) { + return ZMK_EV_EVENT_CAPTURED; + } return ZMK_EV_EVENT_BUBBLE; } diff --git a/app/tests/sticky-keys/10-sl-sl-kp/events.patterns b/app/tests/sticky-keys/10-sl-sl-kp/events.patterns new file mode 100644 index 00000000000..833100f6ac4 --- /dev/null +++ b/app/tests/sticky-keys/10-sl-sl-kp/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot b/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot new file mode 100644 index 00000000000..fc0f29b9490 --- /dev/null +++ b/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot @@ -0,0 +1,8 @@ +pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap b/app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap new file mode 100644 index 00000000000..e9b87f4215c --- /dev/null +++ b/app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap @@ -0,0 +1,65 @@ +#include +#include +#include + +/* + sticky layers should quick-release. + Thus, the second keypress should be on the default layer, not on the lower_layer. +*/ + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sl 1 &kp A + &none &none>; + }; + + layer_1 { + bindings = < + &sl 2 &none + &none &none>; + }; + + layer_2 { + bindings = < + &none &kp NUM_1 + &none &none>; + }; + }; +}; + +&kscan { + events = < + /* press sl 1 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press sl 2 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press 1 */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* press A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + + /* repeat test to check if cleanup is done correctly */ + /* press sl 1 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press sl 2 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press 1 */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* press A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + + >; +}; \ No newline at end of file From 32ebe2cfb57be5881750b4296a8ece85921f3aa9 Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Tue, 15 Mar 2022 22:08:42 -0700 Subject: [PATCH 0292/1130] feat(behaviors): Add Tap-Dance behavior --- app/CMakeLists.txt | 1 + .../behaviors/zmk,behavior-tap-dance.yaml | 16 ++ app/src/behaviors/behavior_tap_dance.c | 259 ++++++++++++++++++ app/tests/tap-dance/1a-tap1/events.patterns | 2 + .../tap-dance/1a-tap1/keycode_events.snapshot | 5 + .../tap-dance/1a-tap1/native_posix.keymap | 11 + app/tests/tap-dance/1b-tap2/events.patterns | 2 + .../tap-dance/1b-tap2/keycode_events.snapshot | 7 + .../tap-dance/1b-tap2/native_posix.keymap | 13 + app/tests/tap-dance/1c-tap3/events.patterns | 2 + .../tap-dance/1c-tap3/keycode_events.snapshot | 9 + .../tap-dance/1c-tap3/native_posix.keymap | 15 + app/tests/tap-dance/2a-hold1/events.patterns | 2 + .../2a-hold1/keycode_events.snapshot | 5 + .../tap-dance/2a-hold1/native_posix.keymap | 11 + app/tests/tap-dance/2b-hold2/events.patterns | 2 + .../2b-hold2/keycode_events.snapshot | 7 + .../tap-dance/2b-hold2/native_posix.keymap | 13 + app/tests/tap-dance/2c-hold3/events.patterns | 2 + .../2c-hold3/keycode_events.snapshot | 9 + .../tap-dance/2c-hold3/native_posix.keymap | 15 + .../tap-dance/3a-tap-int-mid/events.patterns | 2 + .../3a-tap-int-mid/keycode_events.snapshot | 10 + .../3a-tap-int-mid/native_posix.keymap | 13 + .../tap-dance/3b-tap-int-seq/events.patterns | 2 + .../3b-tap-int-seq/keycode_events.snapshot | 10 + .../3b-tap-int-seq/native_posix.keymap | 13 + .../3c-tap-int-after/events.patterns | 2 + .../3c-tap-int-after/keycode_events.snapshot | 10 + .../3c-tap-int-after/native_posix.keymap | 13 + .../tap-dance/3d-hold-int-mid/events.patterns | 2 + .../3d-hold-int-mid/keycode_events.snapshot | 10 + .../3d-hold-int-mid/native_posix.keymap | 13 + .../tap-dance/3e-hold-int-seq/events.patterns | 2 + .../3e-hold-int-seq/keycode_events.snapshot | 10 + .../3e-hold-int-seq/native_posix.keymap | 13 + .../3f-hold-int-after/events.patterns | 2 + .../3f-hold-int-after/keycode_events.snapshot | 10 + .../3f-hold-int-after/native_posix.keymap | 13 + app/tests/tap-dance/4a-single/events.patterns | 2 + .../4a-single/keycode_events.snapshot | 5 + .../tap-dance/4a-single/native_posix.keymap | 11 + .../tap-dance/5a-tdint-mid/events.patterns | 2 + .../5a-tdint-mid/keycode_events.snapshot | 10 + .../5a-tdint-mid/native_posix.keymap | 13 + .../tap-dance/5b-tdint-seq/events.patterns | 2 + .../5b-tdint-seq/keycode_events.snapshot | 10 + .../5b-tdint-seq/native_posix.keymap | 13 + .../tap-dance/5c-tdint-after/events.patterns | 2 + .../5c-tdint-after/keycode_events.snapshot | 10 + .../5c-tdint-after/native_posix.keymap | 13 + .../5d-tdint-multiple/events.patterns | 2 + .../5d-tdint-multiple/keycode_events.snapshot | 15 + .../5d-tdint-multiple/native_posix.keymap | 15 + app/tests/tap-dance/behavior_keymap.dtsi | 60 ++++ docs/docs/assets/tap-dance/timing_diagram.svg | 83 ++++++ docs/docs/behaviors/tap-dance.md | 76 +++++ docs/sidebars.js | 1 + 58 files changed, 903 insertions(+) create mode 100644 app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml create mode 100644 app/src/behaviors/behavior_tap_dance.c create mode 100644 app/tests/tap-dance/1a-tap1/events.patterns create mode 100644 app/tests/tap-dance/1a-tap1/keycode_events.snapshot create mode 100644 app/tests/tap-dance/1a-tap1/native_posix.keymap create mode 100644 app/tests/tap-dance/1b-tap2/events.patterns create mode 100644 app/tests/tap-dance/1b-tap2/keycode_events.snapshot create mode 100644 app/tests/tap-dance/1b-tap2/native_posix.keymap create mode 100644 app/tests/tap-dance/1c-tap3/events.patterns create mode 100644 app/tests/tap-dance/1c-tap3/keycode_events.snapshot create mode 100644 app/tests/tap-dance/1c-tap3/native_posix.keymap create mode 100644 app/tests/tap-dance/2a-hold1/events.patterns create mode 100644 app/tests/tap-dance/2a-hold1/keycode_events.snapshot create mode 100644 app/tests/tap-dance/2a-hold1/native_posix.keymap create mode 100644 app/tests/tap-dance/2b-hold2/events.patterns create mode 100644 app/tests/tap-dance/2b-hold2/keycode_events.snapshot create mode 100644 app/tests/tap-dance/2b-hold2/native_posix.keymap create mode 100644 app/tests/tap-dance/2c-hold3/events.patterns create mode 100644 app/tests/tap-dance/2c-hold3/keycode_events.snapshot create mode 100644 app/tests/tap-dance/2c-hold3/native_posix.keymap create mode 100644 app/tests/tap-dance/3a-tap-int-mid/events.patterns create mode 100644 app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot create mode 100644 app/tests/tap-dance/3a-tap-int-mid/native_posix.keymap create mode 100644 app/tests/tap-dance/3b-tap-int-seq/events.patterns create mode 100644 app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot create mode 100644 app/tests/tap-dance/3b-tap-int-seq/native_posix.keymap create mode 100644 app/tests/tap-dance/3c-tap-int-after/events.patterns create mode 100644 app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot create mode 100644 app/tests/tap-dance/3c-tap-int-after/native_posix.keymap create mode 100644 app/tests/tap-dance/3d-hold-int-mid/events.patterns create mode 100644 app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot create mode 100644 app/tests/tap-dance/3d-hold-int-mid/native_posix.keymap create mode 100644 app/tests/tap-dance/3e-hold-int-seq/events.patterns create mode 100644 app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot create mode 100644 app/tests/tap-dance/3e-hold-int-seq/native_posix.keymap create mode 100644 app/tests/tap-dance/3f-hold-int-after/events.patterns create mode 100644 app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot create mode 100644 app/tests/tap-dance/3f-hold-int-after/native_posix.keymap create mode 100644 app/tests/tap-dance/4a-single/events.patterns create mode 100644 app/tests/tap-dance/4a-single/keycode_events.snapshot create mode 100644 app/tests/tap-dance/4a-single/native_posix.keymap create mode 100644 app/tests/tap-dance/5a-tdint-mid/events.patterns create mode 100644 app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot create mode 100644 app/tests/tap-dance/5a-tdint-mid/native_posix.keymap create mode 100644 app/tests/tap-dance/5b-tdint-seq/events.patterns create mode 100644 app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot create mode 100644 app/tests/tap-dance/5b-tdint-seq/native_posix.keymap create mode 100644 app/tests/tap-dance/5c-tdint-after/events.patterns create mode 100644 app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot create mode 100644 app/tests/tap-dance/5c-tdint-after/native_posix.keymap create mode 100644 app/tests/tap-dance/5d-tdint-multiple/events.patterns create mode 100644 app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot create mode 100644 app/tests/tap-dance/5d-tdint-multiple/native_posix.keymap create mode 100644 app/tests/tap-dance/behavior_keymap.dtsi create mode 100644 docs/docs/assets/tap-dance/timing_diagram.svg create mode 100644 docs/docs/behaviors/tap-dance.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 25f6c6cd0ef..d853255cfbd 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -54,6 +54,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) target_sources(app PRIVATE src/behaviors/behavior_outputs.c) + target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) target_sources(app PRIVATE src/behaviors/behavior_to_layer.c) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) diff --git a/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml b/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml new file mode 100644 index 00000000000..8f01effc511 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml @@ -0,0 +1,16 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Tap Dance Behavior + +compatible: "zmk,behavior-tap-dance" + +include: zero_param.yaml + +properties: + bindings: + type: phandle-array + required: true + tapping-term-ms: + type: int + default: 200 \ No newline at end of file diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c new file mode 100644 index 00000000000..4b35e4de165 --- /dev/null +++ b/app/src/behaviors/behavior_tap_dance.c @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_tap_dance + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +#define ZMK_BHV_TAP_DANCE_MAX_HELD 10 + +#define ZMK_BHV_TAP_DANCE_POSITION_FREE ULONG_MAX + +struct behavior_tap_dance_config { + uint32_t tapping_term_ms; + size_t behavior_count; + struct zmk_behavior_binding *behaviors; +}; + +struct active_tap_dance { + // Tap Dance Data + int counter; + uint32_t position; + uint32_t param1; + uint32_t param2; + bool is_pressed; + const struct behavior_tap_dance_config *config; + + // Timer Data + bool timer_started; + bool timer_cancelled; + bool tap_dance_decided; + int64_t release_at; + struct k_delayed_work release_timer; +}; + +struct active_tap_dance active_tap_dances[ZMK_BHV_TAP_DANCE_MAX_HELD] = {}; + +static struct active_tap_dance *find_tap_dance(uint32_t position) { + for (int i = 0; i < ZMK_BHV_TAP_DANCE_MAX_HELD; i++) { + if (active_tap_dances[i].position == position && !active_tap_dances[i].timer_cancelled) { + return &active_tap_dances[i]; + } + } + return NULL; +} + +static int new_tap_dance(uint32_t position, const struct behavior_tap_dance_config *config, + struct active_tap_dance **tap_dance) { + for (int i = 0; i < ZMK_BHV_TAP_DANCE_MAX_HELD; i++) { + struct active_tap_dance *const ref_dance = &active_tap_dances[i]; + if (ref_dance->position == ZMK_BHV_TAP_DANCE_POSITION_FREE) { + ref_dance->counter = 0; + ref_dance->position = position; + ref_dance->config = config; + ref_dance->release_at = 0; + ref_dance->is_pressed = true; + ref_dance->timer_started = true; + ref_dance->timer_cancelled = false; + ref_dance->tap_dance_decided = false; + *tap_dance = ref_dance; + return 0; + } + } + return -ENOMEM; +} + +static void clear_tap_dance(struct active_tap_dance *tap_dance) { + tap_dance->position = ZMK_BHV_TAP_DANCE_POSITION_FREE; +} + +static int stop_timer(struct active_tap_dance *tap_dance) { + int timer_cancel_result = k_delayed_work_cancel(&tap_dance->release_timer); + if (timer_cancel_result == -EINPROGRESS) { + // too late to cancel, we'll let the timer handler clear up. + tap_dance->timer_cancelled = true; + } + return timer_cancel_result; +} + +static void reset_timer(struct active_tap_dance *tap_dance, + struct zmk_behavior_binding_event event) { + tap_dance->release_at = event.timestamp + tap_dance->config->tapping_term_ms; + int32_t ms_left = tap_dance->release_at - k_uptime_get(); + if (ms_left > 0) { + k_delayed_work_submit(&tap_dance->release_timer, K_MSEC(ms_left)); + LOG_DBG("Successfully reset timer at position %d", tap_dance->position); + } +} + +static inline int press_tap_dance_behavior(struct active_tap_dance *tap_dance, int64_t timestamp) { + tap_dance->tap_dance_decided = true; + struct zmk_behavior_binding binding = tap_dance->config->behaviors[tap_dance->counter - 1]; + struct zmk_behavior_binding_event event = { + .position = tap_dance->position, + .timestamp = timestamp, + }; + return behavior_keymap_binding_pressed(&binding, event); +} + +static inline int release_tap_dance_behavior(struct active_tap_dance *tap_dance, + int64_t timestamp) { + struct zmk_behavior_binding binding = tap_dance->config->behaviors[tap_dance->counter - 1]; + struct zmk_behavior_binding_event event = { + .position = tap_dance->position, + .timestamp = timestamp, + }; + clear_tap_dance(tap_dance); + return behavior_keymap_binding_released(&binding, event); +} + +static int on_tap_dance_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_tap_dance_config *cfg = dev->config; + struct active_tap_dance *tap_dance; + tap_dance = find_tap_dance(event.position); + if (tap_dance == NULL) { + if (new_tap_dance(event.position, cfg, &tap_dance) == -ENOMEM) { + LOG_ERR("Unable to create new tap dance. Insufficient space in active_tap_dances[]."); + return ZMK_BEHAVIOR_OPAQUE; + } + LOG_DBG("%d created new tap dance", event.position); + } + tap_dance->is_pressed = true; + LOG_DBG("%d tap dance pressed", event.position); + stop_timer(tap_dance); + // Increment the counter on keypress. If the counter has reached its maximum + // value, invoke the last binding available. + if (tap_dance->counter < cfg->behavior_count) { + tap_dance->counter++; + } + if (tap_dance->counter == cfg->behavior_count) { + // LOG_DBG("Tap dance has been decided via maximum counter value"); + press_tap_dance_behavior(tap_dance, event.timestamp); + return ZMK_EV_EVENT_BUBBLE; + } + reset_timer(tap_dance, event); + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_tap_dance_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("%d tap dance keybind released", event.position); + struct active_tap_dance *tap_dance = find_tap_dance(event.position); + if (tap_dance == NULL) { + LOG_ERR("ACTIVE TAP DANCE CLEARED TOO EARLY"); + return ZMK_BEHAVIOR_OPAQUE; + } + tap_dance->is_pressed = false; + if (tap_dance->tap_dance_decided) { + release_tap_dance_behavior(tap_dance, event.timestamp); + } + return ZMK_BEHAVIOR_OPAQUE; +} + +void behavior_tap_dance_timer_handler(struct k_work *item) { + struct active_tap_dance *tap_dance = CONTAINER_OF(item, struct active_tap_dance, release_timer); + if (tap_dance->position == ZMK_BHV_TAP_DANCE_POSITION_FREE) { + return; + } + if (tap_dance->timer_cancelled) { + return; + } + LOG_DBG("Tap dance has been decided via timer. Counter reached: %d", tap_dance->counter); + press_tap_dance_behavior(tap_dance, tap_dance->release_at); + if (tap_dance->is_pressed) { + return; + } + release_tap_dance_behavior(tap_dance, tap_dance->release_at); +} + +static const struct behavior_driver_api behavior_tap_dance_driver_api = { + .binding_pressed = on_tap_dance_binding_pressed, + .binding_released = on_tap_dance_binding_released, +}; + +static int tap_dance_position_state_changed_listener(const zmk_event_t *eh); + +ZMK_LISTENER(behavior_tap_dance, tap_dance_position_state_changed_listener); +ZMK_SUBSCRIPTION(behavior_tap_dance, zmk_position_state_changed); + +static int tap_dance_position_state_changed_listener(const zmk_event_t *eh) { + struct zmk_position_state_changed *ev = as_zmk_position_state_changed(eh); + if (ev == NULL) { + return ZMK_EV_EVENT_BUBBLE; + } + if (!ev->state) { + LOG_DBG("Ignore upstroke at position %d.", ev->position); + return ZMK_EV_EVENT_BUBBLE; + } + for (int i = 0; i < ZMK_BHV_TAP_DANCE_MAX_HELD; i++) { + struct active_tap_dance *tap_dance = &active_tap_dances[i]; + if (tap_dance->position == ZMK_BHV_TAP_DANCE_POSITION_FREE) { + continue; + } + if (tap_dance->position == ev->position) { + continue; + } + stop_timer(tap_dance); + LOG_DBG("Tap dance interrupted, activating tap-dance at %d", tap_dance->position); + if (!tap_dance->tap_dance_decided) { + press_tap_dance_behavior(tap_dance, ev->timestamp); + if (!tap_dance->is_pressed) { + release_tap_dance_behavior(tap_dance, ev->timestamp); + } + return ZMK_EV_EVENT_BUBBLE; + } + } + return ZMK_EV_EVENT_BUBBLE; +} + +static int behavior_tap_dance_init(const struct device *dev) { + static bool init_first_run = true; + if (init_first_run) { + for (int i = 0; i < ZMK_BHV_TAP_DANCE_MAX_HELD; i++) { + k_delayed_work_init(&active_tap_dances[i].release_timer, + behavior_tap_dance_timer_handler); + clear_tap_dance(&active_tap_dances[i]); + } + } + init_first_run = false; + return 0; +} + +#define _TRANSFORM_ENTRY(idx, node) ZMK_KEYMAP_EXTRACT_BINDING(idx, node), + +#define TRANSFORMED_BINDINGS(node) \ + { UTIL_LISTIFY(DT_INST_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, DT_DRV_INST(node)) } + +#define KP_INST(n) \ + static struct zmk_behavior_binding \ + behavior_tap_dance_config_##n##_bindings[DT_INST_PROP_LEN(n, bindings)] = \ + TRANSFORMED_BINDINGS(n); \ + static struct behavior_tap_dance_config behavior_tap_dance_config_##n = { \ + .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ + .behaviors = behavior_tap_dance_config_##n##_bindings, \ + .behavior_count = DT_INST_PROP_LEN(n, bindings)}; \ + DEVICE_AND_API_INIT(behavior_tap_dance_##n, DT_INST_LABEL(n), behavior_tap_dance_init, NULL, \ + &behavior_tap_dance_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KP_INST) + +#endif \ No newline at end of file diff --git a/app/tests/tap-dance/1a-tap1/events.patterns b/app/tests/tap-dance/1a-tap1/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/1a-tap1/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/1a-tap1/keycode_events.snapshot b/app/tests/tap-dance/1a-tap1/keycode_events.snapshot new file mode 100644 index 00000000000..38bc54c3b31 --- /dev/null +++ b/app/tests/tap-dance/1a-tap1/keycode_events.snapshot @@ -0,0 +1,5 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/1a-tap1/native_posix.keymap b/app/tests/tap-dance/1a-tap1/native_posix.keymap new file mode 100644 index 00000000000..1e5dff06821 --- /dev/null +++ b/app/tests/tap-dance/1a-tap1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/1b-tap2/events.patterns b/app/tests/tap-dance/1b-tap2/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/1b-tap2/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/1b-tap2/keycode_events.snapshot b/app/tests/tap-dance/1b-tap2/keycode_events.snapshot new file mode 100644 index 00000000000..c23537b9c45 --- /dev/null +++ b/app/tests/tap-dance/1b-tap2/keycode_events.snapshot @@ -0,0 +1,7 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/1b-tap2/native_posix.keymap b/app/tests/tap-dance/1b-tap2/native_posix.keymap new file mode 100644 index 00000000000..c5e1c8db6e5 --- /dev/null +++ b/app/tests/tap-dance/1b-tap2/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/1c-tap3/events.patterns b/app/tests/tap-dance/1c-tap3/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/1c-tap3/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/1c-tap3/keycode_events.snapshot b/app/tests/tap-dance/1c-tap3/keycode_events.snapshot new file mode 100644 index 00000000000..1e68bae9fa9 --- /dev/null +++ b/app/tests/tap-dance/1c-tap3/keycode_events.snapshot @@ -0,0 +1,9 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/1c-tap3/native_posix.keymap b/app/tests/tap-dance/1c-tap3/native_posix.keymap new file mode 100644 index 00000000000..6813393e5d7 --- /dev/null +++ b/app/tests/tap-dance/1c-tap3/native_posix.keymap @@ -0,0 +1,15 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/2a-hold1/events.patterns b/app/tests/tap-dance/2a-hold1/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/2a-hold1/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/2a-hold1/keycode_events.snapshot b/app/tests/tap-dance/2a-hold1/keycode_events.snapshot new file mode 100644 index 00000000000..2a0965dcb00 --- /dev/null +++ b/app/tests/tap-dance/2a-hold1/keycode_events.snapshot @@ -0,0 +1,5 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 0 tap dance keybind released +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/2a-hold1/native_posix.keymap b/app/tests/tap-dance/2a-hold1/native_posix.keymap new file mode 100644 index 00000000000..f4c7a2d29a4 --- /dev/null +++ b/app/tests/tap-dance/2a-hold1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/2b-hold2/events.patterns b/app/tests/tap-dance/2b-hold2/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/2b-hold2/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/2b-hold2/keycode_events.snapshot b/app/tests/tap-dance/2b-hold2/keycode_events.snapshot new file mode 100644 index 00000000000..dbccfc9414e --- /dev/null +++ b/app/tests/tap-dance/2b-hold2/keycode_events.snapshot @@ -0,0 +1,7 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +td_binding_pressed: 0 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 0 tap dance keybind released +kp_released: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/2b-hold2/native_posix.keymap b/app/tests/tap-dance/2b-hold2/native_posix.keymap new file mode 100644 index 00000000000..0fec2e40fea --- /dev/null +++ b/app/tests/tap-dance/2b-hold2/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/2c-hold3/events.patterns b/app/tests/tap-dance/2c-hold3/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/2c-hold3/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/2c-hold3/keycode_events.snapshot b/app/tests/tap-dance/2c-hold3/keycode_events.snapshot new file mode 100644 index 00000000000..3ac8e0e68ef --- /dev/null +++ b/app/tests/tap-dance/2c-hold3/keycode_events.snapshot @@ -0,0 +1,9 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +td_binding_pressed: 0 tap dance pressed +td_binding_released: 0 tap dance keybind released +td_binding_pressed: 0 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 0 tap dance keybind released +kp_released: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/2c-hold3/native_posix.keymap b/app/tests/tap-dance/2c-hold3/native_posix.keymap new file mode 100644 index 00000000000..8375c6f6392 --- /dev/null +++ b/app/tests/tap-dance/2c-hold3/native_posix.keymap @@ -0,0 +1,15 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/3a-tap-int-mid/events.patterns b/app/tests/tap-dance/3a-tap-int-mid/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/3a-tap-int-mid/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot b/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot new file mode 100644 index 00000000000..715d0143a04 --- /dev/null +++ b/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 2 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3a-tap-int-mid/native_posix.keymap b/app/tests/tap-dance/3a-tap-int-mid/native_posix.keymap new file mode 100644 index 00000000000..8a62430c5a8 --- /dev/null +++ b/app/tests/tap-dance/3a-tap-int-mid/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/3b-tap-int-seq/events.patterns b/app/tests/tap-dance/3b-tap-int-seq/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/3b-tap-int-seq/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot b/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot new file mode 100644 index 00000000000..a973e426c54 --- /dev/null +++ b/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 2 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3b-tap-int-seq/native_posix.keymap b/app/tests/tap-dance/3b-tap-int-seq/native_posix.keymap new file mode 100644 index 00000000000..4a76bdb0949 --- /dev/null +++ b/app/tests/tap-dance/3b-tap-int-seq/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/3c-tap-int-after/events.patterns b/app/tests/tap-dance/3c-tap-int-after/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/3c-tap-int-after/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot b/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot new file mode 100644 index 00000000000..2c715537821 --- /dev/null +++ b/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +td_binding_released: 2 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3c-tap-int-after/native_posix.keymap b/app/tests/tap-dance/3c-tap-int-after/native_posix.keymap new file mode 100644 index 00000000000..e1b6d979894 --- /dev/null +++ b/app/tests/tap-dance/3c-tap-int-after/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/3d-hold-int-mid/events.patterns b/app/tests/tap-dance/3d-hold-int-mid/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/3d-hold-int-mid/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot b/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot new file mode 100644 index 00000000000..7631c4ac70e --- /dev/null +++ b/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 0 tap dance keybind released +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3d-hold-int-mid/native_posix.keymap b/app/tests/tap-dance/3d-hold-int-mid/native_posix.keymap new file mode 100644 index 00000000000..55a98d361ae --- /dev/null +++ b/app/tests/tap-dance/3d-hold-int-mid/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/3e-hold-int-seq/events.patterns b/app/tests/tap-dance/3e-hold-int-seq/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/3e-hold-int-seq/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot b/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot new file mode 100644 index 00000000000..ca13f8bc3e3 --- /dev/null +++ b/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 0 tap dance keybind released +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3e-hold-int-seq/native_posix.keymap b/app/tests/tap-dance/3e-hold-int-seq/native_posix.keymap new file mode 100644 index 00000000000..b31e92dce18 --- /dev/null +++ b/app/tests/tap-dance/3e-hold-int-seq/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/3f-hold-int-after/events.patterns b/app/tests/tap-dance/3f-hold-int-after/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/3f-hold-int-after/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot b/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot new file mode 100644 index 00000000000..044018e04ef --- /dev/null +++ b/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 0 created new tap dance +td_binding_pressed: 0 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 0 tap dance keybind released +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3f-hold-int-after/native_posix.keymap b/app/tests/tap-dance/3f-hold-int-after/native_posix.keymap new file mode 100644 index 00000000000..6397fbb3411 --- /dev/null +++ b/app/tests/tap-dance/3f-hold-int-after/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/4a-single/events.patterns b/app/tests/tap-dance/4a-single/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/4a-single/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/4a-single/keycode_events.snapshot b/app/tests/tap-dance/4a-single/keycode_events.snapshot new file mode 100644 index 00000000000..6d60e8429af --- /dev/null +++ b/app/tests/tap-dance/4a-single/keycode_events.snapshot @@ -0,0 +1,5 @@ +td_binding_pressed: 1 created new tap dance +td_binding_pressed: 1 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 1 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/4a-single/native_posix.keymap b/app/tests/tap-dance/4a-single/native_posix.keymap new file mode 100644 index 00000000000..348a682724f --- /dev/null +++ b/app/tests/tap-dance/4a-single/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/5a-tdint-mid/events.patterns b/app/tests/tap-dance/5a-tdint-mid/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/5a-tdint-mid/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot b/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot new file mode 100644 index 00000000000..301dc914383 --- /dev/null +++ b/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 3 created new tap dance +td_binding_pressed: 3 tap dance pressed +td_binding_released: 3 tap dance keybind released +td_binding_released: 2 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5a-tdint-mid/native_posix.keymap b/app/tests/tap-dance/5a-tdint-mid/native_posix.keymap new file mode 100644 index 00000000000..2188fd020e9 --- /dev/null +++ b/app/tests/tap-dance/5a-tdint-mid/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/5b-tdint-seq/events.patterns b/app/tests/tap-dance/5b-tdint-seq/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/5b-tdint-seq/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot b/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot new file mode 100644 index 00000000000..567ec079089 --- /dev/null +++ b/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 3 created new tap dance +td_binding_pressed: 3 tap dance pressed +td_binding_released: 2 tap dance keybind released +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_released: 3 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5b-tdint-seq/native_posix.keymap b/app/tests/tap-dance/5b-tdint-seq/native_posix.keymap new file mode 100644 index 00000000000..320b7199b71 --- /dev/null +++ b/app/tests/tap-dance/5b-tdint-seq/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,1,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/5c-tdint-after/events.patterns b/app/tests/tap-dance/5c-tdint-after/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/5c-tdint-after/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot b/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot new file mode 100644 index 00000000000..cc1da902afb --- /dev/null +++ b/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot @@ -0,0 +1,10 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +td_binding_released: 2 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 3 created new tap dance +td_binding_pressed: 3 tap dance pressed +td_binding_released: 3 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5c-tdint-after/native_posix.keymap b/app/tests/tap-dance/5c-tdint-after/native_posix.keymap new file mode 100644 index 00000000000..17e538bd860 --- /dev/null +++ b/app/tests/tap-dance/5c-tdint-after/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/5d-tdint-multiple/events.patterns b/app/tests/tap-dance/5d-tdint-multiple/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/5d-tdint-multiple/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot b/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot new file mode 100644 index 00000000000..afb32824c2c --- /dev/null +++ b/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot @@ -0,0 +1,15 @@ +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +td_binding_released: 2 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 3 created new tap dance +td_binding_pressed: 3 tap dance pressed +td_binding_released: 3 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +td_binding_pressed: 2 created new tap dance +td_binding_pressed: 2 tap dance pressed +td_binding_released: 2 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5d-tdint-multiple/native_posix.keymap b/app/tests/tap-dance/5d-tdint-multiple/native_posix.keymap new file mode 100644 index 00000000000..150f6d05f6d --- /dev/null +++ b/app/tests/tap-dance/5d-tdint-multiple/native_posix.keymap @@ -0,0 +1,15 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/behavior_keymap.dtsi b/app/tests/tap-dance/behavior_keymap.dtsi new file mode 100644 index 00000000000..5e95cd50574 --- /dev/null +++ b/app/tests/tap-dance/behavior_keymap.dtsi @@ -0,0 +1,60 @@ +#include +#include +#include + +/ { + behaviors { + ht: hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP"; + #binding-cells = <2>; + tapping-term-ms = <200>; + quick_tap_ms = <0>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + + tdm: tap_dance_mixed { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_MOD"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&ht LSHIFT A>, <&ht LALT B>, <&ht LGUI C>; + }; + + tdb: tap_dance_basic { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_BASIC"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp N1>, <&kp N2>, <&kp N3>; + }; + + td2: tap_dance_basic_2 { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_BASIC_2"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp A>, <&kp B>, <&kp C>; + }; + + tds: tap_dance_single { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_SINGlE"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp S>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tdm &tds + &tdb &td2>; + }; + }; +}; diff --git a/docs/docs/assets/tap-dance/timing_diagram.svg b/docs/docs/assets/tap-dance/timing_diagram.svg new file mode 100644 index 00000000000..ab02dcafb7a --- /dev/null +++ b/docs/docs/assets/tap-dance/timing_diagram.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/behaviors/tap-dance.md b/docs/docs/behaviors/tap-dance.md new file mode 100644 index 00000000000..af49ca3ca85 --- /dev/null +++ b/docs/docs/behaviors/tap-dance.md @@ -0,0 +1,76 @@ +--- +title: Tap-Dance Behavior +sidebar_label: Tap-Dance +--- + +## Summary + +A tap-dance key invokes a different behavior (e.g. `kp`) corresponding +to how many times it is pressed. For example, you could configure a +tap-dance key that acts as `LSHIFT` if tapped once, or Caps _Lock_ if tapped twice. +The expandability of the number of [`bindings`](#bindings) attached to a +particular tap-dance is a great way to add more functionality to a single key, +especially for keyboards with a limited number of keys. +Tap-dances are completely custom, so for every unique tap-dance key, +a new tap-dance must be defined in your keymap's `behaviors`. + +Tap-dances are designed to resolve immediately when interrupted by another keypress. +Meaning, when a keybind is pressed other than any active tap-dances, +the tap-dance will activate according to the current value of its +counter before the interrupting keybind is registered. + +### Configuration + +#### `tapping-term-ms` + +Defines the maximum elapsed time after the last tap-dance keybind press +before a binding is selected from [`bindings`](#bindings). +Default value is `200`ms. + +#### `bindings` + +An array of one or more keybinds. This list can include [any ZMK keycode](../codes/) and bindings for ZMK behaviors. + +#### Example Usage + +This example configures a tap-dance named `td0` that outputs the number of times it is pressed from 1-3. + +``` +#include +#include + +/ { + behaviors { + td0: tap_dance_0 { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_0"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp N1>, <&kp N2>, <&kp N3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &td0 + >; + }; + }; +}; +``` + +The following image describes the behavior of this particular tap-dance. + +![Timing Diagram](../assets/tap-dance/timing_diagram.svg) + +:::note +Alphanumeric [`key press`](key-press.md) bindings, like those used for `td0`, +will release as soon as an interrupting key press occurs. +For instance, if a modifier key like `LSHIFT` were to replace the `N1` +binding in the last example above, it would remain pressed until `td0`'s +binding is released and the output would instead be `J`. Any following +alphanumeric key presses would be capitalized as long as `td0` is held down. +::: diff --git a/docs/sidebars.js b/docs/sidebars.js index 647399a787e..7db3e055b5f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -28,6 +28,7 @@ module.exports = { "behaviors/mod-morph", "behaviors/sticky-key", "behaviors/sticky-layer", + "behaviors/tap-dance", "behaviors/caps-word", "behaviors/key-repeat", "behaviors/reset", From 58c7c0ee0c252be7b1d6b03f432c17cde34e9908 Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Wed, 16 Mar 2022 08:06:55 -0700 Subject: [PATCH 0293/1130] feat(docs): Add tap-dance to feature matrix --- docs/docs/intro.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index b8a6316c914..39b5324545f 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -23,6 +23,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | Split Keyboard Support | ✅ | ✅ | ✅ | | [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | | [Hold-Tap](behaviors/hold-tap.md) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md/#layer-tap)) | ✅ | ✅ | ✅ | +| [Tap-Dance](behaviors/tap-dance.md) | ✅ | ✅[^3] | ✅ | | [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | | [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | | [Encoders](features/encoders.md)[^1] | ✅ | ✅ | ✅ | @@ -42,6 +43,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | AVR/8 Bit | | | ✅ | | [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | +[^3]: Tap-Dances are limited to single and double-tap on BlueMicro [^2]: Encoders are not currently supported on peripheral side splits. [^1]: OLEDs are currently proof of concept in ZMK. From 3a6a249ad095e1518f37f0f0105fbb570359f198 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 12 Mar 2022 15:15:39 +0000 Subject: [PATCH 0294/1130] feat(behaviors): Add macro support. * Fine grainted press/release/tap actions. * TIming between actions can be controlled. * Processed async, to avoid blocking. --- app/CMakeLists.txt | 2 + app/Kconfig | 8 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/macros.dtsi | 54 +++++ .../behaviors/zmk,behavior-macro.yaml | 21 ++ .../macros/zmk,macro-control-mode-press.yaml | 8 + .../zmk,macro-control-mode-release.yaml | 8 + .../macros/zmk,macro-control-mode-tap.yaml | 8 + .../macros/zmk,macro-control-tap-time.yaml | 8 + .../macros/zmk,macro-control-wait-time.yaml | 8 + .../macros/zmk,macro-pause-for-release.yaml | 8 + app/include/zmk/behavior_queue.h | 14 ++ app/src/behavior_queue.c | 66 +++++++ app/src/behaviors/behavior_macro.c | 187 ++++++++++++++++++ app/tests/macros/basic/events.patterns | 2 + .../macros/basic/keycode_events.snapshot | 18 ++ app/tests/macros/basic/native_posix.keymap | 14 ++ app/tests/macros/behavior_keymap.dtsi | 68 +++++++ .../events.patterns | 1 + .../keycode_events.snapshot | 4 + .../native_posix.keymap | 57 ++++++ .../mo-plus-modifier-macro/events.patterns | 1 + .../keycode_events.snapshot | 4 + .../native_posix.keymap | 46 +++++ .../macros/press-mid-macro/events.patterns | 2 + .../press-mid-macro/keycode_events.snapshot | 10 + .../press-mid-macro/native_posix.keymap | 14 ++ .../macros/press-release/events.patterns | 1 + .../press-release/keycode_events.snapshot | 8 + .../macros/press-release/native_posix.keymap | 14 ++ .../macros/timing-override/events.patterns | 2 + .../timing-override/keycode_events.snapshot | 18 ++ .../timing-override/native_posix.keymap | 14 ++ .../macros/wait-macro-release/events.patterns | 3 + .../keycode_events.snapshot | 16 ++ .../wait-macro-release/native_posix.keymap | 14 ++ 36 files changed, 732 insertions(+) create mode 100644 app/dts/behaviors/macros.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-macro.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-control-mode-press.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-control-mode-release.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-control-mode-tap.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-control-tap-time.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-control-wait-time.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-pause-for-release.yaml create mode 100644 app/include/zmk/behavior_queue.h create mode 100644 app/src/behavior_queue.c create mode 100644 app/src/behaviors/behavior_macro.c create mode 100644 app/tests/macros/basic/events.patterns create mode 100644 app/tests/macros/basic/keycode_events.snapshot create mode 100644 app/tests/macros/basic/native_posix.keymap create mode 100644 app/tests/macros/behavior_keymap.dtsi create mode 100644 app/tests/macros/mo-plus-modifier-from-hold-tap/events.patterns create mode 100644 app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot create mode 100644 app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix.keymap create mode 100644 app/tests/macros/mo-plus-modifier-macro/events.patterns create mode 100644 app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot create mode 100644 app/tests/macros/mo-plus-modifier-macro/native_posix.keymap create mode 100644 app/tests/macros/press-mid-macro/events.patterns create mode 100644 app/tests/macros/press-mid-macro/keycode_events.snapshot create mode 100644 app/tests/macros/press-mid-macro/native_posix.keymap create mode 100644 app/tests/macros/press-release/events.patterns create mode 100644 app/tests/macros/press-release/keycode_events.snapshot create mode 100644 app/tests/macros/press-release/native_posix.keymap create mode 100644 app/tests/macros/timing-override/events.patterns create mode 100644 app/tests/macros/timing-override/keycode_events.snapshot create mode 100644 app/tests/macros/timing-override/native_posix.keymap create mode 100644 app/tests/macros/wait-macro-release/events.patterns create mode 100644 app/tests/macros/wait-macro-release/keycode_events.snapshot create mode 100644 app/tests/macros/wait-macro-release/native_posix.keymap diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index d853255cfbd..0d547fbeb92 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -51,6 +51,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) target_sources(app PRIVATE src/behaviors/behavior_key_repeat.c) + target_sources(app PRIVATE src/behaviors/behavior_macro.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) target_sources(app PRIVATE src/behaviors/behavior_outputs.c) @@ -61,6 +62,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_none.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources(app PRIVATE src/combo.c) + target_sources(app PRIVATE src/behavior_queue.c) target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/keymap.c) endif() diff --git a/app/Kconfig b/app/Kconfig index 1c9f929db66..81637336ef7 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -410,6 +410,14 @@ config ZMK_COMBO_MAX_KEYS_PER_COMBO #Combo options endmenu +menu "Behavior Options" + +config ZMK_BEHAVIORS_QUEUE_SIZE + int "Maximum number of behaviors to allow queueing from a macro or other complex behavior" + default 64 + +endmenu + menu "Advanced" menu "Initialization Priorities" diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 3e797cc9a37..c1dacbcd208 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -17,3 +17,4 @@ #include #include #include +#include \ No newline at end of file diff --git a/app/dts/behaviors/macros.dtsi b/app/dts/behaviors/macros.dtsi new file mode 100644 index 00000000000..7615329164f --- /dev/null +++ b/app/dts/behaviors/macros.dtsi @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define ZMK_MACRO_STRINGIFY(x) #x +#define ZMK_MACRO(name,...) \ + name: name { \ + label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ + compatible = "zmk,behavior-macro"; \ + #binding-cells = <0>; \ + __VA_ARGS__ \ + }; + + / { + behaviors { + macro_tap: macro_control_mode_tap { + compatible = "zmk,macro-control-mode-tap"; + label = "MAC_TAP"; + #binding-cells = <0>; + }; + + macro_press: macro_control_mode_press { + compatible = "zmk,macro-control-mode-press"; + label = "MAC_PRESS"; + #binding-cells = <0>; + }; + + macro_release: macro_control_mode_release { + compatible = "zmk,macro-control-mode-release"; + label = "MAC_REL"; + #binding-cells = <0>; + }; + + macro_tap_time: macro_control_tap_time { + compatible = "zmk,macro-control-tap-time"; + label = "MAC_TAP_TIME"; + #binding-cells = <1>; + }; + + macro_wait_time: macro_control_wait_time { + compatible = "zmk,macro-control-wait-time"; + label = "MAC_WAIT_TIME"; + #binding-cells = <1>; + }; + + macro_pause_for_release: macro_pause_for_release { + compatible = "zmk,macro-pause-for-release"; + label = "MAC_WAIT_REL"; + #binding-cells = <0>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml new file mode 100644 index 00000000000..ba5bcb07957 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml @@ -0,0 +1,21 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Behavior + +compatible: "zmk,behavior-macro" + +include: zero_param.yaml + +properties: + bindings: + type: phandle-array + required: true + wait-ms: + type: int + default: 100 + description: The default time to wait (in milliseconds) before triggering the next behavior in the macro bindings list. + tap-ms: + type: int + default: 100 + description: The default time to wait (in milliseconds) between the press and release events on a tapped macro behavior binding \ No newline at end of file diff --git a/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml b/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml new file mode 100644 index 00000000000..64b3939b470 --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Set Macro To Press Mode + +compatible: "zmk,macro-control-mode-press" + +include: zero_param.yaml \ No newline at end of file diff --git a/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml b/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml new file mode 100644 index 00000000000..c1c27882776 --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Set Macro To Release Mode + +compatible: "zmk,macro-control-mode-release" + +include: zero_param.yaml \ No newline at end of file diff --git a/app/dts/bindings/macros/zmk,macro-control-mode-tap.yaml b/app/dts/bindings/macros/zmk,macro-control-mode-tap.yaml new file mode 100644 index 00000000000..dde32c91741 --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-control-mode-tap.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Set Macro To Tap Mode + +compatible: "zmk,macro-control-mode-tap" + +include: zero_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml b/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml new file mode 100644 index 00000000000..8dacdc2afb2 --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Set Macro Tap Duration + +compatible: "zmk,macro-control-tap-time" + +include: one_param.yaml \ No newline at end of file diff --git a/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml b/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml new file mode 100644 index 00000000000..9e9beac2a54 --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Set Macro Wait Duration + +compatible: "zmk,macro-control-wait-time" + +include: one_param.yaml \ No newline at end of file diff --git a/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml b/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml new file mode 100644 index 00000000000..e89d8b2422a --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Pause Until Release Marker + +compatible: "zmk,macro-pause-for-release" + +include: zero_param.yaml \ No newline at end of file diff --git a/app/include/zmk/behavior_queue.h b/app/include/zmk/behavior_queue.h new file mode 100644 index 00000000000..8a184e4aa68 --- /dev/null +++ b/app/include/zmk/behavior_queue.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +int zmk_behavior_queue_add(uint32_t position, const struct zmk_behavior_binding behavior, + bool press, uint32_t wait); diff --git a/app/src/behavior_queue.c b/app/src/behavior_queue.c new file mode 100644 index 00000000000..a3cd8d47b13 --- /dev/null +++ b/app/src/behavior_queue.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct q_item { + uint32_t position; + struct zmk_behavior_binding binding; + bool press : 1; + uint32_t wait : 31; +}; + +K_MSGQ_DEFINE(zmk_behavior_queue_msgq, sizeof(struct q_item), CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE, 4); + +static void behavior_queue_process_next(struct k_work *work); +static K_DELAYED_WORK_DEFINE(queue_work, behavior_queue_process_next); + +static void behavior_queue_process_next(struct k_work *work) { + struct q_item item = {.wait = 0}; + + while (k_msgq_get(&zmk_behavior_queue_msgq, &item, K_NO_WAIT) == 0) { + LOG_DBG("Invoking %s: 0x%02x 0x%02x", log_strdup(item.binding.behavior_dev), + item.binding.param1, item.binding.param2); + + struct zmk_behavior_binding_event event = {.position = item.position, + .timestamp = k_uptime_get()}; + + if (item.press) { + behavior_keymap_binding_pressed(&item.binding, event); + } else { + behavior_keymap_binding_released(&item.binding, event); + } + + LOG_DBG("Processing next queued behavior in %dms", item.wait); + + if (item.wait > 0) { + k_delayed_work_submit(&queue_work, K_MSEC(item.wait)); + break; + } + } +} + +int zmk_behavior_queue_add(uint32_t position, const struct zmk_behavior_binding binding, bool press, + uint32_t wait) { + struct q_item item = {.press = press, .binding = binding, .wait = wait}; + + const int ret = k_msgq_put(&zmk_behavior_queue_msgq, &item, K_NO_WAIT); + if (ret < 0) { + return ret; + } + + if (!k_delayed_work_pending(&queue_work)) { + behavior_queue_process_next(&queue_work.work); + } + + return 0; +} diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c new file mode 100644 index 00000000000..92ee2c430cb --- /dev/null +++ b/app/src/behaviors/behavior_macro.c @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_macro + +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +enum behavior_macro_mode { + MACRO_MODE_TAP, + MACRO_MODE_PRESS, + MACRO_MODE_RELEASE, +}; + +struct behavior_macro_trigger_state { + uint32_t wait_ms; + uint32_t tap_ms; + enum behavior_macro_mode mode; + uint16_t start_index; + uint16_t count; +}; + +struct behavior_macro_state { + struct behavior_macro_trigger_state release_state; + + uint32_t press_bindings_count; +}; + +struct behavior_macro_config { + uint32_t default_wait_ms; + uint32_t default_tap_ms; + uint32_t count; + struct zmk_behavior_binding bindings[]; +}; + +#define TAP_MODE DT_LABEL(DT_INST(0, zmk_macro_control_mode_tap)) +#define PRESS_MODE DT_LABEL(DT_INST(0, zmk_macro_control_mode_press)) +#define REL_MODE DT_LABEL(DT_INST(0, zmk_macro_control_mode_release)) + +#define TAP_TIME DT_LABEL(DT_INST(0, zmk_macro_control_tap_time)) +#define WAIT_TIME DT_LABEL(DT_INST(0, zmk_macro_control_wait_time)) +#define WAIT_REL DT_LABEL(DT_INST(0, zmk_macro_pause_for_release)) + +#define ZM_IS_NODE_MATCH(a, b) (strcmp(a, b) == 0) +#define IS_TAP_MODE(dev) ZM_IS_NODE_MATCH(dev, TAP_MODE) +#define IS_PRESS_MODE(dev) ZM_IS_NODE_MATCH(dev, PRESS_MODE) +#define IS_RELEASE_MODE(dev) ZM_IS_NODE_MATCH(dev, REL_MODE) + +#define IS_TAP_TIME(dev) ZM_IS_NODE_MATCH(dev, TAP_TIME) +#define IS_WAIT_TIME(dev) ZM_IS_NODE_MATCH(dev, WAIT_TIME) +#define IS_PAUSE(dev) ZM_IS_NODE_MATCH(dev, WAIT_REL) + +static bool handle_control_binding(struct behavior_macro_trigger_state *state, + const struct zmk_behavior_binding *binding) { + if (IS_TAP_MODE(binding->behavior_dev)) { + state->mode = MACRO_MODE_TAP; + LOG_DBG("macro mode set: tap"); + } else if (IS_PRESS_MODE(binding->behavior_dev)) { + state->mode = MACRO_MODE_PRESS; + LOG_DBG("macro mode set: press"); + } else if (IS_RELEASE_MODE(binding->behavior_dev)) { + state->mode = MACRO_MODE_RELEASE; + LOG_DBG("macro mode set: release"); + } else if (IS_TAP_TIME(binding->behavior_dev)) { + state->tap_ms = binding->param1; + LOG_DBG("macro tap time set: %d", state->tap_ms); + } else if (IS_WAIT_TIME(binding->behavior_dev)) { + state->wait_ms = binding->param1; + LOG_DBG("macro wait time set: %d", state->wait_ms); + } else { + return false; + } + + return true; +} + +static int behavior_macro_init(const struct device *dev) { + const struct behavior_macro_config *cfg = dev->config; + struct behavior_macro_state *state = dev->data; + state->press_bindings_count = cfg->count; + state->release_state.start_index = cfg->count; + state->release_state.count = 0; + + LOG_DBG("Precalculate initial release state:"); + for (int i = 0; i < cfg->count; i++) { + if (handle_control_binding(&state->release_state, &cfg->bindings[i])) { + // Updated state used for initial state on release. + } else if (IS_PAUSE(cfg->bindings[i].behavior_dev)) { + state->release_state.start_index = i + 1; + state->release_state.count = cfg->count - state->release_state.start_index; + state->press_bindings_count = i; + LOG_DBG("Release will resume at %d", state->release_state.start_index); + break; + } else { + // Ignore regular invokable bindings + } + } + + return 0; +}; + +static void queue_macro(uint32_t position, const struct zmk_behavior_binding bindings[], + struct behavior_macro_trigger_state state) { + LOG_DBG("Iterating macro bindings - starting: %d, count: %d", state.start_index, state.count); + for (int i = state.start_index; i < state.start_index + state.count; i++) { + if (!handle_control_binding(&state, &bindings[i])) { + switch (state.mode) { + case MACRO_MODE_TAP: + zmk_behavior_queue_add(position, bindings[i], true, state.tap_ms); + zmk_behavior_queue_add(position, bindings[i], false, state.wait_ms); + break; + case MACRO_MODE_PRESS: + zmk_behavior_queue_add(position, bindings[i], true, state.wait_ms); + break; + case MACRO_MODE_RELEASE: + zmk_behavior_queue_add(position, bindings[i], false, state.wait_ms); + break; + default: + LOG_ERR("Unknown macro mode: %d", state.mode); + break; + } + } + } +} + +static int on_macro_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_macro_config *cfg = dev->config; + struct behavior_macro_state *state = dev->data; + struct behavior_macro_trigger_state trigger_state = {.mode = MACRO_MODE_TAP, + .tap_ms = cfg->default_tap_ms, + .wait_ms = cfg->default_wait_ms, + .start_index = 0, + .count = state->press_bindings_count}; + + queue_macro(event.position, cfg->bindings, trigger_state); + + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_macro_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_macro_config *cfg = dev->config; + struct behavior_macro_state *state = dev->data; + + queue_macro(event.position, cfg->bindings, state->release_state); + + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_macro_driver_api = { + .binding_pressed = on_macro_binding_pressed, + .binding_released = on_macro_binding_released, +}; + +#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, DT_DRV_INST(drv_inst)), + +#define TRANSFORMED_BEHAVIORS(n) \ + {UTIL_LISTIFY(DT_PROP_LEN(DT_DRV_INST(n), bindings), BINDING_WITH_COMMA, n)}, + +#define MACRO_INST(n) \ + static struct behavior_macro_state behavior_macro_state_##n = {}; \ + static struct behavior_macro_config behavior_macro_config_##n = { \ + .default_wait_ms = DT_INST_PROP_OR(n, wait_ms, 100), \ + .default_tap_ms = DT_INST_PROP_OR(n, tap_ms, 100), \ + .count = DT_INST_PROP_LEN(n, bindings), \ + .bindings = TRANSFORMED_BEHAVIORS(n)}; \ + DEVICE_DT_INST_DEFINE(n, behavior_macro_init, device_pm_control_nop, \ + &behavior_macro_state_##n, &behavior_macro_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(MACRO_INST) + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/tests/macros/basic/events.patterns b/app/tests/macros/basic/events.patterns new file mode 100644 index 00000000000..0a5f25ca647 --- /dev/null +++ b/app/tests/macros/basic/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*behavior_queue_process_next/queue_process_next/p \ No newline at end of file diff --git a/app/tests/macros/basic/keycode_events.snapshot b/app/tests/macros/basic/keycode_events.snapshot new file mode 100644 index 00000000000..b238a2fff23 --- /dev/null +++ b/app/tests/macros/basic/keycode_events.snapshot @@ -0,0 +1,18 @@ +queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 50ms +queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 10ms +queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 50ms +queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 10ms +queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +kp_pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 50ms +queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +kp_released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 10ms diff --git a/app/tests/macros/basic/native_posix.keymap b/app/tests/macros/basic/native_posix.keymap new file mode 100644 index 00000000000..6a2391db66d --- /dev/null +++ b/app/tests/macros/basic/native_posix.keymap @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/macros/behavior_keymap.dtsi b/app/tests/macros/behavior_keymap.dtsi new file mode 100644 index 00000000000..7399cd5b92a --- /dev/null +++ b/app/tests/macros/behavior_keymap.dtsi @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + macros { + ZMK_MACRO(abc_macro, + wait-ms = <10>; + tap-ms = <50>; + bindings = <&kp A &kp B &kp C>; + ) + + ZMK_MACRO(hold_shift_macro, + bindings + = <¯o_press &kp LSHFT> + , <¯o_tap> + , <&kp D &kp O &kp G> + , <¯o_release &kp LSHFT> + ; + ) + + ZMK_MACRO(custom_timing, + bindings + = <¯o_wait_time 50> + , <&kp A> + , <¯o_tap_time 20> + , <&kp B &kp C> + ; + ) + + ZMK_MACRO(dual_sequence_macro, + wait-ms = <10>; + tap-ms = <40>; + bindings + = <¯o_press &kp LALT> + , <¯o_tap> + , <&kp TAB> + , <¯o_pause_for_release> + , <¯o_release &kp LALT> + ; + ) + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &abc_macro &mo 1 + &hold_shift_macro &custom_timing>; + }; + + extra_layer { + bindings = < + &dual_sequence_macro &trans + &kp TAB &none>; + + }; + + }; +}; diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/events.patterns b/app/tests/macros/mo-plus-modifier-from-hold-tap/events.patterns new file mode 100644 index 00000000000..3c9d3f838c6 --- /dev/null +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot b/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot new file mode 100644 index 00000000000..9f47e064e11 --- /dev/null +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot @@ -0,0 +1,4 @@ +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix.keymap b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix.keymap new file mode 100644 index 00000000000..2f3b943a70d --- /dev/null +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix.keymap @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + macros { + ZMK_MACRO( + mo_mod_macro, + wait-ms = <0>; + tap-ms = <20>; + bindings + = <¯o_press &mo 1 &kp LSHFT> + , <¯o_pause_for_release> + , <¯o_release &mo 1 &kp LSHFT>; + ) + }; + + behaviors { + mth: macro_tap_hold { + compatible = "zmk,behavior-hold-tap"; + label = "MACRO_TAP_HOLD"; + #binding-cells = <2>; + flavor = "tap-unless-interrupted"; + tapping-term-ms = <200>; + bindings = <&mo_mod_macro>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &mth 0 TAB &kp A + &kp B &kp C>; + }; + + extra_layer { + bindings = < + &kp D &kp E + &kp F &kp G>; + + }; + + }; +}; + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/macros/mo-plus-modifier-macro/events.patterns b/app/tests/macros/mo-plus-modifier-macro/events.patterns new file mode 100644 index 00000000000..3c9d3f838c6 --- /dev/null +++ b/app/tests/macros/mo-plus-modifier-macro/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot b/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot new file mode 100644 index 00000000000..9f47e064e11 --- /dev/null +++ b/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot @@ -0,0 +1,4 @@ +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/mo-plus-modifier-macro/native_posix.keymap b/app/tests/macros/mo-plus-modifier-macro/native_posix.keymap new file mode 100644 index 00000000000..c264a9aba44 --- /dev/null +++ b/app/tests/macros/mo-plus-modifier-macro/native_posix.keymap @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + macros { + ZMK_MACRO( + mo_mod_macro, + wait-ms = <0>; + tap-ms = <20>; + bindings + = <¯o_press &mo 1 &kp LSHFT> + , <¯o_pause_for_release> + , <¯o_release &mo 1 &kp LSHFT>; + ) + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &mo_mod_macro &kp A + &kp B &kp C>; + }; + + extra_layer { + bindings = < + &kp D &kp E + &kp F &kp G>; + + }; + + }; +}; + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/macros/press-mid-macro/events.patterns b/app/tests/macros/press-mid-macro/events.patterns new file mode 100644 index 00000000000..cedbda8bc6d --- /dev/null +++ b/app/tests/macros/press-mid-macro/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*keymap_apply_position_state/pos_state/p \ No newline at end of file diff --git a/app/tests/macros/press-mid-macro/keycode_events.snapshot b/app/tests/macros/press-mid-macro/keycode_events.snapshot new file mode 100644 index 00000000000..22393a3ad63 --- /dev/null +++ b/app/tests/macros/press-mid-macro/keycode_events.snapshot @@ -0,0 +1,10 @@ +pos_state: layer: 0 position: 0, binding name: ZM_abc_macro +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pos_state: layer: 0 position: 0, binding name: ZM_abc_macro +pos_state: layer: 0 position: 1, binding name: MO +pos_state: layer: 0 position: 1, binding name: MO +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/press-mid-macro/native_posix.keymap b/app/tests/macros/press-mid-macro/native_posix.keymap new file mode 100644 index 00000000000..a075a443614 --- /dev/null +++ b/app/tests/macros/press-mid-macro/native_posix.keymap @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/macros/press-release/events.patterns b/app/tests/macros/press-release/events.patterns new file mode 100644 index 00000000000..3c9d3f838c6 --- /dev/null +++ b/app/tests/macros/press-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/macros/press-release/keycode_events.snapshot b/app/tests/macros/press-release/keycode_events.snapshot new file mode 100644 index 00000000000..ebe69d5ce8a --- /dev/null +++ b/app/tests/macros/press-release/keycode_events.snapshot @@ -0,0 +1,8 @@ +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x12 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x12 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/press-release/native_posix.keymap b/app/tests/macros/press-release/native_posix.keymap new file mode 100644 index 00000000000..6814d5421e5 --- /dev/null +++ b/app/tests/macros/press-release/native_posix.keymap @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/macros/timing-override/events.patterns b/app/tests/macros/timing-override/events.patterns new file mode 100644 index 00000000000..0a5f25ca647 --- /dev/null +++ b/app/tests/macros/timing-override/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*behavior_queue_process_next/queue_process_next/p \ No newline at end of file diff --git a/app/tests/macros/timing-override/keycode_events.snapshot b/app/tests/macros/timing-override/keycode_events.snapshot new file mode 100644 index 00000000000..650d6747d4a --- /dev/null +++ b/app/tests/macros/timing-override/keycode_events.snapshot @@ -0,0 +1,18 @@ +queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 100ms +queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 50ms +queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 20ms +queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 50ms +queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +kp_pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 20ms +queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +kp_released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 50ms diff --git a/app/tests/macros/timing-override/native_posix.keymap b/app/tests/macros/timing-override/native_posix.keymap new file mode 100644 index 00000000000..343926a7ca7 --- /dev/null +++ b/app/tests/macros/timing-override/native_posix.keymap @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/macros/wait-macro-release/events.patterns b/app/tests/macros/wait-macro-release/events.patterns new file mode 100644 index 00000000000..02e0c505c12 --- /dev/null +++ b/app/tests/macros/wait-macro-release/events.patterns @@ -0,0 +1,3 @@ +s/.*hid_listener_keycode/kp/p +s/.*behavior_queue_process_next/queue_process_next/p +s/.*queue_macro/qm/p \ No newline at end of file diff --git a/app/tests/macros/wait-macro-release/keycode_events.snapshot b/app/tests/macros/wait-macro-release/keycode_events.snapshot new file mode 100644 index 00000000000..509a1c48503 --- /dev/null +++ b/app/tests/macros/wait-macro-release/keycode_events.snapshot @@ -0,0 +1,16 @@ +qm: Iterating macro bindings - starting: 0, count: 4 +queue_process_next: Invoking KEY_PRESS: 0x700e2 0x00 +kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 10ms +queue_process_next: Invoking KEY_PRESS: 0x7002b 0x00 +kp_pressed: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 40ms +queue_process_next: Invoking KEY_PRESS: 0x7002b 0x00 +kp_released: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 10ms +kp_pressed: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +qm: Iterating macro bindings - starting: 5, count: 2 +queue_process_next: Invoking KEY_PRESS: 0x700e2 0x00 +kp_released: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +queue_process_next: Processing next queued behavior in 0ms diff --git a/app/tests/macros/wait-macro-release/native_posix.keymap b/app/tests/macros/wait-macro-release/native_posix.keymap new file mode 100644 index 00000000000..6dabaeca1cf --- /dev/null +++ b/app/tests/macros/wait-macro-release/native_posix.keymap @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file From 34e1de23fbbfa8472a69d5d67b3bc79141132e50 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 16 Mar 2022 04:09:10 +0000 Subject: [PATCH 0295/1130] feat(docs): Document the macro behavior. --- docs/docs/behaviors/macros.md | 227 ++++++++++++++++++++++++++++++++++ docs/docs/intro.md | 2 +- docs/sidebars.js | 1 + 3 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 docs/docs/behaviors/macros.md diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md new file mode 100644 index 00000000000..abc6ef43a56 --- /dev/null +++ b/docs/docs/behaviors/macros.md @@ -0,0 +1,227 @@ +--- +title: Macro Behavior +sidebar_label: Macros +--- + +## Summary + +The macro behavior allows configuring a list of other behaviors to invoke +when the macro is pressed and/or released. + +## Macro Definition + +Each macro you want to use in your keymap gets defined first, then bound in your keymap. + +A macro definition looks like: + +``` +/ { + macros { + zed_em_kay: zed_em_kay { + label = "ZM_zed_em_kay"; + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings + = <¯o_press &kp LSHFT> + , <¯o_tap &kp Z &kp M &kp K> + , <¯o_release &kp LSHFT> + ; + }; + }; +}; +``` + +:::note +The text before the colon (`:`) in the declaration of the macro node is the "node label", and is the text +used to reference the macro in your keymap +::: + +The macro can then be bound in your keymap by referencing it by the label `&zed_em_kay`, e.g.: + +``` + raise_layer { + bindings = <&zed_em_kay>; + }; +``` + +### Bindings + +Like [hold-taps](/docs/behaviors/hold-tap), macros are created by composing other behaviors, and any of those behaviors can +be added to the `bindings` list, e.g.: + +``` +bindings + = <&to 1> + , <&bl BL_ON> + , <&kp Z &kp M &kp K &kp EXCLAMATION> + ; +``` + +## Macro Controls + +There are a set of special macro controls that can be included in the `bindings` list to modify the +way the macro is processed. + +### Binding Activation Mode + +Bindings in a macro are activated differently, depending on the current "activation mode" of the macro. + +Available modes: + +- Tap - The default mode; when in this mode, the macro will press, then release, each behavior in the `bindings` list. This mode is useful for + basic keycode output to hosts, i.e. when activating a `&kp` behavior. +- Press - In this mode, the macro will only trigger a press on each behavior in the `bindings` list. This is useful for holding down modifiers for some duration of a macro, e.g. `&kp LALT`. +- Release - In this mode, the macro will only trigger a release on each behavior in the `bindings` list. This is useful for releasing modifiers previously pressed earlier in the macro processing, e.g. `&kp LALT`. + +To modify the activation mode, macro controls can be added at any point in the `bindings` list. + +- `¯o_tap` +- `¯o_press` +- `¯o_release` + +A concrete example, used to hold a modifier, tap multiple keys, then release the modifier, would look like: + +``` +bindings + = <¯o_press &kp LSHFT> + , <¯o_tap &kp Z &kp M &kp K> + , <¯o_release &kp LSHFT> + ; +``` + +### Processing Continuation on Release + +The macro can be paused so that only part of the `bindings` list is processed when the macro is pressed, and the remainder is processed once +the macro itself is released. + +To pause the macro until release, use `¯o_pause_for_release`. For example, this macro will press a modifier and activate a layer when the macro is pressed. Once the macro is released, it will release the modifier and deactivate the layer by releasing the `&mo`: + +``` +bindings + = <¯o_press &mo 1 &kp LSHFT> + , <¯o_pause_for_release> + , <¯o_release &mo 1 &kp LSHFT> + ; +``` + +### Wait Time + +The wait time setting controls how long of a delay is introduced between behaviors in the `bindings` list. The initial wait time for a macro, 100ms by default, can +be set by assigning a value to the `wait-ms` property of the macro, e.g. `wait-ms = <20>;`. If you want to update the wait time at any +point in the macro bindings list, use `¯o_wait_time`, e.g. `¯o_wait_time 30`. A full example: + +``` +wait-ms = <10>; +bindings + = <&kp F &kp A &kp S &kp T> + , <¯o_wait_time 500> + , <&kp S &kp L &kp O &kp W> + ; +``` + +### Tap Time + +The tap time setting controls how long a tapped behavior is held in the `bindings` list. The initial tap time for a macro, 100ms by default, can +be set by assigning a value to the `tap-ms` property of the macro, e.g. `tap-ms = <20>;`. If you want to update the tap time at any +point in a macro bindings list, use `¯o_tap_time`, e.g. `¯o_tap_time 30`. A full example: + +``` +bindings + = <¯o_tap_time 10> + , <&kp S &kp H &kp O &kp R &kp T> + , <¯o_tap_time 500> + , <&kp L &kp O &kp N &kp G> + ; +``` + +## Common Patterns + +Below are some examples of how the macro behavior can be used for various useful functionality. + +### Layer Activation + More + +Macros make it easy to combine a [layer behavior](/docs/behaviors/layers), e.g. `&mo` with another behavior at the same time. +Common examples are enabling one or more modifiers when the layer is active, or changing the RBG underglow color. + +To achieve this, a combination of a 0ms wait time and splitting the press and release between a `¯o_pause_for_release` is used: + +#### Layer + Modifier + +``` +wait-ms = <0>; +bindings + = <¯o_press &mo 1 &kp LSHFT> + , <¯o_pause_for_release> + , <¯o_release &mo 1 &kp LSHFT>; +``` + +#### Layer + Underglow Color + +To trigger a different underglow when the macro is pressed, and when it is released, we use the macro "press" activation mode whenever triggering the `&rgb_ug` behavior: + +``` +wait-ms = <0>; +tap-ms = <0>; +bindings + = <¯o_press &mo 1> + , <¯o_tap &rgb_ug RGB_COLOR_HSB(128,100,100)> + , <¯o_pause_for_release> + , <¯o_release &mo 1> + , <¯o_tap &rgb_ug RGB_COLOR_HSB(300,100,50)>; +``` + +### Keycode Sequences + +The other common use case for macros is to sending sequences of keycodes to the connected host. Here, a wait and tap time of at least 30ms is recommended to +avoid having HID notifications grouped at the BLE protocol level and then processed out of order: + +``` +wait-ms = <40>; +tap-ms = <40>; +bindings + = <&kp Z &kp M &kp K> + , <&kp SPACE> + , <&kp R &kp O &kp C &kp K &kp S> + ; +``` + +### Unicode Sequences + +Many operating systems allow a special sequence to input unicode characters, e.g. [Windows alt codes](https://support.microsoft.com/en-us/office/insert-ascii-or-unicode-latin-based-symbols-and-characters-d13f58d3-7bcb-44a7-a4d5-972ee12e50e0). You can use macros to insert there automatically, e.g.: + +``` +wait-ms = <40>; +tap-ms = <40>; +bindings + = <¯o_press &kp LALT> + , <¯o_tap &kp N0 &kp N1 &kp N6 &kp N3> + , <¯o_release &kp LALT> + ; +``` + +## Convenience C Macro + +To avoid repetition or possible typos when declaring a macro, a convenience _C_ macro, named `ZMK_MACRO(name, props)` can be used to simplify things: + +``` + ZMK_MACRO(my_macro, + wait-ms = <30>; + tap-ms = <40>; + bindings = <&kp Z &kp M &kp K>; + ) +``` + +This can be used instead of a complete macro definition. During the firmware build process, the example above would produce the complete macro definition below: + +``` + my_macro: my_macro { + compatible = "zmk,behavior-macro"; + label = "ZM_my_macro"; + #binding-cells = <0>; + wait-ms = <30>; + tap-ms = <40>; + bindings = <&kp Z &kp M &kp K>; + }; +``` + +Using the C macro is entirely optional, and is provided only as a convenience. diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 39b5324545f..91b4e21bb15 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -32,7 +32,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | [Backlight](features/backlight.md) | ✅ | ✅ | ✅ | | One Shot Keys | ✅ | ✅ | ✅ | | [Combo Keys](features/combos.md) | ✅ | | ✅ | -| Macros | 🚧 | ✅ | ✅ | +| [Macros](behaviors/macros) | ✅ | ✅ | ✅ | | Mouse Keys | 🚧 | ✅ | ✅ | | Low Active Power Usage | ✅ | | | | Low Power Sleep States | ✅ | ✅ | | diff --git a/docs/sidebars.js b/docs/sidebars.js index 7db3e055b5f..cbeceef7d60 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -26,6 +26,7 @@ module.exports = { "behaviors/hold-tap", "behaviors/mod-tap", "behaviors/mod-morph", + "behaviors/macros", "behaviors/sticky-key", "behaviors/sticky-layer", "behaviors/tap-dance", From 35e73d40f5d4c0b43790886a9b190eee6e8f2443 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 24 Mar 2022 03:51:08 +0000 Subject: [PATCH 0296/1130] fix(boards): Enable direct polling for BDN9. * BDN9 Rev2 requires direct polling, interrupts don't work as expected. --- app/boards/arm/bdn9/bdn9_rev2_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/boards/arm/bdn9/bdn9_rev2_defconfig b/app/boards/arm/bdn9/bdn9_rev2_defconfig index 91f54eb4064..31395716a77 100644 --- a/app/boards/arm/bdn9/bdn9_rev2_defconfig +++ b/app/boards/arm/bdn9/bdn9_rev2_defconfig @@ -11,6 +11,9 @@ CONFIG_FPU=y # enable GPIO CONFIG_GPIO=y +# Needed for matrix to properly work +CONFIG_ZMK_KSCAN_DIRECT_POLLING=y + # Enable pinmux CONFIG_PINMUX=y From ab5517b85867de908eb79ab1caefd76174ce959f Mon Sep 17 00:00:00 2001 From: ClicketySplit Date: Tue, 8 Mar 2022 22:30:30 -0700 Subject: [PATCH 0297/1130] The inaugural commit for Leeloo's firmware. --- app/boards/shields/leeloo/Kconfig.defconfig | 55 ++++++++++++ app/boards/shields/leeloo/Kconfig.shield | 8 ++ app/boards/shields/leeloo/README.md | 42 +++++++++ .../shields/leeloo/boards/nice_nano.overlay | 29 +++++++ app/boards/shields/leeloo/leeloo.conf | 9 ++ app/boards/shields/leeloo/leeloo.dtsi | 86 +++++++++++++++++++ app/boards/shields/leeloo/leeloo.keymap | 58 +++++++++++++ app/boards/shields/leeloo/leeloo.zmk.yml | 14 +++ app/boards/shields/leeloo/leeloo_left.conf | 9 ++ app/boards/shields/leeloo/leeloo_left.overlay | 21 +++++ app/boards/shields/leeloo/leeloo_right.conf | 9 ++ .../shields/leeloo/leeloo_right.overlay | 25 ++++++ 12 files changed, 365 insertions(+) create mode 100644 app/boards/shields/leeloo/Kconfig.defconfig create mode 100644 app/boards/shields/leeloo/Kconfig.shield create mode 100644 app/boards/shields/leeloo/README.md create mode 100644 app/boards/shields/leeloo/boards/nice_nano.overlay create mode 100644 app/boards/shields/leeloo/leeloo.conf create mode 100644 app/boards/shields/leeloo/leeloo.dtsi create mode 100644 app/boards/shields/leeloo/leeloo.keymap create mode 100644 app/boards/shields/leeloo/leeloo.zmk.yml create mode 100644 app/boards/shields/leeloo/leeloo_left.conf create mode 100644 app/boards/shields/leeloo/leeloo_left.overlay create mode 100644 app/boards/shields/leeloo/leeloo_right.conf create mode 100644 app/boards/shields/leeloo/leeloo_right.overlay diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig new file mode 100644 index 00000000000..6068dcfc842 --- /dev/null +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_LEELOO_LEFT + +config ZMK_KEYBOARD_NAME + default "Leeloo" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif + +if SHIELD_LEELOO_LEFT || SHIELD_LEELOO_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES_MAX + default 128 + +config LVGL_VER_RES_MAX + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/leeloo/Kconfig.shield b/app/boards/shields/leeloo/Kconfig.shield new file mode 100644 index 00000000000..48cf3cf50cd --- /dev/null +++ b/app/boards/shields/leeloo/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_LEELOO_LEFT + def_bool $(shields_list_contains,leeloo_left) + +config SHIELD_LEELOO_RIGHT + def_bool $(shields_list_contains,leeloo_right) diff --git a/app/boards/shields/leeloo/README.md b/app/boards/shields/leeloo/README.md new file mode 100644 index 00000000000..db7056560d0 --- /dev/null +++ b/app/boards/shields/leeloo/README.md @@ -0,0 +1,42 @@ +# Clickety Split | Leeloo + +![Leeloo](https://cdn.shopify.com/s/files/1/0599/3460/5491/files/Leeloo-rev1.0-w.jpg?v=1646798726) + +Keyboard Designer: [clicketysplit.ca](https://clicketysplit.ca) +GitHub: [ClicketySplit](https://github.com/ClicketySplit) +Hardware Supported: Pro Micro, Elite-C, nice!nano v2 + +Albeit, there is no doubt where Leeloo's heritage is derived from—Lily58, and Corne. It is not a copy-paste-modify implementation. + +Leeloo has been designed from scratch; everything from the schematic to its PCB footprints, and column stagger. There are some subtle differences that may not be apparent; however, its subtle changes enable an interesting future. + +Features: +* 4x6x5m Split Keyboard +* Support for MX/Box or Low Profile Choc switches. +* 90% of the switches are socketed; with the exception to the rotary encoder positions—6 positions require soldering. +* Support for 128x32 OLED Displays. +* The option to select one of three positions for an EC11 rotary encoder on each half. +* Support for Alps Alpine Micro Switch +* Support for 3.7v 301230 LiPo Battery + +# Building Your Firmware +ZMK Firmware: [Introduction to ZMK](https://zmk.dev/docs/) +Installation: [Installing ZMK](https://zmk.dev/docs/user-setup) +Customization: [Customizing ZMK](https://zmk.dev/docs/customization) +Development Environment: [Basic Setup](https://zmk.dev/docs/development/setup) + +Build command for the default keymap of Leeloo: + + west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left + west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_right + +Build command for your custom keymap of Leeloo: + + west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_right -DZMK_CONFIG="C:\dev\zmk\[yourNmae]\leeloo\config" + west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left -DZMK_CONFIG="C:\dev\zmk\[yourName]\leeloo\config" + +# Support +If you have any questions with regards to Leeloo, please [Contact Us](https://clicketysplit.ca/pages/contact-us). + +Clickety Split +For the love of split keyboards. diff --git a/app/boards/shields/leeloo/boards/nice_nano.overlay b/app/boards/shields/leeloo/boards/nice_nano.overlay new file mode 100644 index 00000000000..83ebae04015 --- /dev/null +++ b/app/boards/shields/leeloo/boards/nice_nano.overlay @@ -0,0 +1,29 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + /* Cannot be used together with i2c0. */ + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "SK6812mini"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/leeloo/leeloo.conf b/app/boards/shields/leeloo/leeloo.conf new file mode 100644 index 00000000000..cd89c2b43f5 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/leeloo/leeloo.dtsi b/app/boards/shields/leeloo/leeloo.dtsi new file mode 100644 index 00000000000..4c0f2b315f9 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo.dtsi @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | SW29 | | SW29 | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | +// | SW25 | SW26 | SW27 | SW28 | | SW28 | SW27 | SW26 | SW25 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo.keymap b/app/boards/shields/leeloo/leeloo.keymap new file mode 100644 index 00000000000..c0964f69bc8 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo.keymap @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include + +// Layers +#define DEFAULT 0 // default_layer +#define LOWER 1 // lower_layer +#define RAISE 2 // raise_layer + +/ { + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSLH +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp GRAV +&kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LALT &kp LCTRL < 1 RET < 2 MINUS &kp LGUI &kp LGUI < 2 EQUAL < 1 SPACE &kp BSPC &kp DEL + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + lower_layer { + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + raise_layer { + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + }; +}; diff --git a/app/boards/shields/leeloo/leeloo.zmk.yml b/app/boards/shields/leeloo/leeloo.zmk.yml new file mode 100644 index 00000000000..c7e0e6e85b5 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: leeloo +name: Leeloo +type: shield +url: https://clicketysplit.ca/pages/leeloo +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder +siblings: + - leeloo_left + - leeloo_right diff --git a/app/boards/shields/leeloo/leeloo_left.conf b/app/boards/shields/leeloo/leeloo_left.conf new file mode 100644 index 00000000000..cd89c2b43f5 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_left.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/leeloo/leeloo_left.overlay b/app/boards/shields/leeloo/leeloo_left.overlay new file mode 100644 index 00000000000..70ea656073f --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_left.overlay @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#include "leeloo.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/leeloo/leeloo_right.conf b/app/boards/shields/leeloo/leeloo_right.conf new file mode 100644 index 00000000000..cd89c2b43f5 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_right.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/leeloo/leeloo_right.overlay b/app/boards/shields/leeloo/leeloo_right.overlay new file mode 100644 index 00000000000..5729656de20 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_right.overlay @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#include "leeloo.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; From c97f7a1044a4837c8ae188768e4b1bd62994a14d Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:41:38 -0600 Subject: [PATCH 0298/1130] Update app/boards/shields/leeloo/Kconfig.defconfig Co-authored-by: Nick Winans --- app/boards/shields/leeloo/Kconfig.defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig index 6068dcfc842..615f890b8e9 100644 --- a/app/boards/shields/leeloo/Kconfig.defconfig +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -1,4 +1,4 @@ -# Copyright (c) 2020 The ZMK Contributors +# Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT if SHIELD_LEELOO_LEFT From bc0c49b087ef667681f91d3d79ac83897b6a2614 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:42:36 -0600 Subject: [PATCH 0299/1130] Deleted as recommended. --- .../shields/leeloo/boards/nice_nano.overlay | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 app/boards/shields/leeloo/boards/nice_nano.overlay diff --git a/app/boards/shields/leeloo/boards/nice_nano.overlay b/app/boards/shields/leeloo/boards/nice_nano.overlay deleted file mode 100644 index 83ebae04015..00000000000 --- a/app/boards/shields/leeloo/boards/nice_nano.overlay +++ /dev/null @@ -1,29 +0,0 @@ -&spi1 { - compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ - status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "SK6812mini"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - }; -}; - -/ { - chosen { - zmk,underglow = &led_strip; - }; -}; From 4e4ed73e17642996a8ff107ab866fcef346d20db Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:44:01 -0600 Subject: [PATCH 0300/1130] Deleted as recommended. --- app/boards/shields/leeloo/leeloo_left.conf | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 app/boards/shields/leeloo/leeloo_left.conf diff --git a/app/boards/shields/leeloo/leeloo_left.conf b/app/boards/shields/leeloo/leeloo_left.conf deleted file mode 100644 index cd89c2b43f5..00000000000 --- a/app/boards/shields/leeloo/leeloo_left.conf +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -# Uncomment the following line to enable the OLED Display -# CONFIG_ZMK_DISPLAY=y - -# Uncomment these two lines to add support for encoders -# CONFIG_EC11=y -# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y From 89d5c496cb743df7c4a685036ff68d095beb059d Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:44:23 -0600 Subject: [PATCH 0301/1130] Deleted as recommended. --- app/boards/shields/leeloo/leeloo_right.conf | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 app/boards/shields/leeloo/leeloo_right.conf diff --git a/app/boards/shields/leeloo/leeloo_right.conf b/app/boards/shields/leeloo/leeloo_right.conf deleted file mode 100644 index cd89c2b43f5..00000000000 --- a/app/boards/shields/leeloo/leeloo_right.conf +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -# Uncomment the following line to enable the OLED Display -# CONFIG_ZMK_DISPLAY=y - -# Uncomment these two lines to add support for encoders -# CONFIG_EC11=y -# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y From 53ac073737674bc5bd6213ba926738fabd5dcd42 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:45:23 -0600 Subject: [PATCH 0302/1130] Updated copyright year. --- app/boards/shields/leeloo/Kconfig.shield | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/Kconfig.shield b/app/boards/shields/leeloo/Kconfig.shield index 48cf3cf50cd..1736c6eb525 100644 --- a/app/boards/shields/leeloo/Kconfig.shield +++ b/app/boards/shields/leeloo/Kconfig.shield @@ -1,4 +1,4 @@ -# Copyright (c) 2020 The ZMK Contributors +# Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT config SHIELD_LEELOO_LEFT From fddea99cf49c9051d8ae99e4bcb8e3fb629e5170 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:46:22 -0600 Subject: [PATCH 0303/1130] Updated copyright year. --- app/boards/shields/leeloo/leeloo_right.overlay | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/leeloo_right.overlay b/app/boards/shields/leeloo/leeloo_right.overlay index 5729656de20..2f3fbf5c01e 100644 --- a/app/boards/shields/leeloo/leeloo_right.overlay +++ b/app/boards/shields/leeloo/leeloo_right.overlay @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 The ZMK Contributors + * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ From 7385ef57bbed51eb8093aa34d4c9bb68a30386a8 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:46:36 -0600 Subject: [PATCH 0304/1130] Updated copyright year. --- app/boards/shields/leeloo/leeloo_left.overlay | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/leeloo_left.overlay b/app/boards/shields/leeloo/leeloo_left.overlay index 70ea656073f..1d6424fd675 100644 --- a/app/boards/shields/leeloo/leeloo_left.overlay +++ b/app/boards/shields/leeloo/leeloo_left.overlay @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 The ZMK Contributors + * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ From e6a19ab7bc551672fc6d6728710f4d81c81f66e3 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:46:58 -0600 Subject: [PATCH 0305/1130] Updated copyright year. --- app/boards/shields/leeloo/leeloo.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/leeloo.keymap b/app/boards/shields/leeloo/leeloo.keymap index c0964f69bc8..77ee37d172f 100644 --- a/app/boards/shields/leeloo/leeloo.keymap +++ b/app/boards/shields/leeloo/leeloo.keymap @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 The ZMK Contributors + * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ From 8c66072f9395b484602e3c35a688b742761f6480 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:47:15 -0600 Subject: [PATCH 0306/1130] Updated copyright year. --- app/boards/shields/leeloo/leeloo.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/leeloo/leeloo.dtsi b/app/boards/shields/leeloo/leeloo.dtsi index 4c0f2b315f9..83e7651da0b 100644 --- a/app/boards/shields/leeloo/leeloo.dtsi +++ b/app/boards/shields/leeloo/leeloo.dtsi @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 The ZMK Contributors + * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ @@ -83,4 +83,4 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) com-sequential; prechargep = <0x22>; }; -}; \ No newline at end of file +}; From bbfe4b98dc8bc8d7c3b3fe03800318123a0b5cb2 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:47:28 -0600 Subject: [PATCH 0307/1130] Updated copyright year. --- app/boards/shields/leeloo/leeloo.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/leeloo.conf b/app/boards/shields/leeloo/leeloo.conf index cd89c2b43f5..a652bb65144 100644 --- a/app/boards/shields/leeloo/leeloo.conf +++ b/app/boards/shields/leeloo/leeloo.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2020 The ZMK Contributors +# Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT # Uncomment the following line to enable the OLED Display From 97e50c39d5380d5cef5f56e2d89b580c3f067583 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:57:09 -0600 Subject: [PATCH 0308/1130] Added BT Configuration Management to Raise Layer Added Function Keys, and some Navigation Keys to Lower Layer. --- app/boards/shields/leeloo/leeloo.keymap | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/boards/shields/leeloo/leeloo.keymap b/app/boards/shields/leeloo/leeloo.keymap index 77ee37d172f..4104cc3a865 100644 --- a/app/boards/shields/leeloo/leeloo.keymap +++ b/app/boards/shields/leeloo/leeloo.keymap @@ -32,9 +32,9 @@ lower_layer { bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&trans &trans &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &trans &kp F12 +&trans &trans &trans &trans &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; @@ -44,11 +44,11 @@ raise_layer { bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &reset &bootloader +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; From 5f35a0bf58d1d2d34081ff39c7465eb61ad4fc34 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Mon, 28 Mar 2022 15:44:34 +0800 Subject: [PATCH 0309/1130] feat(docs): Add note on locating tmp file in GH actions (#1177) Co-authored-by: Dom H --- docs/docs/troubleshooting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index bfeaf0ee0f7..0d27655360a 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -37,6 +37,10 @@ This can be verified by checking the file in question, found in `mkdir/app/build After opening the `.dts.pre.tmp:` and scrolling down to the referenced line, one can locate errors within their shield's keymap by checking if the referenced keycodes were properly converted into the correct [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12). +:::note +If you are reviewing these errors in the GitHub Actions tab, the contents of `.dts.pre.tmp` is output (with line numbers) in the next step of the build process. +::: + | ![Unhealthy Keymap Temp](../docs/assets/troubleshooting/keymaps/unhealthyEDIT.png) | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | An incorrectly defined keymap unable to compile. As shown in red, `&kp SPAC` is not a valid reference to the [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12) used for "Keyboard Spacebar" | From 92e761834666557132c1c70926d807c5d102d82e Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 28 Mar 2022 17:06:13 -0700 Subject: [PATCH 0310/1130] fix(docs): Fix Windows unicode macro example --- docs/docs/behaviors/macros.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index abc6ef43a56..aca9eb7a651 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -187,14 +187,14 @@ bindings ### Unicode Sequences -Many operating systems allow a special sequence to input unicode characters, e.g. [Windows alt codes](https://support.microsoft.com/en-us/office/insert-ascii-or-unicode-latin-based-symbols-and-characters-d13f58d3-7bcb-44a7-a4d5-972ee12e50e0). You can use macros to insert there automatically, e.g.: +Many operating systems allow a special sequence to input unicode characters, e.g. [Windows alt codes](https://support.microsoft.com/en-us/office/insert-ascii-or-unicode-latin-based-symbols-and-characters-d13f58d3-7bcb-44a7-a4d5-972ee12e50e0). You can use macros to automate inputting the sequences, e.g. below macro inserts `£` on Windows: ``` wait-ms = <40>; tap-ms = <40>; bindings = <¯o_press &kp LALT> - , <¯o_tap &kp N0 &kp N1 &kp N6 &kp N3> + , <¯o_tap &kp KP_N0 &kp KP_N1 &kp KP_N6 &kp KP_N3> , <¯o_release &kp LALT> ; ``` From b6238fa464265a5d06294ce6bfd8c5ae1cbea743 Mon Sep 17 00:00:00 2001 From: rhhub <7444613+rhhub@users.noreply.github.com> Date: Tue, 29 Mar 2022 18:45:21 -0700 Subject: [PATCH 0311/1130] fix(docs): Emphasize AMR processor incompatibility with ZMK --- app/boards/interconnects/pro_micro/pro_micro.zmk.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml index 6992593c85b..e2507852015 100644 --- a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml +++ b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml @@ -8,3 +8,7 @@ description: | The SparkFun Pro Micro grew popular as a low cost ATmega32U4 board with sufficient GPIO and peripherals to work for many keyboard needs. Since the original Pro Micro, many pin compatible boards have appeared, with various changes or improvements, such as the Elite-C w/ USB-C, nice!nano with nRF52840 wireless. + + Note: ZMK doesn't support boards with AMR 8-bit processors, such as the ATmega32U4, because Zephyr™ only + supports 32-bit and 64-bit platforms. As a result, controllers like the SparkFun Pro Micro and the Elite-C + are *not* supported by ZMK. From 7453ce20a87b2c57d88f287b46f231913bad719b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 29 Mar 2022 21:46:23 -0400 Subject: [PATCH 0312/1130] fix(docs): Whitespace clean-up. --- app/boards/interconnects/pro_micro/pro_micro.zmk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml index e2507852015..33cbf913178 100644 --- a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml +++ b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml @@ -9,6 +9,6 @@ description: | to work for many keyboard needs. Since the original Pro Micro, many pin compatible boards have appeared, with various changes or improvements, such as the Elite-C w/ USB-C, nice!nano with nRF52840 wireless. - Note: ZMK doesn't support boards with AMR 8-bit processors, such as the ATmega32U4, because Zephyr™ only + Note: ZMK doesn't support boards with AMR 8-bit processors, such as the ATmega32U4, because Zephyr™ only supports 32-bit and 64-bit platforms. As a result, controllers like the SparkFun Pro Micro and the Elite-C are *not* supported by ZMK. From 20fcd35026df2ca2d880eb0399c0a2738dba99e6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 29 Mar 2022 22:01:15 -0400 Subject: [PATCH 0313/1130] fix(docs): AVR, not AMR. --- app/boards/interconnects/pro_micro/pro_micro.zmk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml index 33cbf913178..78aa14a10bf 100644 --- a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml +++ b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml @@ -9,6 +9,6 @@ description: | to work for many keyboard needs. Since the original Pro Micro, many pin compatible boards have appeared, with various changes or improvements, such as the Elite-C w/ USB-C, nice!nano with nRF52840 wireless. - Note: ZMK doesn't support boards with AMR 8-bit processors, such as the ATmega32U4, because Zephyr™ only + Note: ZMK doesn't support boards with AVR 8-bit processors, such as the ATmega32U4, because Zephyr™ only supports 32-bit and 64-bit platforms. As a result, controllers like the SparkFun Pro Micro and the Elite-C are *not* supported by ZMK. From ed41d42874073509316eb075358111259690b831 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Tue, 29 Mar 2022 01:03:20 -0500 Subject: [PATCH 0314/1130] feat(docs): Add aggregated metadata to website Added /hardware-metadata.json to the ZMK website. This gives external tools a way to grab all hardware metadata at once. --- docs/docusaurus.config.js | 1 + docs/package-lock.json | 249 ++++++++++++++---- docs/package.json | 2 + .../hardware-metadata-static-plugin/index.js | 68 +++++ 4 files changed, 262 insertions(+), 58 deletions(-) create mode 100644 docs/src/hardware-metadata-static-plugin/index.js diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ed018f304e1..b1c1b5c0102 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -11,6 +11,7 @@ module.exports = { plugins: [ path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin"), path.resolve(__dirname, "src/hardware-metadata-collection-plugin"), + path.resolve(__dirname, "src/hardware-metadata-static-plugin"), path.resolve(__dirname, "src/hardware-schema-typescript-plugin"), path.resolve(__dirname, "src/setup-script-generation-plugin"), ], diff --git a/docs/package-lock.json b/docs/package-lock.json index 166a8d72d10..d8d3cf9bcdc 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -25,7 +25,9 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "^2.0.0-beta.3", + "@docusaurus/types": "^2.0.0-beta.3", "@tsconfig/docusaurus": "^1.0.2", + "@types/js-yaml": "^4.0.5", "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.0", "@types/react-router-dom": "^5.1.7", @@ -6303,14 +6305,6 @@ "node": ">=12" } }, - "node_modules/@docusaurus/theme-classic/node_modules/prism-react-renderer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", - "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, "node_modules/@docusaurus/theme-common": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", @@ -6368,6 +6362,76 @@ "webpack-merge": "^5.8.0" } }, + "node_modules/@docusaurus/types/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/@docusaurus/types/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@docusaurus/types/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/@docusaurus/types/node_modules/webpack": { + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/@docusaurus/utils": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", @@ -6982,9 +7046,9 @@ "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" }, "node_modules/@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -7506,9 +7570,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -7552,6 +7616,12 @@ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -10464,9 +10534,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -12249,9 +12319,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/gray-matter": { "version": "4.0.3", @@ -13830,13 +13900,13 @@ } }, "node_modules/joi": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.1.tgz", - "integrity": "sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", + "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", + "@sideway/address": "^4.1.3", "@sideway/formula": "^3.0.0", "@sideway/pinpoint": "^2.0.0" } @@ -16359,6 +16429,14 @@ "node": ">=4" } }, + "node_modules/prism-react-renderer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", + "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, "node_modules/prismjs": { "version": "1.24.1", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", @@ -20034,9 +20112,9 @@ } }, "node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -20751,9 +20829,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", - "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "engines": { "node": ">=10.13.0" } @@ -25780,12 +25858,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "prism-react-renderer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz", - "integrity": "sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==", - "requires": {} } } }, @@ -25829,6 +25901,55 @@ "querystring": "0.2.0", "webpack": "^5.40.0", "webpack-merge": "^5.8.0" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} + }, + "webpack": { + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + } } }, "@docusaurus/utils": { @@ -26315,9 +26436,9 @@ "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" }, "@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "requires": { "@hapi/hoek": "^9.0.0" } @@ -26690,9 +26811,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -26736,6 +26857,12 @@ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, + "@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -29017,9 +29144,9 @@ } }, "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -30405,9 +30532,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "gray-matter": { "version": "4.0.3", @@ -31589,13 +31716,13 @@ } }, "joi": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.1.tgz", - "integrity": "sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", + "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", + "@sideway/address": "^4.1.3", "@sideway/formula": "^3.0.0", "@sideway/pinpoint": "^2.0.0" } @@ -33457,6 +33584,12 @@ "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" }, + "prism-react-renderer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", + "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", + "requires": {} + }, "prismjs": { "version": "1.24.1", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", @@ -36265,9 +36398,9 @@ } }, "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -36834,9 +36967,9 @@ } }, "webpack-sources": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", - "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "websocket-driver": { "version": "0.7.4", diff --git a/docs/package.json b/docs/package.json index 6a5b9f2f67d..8941645e669 100644 --- a/docs/package.json +++ b/docs/package.json @@ -44,7 +44,9 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "^2.0.0-beta.3", + "@docusaurus/types": "^2.0.0-beta.3", "@tsconfig/docusaurus": "^1.0.2", + "@types/js-yaml": "^4.0.5", "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.0", "@types/react-router-dom": "^5.1.7", diff --git a/docs/src/hardware-metadata-static-plugin/index.js b/docs/src/hardware-metadata-static-plugin/index.js new file mode 100644 index 00000000000..7fb6ad83ffd --- /dev/null +++ b/docs/src/hardware-metadata-static-plugin/index.js @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +//@ts-check +"use strict"; + +/** @typedef {import('../hardware-metadata').HardwareMetadata} HardwareMetadata */ +/** @typedef {HardwareMetadata & { directory: string}} LocatedHardwareMetadata */ + +const fs = require("fs").promises; +const glob = require("util").promisify(require("glob")); +const path = require("path"); +const yaml = require("js-yaml"); + +const BASE_DIR = ".."; +const METADATA_GLOB = path.posix.join(BASE_DIR, "app/boards/**/*.zmk.yml"); + +/** + * @param {string} file + */ +async function readMetadata(file) { + /** @type HardwareMetadata[] */ + // @ts-ignore + const documents = yaml.loadAll(await fs.readFile(file, "utf-8")); + + return documents.map( + (metadata) => + /** @type LocatedHardwareMetadata */ + ({ + ...metadata, + // External tools need a way to locate this hardware within the repo. + // Append each item's relative path. + directory: path.posix.dirname(path.posix.relative(BASE_DIR, file)), + }) + ); +} + +async function aggregateMetadata() { + const files = await glob(METADATA_GLOB); + const data = await Promise.all(files.map(readMetadata)); + + return data.flat(); +} + +/** + * Aggregates .zmk.yml files and writes hardware-metadata.json to the site's + * static files post-build. + * + * This is very similar to hardware-metadata-collection-plugin but adjusts the + * output for consumption by external tools rather than the website build system. + * + * @type {import('@docusaurus/types').PluginModule} + */ +module.exports = function () { + return { + name: "hardware-metadata-static-plugin", + + async postBuild({ outDir }) { + const hardware = await aggregateMetadata(); + + const hardwarePath = path.join(outDir, "hardware-metadata.json"); + await fs.writeFile(hardwarePath, JSON.stringify(hardware)); + }, + }; +}; From b79b6363a780166dc7fc5f618f8760317cf5fc55 Mon Sep 17 00:00:00 2001 From: rhhub <7444613+rhhub@users.noreply.github.com> Date: Wed, 30 Mar 2022 00:51:12 -0700 Subject: [PATCH 0315/1130] fix(docs): Clear up ambiguity on supported hardware page (#1200) --- docs/src/components/hardware-list.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/src/components/hardware-list.tsx b/docs/src/components/hardware-list.tsx index ec7e8a108f9..e611f5cfb50 100644 --- a/docs/src/components/hardware-list.tsx +++ b/docs/src/components/hardware-list.tsx @@ -70,7 +70,7 @@ function mapInterconnect({ return (
    -

    {interconnect.name} Keyboards

    +

    {interconnect.name} Interconnect

    {interconnect.description &&

    {interconnect.description}

    }
    Boards
      @@ -148,7 +148,7 @@ function HardwareList({ items }: HardwareListProps) { return ( <>

      Keyboards

      -

      Onboard Controller Boards

      +

      Onboard Controller Keyboards

      Keyboards with onboard controllers are single PCBs that contain all the components of a keyboard, including the controller chip, switch @@ -161,12 +161,13 @@ function HardwareList({ items }: HardwareListProps) { ))}

    -

    Composite Boards

    +

    Composite Keyboards

    Composite keyboards are composed of two main PCBs: a small controller board with exposed pads, and a larger keyboard PCB (a shield, in ZMK - lingo) with switch footprints and location a where the controller is - added. + lingo) with switch footprints and a location where the controller is + added. This location is called an interconnect. Multiple interconnects + can be found below.

    {Object.values(grouped.interconnects).map(mapInterconnect)} From 59d2744a4f1b3d45912b2116279a9c27792afb10 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Wed, 30 Mar 2022 16:56:47 +0800 Subject: [PATCH 0316/1130] feat(docs): Add settings_reset build instructions (#1197) Co-authored-by: Cem Aksoylar --- docs/docs/troubleshooting.md | 43 +++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 0d27655360a..0f2ea4c9818 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -51,27 +51,44 @@ If you are reviewing these errors in the GitHub Actions tab, the contents of `-settings_reset-zmk` zip file for the UF2 image. | ![Successful core-coverage Job](../docs/assets/troubleshooting/splitpairing/corecoverage.png) | | :-------------------------------------------------------------------------------------------: | | An example of a successful core-coverage job which will produce a settings_reset firmware. | -After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins -for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. +#### Reset Split Keyboard Procedure + +Perform the following steps to reset both halves of your split keyboard: + +1. Put each half of the split keyboard into bootloader mode. +1. Flash one of the halves of the split with the downloaded settings reset UF2 image. Immediately after flashing the chosen half, put it into bootloader mode to avoid accidental bonding between the halves. +1. Repeat step 2 with the other half of the split keyboard. +1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half). + +After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. ### Connectivity Issues From 12931757441b931fba2020158c203e347fd3dc1a Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Wed, 30 Mar 2022 00:47:27 -0500 Subject: [PATCH 0317/1130] fix(docs): Allow CORS for hardware-metadata.json Enabled CORS so external tools can fetch the metadata file. --- docs/netlify.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/netlify.toml b/docs/netlify.toml index 9b0fd7270aa..874620061e5 100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@ -14,4 +14,9 @@ [[redirects]] from = "https://www.zmkfirmware.dev/*" to = "https://www.zmk.dev/:splat" - force = true \ No newline at end of file + force = true + +[[headers]] + for = "/hardware-metadata.json" + [headers.values] + Access-Control-Allow-Origin = "*" \ No newline at end of file From 28ef19488d3943fbf404189cee3ecfec9baa70da Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Tue, 29 Mar 2022 02:01:49 +0000 Subject: [PATCH 0318/1130] fix(docs): Fix Number of Profiles note in Bluetooth docs Remove hard line wrapping --- docs/docs/behaviors/bluetooth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index df264cee0c4..d21f38325c5 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -82,7 +82,7 @@ ZMK support bluetooth “profiles” which allows connection to multiple devices The bluetooth MAC address and negotiated keys during pairing are stored in the permanent storage on your chip and can be reused even after reflashing the firmware. If for some reason you want to delete the stored information, you can bind the `BT_CLR` behavior described above to a key and use it to clear the _current_ profile. :::note Number of Profiles -Please note there are only five available Bluetooth profiles by default. If you need to increase the number of available profiles you can set `CONFIG_BT_MAX_CONN` in your `zmk-config` `.conf` file. +Please note there are five available Bluetooth profiles by default. If you need to adjust the number of available profiles, set `CONFIG_BT_MAX_CONN` _and_ `CONFIG_BT_MAX_PAIRED` to the desired number of profiles, `n`, or `n+1` for split keyboards, in your `zmk-config` `.conf` file. ::: :::note From 53dae357106e0713e8ca1aa93c78a08117375733 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:13:38 +0000 Subject: [PATCH 0319/1130] refactor: Move to `k_work_delayable` API. * Move to new `k_work_delayable` APIs introduced in Zephyr 2.6. See: https://docs.zephyrproject.org/latest/releases/release-notes-2.6.html#api-changes --- app/drivers/kscan/kscan_gpio_demux.c | 12 +++++------- app/drivers/kscan/kscan_gpio_direct.c | 7 +++---- app/drivers/kscan/kscan_gpio_matrix.c | 20 +++++++------------- app/drivers/kscan/kscan_mock.c | 10 +++++----- app/src/behavior_queue.c | 6 +++--- app/src/behaviors/behavior_tap_dance.c | 18 +++++++++--------- app/src/ble.c | 16 +++++----------- app/src/combo.c | 10 +++++----- app/src/endpoints.c | 7 +++---- app/src/ext_power_generic.c | 9 ++++----- app/src/rgb_underglow.c | 7 +++---- 11 files changed, 52 insertions(+), 70 deletions(-) diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 3f22797ec33..0cfd38347ed 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -47,7 +47,7 @@ struct kscan_gpio_item_config { #define GPIO_INST_INIT(n) \ struct kscan_gpio_irq_callback_##n { \ - struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_delayed_work)) * work; \ + struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_work_delayable)) * work; \ struct gpio_callback callback; \ const struct device *dev; \ }; \ @@ -60,7 +60,7 @@ struct kscan_gpio_item_config { struct kscan_gpio_data_##n { \ kscan_callback_t callback; \ struct k_timer poll_timer; \ - struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_delayed_work)) work; \ + struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_work_delayable)) work; \ bool matrix_state[INST_MATRIX_INPUTS(n)][INST_MATRIX_OUTPUTS(n)]; \ const struct device *rows[INST_MATRIX_INPUTS(n)]; \ const struct device *cols[INST_MATRIX_OUTPUTS(n)]; \ @@ -137,10 +137,8 @@ struct kscan_gpio_item_config { } \ } \ if (submit_follow_up_read) { \ - CHECK_DEBOUNCE_CFG(n, ({ k_work_submit(&data->work); }), ({ \ - k_delayed_work_cancel(&data->work); \ - k_delayed_work_submit(&data->work, K_MSEC(5)); \ - })) \ + CHECK_DEBOUNCE_CFG(n, ({ k_work_submit(&data->work); }), \ + ({ k_work_reschedule(&data->work, K_MSEC(5)); })) \ } \ return 0; \ } \ @@ -232,7 +230,7 @@ struct kscan_gpio_item_config { \ k_timer_init(&data->poll_timer, kscan_gpio_timer_handler, NULL); \ \ - (CHECK_DEBOUNCE_CFG(n, (k_work_init), (k_delayed_work_init)))( \ + (CHECK_DEBOUNCE_CFG(n, (k_work_init), (k_work_init_delayable)))( \ &data->work, kscan_gpio_work_handler_##n); \ return 0; \ } \ diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index d810881b73e..c7be4e1f89e 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -22,7 +22,7 @@ struct kscan_gpio_item_config { }; union work_reference { - struct k_delayed_work delayed; + struct k_work_delayable delayed; struct k_work direct; }; @@ -55,8 +55,7 @@ static const struct kscan_gpio_item_config *kscan_gpio_input_configs(const struc static void kscan_gpio_direct_queue_read(union work_reference *work, uint8_t debounce_period) { if (debounce_period > 0) { - k_delayed_work_cancel(&work->delayed); - k_delayed_work_submit(&work->delayed, K_MSEC(debounce_period)); + k_work_reschedule(&work->delayed, K_MSEC(debounce_period)); } else { k_work_submit(&work->direct); } @@ -228,7 +227,7 @@ static const struct kscan_driver_api gpio_driver_api = { COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KSCAN_DIRECT_POLLING), \ (k_timer_init(&data->poll_timer, kscan_gpio_timer_handler, NULL);), ()) \ if (cfg->debounce_period > 0) { \ - k_delayed_work_init(&data->work.delayed, kscan_gpio_work_handler); \ + k_work_init_delayable(&data->work.delayed, kscan_gpio_work_handler); \ } else { \ k_work_init(&data->work.direct, kscan_gpio_work_handler); \ } \ diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index e5a7e56233b..1e841239044 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -88,7 +88,7 @@ struct kscan_matrix_irq_callback { struct kscan_matrix_data { const struct device *dev; kscan_callback_t callback; - struct k_delayed_work work; + struct k_work_delayable work; #if USE_INTERRUPTS /** Array of length config->inputs.len */ struct kscan_matrix_irq_callback *irqs; @@ -214,9 +214,7 @@ static void kscan_matrix_irq_callback_handler(const struct device *port, struct data->scan_time = k_uptime_get(); - // TODO (Zephyr 2.6): use k_work_reschedule() - k_delayed_work_cancel(&data->work); - k_delayed_work_submit(&data->work, K_NO_WAIT); + k_work_reschedule(&data->work, K_NO_WAIT); } #endif @@ -226,9 +224,7 @@ static void kscan_matrix_read_continue(const struct device *dev) { data->scan_time += config->debounce_scan_period_ms; - // TODO (Zephyr 2.6): use k_work_reschedule() - k_delayed_work_cancel(&data->work); - k_delayed_work_submit(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); + k_work_reschedule(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); } static void kscan_matrix_read_end(const struct device *dev) { @@ -242,9 +238,7 @@ static void kscan_matrix_read_end(const struct device *dev) { data->scan_time += config->poll_period_ms; // Return to polling slowly. - // TODO (Zephyr 2.6): use k_work_reschedule() - k_delayed_work_cancel(&data->work); - k_delayed_work_submit(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); + k_work_reschedule(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); #endif } @@ -311,7 +305,7 @@ static int kscan_matrix_read(const struct device *dev) { } static void kscan_matrix_work_handler(struct k_work *work) { - struct k_delayed_work *dwork = CONTAINER_OF(work, struct k_delayed_work, work); + struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); struct kscan_matrix_data *data = CONTAINER_OF(dwork, struct kscan_matrix_data, work); kscan_matrix_read(data->dev); } @@ -339,7 +333,7 @@ static int kscan_matrix_enable(const struct device *dev) { static int kscan_matrix_disable(const struct device *dev) { struct kscan_matrix_data *data = dev->data; - k_delayed_work_cancel(&data->work); + k_work_cancel_delayable(&data->work); #if USE_INTERRUPTS return kscan_matrix_interrupt_disable(dev); @@ -434,7 +428,7 @@ static int kscan_matrix_init(const struct device *dev) { kscan_matrix_init_outputs(dev); kscan_matrix_set_all_outputs(dev, 0); - k_delayed_work_init(&data->work, kscan_matrix_work_handler); + k_work_init_delayable(&data->work, kscan_matrix_work_handler); return 0; } diff --git a/app/drivers/kscan/kscan_mock.c b/app/drivers/kscan/kscan_mock.c index 8d1545cc73b..4ccce69f4e9 100644 --- a/app/drivers/kscan/kscan_mock.c +++ b/app/drivers/kscan/kscan_mock.c @@ -19,14 +19,14 @@ struct kscan_mock_data { kscan_callback_t callback; uint32_t event_index; - struct k_delayed_work work; + struct k_work_delayable work; const struct device *dev; }; static int kscan_mock_disable_callback(const struct device *dev) { struct kscan_mock_data *data = dev->data; - k_delayed_work_cancel(&data->work); + k_work_cancel_delayable(&data->work); return 0; } @@ -54,7 +54,7 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb if (data->event_index < DT_INST_PROP_LEN(n, events)) { \ uint32_t ev = cfg->events[data->event_index]; \ LOG_DBG("delaying next keypress: %d", ZMK_MOCK_MSEC(ev)); \ - k_delayed_work_submit(&data->work, K_MSEC(ZMK_MOCK_MSEC(ev))); \ + k_work_schedule(&data->work, K_MSEC(ZMK_MOCK_MSEC(ev))); \ } else if (cfg->exit_after) { \ LOG_DBG("Exiting"); \ exit(0); \ @@ -73,7 +73,7 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb static int kscan_mock_init_##n(const struct device *dev) { \ struct kscan_mock_data *data = dev->data; \ data->dev = dev; \ - k_delayed_work_init(&data->work, kscan_mock_work_handler_##n); \ + k_work_init_delayable(&data->work, kscan_mock_work_handler_##n); \ return 0; \ } \ static int kscan_mock_enable_callback_##n(const struct device *dev) { \ @@ -88,7 +88,7 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb static struct kscan_mock_data kscan_mock_data_##n; \ static const struct kscan_mock_config_##n kscan_mock_config_##n = { \ .events = DT_INST_PROP(n, events), .exit_after = DT_INST_PROP(n, exit_after)}; \ - DEVICE_DT_INST_DEFINE(n, kscan_mock_init_##n, device_pm_control_nop, &kscan_mock_data_##n, \ + DEVICE_DT_INST_DEFINE(n, kscan_mock_init_##n, NULL, &kscan_mock_data_##n, \ &kscan_mock_config_##n, APPLICATION, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api_##n); diff --git a/app/src/behavior_queue.c b/app/src/behavior_queue.c index a3cd8d47b13..617d5aad8ec 100644 --- a/app/src/behavior_queue.c +++ b/app/src/behavior_queue.c @@ -22,7 +22,7 @@ struct q_item { K_MSGQ_DEFINE(zmk_behavior_queue_msgq, sizeof(struct q_item), CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE, 4); static void behavior_queue_process_next(struct k_work *work); -static K_DELAYED_WORK_DEFINE(queue_work, behavior_queue_process_next); +static K_WORK_DELAYABLE_DEFINE(queue_work, behavior_queue_process_next); static void behavior_queue_process_next(struct k_work *work) { struct q_item item = {.wait = 0}; @@ -43,7 +43,7 @@ static void behavior_queue_process_next(struct k_work *work) { LOG_DBG("Processing next queued behavior in %dms", item.wait); if (item.wait > 0) { - k_delayed_work_submit(&queue_work, K_MSEC(item.wait)); + k_work_schedule(&queue_work, K_MSEC(item.wait)); break; } } @@ -58,7 +58,7 @@ int zmk_behavior_queue_add(uint32_t position, const struct zmk_behavior_binding return ret; } - if (!k_delayed_work_pending(&queue_work)) { + if (!k_work_delayable_is_pending(&queue_work)) { behavior_queue_process_next(&queue_work.work); } diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 4b35e4de165..5a0cd9e7ff3 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -23,7 +23,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define ZMK_BHV_TAP_DANCE_MAX_HELD 10 -#define ZMK_BHV_TAP_DANCE_POSITION_FREE ULONG_MAX +#define ZMK_BHV_TAP_DANCE_POSITION_FREE UINT32_MAX struct behavior_tap_dance_config { uint32_t tapping_term_ms; @@ -45,7 +45,7 @@ struct active_tap_dance { bool timer_cancelled; bool tap_dance_decided; int64_t release_at; - struct k_delayed_work release_timer; + struct k_work_delayable release_timer; }; struct active_tap_dance active_tap_dances[ZMK_BHV_TAP_DANCE_MAX_HELD] = {}; @@ -84,7 +84,7 @@ static void clear_tap_dance(struct active_tap_dance *tap_dance) { } static int stop_timer(struct active_tap_dance *tap_dance) { - int timer_cancel_result = k_delayed_work_cancel(&tap_dance->release_timer); + int timer_cancel_result = k_work_cancel_delayable(&tap_dance->release_timer); if (timer_cancel_result == -EINPROGRESS) { // too late to cancel, we'll let the timer handler clear up. tap_dance->timer_cancelled = true; @@ -97,7 +97,7 @@ static void reset_timer(struct active_tap_dance *tap_dance, tap_dance->release_at = event.timestamp + tap_dance->config->tapping_term_ms; int32_t ms_left = tap_dance->release_at - k_uptime_get(); if (ms_left > 0) { - k_delayed_work_submit(&tap_dance->release_timer, K_MSEC(ms_left)); + k_work_schedule(&tap_dance->release_timer, K_MSEC(ms_left)); LOG_DBG("Successfully reset timer at position %d", tap_dance->position); } } @@ -228,8 +228,8 @@ static int behavior_tap_dance_init(const struct device *dev) { static bool init_first_run = true; if (init_first_run) { for (int i = 0; i < ZMK_BHV_TAP_DANCE_MAX_HELD; i++) { - k_delayed_work_init(&active_tap_dances[i].release_timer, - behavior_tap_dance_timer_handler); + k_work_init_delayable(&active_tap_dances[i].release_timer, + behavior_tap_dance_timer_handler); clear_tap_dance(&active_tap_dances[i]); } } @@ -250,9 +250,9 @@ static int behavior_tap_dance_init(const struct device *dev) { .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ .behaviors = behavior_tap_dance_config_##n##_bindings, \ .behavior_count = DT_INST_PROP_LEN(n, bindings)}; \ - DEVICE_AND_API_INIT(behavior_tap_dance_##n, DT_INST_LABEL(n), behavior_tap_dance_init, NULL, \ - &behavior_tap_dance_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_tap_dance_init, device_pm_control_nop, NULL, \ + &behavior_tap_dance_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/ble.c b/app/src/ble.c index afc2e47f961..a930cadc94f 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -247,13 +247,12 @@ static void ble_save_profile_work(struct k_work *work) { settings_save_one("ble/active_profile", &active_profile, sizeof(active_profile)); } -static struct k_delayed_work ble_save_work; +static struct k_work_delayable ble_save_work; #endif static int ble_save_profile() { #if IS_ENABLED(CONFIG_SETTINGS) - k_delayed_work_cancel(&ble_save_work); - return k_delayed_work_submit(&ble_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return k_work_reschedule(&ble_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else return 0; #endif @@ -391,11 +390,6 @@ static void connected(struct bt_conn *conn, uint8_t err) { LOG_DBG("Connected %s", log_strdup(addr)); - err = bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 30, 400)); - if (err) { - LOG_WRN("Failed to update LE parameters (err %d)", err); - } - #if IS_SPLIT_PERIPHERAL bt_conn_le_phy_update(conn, BT_CONN_LE_PHY_PARAM_2M); #endif @@ -505,7 +499,7 @@ static enum bt_security_err auth_pairing_accept(struct bt_conn *conn, bt_conn_get_info(conn, &info); LOG_DBG("role %d, open? %s", info.role, zmk_ble_active_profile_is_open() ? "yes" : "no"); - if (info.role == BT_CONN_ROLE_SLAVE && !zmk_ble_active_profile_is_open()) { + if (info.role == BT_CONN_ROLE_PERIPHERAL && !zmk_ble_active_profile_is_open()) { LOG_WRN("Rejecting pairing request to taken profile %d", active_profile); return BT_SECURITY_ERR_PAIR_NOT_ALLOWED; } @@ -522,7 +516,7 @@ static void auth_pairing_complete(struct bt_conn *conn, bool bonded) { bt_addr_le_to_str(dst, addr, sizeof(addr)); bt_conn_get_info(conn, &info); - if (info.role != BT_CONN_ROLE_SLAVE) { + if (info.role != BT_CONN_ROLE_PERIPHERAL) { LOG_DBG("SKIPPING FOR ROLE %d", info.role); return; } @@ -579,7 +573,7 @@ static int zmk_ble_init(const struct device *_arg) { return err; } - k_delayed_work_init(&ble_save_work, ble_save_profile_work); + k_work_init_delayable(&ble_save_work, ble_save_profile_work); settings_load_subtree("ble"); settings_load_subtree("bt"); diff --git a/app/src/combo.c b/app/src/combo.c index bcdaac0152c..2479057e45f 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -67,7 +67,7 @@ struct combo_cfg *combo_lookup[ZMK_KEYMAP_LEN][CONFIG_ZMK_COMBO_MAX_COMBOS_PER_K struct active_combo active_combos[CONFIG_ZMK_COMBO_MAX_PRESSED_COMBOS] = {NULL}; int active_combo_count = 0; -struct k_delayed_work timeout_task; +struct k_work_delayable timeout_task; int64_t timeout_task_timeout_at; // Store the combo key pointer in the combos array, one pointer for each key position @@ -370,7 +370,7 @@ static bool release_combo_key(int32_t position, int64_t timestamp) { } static int cleanup() { - k_delayed_work_cancel(&timeout_task); + k_work_cancel_delayable(&timeout_task); clear_candidates(); if (fully_pressed_combo != NULL) { activate_combo(fully_pressed_combo); @@ -386,10 +386,10 @@ static void update_timeout_task() { } if (first_timeout == LLONG_MAX) { timeout_task_timeout_at = 0; - k_delayed_work_cancel(&timeout_task); + k_work_cancel_delayable(&timeout_task); return; } - if (k_delayed_work_submit(&timeout_task, K_MSEC(first_timeout - k_uptime_get())) == 0) { + if (k_work_schedule(&timeout_task, K_MSEC(first_timeout - k_uptime_get())) == 0) { timeout_task_timeout_at = first_timeout; } } @@ -486,7 +486,7 @@ ZMK_SUBSCRIPTION(combo, zmk_position_state_changed); DT_INST_FOREACH_CHILD(0, COMBO_INST) static int combo_init() { - k_delayed_work_init(&timeout_task, combo_timeout_handler); + k_work_init_delayable(&timeout_task, combo_timeout_handler); DT_INST_FOREACH_CHILD(0, INITIALIZE_COMBO); return 0; } diff --git a/app/src/endpoints.c b/app/src/endpoints.c index c15aad87acc..ebbb9fbca4d 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -35,13 +35,12 @@ static void endpoints_save_preferred_work(struct k_work *work) { settings_save_one("endpoints/preferred", &preferred_endpoint, sizeof(preferred_endpoint)); } -static struct k_delayed_work endpoints_save_work; +static struct k_work_delayable endpoints_save_work; #endif static int endpoints_save_preferred() { #if IS_ENABLED(CONFIG_SETTINGS) - k_delayed_work_cancel(&endpoints_save_work); - return k_delayed_work_submit(&endpoints_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return k_work_reschedule(&endpoints_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else return 0; #endif @@ -182,7 +181,7 @@ static int zmk_endpoints_init(const struct device *_arg) { return err; } - k_delayed_work_init(&endpoints_save_work, endpoints_save_preferred_work); + k_work_init_delayable(&endpoints_save_work, endpoints_save_preferred_work); settings_load_subtree("endpoints"); #endif diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index d2ca14dca18..367cf3a281a 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -47,13 +47,12 @@ static void ext_power_save_state_work(struct k_work *work) { settings_save_one(setting_path, &data->status, sizeof(data->status)); } -static struct k_delayed_work ext_power_save_work; +static struct k_work_delayable ext_power_save_work; #endif int ext_power_save_state() { #if IS_ENABLED(CONFIG_SETTINGS) - k_delayed_work_cancel(&ext_power_save_work); - return k_delayed_work_submit(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else return 0; #endif @@ -156,14 +155,14 @@ static int ext_power_generic_init(const struct device *dev) { return err; } - k_delayed_work_init(&ext_power_save_work, ext_power_save_state_work); + k_work_init_delayable(&ext_power_save_work, ext_power_save_state_work); // Set default value (on) if settings isn't set settings_load_subtree("ext_power"); if (!data->settings_init) { data->status = true; - k_delayed_work_submit(&ext_power_save_work, K_NO_WAIT); + k_work_schedule(&ext_power_save_work, K_NO_WAIT); ext_power_enable(dev); } diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 427552fac17..b1e2348ed91 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -220,7 +220,7 @@ static void zmk_rgb_underglow_save_state_work() { settings_save_one("rgb/underglow/state", &state, sizeof(state)); } -static struct k_delayed_work underglow_save_work; +static struct k_work_delayable underglow_save_work; #endif static int zmk_rgb_underglow_init(const struct device *_arg) { @@ -260,7 +260,7 @@ static int zmk_rgb_underglow_init(const struct device *_arg) { return err; } - k_delayed_work_init(&underglow_save_work, zmk_rgb_underglow_save_state_work); + k_work_init_delayable(&underglow_save_work, zmk_rgb_underglow_save_state_work); settings_load_subtree("rgb/underglow"); #endif @@ -272,8 +272,7 @@ static int zmk_rgb_underglow_init(const struct device *_arg) { int zmk_rgb_underglow_save_state() { #if IS_ENABLED(CONFIG_SETTINGS) - k_delayed_work_cancel(&underglow_save_work); - return k_delayed_work_submit(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return k_work_reschedule(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else return 0; #endif From 40d84706640b0d564a2617b78b487397046f1fd4 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:14:44 +0000 Subject: [PATCH 0320/1130] refactor: Handle HID macro/API changes in Zephyr. --- app/include/dt-bindings/zmk/hid_usage_pages.h | 6 +- app/include/dt-bindings/zmk/keys.h | 755 +++++++++--------- .../zmk/events/keycode_state_changed.h | 4 +- app/include/zmk/hid.h | 202 ++--- app/src/behaviors/behavior_caps_word.c | 4 +- app/src/behaviors/behavior_sticky_key.c | 4 +- 6 files changed, 446 insertions(+), 529 deletions(-) diff --git a/app/include/dt-bindings/zmk/hid_usage_pages.h b/app/include/dt-bindings/zmk/hid_usage_pages.h index f38f4fd300f..55241522424 100644 --- a/app/include/dt-bindings/zmk/hid_usage_pages.h +++ b/app/include/dt-bindings/zmk/hid_usage_pages.h @@ -10,9 +10,9 @@ #pragma once -#define HID_USAGE(page, id) ((page << 16) | id) -#define HID_USAGE_ID(usage) (usage & 0xFFFF) -#define HID_USAGE_PAGE(usage) (usage >> 16) +#define ZMK_HID_USAGE(page, id) ((page << 16) | id) +#define ZMK_HID_USAGE_ID(usage) (usage & 0xFFFF) +#define ZMK_HID_USAGE_PAGE(usage) (usage >> 16) /* WARNING: DEPRECATED from dt-bindings/zmk/keys.h */ #define USAGE_KEYPAD (0x07) // WARNING: DEPRECATED (DO NOT USE) diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index 915f2d32ea9..6728003f43a 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -10,774 +10,777 @@ #include /* System Power Down */ -#define SYSTEM_POWER (HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_POWER_DOWN)) +#define SYSTEM_POWER (ZMK_HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_POWER_DOWN)) #define SYS_PWR (SYSTEM_POWER) /* System Sleep */ -#define SYSTEM_SLEEP (HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_SLEEP)) +#define SYSTEM_SLEEP (ZMK_HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_SLEEP)) #define SYS_SLEEP (SYSTEM_SLEEP) /* System Wake Up */ -#define SYSTEM_WAKE_UP (HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_WAKE_UP)) +#define SYSTEM_WAKE_UP (ZMK_HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_WAKE_UP)) #define SYS_WAKE (SYSTEM_WAKE_UP) /* Keyboard a and A */ -#define A (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_A)) +#define A (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_A)) /* Keyboard b and B */ -#define B (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_B)) +#define B (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_B)) /* Keyboard c and C */ -#define C (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_C)) +#define C (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_C)) /* Keyboard d and D */ -#define D (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_D)) +#define D (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_D)) /* Keyboard e and E */ -#define E (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_E)) +#define E (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_E)) /* Keyboard f and F */ -#define F (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F)) +#define F (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F)) /* Keyboard g and G */ -#define G (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_G)) +#define G (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_G)) /* Keyboard h and H */ -#define H (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_H)) +#define H (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_H)) /* Keyboard i and I */ -#define I (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_I)) +#define I (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_I)) /* Keyboard j and J */ -#define J (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_J)) +#define J (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_J)) /* Keyboard k and K */ -#define K (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_K)) +#define K (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_K)) /* Keyboard l and L */ -#define L (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_L)) +#define L (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_L)) /* Keyboard m and M */ -#define M (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_M)) +#define M (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_M)) /* Keyboard n and N */ -#define N (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_N)) +#define N (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_N)) /* Keyboard o and O */ -#define O (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_O)) +#define O (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_O)) /* Keyboard p and P */ -#define P (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_P)) +#define P (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_P)) /* Keyboard q and Q */ -#define Q (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Q)) +#define Q (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Q)) /* Keyboard r and R */ -#define R (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_R)) +#define R (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_R)) /* Keyboard s and S */ -#define S (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_S)) +#define S (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_S)) /* Keyboard t and T */ -#define T (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_T)) +#define T (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_T)) /* Keyboard u and U */ -#define U (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_U)) +#define U (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_U)) /* Keyboard v and V */ -#define V (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_V)) +#define V (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_V)) /* Keyboard w and W */ -#define W (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_W)) +#define W (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_W)) /* Keyboard x and X */ -#define X (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_X)) +#define X (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_X)) /* Keyboard y and Y */ -#define Y (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Y)) +#define Y (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Y)) /* Keyboard z and Z */ -#define Z (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Z)) +#define Z (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Z)) /* Keyboard 1 and ! (Exclamation) */ -#define NUMBER_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION)) +#define NUMBER_1 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION)) #define N1 (NUMBER_1) #define NUM_1 (NUMBER_1) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ! (Exclamation) */ -#define EXCLAMATION (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION))) +#define EXCLAMATION (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION))) #define EXCL (EXCLAMATION) #define BANG (EXCLAMATION) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard 2 and @ (At sign) */ -#define NUMBER_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_2_AND_AT)) +#define NUMBER_2 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_2_AND_AT)) #define N2 (NUMBER_2) #define NUM_2 (NUMBER_2) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard @ (At sign) */ -#define AT_SIGN (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_2_AND_AT))) +#define AT_SIGN (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_2_AND_AT))) #define AT (AT_SIGN) #define ATSN (AT_SIGN) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard 3 and # (Hash/Number) */ -#define NUMBER_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_3_AND_HASH)) +#define NUMBER_3 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_3_AND_HASH)) #define N3 (NUMBER_3) #define NUM_3 (NUMBER_3) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard # (Hash/Number) */ -#define HASH (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_3_AND_HASH))) +#define HASH (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_3_AND_HASH))) #define POUND (HASH) /* Keyboard 4 and $ (Dollar) */ -#define NUMBER_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR)) +#define NUMBER_4 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR)) #define N4 (NUMBER_4) #define NUM_4 (NUMBER_4) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard $ (Dollar) */ -#define DOLLAR (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR))) +#define DOLLAR (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR))) #define DLLR (DOLLAR) /* Keyboard 5 and % (Percent) */ -#define NUMBER_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT)) +#define NUMBER_5 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT)) #define N5 (NUMBER_5) #define NUM_5 (NUMBER_5) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard % (Percent) */ -#define PERCENT (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT))) +#define PERCENT (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT))) #define PRCNT (PERCENT) #define PRCT (PERCENT) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard 6 and ^ (Caret) */ -#define NUMBER_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_6_AND_CARET)) +#define NUMBER_6 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_6_AND_CARET)) #define N6 (NUMBER_6) #define NUM_6 (NUMBER_6) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ^ (Caret) */ -#define CARET (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_6_AND_CARET))) +#define CARET (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_6_AND_CARET))) #define CRRT (CARET) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard 7 and & (Ampersand) */ -#define NUMBER_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND)) +#define NUMBER_7 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND)) #define N7 (NUMBER_7) #define NUM_7 (NUMBER_7) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard & (Ampersand) */ -#define AMPERSAND (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND))) +#define AMPERSAND (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND))) #define AMPS (AMPERSAND) /* Keyboard 8 and * (Asterisk) */ -#define NUMBER_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK)) +#define NUMBER_8 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK)) #define N8 (NUMBER_8) #define NUM_8 (NUMBER_8) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard * (Asterisk) */ -#define ASTERISK (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK))) +#define ASTERISK (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK))) #define ASTRK (ASTERISK) #define STAR (ASTERISK) /* Keyboard 9 and ( (Left Parenthesis) */ -#define NUMBER_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS)) +#define NUMBER_9 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS)) #define N9 (NUMBER_9) #define NUM_9 (NUMBER_9) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ( (Left Parenthesis) */ #define LEFT_PARENTHESIS \ - (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS))) + (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS))) #define LPAR (LEFT_PARENTHESIS) #define LPRN (LEFT_PARENTHESIS) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard 0 and ) (Right Parenthesis) */ -#define NUMBER_0 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS)) +#define NUMBER_0 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS)) #define N0 (NUMBER_0) #define NUM_0 (NUMBER_0) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ) (Right Parenthesis) */ #define RIGHT_PARENTHESIS \ - (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS))) + (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS))) #define RPAR (RIGHT_PARENTHESIS) #define RPRN (RIGHT_PARENTHESIS) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Return (Enter) */ -#define RETURN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RETURN_ENTER)) +#define RETURN (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RETURN_ENTER)) #define ENTER (RETURN) #define RET (RETURN) /* Keyboard Escape */ -#define ESCAPE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_ESCAPE)) +#define ESCAPE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_ESCAPE)) #define ESC (ESCAPE) /* Keyboard Backspace */ -#define BACKSPACE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DELETE_BACKSPACE)) +#define BACKSPACE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DELETE_BACKSPACE)) #define BSPC (BACKSPACE) #define BKSP (BACKSPACE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Tab */ -#define TAB (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_TAB)) +#define TAB (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_TAB)) /* Keyboard Space */ -#define SPACE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SPACEBAR)) +#define SPACE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SPACEBAR)) #define SPC (SPACE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard - and _ (Minus and Underscore) */ -#define MINUS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE)) +#define MINUS (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE)) /* Keyboard _ (Underscore) */ -#define UNDERSCORE (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE))) +#define UNDERSCORE (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE))) #define UNDER (UNDERSCORE) /* Keyboard = and + (Equal and Plus) */ -#define EQUAL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS)) +#define EQUAL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS)) #define EQL (EQUAL) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard + (Plus) */ -#define PLUS (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS))) +#define PLUS (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS))) /* Keyboard [ and { (Left Bracket and Left Brace) */ -#define LEFT_BRACKET (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE)) +#define LEFT_BRACKET \ + (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE)) #define LBKT (LEFT_BRACKET) /* Keyboard { (Left Brace) */ #define LEFT_BRACE \ - (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE))) + (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE))) #define LBRC (LEFT_BRACE) #define LCUR (LEFT_BRACE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ] and } (Right Bracket and Right Brace) */ #define RIGHT_BRACKET \ - (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE)) + (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE)) #define RBKT (RIGHT_BRACKET) /* Keyboard } (Right Brace) */ #define RIGHT_BRACE \ - (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE))) + (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE))) #define RBRC (RIGHT_BRACE) #define RCUR (RIGHT_BRACE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard \ and | (Backslash and Pipe) */ -#define BACKSLASH (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE)) +#define BACKSLASH (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE)) #define BSLH (BACKSLASH) /* Keyboard | (Pipe) */ -#define PIPE (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE))) +#define PIPE (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE))) /* Keyboard Non-US # and ~ (Non-US Hash/Number and Tilde) */ -#define NON_US_HASH (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE)) +#define NON_US_HASH (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE)) /* Keyboard ~ (Tilde) */ -#define TILDE2 (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE))) +#define TILDE2 (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE))) /* Keyboard ; and : (Semicolon and Colon) */ -#define SEMICOLON (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON)) +#define SEMICOLON (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON)) #define SEMI (SEMICOLON) #define SCLN (SEMICOLON) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard : (Colon) */ -#define COLON (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON))) +#define COLON (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON))) #define COLN (COLON) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ' and " (Apostrophe and Quote) */ -#define SINGLE_QUOTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE)) +#define SINGLE_QUOTE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE)) #define SQT (SINGLE_QUOTE) #define APOSTROPHE (SINGLE_QUOTE) #define APOS (SINGLE_QUOTE) #define QUOT (SINGLE_QUOTE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard " (Quote) */ -#define DOUBLE_QUOTES (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE))) +#define DOUBLE_QUOTES \ + (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE))) #define DQT (DOUBLE_QUOTES) /* Keyboard ` and ~ (Grave Accent and Tilde) */ -#define GRAVE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE)) +#define GRAVE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE)) #define GRAV (GRAVE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard ~ (Tilde) */ -#define TILDE (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE))) +#define TILDE (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE))) #define TILD (TILDE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard , and < (Comma and Less Than) */ -#define COMMA (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN)) +#define COMMA (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN)) #define CMMA (COMMA) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard < (Less Than) */ -#define LESS_THAN (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN))) +#define LESS_THAN (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN))) #define LT (LESS_THAN) #define LABT (LESS_THAN) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard . and > (Period and Greater Than) */ -#define PERIOD (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN)) +#define PERIOD (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN)) #define DOT (PERIOD) /* Keyboard > (Greater Than) */ -#define GREATER_THAN (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN))) +#define GREATER_THAN \ + (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN))) #define GT (GREATER_THAN) #define RABT (GREATER_THAN) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard / and ? (Forward Slash and Question) */ -#define SLASH (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK)) +#define SLASH (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK)) #define FSLH (SLASH) /* Keyboard ? (Question) */ -#define QUESTION (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK))) +#define QUESTION (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK))) #define QMARK (QUESTION) /* Keyboard Caps Lock */ -#define CAPSLOCK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CAPS_LOCK)) +#define CAPSLOCK (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CAPS_LOCK)) #define CAPS (CAPSLOCK) #define CLCK (CAPSLOCK) /* Keyboard F1 */ -#define F1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F1)) +#define F1 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F1)) /* Keyboard F2 */ -#define F2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F2)) +#define F2 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F2)) /* Keyboard F3 */ -#define F3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F3)) +#define F3 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F3)) /* Keyboard F4 */ -#define F4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F4)) +#define F4 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F4)) /* Keyboard F5 */ -#define F5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F5)) +#define F5 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F5)) /* Keyboard F6 */ -#define F6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F6)) +#define F6 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F6)) /* Keyboard F7 */ -#define F7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F7)) +#define F7 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F7)) /* Keyboard F8 */ -#define F8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F8)) +#define F8 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F8)) /* Keyboard F9 */ -#define F9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F9)) +#define F9 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F9)) /* Keyboard F10 */ -#define F10 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F10)) +#define F10 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F10)) /* Keyboard F11 */ -#define F11 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F11)) +#define F11 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F11)) /* Keyboard F12 */ -#define F12 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F12)) +#define F12 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F12)) /* Keyboard Print Screen */ -#define PRINTSCREEN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PRINTSCREEN)) +#define PRINTSCREEN (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PRINTSCREEN)) #define PSCRN (PRINTSCREEN) #define PRSC (PRINTSCREEN) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Scroll Lock */ -#define SCROLLLOCK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SCROLL_LOCK)) +#define SCROLLLOCK (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SCROLL_LOCK)) #define SLCK (SCROLLLOCK) #define SCLK (SCROLLLOCK) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Pause/Break */ -#define PAUSE_BREAK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAUSE)) +#define PAUSE_BREAK (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAUSE)) #define PAUS (PAUSE_BREAK) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Insert */ -#define INSERT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INSERT)) +#define INSERT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INSERT)) #define INS (INSERT) /* Keyboard Home */ -#define HOME (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_HOME)) +#define HOME (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_HOME)) /* Keyboard Page Up */ -#define PAGE_UP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAGEUP)) +#define PAGE_UP (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAGEUP)) #define PG_UP (PAGE_UP) #define PGUP (PAGE_UP) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Delete */ -#define DELETE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DELETE_FORWARD)) +#define DELETE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DELETE_FORWARD)) #define DEL (DELETE) /* Keyboard End */ -#define END (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_END)) +#define END (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_END)) /* Keyboard Page Down */ -#define PAGE_DOWN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAGEDOWN)) +#define PAGE_DOWN (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAGEDOWN)) #define PG_DN (PAGE_DOWN) #define PGDN (PAGE_DOWN) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Right Arrow */ -#define RIGHT_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTARROW)) +#define RIGHT_ARROW (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTARROW)) #define RIGHT (RIGHT_ARROW) #define RARW (RIGHT_ARROW) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Left Arrow */ -#define LEFT_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTARROW)) +#define LEFT_ARROW (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTARROW)) #define LEFT (LEFT_ARROW) #define LARW (LEFT_ARROW) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Down Arrow */ -#define DOWN_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DOWNARROW)) +#define DOWN_ARROW (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DOWNARROW)) #define DOWN (DOWN_ARROW) #define DARW (DOWN_ARROW) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Up Arrow */ -#define UP_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_UPARROW)) +#define UP_ARROW (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_UPARROW)) #define UP (UP_ARROW) #define UARW (UP_ARROW) // WARNING: DEPRECATED (DO NOT USE) /* Keypad Numlock and Clear */ -#define KP_NUMLOCK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR)) +#define KP_NUMLOCK (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR)) #define KP_NUM (KP_NUMLOCK) #define KP_NLCK (KP_NUMLOCK) /* Keypad Clear */ -#define CLEAR2 (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR))) +#define CLEAR2 (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR))) /* Keypad / (Slash/Divide) */ -#define KP_DIVIDE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_SLASH)) +#define KP_DIVIDE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_SLASH)) #define KP_SLASH (KP_DIVIDE) #define KDIV (KP_DIVIDE) // WARNING: DEPRECATED (DO NOT USE) /* Keypad * (Multiply) */ -#define KP_MULTIPLY (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_ASTERISK)) +#define KP_MULTIPLY (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_ASTERISK)) #define KP_ASTERISK (KP_MULTIPLY) #define KMLT (KP_MULTIPLY) // WARNING: DEPRECATED (DO NOT USE) /* Keypad - (Minus) */ -#define KP_MINUS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_MINUS)) +#define KP_MINUS (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_MINUS)) #define KP_SUBTRACT (KP_MINUS) #define KMIN (KP_MINUS) // WARNING: DEPRECATED (DO NOT USE) /* Keypad + (Plus) */ -#define KP_PLUS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_PLUS)) +#define KP_PLUS (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_PLUS)) #define KPLS (KP_PLUS) // WARNING: DEPRECATED (DO NOT USE) /* Keypad Enter */ -#define KP_ENTER (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_ENTER)) +#define KP_ENTER (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_ENTER)) /* Keypad 1 */ -#define KP_NUMBER_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_1_AND_END)) +#define KP_NUMBER_1 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_1_AND_END)) #define KP_N1 (KP_NUMBER_1) /* Keypad 2 */ -#define KP_NUMBER_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_2_AND_DOWN_ARROW)) +#define KP_NUMBER_2 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_2_AND_DOWN_ARROW)) #define KP_N2 (KP_NUMBER_2) /* Keypad 3 */ -#define KP_NUMBER_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_3_AND_PAGEDN)) +#define KP_NUMBER_3 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_3_AND_PAGEDN)) #define KP_N3 (KP_NUMBER_3) /* Keypad 4 */ -#define KP_NUMBER_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_4_AND_LEFT_ARROW)) +#define KP_NUMBER_4 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_4_AND_LEFT_ARROW)) #define KP_N4 (KP_NUMBER_4) /* Keypad 5 */ -#define KP_NUMBER_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_5)) +#define KP_NUMBER_5 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_5)) #define KP_N5 (KP_NUMBER_5) /* Keypad 6 */ -#define KP_NUMBER_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_6_AND_RIGHT_ARROW)) +#define KP_NUMBER_6 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_6_AND_RIGHT_ARROW)) #define KP_N6 (KP_NUMBER_6) /* Keypad 7 */ -#define KP_NUMBER_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_7_AND_HOME)) +#define KP_NUMBER_7 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_7_AND_HOME)) #define KP_N7 (KP_NUMBER_7) /* Keypad 8 */ -#define KP_NUMBER_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_8_AND_UP_ARROW)) +#define KP_NUMBER_8 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_8_AND_UP_ARROW)) #define KP_N8 (KP_NUMBER_8) /* Keypad 9 */ -#define KP_NUMBER_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_9_AND_PAGEUP)) +#define KP_NUMBER_9 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_9_AND_PAGEUP)) #define KP_N9 (KP_NUMBER_9) /* Keypad 0 */ -#define KP_NUMBER_0 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_0_AND_INSERT)) +#define KP_NUMBER_0 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_0_AND_INSERT)) #define KP_N0 (KP_NUMBER_0) /* Keypad . (Dot) */ -#define KP_DOT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_PERIOD_AND_DELETE)) +#define KP_DOT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_PERIOD_AND_DELETE)) /* Keyboard Non-US \ and | (Non-us Backslash and Pipe) */ #define NON_US_BACKSLASH \ - (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE)) + (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE)) #define NON_US_BSLH (NON_US_BACKSLASH) /* Keyboard Pipe */ -#define PIPE2 (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE))) +#define PIPE2 (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE))) /* Keyboard Application (Context Menu) */ -#define K_APPLICATION (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APPLICATION)) +#define K_APPLICATION (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APPLICATION)) #define K_APP (K_APPLICATION) #define K_CONTEXT_MENU (K_APPLICATION) #define K_CMENU (K_APPLICATION) #define GUI (K_APPLICATION) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Power */ -#define K_POWER (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_POWER)) +#define K_POWER (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_POWER)) #define K_PWR (K_POWER) /* Keypad = (Equal) */ -#define KP_EQUAL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_EQUAL)) +#define KP_EQUAL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_EQUAL)) /* Keyboard F13 */ -#define F13 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F13)) +#define F13 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F13)) /* Keyboard F14 */ -#define F14 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F14)) +#define F14 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F14)) /* Keyboard F15 */ -#define F15 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F15)) +#define F15 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F15)) /* Keyboard F16 */ -#define F16 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F16)) +#define F16 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F16)) /* Keyboard F17 */ -#define F17 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F17)) +#define F17 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F17)) /* Keyboard F18 */ -#define F18 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F18)) +#define F18 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F18)) /* Keyboard F19 */ -#define F19 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F19)) +#define F19 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F19)) /* Keyboard F20 */ -#define F20 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F20)) +#define F20 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F20)) /* Keyboard F21 */ -#define F21 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F21)) +#define F21 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F21)) /* Keyboard F22 */ -#define F22 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F22)) +#define F22 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F22)) /* Keyboard F23 */ -#define F23 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F23)) +#define F23 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F23)) /* Keyboard F24 */ -#define F24 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F24)) +#define F24 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F24)) /* Keyboard Execute */ -#define K_EXECUTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EXECUTE)) +#define K_EXECUTE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EXECUTE)) #define K_EXEC (K_EXECUTE) /* Keyboard Help */ -#define K_HELP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_HELP)) +#define K_HELP (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_HELP)) /* Keyboard Menu */ -#define K_MENU (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MENU)) +#define K_MENU (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MENU)) /* Keyboard Select */ -#define K_SELECT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SELECT)) +#define K_SELECT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SELECT)) /* Keyboard Stop */ -#define K_STOP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_STOP)) +#define K_STOP (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_STOP)) /* Keyboard Again */ -#define K_AGAIN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_AGAIN)) +#define K_AGAIN (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_AGAIN)) #define K_REDO (K_AGAIN) /* Keyboard Undo */ -#define K_UNDO (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_UNDO)) +#define K_UNDO (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_UNDO)) #define UNDO (K_UNDO) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Cut */ -#define K_CUT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CUT)) +#define K_CUT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CUT)) #define CUT (K_CUT) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Copy */ -#define K_COPY (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COPY)) +#define K_COPY (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COPY)) #define COPY (K_COPY) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Paste */ -#define K_PASTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PASTE)) +#define K_PASTE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PASTE)) #define PSTE (K_PASTE) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Find */ -#define K_FIND (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_FIND)) +#define K_FIND (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_FIND)) /* Keyboard Mute */ -#define K_MUTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MUTE)) +#define K_MUTE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MUTE)) /* Keyboard Volume Up */ -#define K_VOLUME_UP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_VOLUME_UP)) +#define K_VOLUME_UP (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_VOLUME_UP)) #define K_VOL_UP (K_VOLUME_UP) #define VOLU (K_VOLUME_UP) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Volume Down */ -#define K_VOLUME_DOWN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_VOLUME_DOWN)) +#define K_VOLUME_DOWN (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_VOLUME_DOWN)) #define K_VOL_DN (K_VOLUME_DOWN) #define VOLD (K_VOLUME_DOWN) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Locking Caps Lock */ -#define LOCKING_CAPS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_CAPS_LOCK)) +#define LOCKING_CAPS (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_CAPS_LOCK)) #define LCAPS (LOCKING_CAPS) /* Keyboard Locking Num Lock */ -#define LOCKING_NUM (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_NUM_LOCK)) +#define LOCKING_NUM (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_NUM_LOCK)) #define LNLCK (LOCKING_NUM) /* Keyboard Locking Scroll Lock */ -#define LOCKING_SCROLL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_SCROLL_LOCK)) +#define LOCKING_SCROLL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_SCROLL_LOCK)) #define LSLCK (LOCKING_SCROLL) /* Keypad , (Comma) */ -#define KP_COMMA (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_COMMA)) +#define KP_COMMA (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_COMMA)) /* Keypad = (Equal) AS/400 */ -#define KP_EQUAL_AS400 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_EQUAL_SIGN)) +#define KP_EQUAL_AS400 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_EQUAL_SIGN)) /* Keyboard International 1 */ -#define INTERNATIONAL_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL1)) +#define INTERNATIONAL_1 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL1)) #define INT1 (INTERNATIONAL_1) #define INT_RO (INTERNATIONAL_1) /* Keyboard International 2 */ -#define INTERNATIONAL_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL2)) +#define INTERNATIONAL_2 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL2)) #define INT2 (INTERNATIONAL_2) #define INT_KATAKANAHIRAGANA (INTERNATIONAL_2) #define INT_KANA (INTERNATIONAL_2) /* Keyboard International 3 */ -#define INTERNATIONAL_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL3)) +#define INTERNATIONAL_3 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL3)) #define INT3 (INTERNATIONAL_3) #define INT_YEN (INTERNATIONAL_3) /* Keyboard International 4 */ -#define INTERNATIONAL_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL4)) +#define INTERNATIONAL_4 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL4)) #define INT4 (INTERNATIONAL_4) #define INT_HENKAN (INTERNATIONAL_4) /* Keyboard International 5 */ -#define INTERNATIONAL_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL5)) +#define INTERNATIONAL_5 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL5)) #define INT5 (INTERNATIONAL_5) #define INT_MUHENKAN (INTERNATIONAL_5) /* Keyboard International 6 */ -#define INTERNATIONAL_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL6)) +#define INTERNATIONAL_6 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL6)) #define INT6 (INTERNATIONAL_6) #define INT_KPJPCOMMA (INTERNATIONAL_6) /* Keyboard International 7 */ -#define INTERNATIONAL_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL7)) +#define INTERNATIONAL_7 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL7)) #define INT7 (INTERNATIONAL_7) /* Keyboard International 8 */ -#define INTERNATIONAL_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL8)) +#define INTERNATIONAL_8 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL8)) #define INT8 (INTERNATIONAL_8) /* Keyboard International 9 */ -#define INTERNATIONAL_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL9)) +#define INTERNATIONAL_9 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL9)) #define INT9 (INTERNATIONAL_9) /* Keyboard Language 1 */ -#define LANGUAGE_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG1)) +#define LANGUAGE_1 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG1)) #define LANG1 (LANGUAGE_1) #define LANG_HANGEUL (LANGUAGE_1) /* Keyboard Language 2 */ -#define LANGUAGE_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG2)) +#define LANGUAGE_2 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG2)) #define LANG2 (LANGUAGE_2) #define LANG_HANJA (LANGUAGE_2) /* Keyboard Language 3 */ -#define LANGUAGE_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG3)) +#define LANGUAGE_3 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG3)) #define LANG3 (LANGUAGE_3) #define LANG_KATAKANA (LANGUAGE_3) /* Keyboard Language 4 */ -#define LANGUAGE_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG4)) +#define LANGUAGE_4 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG4)) #define LANG4 (LANGUAGE_4) #define LANG_HIRAGANA (LANGUAGE_4) /* Keyboard Language 5 */ -#define LANGUAGE_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG5)) +#define LANGUAGE_5 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG5)) #define LANG5 (LANGUAGE_5) #define LANG_ZENKAKUHANKAKU (LANGUAGE_5) /* Keyboard Language 6 */ -#define LANGUAGE_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG6)) +#define LANGUAGE_6 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG6)) #define LANG6 (LANGUAGE_6) /* Keyboard Language 7 */ -#define LANGUAGE_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG7)) +#define LANGUAGE_7 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG7)) #define LANG7 (LANGUAGE_7) /* Keyboard Language 8 */ -#define LANGUAGE_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG8)) +#define LANGUAGE_8 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG8)) #define LANG8 (LANGUAGE_8) /* Keyboard Language 9 */ -#define LANGUAGE_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG9)) +#define LANGUAGE_9 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG9)) #define LANG9 (LANGUAGE_9) /* Keyboard Alternate Erase */ -#define ALT_ERASE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_ALTERNATE_ERASE)) +#define ALT_ERASE (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_ALTERNATE_ERASE)) /* Keyboard SysReq/Attention */ -#define SYSREQ (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SYSREQ_ATTENTION)) +#define SYSREQ (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SYSREQ_ATTENTION)) #define ATTENTION (SYSREQ) /* Keyboard Cancel */ -#define K_CANCEL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CANCEL)) +#define K_CANCEL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CANCEL)) /* Keyboard Clear */ -#define CLEAR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CLEAR)) +#define CLEAR (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CLEAR)) /* Keyboard Prior */ -#define PRIOR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PRIOR)) +#define PRIOR (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PRIOR)) /* Keyboard Return */ -#define RETURN2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RETURN)) +#define RETURN2 (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RETURN)) #define RET2 (RETURN2) /* Keyboard Separator */ -#define SEPARATOR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEPARATOR)) +#define SEPARATOR (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEPARATOR)) /* Keyboard Out */ -#define OUT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_OUT)) +#define OUT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_OUT)) /* Keyboard Oper */ -#define OPER (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_OPER)) +#define OPER (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_OPER)) /* Keyboard Clear/Again */ -#define CLEAR_AGAIN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CLEAR_AGAIN)) +#define CLEAR_AGAIN (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CLEAR_AGAIN)) /* Keyboard CrSel/Props */ -#define CRSEL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CRSEL_PROPS)) +#define CRSEL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CRSEL_PROPS)) /* Keyboard ExSel */ -#define EXSEL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EXSEL)) +#define EXSEL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EXSEL)) /* Keyboard Currency Unit */ #define CURU \ - (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_CURRENCY_UNIT)) // WARNING: DEPRECATED (DO NOT USE) + (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_CURRENCY_UNIT)) // WARNING: DEPRECATED (DO NOT USE) /* Keypad ( (Left Parenthesis) */ -#define KP_LEFT_PARENTHESIS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_LEFT_PARENTHESIS)) +#define KP_LEFT_PARENTHESIS (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_LEFT_PARENTHESIS)) #define KP_LPAR (KP_LEFT_PARENTHESIS) /* Keypad ) (Right Parenthesis) */ -#define KP_RIGHT_PARENTHESIS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_RIGHT_PARENTHESIS)) +#define KP_RIGHT_PARENTHESIS (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_RIGHT_PARENTHESIS)) #define KP_RPAR (KP_RIGHT_PARENTHESIS) /* Keypad Space */ #define KSPC \ - (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_SPACE)) // WARNING: DEPRECATED (DO NOT USE) + (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_SPACE)) // WARNING: DEPRECATED (DO NOT USE) /* Keypad Clear */ -#define KP_CLEAR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_CLEAR)) +#define KP_CLEAR (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_CLEAR)) /* Keyboard Left Control */ -#define LEFT_CONTROL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTCONTROL)) +#define LEFT_CONTROL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTCONTROL)) #define LCTRL (LEFT_CONTROL) #define LCTL (LEFT_CONTROL) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Left Shift */ -#define LEFT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTSHIFT)) +#define LEFT_SHIFT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTSHIFT)) #define LSHIFT (LEFT_SHIFT) #define LSHFT (LEFT_SHIFT) #define LSFT (LEFT_SHIFT) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Left Alt */ -#define LEFT_ALT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTALT)) +#define LEFT_ALT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTALT)) #define LALT (LEFT_ALT) /* Keyboard Left GUI (Windows / Command / Meta) */ -#define LEFT_GUI (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_GUI)) +#define LEFT_GUI (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_GUI)) #define LGUI (LEFT_GUI) #define LEFT_WIN (LEFT_GUI) #define LWIN (LEFT_GUI) @@ -787,22 +790,22 @@ #define LMETA (LEFT_GUI) /* Keyboard Right Control */ -#define RIGHT_CONTROL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTCONTROL)) +#define RIGHT_CONTROL (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTCONTROL)) #define RCTRL (RIGHT_CONTROL) #define RCTL (RIGHT_CONTROL) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Right Shift */ -#define RIGHT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTSHIFT)) +#define RIGHT_SHIFT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTSHIFT)) #define RSHIFT (RIGHT_SHIFT) #define RSHFT (RIGHT_SHIFT) #define RSFT (RIGHT_SHIFT) // WARNING: DEPRECATED (DO NOT USE) /* Keyboard Right Alt */ -#define RIGHT_ALT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTALT)) +#define RIGHT_ALT (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTALT)) #define RALT (RIGHT_ALT) /* Keyboard Right GUI (Windows / Command / Meta) */ -#define RIGHT_GUI (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_GUI)) +#define RIGHT_GUI (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_GUI)) #define RGUI (RIGHT_GUI) #define RIGHT_WIN (RIGHT_GUI) #define RWIN (RIGHT_GUI) @@ -812,611 +815,621 @@ #define RMETA (RIGHT_GUI) /* Keyboard Play/Pause */ -#define K_PLAY_PAUSE (HID_USAGE(HID_USAGE_KEY, 0xE8)) +#define K_PLAY_PAUSE (ZMK_HID_USAGE(HID_USAGE_KEY, 0xE8)) #define K_PP (K_PLAY_PAUSE) /* Keyboard Stop */ -#define K_STOP2 (HID_USAGE(HID_USAGE_KEY, 0xE9)) +#define K_STOP2 (ZMK_HID_USAGE(HID_USAGE_KEY, 0xE9)) /* Keyboard Previous */ -#define K_PREVIOUS (HID_USAGE(HID_USAGE_KEY, 0xEA)) +#define K_PREVIOUS (ZMK_HID_USAGE(HID_USAGE_KEY, 0xEA)) #define K_PREV (K_PREVIOUS) /* Keyboard Next */ -#define K_NEXT (HID_USAGE(HID_USAGE_KEY, 0xEB)) +#define K_NEXT (ZMK_HID_USAGE(HID_USAGE_KEY, 0xEB)) /* Keyboard Eject */ -#define K_EJECT (HID_USAGE(HID_USAGE_KEY, 0xEC)) +#define K_EJECT (ZMK_HID_USAGE(HID_USAGE_KEY, 0xEC)) /* Keyboard Volume Up */ -#define K_VOLUME_UP2 (HID_USAGE(HID_USAGE_KEY, 0xED)) +#define K_VOLUME_UP2 (ZMK_HID_USAGE(HID_USAGE_KEY, 0xED)) #define K_VOL_UP2 (K_VOLUME_UP2) /* Keyboard Volume Down */ -#define K_VOLUME_DOWN2 (HID_USAGE(HID_USAGE_KEY, 0xEE)) +#define K_VOLUME_DOWN2 (ZMK_HID_USAGE(HID_USAGE_KEY, 0xEE)) #define K_VOL_DN2 (K_VOLUME_DOWN2) /* Keyboard Mute */ -#define K_MUTE2 (HID_USAGE(HID_USAGE_KEY, 0xEF)) +#define K_MUTE2 (ZMK_HID_USAGE(HID_USAGE_KEY, 0xEF)) /* Keyboard WWW */ -#define K_WWW (HID_USAGE(HID_USAGE_KEY, 0xF0)) +#define K_WWW (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF0)) /* Keyboard Back */ -#define K_BACK (HID_USAGE(HID_USAGE_KEY, 0xF1)) +#define K_BACK (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF1)) /* Keyboard Forward */ -#define K_FORWARD (HID_USAGE(HID_USAGE_KEY, 0xF2)) +#define K_FORWARD (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF2)) /* Keyboard Stop */ -#define K_STOP3 (HID_USAGE(HID_USAGE_KEY, 0xF3)) +#define K_STOP3 (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF3)) /* Keyboard Find */ -#define K_FIND2 (HID_USAGE(HID_USAGE_KEY, 0xF4)) +#define K_FIND2 (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF4)) /* Keyboard Scroll Up */ -#define K_SCROLL_UP (HID_USAGE(HID_USAGE_KEY, 0xF5)) +#define K_SCROLL_UP (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF5)) /* Keyboard Scroll Down */ -#define K_SCROLL_DOWN (HID_USAGE(HID_USAGE_KEY, 0xF6)) +#define K_SCROLL_DOWN (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF6)) /* Keyboard Edit */ -#define K_EDIT (HID_USAGE(HID_USAGE_KEY, 0xF7)) +#define K_EDIT (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF7)) /* Keyboard Sleep */ -#define K_SLEEP (HID_USAGE(HID_USAGE_KEY, 0xF8)) +#define K_SLEEP (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF8)) /* Keyboard Lock */ -#define K_LOCK (HID_USAGE(HID_USAGE_KEY, 0xF9)) +#define K_LOCK (ZMK_HID_USAGE(HID_USAGE_KEY, 0xF9)) #define K_SCREENSAVER (K_LOCK) #define K_COFFEE (K_LOCK) /* Keyboard Refresh */ -#define K_REFRESH (HID_USAGE(HID_USAGE_KEY, 0xFA)) +#define K_REFRESH (ZMK_HID_USAGE(HID_USAGE_KEY, 0xFA)) /* Keyboard Calculator */ -#define K_CALCULATOR (HID_USAGE(HID_USAGE_KEY, 0xFB)) +#define K_CALCULATOR (ZMK_HID_USAGE(HID_USAGE_KEY, 0xFB)) #define K_CALC (K_CALCULATOR) /* Consumer Power */ -#define C_POWER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_POWER)) +#define C_POWER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_POWER)) #define C_PWR (C_POWER) /* Consumer Reset */ -#define C_RESET (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RESET)) +#define C_RESET (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RESET)) /* Consumer Sleep */ -#define C_SLEEP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLEEP)) +#define C_SLEEP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLEEP)) /* Consumer Sleep Mode */ -#define C_SLEEP_MODE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLEEP_MODE)) +#define C_SLEEP_MODE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLEEP_MODE)) /* Consumer Menu */ -#define C_MENU (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU)) +#define C_MENU (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU)) /* Consumer Menu Pick */ -#define C_MENU_PICK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_PICK)) +#define C_MENU_PICK (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_PICK)) #define C_MENU_SELECT (C_MENU_PICK) /* Consumer Menu Up */ -#define C_MENU_UP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_UP)) +#define C_MENU_UP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_UP)) /* Consumer Menu Down */ -#define C_MENU_DOWN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_DOWN)) +#define C_MENU_DOWN (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_DOWN)) /* Consumer Menu Left */ -#define C_MENU_LEFT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_LEFT)) +#define C_MENU_LEFT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_LEFT)) /* Consumer Menu Right */ -#define C_MENU_RIGHT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_RIGHT)) +#define C_MENU_RIGHT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_RIGHT)) /* Consumer Menu Escape */ -#define C_MENU_ESCAPE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_ESCAPE)) +#define C_MENU_ESCAPE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_ESCAPE)) #define C_MENU_ESC (C_MENU_ESCAPE) /* Consumer Menu Value Increase */ -#define C_MENU_INCREASE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_VALUE_INCREASE)) +#define C_MENU_INCREASE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_VALUE_INCREASE)) #define C_MENU_INC (C_MENU_INCREASE) /* Consumer Menu Value Decrease */ -#define C_MENU_DECREASE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_VALUE_DECREASE)) +#define C_MENU_DECREASE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_VALUE_DECREASE)) #define C_MENU_DEC (C_MENU_DECREASE) /* Consumer Data On Screen */ -#define C_DATA_ON_SCREEN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DATA_ON_SCREEN)) +#define C_DATA_ON_SCREEN (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DATA_ON_SCREEN)) /* Consumer Closed Caption */ -#define C_CAPTIONS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CLOSED_CAPTION)) +#define C_CAPTIONS (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CLOSED_CAPTION)) #define C_SUBTITILES (C_CAPTIONS) /* Consumer Snapshot */ -#define C_SNAPSHOT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SNAPSHOT)) +#define C_SNAPSHOT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SNAPSHOT)) /* Consumer Picture-in-Picture Toggle */ -#define C_PIP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PICTURE_IN_PICTURE_TOGGLE)) +#define C_PIP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PICTURE_IN_PICTURE_TOGGLE)) /* Consumer Red Menu Button */ -#define C_RED_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RED_MENU_BUTTON)) +#define C_RED_BUTTON (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RED_MENU_BUTTON)) #define C_RED (C_RED_BUTTON) /* Consumer Green Menu Button */ -#define C_GREEN_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_GREEN_MENU_BUTTON)) +#define C_GREEN_BUTTON (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_GREEN_MENU_BUTTON)) #define C_GREEN (C_GREEN_BUTTON) /* Consumer Blue Menu Button */ -#define C_BLUE_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_BLUE_MENU_BUTTON)) +#define C_BLUE_BUTTON (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_BLUE_MENU_BUTTON)) #define C_BLUE (C_BLUE_BUTTON) /* Consumer Yellow Menu Button */ -#define C_YELLOW_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_YELLOW_MENU_BUTTON)) +#define C_YELLOW_BUTTON (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_YELLOW_MENU_BUTTON)) #define C_YELLOW (C_YELLOW_BUTTON) /* Consumer Aspect */ -#define C_ASPECT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_ASPECT)) +#define C_ASPECT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_ASPECT)) /* Consumer Display Brightness Increment */ #define C_BRIGHTNESS_INC \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_INCREMENT)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_INCREMENT)) #define C_BRI_INC (C_BRIGHTNESS_INC) #define C_BRI_UP (C_BRIGHTNESS_INC) /* Consumer Display Brightness Decrement */ #define C_BRIGHTNESS_DEC \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_DECREMENT)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_DECREMENT)) #define C_BRI_DEC (C_BRIGHTNESS_DEC) #define C_BRI_DN (C_BRIGHTNESS_DEC) /* Consumer Display Backlight Toggle */ #define C_BACKLIGHT_TOGGLE \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BACKLIGHT_TOGGLE)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BACKLIGHT_TOGGLE)) #define C_BKLT_TOG (C_BACKLIGHT_TOGGLE) /* Consumer Display Set Brightness to Minimum */ #define C_BRIGHTNESS_MINIMUM \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MINIMUM)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MINIMUM)) #define C_BRI_MIN (C_BRIGHTNESS_MINIMUM) /* Consumer Display Set Brightness to Maximum */ #define C_BRIGHTNESS_MAXIMUM \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MAXIMUM)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MAXIMUM)) #define C_BRI_MAX (C_BRIGHTNESS_MAXIMUM) /* Consumer Display Set Auto Brightness */ #define C_BRIGHTNESS_AUTO \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_AUTO_BRIGHTNESS)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_AUTO_BRIGHTNESS)) #define C_BRI_AUTO (C_BRIGHTNESS_AUTO) /* Consumer Mode Step */ -#define C_MEDIA_STEP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MODE_STEP)) +#define C_MEDIA_STEP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MODE_STEP)) #define C_MODE_STEP (C_MEDIA_STEP) /* Consumer Recall Last */ -#define C_RECALL_LAST (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RECALL_LAST)) +#define C_RECALL_LAST (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RECALL_LAST)) #define C_CHAN_LAST (C_RECALL_LAST) /* Consumer Media Select Computer */ -#define C_MEDIA_COMPUTER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_COMPUTER)) +#define C_MEDIA_COMPUTER \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_COMPUTER)) /* Consumer Media Select TV */ -#define C_MEDIA_TV (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TV)) +#define C_MEDIA_TV (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TV)) /* Consumer Media Select WWW */ -#define C_MEDIA_WWW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_WWW)) +#define C_MEDIA_WWW (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_WWW)) /* Consumer Media Select DVD */ -#define C_MEDIA_DVD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_DVD)) +#define C_MEDIA_DVD (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_DVD)) /* Consumer Media Select Telephone */ -#define C_MEDIA_PHONE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TELEPHONE)) +#define C_MEDIA_PHONE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TELEPHONE)) /* Consumer Media Select Program Guide */ -#define C_MEDIA_GUIDE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_PROGRAM_GUIDE)) +#define C_MEDIA_GUIDE \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_PROGRAM_GUIDE)) /* Consumer Media Select Video Phone */ #define C_MEDIA_VIDEOPHONE \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_VIDEO_PHONE)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_VIDEO_PHONE)) /* Consumer Media Select Games */ -#define C_MEDIA_GAMES (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_GAMES)) +#define C_MEDIA_GAMES (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_GAMES)) /* Consumer Media Select Messages */ -#define C_MEDIA_MESSAGES (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_MESSAGES)) +#define C_MEDIA_MESSAGES \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_MESSAGES)) /* Consumer Media Select CD */ -#define C_MEDIA_CD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_CD)) +#define C_MEDIA_CD (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_CD)) /* Consumer Media Select VCR */ -#define C_MEDIA_VCR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_VCR)) +#define C_MEDIA_VCR (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_VCR)) /* Consumer Media Select Tuner */ -#define C_MEDIA_TUNER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TUNER)) +#define C_MEDIA_TUNER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TUNER)) /* Consumer Quit */ -#define C_QUIT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_QUIT)) +#define C_QUIT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_QUIT)) /* Consumer Help */ -#define C_HELP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_HELP)) +#define C_HELP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_HELP)) /* Consumer Media Select Tape */ -#define C_MEDIA_TAPE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TAPE)) +#define C_MEDIA_TAPE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TAPE)) /* Consumer Media Select Cable */ -#define C_MEDIA_CABLE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_CABLE)) +#define C_MEDIA_CABLE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_CABLE)) /* Consumer Media Select Satellite */ -#define C_MEDIA_SATELLITE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_SATELLITE)) +#define C_MEDIA_SATELLITE \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_SATELLITE)) /* Consumer Media Select Home */ -#define C_MEDIA_HOME (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_HOME)) +#define C_MEDIA_HOME (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_HOME)) /* Consumer Channel Increment */ -#define C_CHANNEL_INC (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CHANNEL_INCREMENT)) +#define C_CHANNEL_INC (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CHANNEL_INCREMENT)) #define C_CHAN_INC (C_CHANNEL_INC) /* Consumer Channel Decrement */ -#define C_CHANNEL_DEC (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CHANNEL_DECREMENT)) +#define C_CHANNEL_DEC (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CHANNEL_DECREMENT)) #define C_CHAN_DEC (C_CHANNEL_DEC) /* Consumer VCR Plus */ -#define C_MEDIA_VCR_PLUS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VCR_PLUS)) +#define C_MEDIA_VCR_PLUS (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VCR_PLUS)) /* Consumer Play */ -#define C_PLAY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PLAY)) +#define C_PLAY (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PLAY)) /* Consumer Pause */ -#define C_PAUSE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PAUSE)) +#define C_PAUSE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PAUSE)) /* Consumer Record */ -#define C_RECORD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RECORD)) +#define C_RECORD (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RECORD)) #define C_REC (C_RECORD) /* Consumer Fast Forward */ -#define C_FAST_FORWARD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_FAST_FORWARD)) +#define C_FAST_FORWARD (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_FAST_FORWARD)) #define C_FF (C_FAST_FORWARD) /* Consumer Rewind */ -#define C_REWIND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_REWIND)) +#define C_REWIND (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_REWIND)) #define C_RW (C_REWIND) /* Consumer Scan Next Track */ -#define C_NEXT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SCAN_NEXT_TRACK)) +#define C_NEXT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SCAN_NEXT_TRACK)) #define M_NEXT (C_NEXT) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Scan Previous Track */ -#define C_PREVIOUS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SCAN_PREVIOUS_TRACK)) +#define C_PREVIOUS (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SCAN_PREVIOUS_TRACK)) #define C_PREV (C_PREVIOUS) #define M_PREV (C_PREVIOUS) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Stop */ -#define C_STOP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_STOP)) +#define C_STOP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_STOP)) #define M_STOP (C_STOP) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Eject */ -#define C_EJECT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_EJECT)) +#define C_EJECT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_EJECT)) #define M_EJCT (C_EJECT) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Random Play */ -#define C_RANDOM_PLAY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RANDOM_PLAY)) +#define C_RANDOM_PLAY (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RANDOM_PLAY)) #define C_SHUFFLE (C_RANDOM_PLAY) /* Consumer Repeat */ -#define C_REPEAT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_REPEAT)) +#define C_REPEAT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_REPEAT)) /* Consumer Slow Tracking */ -#define C_SLOW_TRACKING (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLOW_TRACKING)) +#define C_SLOW_TRACKING (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLOW_TRACKING)) #define C_SLOW2 (C_SLOW_TRACKING) /* Consumer Stop/Eject */ -#define C_STOP_EJECT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_STOP_EJECT)) +#define C_STOP_EJECT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_STOP_EJECT)) /* Consumer Play/Pause */ -#define C_PLAY_PAUSE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PLAY_PAUSE)) +#define C_PLAY_PAUSE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PLAY_PAUSE)) #define C_PP (C_PLAY_PAUSE) #define M_PLAY (C_PLAY_PAUSE) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Voice Command */ -#define C_VOICE_COMMAND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOICE_COMMAND)) +#define C_VOICE_COMMAND (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOICE_COMMAND)) /* Consumer Mute */ -#define C_MUTE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MUTE)) +#define C_MUTE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MUTE)) #define M_MUTE (C_MUTE) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Bass Boost */ -#define C_BASS_BOOST (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_BASS_BOOST)) +#define C_BASS_BOOST (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_BASS_BOOST)) /* Consumer Volume Increment */ -#define C_VOLUME_UP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOLUME_INCREMENT)) +#define C_VOLUME_UP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOLUME_INCREMENT)) #define C_VOL_UP (C_VOLUME_UP) #define M_VOLU (C_VOLUME_UP) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Volume Decrement */ -#define C_VOLUME_DOWN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOLUME_DECREMENT)) +#define C_VOLUME_DOWN (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOLUME_DECREMENT)) #define C_VOL_DN (C_VOLUME_DOWN) #define M_VOLD (C_VOLUME_DOWN) // WARNING: DEPRECATED (DO NOT USE) /* Consumer Slow */ -#define C_SLOW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLOW)) +#define C_SLOW (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLOW)) /* Consumer Alternate Audio Increment */ #define C_ALTERNATE_AUDIO_INCREMENT \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_ALTERNATE_AUDIO_INCREMENT)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_ALTERNATE_AUDIO_INCREMENT)) #define C_ALT_AUDIO_INC (C_ALTERNATE_AUDIO_INCREMENT) /* Consumer AL Consumer Control Configuration */ #define C_AL_CCC \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION)) /* Consumer AL Word Processor */ -#define C_AL_WORD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_WORD_PROCESSOR)) +#define C_AL_WORD (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_WORD_PROCESSOR)) /* Consumer AL Text Editor */ -#define C_AL_TEXT_EDITOR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TEXT_EDITOR)) +#define C_AL_TEXT_EDITOR (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TEXT_EDITOR)) /* Consumer AL Spreadsheet */ -#define C_AL_SPREADSHEET (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SPREADSHEET)) +#define C_AL_SPREADSHEET (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SPREADSHEET)) #define C_AL_SHEET (C_AL_SPREADSHEET) /* Consumer AL Graphics Editor */ -#define C_AL_GRAPHICS_EDITOR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_GRAPHICS_EDITOR)) +#define C_AL_GRAPHICS_EDITOR \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_GRAPHICS_EDITOR)) /* Consumer AL Presentation App */ -#define C_AL_PRESENTATION (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_PRESENTATION_APP)) +#define C_AL_PRESENTATION \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_PRESENTATION_APP)) /* Consumer AL Database App */ -#define C_AL_DATABASE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_DATABASE_APP)) +#define C_AL_DATABASE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_DATABASE_APP)) #define C_AL_DB (C_AL_DATABASE) /* Consumer AL Email Reader */ -#define C_AL_EMAIL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_EMAIL_READER)) +#define C_AL_EMAIL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_EMAIL_READER)) #define C_AL_MAIL (C_AL_EMAIL) /* Consumer AL Newsreader */ -#define C_AL_NEWS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NEWSREADER)) +#define C_AL_NEWS (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NEWSREADER)) /* Consumer AL Voicemail */ -#define C_AL_VOICEMAIL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_VOICEMAIL)) +#define C_AL_VOICEMAIL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_VOICEMAIL)) /* Consumer AL Contacts/Address Book */ -#define C_AL_CONTACTS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONTACTS_ADDRESS_BOOK)) +#define C_AL_CONTACTS \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONTACTS_ADDRESS_BOOK)) #define C_AL_ADDRESS_BOOK (C_AL_CONTACTS) /* Consumer AL Calendar/Schedule */ -#define C_AL_CALENDAR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CALENDAR_SCHEDULE)) +#define C_AL_CALENDAR (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CALENDAR_SCHEDULE)) #define C_AL_CAL (C_AL_CALENDAR) /* Consumer AL Task/Project Manager */ #define C_AL_TASK_MANAGER \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TASK_PROJECT_MANAGER)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TASK_PROJECT_MANAGER)) /* Consumer AL Log/Journal/Timecard */ -#define C_AL_JOURNAL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOG_JOURNAL_TIMECARD)) +#define C_AL_JOURNAL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOG_JOURNAL_TIMECARD)) /* Consumer AL Checkbook/Finance */ -#define C_AL_FINANCE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CHECKBOOK_FINANCE)) +#define C_AL_FINANCE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CHECKBOOK_FINANCE)) /* Consumer AL Calculator */ -#define C_AL_CALCULATOR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CALCULATOR)) +#define C_AL_CALCULATOR (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CALCULATOR)) #define C_AL_CALC (C_AL_CALCULATOR) /* Consumer AL A/V Capture/Playback */ #define C_AL_AV_CAPTURE_PLAYBACK \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_A_V_CAPTURE_PLAYBACK)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_A_V_CAPTURE_PLAYBACK)) /* Consumer AL Local Machine Browser */ #define C_AL_MY_COMPUTER \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOCAL_MACHINE_BROWSER)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOCAL_MACHINE_BROWSER)) /* Consumer AL Internet Browser */ -#define C_AL_WWW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INTERNET_BROWSER)) +#define C_AL_WWW (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INTERNET_BROWSER)) /* Consumer AL Network Chat */ -#define C_AL_NETWORK_CHAT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NETWORK_CHAT)) +#define C_AL_NETWORK_CHAT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NETWORK_CHAT)) #define C_AL_CHAT (C_AL_NETWORK_CHAT) /* Consumer AL Logoff */ -#define C_AL_LOGOFF (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOGOFF)) +#define C_AL_LOGOFF (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOGOFF)) /* Consumer AL Terminal Lock/Screensaver */ -#define C_AL_LOCK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TERMINAL_LOCK_SCREENSAVER)) +#define C_AL_LOCK \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TERMINAL_LOCK_SCREENSAVER)) #define C_AL_SCREENSAVER (C_AL_LOCK) #define C_AL_COFFEE (C_AL_LOCK) /* Consumer AL Control Panel */ -#define C_AL_CONTROL_PANEL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONTROL_PANEL)) +#define C_AL_CONTROL_PANEL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONTROL_PANEL)) /* Consumer AL Select Task/Application */ #define C_AL_SELECT_TASK \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SELECT_TASK_APPLICATION)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SELECT_TASK_APPLICATION)) /* Consumer AL Next Task/Application */ -#define C_AL_NEXT_TASK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NEXT_TASK_APPLICATION)) +#define C_AL_NEXT_TASK \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NEXT_TASK_APPLICATION)) /* Consumer AL Previous Task/Application */ #define C_AL_PREVIOUS_TASK \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_PREVIOUS_TASK_APPLICATION)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_PREVIOUS_TASK_APPLICATION)) #define C_AL_PREV_TASK (C_AL_PREVIOUS_TASK) /* Consumer AL Integrated Help Center */ -#define C_AL_HELP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INTEGRATED_HELP_CENTER)) +#define C_AL_HELP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INTEGRATED_HELP_CENTER)) /* Consumer AL Documents */ -#define C_AL_DOCUMENTS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_DOCUMENTS)) +#define C_AL_DOCUMENTS (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_DOCUMENTS)) #define C_AL_DOCS (C_AL_DOCUMENTS) /* Consumer AL Spell Check */ -#define C_AL_SPELLCHECK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SPELL_CHECK)) +#define C_AL_SPELLCHECK (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SPELL_CHECK)) #define C_AL_SPELL (C_AL_SPELLCHECK) /* Consumer AL Keyboard Layout */ -#define C_AL_KEYBOARD_LAYOUT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_KEYBOARD_LAYOUT)) +#define C_AL_KEYBOARD_LAYOUT \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_KEYBOARD_LAYOUT)) /* Consumer AL Screen Saver */ -#define C_AL_SCREEN_SAVER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SCREEN_SAVER)) +#define C_AL_SCREEN_SAVER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SCREEN_SAVER)) /* Consumer AL File Browser */ -#define C_AL_FILE_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_FILE_BROWSER)) +#define C_AL_FILE_BROWSER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_FILE_BROWSER)) #define C_AL_FILES (C_AL_FILE_BROWSER) /* Consumer AL Image Browser */ -#define C_AL_IMAGE_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_IMAGE_BROWSER)) +#define C_AL_IMAGE_BROWSER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_IMAGE_BROWSER)) #define C_AL_IMAGES (C_AL_IMAGE_BROWSER) /* Consumer AL Audio Browser */ -#define C_AL_AUDIO_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_AUDIO_BROWSER)) +#define C_AL_AUDIO_BROWSER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_AUDIO_BROWSER)) #define C_AL_AUDIO (C_AL_AUDIO_BROWSER) #define C_AL_MUSIC (C_AL_AUDIO_BROWSER) /* Consumer AL Movie Browser */ -#define C_AL_MOVIE_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_MOVIE_BROWSER)) +#define C_AL_MOVIE_BROWSER (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_MOVIE_BROWSER)) #define C_AL_MOVIES (C_AL_MOVIE_BROWSER) /* Consumer AL Instant Messaging */ #define C_AL_INSTANT_MESSAGING \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INSTANT_MESSAGING)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INSTANT_MESSAGING)) #define C_AL_IM (C_AL_INSTANT_MESSAGING) /* Consumer AL OEM Features/Tips/Tutorial Browser */ #define C_AL_OEM_FEATURES \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_OEM_FEATURES_TIPS_TUTORIAL_BROWSER)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_OEM_FEATURES_TIPS_TUTORIAL_BROWSER)) #define C_AL_TIPS (C_AL_OEM_FEATURES) #define C_AL_TUTORIAL (C_AL_OEM_FEATURES) /* Consumer AC New */ -#define C_AC_NEW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_NEW)) +#define C_AC_NEW (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_NEW)) /* Consumer AC Open */ -#define C_AC_OPEN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_OPEN)) +#define C_AC_OPEN (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_OPEN)) /* Consumer AC Close */ -#define C_AC_CLOSE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CLOSE)) +#define C_AC_CLOSE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CLOSE)) /* Consumer AC Exit */ -#define C_AC_EXIT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_EXIT)) +#define C_AC_EXIT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_EXIT)) /* Consumer AC Save */ -#define C_AC_SAVE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SAVE)) +#define C_AC_SAVE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SAVE)) /* Consumer AC Print */ -#define C_AC_PRINT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PRINT)) +#define C_AC_PRINT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PRINT)) /* Consumer AC Properties */ -#define C_AC_PROPERTIES (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PROPERTIES)) +#define C_AC_PROPERTIES (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PROPERTIES)) #define C_AC_PROPS (C_AC_PROPERTIES) /* Consumer AC Undo */ -#define C_AC_UNDO (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_UNDO)) +#define C_AC_UNDO (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_UNDO)) /* Consumer AC Copy */ -#define C_AC_COPY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_COPY)) +#define C_AC_COPY (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_COPY)) /* Consumer AC Cut */ -#define C_AC_CUT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CUT)) +#define C_AC_CUT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CUT)) /* Consumer AC Paste */ -#define C_AC_PASTE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PASTE)) +#define C_AC_PASTE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PASTE)) /* Consumer AC Find */ -#define C_AC_FIND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FIND)) +#define C_AC_FIND (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FIND)) /* Consumer AC Search */ -#define C_AC_SEARCH (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SEARCH)) +#define C_AC_SEARCH (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SEARCH)) /* Consumer AC Go To */ -#define C_AC_GOTO (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_GO_TO)) +#define C_AC_GOTO (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_GO_TO)) /* Consumer AC Home */ -#define C_AC_HOME (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_HOME)) +#define C_AC_HOME (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_HOME)) /* Consumer AC Back */ -#define C_AC_BACK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_BACK)) +#define C_AC_BACK (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_BACK)) /* Consumer AC Forward */ -#define C_AC_FORWARD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FORWARD)) +#define C_AC_FORWARD (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FORWARD)) /* Consumer AC Stop */ -#define C_AC_STOP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_STOP)) +#define C_AC_STOP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_STOP)) /* Consumer AC Refresh */ -#define C_AC_REFRESH (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REFRESH)) +#define C_AC_REFRESH (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REFRESH)) /* Consumer AC Bookmarks */ -#define C_AC_BOOKMARKS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_BOOKMARKS)) +#define C_AC_BOOKMARKS (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_BOOKMARKS)) #define C_AC_FAVORITES (C_AC_BOOKMARKS) #define C_AC_FAVOURITES (C_AC_BOOKMARKS) /* Consumer AC Zoom In */ -#define C_AC_ZOOM_IN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM_IN)) +#define C_AC_ZOOM_IN (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM_IN)) /* Consumer AC Zoom Out */ -#define C_AC_ZOOM_OUT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM_OUT)) +#define C_AC_ZOOM_OUT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM_OUT)) /* Consumer AC Zoom */ -#define C_AC_ZOOM (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM)) +#define C_AC_ZOOM (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM)) /* Consumer AC View Toggle */ -#define C_AC_VIEW_TOGGLE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_VIEW_TOGGLE)) +#define C_AC_VIEW_TOGGLE (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_VIEW_TOGGLE)) /* Consumer AC Scroll Up */ -#define C_AC_SCROLL_UP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SCROLL_UP)) +#define C_AC_SCROLL_UP (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SCROLL_UP)) /* Consumer AC Scroll Down */ -#define C_AC_SCROLL_DOWN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SCROLL_DOWN)) +#define C_AC_SCROLL_DOWN (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SCROLL_DOWN)) /* Consumer AC Edit */ -#define C_AC_EDIT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_EDIT)) +#define C_AC_EDIT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_EDIT)) /* Consumer AC Cancel */ -#define C_AC_CANCEL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CANCEL)) +#define C_AC_CANCEL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CANCEL)) /* Consumer AC Insert Mode */ -#define C_AC_INSERT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_INSERT_MODE)) +#define C_AC_INSERT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_INSERT_MODE)) #define C_AC_INS (C_AC_INSERT) /* Consumer AC Delete */ -#define C_AC_DEL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DELETE)) +#define C_AC_DEL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DELETE)) /* Consumer AC Redo/Repeat */ -#define C_AC_REDO (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REDO_REPEAT)) +#define C_AC_REDO (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REDO_REPEAT)) /* Consumer AC Reply */ -#define C_AC_REPLY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REPLY)) +#define C_AC_REPLY (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REPLY)) /* Consumer AC Forward Msg */ -#define C_AC_FORWARD_MAIL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FORWARD_MSG)) +#define C_AC_FORWARD_MAIL (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FORWARD_MSG)) /* Consumer AC Send */ -#define C_AC_SEND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SEND)) +#define C_AC_SEND (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SEND)) /* Consumer AC Desktop Show All Windows */ #define C_AC_DESKTOP_SHOW_ALL_WINDOWS \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_WINDOWS)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_WINDOWS)) /* Consumer Keyboard Input Assist Previous */ #define C_KEYBOARD_INPUT_ASSIST_PREVIOUS \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS)) #define C_KBIA_PREV (C_KEYBOARD_INPUT_ASSIST_PREVIOUS) /* Consumer Keyboard Input Assist Next */ #define C_KEYBOARD_INPUT_ASSIST_NEXT \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT)) #define C_KBIA_NEXT (C_KEYBOARD_INPUT_ASSIST_NEXT) /* Consumer Keyboard Input Assist Previous Group */ #define C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP)) #define C_KBIA_PREV_GRP (C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP) /* Consumer Keyboard Input Assist Next Group */ #define C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT_GROUP)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT_GROUP)) #define C_KBIA_NEXT_GRP (C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP) /* Consumer Keyboard Input Assist Accept */ #define C_KEYBOARD_INPUT_ASSIST_ACCEPT \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_ACCEPT)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_ACCEPT)) #define C_KBIA_ACCEPT (C_KEYBOARD_INPUT_ASSIST_ACCEPT) /* Consumer Keyboard Input Assist Cancel */ #define C_KEYBOARD_INPUT_ASSIST_CANCEL \ - (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_CANCEL)) + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_CANCEL)) #define C_KBIA_CANCEL (C_KEYBOARD_INPUT_ASSIST_CANCEL) diff --git a/app/include/zmk/events/keycode_state_changed.h b/app/include/zmk/events/keycode_state_changed.h index 466bbd76c55..8e60014f308 100644 --- a/app/include/zmk/events/keycode_state_changed.h +++ b/app/include/zmk/events/keycode_state_changed.h @@ -23,8 +23,8 @@ ZMK_EVENT_DECLARE(zmk_keycode_state_changed); static inline struct zmk_keycode_state_changed_event * zmk_keycode_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { - uint16_t page = HID_USAGE_PAGE(encoded) & 0xFF; - uint16_t id = HID_USAGE_ID(encoded); + uint16_t page = ZMK_HID_USAGE_PAGE(encoded) & 0xFF; + uint16_t id = ZMK_HID_USAGE_ID(encoded); uint8_t implicit_modifiers = 0x00; uint8_t explicit_modifiers = 0x00; diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index e23caff99d0..61c5fa80573 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -18,173 +18,77 @@ #define COLLECTION_REPORT 0x03 static const uint8_t zmk_hid_report_desc[] = { - /* USAGE_PAGE (Generic Desktop) */ - HID_GI_USAGE_PAGE, - HID_USAGE_GD, - /* USAGE (Keyboard) */ - HID_LI_USAGE, - HID_USAGE_GD_KEYBOARD, - /* COLLECTION (Application) */ - HID_MI_COLLECTION, - COLLECTION_APPLICATION, - /* REPORT ID (1) */ - HID_GI_REPORT_ID, - 0x01, - /* USAGE_PAGE (Keyboard/Keypad) */ - HID_GI_USAGE_PAGE, - HID_USAGE_KEY, - /* USAGE_MINIMUM (Keyboard LeftControl) */ - HID_LI_USAGE_MIN(1), - HID_USAGE_KEY_KEYBOARD_LEFTCONTROL, - /* USAGE_MAXIMUM (Keyboard Right GUI) */ - HID_LI_USAGE_MAX(1), - HID_USAGE_KEY_KEYBOARD_RIGHT_GUI, - /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), - 0x00, - /* LOGICAL_MAXIMUM (1) */ - HID_GI_LOGICAL_MAX(1), - 0x01, - - /* REPORT_SIZE (1) */ - HID_GI_REPORT_SIZE, - 0x01, - /* REPORT_COUNT (8) */ - HID_GI_REPORT_COUNT, - 0x08, + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), + HID_USAGE(HID_USAGE_GD_KEYBOARD), + HID_COLLECTION(HID_COLLECTION_APPLICATION), + HID_REPORT_ID(0x01), + HID_USAGE_PAGE(HID_USAGE_KEY), + HID_USAGE_MIN8(HID_USAGE_KEY_KEYBOARD_LEFTCONTROL), + HID_USAGE_MAX8(HID_USAGE_KEY_KEYBOARD_RIGHT_GUI), + HID_LOGICAL_MIN8(0x00), + HID_LOGICAL_MAX8(0x01), + + HID_REPORT_SIZE(0x01), + HID_REPORT_COUNT(0x08), /* INPUT (Data,Var,Abs) */ - HID_MI_INPUT, - 0x02, - - /* USAGE_PAGE (Keyboard/Keypad) */ - HID_GI_USAGE_PAGE, - HID_USAGE_KEY, - /* REPORT_SIZE (8) */ - HID_GI_REPORT_SIZE, - 0x08, - /* REPORT_COUNT (1) */ - HID_GI_REPORT_COUNT, - 0x01, + HID_INPUT(0x02), + + HID_USAGE_PAGE(HID_USAGE_KEY), + HID_REPORT_SIZE(0x08), + HID_REPORT_COUNT(0x01), /* INPUT (Cnst,Var,Abs) */ - HID_MI_INPUT, - 0x03, + HID_INPUT(0x03), - /* USAGE_PAGE (Keyboard/Keypad) */ - HID_GI_USAGE_PAGE, - HID_USAGE_KEY, + HID_USAGE_PAGE(HID_USAGE_KEY), #if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) - /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), - 0x00, - /* LOGICAL_MAXIMUM (1) */ - HID_GI_LOGICAL_MAX(1), - 0x01, - /* USAGE_MINIMUM (Reserved) */ - HID_LI_USAGE_MIN(1), - 0x00, - /* USAGE_MAXIMUM (Keyboard Application) */ - HID_LI_USAGE_MAX(1), - ZMK_HID_KEYBOARD_NKRO_MAX_USAGE, - /* REPORT_SIZE (8) */ - HID_GI_REPORT_SIZE, - 0x01, - /* REPORT_COUNT (6) */ - HID_GI_REPORT_COUNT, - ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1, + HID_LOGICAL_MIN8(0x00), + HID_LOGICAL_MAX8(0x01), + HID_USAGE_MIN8(0x00), + HID_USAGE_MAX8(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE), + HID_REPORT_SIZE(0x01), + HID_REPORT_COUNT(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1), /* INPUT (Data,Ary,Abs) */ - HID_MI_INPUT, - 0x02, + HID_INPUT(0x02), #elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) - /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), - 0x00, - /* LOGICAL_MAXIMUM (0xFF) */ - HID_GI_LOGICAL_MAX(1), - 0xFF, - /* USAGE_MINIMUM (Reserved) */ - HID_LI_USAGE_MIN(1), - 0x00, - /* USAGE_MAXIMUM (Keyboard Application) */ - HID_LI_USAGE_MAX(1), - 0xFF, - /* REPORT_SIZE (1) */ - HID_GI_REPORT_SIZE, - 0x08, - /* REPORT_COUNT (CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE) */ - HID_GI_REPORT_COUNT, - CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE, + HID_LOGICAL_MIN8(0x00), + HID_LOGICAL_MAX8(0xFF), + HID_USAGE_MIN8(0x00), + HID_USAGE_MAX8(0xFF), + HID_REPORT_SIZE(0x08), + HID_REPORT_COUNT(CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE), /* INPUT (Data,Ary,Abs) */ - HID_MI_INPUT, - 0x00, + HID_INPUT(0x00), #else #error "A proper HID report type must be selected" #endif - /* END_COLLECTION */ - HID_MI_COLLECTION_END, - /* USAGE_PAGE (Consumer) */ - HID_GI_USAGE_PAGE, - HID_USAGE_CONSUMER, - /* USAGE (Consumer Control) */ - HID_LI_USAGE, - HID_USAGE_CONSUMER_CONSUMER_CONTROL, - /* Consumer Page */ - HID_MI_COLLECTION, - COLLECTION_APPLICATION, - /* REPORT ID (1) */ - HID_GI_REPORT_ID, - 0x02, - /* USAGE_PAGE (Consumer) */ - HID_GI_USAGE_PAGE, - HID_USAGE_CONSUMER, + HID_END_COLLECTION, + HID_USAGE_PAGE(HID_USAGE_CONSUMER), + HID_USAGE(HID_USAGE_CONSUMER_CONSUMER_CONTROL), + HID_COLLECTION(HID_COLLECTION_APPLICATION), + HID_REPORT_ID(0x02), + HID_USAGE_PAGE(HID_USAGE_CONSUMER), #if IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC) - /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), - 0x00, - /* LOGICAL_MAXIMUM (0x00FF) - little endian, and requires two bytes because logical max is - signed */ - HID_GI_LOGICAL_MAX(2), - 0xFF, - 0x00, - HID_LI_USAGE_MIN(1), - 0x00, - /* USAGE_MAXIMUM (0xFF) */ - HID_LI_USAGE_MAX(1), - 0xFF, - /* INPUT (Data,Ary,Abs) */ - /* REPORT_SIZE (8) */ - HID_GI_REPORT_SIZE, - 0x08, + HID_LOGICAL_MIN8(0x00), + HID_LOGICAL_MAX16(0xFF, 0x00), + HID_USAGE_MIN8(0x00), + HID_USAGE_MAX8(0xFF), + HID_REPORT_SIZE(0x08), #elif IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL) - /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), - 0x00, - /* LOGICAL_MAXIMUM (0xFFFF) */ - HID_GI_LOGICAL_MAX(2), - 0xFF, - 0xFF, - HID_LI_USAGE_MIN(1), - 0x00, - /* USAGE_MAXIMUM (0xFFFF) */ - HID_LI_USAGE_MAX(2), - 0xFF, - 0xFF, - /* INPUT (Data,Ary,Abs) */ - /* REPORT_SIZE (16) */ - HID_GI_REPORT_SIZE, - 0x10, + HID_LOGICAL_MIN8(0x00), + HID_LOGICAL_MAX16(0xFF, 0xFF), + HID_USAGE_MIN8(0x00), + HID_USAGE_MAX16(0xFF, 0xFF), + HID_REPORT_SIZE(0x10), #else #error "A proper consumer HID report usage range must be selected" #endif - /* REPORT_COUNT (CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE) */ - HID_GI_REPORT_COUNT, - CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE, - HID_MI_INPUT, - 0x00, - /* END COLLECTION */ - HID_MI_COLLECTION_END, + HID_REPORT_COUNT(CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE), + /* INPUT (Data,Ary,Abs) */ + HID_INPUT(0x00), + HID_END_COLLECTION, }; // struct zmk_hid_boot_report diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 45e3d9d9a37..61f2efca85a 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -162,8 +162,8 @@ static int behavior_caps_word_init(const struct device *dev) { #define CAPS_WORD_LABEL(i, _n) DT_INST_LABEL(i) #define PARSE_BREAK(i) \ - {.page = (HID_USAGE_PAGE(i) & 0xFF), \ - .id = HID_USAGE_ID(i), \ + {.page = (ZMK_HID_USAGE_PAGE(i) & 0xFF), \ + .id = ZMK_HID_USAGE_ID(i), \ .implicit_modifiers = SELECT_MODS(i)}, #define BREAK_ITEM(i, n) PARSE_BREAK(DT_INST_PROP_BY_IDX(n, continue_list, i)) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 7909e1af941..5b496c0f8bd 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -198,8 +198,8 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { } if (strcmp(sticky_key->config->behavior.behavior_dev, "KEY_PRESS") == 0 && - HID_USAGE_ID(sticky_key->param1) == ev->keycode && - (HID_USAGE_PAGE(sticky_key->param1) & 0xFF) == ev->usage_page && + ZMK_HID_USAGE_ID(sticky_key->param1) == ev->keycode && + (ZMK_HID_USAGE_PAGE(sticky_key->param1) & 0xFF) == ev->usage_page && SELECT_MODS(sticky_key->param1) == ev->implicit_modifiers) { // don't catch key down events generated by the sticky key behavior itself continue; From 3528e1b49775f1ed0a59847640f6710e18d351f8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:18:03 +0000 Subject: [PATCH 0321/1130] refactor: Move to newer API for IO channels. See: https://docs.zephyrproject.org/latest/releases/release-notes-2.6.html#api-changes --- app/drivers/sensor/battery/battery_voltage_divider.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/drivers/sensor/battery/battery_voltage_divider.c b/app/drivers/sensor/battery/battery_voltage_divider.c index 8981fb3a150..484ca4fc4e6 100644 --- a/app/drivers/sensor/battery/battery_voltage_divider.c +++ b/app/drivers/sensor/battery/battery_voltage_divider.c @@ -18,7 +18,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct io_channel_config { - const char *label; uint8_t channel; }; @@ -119,10 +118,8 @@ static int bvd_init(const struct device *dev) { struct bvd_data *drv_data = dev->data; const struct bvd_config *drv_cfg = dev->config; - drv_data->adc = device_get_binding(drv_cfg->io_channel.label); - if (drv_data->adc == NULL) { - LOG_ERR("ADC %s failed to retrieve", drv_cfg->io_channel.label); + LOG_ERR("ADC failed to retrieve ADC driver"); return -ENODEV; } @@ -170,12 +167,12 @@ static int bvd_init(const struct device *dev) { return rc; } -static struct bvd_data bvd_data; +static struct bvd_data bvd_data = {.adc = DEVICE_DT_GET(DT_IO_CHANNELS_CTLR(DT_DRV_INST(0)))}; + static const struct bvd_config bvd_cfg = { .io_channel = { - DT_INST_IO_CHANNELS_LABEL(0), - DT_INST_IO_CHANNELS_INPUT(0), + DT_IO_CHANNELS_INPUT(DT_DRV_INST(0)), }, #if DT_INST_NODE_HAS_PROP(0, power_gpios) .power_gpios = From 6287819fccf0d208822f21fd14204e649149f304 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:21:30 +0000 Subject: [PATCH 0322/1130] refactor: Move to USB_DEVICE_STACK symbol. See: https://docs.zephyrproject.org/latest/releases/release-notes-2.7.html#changes-in-this-release --- app/CMakeLists.txt | 4 ++-- app/Kconfig | 4 ++-- app/boards/arm/bluemicro840/Kconfig.defconfig | 7 ++----- app/boards/arm/nice60/Kconfig.defconfig | 7 ++----- app/boards/arm/nice_nano/Kconfig.defconfig | 7 ++----- app/boards/arm/nrf52840_m2/Kconfig.defconfig | 7 ++----- app/boards/arm/nrfmicro/Kconfig.defconfig | 7 ++----- app/src/display/widgets/battery_status.c | 14 +++++++------- app/src/display/widgets/output_status.c | 2 +- app/src/power.c | 4 ++-- 10 files changed, 24 insertions(+), 39 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 0d547fbeb92..5f8dace8752 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -42,7 +42,7 @@ target_sources(app PRIVATE src/events/sensor_event.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/ble_active_profile_changed.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/battery_state_changed.c) -target_sources_ifdef(CONFIG_USB app PRIVATE src/events/usb_conn_state_changed.c) +target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) @@ -78,7 +78,7 @@ endif() if (CONFIG_ZMK_SPLIT_BLE AND CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/split/bluetooth/central.c) endif() -target_sources_ifdef(CONFIG_USB app PRIVATE src/usb.c) +target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/usb.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/hog.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/backlight.c) diff --git a/app/Kconfig b/app/Kconfig index 81637336ef7..948eaeff79f 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -422,7 +422,7 @@ menu "Advanced" menu "Initialization Priorities" -if USB +if USB_DEVICE_STACK config ZMK_USB_INIT_PRIORITY int "USB Init Priority" @@ -526,7 +526,7 @@ config KERNEL_BIN_NAME config REBOOT default y -config USB +config USB_DEVICE_STACK default y if HAS_HW_NRF_USBD config ZMK_WPM diff --git a/app/boards/arm/bluemicro840/Kconfig.defconfig b/app/boards/arm/bluemicro840/Kconfig.defconfig index 2b55e17c0c4..bc68f311eb9 100644 --- a/app/boards/arm/bluemicro840/Kconfig.defconfig +++ b/app/boards/arm/bluemicro840/Kconfig.defconfig @@ -8,15 +8,12 @@ if BOARD_BLUEMICRO840_V1 config BOARD default "bluemicro840_v1" -if USB +if USB_DEVICE_STACK config USB_NRFX default y -config USB_DEVICE_STACK - default y - -endif # USB +endif # USB_DEVICE_STACK config BT_CTLR default BT diff --git a/app/boards/arm/nice60/Kconfig.defconfig b/app/boards/arm/nice60/Kconfig.defconfig index 81a7c035c0a..42d417aba03 100644 --- a/app/boards/arm/nice60/Kconfig.defconfig +++ b/app/boards/arm/nice60/Kconfig.defconfig @@ -6,15 +6,12 @@ if BOARD_NICE60 config ZMK_KEYBOARD_NAME default "nice!60" -if USB +if USB_DEVICE_STACK config USB_NRFX default y -config USB_DEVICE_STACK - default y - -endif # USB +endif # USB_DEVICE_STACK config BT_CTLR default BT diff --git a/app/boards/arm/nice_nano/Kconfig.defconfig b/app/boards/arm/nice_nano/Kconfig.defconfig index 876002bffa7..245716534ee 100644 --- a/app/boards/arm/nice_nano/Kconfig.defconfig +++ b/app/boards/arm/nice_nano/Kconfig.defconfig @@ -6,15 +6,12 @@ if BOARD_NICE_NANO || BOARD_NICE_NANO_V2 config BOARD default "nice_nano" -if USB +if USB_DEVICE_STACK config USB_NRFX default y -config USB_DEVICE_STACK - default y - -endif # USB +endif # USB_DEVICE_STACK config BT_CTLR default BT diff --git a/app/boards/arm/nrf52840_m2/Kconfig.defconfig b/app/boards/arm/nrf52840_m2/Kconfig.defconfig index f3e1f0eb315..4e1679bae02 100644 --- a/app/boards/arm/nrf52840_m2/Kconfig.defconfig +++ b/app/boards/arm/nrf52840_m2/Kconfig.defconfig @@ -6,15 +6,12 @@ if BOARD_NRF52840_M2 config BOARD default "nrf52480_m2" -if USB +if USB_DEVICE_STACK config USB_NRFX default y -config USB_DEVICE_STACK - default y - -endif # USB +endif # USB_DEVICE_STACK config BT_CTLR default BT diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index a3c02c2241e..754a430ed30 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -8,15 +8,12 @@ if BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 config BOARD default "nrfmicro" -if USB +if USB_DEVICE_STACK config USB_NRFX default y -config USB_DEVICE_STACK - default y - -endif # USB +endif # USB_DEVICE_STACK config BT_CTLR default BT diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 362bdaa227b..d74cc8ed4f4 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -21,7 +21,7 @@ static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); struct battery_status_state { uint8_t level; -#if IS_ENABLED(CONFIG_USB) +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) bool usb_present; #endif }; @@ -31,11 +31,11 @@ static void set_battery_symbol(lv_obj_t *label, struct battery_status_state stat uint8_t level = state.level; -#if IS_ENABLED(CONFIG_USB) +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) if (state.usb_present) { strcpy(text, LV_SYMBOL_CHARGE); } -#endif /* IS_ENABLED(CONFIG_USB) */ +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ if (level > 95) { strcat(text, LV_SYMBOL_BATTERY_FULL); @@ -59,9 +59,9 @@ void battery_status_update_cb(struct battery_status_state state) { static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { return (struct battery_status_state) { .level = bt_bas_get_battery_level(), -#if IS_ENABLED(CONFIG_USB) +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), -#endif /* IS_ENABLED(CONFIG_USB) */ +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ }; } @@ -69,9 +69,9 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_battery_status, struct battery_status_state, battery_status_update_cb, battery_status_get_state) ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); -#if IS_ENABLED(CONFIG_USB) +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); -#endif /* IS_ENABLED(CONFIG_USB) */ +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent) { widget->obj = lv_label_create(parent, NULL); diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 89993c69cb2..fe99ac9659b 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -73,7 +73,7 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, output_status_update_cb, get_state) ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); -#if defined(CONFIG_USB) +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); #endif #if defined(CONFIG_ZMK_BLE) diff --git a/app/src/power.c b/app/src/power.c index 47ef3a3b52b..1803f62ccae 100644 --- a/app/src/power.c +++ b/app/src/power.c @@ -16,11 +16,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include bool is_usb_power_present() { -#ifdef CONFIG_USB +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) return zmk_usb_is_powered(); #else return false; -#endif /* CONFIG_USB */ +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ } struct pm_state_info pm_policy_next_state(int32_t ticks) { From 79ab60dfe588527beaa1c32e4cc1a8ab83774d97 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:22:46 +0000 Subject: [PATCH 0323/1130] refactor: Move to new PM API/Kconfig settings. --- app/CMakeLists.txt | 1 - app/Kconfig | 4 ---- app/src/activity.c | 16 ++++++++++++++-- app/src/power.c | 34 ---------------------------------- 4 files changed, 14 insertions(+), 41 deletions(-) delete mode 100644 app/src/power.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 5f8dace8752..b760389fff3 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -22,7 +22,6 @@ zephyr_linker_sources(RODATA include/linker/zmk-events.ld) # Add your source file to the "app" target. This must come after # find_package(Zephyr) which defines the target. target_include_directories(app PRIVATE include) -target_sources_ifdef(CONFIG_ZMK_SLEEP app PRIVATE src/power.c) target_sources(app PRIVATE src/stdlib.c) target_sources(app PRIVATE src/activity.c) target_sources(app PRIVATE src/kscan.c) diff --git a/app/Kconfig b/app/Kconfig index 948eaeff79f..8be741ba27f 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -372,10 +372,6 @@ config ZMK_SLEEP if ZMK_SLEEP -choice SYS_PM_POLICY - default PM_POLICY_APP -endchoice - config PM_DEVICE default y diff --git a/app/src/activity.c b/app/src/activity.c index f31e608dbc5..1fa75eb59b1 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include @@ -20,6 +20,18 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) +#include +#endif + +bool is_usb_power_present() { +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + return zmk_usb_is_powered(); +#else + return false; +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ +} + static enum zmk_activity_state activity_state; static uint32_t activity_last_uptime; @@ -55,7 +67,7 @@ void activity_work_handler(struct k_work *work) { int32_t current = k_uptime_get(); int32_t inactive_time = current - activity_last_uptime; #if IS_ENABLED(CONFIG_ZMK_SLEEP) - if (inactive_time > MAX_SLEEP_MS) { + if (inactive_time > MAX_SLEEP_MS && !is_usb_power_present()) { // Put devices in low power mode before sleeping pm_power_state_force((struct pm_state_info){PM_STATE_STANDBY, 0, 0}); set_state(ZMK_ACTIVITY_SLEEP); diff --git a/app/src/power.c b/app/src/power.c deleted file mode 100644 index 1803f62ccae..00000000000 --- a/app/src/power.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#include -#include -#include - -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -#include -#include - -bool is_usb_power_present() { -#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) - return zmk_usb_is_powered(); -#else - return false; -#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ -} - -struct pm_state_info pm_policy_next_state(int32_t ticks) { - if (zmk_activity_get_state() == ZMK_ACTIVITY_SLEEP && !is_usb_power_present()) { - return (struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}; - } - - return (struct pm_state_info){PM_STATE_ACTIVE, 0, 0}; -} - -__weak bool pm_policy_low_power_devices(enum pm_state state) { return pm_is_sleep_state(state); } From 2c5d5fde51fd392be283770725f78b10c67753f2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:23:17 +0000 Subject: [PATCH 0324/1130] refactor: `k_work_queue` API updates. --- app/src/behaviors/behavior_hold_tap.c | 8 ++++---- app/src/behaviors/behavior_sticky_key.c | 10 +++++----- app/src/combo.c | 2 +- app/src/display/main.c | 6 +++--- app/src/hog.c | 5 +++-- app/src/split/bluetooth/central.c | 6 +++--- app/src/split/bluetooth/service.c | 6 ++++-- 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 548d6ef87bc..3bb7539c2e3 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -71,7 +71,7 @@ struct active_hold_tap { int64_t timestamp; enum status status; const struct behavior_hold_tap_config *config; - struct k_delayed_work work; + struct k_work_delayable work; bool work_is_cancelled; // initialized to -1, which is to be interpreted as "no other key has been pressed yet" @@ -522,7 +522,7 @@ static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, // if this behavior was queued we have to adjust the timer to only // wait for the remaining time. int32_t tapping_term_ms_left = (hold_tap->timestamp + cfg->tapping_term_ms) - k_uptime_get(); - k_delayed_work_submit(&hold_tap->work, K_MSEC(tapping_term_ms_left)); + k_work_schedule(&hold_tap->work, K_MSEC(tapping_term_ms_left)); return ZMK_BEHAVIOR_OPAQUE; } @@ -537,7 +537,7 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, // If these events were queued, the timer event may be queued too late or not at all. // We insert a timer event before the TH_KEY_UP event to verify. - int work_cancel_result = k_delayed_work_cancel(&hold_tap->work); + int work_cancel_result = k_work_cancel_delayable(&hold_tap->work); if (event.timestamp > (hold_tap->timestamp + hold_tap->config->tapping_term_ms)) { decide_hold_tap(hold_tap, HT_TIMER_EVENT); } @@ -666,7 +666,7 @@ static int behavior_hold_tap_init(const struct device *dev) { if (init_first_run) { for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { - k_delayed_work_init(&active_hold_taps[i].work, behavior_hold_tap_timer_work_handler); + k_work_init_delayable(&active_hold_taps[i].work, behavior_hold_tap_timer_work_handler); active_hold_taps[i].position = ZMK_BHV_HOLD_TAP_POSITION_NOT_USED; } } diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 5b496c0f8bd..aa069a35a9b 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -44,7 +44,7 @@ struct active_sticky_key { bool timer_started; bool timer_cancelled; int64_t release_at; - struct k_delayed_work release_timer; + struct k_work_delayable release_timer; // usage page and keycode for the key that is being modified by this sticky key uint8_t modified_key_usage_page; uint32_t modified_key_keycode; @@ -119,7 +119,7 @@ static inline int release_sticky_key_behavior(struct active_sticky_key *sticky_k } static int stop_timer(struct active_sticky_key *sticky_key) { - int timer_cancel_result = k_delayed_work_cancel(&sticky_key->release_timer); + int timer_cancel_result = k_work_cancel_delayable(&sticky_key->release_timer); if (timer_cancel_result == -EINPROGRESS) { // too late to cancel, we'll let the timer handler clear up. sticky_key->timer_cancelled = true; @@ -168,7 +168,7 @@ static int on_sticky_key_binding_released(struct zmk_behavior_binding *binding, // adjust timer in case this behavior was queued by a hold-tap int32_t ms_left = sticky_key->release_at - k_uptime_get(); if (ms_left > 0) { - k_delayed_work_submit(&sticky_key->release_timer, K_MSEC(ms_left)); + k_work_schedule(&sticky_key->release_timer, K_MSEC(ms_left)); } return ZMK_BEHAVIOR_OPAQUE; } @@ -268,8 +268,8 @@ static int behavior_sticky_key_init(const struct device *dev) { static bool init_first_run = true; if (init_first_run) { for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { - k_delayed_work_init(&active_sticky_keys[i].release_timer, - behavior_sticky_key_timer_handler); + k_work_init_delayable(&active_sticky_keys[i].release_timer, + behavior_sticky_key_timer_handler); active_sticky_keys[i].position = ZMK_BHV_STICKY_KEY_POSITION_FREE; } } diff --git a/app/src/combo.c b/app/src/combo.c index 2479057e45f..13ed1709215 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -389,7 +389,7 @@ static void update_timeout_task() { k_work_cancel_delayable(&timeout_task); return; } - if (k_work_schedule(&timeout_task, K_MSEC(first_timeout - k_uptime_get())) == 0) { + if (k_work_schedule(&timeout_task, K_MSEC(first_timeout - k_uptime_get())) >= 0) { timeout_task_timeout_at = first_timeout; } } diff --git a/app/src/display/main.c b/app/src/display/main.c index 57fab2b0729..5dfad910a4e 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -95,9 +95,9 @@ int zmk_display_init() { } #if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) - k_work_q_start(&display_work_q, display_work_stack_area, - K_THREAD_STACK_SIZEOF(display_work_stack_area), - CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY); + k_work_queue_start(&display_work_q, display_work_stack_area, + K_THREAD_STACK_SIZEOF(display_work_stack_area), + CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY, NULL); #endif screen = zmk_display_status_screen(); diff --git a/app/src/hog.c b/app/src/hog.c index e8aceca3280..3dd3e874a56 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -262,8 +262,9 @@ int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *report) { }; int zmk_hog_init(const struct device *_arg) { - k_work_q_start(&hog_work_q, hog_q_stack, K_THREAD_STACK_SIZEOF(hog_q_stack), - CONFIG_ZMK_BLE_THREAD_PRIORITY); + static const struct k_work_queue_config queue_config = {.name = "HID Over GATT Send Work"}; + k_work_queue_start(&hog_work_q, hog_q_stack, K_THREAD_STACK_SIZEOF(hog_q_stack), + CONFIG_ZMK_BLE_THREAD_PRIORITY, &queue_config); return 0; } diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 8a0e79eaa00..07ab35a0d77 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -562,9 +562,9 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi } int zmk_split_bt_central_init(const struct device *_arg) { - k_work_q_start(&split_central_split_run_q, split_central_split_run_q_stack, - K_THREAD_STACK_SIZEOF(split_central_split_run_q_stack), - CONFIG_ZMK_BLE_THREAD_PRIORITY); + k_work_queue_start(&split_central_split_run_q, split_central_split_run_q_stack, + K_THREAD_STACK_SIZEOF(split_central_split_run_q_stack), + CONFIG_ZMK_BLE_THREAD_PRIORITY, NULL); bt_conn_cb_register(&conn_callbacks); return start_scan(); diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index 7de78506fce..5da5401d682 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -152,8 +152,10 @@ int zmk_split_bt_position_released(uint8_t position) { } int service_init(const struct device *_arg) { - k_work_q_start(&service_work_q, service_q_stack, K_THREAD_STACK_SIZEOF(service_q_stack), - CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY); + static const struct k_work_queue_config queue_config = { + .name = "Split Peripheral Notification Queue"}; + k_work_queue_start(&service_work_q, service_q_stack, K_THREAD_STACK_SIZEOF(service_q_stack), + CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY, &queue_config); return 0; } From c5ab8a9444a4ab0170887d776c1b5c601ce776fa Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 04:23:50 +0000 Subject: [PATCH 0325/1130] refactor: Move the DT based CDC ACM setup. --- app/Kconfig | 9 --------- app/boards/arm/bdn9/bdn9_rev2.dts | 5 +++++ app/boards/arm/bluemicro840/bluemicro840_v1.dts | 5 +++++ app/boards/arm/bt60/bt60.dtsi | 5 +++++ app/boards/arm/dz60rgb/dz60rgb_rev1.dts | 5 +++++ app/boards/arm/ferris/ferris_rev02.dts | 5 +++++ app/boards/arm/mikoto/mikoto_520.dts | 5 +++++ app/boards/arm/nice60/nice60.dts | 5 +++++ app/boards/arm/nice_nano/nice_nano.dtsi | 7 ++++++- app/boards/arm/nrf52840_m2/nrf52840_m2.dts | 5 +++++ app/boards/arm/nrfmicro/nrfmicro_11.dts | 5 +++++ app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 5 +++++ app/boards/arm/nrfmicro/nrfmicro_13.dts | 5 +++++ app/boards/arm/planck/planck_rev6.dts | 7 ++++++- app/boards/arm/s40nc/s40nc.dts | 5 +++++ 15 files changed, 72 insertions(+), 11 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 8be741ba27f..b60999ba739 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -477,15 +477,6 @@ config ZMK_LOG_LEVEL config USB_CDC_ACM_RINGBUF_SIZE default 1024 -config USB_CDC_ACM_DEVICE_NAME - default "CDC_ACM" - -config USB_CDC_ACM_DEVICE_COUNT - default 1 - -config UART_CONSOLE_ON_DEV_NAME - default "CDC_ACM_0" - config LOG_BUFFER_SIZE default 8192 diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index 43854a166d3..c005be17893 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -14,6 +14,7 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan; /* TODO: Enable once the GPIO bitbanging driver supports STM32 zmk,underglow = &led_strip; @@ -82,6 +83,10 @@ &usb { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &rtc { diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index 933df570842..7f2db85bde8 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -73,6 +74,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index d5109e76f62..e684bc1d44f 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -84,6 +85,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts index 1e2755d89f6..e2730d21124 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts @@ -16,6 +16,7 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -67,6 +68,10 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC( &usb { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 848760fa757..45c57dffd99 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -17,6 +17,7 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan; zmk,matrix_transform = &transform; /* TODO: Enable once we support the IC for underglow @@ -118,6 +119,10 @@ &rtc { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index de831c54069..5ce1764063f 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -72,6 +73,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index f50f94a392f..20f2a1a7a1a 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; zmk,underglow = &led_strip; @@ -128,6 +129,10 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index 45f0e31dd04..52b9261207f 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -15,6 +15,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -56,13 +57,17 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { /* * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + * http: //docs.zephyrproject.org/latest/devices/dts/flash_partitions.html */ partitions { compatible = "fixed-partitions"; diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts index 6b613a1c90a..5ea852e965c 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts @@ -15,6 +15,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -54,6 +55,10 @@ &usbd { compatible = "nordic,nrf-usbd"; status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 0dd8e8ebb68..82951b5f312 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -59,6 +60,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index deea41fc22c..fdfba507034 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -59,6 +60,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index bb40f3d0486..d60417fdb78 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; }; leds { @@ -71,6 +72,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index 27d0dafc2a0..ea45f33b149 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -15,8 +15,9 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; - zmk,matrix_transform = &layout_grid_transform; + zmk,matrix_transform = &layout_grid_transform; }; kscan0: kscan { @@ -83,6 +84,10 @@ layout_2x2u_transform: &usb { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index 58e0c2deccd..67a3c293350 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -16,6 +16,7 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -95,6 +96,10 @@ &usbd { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { From 8afe12415378bcc59d34ee86b0f2f6d84edc4ce5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 14:41:43 -0400 Subject: [PATCH 0326/1130] fix(tests): Fix snapshots to account for formatting changes. --- .../keycode_events.snapshot | 10 ++--- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../combos-and-holdtaps-2/native_posix.keymap | 10 ++--- .../layer-filter-0/keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 40 +++++++++---------- .../keycode_events.snapshot | 16 ++++---- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 32 +++++++-------- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../tri-layer/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 16 ++++---- .../keycode_events.snapshot | 4 +- .../2-dn-timer-up/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../6-retro-tap/keycode_events.snapshot | 4 +- .../2-dn-timer-up/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../many-nested/keycode_events.snapshot | 16 ++++---- .../2-dn-timer-up/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../6-retro-tap/keycode_events.snapshot | 4 +- .../2-dn-timer-up/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../2-dn-timer-up/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../6-nested-timeouts/keycode_events.snapshot | 8 ++-- .../2-dn-timer-up/keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- .../press-release/keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 12 +++--- .../keycode_events.snapshot | 16 ++++---- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 4 +- app/tests/none/normal/native_posix_64.keymap | 8 ++++ .../10-callum-mods/keycode_events.snapshot | 8 ++-- .../10-sl-sl-kp/keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 8 ++-- .../keycode_events.snapshot | 8 ++-- .../9-sk-dn-up-dn-up/keycode_events.snapshot | 8 ++-- .../2a-hold1/keycode_events.snapshot | 4 +- .../2b-hold2/keycode_events.snapshot | 4 +- .../2c-hold3/keycode_events.snapshot | 4 +- .../3a-tap-int-mid/keycode_events.snapshot | 4 +- .../3b-tap-int-seq/keycode_events.snapshot | 4 +- .../3c-tap-int-after/keycode_events.snapshot | 4 +- .../3d-hold-int-mid/keycode_events.snapshot | 4 +- .../3e-hold-int-seq/keycode_events.snapshot | 4 +- .../3f-hold-int-after/keycode_events.snapshot | 4 +- .../5a-tdint-mid/keycode_events.snapshot | 4 +- .../5b-tdint-seq/keycode_events.snapshot | 4 +- .../5c-tdint-after/keycode_events.snapshot | 4 +- .../5d-tdint-multiple/keycode_events.snapshot | 8 ++-- .../to-layer/normal/keycode_events.snapshot | 4 +- .../early-key-release/keycode_events.snapshot | 4 +- .../normal/keycode_events.snapshot | 4 +- 94 files changed, 300 insertions(+), 292 deletions(-) create mode 100644 app/tests/none/normal/native_posix_64.keymap diff --git a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot index fe705ba42cb..8910db99690 100644 --- a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot +++ b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/keycode_events.snapshot @@ -3,12 +3,12 @@ pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 press: Modifiers set to 0x02 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 -caps_includelist: Comparing with 0x07 - 0x2d (with implicit mods: 0x02) -caps_includelist: Comparing with 0x07 - 0x2d (with implicit mods: 0x00) -caps_includelist: Continuing capsword, found included usage: 0x07 - 0x2d -pressed: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +caps_includelist: Comparing with 0x07 - 0x2D (with implicit mods: 0x02) +caps_includelist: Comparing with 0x07 - 0x2D (with implicit mods: 0x00) +caps_includelist: Continuing capsword, found included usage: 0x07 - 0x2D +pressed: usage_page 0x07 keycode 0x2D implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x00 -released: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x2D implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 enhance_usage: Enhancing usage 0x04 with modifiers: 0x02 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 diff --git a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot index eb24c4bbc0b..f479db1219a 100644 --- a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot +++ b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/keycode_events.snapshot @@ -3,9 +3,9 @@ pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00 press: Modifiers set to 0x02 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 -pressed: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x2D implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x00 -released: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x2D implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x00 diff --git a/app/tests/combo/combos-and-holdtaps-0/keycode_events.snapshot b/app/tests/combo/combos-and-holdtaps-0/keycode_events.snapshot index e1c02dae875..16e8744e25a 100644 --- a/app/tests/combo/combos-and-holdtaps-0/keycode_events.snapshot +++ b/app/tests/combo/combos-and-holdtaps-0/keycode_events.snapshot @@ -1,4 +1,4 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/combos-and-holdtaps-1/keycode_events.snapshot b/app/tests/combo/combos-and-holdtaps-1/keycode_events.snapshot index ff060370a63..257d7e34424 100644 --- a/app/tests/combo/combos-and-holdtaps-1/keycode_events.snapshot +++ b/app/tests/combo/combos-and-holdtaps-1/keycode_events.snapshot @@ -1,4 +1,4 @@ -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/combos-and-holdtaps-2/keycode_events.snapshot b/app/tests/combo/combos-and-holdtaps-2/keycode_events.snapshot index 325549fbe5d..7a2ec83f150 100644 --- a/app/tests/combo/combos-and-holdtaps-2/keycode_events.snapshot +++ b/app/tests/combo/combos-and-holdtaps-2/keycode_events.snapshot @@ -1,2 +1,2 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/combos-and-holdtaps-2/native_posix.keymap b/app/tests/combo/combos-and-holdtaps-2/native_posix.keymap index f8dbe450c62..7a78980874b 100644 --- a/app/tests/combo/combos-and-holdtaps-2/native_posix.keymap +++ b/app/tests/combo/combos-and-holdtaps-2/native_posix.keymap @@ -26,12 +26,12 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; + label = "Default keymap"; default_layer { bindings = < - &mt LEFT_CONTROL A &mt RIGHT_CONTROL B - &none &none + &mt LEFT_CONTROL A &mt RIGHT_CONTROL B + &none &none >; }; }; @@ -39,7 +39,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,0) - ZMK_MOCK_PRESS(0,1,300) + ZMK_MOCK_PRESS(0,0,0) + ZMK_MOCK_PRESS(0,1,300) >; }; \ No newline at end of file diff --git a/app/tests/combo/layer-filter-0/keycode_events.snapshot b/app/tests/combo/layer-filter-0/keycode_events.snapshot index f845fd162f8..21bf0c3ffdb 100644 --- a/app/tests/combo/layer-filter-0/keycode_events.snapshot +++ b/app/tests/combo/layer-filter-0/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/overlapping-combos-0/keycode_events.snapshot b/app/tests/combo/overlapping-combos-0/keycode_events.snapshot index cc5b30f8f87..9e87293a69c 100644 --- a/app/tests/combo/overlapping-combos-0/keycode_events.snapshot +++ b/app/tests/combo/overlapping-combos-0/keycode_events.snapshot @@ -1,20 +1,20 @@ -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/overlapping-combos-1/keycode_events.snapshot b/app/tests/combo/overlapping-combos-1/keycode_events.snapshot index a80db25c15f..e69112369fb 100644 --- a/app/tests/combo/overlapping-combos-1/keycode_events.snapshot +++ b/app/tests/combo/overlapping-combos-1/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/overlapping-combos-2/keycode_events.snapshot b/app/tests/combo/overlapping-combos-2/keycode_events.snapshot index ff060370a63..257d7e34424 100644 --- a/app/tests/combo/overlapping-combos-2/keycode_events.snapshot +++ b/app/tests/combo/overlapping-combos-2/keycode_events.snapshot @@ -1,4 +1,4 @@ -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/overlapping-combos-3/keycode_events.snapshot b/app/tests/combo/overlapping-combos-3/keycode_events.snapshot index 3df81e5223a..38513aabade 100644 --- a/app/tests/combo/overlapping-combos-3/keycode_events.snapshot +++ b/app/tests/combo/overlapping-combos-3/keycode_events.snapshot @@ -1,4 +1,4 @@ pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/partially-overlapping-combos/keycode_events.snapshot b/app/tests/combo/partially-overlapping-combos/keycode_events.snapshot index e6c88146f79..cca61244037 100644 --- a/app/tests/combo/partially-overlapping-combos/keycode_events.snapshot +++ b/app/tests/combo/partially-overlapping-combos/keycode_events.snapshot @@ -1,16 +1,16 @@ -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1c implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot b/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot index a9618a6cc2c..cc6fa00e9a2 100644 --- a/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot +++ b/app/tests/combo/press-release-long-combo-complete/keycode_events.snapshot @@ -1,2 +1,2 @@ -pressed: usage_page 0x07 keycode 0x1d implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1d implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1D implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1D implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/conditional-layer/chained-activation/keycode_events.snapshot b/app/tests/conditional-layer/chained-activation/keycode_events.snapshot index 422b075c73f..f847391faad 100644 --- a/app/tests/conditional-layer/chained-activation/keycode_events.snapshot +++ b/app/tests/conditional-layer/chained-activation/keycode_events.snapshot @@ -2,8 +2,8 @@ mo_pressed: position 2 layer 1 mo_pressed: position 3 layer 2 cl_activate: layer 3 cl_activate: layer 4 -kp_pressed: usage_page 0x07 keycode 0x0c implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0c implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0C implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0C implicit_mods 0x00 explicit_mods 0x00 mo_released: position 3 layer 2 cl_deactivate: layer 3 cl_deactivate: layer 4 diff --git a/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot b/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot index 05337b29f5d..46d6c03a60e 100644 --- a/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot +++ b/app/tests/conditional-layer/tri-layer-alt-order/keycode_events.snapshot @@ -1,8 +1,8 @@ mo_pressed: position 3 layer 2 mo_pressed: position 2 layer 1 cl_activate: layer 3 -kp_pressed: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 mo_released: position 3 layer 2 cl_deactivate: layer 3 mo_released: position 2 layer 1 -kp_released: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/conditional-layer/tri-layer/keycode_events.snapshot b/app/tests/conditional-layer/tri-layer/keycode_events.snapshot index b23e61b2ddc..cb452df5453 100644 --- a/app/tests/conditional-layer/tri-layer/keycode_events.snapshot +++ b/app/tests/conditional-layer/tri-layer/keycode_events.snapshot @@ -1,8 +1,8 @@ mo_pressed: position 2 layer 1 mo_pressed: position 3 layer 2 cl_activate: layer 3 -kp_pressed: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 mo_released: position 3 layer 2 cl_deactivate: layer 3 mo_released: position 2 layer 1 diff --git a/app/tests/gresc/gresc-press-release/keycode_events.snapshot b/app/tests/gresc/gresc-press-release/keycode_events.snapshot index 7c4c32caab0..061149ee08f 100644 --- a/app/tests/gresc/gresc-press-release/keycode_events.snapshot +++ b/app/tests/gresc/gresc-press-release/keycode_events.snapshot @@ -1,18 +1,18 @@ pressed: usage_page 0x07 keycode 0x29 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x29 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/gresc/gresc-two-instances/keycode_events.snapshot b/app/tests/gresc/gresc-two-instances/keycode_events.snapshot index 4a640a4577b..b33232abdc1 100644 --- a/app/tests/gresc/gresc-two-instances/keycode_events.snapshot +++ b/app/tests/gresc/gresc-two-instances/keycode_events.snapshot @@ -1,6 +1,6 @@ pressed: usage_page 0x07 keycode 0x29 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x29 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x35 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot index 926174b4e3e..9b8860673ce 100644 --- a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot index 22c24df25a7..b9f92822955 100644 --- a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided tap (balanced decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index 0c7ea49795c..0f2edc79d95 100644 --- a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index afbb52cf52d..d56fe18dcff 100644 --- a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -2,6 +2,6 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 9c91aa5d2ac..7fb95386260 100644 --- a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (balanced decision moment key-up) -kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 242b31f2216..b5b5886df85 100644 --- a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 55fd0854435..55a620a81f6 100644 --- a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (balanced decision moment other-key-up) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 55fd0854435..55a620a81f6 100644 --- a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (balanced decision moment other-key-up) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot index 628625d72bb..8cc506ab5b4 100644 --- a/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/6-retro-tap/keycode_events.snapshot @@ -12,8 +12,8 @@ ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot index 926174b4e3e..9b8860673ce 100644 --- a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot index 242b31f2216..b5b5886df85 100644 --- a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot b/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot index 489fe477376..b2d708b8a19 100644 --- a/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot @@ -1,20 +1,20 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 2 new undecided hold_tap ht_binding_released: 0 cleaning up hold-tap ht_decide: 2 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 3 new undecided hold_tap ht_binding_released: 1 cleaning up hold-tap ht_decide: 3 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 2 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 3 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot index 827ac986654..7298dc10616 100644 --- a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot index 84789bee272..83e2182cb0f 100644 --- a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided tap (hold-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index 4bac227b013..fd0adb58631 100644 --- a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index 8ae35a38f83..7afa3fe95e6 100644 --- a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -2,6 +2,6 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 865a985a950..fcae0aac284 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (hold-preferred decision moment key-up) -kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 1d2b827ec6f..026646cc793 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 1d2b827ec6f..026646cc793 100644 --- a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 1d2b827ec6f..026646cc793 100644 --- a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot index ef3ea56218a..ad3ead5bd9c 100644 --- a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot index dba93dba97d..a0d44794d5b 100644 --- a/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/keycode_events.snapshot @@ -12,8 +12,8 @@ ht_binding_released: 0 cleaning up hold-tap ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) update_hold_status_for_retro_tap: Update hold tap 0 status to hold-interrupt -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot index 827ac986654..7298dc10616 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (hold-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot index 1d2b827ec6f..026646cc793 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot index 4bf3e7ca8b8..a8d82ae692f 100644 --- a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot index e6a1450ff1c..ace1f88b7b5 100644 --- a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided tap (tap-preferred decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index b7f4e669da9..2ea80bcdfe6 100644 --- a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index cdb1ee9a334..ef6ab73b0ca 100644 --- a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -2,6 +2,6 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index 54ac986bffd..11ab645187d 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (tap-preferred decision moment key-up) -kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 2d985568488..a0a2e232f73 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 2d985568488..a0a2e232f73 100644 --- a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot index 54ac986bffd..11ab645187d 100644 --- a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (tap-preferred decision moment key-up) -kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot index 4bf3e7ca8b8..a8d82ae692f 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot index 2d985568488..a0a2e232f73 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot index a733739d0ea..ad1b0911ad5 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided tap (tap-unless-interrupted decision moment key-up) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot index d292813122b..7922ade455e 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided tap (tap-unless-interrupted decision moment timer) kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe4 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE4 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot index b138d6cfdb4..311a7a70ce0 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -1,10 +1,10 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 1 new undecided hold_tap ht_decide: 1 decided tap (tap-unless-interrupted decision moment key-up) -kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot index 6fa61725ee0..2f3484256df 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot index 6fa61725ee0..2f3484256df 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot index 6fa61725ee0..2f3484256df 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot index fc685a377ad..ae7c79466dd 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot +++ b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -1,7 +1,7 @@ ht_binding_pressed: 0 new undecided hold_tap ht_decide: 0 decided hold-interrupt (tap-unless-interrupted decision moment other-key-down) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot b/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot index c06d94a5ddc..26830981d83 100644 --- a/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot +++ b/app/tests/key-repeat/ignore-other-usage-page-events/keycode_events.snapshot @@ -2,9 +2,9 @@ pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 -pressed: usage_page 0x0c keycode 0xe9 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x0C keycode 0xE9 implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x00 -released: usage_page 0x0c keycode 0xe9 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x0C keycode 0xE9 implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x00 diff --git a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot index 628214a4582..08f9e558358 100644 --- a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot +++ b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/keycode_events.snapshot @@ -1,10 +1,10 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x01 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 press: Modifiers set to 0x01 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x01 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 release: Modifiers set to 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00 press: Modifiers set to 0x01 diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot b/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot index 9f47e064e11..6e1257c6026 100644 --- a/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/keycode_events.snapshot @@ -1,4 +1,4 @@ -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot b/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot index 9f47e064e11..6e1257c6026 100644 --- a/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot +++ b/app/tests/macros/mo-plus-modifier-macro/keycode_events.snapshot @@ -1,4 +1,4 @@ -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/press-release/keycode_events.snapshot b/app/tests/macros/press-release/keycode_events.snapshot index ebe69d5ce8a..d40cfb65a86 100644 --- a/app/tests/macros/press-release/keycode_events.snapshot +++ b/app/tests/macros/press-release/keycode_events.snapshot @@ -1,8 +1,8 @@ -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x12 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x12 implicit_mods 0x00 explicit_mods 0x00 -kp_pressed: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0a implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/wait-macro-release/keycode_events.snapshot b/app/tests/macros/wait-macro-release/keycode_events.snapshot index 509a1c48503..21d47a29991 100644 --- a/app/tests/macros/wait-macro-release/keycode_events.snapshot +++ b/app/tests/macros/wait-macro-release/keycode_events.snapshot @@ -1,16 +1,16 @@ qm: Iterating macro bindings - starting: 0, count: 4 queue_process_next: Invoking KEY_PRESS: 0x700e2 0x00 -kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms queue_process_next: Invoking KEY_PRESS: 0x7002b 0x00 -kp_pressed: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 40ms queue_process_next: Invoking KEY_PRESS: 0x7002b 0x00 -kp_released: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms -kp_pressed: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x2b implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 qm: Iterating macro bindings - starting: 5, count: 2 queue_process_next: Invoking KEY_PRESS: 0x700e2 0x00 -kp_released: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 0ms diff --git a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/keycode_events.snapshot b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/keycode_events.snapshot index e146b9ca90f..ab200cbf11f 100644 --- a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/keycode_events.snapshot +++ b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/keycode_events.snapshot @@ -1,4 +1,4 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x0e +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x0E reg: Modifier 0 count 1 reg: Modifiers set to 0x01 reg: Modifier 1 count 1 @@ -6,19 +6,19 @@ reg: Modifiers set to 0x03 reg: Modifier 2 count 1 reg: Modifiers set to 0x07 reg: Modifier 3 count 1 -reg: Modifiers set to 0x0f -mods: Modifiers set to 0x0f +reg: Modifiers set to 0x0F +mods: Modifiers set to 0x0F pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -mods: Modifiers set to 0x0f +mods: Modifiers set to 0x0F released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -mods: Modifiers set to 0x0f -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x0e +mods: Modifiers set to 0x0F +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x0E unreg: Modifier 0 count: 0 unreg: Modifier 0 released -unreg: Modifiers set to 0x0e +unreg: Modifiers set to 0x0E unreg: Modifier 1 count: 0 unreg: Modifier 1 released -unreg: Modifiers set to 0x0c +unreg: Modifiers set to 0x0C unreg: Modifier 2 count: 0 unreg: Modifier 2 released unreg: Modifiers set to 0x08 diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot index 25b794451dd..1cbbf91bf28 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot @@ -1,16 +1,16 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 1 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 2 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 1 unreg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released unreg: Modifiers set to 0x00 diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot index 545af6e7200..47832094196 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 1 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released unreg: Modifiers set to 0x00 diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot index b74454208bc..85c14ca201e 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot @@ -1,17 +1,17 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 1 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 1 count 1 reg: Modifiers set to 0x03 mods: Modifiers set to 0x03 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released unreg: Modifiers set to 0x02 mods: Modifiers set to 0x02 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 1 count: 0 unreg: Modifier 1 released unreg: Modifiers set to 0x00 diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot index 74916a8c214..80b246763b3 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot @@ -1,17 +1,17 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 1 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 1 count 1 reg: Modifiers set to 0x03 mods: Modifiers set to 0x03 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 1 count: 0 unreg: Modifier 1 released unreg: Modifiers set to 0x01 mods: Modifiers set to 0x01 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released unreg: Modifiers set to 0x00 diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot index aece8bed503..43edb961222 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot @@ -1,10 +1,10 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 1 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00 mods: Modifiers set to 0x03 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released unreg: Modifiers set to 0x00 diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot index c24494fbd8f..fdc7aec446d 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot @@ -1,4 +1,4 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 reg: Modifier 0 count 1 reg: Modifiers set to 0x01 mods: Modifiers set to 0x01 @@ -6,7 +6,7 @@ pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00 mods: Modifiers set to 0x03 released: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00 mods: Modifiers set to 0x01 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released unreg: Modifiers set to 0x00 diff --git a/app/tests/none/normal/native_posix_64.keymap b/app/tests/none/normal/native_posix_64.keymap new file mode 100644 index 00000000000..cbeb61dc477 --- /dev/null +++ b/app/tests/none/normal/native_posix_64.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot b/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot index fd2217a5d87..3e46e581165 100644 --- a/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot +++ b/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot b/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot index fc0f29b9490..922c582c654 100644 --- a/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot +++ b/app/tests/sticky-keys/10-sl-sl-kp/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/keycode_events.snapshot b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/keycode_events.snapshot index 7e745b51359..5f43bbdf55d 100644 --- a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/keycode_events.snapshot +++ b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x1b implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot b/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot index 374035fce02..f1aa915bf05 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot +++ b/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot @@ -1,8 +1,8 @@ -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/9-sk-dn-up-dn-up/keycode_events.snapshot b/app/tests/sticky-keys/9-sk-dn-up-dn-up/keycode_events.snapshot index d5bd587ec67..6e3a0c3a835 100644 --- a/app/tests/sticky-keys/9-sk-dn-up-dn-up/keycode_events.snapshot +++ b/app/tests/sticky-keys/9-sk-dn-up-dn-up/keycode_events.snapshot @@ -1,4 +1,4 @@ -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/2a-hold1/keycode_events.snapshot b/app/tests/tap-dance/2a-hold1/keycode_events.snapshot index 2a0965dcb00..5af4e5f0a3d 100644 --- a/app/tests/tap-dance/2a-hold1/keycode_events.snapshot +++ b/app/tests/tap-dance/2a-hold1/keycode_events.snapshot @@ -1,5 +1,5 @@ td_binding_pressed: 0 created new tap dance td_binding_pressed: 0 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 0 tap dance keybind released -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/2b-hold2/keycode_events.snapshot b/app/tests/tap-dance/2b-hold2/keycode_events.snapshot index dbccfc9414e..0a44f7465b3 100644 --- a/app/tests/tap-dance/2b-hold2/keycode_events.snapshot +++ b/app/tests/tap-dance/2b-hold2/keycode_events.snapshot @@ -2,6 +2,6 @@ td_binding_pressed: 0 created new tap dance td_binding_pressed: 0 tap dance pressed td_binding_released: 0 tap dance keybind released td_binding_pressed: 0 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 0 tap dance keybind released -kp_released: usage_page 0x07 keycode 0xe2 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/2c-hold3/keycode_events.snapshot b/app/tests/tap-dance/2c-hold3/keycode_events.snapshot index 3ac8e0e68ef..f8a232a1de0 100644 --- a/app/tests/tap-dance/2c-hold3/keycode_events.snapshot +++ b/app/tests/tap-dance/2c-hold3/keycode_events.snapshot @@ -4,6 +4,6 @@ td_binding_released: 0 tap dance keybind released td_binding_pressed: 0 tap dance pressed td_binding_released: 0 tap dance keybind released td_binding_pressed: 0 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 0 tap dance keybind released -kp_released: usage_page 0x07 keycode 0xe3 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE3 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot b/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot index 715d0143a04..fe67e6e1108 100644 --- a/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot +++ b/app/tests/tap-dance/3a-tap-int-mid/keycode_events.snapshot @@ -1,10 +1,10 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 1 created new tap dance td_binding_pressed: 1 tap dance pressed kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 1 tap dance keybind released kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 2 tap dance keybind released -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot b/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot index a973e426c54..31113ffc4aa 100644 --- a/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot +++ b/app/tests/tap-dance/3b-tap-int-seq/keycode_events.snapshot @@ -1,10 +1,10 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 1 created new tap dance td_binding_pressed: 1 tap dance pressed kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 2 tap dance keybind released -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 1 tap dance keybind released kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot b/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot index 2c715537821..38b560dbfde 100644 --- a/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot +++ b/app/tests/tap-dance/3c-tap-int-after/keycode_events.snapshot @@ -1,8 +1,8 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed td_binding_released: 2 tap dance keybind released -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 1 created new tap dance td_binding_pressed: 1 tap dance pressed kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot b/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot index 7631c4ac70e..7787336f361 100644 --- a/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot +++ b/app/tests/tap-dance/3d-hold-int-mid/keycode_events.snapshot @@ -1,10 +1,10 @@ td_binding_pressed: 0 created new tap dance td_binding_pressed: 0 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 1 created new tap dance td_binding_pressed: 1 tap dance pressed kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 1 tap dance keybind released kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 0 tap dance keybind released -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot b/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot index ca13f8bc3e3..052caec25de 100644 --- a/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot +++ b/app/tests/tap-dance/3e-hold-int-seq/keycode_events.snapshot @@ -1,10 +1,10 @@ td_binding_pressed: 0 created new tap dance td_binding_pressed: 0 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 1 created new tap dance td_binding_pressed: 1 tap dance pressed kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 0 tap dance keybind released -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 1 tap dance keybind released kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot b/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot index 044018e04ef..f4250f4941e 100644 --- a/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot +++ b/app/tests/tap-dance/3f-hold-int-after/keycode_events.snapshot @@ -1,8 +1,8 @@ td_binding_pressed: 0 created new tap dance td_binding_pressed: 0 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 0 tap dance keybind released -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 1 created new tap dance td_binding_pressed: 1 tap dance pressed kp_pressed: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot b/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot index 301dc914383..a84766e302c 100644 --- a/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot +++ b/app/tests/tap-dance/5a-tdint-mid/keycode_events.snapshot @@ -1,10 +1,10 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 3 created new tap dance td_binding_pressed: 3 tap dance pressed td_binding_released: 3 tap dance keybind released td_binding_released: 2 tap dance keybind released -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot b/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot index 567ec079089..4380a057560 100644 --- a/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot +++ b/app/tests/tap-dance/5b-tdint-seq/keycode_events.snapshot @@ -1,10 +1,10 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 3 created new tap dance td_binding_pressed: 3 tap dance pressed td_binding_released: 2 tap dance keybind released -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_released: 3 tap dance keybind released kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot b/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot index cc1da902afb..4e54ac22942 100644 --- a/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot +++ b/app/tests/tap-dance/5c-tdint-after/keycode_events.snapshot @@ -1,8 +1,8 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed td_binding_released: 2 tap dance keybind released -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 3 created new tap dance td_binding_pressed: 3 tap dance pressed td_binding_released: 3 tap dance keybind released diff --git a/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot b/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot index afb32824c2c..e5e024a8129 100644 --- a/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot +++ b/app/tests/tap-dance/5d-tdint-multiple/keycode_events.snapshot @@ -1,8 +1,8 @@ td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed td_binding_released: 2 tap dance keybind released -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 3 created new tap dance td_binding_pressed: 3 tap dance pressed td_binding_released: 3 tap dance keybind released @@ -11,5 +11,5 @@ kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 td_binding_pressed: 2 created new tap dance td_binding_pressed: 2 tap dance pressed td_binding_released: 2 tap dance keybind released -kp_pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1E implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/to-layer/normal/keycode_events.snapshot b/app/tests/to-layer/normal/keycode_events.snapshot index 5ac5eb68a0a..a98f7479ac9 100644 --- a/app/tests/to-layer/normal/keycode_events.snapshot +++ b/app/tests/to-layer/normal/keycode_events.snapshot @@ -3,8 +3,8 @@ kp_released: usage_page 0x07 keycode 0x16 implicit_mods 0x00 explicit_mods 0x00 to_pressed: position 1 layer 1 layer_changed: layer 1 state 1 to_released: position 1 layer 1 -kp_pressed: usage_page 0x07 keycode 0x0e implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0x0e implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x0E implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0E implicit_mods 0x00 explicit_mods 0x00 to_pressed: position 0 layer 0 layer_changed: layer 1 state 0 layer_changed: layer 0 state 1 diff --git a/app/tests/toggle-layer/early-key-release/keycode_events.snapshot b/app/tests/toggle-layer/early-key-release/keycode_events.snapshot index e0aa502fe8f..8ac4a3d291c 100644 --- a/app/tests/toggle-layer/early-key-release/keycode_events.snapshot +++ b/app/tests/toggle-layer/early-key-release/keycode_events.snapshot @@ -2,5 +2,5 @@ kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 tog_pressed: position 1 layer 1 kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 tog_released: position 1 layer 1 -kp_pressed: usage_page 0x0c keycode 0xb5 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x0c keycode 0xb5 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x0C keycode 0xB5 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x0C keycode 0xB5 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/toggle-layer/normal/keycode_events.snapshot b/app/tests/toggle-layer/normal/keycode_events.snapshot index 8b5b0cc563c..515772a4d1f 100644 --- a/app/tests/toggle-layer/normal/keycode_events.snapshot +++ b/app/tests/toggle-layer/normal/keycode_events.snapshot @@ -1,4 +1,4 @@ tog_pressed: position 1 layer 1 tog_released: position 1 layer 1 -kp_pressed: usage_page 0x0c keycode 0xb5 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x0c keycode 0xb5 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x0C keycode 0xB5 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x0C keycode 0xB5 implicit_mods 0x00 explicit_mods 0x00 From bf2fc68070520a350266875075c912e863fcbf7c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 16:25:06 -0400 Subject: [PATCH 0327/1130] fix(underglow): Add newly required color-mapping prop. --- app/boards/arm/bdn9/bdn9_rev2.dts | 29 +++++++++-------- app/boards/arm/nice60/nice60.dts | 3 ++ app/boards/arm/nice_nano/nice_nano.dtsi | 2 +- .../shields/chalice/boards/nice_nano.overlay | 4 +++ .../chalice/boards/nice_nano_v2.overlay | 4 +++ .../shields/corne/boards/nice_nano.overlay | 4 +++ .../elephant42/boards/nice_nano_v2.overlay | 4 +++ .../shields/helix/boards/nice_nano.overlay | 4 +++ .../shields/jorne/boards/nice_nano.overlay | 3 ++ .../shields/kyria/boards/nice_nano.overlay | 3 ++ .../shields/kyria/boards/nice_nano_v2.overlay | 32 +++++++++++++++++++ .../shields/kyria/boards/nrfmicro_11.overlay | 3 ++ .../kyria/boards/nrfmicro_11_flipped.overlay | 3 ++ .../shields/kyria/boards/nrfmicro_13.overlay | 3 ++ .../shields/lily58/boards/nice_nano.overlay | 3 ++ .../shields/microdox/boards/nice_nano.overlay | 4 +++ .../shields/murphpad/boards/nice_nano.overlay | 4 +++ .../shields/nibble/boards/nice_nano.overlay | 3 ++ .../shields/redox/boards/nice_nano.overlay | 4 +++ .../reviung41/boards/nice_nano.overlay | 3 ++ .../romac_plus/boards/nice_nano.overlay | 3 ++ .../shields/tg4x/boards/nice_nano.overlay | 3 ++ .../shields/tidbit/boards/nice_nano.overlay | 3 ++ docs/docs/features/underglow.md | 17 ++++++++++ 24 files changed, 133 insertions(+), 15 deletions(-) create mode 100644 app/boards/shields/kyria/boards/nice_nano_v2.overlay diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index c005be17893..3ce9758d2da 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -6,6 +6,7 @@ /dts-v1/; #include +#include / { model = "Keeb.io BDN9 rev2"; @@ -18,24 +19,24 @@ zmk,kscan = &kscan; /* TODO: Enable once the GPIO bitbanging driver supports STM32 zmk,underglow = &led_strip; - */ + */ }; - + kscan: kscan { compatible = "zmk,kscan-gpio-direct"; label = "KSCAN"; input-gpios - = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiof 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiof 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiof 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiof 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; /* @@ -47,7 +48,7 @@ chain-length = <9>; }; - */ + */ left_encoder: encoder_left { compatible = "alps,ec11"; @@ -96,7 +97,7 @@ &flash0 { /* * For more information, see: - * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + * http: //docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions */ partitions { compatible = "fixed-partitions"; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index 20f2a1a7a1a..ee38c9a5553 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -6,6 +6,8 @@ /dts-v1/; #include + +#include #include / { @@ -124,6 +126,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R chain-length = <12>; /* LED strip length */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index 52b9261207f..6c9d081c75b 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -67,7 +67,7 @@ &flash0 { /* * For more information, see: - * http: //docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html */ partitions { compatible = "fixed-partitions"; diff --git a/app/boards/shields/chalice/boards/nice_nano.overlay b/app/boards/shields/chalice/boards/nice_nano.overlay index 21e28515d8b..5a74582a40e 100644 --- a/app/boards/shields/chalice/boards/nice_nano.overlay +++ b/app/boards/shields/chalice/boards/nice_nano.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,8 @@ chain-length = <14>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/chalice/boards/nice_nano_v2.overlay b/app/boards/shields/chalice/boards/nice_nano_v2.overlay index 21e28515d8b..5a74582a40e 100644 --- a/app/boards/shields/chalice/boards/nice_nano_v2.overlay +++ b/app/boards/shields/chalice/boards/nice_nano_v2.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,8 @@ chain-length = <14>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/corne/boards/nice_nano.overlay b/app/boards/shields/corne/boards/nice_nano.overlay index 83ebae04015..e5f84063fc5 100644 --- a/app/boards/shields/corne/boards/nice_nano.overlay +++ b/app/boards/shields/corne/boards/nice_nano.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; /* Cannot be used together with i2c0. */ @@ -19,6 +21,8 @@ chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay index 6cd5de8c5a0..87c8da215f8 100644 --- a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; /* Cannot be used together with i2c0. */ @@ -18,6 +20,8 @@ chain-length = <27>; /* There are per-key RGB and the LAST 6 are underglow */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/helix/boards/nice_nano.overlay b/app/boards/shields/helix/boards/nice_nano.overlay index 78576d1304e..da7deed1220 100644 --- a/app/boards/shields/helix/boards/nice_nano.overlay +++ b/app/boards/shields/helix/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,8 @@ chain-length = <32>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/jorne/boards/nice_nano.overlay b/app/boards/shields/jorne/boards/nice_nano.overlay index 03b868ce700..2864fd603b9 100644 --- a/app/boards/shields/jorne/boards/nice_nano.overlay +++ b/app/boards/shields/jorne/boards/nice_nano.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; /* Cannot be used together with i2c0. */ @@ -19,6 +21,7 @@ chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/kyria/boards/nice_nano.overlay b/app/boards/shields/kyria/boards/nice_nano.overlay index 8be964b5d5d..b774b4ba712 100644 --- a/app/boards/shields/kyria/boards/nice_nano.overlay +++ b/app/boards/shields/kyria/boards/nice_nano.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/kyria/boards/nice_nano_v2.overlay b/app/boards/shields/kyria/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..b1e7fbb50fb --- /dev/null +++ b/app/boards/shields/kyria/boards/nice_nano_v2.overlay @@ -0,0 +1,32 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/kyria/boards/nrfmicro_11.overlay b/app/boards/shields/kyria/boards/nrfmicro_11.overlay index b88573b612c..1cff5f7794d 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay index c6a24665117..80d0c8984e2 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/kyria/boards/nrfmicro_13.overlay b/app/boards/shields/kyria/boards/nrfmicro_13.overlay index c6a24665117..80d0c8984e2 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_13.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_13.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/lily58/boards/nice_nano.overlay b/app/boards/shields/lily58/boards/nice_nano.overlay index 0d28726da36..69bfffa0811 100644 --- a/app/boards/shields/lily58/boards/nice_nano.overlay +++ b/app/boards/shields/lily58/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,7 @@ chain-length = <5>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/microdox/boards/nice_nano.overlay b/app/boards/shields/microdox/boards/nice_nano.overlay index 1b84b6b5463..360e7098873 100644 --- a/app/boards/shields/microdox/boards/nice_nano.overlay +++ b/app/boards/shields/microdox/boards/nice_nano.overlay @@ -3,6 +3,9 @@ * * SPDX-License-Identifier: MIT */ + +#include + &spi1 { compatible = "nordic,nrf-spim"; /* Cannot be used together with i2c0. */ @@ -24,6 +27,7 @@ chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay index b247334e886..d7cdcff75df 100644 --- a/app/boards/shields/murphpad/boards/nice_nano.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ + #include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,8 @@ chain-length = <8>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/nibble/boards/nice_nano.overlay b/app/boards/shields/nibble/boards/nice_nano.overlay index 8da95ac15cc..0a08c770784 100644 --- a/app/boards/shields/nibble/boards/nice_nano.overlay +++ b/app/boards/shields/nibble/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,7 @@ chain-length = <10>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/redox/boards/nice_nano.overlay b/app/boards/shields/redox/boards/nice_nano.overlay index b81ba195642..d67e46f9c50 100644 --- a/app/boards/shields/redox/boards/nice_nano.overlay +++ b/app/boards/shields/redox/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ + #include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,8 @@ chain-length = <5>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + + color-mapping = ; }; }; diff --git a/app/boards/shields/reviung41/boards/nice_nano.overlay b/app/boards/shields/reviung41/boards/nice_nano.overlay index b6c89e80173..b52faac61ce 100644 --- a/app/boards/shields/reviung41/boards/nice_nano.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,7 @@ chain-length = <11>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/romac_plus/boards/nice_nano.overlay b/app/boards/shields/romac_plus/boards/nice_nano.overlay index 17d1192702b..dc686af8ede 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano.overlay @@ -1,3 +1,5 @@ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -18,6 +20,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/tg4x/boards/nice_nano.overlay b/app/boards/shields/tg4x/boards/nice_nano.overlay index 60492bec782..fe7fbf18b7e 100644 --- a/app/boards/shields/tg4x/boards/nice_nano.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,7 @@ chain-length = <7>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/tidbit/boards/nice_nano.overlay b/app/boards/shields/tidbit/boards/nice_nano.overlay index 762a74039e7..d8a647e9dd9 100644 --- a/app/boards/shields/tidbit/boards/nice_nano.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano.overlay @@ -4,6 +4,8 @@ * SPDX-License-Identifier: MIT */ +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -24,6 +26,7 @@ chain-length = <8>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index a093ecaccaf..ac8658265c2 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -67,6 +67,8 @@ To identify which pin number you need to put in the config you need do to a bit Here's an example on a definition that uses P0.06: ``` +#include + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; @@ -87,6 +89,9 @@ Here's an example on a definition that uses P0.06: chain-length = <10>; /* number of LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; ``` @@ -98,6 +103,13 @@ Ignoring these restrictions may result in poor wireless performance. You can fin ::: +:::note + +Standard WS2812 LEDs use a wire protocol where the bits for the colors green, red, and blue values are sent in that order. +If your board/shield uses LEDs that require the data sent in a different order, the `color-mapping` property ordering should be changed to match. + +::: + ### Other boards For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. @@ -105,6 +117,8 @@ For other boards, you must select an SPI definition that has the `MOSI` pin as y Here's another example for a non-nRF52 board on `spi1`: ``` +#include + &spi1 { led_strip: ws2812@0 { @@ -119,6 +133,9 @@ Here's another example for a non-nRF52 board on `spi1`: chain-length = <10>; /* number of LEDs */ spi-one-frame = <0x70>; /* make sure to configure this properly for your SOC */ spi-zero-frame = <0x40>; /* make sure to configure this properly for your SOC */ + color-mapping = ; }; }; ``` From 4df83a9c0d4397a5cbbdcbc1b2ae680350205cdf Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 20:44:14 +0000 Subject: [PATCH 0328/1130] refactor: Move away from deprecated PM callback. --- app/drivers/display/il0323.c | 2 +- app/drivers/gpio/gpio_mcp23017.c | 2 +- app/drivers/kscan/kscan_composite.c | 5 ++--- app/drivers/kscan/kscan_gpio_demux.c | 2 +- app/drivers/kscan/kscan_gpio_direct.c | 2 +- app/drivers/kscan/kscan_gpio_matrix.c | 4 ++-- app/drivers/sensor/battery/battery_nrf_vddh.c | 2 +- app/drivers/sensor/battery/battery_voltage_divider.c | 2 +- app/drivers/sensor/ec11/ec11.c | 4 ++-- app/src/behaviors/behavior_bt.c | 2 +- app/src/behaviors/behavior_caps_word.c | 7 +++---- app/src/behaviors/behavior_ext_power.c | 2 +- app/src/behaviors/behavior_hold_tap.c | 4 ++-- app/src/behaviors/behavior_key_press.c | 5 ++--- app/src/behaviors/behavior_mod_morph.c | 7 +++---- app/src/behaviors/behavior_momentary_layer.c | 5 ++--- app/src/behaviors/behavior_none.c | 2 +- app/src/behaviors/behavior_outputs.c | 2 +- app/src/behaviors/behavior_reset.c | 6 +++--- app/src/behaviors/behavior_rgb_underglow.c | 5 ++--- app/src/behaviors/behavior_sensor_rotate_key_press.c | 4 ++-- app/src/behaviors/behavior_sticky_key.c | 4 ++-- app/src/behaviors/behavior_to_layer.c | 2 +- app/src/behaviors/behavior_toggle_layer.c | 5 ++--- app/src/behaviors/behavior_transparent.c | 2 +- 25 files changed, 41 insertions(+), 48 deletions(-) diff --git a/app/drivers/display/il0323.c b/app/drivers/display/il0323.c index 9ec8162f763..b8117584163 100644 --- a/app/drivers/display/il0323.c +++ b/app/drivers/display/il0323.c @@ -428,5 +428,5 @@ static struct display_driver_api il0323_driver_api = { .set_orientation = il0323_set_orientation, }; -DEVICE_DT_INST_DEFINE(0, il0323_init, device_pm_control_nop, &il0323_driver, NULL, POST_KERNEL, +DEVICE_DT_INST_DEFINE(0, il0323_init, NULL, &il0323_driver, NULL, POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY, &il0323_driver_api); \ No newline at end of file diff --git a/app/drivers/gpio/gpio_mcp23017.c b/app/drivers/gpio/gpio_mcp23017.c index eb38ce50788..1df14e6baa5 100644 --- a/app/drivers/gpio/gpio_mcp23017.c +++ b/app/drivers/gpio/gpio_mcp23017.c @@ -325,7 +325,7 @@ static int mcp23017_init(const struct device *dev) { }; \ \ /* This has to init after SPI master */ \ - DEVICE_DT_INST_DEFINE(inst, mcp23017_init, device_pm_control_nop, &mcp23017_##inst##_drvdata, \ + DEVICE_DT_INST_DEFINE(inst, mcp23017_init, NULL, &mcp23017_##inst##_drvdata, \ &mcp23017_##inst##_config, POST_KERNEL, \ CONFIG_GPIO_MCP23017_INIT_PRIORITY, &api_table); diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index 0d40c6fad10..35584d9c8bb 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -118,6 +118,5 @@ static const struct kscan_composite_config kscan_composite_config = {}; static struct kscan_composite_data kscan_composite_data; -DEVICE_DT_INST_DEFINE(0, kscan_composite_init, device_pm_control_nop, &kscan_composite_data, - &kscan_composite_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &mock_driver_api); +DEVICE_DT_INST_DEFINE(0, kscan_composite_init, NULL, &kscan_composite_data, &kscan_composite_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api); diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 0cfd38347ed..e064a942347 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -246,7 +246,7 @@ struct kscan_gpio_item_config { .cols = {UTIL_LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, n)}, \ }; \ \ - DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, device_pm_control_nop, &kscan_gpio_data_##n, \ + DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, NULL, &kscan_gpio_data_##n, \ &kscan_gpio_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ &gpio_driver_api_##n); diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index c7be4e1f89e..3f4f5a1b45b 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -237,7 +237,7 @@ static const struct kscan_driver_api gpio_driver_api = { .inputs = {UTIL_LISTIFY(INST_INPUT_LEN(n), KSCAN_DIRECT_INPUT_ITEM, n)}, \ .num_of_inputs = INST_INPUT_LEN(n), \ .debounce_period = DT_INST_PROP(n, debounce_period)}; \ - DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, device_pm_control_nop, &kscan_gpio_data_##n, \ + DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, NULL, &kscan_gpio_data_##n, \ &kscan_gpio_config_##n, POST_KERNEL, CONFIG_ZMK_KSCAN_INIT_PRIORITY, \ &gpio_driver_api); diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 1e841239044..b41e09b7e17 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -477,8 +477,8 @@ static const struct kscan_driver_api kscan_matrix_api = { .diode_direction = INST_DIODE_DIR(index), \ }; \ \ - DEVICE_DT_INST_DEFINE(index, &kscan_matrix_init, device_pm_control_nop, \ - &kscan_matrix_data_##index, &kscan_matrix_config_##index, APPLICATION, \ + DEVICE_DT_INST_DEFINE(index, &kscan_matrix_init, NULL, &kscan_matrix_data_##index, \ + &kscan_matrix_config_##index, APPLICATION, \ CONFIG_APPLICATION_INIT_PRIORITY, &kscan_matrix_api); DT_INST_FOREACH_STATUS_OKAY(KSCAN_MATRIX_INIT); diff --git a/app/drivers/sensor/battery/battery_nrf_vddh.c b/app/drivers/sensor/battery/battery_nrf_vddh.c index 908903449e4..60104a69aed 100644 --- a/app/drivers/sensor/battery/battery_nrf_vddh.c +++ b/app/drivers/sensor/battery/battery_nrf_vddh.c @@ -112,5 +112,5 @@ static int vddh_init(const struct device *dev) { static struct vddh_data vddh_data; -DEVICE_DT_INST_DEFINE(0, &vddh_init, device_pm_control_nop, &vddh_data, NULL, POST_KERNEL, +DEVICE_DT_INST_DEFINE(0, &vddh_init, NULL, &vddh_data, NULL, POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, &vddh_api); diff --git a/app/drivers/sensor/battery/battery_voltage_divider.c b/app/drivers/sensor/battery/battery_voltage_divider.c index 484ca4fc4e6..09e5525ec57 100644 --- a/app/drivers/sensor/battery/battery_voltage_divider.c +++ b/app/drivers/sensor/battery/battery_voltage_divider.c @@ -186,5 +186,5 @@ static const struct bvd_config bvd_cfg = { .full_ohm = DT_INST_PROP(0, full_ohms), }; -DEVICE_DT_INST_DEFINE(0, &bvd_init, device_pm_control_nop, &bvd_data, &bvd_cfg, POST_KERNEL, +DEVICE_DT_INST_DEFINE(0, &bvd_init, NULL, &bvd_data, &bvd_cfg, POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, &bvd_api); diff --git a/app/drivers/sensor/ec11/ec11.c b/app/drivers/sensor/ec11/ec11.c index 14ccc91b76f..2fe641fa7c3 100644 --- a/app/drivers/sensor/ec11/ec11.c +++ b/app/drivers/sensor/ec11/ec11.c @@ -142,7 +142,7 @@ int ec11_init(const struct device *dev) { .b_flags = DT_INST_GPIO_FLAGS(n, b_gpios), \ COND_CODE_0(DT_INST_NODE_HAS_PROP(n, resolution), (1), (DT_INST_PROP(n, resolution))), \ }; \ - DEVICE_DT_INST_DEFINE(n, ec11_init, device_pm_control_nop, &ec11_data_##n, &ec11_cfg_##n, \ - POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, &ec11_driver_api); + DEVICE_DT_INST_DEFINE(n, ec11_init, NULL, &ec11_data_##n, &ec11_cfg_##n, POST_KERNEL, \ + CONFIG_SENSOR_INIT_PRIORITY, &ec11_driver_api); DT_INST_FOREACH_STATUS_OKAY(EC11_INST) diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 8f7dac94a2d..79b805b6bc0 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -49,7 +49,7 @@ static const struct behavior_driver_api behavior_bt_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_bt_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 61f2efca85a..3af9a172251 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -176,10 +176,9 @@ static int behavior_caps_word_init(const struct device *dev) { .continuations = {UTIL_LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, n)}, \ .continuations_count = DT_INST_PROP_LEN(n, continue_list), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, device_pm_control_nop, \ - &behavior_caps_word_data_##n, &behavior_caps_word_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_caps_word_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, NULL, &behavior_caps_word_data_##n, \ + &behavior_caps_word_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_caps_word_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index 27793318a40..5db8aac2b26 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -74,7 +74,7 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -DEVICE_DT_INST_DEFINE(0, behavior_ext_power_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 3bb7539c2e3..485b9dc3dfd 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -688,8 +688,8 @@ static struct behavior_hold_tap_data behavior_hold_tap_data; .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, device_pm_control_nop, \ - &behavior_hold_tap_data, &behavior_hold_tap_config_##n, APPLICATION, \ + DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, &behavior_hold_tap_data, \ + &behavior_hold_tap_config_##n, APPLICATION, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index b8d765c7692..215da41d69a 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -36,8 +36,7 @@ static const struct behavior_driver_api behavior_key_press_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; #define KP_INST(n) \ - DEVICE_DT_INST_DEFINE(n, behavior_key_press_init, device_pm_control_nop, NULL, NULL, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_key_press_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_key_press_init, NULL, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index 9d6eac17cdc..a40bd3651a2 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -90,10 +90,9 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } .mods = DT_INST_PROP(n, mods), \ }; \ static struct behavior_mod_morph_data behavior_mod_morph_data_##n = {}; \ - DEVICE_DT_INST_DEFINE(n, behavior_mod_morph_init, device_pm_control_nop, \ - &behavior_mod_morph_data_##n, &behavior_mod_morph_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_mod_morph_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_mod_morph_init, NULL, &behavior_mod_morph_data_##n, \ + &behavior_mod_morph_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mod_morph_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index 8259b6c7d9d..46e49fcc57a 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -39,6 +39,5 @@ static const struct behavior_mo_config behavior_mo_config = {}; static struct behavior_mo_data behavior_mo_data; -DEVICE_DT_INST_DEFINE(0, behavior_mo_init, device_pm_control_nop, &behavior_mo_data, - &behavior_mo_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_mo_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_mo_init, NULL, &behavior_mo_data, &behavior_mo_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mo_driver_api); diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 93c1d1afa9d..d53a440051a 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -34,7 +34,7 @@ static const struct behavior_driver_api behavior_none_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_none_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index f56468a199c..366abd8fab3 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -42,7 +42,7 @@ static const struct behavior_driver_api behavior_outputs_driver_api = { .binding_pressed = on_keymap_binding_pressed, }; -DEVICE_DT_INST_DEFINE(0, behavior_out_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index eb0477db542..0705df73b20 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -42,9 +42,9 @@ static const struct behavior_driver_api behavior_reset_driver_api = { #define RST_INST(n) \ static const struct behavior_reset_config behavior_reset_config_##n = { \ .type = DT_INST_PROP(n, type)}; \ - DEVICE_DT_INST_DEFINE(n, behavior_reset_init, device_pm_control_nop, NULL, \ - &behavior_reset_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_reset_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_reset_init, NULL, NULL, &behavior_reset_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_reset_driver_api); DT_INST_FOREACH_STATUS_OKAY(RST_INST) diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 96f690485f6..3459cd22a56 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -149,8 +149,7 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -DEVICE_DT_INST_DEFINE(0, behavior_rgb_underglow_init, device_pm_control_nop, NULL, NULL, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_rgb_underglow_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_rgb_underglow_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_sensor_rotate_key_press.c b/app/src/behaviors/behavior_sensor_rotate_key_press.c index c5b5a3f015e..c4a34a94088 100644 --- a/app/src/behaviors/behavior_sensor_rotate_key_press.c +++ b/app/src/behaviors/behavior_sensor_rotate_key_press.c @@ -59,8 +59,8 @@ static const struct behavior_driver_api behavior_sensor_rotate_key_press_driver_ .sensor_binding_triggered = on_sensor_binding_triggered}; #define KP_INST(n) \ - DEVICE_DT_INST_DEFINE(n, behavior_sensor_rotate_key_press_init, device_pm_control_nop, NULL, \ - NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + DEVICE_DT_INST_DEFINE(n, behavior_sensor_rotate_key_press_init, NULL, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_sensor_rotate_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index aa069a35a9b..186a92d2bee 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -287,8 +287,8 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; .ignore_modifiers = DT_INST_PROP(n, ignore_modifiers), \ .quick_release = DT_INST_PROP(n, quick_release), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_sticky_key_init, device_pm_control_nop, \ - &behavior_sticky_key_data, &behavior_sticky_key_config_##n, APPLICATION, \ + DEVICE_DT_INST_DEFINE(n, behavior_sticky_key_init, NULL, &behavior_sticky_key_data, \ + &behavior_sticky_key_config_##n, APPLICATION, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index a1707fc3d9a..cce39d5ddfa 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -37,7 +37,7 @@ static const struct behavior_driver_api behavior_to_driver_api = { .binding_released = to_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_to_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index 384f978a8a0..a682c6fe2aa 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -43,8 +43,7 @@ static const struct behavior_tog_config behavior_tog_config = {}; static struct behavior_tog_data behavior_tog_data; -DEVICE_DT_INST_DEFINE(0, behavior_tog_init, device_pm_control_nop, &behavior_tog_data, - &behavior_tog_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_tog_driver_api); +DEVICE_DT_INST_DEFINE(0, behavior_tog_init, NULL, &behavior_tog_data, &behavior_tog_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tog_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index 9d4f0dd782b..1f36e7a6dca 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -34,7 +34,7 @@ static const struct behavior_driver_api behavior_transparent_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_transparent_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From ded79ba4222ab4f99dae673ef8f10f62f4a1ca2b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Nov 2021 22:33:03 -0400 Subject: [PATCH 0329/1130] fix: Remove deprecated pinmux code. --- app/boards/arm/dz60rgb/CMakeLists.txt | 7 --- app/boards/arm/dz60rgb/pinmux.c | 67 --------------------------- app/boards/arm/planck/CMakeLists.txt | 5 -- app/boards/arm/planck/pinmux.c | 67 --------------------------- 4 files changed, 146 deletions(-) delete mode 100644 app/boards/arm/dz60rgb/CMakeLists.txt delete mode 100644 app/boards/arm/dz60rgb/pinmux.c delete mode 100644 app/boards/arm/planck/pinmux.c diff --git a/app/boards/arm/dz60rgb/CMakeLists.txt b/app/boards/arm/dz60rgb/CMakeLists.txt deleted file mode 100644 index 940af1fe057..00000000000 --- a/app/boards/arm/dz60rgb/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# SPDX-License-Identifier: MIT - -if(CONFIG_PINMUX) -zephyr_library() -zephyr_library_sources(pinmux.c) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) -endif() diff --git a/app/boards/arm/dz60rgb/pinmux.c b/app/boards/arm/dz60rgb/pinmux.c deleted file mode 100644 index 241c4ce1e97..00000000000 --- a/app/boards/arm/dz60rgb/pinmux.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017 I-SENSE group of ICCS - * - * SPDX-License-Identifier: MIT - */ - -#include -#include -#include -#include -#include - -#include - -/* pin assignments for STM32F3DISCOVERY board */ -static const struct pin_config pinconf[] = { -#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart1), okay) && CONFIG_SERIAL - {STM32_PIN_PC4, STM32F3_PINMUX_FUNC_PC4_USART1_TX}, - {STM32_PIN_PC5, STM32F3_PINMUX_FUNC_PC5_USART1_RX}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart2), okay) && CONFIG_SERIAL - {STM32_PIN_PA2, STM32F3_PINMUX_FUNC_PA2_USART2_TX}, - {STM32_PIN_PA3, STM32F3_PINMUX_FUNC_PA3_USART2_RX}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c1), okay) && CONFIG_I2C - {STM32_PIN_PB6, STM32F3_PINMUX_FUNC_PB6_I2C1_SCL}, - {STM32_PIN_PB7, STM32F3_PINMUX_FUNC_PB7_I2C1_SDA}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c2), okay) && CONFIG_I2C - {STM32_PIN_PA9, STM32F3_PINMUX_FUNC_PA9_I2C2_SCL}, - {STM32_PIN_PA10, STM32F3_PINMUX_FUNC_PA10_I2C2_SDA}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi1), okay) && CONFIG_SPI -#ifdef CONFIG_SPI_STM32_USE_HW_SS - {STM32_PIN_PA4, STM32F3_PINMUX_FUNC_PA4_SPI1_NSS}, -#endif /* CONFIG_SPI_STM32_USE_HW_SS */ - {STM32_PIN_PA5, STM32F3_PINMUX_FUNC_PA5_SPI1_SCK}, - {STM32_PIN_PA6, STM32F3_PINMUX_FUNC_PA6_SPI1_MISO}, - {STM32_PIN_PA7, STM32F3_PINMUX_FUNC_PA7_SPI1_MOSI}, -#endif -#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi2), okay) && CONFIG_SPI -#ifdef CONFIG_SPI_STM32_USE_HW_SS - {STM32_PIN_PB12, STM32F3_PINMUX_FUNC_PB12_SPI2_NSS}, -#endif /* CONFIG_SPI_STM32_USE_HW_SS */ - {STM32_PIN_PB13, STM32F3_PINMUX_FUNC_PB13_SPI2_SCK}, - {STM32_PIN_PB14, STM32F3_PINMUX_FUNC_PB14_SPI2_MISO}, - {STM32_PIN_PB15, STM32F3_PINMUX_FUNC_PB15_SPI2_MOSI}, -#endif -#ifdef CONFIG_USB_DC_STM32 - {STM32_PIN_PA11, STM32F3_PINMUX_FUNC_PA11_USB_DM}, - {STM32_PIN_PA12, STM32F3_PINMUX_FUNC_PA12_USB_DP}, -#endif /* CONFIG_USB_DC_STM32 */ -#if DT_NODE_HAS_STATUS(DT_NODELABEL(can1), okay) && CONFIG_CAN - {STM32_PIN_PD0, STM32F3_PINMUX_FUNC_PD0_CAN1_RX}, - {STM32_PIN_PD1, STM32F3_PINMUX_FUNC_PD1_CAN1_TX}, -#endif -}; - -static int pinmux_stm32_init(const struct device *port) { - ARG_UNUSED(port); - - stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf)); - - return 0; -} - -SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1, CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY); \ No newline at end of file diff --git a/app/boards/arm/planck/CMakeLists.txt b/app/boards/arm/planck/CMakeLists.txt index 6a0ec73e2b6..91bd098807e 100644 --- a/app/boards/arm/planck/CMakeLists.txt +++ b/app/boards/arm/planck/CMakeLists.txt @@ -2,8 +2,3 @@ list(APPEND EXTRA_DTC_FLAGS "-qq") -if(CONFIG_PINMUX) -zephyr_library() -zephyr_library_sources(pinmux.c) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) -endif() diff --git a/app/boards/arm/planck/pinmux.c b/app/boards/arm/planck/pinmux.c deleted file mode 100644 index 9080aa457c7..00000000000 --- a/app/boards/arm/planck/pinmux.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017 I-SENSE group of ICCS - * - * SPDX-License-Identifier: MIT - */ - -#include -#include -#include -#include -#include - -#include - -/* pin assignments for STM32F3DISCOVERY board */ -static const struct pin_config pinconf[] = { -#ifdef CONFIG_UART_1 - {STM32_PIN_PC4, STM32F3_PINMUX_FUNC_PC4_USART1_TX}, - {STM32_PIN_PC5, STM32F3_PINMUX_FUNC_PC5_USART1_RX}, -#endif /* CONFIG_UART_1 */ -#ifdef CONFIG_UART_2 - {STM32_PIN_PA2, STM32F3_PINMUX_FUNC_PA2_USART2_TX}, - {STM32_PIN_PA3, STM32F3_PINMUX_FUNC_PA3_USART2_RX}, -#endif /* CONFIG_UART_2 */ -#ifdef CONFIG_I2C_1 - {STM32_PIN_PB6, STM32F3_PINMUX_FUNC_PB6_I2C1_SCL}, - {STM32_PIN_PB7, STM32F3_PINMUX_FUNC_PB7_I2C1_SDA}, -#endif /* CONFIG_I2C_1 */ -#ifdef CONFIG_I2C_2 - {STM32_PIN_PA9, STM32F3_PINMUX_FUNC_PA9_I2C2_SCL}, - {STM32_PIN_PA10, STM32F3_PINMUX_FUNC_PA10_I2C2_SDA}, -#endif /* CONFIG_I2C_2 */ -#ifdef CONFIG_SPI_1 -#ifdef CONFIG_SPI_STM32_USE_HW_SS - {STM32_PIN_PA4, STM32F3_PINMUX_FUNC_PA4_SPI1_NSS}, -#endif /* CONFIG_SPI_STM32_USE_HW_SS */ - {STM32_PIN_PA5, STM32F3_PINMUX_FUNC_PA5_SPI1_SCK}, - {STM32_PIN_PA6, STM32F3_PINMUX_FUNC_PA6_SPI1_MISO}, - {STM32_PIN_PA7, STM32F3_PINMUX_FUNC_PA7_SPI1_MOSI}, -#endif /* CONFIG_SPI_1 */ -#ifdef CONFIG_SPI_2 -#ifdef CONFIG_SPI_STM32_USE_HW_SS - {STM32_PIN_PB12, STM32F3_PINMUX_FUNC_PB12_SPI2_NSS}, -#endif /* CONFIG_SPI_STM32_USE_HW_SS */ - {STM32_PIN_PB13, STM32F3_PINMUX_FUNC_PB13_SPI2_SCK}, - {STM32_PIN_PB14, STM32F3_PINMUX_FUNC_PB14_SPI2_MISO}, - {STM32_PIN_PB15, STM32F3_PINMUX_FUNC_PB15_SPI2_MOSI}, -#endif /* CONFIG_SPI_2 */ -#ifdef CONFIG_USB_DC_STM32 - {STM32_PIN_PA11, STM32F3_PINMUX_FUNC_PA11_USB_DM}, - {STM32_PIN_PA12, STM32F3_PINMUX_FUNC_PA12_USB_DP}, -#endif /* CONFIG_USB_DC_STM32 */ -#ifdef CONFIG_CAN_1 - {STM32_PIN_PD0, STM32F3_PINMUX_FUNC_PD0_CAN1_RX}, - {STM32_PIN_PD1, STM32F3_PINMUX_FUNC_PD1_CAN1_TX}, -#endif /* CONFIG_CAN_1 */ -}; - -static int pinmux_stm32_init(const struct device *port) { - ARG_UNUSED(port); - - stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf)); - - return 0; -} - -SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1, CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY); From df2e9933009bcc322188f5be1db1724aa7c00819 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 9 Nov 2021 04:19:55 +0000 Subject: [PATCH 0330/1130] feat(ble): Disable `BT_GATT_AUTO_SEC_REQ`. * Better compatibility w/ some operating systems, we already set security level on connects. --- app/Kconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index b60999ba739..5551ed31dc5 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -132,6 +132,9 @@ config ZMK_BLE_CLEAR_BONDS_ON_START config BT_GATT_NOTIFY_MULTIPLE default n +config BT_GATT_AUTO_SEC_REQ + default n + config BT_DEVICE_APPEARANCE default 961 From 94ac100b6b9a5d15c0d2ef881be8615ef1e4996b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 11 Dec 2021 22:39:41 -0500 Subject: [PATCH 0331/1130] refactor: Move to Zephyr v3.0.0 + ZMK fixes. --- .devcontainer/Dockerfile | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/hardware-metadata-validation.yml | 2 +- .github/workflows/test.yml | 2 +- app/src/behaviors/behavior_none.c | 1 - app/src/behaviors/behavior_reset.c | 2 +- app/src/behaviors/behavior_transparent.c | 1 - app/src/split_listener.c | 1 - app/west.yml | 10 ++++------ 9 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 7aed488007d..21a7fd5a90b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/zmkfirmware/zmk-dev-arm:2.5 +FROM docker.io/zmkfirmware/zmk-dev-arm:3.0 COPY .bashrc tmp RUN mv /tmp/.bashrc ~/.bashrc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bfb195fe0b4..03814a48d2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: if: ${{ always() }} runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:2.5 + image: docker.io/zmkfirmware/zmk-build-arm:3.0 needs: compile-matrix strategy: matrix: diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index 5c2fd375d0b..7b5ec92719f 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -29,7 +29,7 @@ jobs: validate-metadata: runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-dev-arm:2.5 + image: docker.io/zmkfirmware/zmk-dev-arm:3.0 steps: - uses: actions/checkout@v2 - name: Install dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e8cdcedfbe5..cbe60d047a9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: integration_test: runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:2.5 + image: docker.io/zmkfirmware/zmk-build-arm:3.0 steps: - name: Checkout uses: actions/checkout@v2 diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index d53a440051a..1e7eb2b08c1 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -7,7 +7,6 @@ #define DT_DRV_COMPAT zmk_behavior_none #include -#include #include #include diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index 0705df73b20..47b11fa4425 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -7,7 +7,7 @@ #define DT_DRV_COMPAT zmk_behavior_reset #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index 1f36e7a6dca..2ba057473ef 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -7,7 +7,6 @@ #define DT_DRV_COMPAT zmk_behavior_transparent #include -#include #include #include diff --git a/app/src/split_listener.c b/app/src/split_listener.c index 01cd89d912f..3f3763ae04a 100644 --- a/app/src/split_listener.c +++ b/app/src/split_listener.c @@ -5,7 +5,6 @@ */ #include -#include #include #include diff --git a/app/west.yml b/app/west.yml index cab02a5a7f7..964d54c87aa 100644 --- a/app/west.yml +++ b/app/west.yml @@ -4,12 +4,14 @@ manifest: url-base: https://github.com/zephyrproject-rtos - name: zmkfirmware url-base: https://github.com/zmkfirmware + - name: petejohanson + url-base: https://github.com/petejohanson - name: microsoft url-base: https://github.com/microsoft projects: - name: zephyr - remote: zmkfirmware - revision: v2.5.0+zmk-fixes + remote: petejohanson + revision: v3.0.0+zmk-fixes clone-depth: 1 import: # TODO: Rename once upstream offers option like `exclude` or `denylist` @@ -33,9 +35,5 @@ manifest: - openthread - edtt - trusted-firmware-m - - name: uf2 - remote: microsoft - path: tools/uf2 - clone-depth: 1 self: west-commands: scripts/west-commands.yml From 9203ae217bab6f1edcbf13f010054afc4191d14c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 20 Feb 2022 15:08:40 -0500 Subject: [PATCH 0332/1130] fix(activity): Use proper PM state for sleep. --- app/src/activity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/activity.c b/app/src/activity.c index 1fa75eb59b1..469ccdf73a2 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -69,8 +69,8 @@ void activity_work_handler(struct k_work *work) { #if IS_ENABLED(CONFIG_ZMK_SLEEP) if (inactive_time > MAX_SLEEP_MS && !is_usb_power_present()) { // Put devices in low power mode before sleeping - pm_power_state_force((struct pm_state_info){PM_STATE_STANDBY, 0, 0}); set_state(ZMK_ACTIVITY_SLEEP); + pm_power_state_set((struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ if (inactive_time > MAX_IDLE_MS) { From cc51562f789209e9ae7b45cb1c152181d6c37bc7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 21 Feb 2022 23:26:34 -0500 Subject: [PATCH 0333/1130] fix(boards): Move ARM clock config to DTS. --- app/boards/arm/bdn9/bdn9_rev2.dts | 49 ++++++++++++++------ app/boards/arm/bdn9/bdn9_rev2_defconfig | 18 ++----- app/boards/arm/ferris/ferris_rev02.dts | 20 ++++++++ app/boards/arm/ferris/ferris_rev02_defconfig | 12 +---- app/boards/arm/planck/planck_rev6.dts | 25 +++++++++- app/boards/arm/planck/planck_rev6_defconfig | 13 +----- app/boards/arm/proton_c/proton_c.dts | 36 +++++++++++++- app/boards/arm/proton_c/proton_c_defconfig | 15 +----- 8 files changed, 122 insertions(+), 66 deletions(-) diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index 3ce9758d2da..a28a3ae58a5 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -6,6 +6,7 @@ /dts-v1/; #include +#include #include / { @@ -19,7 +20,7 @@ zmk,kscan = &kscan; /* TODO: Enable once the GPIO bitbanging driver supports STM32 zmk,underglow = &led_strip; - */ + */ }; kscan: kscan { @@ -27,16 +28,16 @@ label = "KSCAN"; input-gpios - = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiof 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiof 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiof 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiof 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; /* @@ -48,7 +49,7 @@ chain-length = <9>; }; - */ + */ left_encoder: encoder_left { compatible = "alps,ec11"; @@ -82,8 +83,28 @@ }; }; +&clk_hsi { + status = "okay"; +}; + +&pll { + status = "okay"; + prediv = <1>; + mul = <6>; + clocks = <&clk_hsi>; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; +}; + &usb { status = "okay"; + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; label = "CDC_ACM_0"; @@ -97,7 +118,7 @@ &flash0 { /* * For more information, see: - * http: //docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions */ partitions { compatible = "fixed-partitions"; @@ -105,7 +126,7 @@ #size-cells = <1>; /* Set 6Kb of storage at the end of the 128Kb of flash */ - storage_partition: partition@3e800 { + storage_partition: partition@1e800 { label = "storage"; reg = <0x0001e800 0x00001800>; }; diff --git a/app/boards/arm/bdn9/bdn9_rev2_defconfig b/app/boards/arm/bdn9/bdn9_rev2_defconfig index 31395716a77..24dddb932d5 100644 --- a/app/boards/arm/bdn9/bdn9_rev2_defconfig +++ b/app/boards/arm/bdn9/bdn9_rev2_defconfig @@ -11,11 +11,11 @@ CONFIG_FPU=y # enable GPIO CONFIG_GPIO=y -# Needed for matrix to properly work -CONFIG_ZMK_KSCAN_DIRECT_POLLING=y +# Enable pinctrl +CONFIG_PINCTRL=y -# Enable pinmux -CONFIG_PINMUX=y +# Poll to avoid interrupt overlap issues +CONFIG_ZMK_KSCAN_DIRECT_POLLING=y # Needed to reduce this to size that will fit on F072 CONFIG_HEAP_MEM_POOL_SIZE=1024 @@ -23,13 +23,3 @@ CONFIG_HEAP_MEM_POOL_SIZE=1024 # clock configuration CONFIG_CLOCK_CONTROL=y -# Clock configuration for Cube Clock control driver -CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y -# use HSI as PLL input -CONFIG_CLOCK_STM32_PLL_SRC_HSI=y -# produce 72MHz clock at PLL output -CONFIG_CLOCK_STM32_PLL_PREDIV=1 -CONFIG_CLOCK_STM32_PLL_MULTIPLIER=12 -CONFIG_CLOCK_STM32_AHB_PRESCALER=1 -CONFIG_CLOCK_STM32_APB1_PRESCALER=2 -CONFIG_CLOCK_STM32_APB2_PRESCALER=1 diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 45c57dffd99..dbf3f6e21b5 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -99,6 +99,7 @@ &i2c2 { pinctrl-0 = <&i2c2_scl_pb10 &i2c2_sda_pb11>; + pinctrl-names = "default"; status = "okay"; clock-frequency = ; @@ -117,6 +118,25 @@ status = "okay"; }; +&clk_hsi { + status = "okay"; +}; + +&pll { + prediv = <1>; + mul = <6>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; +}; + + &rtc { status = "okay"; cdc_acm_uart: cdc_acm_uart { diff --git a/app/boards/arm/ferris/ferris_rev02_defconfig b/app/boards/arm/ferris/ferris_rev02_defconfig index 99c0b3296fe..8742cd86ea1 100644 --- a/app/boards/arm/ferris/ferris_rev02_defconfig +++ b/app/boards/arm/ferris/ferris_rev02_defconfig @@ -7,7 +7,7 @@ CONFIG_SOC_STM32F072XB=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=48000000 # enable PINMUX -CONFIG_PINMUX=y +CONFIG_PINCTRL=y # enable GPIO CONFIG_GPIO=y @@ -31,13 +31,3 @@ CONFIG_HEAP_MEM_POOL_SIZE=1024 # clock configuration CONFIG_CLOCK_CONTROL=y -# Clock configuration for Cube Clock control driver -CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y -# use HSI as PLL input -CONFIG_CLOCK_STM32_PLL_SRC_HSI=y -# produce 48MHz clock at PLL output -# CONFIG_CLOCK_STM32_PLL_PREDIV=1 -CONFIG_CLOCK_STM32_PLL_MULTIPLIER=6 -CONFIG_CLOCK_STM32_AHB_PRESCALER=1 -CONFIG_CLOCK_STM32_APB1_PRESCALER=1 -# CONFIG_CLOCK_STM32_APB2_PRESCALER=1 diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index ea45f33b149..9723959537c 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -1,11 +1,12 @@ /* - * Copyright (c) 2017 I-SENSE group of ICCS + * Copyright (c) 2020 The ZMK Contributors * * SPDX-License-Identifier: MIT */ /dts-v1/; #include +#include #include / { @@ -83,6 +84,8 @@ layout_2x2u_transform: }; &usb { + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; @@ -90,6 +93,26 @@ layout_2x2u_transform: }; }; +&clk_hse { + status = "okay"; + clock-frequency = ; +}; + +&pll { + prediv = <1>; + mul = <9>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <2>; + apb2-prescaler = <1>; +}; + &flash0 { /* * For more information, see: diff --git a/app/boards/arm/planck/planck_rev6_defconfig b/app/boards/arm/planck/planck_rev6_defconfig index e34ce002b30..a78ea45de88 100644 --- a/app/boards/arm/planck/planck_rev6_defconfig +++ b/app/boards/arm/planck/planck_rev6_defconfig @@ -8,21 +8,10 @@ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 # enable pinmux CONFIG_PINMUX=y +CONFIG_PINCTRL=y # enable GPIO CONFIG_GPIO=y # clock configuration CONFIG_CLOCK_CONTROL=y - -# Clock configuration for Cube Clock control driver -CONFIG_CLOCK_STM32_HSE_CLOCK=8000000 -CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y -# use HSE as PLL input -CONFIG_CLOCK_STM32_PLL_SRC_HSE=y -# produce 72MHz clock at PLL output -CONFIG_CLOCK_STM32_PLL_PREDIV=1 -CONFIG_CLOCK_STM32_PLL_MULTIPLIER=9 -CONFIG_CLOCK_STM32_AHB_PRESCALER=1 -CONFIG_CLOCK_STM32_APB1_PRESCALER=2 -CONFIG_CLOCK_STM32_APB2_PRESCALER=1 diff --git a/app/boards/arm/proton_c/proton_c.dts b/app/boards/arm/proton_c/proton_c.dts index 5a367d40ac2..df63427f894 100644 --- a/app/boards/arm/proton_c/proton_c.dts +++ b/app/boards/arm/proton_c/proton_c.dts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 The ZMK Contributors * * SPDX-License-Identifier: MIT */ @@ -16,6 +16,11 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart0; + }; + + aliases { + led0 = &led; }; leds { @@ -29,18 +34,47 @@ &usart1 { pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; + pinctrl-names = "default"; }; &spi2 { pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>; + pinctrl-names = "default"; }; &i2c1 { pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>; + pinctrl-names = "default"; +}; + +&clk_hse { + status = "okay"; + clock-frequency = ; +}; + +&pll { + prediv = <1>; + mul = <9>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <2>; + apb2-prescaler = <1>; }; &usb { + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; status = "okay"; + cdc_acm_uart0: cdc_acm_uart0 { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &rtc { diff --git a/app/boards/arm/proton_c/proton_c_defconfig b/app/boards/arm/proton_c/proton_c_defconfig index 0f624616e3a..32e1ade9604 100644 --- a/app/boards/arm/proton_c/proton_c_defconfig +++ b/app/boards/arm/proton_c/proton_c_defconfig @@ -8,8 +8,8 @@ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 # Floating Point Options CONFIG_FPU=y -# enable pinmux -CONFIG_PINMUX=y +# enable pinctrl +CONFIG_PINCTRL=y # enable GPIO CONFIG_GPIO=y @@ -17,14 +17,3 @@ CONFIG_GPIO=y # clock configuration CONFIG_CLOCK_CONTROL=y -# Clock configuration for Cube Clock control driver -CONFIG_CLOCK_STM32_HSE_CLOCK=8000000 -CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y -# use HSE as PLL input -CONFIG_CLOCK_STM32_PLL_SRC_HSE=y -# produce 72MHz clock at PLL output -CONFIG_CLOCK_STM32_PLL_PREDIV=1 -CONFIG_CLOCK_STM32_PLL_MULTIPLIER=9 -CONFIG_CLOCK_STM32_AHB_PRESCALER=1 -CONFIG_CLOCK_STM32_APB1_PRESCALER=2 -CONFIG_CLOCK_STM32_APB2_PRESCALER=1 From 4eb8f8cd23df49d366034da674293bef01c2aacd Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 22 Feb 2022 12:03:34 -0500 Subject: [PATCH 0334/1130] refactor(boards): Use Zephyr UF2 generation. --- app/boards/arm/bluemicro840/CMakeLists.txt | 8 -------- app/boards/arm/bluemicro840/bluemicro840_v1_defconfig | 1 + app/boards/arm/bt60/CMakeLists.txt | 8 -------- app/boards/arm/bt60/bt60_v1_defconfig | 1 + app/boards/arm/bt60/bt60_v1_hs_defconfig | 1 + app/boards/arm/mikoto/CMakeLists.txt | 8 -------- app/boards/arm/mikoto/mikoto_520_defconfig | 1 + app/boards/arm/nice60/CMakeLists.txt | 8 -------- app/boards/arm/nice60/nice60_defconfig | 1 + app/boards/arm/nice_nano/CMakeLists.txt | 8 -------- app/boards/arm/nice_nano/nice_nano_defconfig | 1 + app/boards/arm/nice_nano/nice_nano_v2_defconfig | 1 + app/boards/arm/nrf52840_m2/CMakeLists.txt | 11 ----------- app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig | 1 + app/boards/arm/nrfmicro/CMakeLists.txt | 8 -------- app/boards/arm/nrfmicro/nrfmicro_11_defconfig | 1 + app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig | 1 + app/boards/arm/nrfmicro/nrfmicro_13_defconfig | 1 + app/boards/arm/s40nc/CMakeLists.txt | 8 -------- app/boards/arm/s40nc/s40nc_defconfig | 1 + 20 files changed, 12 insertions(+), 67 deletions(-) delete mode 100644 app/boards/arm/bluemicro840/CMakeLists.txt delete mode 100644 app/boards/arm/bt60/CMakeLists.txt delete mode 100644 app/boards/arm/nice60/CMakeLists.txt delete mode 100644 app/boards/arm/nice_nano/CMakeLists.txt delete mode 100644 app/boards/arm/nrf52840_m2/CMakeLists.txt delete mode 100644 app/boards/arm/s40nc/CMakeLists.txt diff --git a/app/boards/arm/bluemicro840/CMakeLists.txt b/app/boards/arm/bluemicro840/CMakeLists.txt deleted file mode 100644 index 00952c30987..00000000000 --- a/app/boards/arm/bluemicro840/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig index 96f03ca48c5..b8e4e8055e6 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig +++ b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/bt60/CMakeLists.txt b/app/boards/arm/bt60/CMakeLists.txt deleted file mode 100644 index 00952c30987..00000000000 --- a/app/boards/arm/bt60/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/bt60/bt60_v1_defconfig b/app/boards/arm/bt60/bt60_v1_defconfig index 0f13395b340..813dcecea5a 100644 --- a/app/boards/arm/bt60/bt60_v1_defconfig +++ b/app/boards/arm/bt60/bt60_v1_defconfig @@ -15,6 +15,7 @@ CONFIG_EC11=y CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/bt60/bt60_v1_hs_defconfig b/app/boards/arm/bt60/bt60_v1_hs_defconfig index 27a224903c1..f2327fd3f42 100644 --- a/app/boards/arm/bt60/bt60_v1_hs_defconfig +++ b/app/boards/arm/bt60/bt60_v1_hs_defconfig @@ -15,6 +15,7 @@ CONFIG_EC11=y CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/mikoto/CMakeLists.txt b/app/boards/arm/mikoto/CMakeLists.txt index cd4843af1f0..12cf9b1cf1a 100644 --- a/app/boards/arm/mikoto/CMakeLists.txt +++ b/app/boards/arm/mikoto/CMakeLists.txt @@ -1,11 +1,3 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) if(CONFIG_PINMUX) zephyr_library() diff --git a/app/boards/arm/mikoto/mikoto_520_defconfig b/app/boards/arm/mikoto/mikoto_520_defconfig index 925711c005c..d5fd8958ca9 100644 --- a/app/boards/arm/mikoto/mikoto_520_defconfig +++ b/app/boards/arm/mikoto/mikoto_520_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nice60/CMakeLists.txt b/app/boards/arm/nice60/CMakeLists.txt deleted file mode 100644 index f833ff2e975..00000000000 --- a/app/boards/arm/nice60/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x1000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/nice60/nice60_defconfig b/app/boards/arm/nice60/nice60_defconfig index 3a3a978ff5a..9fac3a30bfd 100644 --- a/app/boards/arm/nice60/nice60_defconfig +++ b/app/boards/arm/nice60/nice60_defconfig @@ -12,6 +12,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nice_nano/CMakeLists.txt b/app/boards/arm/nice_nano/CMakeLists.txt deleted file mode 100644 index 00952c30987..00000000000 --- a/app/boards/arm/nice_nano/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/nice_nano/nice_nano_defconfig b/app/boards/arm/nice_nano/nice_nano_defconfig index 393d61fe165..1ff025ec738 100644 --- a/app/boards/arm/nice_nano/nice_nano_defconfig +++ b/app/boards/arm/nice_nano/nice_nano_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nice_nano/nice_nano_v2_defconfig b/app/boards/arm/nice_nano/nice_nano_v2_defconfig index d061e389709..206e51c2f17 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2_defconfig +++ b/app/boards/arm/nice_nano/nice_nano_v2_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nrf52840_m2/CMakeLists.txt b/app/boards/arm/nrf52840_m2/CMakeLists.txt deleted file mode 100644 index 044f93cd3b8..00000000000 --- a/app/boards/arm/nrf52840_m2/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig b/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig index 2f563c3831e..b7671ba9f12 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig @@ -12,6 +12,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nrfmicro/CMakeLists.txt b/app/boards/arm/nrfmicro/CMakeLists.txt index cd4843af1f0..12cf9b1cf1a 100644 --- a/app/boards/arm/nrfmicro/CMakeLists.txt +++ b/app/boards/arm/nrfmicro/CMakeLists.txt @@ -1,11 +1,3 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) if(CONFIG_PINMUX) zephyr_library() diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig index c1ac8364c2b..3f6a447d77a 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig index b35cb791448..efe924f29f5 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig index cac11642bec..06758784e58 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig @@ -11,6 +11,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y diff --git a/app/boards/arm/s40nc/CMakeLists.txt b/app/boards/arm/s40nc/CMakeLists.txt deleted file mode 100644 index f833ff2e975..00000000000 --- a/app/boards/arm/s40nc/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x1000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/s40nc/s40nc_defconfig b/app/boards/arm/s40nc/s40nc_defconfig index e9bbfc17d70..31972781db1 100644 --- a/app/boards/arm/s40nc/s40nc_defconfig +++ b/app/boards/arm/s40nc/s40nc_defconfig @@ -12,6 +12,7 @@ CONFIG_ARM_MPU=y CONFIG_GPIO=y CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NVS=y From 917c6a06602cdd428dc995c9799b72bd070179d3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 23 Feb 2022 19:17:31 +0000 Subject: [PATCH 0335/1130] fix(power): Fix ext power generic driver. * Adjust for device API changes to fetch ext power driver instance from settings callback. * New PM action callback API. --- app/src/ext_power_generic.c | 49 ++++++++++--------------------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 367cf3a281a..3f83bd9522b 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -32,9 +33,6 @@ struct ext_power_generic_data { #if IS_ENABLED(CONFIG_SETTINGS) bool settings_init; #endif -#ifdef CONFIG_PM_DEVICE - uint32_t pm_state; -#endif }; #if IS_ENABLED(CONFIG_SETTINGS) @@ -94,7 +92,7 @@ static int ext_power_settings_set(const char *name, size_t len, settings_read_cb int rc; if (settings_name_steq(name, DT_INST_LABEL(0), &next) && !next) { - const struct device *ext_power = device_get_binding(DT_INST_LABEL(0)); + const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0)); struct ext_power_generic_data *data = ext_power->data; if (len != sizeof(data->status)) { @@ -142,10 +140,6 @@ static int ext_power_generic_init(const struct device *dev) { return -EIO; } -#ifdef CONFIG_PM_DEVICE - data->pm_state = DEVICE_PM_ACTIVE_STATE; -#endif - #if IS_ENABLED(CONFIG_SETTINGS) settings_subsys_init(); @@ -179,35 +173,17 @@ static int ext_power_generic_init(const struct device *dev) { } #ifdef CONFIG_PM_DEVICE -static int ext_power_generic_pm_control(const struct device *dev, uint32_t ctrl_command, - void *context, device_pm_cb cb, void *arg) { - int rc; - struct ext_power_generic_data *data = dev->data; - - switch (ctrl_command) { - case DEVICE_PM_SET_POWER_STATE: - if (*((uint32_t *)context) == DEVICE_PM_ACTIVE_STATE) { - data->pm_state = DEVICE_PM_ACTIVE_STATE; - rc = 0; - } else { - ext_power_generic_disable(dev); - data->pm_state = DEVICE_PM_LOW_POWER_STATE; - rc = 0; - } - break; - case DEVICE_PM_GET_POWER_STATE: - *((uint32_t *)context) = data->pm_state; - rc = 0; - break; +static int ext_power_generic_pm_action(const struct device *dev, enum pm_device_action action) { + switch (action) { + case PM_DEVICE_ACTION_TURN_ON: + ext_power_generic_enable(dev); + return 0; + case PM_DEVICE_ACTION_TURN_OFF: + ext_power_generic_disable(dev); + return 0; default: - rc = -EINVAL; + return -ENOTSUP; } - - if (cb != NULL) { - cb(dev, rc, context, arg); - } - - return rc; } #endif /* CONFIG_PM_DEVICE */ @@ -230,7 +206,8 @@ static const struct ext_power_api api = {.enable = ext_power_generic_enable, #define ZMK_EXT_POWER_INIT_PRIORITY 81 -DEVICE_DT_INST_DEFINE(0, ext_power_generic_init, &ext_power_generic_pm_control, &data, &config, +PM_DEVICE_DT_INST_DEFINE(0, ext_power_generic_pm_action); +DEVICE_DT_INST_DEFINE(0, ext_power_generic_init, PM_DEVICE_DT_INST_GET(0), &data, &config, POST_KERNEL, ZMK_EXT_POWER_INIT_PRIORITY, &api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From 5015a88545c43d10822407d12a095889622865be Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 1 Mar 2022 03:46:43 +0000 Subject: [PATCH 0336/1130] fix(split): Proper role checking in BT callbacks. * Properly react to events only for connections with the correct role. --- app/src/ble.c | 18 +++++++++++++++++- app/src/split/bluetooth/central.c | 17 ++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index a930cadc94f..d9121583d99 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -377,9 +377,17 @@ static bool is_conn_active_profile(const struct bt_conn *conn) { static void connected(struct bt_conn *conn, uint8_t err) { char addr[BT_ADDR_LE_STR_LEN]; - bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + struct bt_conn_info info; LOG_DBG("Connected thread: %p", k_current_get()); + bt_conn_get_info(conn, &info); + + if (info.role != BT_CONN_ROLE_PERIPHERAL) { + LOG_DBG("SKIPPING FOR ROLE %d", info.role); + return; + } + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); advertising_status = ZMK_ADV_NONE; if (err) { @@ -408,11 +416,19 @@ static void connected(struct bt_conn *conn, uint8_t err) { static void disconnected(struct bt_conn *conn, uint8_t reason) { char addr[BT_ADDR_LE_STR_LEN]; + struct bt_conn_info info; bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); LOG_DBG("Disconnected from %s (reason 0x%02x)", log_strdup(addr), reason); + bt_conn_get_info(conn, &info); + + if (info.role != BT_CONN_ROLE_PERIPHERAL) { + LOG_DBG("SKIPPING FOR ROLE %d", info.role); + return; + } + // We need to do this in a work callback, otherwise the advertising update will still see the // connection for a profile as active, and not start advertising yet. k_work_submit(&update_advertising_work); diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 07ab35a0d77..7eacc6750d5 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -395,6 +395,8 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) { } else { param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); + LOG_DBG("Initiating new connnection"); + err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &slot->conn); if (err) { LOG_ERR("Create conn failed (err %d) (create conn? 0x%04x)", err, @@ -445,9 +447,17 @@ static int start_scan(void) { static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { char addr[BT_ADDR_LE_STR_LEN]; + struct bt_conn_info info; bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + bt_conn_get_info(conn, &info); + + if (info.role != BT_CONN_ROLE_CENTRAL) { + LOG_DBG("SKIPPING FOR ROLE %d", info.role); + return; + } + if (conn_err) { LOG_ERR("Failed to connect to %s (%u)", log_strdup(addr), conn_err); @@ -465,12 +475,17 @@ static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { char addr[BT_ADDR_LE_STR_LEN]; + int err; bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); LOG_DBG("Disconnected: %s (reason %d)", log_strdup(addr), reason); - release_peripheral_slot_for_conn(conn); + err = release_peripheral_slot_for_conn(conn); + + if (err < 0) { + return; + } start_scan(); } From 9368f6200cb778a09c93c0fa6b9182f79d4c3874 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 10 Mar 2022 15:03:20 -0500 Subject: [PATCH 0337/1130] fix(display): Add zephyr,display chosen nodes. --- app/boards/shields/corne/corne.dtsi | 1 + app/boards/shields/jorne/jorne.dtsi | 1 + app/boards/shields/knob_goblin/knob_goblin.overlay | 1 + app/boards/shields/kyria/kyria_common.dtsi | 3 ++- app/boards/shields/lily58/lily58.dtsi | 1 + app/boards/shields/lotus58/lotus58.dtsi | 3 ++- app/boards/shields/microdox/microdox.dtsi | 1 + app/boards/shields/murphpad/murphpad.overlay | 1 + app/boards/shields/nibble/nibble.overlay | 1 + app/boards/shields/sofle/sofle.dtsi | 3 ++- app/boards/shields/tidbit/tidbit.dtsi | 1 + app/boards/shields/zodiark/zodiark.dtsi | 3 ++- 12 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index 167c0916ee4..e81afcf8da1 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index a84798cc4b9..6f43393d52a 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/shields/knob_goblin/knob_goblin.overlay b/app/boards/shields/knob_goblin/knob_goblin.overlay index 82cc3dc372c..d3ba8c5be79 100644 --- a/app/boards/shields/knob_goblin/knob_goblin.overlay +++ b/app/boards/shields/knob_goblin/knob_goblin.overlay @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; }; diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index 479f090ce83..c52ab05abf4 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -44,7 +45,7 @@ &pro_micro_i2c { status = "okay"; - ssd1306@3c { + oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; label = "DISPLAY"; diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 8e8ed3f2155..4efa10699ff 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index fb0d174f2a6..1df0bf38f0e 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -71,7 +72,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 &pro_micro_i2c { status = "okay"; - ssd1306@3c { + oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; label = "DISPLAY"; diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index d489430e7c6..b8d47b2a0eb 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index 25bd10f9b40..c66f2aeffbc 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; }; diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index 9e2fced8709..13f2c2fe248 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 9646b59dc5c..71dc04d87a1 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -71,7 +72,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) &pro_micro_i2c { status = "okay"; - ssd1306@3c { + oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; label = "DISPLAY"; diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index 2b08ad499d0..ba97a57a92b 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -90,6 +90,7 @@ }; chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi index 0adb7f672b7..cda0b1a6dae 100644 --- a/app/boards/shields/zodiark/zodiark.dtsi +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -8,6 +8,7 @@ / { chosen { + zephyr,display = &oled; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -71,7 +72,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R &pro_micro_i2c { status = "okay"; - ssd1306@3c { + oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; label = "DISPLAY"; From 97e62f2da5bf8c4500aab4887bef02d912bb0137 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 14 Mar 2022 22:23:20 -0400 Subject: [PATCH 0338/1130] feat(boards): Add Seeed(uino) XIAO interconnect * Document the Seeed(uino) XIAO interconnect * Add metadata files for two upstream boards, XIAO and XIAO BLE. * Add conf and overlay files to properly configure the boards for ZMK use. --- .../arm/seeeduino_xiao/seeeduino_xiao.zmk.yml | 9 +++++ .../seeeduino_xiao_ble.zmk.yml | 10 ++++++ .../seeed_xiao/seeed_xiao.zmk.yml | 10 ++++++ app/boards/seeeduino_xiao.conf | 5 +++ app/boards/seeeduino_xiao.overlay | 19 +++++++++++ app/boards/seeeduino_xiao_ble.conf | 8 +++++ app/boards/seeeduino_xiao_ble.overlay | 33 +++++++++++++++++++ 7 files changed, 94 insertions(+) create mode 100644 app/boards/arm/seeeduino_xiao/seeeduino_xiao.zmk.yml create mode 100644 app/boards/arm/seeeduino_xiao_ble/seeeduino_xiao_ble.zmk.yml create mode 100644 app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml create mode 100644 app/boards/seeeduino_xiao.conf create mode 100644 app/boards/seeeduino_xiao.overlay create mode 100644 app/boards/seeeduino_xiao_ble.conf create mode 100644 app/boards/seeeduino_xiao_ble.overlay diff --git a/app/boards/arm/seeeduino_xiao/seeeduino_xiao.zmk.yml b/app/boards/arm/seeeduino_xiao/seeeduino_xiao.zmk.yml new file mode 100644 index 00000000000..1225fb317bc --- /dev/null +++ b/app/boards/arm/seeeduino_xiao/seeeduino_xiao.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: seeeduino_xiao +name: Seeeduino XIAO +type: board +arch: arm +outputs: + - usb +url: https://wiki.seeedstudio.com/Seeeduino-XIAO/ +exposes: [seeed_xiao] diff --git a/app/boards/arm/seeeduino_xiao_ble/seeeduino_xiao_ble.zmk.yml b/app/boards/arm/seeeduino_xiao_ble/seeeduino_xiao_ble.zmk.yml new file mode 100644 index 00000000000..360bd04b314 --- /dev/null +++ b/app/boards/arm/seeeduino_xiao_ble/seeeduino_xiao_ble.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: seeeduino_xiao_ble +name: Seeeduino XIAO BLE +type: board +arch: arm +outputs: + - usb + - ble +url: https://wiki.seeedstudio.com/XIAO_BLE/ +exposes: [seeed_xiao] diff --git a/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml b/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml new file mode 100644 index 00000000000..cb9f6b56c89 --- /dev/null +++ b/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: seeed_xiao +name: Seeed XIAO +type: interconnect +url: https://wiki.seeedstudio.com/Seeeduino-XIAO/ +manufacturer: Seeed +description: | + The Seeed(uino) XIAO is a popular smaller format micro-controller, that has gained popularity as an alterative + to the SparkFun Pro Micro. Since its creation, several pin compatible controllers, such + as the Seeeduino XIAO BLE, Adafruit QT Py and Adafruit QT Py RP2040, have become available. diff --git a/app/boards/seeeduino_xiao.conf b/app/boards/seeeduino_xiao.conf new file mode 100644 index 00000000000..f0db8ed14dc --- /dev/null +++ b/app/boards/seeeduino_xiao.conf @@ -0,0 +1,5 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_USB=y diff --git a/app/boards/seeeduino_xiao.overlay b/app/boards/seeeduino_xiao.overlay new file mode 100644 index 00000000000..70080286ece --- /dev/null +++ b/app/boards/seeeduino_xiao.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zephyr,console = &cdc_acm_uart; + }; +}; + +&usb0 { + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + diff --git a/app/boards/seeeduino_xiao_ble.conf b/app/boards/seeeduino_xiao_ble.conf new file mode 100644 index 00000000000..92367028cbe --- /dev/null +++ b/app/boards/seeeduino_xiao_ble.conf @@ -0,0 +1,8 @@ + +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay new file mode 100644 index 00000000000..7e0d4ff9c2c --- /dev/null +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + chosen { + zephyr,console = &cdc_acm_uart; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 7>; + power-gpios = <&gpio0 14 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; + output-ohms = <1000000>; + full-ohms = <(1000000 + 510000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&usbd { + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + From 35db784b5db48f8ce6d9cd3944c226d697d04312 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 15 Mar 2022 00:29:23 -0400 Subject: [PATCH 0339/1130] fix: Change detection fixes for interconnect files. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03814a48d2a..999aad3a7be 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -249,7 +249,7 @@ jobs: } break; case "interconnect": - break; + return []; } }); }))).flat(); From 953f5212a8c225745284bb3f86e13b1fd7505eb5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 24 Mar 2022 11:38:14 +0000 Subject: [PATCH 0340/1130] refactor(tests): Move to native_posix_64 target. * Allows removing multilib from docker images * Run properly in aarch64 host docker containers for testing on Rasberry Pi. * Small sticky-keys fix to initialize w/ correct constant for max uin32_t value. --- app/boards/native_posix_64.conf | 11 +++++++++++ app/boards/native_posix_64.overlay | 18 ++++++++++++++++++ app/run-test.sh | 4 ++-- app/src/behaviors/behavior_sticky_key.c | 2 +- ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 .../native_posix_64.keymap | 17 +++++++++++++++++ ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 .../native_posix_64.keymap | 13 +++++++++++++ ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 ...{native_posix.conf => native_posix_64.conf} | 0 ...ive_posix.keymap => native_posix_64.keymap} | 0 179 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 app/boards/native_posix_64.conf create mode 100644 app/boards/native_posix_64.overlay rename app/tests/backlight/basic/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/backlight/basic/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/backlight/config-brt/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/backlight/config-brt/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/backlight/config-on/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/backlight/config-on/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/backlight/config-step/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/backlight/config-step/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/backlight/cycle/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/backlight/cycle/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/backlight/low-brightness/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/backlight/low-brightness/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/caps-word/continue-with-non-alpha-continue-list-item/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/caps-word/continue-with-non-modified-numeric-usage-id/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/caps-word/deactivate-by-non-alpha-non-continuation/{native_posix.keymap => native_posix_64.keymap} (100%) create mode 100644 app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap rename app/tests/combo/combos-and-holdtaps-0/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/combos-and-holdtaps-1/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/combos-and-holdtaps-2/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/layer-filter-0/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/layer-filter-1/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/multiple-timeouts/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/overlapping-combos-0/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/overlapping-combos-1/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/overlapping-combos-2/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/overlapping-combos-3/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/partially-overlapping-combos/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press-release-long-combo-complete/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press-release-long-combo-incomplete/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press-release-long-combo-wrong-last-key/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press-timeout/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press1-press2-release1-release2/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press1-press2-release2-release1/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/press1-release1-press2-release2/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/slowrelease-disabled/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/combo/slowrelease-enabled/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/conditional-layer/chained-activation/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/conditional-layer/mo-overlap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/conditional-layer/multiple-configs/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/conditional-layer/quad-layer/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/conditional-layer/tri-layer-alt-order/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/conditional-layer/tri-layer/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/gresc/gresc-press-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/gresc/gresc-two-instances/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/1-dn-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/5-quick-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/6-retro-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/balanced/many-nested/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/1-dn-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/5-quick-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/6-retro-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/1-dn-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/5-quick-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/6-nested-timeouts/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/1-dn-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/key-repeat/ignore-other-usage-page-events/{native_posix.keymap => native_posix_64.keymap} (100%) create mode 100644 app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap rename app/tests/key-repeat/press-and-release-with-explicit-modifiers/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/keypress/kp-press-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/basic/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/mo-plus-modifier-from-hold-tap/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/mo-plus-modifier-macro/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/press-mid-macro/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/press-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/timing-override/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/macros/wait-macro-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/momentary-layer/1-normal/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/momentary-layer/2-early-key-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/momentary-layer/3-covered/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/momentary-layer/4-nested/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/momentary-layer/5-nested-early-key-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/none/layered/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/1-os-dn-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/10-callum-mods/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/10-sl-sl-kp/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/8-lsk-osk-combination/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/sticky-keys/9-sk-dn-up-dn-up/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/1a-tap1/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/1b-tap2/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/1c-tap3/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/2a-hold1/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/2b-hold2/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/2c-hold3/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/3a-tap-int-mid/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/3b-tap-int-seq/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/3c-tap-int-after/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/3d-hold-int-mid/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/3e-hold-int-seq/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/3f-hold-int-after/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/4a-single/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/5a-tdint-mid/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/5b-tdint-seq/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/5c-tdint-after/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/tap-dance/5d-tdint-multiple/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/to-layer/normal/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/toggle-layer/early-key-release/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/toggle-layer/normal/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/transparent/layered/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/transparent/normal/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/wpm/1-single_keypress/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/wpm/1-single_keypress/{native_posix.keymap => native_posix_64.keymap} (100%) rename app/tests/wpm/2-multiple_keypress/{native_posix.conf => native_posix_64.conf} (100%) rename app/tests/wpm/2-multiple_keypress/{native_posix.keymap => native_posix_64.keymap} (100%) diff --git a/app/boards/native_posix_64.conf b/app/boards/native_posix_64.conf new file mode 100644 index 00000000000..7d3e62b725e --- /dev/null +++ b/app/boards/native_posix_64.conf @@ -0,0 +1,11 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=n +# Enable to have the native posix build expose USBIP device(s) +# CONFIG_ZMK_USB=y +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 diff --git a/app/boards/native_posix_64.overlay b/app/boards/native_posix_64.overlay new file mode 100644 index 00000000000..2c1ed79d0e6 --- /dev/null +++ b/app/boards/native_posix_64.overlay @@ -0,0 +1,18 @@ +#include +#include +#include + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-mock"; + label = "KSCAN_MOCK"; + + rows = <2>; + columns = <2>; + exit-after; + }; +}; diff --git a/app/run-test.sh b/app/run-test.sh index da4803d6fab..9777f185676 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -13,7 +13,7 @@ if [ $path = "all" ]; then path="tests" fi -testcases=$(find $path -name native_posix.keymap -exec dirname \{\} \;) +testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;) num_cases=$(echo "$testcases" | wc -l) if [ $num_cases -gt 1 ]; then echo "" > ./build/tests/pass-fail.log @@ -26,7 +26,7 @@ fi testcase="$path" echo "Running $testcase:" -west build -d build/$testcase -b native_posix -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 +west build -d build/$testcase -b native_posix_64 -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 if [ $? -gt 0 ]; then echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log exit 1 diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 186a92d2bee..904a84fe7f6 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -26,7 +26,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define ZMK_BHV_STICKY_KEY_MAX_HELD 10 -#define ZMK_BHV_STICKY_KEY_POSITION_FREE ULONG_MAX +#define ZMK_BHV_STICKY_KEY_POSITION_FREE UINT32_MAX struct behavior_sticky_key_config { uint32_t release_after_ms; diff --git a/app/tests/backlight/basic/native_posix.conf b/app/tests/backlight/basic/native_posix_64.conf similarity index 100% rename from app/tests/backlight/basic/native_posix.conf rename to app/tests/backlight/basic/native_posix_64.conf diff --git a/app/tests/backlight/basic/native_posix.keymap b/app/tests/backlight/basic/native_posix_64.keymap similarity index 100% rename from app/tests/backlight/basic/native_posix.keymap rename to app/tests/backlight/basic/native_posix_64.keymap diff --git a/app/tests/backlight/config-brt/native_posix.conf b/app/tests/backlight/config-brt/native_posix_64.conf similarity index 100% rename from app/tests/backlight/config-brt/native_posix.conf rename to app/tests/backlight/config-brt/native_posix_64.conf diff --git a/app/tests/backlight/config-brt/native_posix.keymap b/app/tests/backlight/config-brt/native_posix_64.keymap similarity index 100% rename from app/tests/backlight/config-brt/native_posix.keymap rename to app/tests/backlight/config-brt/native_posix_64.keymap diff --git a/app/tests/backlight/config-on/native_posix.conf b/app/tests/backlight/config-on/native_posix_64.conf similarity index 100% rename from app/tests/backlight/config-on/native_posix.conf rename to app/tests/backlight/config-on/native_posix_64.conf diff --git a/app/tests/backlight/config-on/native_posix.keymap b/app/tests/backlight/config-on/native_posix_64.keymap similarity index 100% rename from app/tests/backlight/config-on/native_posix.keymap rename to app/tests/backlight/config-on/native_posix_64.keymap diff --git a/app/tests/backlight/config-step/native_posix.conf b/app/tests/backlight/config-step/native_posix_64.conf similarity index 100% rename from app/tests/backlight/config-step/native_posix.conf rename to app/tests/backlight/config-step/native_posix_64.conf diff --git a/app/tests/backlight/config-step/native_posix.keymap b/app/tests/backlight/config-step/native_posix_64.keymap similarity index 100% rename from app/tests/backlight/config-step/native_posix.keymap rename to app/tests/backlight/config-step/native_posix_64.keymap diff --git a/app/tests/backlight/cycle/native_posix.conf b/app/tests/backlight/cycle/native_posix_64.conf similarity index 100% rename from app/tests/backlight/cycle/native_posix.conf rename to app/tests/backlight/cycle/native_posix_64.conf diff --git a/app/tests/backlight/cycle/native_posix.keymap b/app/tests/backlight/cycle/native_posix_64.keymap similarity index 100% rename from app/tests/backlight/cycle/native_posix.keymap rename to app/tests/backlight/cycle/native_posix_64.keymap diff --git a/app/tests/backlight/low-brightness/native_posix.conf b/app/tests/backlight/low-brightness/native_posix_64.conf similarity index 100% rename from app/tests/backlight/low-brightness/native_posix.conf rename to app/tests/backlight/low-brightness/native_posix_64.conf diff --git a/app/tests/backlight/low-brightness/native_posix.keymap b/app/tests/backlight/low-brightness/native_posix_64.keymap similarity index 100% rename from app/tests/backlight/low-brightness/native_posix.keymap rename to app/tests/backlight/low-brightness/native_posix_64.keymap diff --git a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix.keymap b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix_64.keymap similarity index 100% rename from app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix.keymap rename to app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix_64.keymap diff --git a/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix.keymap b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix_64.keymap similarity index 100% rename from app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix.keymap rename to app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix_64.keymap diff --git a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix.keymap b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix_64.keymap similarity index 100% rename from app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix.keymap rename to app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix_64.keymap diff --git a/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap b/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap new file mode 100644 index 00000000000..e0695564004 --- /dev/null +++ b/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10000) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,30) + ZMK_MOCK_RELEASE(0,1,30) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,30) + ZMK_MOCK_PRESS(0,1,30) + ZMK_MOCK_RELEASE(0,1,1000) + >; +}; \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-0/native_posix.keymap b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap similarity index 100% rename from app/tests/combo/combos-and-holdtaps-0/native_posix.keymap rename to app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap diff --git a/app/tests/combo/combos-and-holdtaps-1/native_posix.keymap b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap similarity index 100% rename from app/tests/combo/combos-and-holdtaps-1/native_posix.keymap rename to app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap diff --git a/app/tests/combo/combos-and-holdtaps-2/native_posix.keymap b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap similarity index 100% rename from app/tests/combo/combos-and-holdtaps-2/native_posix.keymap rename to app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap diff --git a/app/tests/combo/layer-filter-0/native_posix.keymap b/app/tests/combo/layer-filter-0/native_posix_64.keymap similarity index 100% rename from app/tests/combo/layer-filter-0/native_posix.keymap rename to app/tests/combo/layer-filter-0/native_posix_64.keymap diff --git a/app/tests/combo/layer-filter-1/native_posix.keymap b/app/tests/combo/layer-filter-1/native_posix_64.keymap similarity index 100% rename from app/tests/combo/layer-filter-1/native_posix.keymap rename to app/tests/combo/layer-filter-1/native_posix_64.keymap diff --git a/app/tests/combo/multiple-timeouts/native_posix.keymap b/app/tests/combo/multiple-timeouts/native_posix_64.keymap similarity index 100% rename from app/tests/combo/multiple-timeouts/native_posix.keymap rename to app/tests/combo/multiple-timeouts/native_posix_64.keymap diff --git a/app/tests/combo/overlapping-combos-0/native_posix.keymap b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap similarity index 100% rename from app/tests/combo/overlapping-combos-0/native_posix.keymap rename to app/tests/combo/overlapping-combos-0/native_posix_64.keymap diff --git a/app/tests/combo/overlapping-combos-1/native_posix.keymap b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap similarity index 100% rename from app/tests/combo/overlapping-combos-1/native_posix.keymap rename to app/tests/combo/overlapping-combos-1/native_posix_64.keymap diff --git a/app/tests/combo/overlapping-combos-2/native_posix.keymap b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap similarity index 100% rename from app/tests/combo/overlapping-combos-2/native_posix.keymap rename to app/tests/combo/overlapping-combos-2/native_posix_64.keymap diff --git a/app/tests/combo/overlapping-combos-3/native_posix.keymap b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap similarity index 100% rename from app/tests/combo/overlapping-combos-3/native_posix.keymap rename to app/tests/combo/overlapping-combos-3/native_posix_64.keymap diff --git a/app/tests/combo/partially-overlapping-combos/native_posix.keymap b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap similarity index 100% rename from app/tests/combo/partially-overlapping-combos/native_posix.keymap rename to app/tests/combo/partially-overlapping-combos/native_posix_64.keymap diff --git a/app/tests/combo/press-release-long-combo-complete/native_posix.keymap b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press-release-long-combo-complete/native_posix.keymap rename to app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap diff --git a/app/tests/combo/press-release-long-combo-incomplete/native_posix.keymap b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press-release-long-combo-incomplete/native_posix.keymap rename to app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix.keymap b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press-release-long-combo-wrong-last-key/native_posix.keymap rename to app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap diff --git a/app/tests/combo/press-release/native_posix.keymap b/app/tests/combo/press-release/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press-release/native_posix.keymap rename to app/tests/combo/press-release/native_posix_64.keymap diff --git a/app/tests/combo/press-timeout/native_posix.keymap b/app/tests/combo/press-timeout/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press-timeout/native_posix.keymap rename to app/tests/combo/press-timeout/native_posix_64.keymap diff --git a/app/tests/combo/press1-press2-release1-release2/native_posix.keymap b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press1-press2-release1-release2/native_posix.keymap rename to app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap diff --git a/app/tests/combo/press1-press2-release2-release1/native_posix.keymap b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press1-press2-release2-release1/native_posix.keymap rename to app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap diff --git a/app/tests/combo/press1-release1-press2-release2/native_posix.keymap b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap similarity index 100% rename from app/tests/combo/press1-release1-press2-release2/native_posix.keymap rename to app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap diff --git a/app/tests/combo/slowrelease-disabled/native_posix.keymap b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap similarity index 100% rename from app/tests/combo/slowrelease-disabled/native_posix.keymap rename to app/tests/combo/slowrelease-disabled/native_posix_64.keymap diff --git a/app/tests/combo/slowrelease-enabled/native_posix.keymap b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap similarity index 100% rename from app/tests/combo/slowrelease-enabled/native_posix.keymap rename to app/tests/combo/slowrelease-enabled/native_posix_64.keymap diff --git a/app/tests/conditional-layer/chained-activation/native_posix.keymap b/app/tests/conditional-layer/chained-activation/native_posix_64.keymap similarity index 100% rename from app/tests/conditional-layer/chained-activation/native_posix.keymap rename to app/tests/conditional-layer/chained-activation/native_posix_64.keymap diff --git a/app/tests/conditional-layer/mo-overlap/native_posix.keymap b/app/tests/conditional-layer/mo-overlap/native_posix_64.keymap similarity index 100% rename from app/tests/conditional-layer/mo-overlap/native_posix.keymap rename to app/tests/conditional-layer/mo-overlap/native_posix_64.keymap diff --git a/app/tests/conditional-layer/multiple-configs/native_posix.keymap b/app/tests/conditional-layer/multiple-configs/native_posix_64.keymap similarity index 100% rename from app/tests/conditional-layer/multiple-configs/native_posix.keymap rename to app/tests/conditional-layer/multiple-configs/native_posix_64.keymap diff --git a/app/tests/conditional-layer/quad-layer/native_posix.keymap b/app/tests/conditional-layer/quad-layer/native_posix_64.keymap similarity index 100% rename from app/tests/conditional-layer/quad-layer/native_posix.keymap rename to app/tests/conditional-layer/quad-layer/native_posix_64.keymap diff --git a/app/tests/conditional-layer/tri-layer-alt-order/native_posix.keymap b/app/tests/conditional-layer/tri-layer-alt-order/native_posix_64.keymap similarity index 100% rename from app/tests/conditional-layer/tri-layer-alt-order/native_posix.keymap rename to app/tests/conditional-layer/tri-layer-alt-order/native_posix_64.keymap diff --git a/app/tests/conditional-layer/tri-layer/native_posix.keymap b/app/tests/conditional-layer/tri-layer/native_posix_64.keymap similarity index 100% rename from app/tests/conditional-layer/tri-layer/native_posix.keymap rename to app/tests/conditional-layer/tri-layer/native_posix_64.keymap diff --git a/app/tests/gresc/gresc-press-release/native_posix.keymap b/app/tests/gresc/gresc-press-release/native_posix_64.keymap similarity index 100% rename from app/tests/gresc/gresc-press-release/native_posix.keymap rename to app/tests/gresc/gresc-press-release/native_posix_64.keymap diff --git a/app/tests/gresc/gresc-two-instances/native_posix.keymap b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap similarity index 100% rename from app/tests/gresc/gresc-two-instances/native_posix.keymap rename to app/tests/gresc/gresc-two-instances/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap b/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap rename to app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap rename to app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap rename to app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/5-quick-tap/native_posix.keymap b/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/5-quick-tap/native_posix.keymap rename to app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/6-retro-tap/native_posix.keymap b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/6-retro-tap/native_posix.keymap rename to app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap rename to app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/many-nested/native_posix.keymap b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/many-nested/native_posix.keymap rename to app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix.keymap b/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix.keymap b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap rename to app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix.keymap b/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix.keymap rename to app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix.keymap b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix.keymap rename to app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap diff --git a/app/tests/key-repeat/ignore-other-usage-page-events/native_posix.keymap b/app/tests/key-repeat/ignore-other-usage-page-events/native_posix_64.keymap similarity index 100% rename from app/tests/key-repeat/ignore-other-usage-page-events/native_posix.keymap rename to app/tests/key-repeat/ignore-other-usage-page-events/native_posix_64.keymap diff --git a/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap new file mode 100644 index 00000000000..42f6514b3f4 --- /dev/null +++ b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,9000) + ZMK_MOCK_RELEASE(0,1,30) + ZMK_MOCK_PRESS(0,0,30) + ZMK_MOCK_RELEASE(0,0,3000) + >; +}; \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix.keymap b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix_64.keymap similarity index 100% rename from app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix.keymap rename to app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix_64.keymap diff --git a/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix.keymap b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix_64.keymap similarity index 100% rename from app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix.keymap rename to app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix_64.keymap diff --git a/app/tests/keypress/kp-press-release/native_posix.keymap b/app/tests/keypress/kp-press-release/native_posix_64.keymap similarity index 100% rename from app/tests/keypress/kp-press-release/native_posix.keymap rename to app/tests/keypress/kp-press-release/native_posix_64.keymap diff --git a/app/tests/macros/basic/native_posix.keymap b/app/tests/macros/basic/native_posix_64.keymap similarity index 100% rename from app/tests/macros/basic/native_posix.keymap rename to app/tests/macros/basic/native_posix_64.keymap diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix.keymap b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap similarity index 100% rename from app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix.keymap rename to app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap diff --git a/app/tests/macros/mo-plus-modifier-macro/native_posix.keymap b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap similarity index 100% rename from app/tests/macros/mo-plus-modifier-macro/native_posix.keymap rename to app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap diff --git a/app/tests/macros/press-mid-macro/native_posix.keymap b/app/tests/macros/press-mid-macro/native_posix_64.keymap similarity index 100% rename from app/tests/macros/press-mid-macro/native_posix.keymap rename to app/tests/macros/press-mid-macro/native_posix_64.keymap diff --git a/app/tests/macros/press-release/native_posix.keymap b/app/tests/macros/press-release/native_posix_64.keymap similarity index 100% rename from app/tests/macros/press-release/native_posix.keymap rename to app/tests/macros/press-release/native_posix_64.keymap diff --git a/app/tests/macros/timing-override/native_posix.keymap b/app/tests/macros/timing-override/native_posix_64.keymap similarity index 100% rename from app/tests/macros/timing-override/native_posix.keymap rename to app/tests/macros/timing-override/native_posix_64.keymap diff --git a/app/tests/macros/wait-macro-release/native_posix.keymap b/app/tests/macros/wait-macro-release/native_posix_64.keymap similarity index 100% rename from app/tests/macros/wait-macro-release/native_posix.keymap rename to app/tests/macros/wait-macro-release/native_posix_64.keymap diff --git a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix.keymap b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix.keymap rename to app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix.keymap rename to app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix.keymap rename to app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix.keymap rename to app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix.keymap rename to app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix.keymap rename to app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix.keymap rename to app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix.keymap rename to app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap similarity index 100% rename from app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix.keymap rename to app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap diff --git a/app/tests/momentary-layer/1-normal/native_posix.keymap b/app/tests/momentary-layer/1-normal/native_posix_64.keymap similarity index 100% rename from app/tests/momentary-layer/1-normal/native_posix.keymap rename to app/tests/momentary-layer/1-normal/native_posix_64.keymap diff --git a/app/tests/momentary-layer/2-early-key-release/native_posix.keymap b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap similarity index 100% rename from app/tests/momentary-layer/2-early-key-release/native_posix.keymap rename to app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap diff --git a/app/tests/momentary-layer/3-covered/native_posix.keymap b/app/tests/momentary-layer/3-covered/native_posix_64.keymap similarity index 100% rename from app/tests/momentary-layer/3-covered/native_posix.keymap rename to app/tests/momentary-layer/3-covered/native_posix_64.keymap diff --git a/app/tests/momentary-layer/4-nested/native_posix.keymap b/app/tests/momentary-layer/4-nested/native_posix_64.keymap similarity index 100% rename from app/tests/momentary-layer/4-nested/native_posix.keymap rename to app/tests/momentary-layer/4-nested/native_posix_64.keymap diff --git a/app/tests/momentary-layer/5-nested-early-key-release/native_posix.keymap b/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap similarity index 100% rename from app/tests/momentary-layer/5-nested-early-key-release/native_posix.keymap rename to app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap diff --git a/app/tests/none/layered/native_posix.keymap b/app/tests/none/layered/native_posix_64.keymap similarity index 100% rename from app/tests/none/layered/native_posix.keymap rename to app/tests/none/layered/native_posix_64.keymap diff --git a/app/tests/sticky-keys/1-os-dn-up/native_posix.keymap b/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/1-os-dn-up/native_posix.keymap rename to app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap diff --git a/app/tests/sticky-keys/10-callum-mods/native_posix.keymap b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/10-callum-mods/native_posix.keymap rename to app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap diff --git a/app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap rename to app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix.keymap rename to app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix.keymap rename to app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap diff --git a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix.keymap b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix.keymap rename to app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap diff --git a/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix.keymap rename to app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap diff --git a/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix.keymap b/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix.keymap rename to app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap diff --git a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix.keymap b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix.keymap rename to app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap diff --git a/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix.keymap rename to app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap diff --git a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix.keymap b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix.keymap rename to app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap diff --git a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix.keymap b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/8-lsk-osk-combination/native_posix.keymap rename to app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap diff --git a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix.keymap b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap similarity index 100% rename from app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix.keymap rename to app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap diff --git a/app/tests/tap-dance/1a-tap1/native_posix.keymap b/app/tests/tap-dance/1a-tap1/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/1a-tap1/native_posix.keymap rename to app/tests/tap-dance/1a-tap1/native_posix_64.keymap diff --git a/app/tests/tap-dance/1b-tap2/native_posix.keymap b/app/tests/tap-dance/1b-tap2/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/1b-tap2/native_posix.keymap rename to app/tests/tap-dance/1b-tap2/native_posix_64.keymap diff --git a/app/tests/tap-dance/1c-tap3/native_posix.keymap b/app/tests/tap-dance/1c-tap3/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/1c-tap3/native_posix.keymap rename to app/tests/tap-dance/1c-tap3/native_posix_64.keymap diff --git a/app/tests/tap-dance/2a-hold1/native_posix.keymap b/app/tests/tap-dance/2a-hold1/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/2a-hold1/native_posix.keymap rename to app/tests/tap-dance/2a-hold1/native_posix_64.keymap diff --git a/app/tests/tap-dance/2b-hold2/native_posix.keymap b/app/tests/tap-dance/2b-hold2/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/2b-hold2/native_posix.keymap rename to app/tests/tap-dance/2b-hold2/native_posix_64.keymap diff --git a/app/tests/tap-dance/2c-hold3/native_posix.keymap b/app/tests/tap-dance/2c-hold3/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/2c-hold3/native_posix.keymap rename to app/tests/tap-dance/2c-hold3/native_posix_64.keymap diff --git a/app/tests/tap-dance/3a-tap-int-mid/native_posix.keymap b/app/tests/tap-dance/3a-tap-int-mid/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/3a-tap-int-mid/native_posix.keymap rename to app/tests/tap-dance/3a-tap-int-mid/native_posix_64.keymap diff --git a/app/tests/tap-dance/3b-tap-int-seq/native_posix.keymap b/app/tests/tap-dance/3b-tap-int-seq/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/3b-tap-int-seq/native_posix.keymap rename to app/tests/tap-dance/3b-tap-int-seq/native_posix_64.keymap diff --git a/app/tests/tap-dance/3c-tap-int-after/native_posix.keymap b/app/tests/tap-dance/3c-tap-int-after/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/3c-tap-int-after/native_posix.keymap rename to app/tests/tap-dance/3c-tap-int-after/native_posix_64.keymap diff --git a/app/tests/tap-dance/3d-hold-int-mid/native_posix.keymap b/app/tests/tap-dance/3d-hold-int-mid/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/3d-hold-int-mid/native_posix.keymap rename to app/tests/tap-dance/3d-hold-int-mid/native_posix_64.keymap diff --git a/app/tests/tap-dance/3e-hold-int-seq/native_posix.keymap b/app/tests/tap-dance/3e-hold-int-seq/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/3e-hold-int-seq/native_posix.keymap rename to app/tests/tap-dance/3e-hold-int-seq/native_posix_64.keymap diff --git a/app/tests/tap-dance/3f-hold-int-after/native_posix.keymap b/app/tests/tap-dance/3f-hold-int-after/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/3f-hold-int-after/native_posix.keymap rename to app/tests/tap-dance/3f-hold-int-after/native_posix_64.keymap diff --git a/app/tests/tap-dance/4a-single/native_posix.keymap b/app/tests/tap-dance/4a-single/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/4a-single/native_posix.keymap rename to app/tests/tap-dance/4a-single/native_posix_64.keymap diff --git a/app/tests/tap-dance/5a-tdint-mid/native_posix.keymap b/app/tests/tap-dance/5a-tdint-mid/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/5a-tdint-mid/native_posix.keymap rename to app/tests/tap-dance/5a-tdint-mid/native_posix_64.keymap diff --git a/app/tests/tap-dance/5b-tdint-seq/native_posix.keymap b/app/tests/tap-dance/5b-tdint-seq/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/5b-tdint-seq/native_posix.keymap rename to app/tests/tap-dance/5b-tdint-seq/native_posix_64.keymap diff --git a/app/tests/tap-dance/5c-tdint-after/native_posix.keymap b/app/tests/tap-dance/5c-tdint-after/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/5c-tdint-after/native_posix.keymap rename to app/tests/tap-dance/5c-tdint-after/native_posix_64.keymap diff --git a/app/tests/tap-dance/5d-tdint-multiple/native_posix.keymap b/app/tests/tap-dance/5d-tdint-multiple/native_posix_64.keymap similarity index 100% rename from app/tests/tap-dance/5d-tdint-multiple/native_posix.keymap rename to app/tests/tap-dance/5d-tdint-multiple/native_posix_64.keymap diff --git a/app/tests/to-layer/normal/native_posix.keymap b/app/tests/to-layer/normal/native_posix_64.keymap similarity index 100% rename from app/tests/to-layer/normal/native_posix.keymap rename to app/tests/to-layer/normal/native_posix_64.keymap diff --git a/app/tests/toggle-layer/early-key-release/native_posix.keymap b/app/tests/toggle-layer/early-key-release/native_posix_64.keymap similarity index 100% rename from app/tests/toggle-layer/early-key-release/native_posix.keymap rename to app/tests/toggle-layer/early-key-release/native_posix_64.keymap diff --git a/app/tests/toggle-layer/normal/native_posix.keymap b/app/tests/toggle-layer/normal/native_posix_64.keymap similarity index 100% rename from app/tests/toggle-layer/normal/native_posix.keymap rename to app/tests/toggle-layer/normal/native_posix_64.keymap diff --git a/app/tests/transparent/layered/native_posix.keymap b/app/tests/transparent/layered/native_posix_64.keymap similarity index 100% rename from app/tests/transparent/layered/native_posix.keymap rename to app/tests/transparent/layered/native_posix_64.keymap diff --git a/app/tests/transparent/normal/native_posix.keymap b/app/tests/transparent/normal/native_posix_64.keymap similarity index 100% rename from app/tests/transparent/normal/native_posix.keymap rename to app/tests/transparent/normal/native_posix_64.keymap diff --git a/app/tests/wpm/1-single_keypress/native_posix.conf b/app/tests/wpm/1-single_keypress/native_posix_64.conf similarity index 100% rename from app/tests/wpm/1-single_keypress/native_posix.conf rename to app/tests/wpm/1-single_keypress/native_posix_64.conf diff --git a/app/tests/wpm/1-single_keypress/native_posix.keymap b/app/tests/wpm/1-single_keypress/native_posix_64.keymap similarity index 100% rename from app/tests/wpm/1-single_keypress/native_posix.keymap rename to app/tests/wpm/1-single_keypress/native_posix_64.keymap diff --git a/app/tests/wpm/2-multiple_keypress/native_posix.conf b/app/tests/wpm/2-multiple_keypress/native_posix_64.conf similarity index 100% rename from app/tests/wpm/2-multiple_keypress/native_posix.conf rename to app/tests/wpm/2-multiple_keypress/native_posix_64.conf diff --git a/app/tests/wpm/2-multiple_keypress/native_posix.keymap b/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap similarity index 100% rename from app/tests/wpm/2-multiple_keypress/native_posix.keymap rename to app/tests/wpm/2-multiple_keypress/native_posix_64.keymap From 3c4ff9c82cd8265961b702dbe9cc61156912f6e9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 25 Mar 2022 02:34:08 +0000 Subject: [PATCH 0341/1130] fix(docs): Proper links to new SDK version. --- docs/docs/development/setup.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 00a484b37b8..26d667b6d4c 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -280,10 +280,10 @@ platform. To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: ``` -export ZSDK_VERSION=0.12.4 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" +export ZSDK_VERSION=0.13.2 +wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" ``` The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. @@ -315,10 +315,10 @@ export CROSS_COMPILE=/usr/bin/arm-none-eabi- To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: ``` -export ZSDK_VERSION=0.12.4 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" +export ZSDK_VERSION=0.13.2 +wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" ``` The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. From f4fb5c6fbaf9f97aab997d876549f5f588956752 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 28 Mar 2022 11:57:51 -0400 Subject: [PATCH 0342/1130] fix(build): Add local vendor prefix file. Properly document `zmk` local vendor prefix. --- app/dts/bindings/vendor-prefixes.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 app/dts/bindings/vendor-prefixes.txt diff --git a/app/dts/bindings/vendor-prefixes.txt b/app/dts/bindings/vendor-prefixes.txt new file mode 100644 index 00000000000..72066dfb94f --- /dev/null +++ b/app/dts/bindings/vendor-prefixes.txt @@ -0,0 +1 @@ +zmk ZMK Project \ No newline at end of file From b4db1b893be1f51476a44b8ec8bd36ab6cbc3a0f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 9 Mar 2022 04:44:20 +0000 Subject: [PATCH 0343/1130] feat(blog): Add Zephyr 3.0 upgrade post. --- docs/blog/2022-04-02-zephyr-3-0.md | 219 +++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 docs/blog/2022-04-02-zephyr-3-0.md diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md new file mode 100644 index 00000000000..19785790ded --- /dev/null +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -0,0 +1,219 @@ +--- +title: "Zephyr 3.0 Update" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [firmware, zephyr, core] +--- + +I'm happy to announce that we have completed the [work](https://github.com/zmkfirmware/zmk/pull/1143) to upgrade ZMK to [Zephyr 3.0](https://docs.zephyrproject.org/3.0.0/releases/release-notes-3.0.html)! + +[petejohanson] did the upgrade work to adjust ZMK for the Zephyr changes. + +- Moving to Zephyr's UF2 build integration that was submitted upstream by [petejohanson] +- Additional `color-mapping` property needed for ws2812 LED strep devicetree nodes +- Zephyr core API changes, including delayed work, USB/HID +- Adjust for pinctrl changes on stm32 +- Fixes for power management and log formatter changes + +## Getting The Changes + +Use the following steps to update to the latest tooling in order to properly use the new ZMK changes: + +### User Config Repositories Using GitHub Actions + +Existing user config repositories using Github Actions to build will pull down Zephyr 3.0 automatically, however to build properly, the repository needs to be updated to use the `stable` Docker image tag for the build: + +- Open `.github/workflows/build.yml` in your editor/IDE +- Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found + +:::note + +If you created your user config repository a while ago, you may find that your `build.yml` file instead references +a `zephyr-west-action-arm` custom GitHub Action instead. In this case, the upgrade is not as direct. We suggest that +instead you [re-create your config repository](/docs/user-setup) to get an updated setup using the new automation +approach. + +::: + +### VS Code & Docker (Dev Container) + +If you build locally using VS Code & Docker then: + +- pull the latest ZMK `main` with `git pull` for your ZMK checkout +- reload the project +- if you are prompted to rebuild the remote container, click `Rebuild` +- otherwise, press `F1` and run `Remote Containers: Rebuild Container` +- Once the container has rebuilt and reloaded, run `west update` to pull the updated Zephyr version and its dependencies. + +Once the container has rebuilt, VS Code will be running the 3.0 Docker image. + +### Local Host Development + +The following steps will get you building ZMK locally against Zephyr 3.0: + +- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- pull the latest ZMK `main` with `git pull` for your ZMK checkout +- run `west update` to pull the updated Zephyr version and its dependencies + +From there, you should be ready to build as normal! + +## Board/Shield Changes + +The following changes have [already been completed](https://github.com/zmkfirmware/zmk/pull/1143/commits) for all boards/shields in ZMK `main` branch. For existing or new PRs, or out of tree boards, the following changes are necessary to properly work with the latest changes. + +### RGB Underglow + +Zephyr's WS2812 `led_strip` driver added a new required property. When adding [underglow](/docs/features/underglow#adding-rgb-underglow-to-a-board) to a board, you now must also add a `color-mapping` property, like: + +``` +led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; +}; +``` + +:::note + +Standard WS2812 LEDs use a wire protocol where the bits for the colors green, red, and blue values are sent in that order. +If your board/shield uses LEDs that require the data sent in a different order, the `color-mapping` property ordering should be changed to match. + +::: + +### Display Selection + +Zephyr moved to using a `chosen` node named `zephyr,display` to select the display device to be used with LVGL, the underlying display library we use. + +For example, for a shield with: + +``` +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "SSD1306"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + com-invdir; + segment-remap; + com-sequential; + prechargep = <0x22>; + }; +}; +``` + +You would add a `chosen` node like: + +``` +/ { + chosen { + zephyr,display = &oled; + }; +}; +``` + +### USB Logging + +Zephyr unified the way the console/logging device is selected, removing the hacks that special-cased the USB CDC ACM output. +Now, the CDC ACM device is configured in the devicetree as well. To ensure that USB logging properly works with custom board definitions, +two sections of the `.dts` file need updating. + +Underneath the USB device, add the CDC ACM node: + +``` +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; +``` + +Then, an additional `chosen` node (near the top of the file) will mark the CDC ACM device as the console: + +``` +/ { + chosen { + ... + zephyr,console = &cdc_acm_uart; + }; + ... +}; +``` + +### UF2 Builds + +Previously, to get ZMK to build a UF2 image to flash to a given board required adding a `CMakeLists.txt` file that added a custom post build command. +Now, the only thing necessary to have Zephyr build a UF2 is to add the following to your `_defconfig` file: + +``` +CONFIG_BUILD_OUTPUT_UF2=y +``` + +If updating an existing board, be sure to remove the previous `CMakeLists.txt` file to avoid generating the UF2 twice during a `west build`. + +For more details on the implementation, see [zephyr#31066](https://github.com/zephyrproject-rtos/zephyr/pull/31066). + +### STM32 Clock Configuration + +Clock configuration moved to devicetree as well, out of the Kconfig files. Here is a sample config for a board that uses the HSI for the PLL source: + +``` +&clk_hsi { + status = "okay"; +}; + +&pll { + prediv = <1>; + mul = <12>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <2>; +}; +``` + +After adding the nodes, be sure to remove the clock/PLL related configuration from the `_defconfig` file. + +## Seeeduino XIAO + +The Seeed(uino) XIAO has gained in popularity for use on smaller boards, and gained more traction with the release of the new XIAO BLE board, +powered by the popular nRF52840 SoC. As part of the 3.0 update, we've also more fully integrated the XIAO and XIAO BLE to make it easier to +build keyboard (shields) using either controller. + +## Future Hardware + +One of the exciting items that's one step closer as part of this work is [support for Raspberry Pi Pico/RP2040](https://github.com/zmkfirmware/zmk/issues/1085). +With Zephyr 3.0 merged, this start the process for getting those controllers/chips supported by ZMK. Follow the issue to keep track of progress. +This will also enable us to support the XIAO compatible Adafruit Qt Py RP2040 and XIAO RP2040. + +## Thanks! + +Thanks to all the testers who have helped verify ZMK functionality on the newer Zephyr version. + +[petejohanson]: https://github.com/petejohanson From af4753cae1197c1410c59a5321a9ccce02071fc9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 3 Apr 2022 04:37:42 +0000 Subject: [PATCH 0344/1130] fix(behaviors): Missed refactor for PM callback. --- app/src/behaviors/behavior_backlight.c | 2 +- app/src/behaviors/behavior_key_repeat.c | 7 +++---- app/src/behaviors/behavior_macro.c | 4 ++-- app/src/behaviors/behavior_tap_dance.c | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 8876c1f1cbc..a1eaaf86195 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -91,7 +91,7 @@ static const struct behavior_driver_api behavior_backlight_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -DEVICE_DT_INST_DEFINE(0, behavior_backlight_init, device_pm_control_nop, NULL, NULL, APPLICATION, +DEVICE_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_backlight_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index 22de37d9731..ad29cb0a79c 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -116,10 +116,9 @@ static int behavior_key_repeat_init(const struct device *dev) { .usage_pages = DT_INST_PROP(n, usage_pages), \ .usage_pages_count = DT_INST_PROP_LEN(n, usage_pages), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_key_repeat_init, device_pm_control_nop, \ - &behavior_key_repeat_data_##n, &behavior_key_repeat_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_key_repeat_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_key_repeat_init, NULL, &behavior_key_repeat_data_##n, \ + &behavior_key_repeat_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_repeat_driver_api); DT_INST_FOREACH_STATUS_OKAY(KR_INST) diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index 92ee2c430cb..a6430a533a4 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -178,8 +178,8 @@ static const struct behavior_driver_api behavior_macro_driver_api = { .default_tap_ms = DT_INST_PROP_OR(n, tap_ms, 100), \ .count = DT_INST_PROP_LEN(n, bindings), \ .bindings = TRANSFORMED_BEHAVIORS(n)}; \ - DEVICE_DT_INST_DEFINE(n, behavior_macro_init, device_pm_control_nop, \ - &behavior_macro_state_##n, &behavior_macro_config_##n, APPLICATION, \ + DEVICE_DT_INST_DEFINE(n, behavior_macro_init, NULL, &behavior_macro_state_##n, \ + &behavior_macro_config_##n, APPLICATION, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); DT_INST_FOREACH_STATUS_OKAY(MACRO_INST) diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 5a0cd9e7ff3..3bad290159d 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -250,9 +250,9 @@ static int behavior_tap_dance_init(const struct device *dev) { .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ .behaviors = behavior_tap_dance_config_##n##_bindings, \ .behavior_count = DT_INST_PROP_LEN(n, bindings)}; \ - DEVICE_DT_INST_DEFINE(n, behavior_tap_dance_init, device_pm_control_nop, NULL, \ - &behavior_tap_dance_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_tap_dance_init, NULL, NULL, &behavior_tap_dance_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_tap_dance_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) From 140c9c546df5ad08d473d4464f4a171dddaff7db Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 3 Apr 2022 05:10:37 +0000 Subject: [PATCH 0345/1130] fix(blog): Add note about DTS output step. * The DTS output step needs to be removed for the builds. --- docs/blog/2022-04-02-zephyr-3-0.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md index 19785790ded..0785a334857 100644 --- a/docs/blog/2022-04-02-zephyr-3-0.md +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -27,6 +27,15 @@ Existing user config repositories using Github Actions to build will pull down Z - Open `.github/workflows/build.yml` in your editor/IDE - Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found +- Locate and delete the lines for the DTS output step, which is no longer needed: + + ``` + - name: ${{ steps.variables.outputs.display-name }} DTS File + if: ${{ always() }} + run: | + if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi + if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + ``` :::note From fbe0e822dc3a637d039ffc5f51f7bf8e0a7a42f1 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 3 Apr 2022 05:31:05 +0000 Subject: [PATCH 0346/1130] fix(blog): Whitespace issue w/ blog addition. --- docs/blog/2022-04-02-zephyr-3-0.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md index 0785a334857..44a4fa721eb 100644 --- a/docs/blog/2022-04-02-zephyr-3-0.md +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -29,13 +29,13 @@ Existing user config repositories using Github Actions to build will pull down Z - Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found - Locate and delete the lines for the DTS output step, which is no longer needed: - ``` - - name: ${{ steps.variables.outputs.display-name }} DTS File - if: ${{ always() }} - run: | - if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi - if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi - ``` + ``` + - name: ${{ steps.variables.outputs.display-name }} DTS File + if: ${{ always() }} + run: | + if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi + if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + ``` :::note From 27ba5fdfb3f8d828636a2f433603268ddf30fa3b Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 11 Feb 2022 21:23:23 -0800 Subject: [PATCH 0347/1130] fix(docs): Improve powershell command for setup script for failure cases --- docs/docs/user-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index de47680f2d4..faa4bef8cbe 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -82,7 +82,7 @@ bash -c "$(wget https://zmk.dev/setup.sh -O -)" '' --wget ``` -iex ((New-Object System.Net.WebClient).DownloadString('https://zmk.dev/setup.ps1')) +powershell -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://zmk.dev/setup.ps1'))" ``` From 3eb3548a00c6fdfcfed6e94cecbc5e3667709cb3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 3 Apr 2022 04:17:36 +0000 Subject: [PATCH 0348/1130] refactor(tests): Use GH Actions matrix for tests. * To parallelize our tests, generate a dynamic matrix of tests to run. --- .github/workflows/test.yml | 24 +++++++++++++++++++++--- app/run-test.sh | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cbe60d047a9..61bf71831d0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,24 @@ on: - "app/src/**" jobs: - integration_test: + collect-tests: + outputs: + test-dirs: ${{ steps.test-dirs.outputs.test-dirs }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Find test directories + id: test-dirs + run: | + cd app/tests/ + export TESTS=$(ls -d * | jq -R -s -c 'split("\n")[:-1]') + echo "::set-output name=test-dirs::${TESTS}" + run-tests: + needs: collect-tests + strategy: + matrix: + test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }} runs-on: ubuntu-latest container: image: docker.io/zmkfirmware/zmk-build-arm:3.0 @@ -43,8 +60,9 @@ jobs: run: west update - name: Export Zephyr CMake package (west zephyr-export) run: west zephyr-export - - name: Test all - run: west test + - name: Test ${{ matrix.test }} + working-directory: app + run: west test tests/${{ matrix.test }} - name: Archive artifacts if: ${{ always() }} uses: actions/upload-artifact@v2 diff --git a/app/run-test.sh b/app/run-test.sh index 9777f185676..068fdbb439d 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -15,7 +15,7 @@ fi testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;) num_cases=$(echo "$testcases" | wc -l) -if [ $num_cases -gt 1 ]; then +if [ $num_cases -gt 1 ] || [ "$testcases" != "$path" ]; then echo "" > ./build/tests/pass-fail.log echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh err=$? From e77c3fc8d15f7f23487d650f511c56998570f9a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 03:37:35 +0000 Subject: [PATCH 0349/1130] chore(deps): bump axios from 0.21.1 to 0.21.4 in /docs Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.4) --- updated-dependencies: - dependency-name: axios dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index d8d3cf9bcdc..73487897423 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8402,11 +8402,11 @@ } }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "node_modules/babel-plugin-apply-mdx-type-prop": { @@ -27530,11 +27530,11 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "babel-plugin-apply-mdx-type-prop": { From ec80a8139e3af5468ccadabf8d3f75fedfd83129 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Mar 2022 03:04:46 +0000 Subject: [PATCH 0350/1130] chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 73487897423..8356ebeb55b 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -14751,9 +14751,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -32384,9 +32384,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mixin-deep": { "version": "1.3.2", From 089602fec0847b2a1fd49e434b8c9083f1dcc0a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Feb 2022 02:49:18 +0000 Subject: [PATCH 0351/1130] chore(deps): bump url-parse from 1.4.7 to 1.5.10 in /docs Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.4.7 to 1.5.10. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.4.7...1.5.10) --- updated-dependencies: - dependency-name: url-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 8356ebeb55b..9c95a130f47 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -19904,9 +19904,9 @@ } }, "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -20774,15 +20774,6 @@ "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/webpack-log": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", @@ -36253,9 +36244,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -36917,15 +36908,6 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1" } - }, - "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } } } }, From 60d367cbb9ca085316986a40b90b32f7a6c08fe0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 5 Apr 2022 16:25:49 +0000 Subject: [PATCH 0352/1130] refactor(docs): Bump to docusaurus 2.0.0-beta.18 * Fix up the config to use proper locations. --- docs/docusaurus.config.js | 9 +- docs/package-lock.json | 36637 +++++++----------------------------- docs/package.json | 8 +- 3 files changed, 6708 insertions(+), 29946 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index b1c1b5c0102..536fa922201 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -19,10 +19,6 @@ module.exports = { colorMode: { respectPrefersColorScheme: true, }, - googleAnalytics: { - trackingID: "UA-145201102-2", - anonymizeIP: true, - }, // sidebarCollapsible: false, navbar: { title: "ZMK Firmware", @@ -109,6 +105,7 @@ module.exports = { copyright: `Copyright © ${new Date().getFullYear()} ZMK Project Contributors.
    Creative Commons License`, }, algolia: { + appId: "USXLDJ14JE", apiKey: "75325855fc90356828fe212d38e5ca34", indexName: "zmkfirmware", }, @@ -117,6 +114,10 @@ module.exports = { [ "@docusaurus/preset-classic", { + googleAnalytics: { + trackingID: "UA-145201102-2", + anonymizeIP: true, + }, docs: { // It is recommended to set document id as docs home page (`docs/` path). sidebarPath: require.resolve("./sidebars.js"), diff --git a/docs/package-lock.json b/docs/package-lock.json index 9c95a130f47..24e40eaa137 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,295 +1,637 @@ { "name": "docs", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "docs", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^2.0.0-beta.3", - "@docusaurus/preset-classic": "^2.0.0-beta.3", - "@fortawesome/fontawesome-svg-core": "^1.2.32", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.16", - "@mdx-js/react": "^1.6.22", - "classnames": "^2.2.6", - "js-yaml": "^4.1.0", - "react": "^17.0.2", - "react-async": "^10.0.1", - "react-copy-to-clipboard": "^5.0.3", - "react-dom": "^17.0.2", - "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.19.4" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^2.0.0-beta.3", - "@docusaurus/types": "^2.0.0-beta.3", - "@tsconfig/docusaurus": "^1.0.2", - "@types/js-yaml": "^4.0.5", - "@types/react": "^17.0.3", - "@types/react-helmet": "^6.1.0", - "@types/react-router-dom": "^5.1.7", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-mdx": "^1.13.0", - "eslint-plugin-react": "^7.28.0", - "json-schema-to-typescript": "^10.1.5", - "mustache": "^4.2.0", - "null-loader": "^4.0.0", - "prebuild-webpack-plugin": "^1.1.1", - "prettier": "2.3.1", - "string-replace-loader": "^3.0.3", - "typescript": "^4.2.3", - "webpack": "^5.46.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz", - "integrity": "sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw==", - "dependencies": { - "@algolia/autocomplete-shared": "1.2.1" + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz", + "integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==", + "requires": { + "@algolia/autocomplete-shared": "1.5.2" } }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz", - "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", - "dependencies": { - "@algolia/autocomplete-shared": "1.2.1" - }, - "peerDependencies": { - "@algolia/client-search": "^4.9.1", - "algoliasearch": "^4.9.1" + "@algolia/autocomplete-preset-algolia": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz", + "integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==", + "requires": { + "@algolia/autocomplete-shared": "1.5.2" } }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", - "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" + "@algolia/autocomplete-shared": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz", + "integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==" }, - "node_modules/@algolia/client-personalization": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", - "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", - "dependencies": { - "@algolia/client-common": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" + "@algolia/cache-browser-local-storage": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.0.tgz", + "integrity": "sha512-nj1vHRZauTqP/bluwkRIgEADEimqojJgoTRCel5f6q8WCa9Y8QeI4bpDQP28FoeKnDRYa3J5CauDlN466jqRhg==", + "requires": { + "@algolia/cache-common": "4.13.0" } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/cache-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", - "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + "@algolia/cache-common": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.13.0.tgz", + "integrity": "sha512-f9mdZjskCui/dA/fA/5a+6hZ7xnHaaZI5tM/Rw9X8rRB39SUlF/+o3P47onZ33n/AwkpSbi5QOyhs16wHd55kA==" }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", - "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", - "dependencies": { - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" + "@algolia/cache-in-memory": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.13.0.tgz", + "integrity": "sha512-hHdc+ahPiMM92CQMljmObE75laYzNFYLrNOu0Q3/eyvubZZRtY2SUsEEgyUEyzXruNdzrkcDxFYa7YpWBJYHAg==", + "requires": { + "@algolia/cache-common": "4.13.0" + } + }, + "@algolia/client-account": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.13.0.tgz", + "integrity": "sha512-FzFqFt9b0g/LKszBDoEsW+dVBuUe1K3scp2Yf7q6pgHWM1WqyqUlARwVpLxqyc+LoyJkTxQftOKjyFUqddnPKA==", + "requires": { + "@algolia/client-common": "4.13.0", + "@algolia/client-search": "4.13.0", + "@algolia/transporter": "4.13.0" } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/logger-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", - "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" + "@algolia/client-analytics": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.13.0.tgz", + "integrity": "sha512-klmnoq2FIiiMHImkzOm+cGxqRLLu9CMHqFhbgSy9wtXZrqb8BBUIUE2VyBe7azzv1wKcxZV2RUyNOMpFqmnRZA==", + "requires": { + "@algolia/client-common": "4.13.0", + "@algolia/client-search": "4.13.0", + "@algolia/requester-common": "4.13.0", + "@algolia/transporter": "4.13.0" + } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/requester-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", - "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + "@algolia/client-common": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.13.0.tgz", + "integrity": "sha512-GoXfTp0kVcbgfSXOjfrxx+slSipMqGO9WnNWgeMmru5Ra09MDjrcdunsiiuzF0wua6INbIpBQFTC2Mi5lUNqGA==", + "requires": { + "@algolia/requester-common": "4.13.0", + "@algolia/transporter": "4.13.0" + } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/transporter": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", - "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", - "dependencies": { - "@algolia/cache-common": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/requester-common": "4.10.3" + "@algolia/client-personalization": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.13.0.tgz", + "integrity": "sha512-KneLz2WaehJmNfdr5yt2HQETpLaCYagRdWwIwkTqRVFCv4DxRQ2ChPVW9jeTj4YfAAhfzE6F8hn7wkQ/Jfj6ZA==", + "requires": { + "@algolia/client-common": "4.13.0", + "@algolia/requester-common": "4.13.0", + "@algolia/transporter": "4.13.0" + } + }, + "@algolia/client-search": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.13.0.tgz", + "integrity": "sha512-blgCKYbZh1NgJWzeGf+caKE32mo3j54NprOf0LZVCubQb3Kx37tk1Hc8SDs9bCAE8hUvf3cazMPIg7wscSxspA==", + "requires": { + "@algolia/client-common": "4.13.0", + "@algolia/requester-common": "4.13.0", + "@algolia/transporter": "4.13.0" + } + }, + "@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "@algolia/logger-common": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.13.0.tgz", + "integrity": "sha512-8yqXk7rMtmQJ9wZiHOt/6d4/JDEg5VCk83gJ39I+X/pwUPzIsbKy9QiK4uJ3aJELKyoIiDT1hpYVt+5ia+94IA==" + }, + "@algolia/logger-console": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.13.0.tgz", + "integrity": "sha512-YepRg7w2/87L0vSXRfMND6VJ5d6699sFJBRWzZPOlek2p5fLxxK7O0VncYuc/IbVHEgeApvgXx0WgCEa38GVuQ==", + "requires": { + "@algolia/logger-common": "4.13.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.0.tgz", + "integrity": "sha512-Dj+bnoWR5MotrnjblzGKZ2kCdQi2cK/VzPURPnE616NU/il7Ypy6U6DLGZ/ZYz+tnwPa0yypNf21uqt84fOgrg==", + "requires": { + "@algolia/requester-common": "4.13.0" + } + }, + "@algolia/requester-common": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.13.0.tgz", + "integrity": "sha512-BRTDj53ecK+gn7ugukDWOOcBRul59C4NblCHqj4Zm5msd5UnHFjd/sGX+RLOEoFMhetILAnmg6wMrRrQVac9vw==" + }, + "@algolia/requester-node-http": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.13.0.tgz", + "integrity": "sha512-9b+3O4QFU4azLhGMrZAr/uZPydvzOR4aEZfSL8ZrpLZ7fbbqTO0S/5EVko+QIgglRAtVwxvf8UJ1wzTD2jvKxQ==", + "requires": { + "@algolia/requester-common": "4.13.0" + } + }, + "@algolia/transporter": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.13.0.tgz", + "integrity": "sha512-8tSQYE+ykQENAdeZdofvtkOr5uJ9VcQSWgRhQ9h01AehtBIPAczk/b2CLrMsw5yQZziLs5cZ3pJ3478yI+urhA==", + "requires": { + "@algolia/cache-common": "4.13.0", + "@algolia/logger-common": "4.13.0", + "@algolia/requester-common": "4.13.0" + } + }, + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" } }, - "node_modules/@apidevtools/json-schema-ref-parser": { + "@apidevtools/json-schema-ref-parser": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", "dev": true, - "dependencies": { + "requires": { "@jsdevtools/ono": "^7.1.3", "call-me-maybe": "^1.0.1", "js-yaml": "^3.13.1" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, - "node_modules/@babel/code-frame": { + "@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { + "requires": { "@babel/highlight": "^7.10.4" } }, - "node_modules/@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + "@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==" }, - "node_modules/@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/core": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" + "semver": "^6.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dependencies": { - "@babel/types": "^7.12.1", + "@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "requires": { + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + }, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "requires": { + "@babel/types": "^7.16.7" + }, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", - "dependencies": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.12.0", - "semver": "^5.5.0" + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.1" + "@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "dependencies": { + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, + "electron-to-chromium": { + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-create-class-features-plugin": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dependencies": { + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "requires": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", @@ -299,164 +641,248 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "requires": { + "@babel/types": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "requires": { + "@babel/types": "^7.16.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "requires": { + "@babel/types": "^7.16.7" + }, "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "requires": { + "@babel/types": "^7.16.7" + }, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-member-expression-to-functions": { + "@babel/helper-member-expression-to-functions": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dependencies": { + "requires": { "@babel/types": "^7.12.1" } }, - "node_modules/@babel/helper-module-imports": { + "@babel/helper-module-imports": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dependencies": { + "requires": { "@babel/types": "^7.12.1" } }, - "node_modules/@babel/helper-module-transforms": { + "@babel/helper-module-transforms": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dependencies": { + "requires": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-simple-access": "^7.12.1", @@ -468,23598 +894,1303 @@ "lodash": "^4.17.19" } }, - "node_modules/@babel/helper-optimise-call-expression": { + "@babel/helper-optimise-call-expression": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dependencies": { + "requires": { "@babel/types": "^7.10.4" } }, - "node_modules/@babel/helper-plugin-utils": { + "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "node_modules/@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, "dependencies": { - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-replace-supers": { + "@babel/helper-replace-supers": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dependencies": { + "requires": { "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/traverse": "^7.12.1", "@babel/types": "^7.12.1" } }, - "node_modules/@babel/helper-simple-access": { + "@babel/helper-simple-access": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dependencies": { + "requires": { "@babel/types": "^7.12.1" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "requires": { + "@babel/types": "^7.16.0" + }, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/helper-split-export-declaration": { + "@babel/helper-split-export-declaration": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dependencies": { + "requires": { "@babel/types": "^7.11.0" } }, - "node_modules/@babel/helper-validator-identifier": { + "@babel/helper-validator-identifier": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "node_modules/@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "@babel/helpers": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "node_modules/@babel/highlight": { + "@babel/highlight": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dependencies": { + "requires": { "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" }, - "engines": { - "node": ">=4" + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/parser": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", + "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=4" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, "dependencies": { - "color-name": "1.1.3" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "bin": { - "parser": "bin/babel-parser.js" + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "@babel/plugin-proposal-class-static-block": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dependencies": { - "@babel/types": "^7.14.5" + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { + "@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", - "dependencies": { + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-get-function-arity": { + "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/types": { + "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=4" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=4" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "dependencies": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-module-transforms": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", - "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "dependencies": { - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "dependencies": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-module-transforms": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", - "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "dependencies": { - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-new-target/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "dependencies": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/plugin-transform-object-super/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", - "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", - "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", - "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-spread/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", - "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.6", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "dependencies": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", - "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.7", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", - "dependencies": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-compilation-targets": "^7.12.1", - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.1", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.1", - "core-js-compat": "^3.6.2", - "semver": "^5.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", - "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-typescript/node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", - "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", - "dependencies": { - "core-js-pure": "^3.15.0", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/template/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/template/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/template/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/template/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "dependencies": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-function-name/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/template/node_modules/@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/traverse/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/traverse/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", - "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" - }, - "node_modules/@docsearch/react": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", - "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", - "dependencies": { - "@algolia/autocomplete-core": "1.2.1", - "@algolia/autocomplete-preset-algolia": "1.2.1", - "@docsearch/css": "3.0.0-alpha.37", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 18.0.0", - "react": ">= 16.8.0 < 18.0.0", - "react-dom": ">= 16.8.0 < 18.0.0" - } - }, - "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", - "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.3", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@slorber/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.1", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "clean-css": "^5.1.2", - "commander": "^5.1.0", - "copy-webpack-plugin": "^9.0.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^3.0.1", - "cssnano": "^5.0.4", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.3.2", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.6.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.15", - "postcss-loader": "^5.3.0", - "prompts": "^2.4.1", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.3", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.3", - "tslib": "^2.2.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.3.0", - "webpack": "^5.40.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.0-3" - }, - "bin": { - "docusaurus": "bin/docusaurus.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/core/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-replace-supers/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helper-wrap-function/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/helpers/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@docusaurus/core/node_modules/autoprefixer": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", - "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001243", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@docusaurus/core/node_modules/boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/core/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/@docusaurus/core/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@docusaurus/core/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@docusaurus/core/node_modules/copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@docusaurus/core/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/core/node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/css-loader/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/@docusaurus/core/node_modules/css-loader/node_modules/schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@docusaurus/core/node_modules/cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/@docusaurus/core/node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/core/node_modules/electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "node_modules/@docusaurus/core/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@docusaurus/core/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@docusaurus/core/node_modules/glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@docusaurus/core/node_modules/html-webpack-plugin": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", - "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.21", - "pretty-error": "^3.0.4", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/@docusaurus/core/node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/core/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@docusaurus/core/node_modules/postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@docusaurus/core/node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/@docusaurus/core/node_modules/webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", - "integrity": "sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA==", - "dependencies": { - "cssnano-preset-advanced": "^5.1.1", - "postcss": "^8.2.15", - "postcss-sort-media-queries": "^3.10.11" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz", - "integrity": "sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ==", - "dependencies": { - "@babel/parser": "^7.12.16", - "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.3", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.40.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.6.tgz", - "integrity": "sha512-TrJ0u4F3mZ7uQNga22why3SsoNwlHp6vltDLlWI80jZmZpnk9BJglpcR8MPOTSEjyUgMxJ6B3q0PA/rWzupWZA==", - "dev": true - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", - "integrity": "sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "feed": "^4.2.2", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.2.0", - "webpack": "^5.40.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", - "integrity": "sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "chalk": "^4.1.1", - "combine-promises": "^1.1.0", - "escape-string-regexp": "^4.0.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "tslib": "^2.2.0", - "utility-types": "^3.10.0", - "webpack": "^5.40.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", - "integrity": "sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.40.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", - "integrity": "sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "react-json-view": "^1.21.3", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz", - "integrity": "sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz", - "integrity": "sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz", - "integrity": "sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "fs-extra": "^10.0.0", - "sitemap": "^7.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz", - "integrity": "sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/plugin-debug": "2.0.0-beta.3", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.3", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.3", - "@docusaurus/plugin-sitemap": "2.0.0-beta.3", - "@docusaurus/theme-classic": "2.0.0-beta.3", - "@docusaurus/theme-search-algolia": "2.0.0-beta.3" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", - "dependencies": { - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz", - "integrity": "sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/theme-common": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.1", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.26", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.15", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", - "integrity": "sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "prism-react-renderer": "^1.2.1", - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz", - "integrity": "sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA==", - "dependencies": { - "@docsearch/react": "^3.0.0-alpha.36", - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/theme-common": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.3.tgz", - "integrity": "sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q==", - "dependencies": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.40.0", - "webpack-merge": "^5.8.0" - } - }, - "node_modules/@docusaurus/types/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "node_modules/@docusaurus/types/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@docusaurus/types/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack": { - "version": "5.70.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", - "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", - "integrity": "sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.3", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.0.0", - "gray-matter": "^4.0.3", - "lodash": "^4.17.20", - "resolve-pathname": "^3.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz", - "integrity": "sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.3", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz", - "integrity": "sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ==", - "dependencies": { - "@docusaurus/utils": "2.0.0-beta.3", - "chalk": "^4.1.1", - "joi": "^17.4.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@docusaurus/utils/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", - "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.16.tgz", - "integrity": "sha512-aLmzDwC9rEOAJv2UJdMns89VZR5Ry4IHu5dQQh24Z/lWKEm44lfQr1UNalZlkUaQN8d155tNh+CS7ntntj1VMA==", - "dependencies": { - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || >=1.3.0-beta1", - "react": ">=16.x" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", - "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-function-name/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helpers/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@mdx-js/mdx/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@mdx-js/mdx/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@mdx-js/mdx/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@mdx-js/mdx/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.15", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", - "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", - "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/@svgr/plugin-svgo/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/docusaurus": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.2.tgz", - "integrity": "sha512-x4rRVb346vjyym6QbeB1Tv01XXwhbkujOmvDmtf0bT20oc2gbDhbmwpskKqZ5Of2Q/Vk4jNk1WMiLsZdJ9t7Dw==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "node_modules/@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" - }, - "node_modules/@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", - "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", - "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==", - "dev": true - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" - }, - "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - }, - "node_modules/@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", - "dev": true - }, - "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/node": { - "version": "16.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", - "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "node_modules/@types/react": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", - "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-PYRoU1XJFOzQ3BHvWL1T8iDNbRjdMDJMT5hFmZKGbsq09kbSqJy61uwEpTrbTNWDopVphUT34zUSVLK9pjsgYQ==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz", - "integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==", - "dev": true, - "dependencies": { - "@types/history": "*", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", - "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", - "dev": true, - "dependencies": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/sax": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.3.tgz", - "integrity": "sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" - }, - "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", - "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.10.3", - "@algolia/cache-common": "4.10.3", - "@algolia/cache-in-memory": "4.10.3", - "@algolia/client-account": "4.10.3", - "@algolia/client-analytics": "4.10.3", - "@algolia/client-common": "4.10.3", - "@algolia/client-personalization": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/logger-console": "4.10.3", - "@algolia/requester-browser-xhr": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/requester-node-http": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz", - "integrity": "sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA==", - "dependencies": { - "events": "^1.1.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 5" - } - }, - "node_modules/algoliasearch-helper/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/cache-browser-local-storage": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", - "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", - "dependencies": { - "@algolia/cache-common": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/cache-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", - "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" - }, - "node_modules/algoliasearch/node_modules/@algolia/cache-in-memory": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", - "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", - "dependencies": { - "@algolia/cache-common": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-account": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", - "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", - "dependencies": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-analytics": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", - "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", - "dependencies": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", - "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", - "dependencies": { - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-search": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", - "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", - "dependencies": { - "@algolia/client-common": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/logger-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", - "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" - }, - "node_modules/algoliasearch/node_modules/@algolia/logger-console": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", - "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", - "dependencies": { - "@algolia/logger-common": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", - "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", - "dependencies": { - "@algolia/requester-common": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", - "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", - "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", - "dependencies": { - "@algolia/requester-common": "4.10.3" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/transporter": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", - "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", - "dependencies": { - "@algolia/cache-common": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/requester-common": "4.10.3" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "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==", - "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": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "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": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "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==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "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==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/bonjour/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", - "dependencies": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001245", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", - "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cheerio/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/cheerio/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/cheerio/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/cheerio/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/chrome-trace-event/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/clean-css": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.3.tgz", - "integrity": "sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", - "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.1.1", - "d": "^1.0.1", - "es5-ext": "^0.10.51", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.7" - } - }, - "node_modules/cli-color/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", - "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", - "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", - "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/core-js-compat/node_modules/electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", - "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "engines": { - "node": "*" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "p-limit": "^3.0.2", - "postcss": "^8.3.5", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/css-minimizer-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", - "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", - "dependencies": { - "autoprefixer": "^10.2.0", - "cssnano-preset-default": "^5.1.3", - "postcss-discard-unused": "^5.0.1", - "postcss-merge-idents": "^5.0.1", - "postcss-reduce-idents": "^5.0.1", - "postcss-zindex": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced/node_modules/autoprefixer": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", - "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001243", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/cssnano-preset-advanced/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/cssnano-preset-advanced/node_modules/electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "node_modules/cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/cssnano-preset-default/node_modules/css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", - "dependencies": { - "timsort": "^0.3.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/cssnano-preset-default/node_modules/electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "node_modules/cssnano-preset-default/node_modules/postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", - "dependencies": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", - "dependencies": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default/node_modules/postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/domutils/node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", - "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", - "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "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, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", - "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", - "dev": true, - "dependencies": { - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "tslib": "^2.2.0", - "unified": "^9.2.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-markdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", - "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", - "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", - "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.13.0", - "eslint-plugin-markdown": "^2.1.0", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "synckit": "^0.1.5", - "tslib": "^2.2.0", - "unified": "^9.2.1", - "vfile": "^4.2.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", - "dependencies": { - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "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==", - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "dependencies": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "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==", - "optional": true - }, - "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/flux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", - "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.0" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "dependencies": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "engines": { - "node": ">=6.11.5", - "yarn": ">=1.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "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/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } - }, - "node_modules/github-slugger/node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "dev": true, - "dependencies": { - "@types/glob": "*" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "glob": "*" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "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": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "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": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/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==" - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "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": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/hpack.js/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-minifier-terser/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/html-minifier-terser/node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/htmlparser2/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/htmlparser2/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/htmlparser2/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "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/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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==" - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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/http-proxy-middleware/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.26", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", - "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "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==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/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==" - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-color-stop/node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "engines": { - "node": "*" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/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==" - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "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": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "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==", - "dependencies": { - "isobject": "^3.0.1" - }, - "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 - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-uxU9Ix+MVszvCTvBucQiIcNEny3oAEFg7EQHSZw2bquCCuqUqEPEczIdv/Uqo1Zv4/wDPZqOI+ulrMk1ncMtjQ==", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-schema-to-typescript": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", - "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "@types/lodash": "^4.14.168", - "@types/prettier": "^2.1.5", - "cli-color": "^2.0.0", - "get-stdin": "^8.0.0", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "is-glob": "^4.0.1", - "json-schema-ref-parser": "^9.0.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.20", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "mz": "^2.7.0", - "prettier": "^2.2.0" - }, - "bin": { - "json2ts": "dist/src/cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/json-schema-to-typescript/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "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": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "dev": true, - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "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" - } - }, - "node_modules/memoizee/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 - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/memory-fs/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "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==", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dependencies": { - "lodash.toarray": "^4.4.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" - }, - "node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "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": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/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==" - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", - "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "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": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "node_modules/pify/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pify/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pify/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pify/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/pify/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/pify/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/pify/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/pify/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/pify/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/pify/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pify/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "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": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "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": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", - "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", - "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-colormin/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/postcss-colormin/node_modules/electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "node_modules/postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", - "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", - "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", - "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values/node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", - "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", - "dependencies": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" - }, - "node_modules/postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", - "dependencies": { - "is-absolute-url": "^3.0.3", - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", - "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", - "dependencies": { - "browserslist": "^4.16.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/postcss-reduce-initial/node_modules/electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "3.11.12", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", - "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", - "dependencies": { - "sort-css-media-queries": "1.5.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.1" - } - }, - "node_modules/postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", - "dependencies": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", - "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", - "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prebuild-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "glob": "^7.1.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/pretty-error": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", - "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.6" - } - }, - "node_modules/pretty-error/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-error/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/pretty-error/node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/pretty-error/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", - "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", - "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" - }, - "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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "peerDependencies": { - "react": ">=16.3.1" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "dependencies": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "dependencies": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/react-dev-utils/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/react-dev-utils/node_modules/immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/react-dev-utils/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/react-dev-utils/node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", - "dependencies": { - "prop-types": "^15.5.0" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", - "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", - "dependencies": { - "clsx": "^1.1.1" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", - "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "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==", - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - } - }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-function-name/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-function-name/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helpers/node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/remark-mdx/node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-mdx/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-mdx/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/remark-mdx/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/remark-mdx/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, - "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "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==", - "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": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "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": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", - "engines": { - "node": "*" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "node_modules/rtlcss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.3.0.tgz", - "integrity": "sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A==", - "dependencies": { - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "mkdirp": "^1.0.4", - "postcss": "^8.2.4", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "peerDependencies": { - "postcss": "^8.2.4" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "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==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "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==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "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==", - "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/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/sirv": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", - "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", - "dependencies": { - "@polka/url": "^1.0.0-next.15", - "mime": "^2.3.1", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sirv/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", - "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", - "dependencies": { - "@types/node": "^15.0.1", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "15.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", - "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "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==", - "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==", - "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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "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==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/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==" - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "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==", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", - "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/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==", - "engines": { - "node": ">=0.10.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==" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "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==", - "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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", - "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", - "dependencies": { - "ci-info": "^1.6.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-replace-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.0.3.tgz", - "integrity": "sha512-8c26Dl6H9XmKNj3mFBvaUYR7ImOxQ4YRBFuUju78wXpa1cDpyDYvKmqGg8mfkxdYexQ/BBogB7PELlLnmR08nw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "peerDependencies": { - "webpack": "^5" - } - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, - "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", - "dependencies": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylehacks/node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/stylehacks/node_modules/electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", - "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", - "dependencies": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/synckit": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", - "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", - "dev": true, - "dependencies": { - "tslib": "^2.2.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/synckit/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", - "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", - "dependencies": { - "jest-worker": "^27.0.6", - "p-limit": "^3.1.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/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==" - }, - "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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "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==", - "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": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.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": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-essentials": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", - "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" - }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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==", - "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/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "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==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-parse-lax/node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "engines": { - "node": ">=4" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-composed-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", - "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", - "dependencies": { - "ts-essentials": "^2.0.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", - "dependencies": { - "axios": "^0.21.1", - "joi": "^17.3.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^6.6.3" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" - }, - "node_modules/webpack": { - "version": "5.58.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", - "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", - "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^6.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "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/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/extend-shallow/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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "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/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/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": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/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": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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==" - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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/webpack-dev-server/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==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/webpack-dev-server/node_modules/sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - } - }, - "node_modules/webpack-dev-server/node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/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": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-merge/node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dependencies": { - "microevent.ts": "~0.1.1" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz", - "integrity": "sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw==", - "requires": { - "@algolia/autocomplete-shared": "1.2.1" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz", - "integrity": "sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g==", - "requires": { - "@algolia/autocomplete-shared": "1.2.1" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz", - "integrity": "sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA==" - }, - "@algolia/client-personalization": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", - "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - }, - "dependencies": { - "@algolia/cache-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", - "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" - }, - "@algolia/client-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", - "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", - "requires": { - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "@algolia/logger-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", - "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" - }, - "@algolia/requester-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", - "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" - }, - "@algolia/transporter": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", - "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", - "requires": { - "@algolia/cache-common": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/requester-common": "4.10.3" - } - } - } - }, - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" - }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", - "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.12.0", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" - }, - "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", - "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", - "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "requires": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", - "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "requires": { - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", - "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "requires": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", - "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "requires": { - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "requires": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", - "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", - "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", - "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", - "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.6", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", - "requires": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", - "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.7", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" - }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", - "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "color-convert": "^1.9.0" + "@babel/highlight": "^7.16.7" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/types": "^7.16.7" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "requires": { - "color-name": "1.1.3" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - } - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.17.0" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" + "@babel/types": "^7.16.7" } }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } - } - } - }, - "@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", - "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-compilation-targets": "^7.12.1", - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.1", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.1", - "core-js-compat": "^3.6.2", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" - } - } - }, - "@babel/preset-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", - "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" - } - } - }, - "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", - "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", - "requires": { - "core-js-pure": "^3.15.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "requires": { - "@babel/highlight": "^7.14.5" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -24068,6 +2199,14 @@ "color-convert": "^1.9.0" } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -24098,148 +2237,118 @@ } } }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", + "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", - "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } + "@babel/highlight": "^7.16.7" } }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.16.7" } }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "requires": { + "@babel/types": "^7.17.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", - "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" - }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", - "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - } + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, "ansi-styles": { @@ -24250,6 +2359,14 @@ "color-convert": "^1.9.0" } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -24280,917 +2397,1035 @@ } } }, - "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", - "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - } - } - }, - "@docsearch/css": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.37.tgz", - "integrity": "sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ==" - }, - "@docsearch/react": { - "version": "3.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.37.tgz", - "integrity": "sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ==", - "requires": { - "@algolia/autocomplete-core": "1.2.1", - "@algolia/autocomplete-preset-algolia": "1.2.1", - "@docsearch/css": "3.0.0-alpha.37", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.3.tgz", - "integrity": "sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg==", - "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.3", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@slorber/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.1", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "clean-css": "^5.1.2", - "commander": "^5.1.0", - "copy-webpack-plugin": "^9.0.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^3.0.1", - "cssnano": "^5.0.4", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.1", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.3.2", - "import-fresh": "^3.3.0", - "is-root": "^2.1.0", - "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.6.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.15", - "postcss-loader": "^5.3.0", - "prompts": "^2.4.1", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.3", - "semver": "^7.3.4", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.3", - "tslib": "^2.2.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^5.3.0", - "webpack": "^5.40.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.0-3" + "@babel/plugin-transform-modules-systemjs": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" - }, - "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "@babel/types": "^7.14.5" + "@babel/highlight": "^7.16.7" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, - "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - } + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" + "@babel/types": "^7.17.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "requires": { - "@babel/types": "^7.14.5" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "requires": { - "@babel/types": "^7.14.5" + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - } + "color-convert": "^1.9.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "requires": { - "@babel/types": "^7.14.5" + "object.assign": "^4.1.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - } + "color-name": "1.1.3" } }, - "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "@babel/types": "^7.14.5" + "@babel/highlight": "^7.16.7" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, - "@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - } + "@babel/types": "^7.17.0" } }, - "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - } + "@babel/types": "^7.16.7" } }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } } }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "color-convert": "^1.9.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "color-name": "1.1.3" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/highlight": "^7.16.7" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/types": "^7.17.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "color-convert": "^1.9.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "color-name": "1.1.3" } }, - "@babel/plugin-transform-block-scoping": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz", + "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - } + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, - "@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, - "@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + } + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, - "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, - "@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@babel/plugin-transform-parameters": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } + } + }, + "@babel/runtime": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", + "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", + "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", + "requires": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", - "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "@babel/highlight": "^7.14.5" } }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, - "@babel/types": { + "@babel/highlight": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -25199,55 +3434,14 @@ "color-convert": "^1.9.0" } }, - "autoprefixer": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", - "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001243", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - } - }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "color-convert": { @@ -25263,1091 +3457,626 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "copy-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", - "requires": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "requires": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", - "requires": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - } - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "html-webpack-plugin": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz", - "integrity": "sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ==", - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.21", - "pretty-error": "^3.0.4", - "tapable": "^2.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, - "webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" - } - } - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz", - "integrity": "sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA==", - "requires": { - "cssnano-preset-advanced": "^5.1.1", - "postcss": "^8.2.15", - "postcss-sort-media-queries": "^3.10.11" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz", - "integrity": "sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ==", - "requires": { - "@babel/parser": "^7.12.16", - "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.3", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.40.0" - }, - "dependencies": { - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.6.tgz", - "integrity": "sha512-TrJ0u4F3mZ7uQNga22why3SsoNwlHp6vltDLlWI80jZmZpnk9BJglpcR8MPOTSEjyUgMxJ6B3q0PA/rWzupWZA==", - "dev": true - }, - "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz", - "integrity": "sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "feed": "^4.2.2", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.2.0", - "webpack": "^5.40.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } } } }, - "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz", - "integrity": "sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "chalk": "^4.1.1", - "combine-promises": "^1.1.0", - "escape-string-regexp": "^4.0.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "tslib": "^2.2.0", - "utility-types": "^3.10.0", - "webpack": "^5.40.0" + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@babel/highlight": "^7.14.5" } }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "requires": { - "minimist": "^1.2.0" + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - } - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz", - "integrity": "sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/mdx-loader": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.40.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz", - "integrity": "sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "react-json-view": "^1.21.3", - "tslib": "^2.1.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz", - "integrity": "sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz", - "integrity": "sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz", - "integrity": "sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "fs-extra": "^10.0.0", - "sitemap": "^7.0.0", - "tslib": "^2.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/preset-classic": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz", - "integrity": "sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/plugin-debug": "2.0.0-beta.3", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.3", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.3", - "@docusaurus/plugin-sitemap": "2.0.0-beta.3", - "@docusaurus/theme-classic": "2.0.0-beta.3", - "@docusaurus/theme-search-algolia": "2.0.0-beta.3" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", - "requires": { - "prop-types": "^15.6.2" - } - }, - "@docusaurus/theme-classic": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz", - "integrity": "sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/theme-common": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-common": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.1", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.26", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.15", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" - }, - "dependencies": { - "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } - } - } - }, - "@docusaurus/theme-common": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz", - "integrity": "sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g==", - "requires": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/plugin-content-blog": "2.0.0-beta.3", - "@docusaurus/plugin-content-docs": "2.0.0-beta.3", - "@docusaurus/plugin-content-pages": "2.0.0-beta.3", - "@docusaurus/types": "2.0.0-beta.3", - "tslib": "^2.1.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz", - "integrity": "sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA==", - "requires": { - "@docsearch/react": "^3.0.0-alpha.36", - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/theme-common": "2.0.0-beta.3", - "@docusaurus/utils": "2.0.0-beta.3", - "@docusaurus/utils-validation": "2.0.0-beta.3", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" - } - }, - "@docusaurus/types": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.3.tgz", - "integrity": "sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q==", - "requires": { - "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.40.0", - "webpack-merge": "^5.8.0" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} + "@babel/parser": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, - "webpack": { - "version": "5.70.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", - "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.8", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, - "@docusaurus/utils": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz", - "integrity": "sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA==", + "@babel/types": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "requires": { - "@docusaurus/types": "2.0.0-beta.3", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.0.0", - "gray-matter": "^4.0.3", - "lodash": "^4.17.20", - "resolve-pathname": "^3.0.0", - "tslib": "^2.2.0" + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" }, "dependencies": { - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" } } }, - "@docusaurus/utils-common": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz", - "integrity": "sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg==", - "requires": { - "@docusaurus/types": "2.0.0-beta.3", - "tslib": "^2.2.0" - } + "@docsearch/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0.tgz", + "integrity": "sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA==" }, - "@docusaurus/utils-validation": { - "version": "2.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz", - "integrity": "sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ==", + "@docsearch/react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0.tgz", + "integrity": "sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg==", "requires": { - "@docusaurus/utils": "2.0.0-beta.3", - "chalk": "^4.1.1", - "joi": "^17.4.0", - "tslib": "^2.1.0" + "@algolia/autocomplete-core": "1.5.2", + "@algolia/autocomplete-preset-algolia": "1.5.2", + "@docsearch/css": "3.0.0", + "algoliasearch": "^4.0.0" } }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, + "@docusaurus/core": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.18.tgz", + "integrity": "sha512-puV7l+0/BPSi07Xmr8tVktfs1BzhC8P5pm6Bs2CfvysCJ4nefNCD1CosPc1PGBWy901KqeeEJ1aoGwj9tU3AUA==", "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "@babel/core": "^7.17.8", + "@babel/generator": "^7.17.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-react": "^7.16.7", + "@babel/preset-typescript": "^7.16.7", + "@babel/runtime": "^7.17.8", + "@babel/runtime-corejs3": "^7.17.8", + "@babel/traverse": "^7.17.3", + "@docusaurus/cssnano-preset": "2.0.0-beta.18", + "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/mdx-loader": "2.0.0-beta.18", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-common": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "@slorber/static-site-generator-webpack-plugin": "^4.0.4", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.4", + "babel-loader": "^8.2.4", + "babel-plugin-dynamic-import-node": "2.3.0", + "boxen": "^6.2.1", + "chokidar": "^3.5.3", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.1", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^10.2.4", + "core-js": "^3.21.1", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^3.4.1", + "cssnano": "^5.1.5", + "del": "^6.0.0", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^1.12.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.1", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.0", + "nprogress": "^0.2.0", + "postcss": "^8.4.12", + "postcss-loader": "^6.2.1", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.0", + "react-helmet-async": "^1.2.3", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.2.0", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.2.0", + "remark-admonitions": "^1.2.1", + "rtl-detect": "^1.0.4", + "semver": "^7.3.5", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.1", + "tslib": "^2.3.1", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.70.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.7.4", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "sprintf-js": "~1.0.2" + "@babel/highlight": "^7.16.7" } }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { - "type-fest": "^0.20.2" + "@babel/types": "^7.16.7" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } - } - } - }, - "@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", - "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.35" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.16.tgz", - "integrity": "sha512-aLmzDwC9rEOAJv2UJdMns89VZR5Ry4IHu5dQQh24Z/lWKEm44lfQr1UNalZlkUaQN8d155tNh+CS7ntntj1VMA==", - "requires": { - "prop-types": "^15.7.2" - } - }, - "@hapi/hoek": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", - "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" } }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "color-name": "1.1.3" } }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "requires": { - "@babel/types": "^7.14.5" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "dependencies": { - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" + "has-flag": "^4.0.0" } } } }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "requires": { - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - } + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.18.tgz", + "integrity": "sha512-VxhYmpyx16Wv00W9TUfLVv0NgEK/BwP7pOdWoaiELEIAMV7SO1+6iB8gsFUhtfKZ31I4uPVLMKrCyWWakoFeFA==", + "requires": { + "cssnano-preset-advanced": "^5.3.1", + "postcss": "^8.4.12", + "postcss-sort-media-queries": "^4.2.1" + } + }, + "@docusaurus/logger": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.18.tgz", + "integrity": "sha512-frNe5vhH3mbPmH980Lvzaz45+n1PQl3TkslzWYXQeJOkFX17zUd3e3U7F9kR1+DocmAqHkgAoWuXVcvEoN29fg==", + "requires": { + "chalk": "^4.1.2", + "tslib": "^2.3.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@docusaurus/mdx-loader": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.18.tgz", + "integrity": "sha512-pOmAQM4Y1jhuZTbEhjh4ilQa74Mh6Q0pMZn1xgIuyYDdqvIOrOlM/H0i34YBn3+WYuwsGim4/X0qynJMLDUA4A==", + "requires": { + "@babel/parser": "^7.17.8", + "@babel/traverse": "^7.17.3", + "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.1", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "tslib": "^2.3.1", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.1", + "webpack": "^5.70.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" } }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "ansi-styles": { "version": "3.2.1", @@ -26374,405 +4103,1082 @@ "requires": { "color-name": "1.1.3" } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@docusaurus/module-type-aliases": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.18.tgz", + "integrity": "sha512-e6mples8FZRyT7QyqidGS6BgkROjM+gljJsdOqoctbtBp+SZ5YDjwRHOmoY7eqEfsQNOaFZvT2hK38ui87hCRA==", + "dev": true, + "requires": { + "@docusaurus/types": "2.0.0-beta.18", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*" + } + }, + "@docusaurus/plugin-content-blog": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.18.tgz", + "integrity": "sha512-qzK83DgB+mxklk3PQC2nuTGPQD/8ogw1nXSmaQpyXAyhzcz4CXAZ9Swl/Ee9A/bvPwQGnSHSP3xqIYl8OkFtfw==", + "requires": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/mdx-loader": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-common": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "cheerio": "^1.0.0-rc.10", + "feed": "^4.2.2", + "fs-extra": "^10.0.1", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "remark-admonitions": "^1.2.1", + "tslib": "^2.3.1", + "utility-types": "^3.10.0", + "webpack": "^5.70.0" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@docusaurus/plugin-content-docs": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.18.tgz", + "integrity": "sha512-z4LFGBJuzn4XQiUA7OEA2SZTqlp+IYVjd3NrCk/ZUfNi1tsTJS36ATkk9Y6d0Nsp7K2kRXqaXPsz4adDgeIU+Q==", + "requires": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/mdx-loader": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "combine-promises": "^1.1.0", + "fs-extra": "^10.0.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "remark-admonitions": "^1.2.1", + "tslib": "^2.3.1", + "utility-types": "^3.10.0", + "webpack": "^5.70.0" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@docusaurus/plugin-content-pages": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.18.tgz", + "integrity": "sha512-CJ2Xeb9hQrMeF4DGywSDVX2TFKsQpc8ZA7czyeBAAbSFsoRyxXPYeSh8aWljqR4F1u/EKGSKy0Shk/D4wumaHw==", + "requires": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/mdx-loader": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "fs-extra": "^10.0.1", + "remark-admonitions": "^1.2.1", + "tslib": "^2.3.1", + "webpack": "^5.70.0" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } } } }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "@docusaurus/plugin-debug": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.18.tgz", + "integrity": "sha512-inLnLERgG7q0WlVmK6nYGHwVqREz13ivkynmNygEibJZToFRdgnIPW+OwD8QzgC5MpQTJw7+uYjcitpBumy1Gw==", "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "fs-extra": "^10.0.1", + "react-json-view": "^1.21.3", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "@docusaurus/plugin-google-analytics": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.18.tgz", + "integrity": "sha512-s9dRBWDrZ1uu3wFXPCF7yVLo/+5LUFAeoxpXxzory8gn9GYDt8ZDj80h5DUyCLxiy72OG6bXWNOYS/Vc6cOPXQ==", "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, - "@polka/url": { - "version": "1.0.0-next.15", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", - "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" + "@docusaurus/plugin-google-gtag": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.18.tgz", + "integrity": "sha512-h7vPuLVo/9pHmbFcvb4tCpjg4SxxX4k+nfVDyippR254FM++Z/nA5pRB0WvvIJ3ZTe0ioOb5Wlx2xdzJIBHUNg==", + "requires": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "@docusaurus/plugin-sitemap": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.18.tgz", + "integrity": "sha512-Klonht0Ye3FivdBpS80hkVYNOH+8lL/1rbCPEV92rKhwYdwnIejqhdKct4tUTCl8TYwWiyeUFQqobC/5FNVZPQ==", "requires": { - "@hapi/hoek": "^9.0.0" + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-common": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "fs-extra": "^10.0.1", + "sitemap": "^7.1.1", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + "@docusaurus/preset-classic": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.18.tgz", + "integrity": "sha512-TfDulvFt/vLWr/Yy7O0yXgwHtJhdkZ739bTlFNwEkRMAy8ggi650e52I1I0T79s67llecb4JihgHPW+mwiVkCQ==", + "requires": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/plugin-content-blog": "2.0.0-beta.18", + "@docusaurus/plugin-content-docs": "2.0.0-beta.18", + "@docusaurus/plugin-content-pages": "2.0.0-beta.18", + "@docusaurus/plugin-debug": "2.0.0-beta.18", + "@docusaurus/plugin-google-analytics": "2.0.0-beta.18", + "@docusaurus/plugin-google-gtag": "2.0.0-beta.18", + "@docusaurus/plugin-sitemap": "2.0.0-beta.18", + "@docusaurus/theme-classic": "2.0.0-beta.18", + "@docusaurus/theme-common": "2.0.0-beta.18", + "@docusaurus/theme-search-algolia": "2.0.0-beta.18" + } }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + "@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "@docusaurus/theme-classic": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.18.tgz", + "integrity": "sha512-WJWofvSGKC4Luidk0lyUwkLnO3DDynBBHwmt4QrV+aAVWWSOHUjA2mPOF6GLGuzkZd3KfL9EvAfsU0aGE1Hh5g==", + "requires": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/plugin-content-blog": "2.0.0-beta.18", + "@docusaurus/plugin-content-docs": "2.0.0-beta.18", + "@docusaurus/plugin-content-pages": "2.0.0-beta.18", + "@docusaurus/theme-common": "2.0.0-beta.18", + "@docusaurus/theme-translations": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-common": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.38", + "lodash": "^4.17.21", + "postcss": "^8.4.12", + "prism-react-renderer": "^1.3.1", + "prismjs": "^1.27.0", + "react-router-dom": "^5.2.0", + "rtlcss": "^3.5.0" + } }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw==", - "requires": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" + "@docusaurus/theme-common": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.18.tgz", + "integrity": "sha512-3pI2Q6ttScDVTDbuUKAx+TdC8wmwZ2hfWk8cyXxksvC9bBHcyzXhSgcK8LTsszn2aANyZ3e3QY2eNSOikTFyng==", + "requires": { + "@docusaurus/module-type-aliases": "2.0.0-beta.18", + "@docusaurus/plugin-content-blog": "2.0.0-beta.18", + "@docusaurus/plugin-content-docs": "2.0.0-beta.18", + "@docusaurus/plugin-content-pages": "2.0.0-beta.18", + "clsx": "^1.1.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.1", + "tslib": "^2.3.1", + "utility-types": "^3.10.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "@docusaurus/module-type-aliases": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.18.tgz", + "integrity": "sha512-e6mples8FZRyT7QyqidGS6BgkROjM+gljJsdOqoctbtBp+SZ5YDjwRHOmoY7eqEfsQNOaFZvT2hK38ui87hCRA==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "@docusaurus/types": "2.0.0-beta.18", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*" } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" } } }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" + "@docusaurus/theme-search-algolia": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.18.tgz", + "integrity": "sha512-2w97KO/gnjI49WVtYQqENpQ8iO1Sem0yaTxw7/qv/ndlmIAQD0syU4yx6GsA7bTQCOGwKOWWzZSetCgUmTnWgA==", + "requires": { + "@docsearch/react": "^3.0.0", + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/plugin-content-docs": "2.0.0-beta.18", + "@docusaurus/theme-common": "2.0.0-beta.18", + "@docusaurus/theme-translations": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/utils-validation": "2.0.0-beta.18", + "algoliasearch": "^4.13.0", + "algoliasearch-helper": "^3.7.4", + "clsx": "^1.1.1", + "eta": "^1.12.3", + "fs-extra": "^10.0.1", + "lodash": "^4.17.21", + "tslib": "^2.3.1", + "utility-types": "^3.10.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "@docusaurus/theme-translations": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.18.tgz", + "integrity": "sha512-1uTEUXlKC9nco1Lx9H5eOwzB+LP4yXJG5wfv1PMLE++kJEdZ40IVorlUi3nJnaa9/lJNq5vFvvUDrmeNWsxy/Q==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + "fs-extra": "^10.0.1", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "@docusaurus/types": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.18.tgz", + "integrity": "sha512-zkuSmPQYP3+z4IjGHlW0nGzSSpY7Sit0Nciu/66zSb5m07TK72t6T1MlpCAn/XijcB9Cq6nenC3kJh66nGsKYg==", "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "commander": "^5.1.0", + "joi": "^17.6.0", + "utility-types": "^3.10.0", + "webpack": "^5.70.0", + "webpack-merge": "^5.8.0" }, "dependencies": { - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" } + } + } + }, + "@docusaurus/utils": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.18.tgz", + "integrity": "sha512-v2vBmH7xSbPwx3+GB90HgLSQdj+Rh5ELtZWy7M20w907k0ROzDmPQ/8Ke2DK3o5r4pZPGnCrsB3SaYI83AEmAA==", + "requires": { + "@docusaurus/logger": "2.0.0-beta.18", + "@svgr/webpack": "^6.2.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.1", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.3.1", + "url-loader": "^4.1.1", + "webpack": "^5.70.0" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "webpack": { + "version": "5.71.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", + "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" } } } }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "@docusaurus/utils-common": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.18.tgz", + "integrity": "sha512-pK83EcOIiKCLGhrTwukZMo5jqd1sqqqhQwOVyxyvg+x9SY/lsnNzScA96OEfm+qQLBwK1OABA7Xc1wfkgkUxvw==", + "requires": { + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.18.tgz", + "integrity": "sha512-3aDrXjJJ8Cw2MAYEk5JMNnr8UHPxmVNbPU/PIHFWmWK09nJvs3IQ8nc9+8I30aIjRdIyc/BIOCxgvAcJ4hsxTA==", "requires": { - "@babel/types": "^7.12.6" + "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/utils": "2.0.0-beta.18", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "type-fest": "^0.20.2" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + } + } + }, + "@fortawesome/fontawesome-common-types": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", + "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.35" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", + "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.35" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.16.tgz", + "integrity": "sha512-aLmzDwC9rEOAJv2UJdMns89VZR5Ry4IHu5dQQh24Z/lWKEm44lfQr1UNalZlkUaQN8d155tNh+CS7ntntj1VMA==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", + "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==" + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "requires": { - "boolbase": "~1.0.0" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.4.tgz", + "integrity": "sha512-FvMavoWEIePps6/JwGCOLYKCRhuwIHhMtmbKpBFgzNkxwpa/569LfTkrbRk1m1I3n+ezJK4on9E1A6cjuZmD9g==", + "requires": { + "bluebird": "^3.7.1", + "cheerio": "^0.22.0", + "eval": "^0.1.8", + "webpack-sources": "^1.4.3" + }, + "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", + "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", + "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", + "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", + "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", + "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", + "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", + "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", + "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==" + }, + "@svgr/babel-preset": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", + "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", + "@svgr/babel-plugin-transform-svg-component": "^6.2.0" + } + }, + "@svgr/core": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", + "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", + "requires": { + "@svgr/plugin-jsx": "^6.2.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", + "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", + "requires": { + "@babel/types": "^7.15.6", + "entities": "^3.0.1" }, "dependencies": { - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" } } }, + "@svgr/plugin-jsx": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", + "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", + "requires": { + "@babel/core": "^7.15.5", + "@svgr/babel-preset": "^6.2.0", + "@svgr/hast-util-to-babel-ast": "^6.2.1", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", + "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", + "requires": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.5.0" + } + }, + "@svgr/webpack": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz", + "integrity": "sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==", + "requires": { + "@babel/core": "^7.15.5", + "@babel/plugin-transform-react-constant-elements": "^7.14.5", + "@babel/preset-env": "^7.15.6", + "@babel/preset-react": "^7.14.5", + "@babel/preset-typescript": "^7.15.0", + "@svgr/core": "^6.2.1", + "@svgr/plugin-jsx": "^6.2.1", + "@svgr/plugin-svgo": "^6.2.0" + } + }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -26782,9 +5188,9 @@ } }, "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, "@tsconfig/docusaurus": { "version": "1.0.2", @@ -26792,6 +5198,40 @@ "integrity": "sha512-x4rRVb346vjyym6QbeB1Tv01XXwhbkujOmvDmtf0bT20oc2gbDhbmwpskKqZ5Of2Q/Vk4jNk1WMiLsZdJ9t7Dw==", "dev": true }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "@types/eslint": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", @@ -26815,24 +5255,41 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" }, - "@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } }, "@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" } }, "@types/hast": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", - "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", "requires": { "@types/unist": "*" } @@ -26840,13 +5297,20 @@ "@types/history": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", - "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==", - "dev": true + "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==" }, "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "requires": { + "@types/node": "*" + } }, "@types/js-yaml": { "version": "4.0.5", @@ -26873,10 +5337,16 @@ "@types/unist": "*" } }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, "@types/node": { "version": "16.3.3", @@ -26904,10 +5374,15 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { "version": "17.0.3", @@ -26932,27 +5407,47 @@ "version": "5.1.13", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz", "integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==", - "dev": true, "requires": { "@types/history": "*", "@types/react": "*" } }, + "@types/react-router-config": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", + "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + }, + "dependencies": { + "@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + } + } + }, "@types/react-router-dom": { "version": "5.1.7", "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", - "dev": true, "requires": { "@types/history": "*", "@types/react": "*", "@types/react-router": "*" } }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" + }, "@types/sax": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.3.tgz", - "integrity": "sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", "requires": { "@types/node": "*" } @@ -26962,11 +5457,44 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "requires": { + "@types/node": "*" + } + }, "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -27109,12 +5637,27 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + } } }, "acorn": { @@ -27123,17 +5666,21 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, "address": { "version": "1.1.2", @@ -27160,202 +5707,72 @@ "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", - "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.10.3", - "@algolia/cache-common": "4.10.3", - "@algolia/cache-in-memory": "4.10.3", - "@algolia/client-account": "4.10.3", - "@algolia/client-analytics": "4.10.3", - "@algolia/client-common": "4.10.3", - "@algolia/client-personalization": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/logger-console": "4.10.3", - "@algolia/requester-browser-xhr": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/requester-node-http": "4.10.3", - "@algolia/transporter": "4.10.3" + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" }, "dependencies": { - "@algolia/cache-browser-local-storage": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", - "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", - "requires": { - "@algolia/cache-common": "4.10.3" - } - }, - "@algolia/cache-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", - "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" - }, - "@algolia/cache-in-memory": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", - "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", - "requires": { - "@algolia/cache-common": "4.10.3" - } - }, - "@algolia/client-account": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", - "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "@algolia/client-analytics": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", - "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/client-search": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "@algolia/client-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", - "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", - "requires": { - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "@algolia/client-search": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", - "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", - "requires": { - "@algolia/client-common": "4.10.3", - "@algolia/requester-common": "4.10.3", - "@algolia/transporter": "4.10.3" - } - }, - "@algolia/logger-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", - "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" - }, - "@algolia/logger-console": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", - "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", - "requires": { - "@algolia/logger-common": "4.10.3" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", - "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", - "requires": { - "@algolia/requester-common": "4.10.3" - } - }, - "@algolia/requester-common": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", - "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" - }, - "@algolia/requester-node-http": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", - "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { - "@algolia/requester-common": "4.10.3" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "@algolia/transporter": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", - "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", - "requires": { - "@algolia/cache-common": "4.10.3", - "@algolia/logger-common": "4.10.3", - "@algolia/requester-common": "4.10.3" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" } } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "algoliasearch": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.13.0.tgz", + "integrity": "sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw==", + "requires": { + "@algolia/cache-browser-local-storage": "4.13.0", + "@algolia/cache-common": "4.13.0", + "@algolia/cache-in-memory": "4.13.0", + "@algolia/client-account": "4.13.0", + "@algolia/client-analytics": "4.13.0", + "@algolia/client-common": "4.13.0", + "@algolia/client-personalization": "4.13.0", + "@algolia/client-search": "4.13.0", + "@algolia/logger-common": "4.13.0", + "@algolia/logger-console": "4.13.0", + "@algolia/requester-browser-xhr": "4.13.0", + "@algolia/requester-common": "4.13.0", + "@algolia/requester-node-http": "4.13.0", + "@algolia/transporter": "4.13.0" + } + }, "algoliasearch-helper": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz", - "integrity": "sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.8.1.tgz", + "integrity": "sha512-IGK67xeut0wYRXQw+MlSDYmYK/6e+/a++HVf9MgSWYtPd6QIHWiOKpgMYRJMNF/zMjx0FPA16D/AypgWxSVBnQ==", "requires": { - "events": "^1.1.1" - }, - "dependencies": { - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - } + "@algolia/events": "^4.0.1" } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.1.0" } }, "ansi-colors": { @@ -27364,25 +5781,10 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" }, "ansi-regex": { "version": "5.0.0", @@ -27413,34 +5815,19 @@ } }, "arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "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==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "array-includes": { "version": "3.1.4", @@ -27460,16 +5847,6 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, "array.prototype.flatmap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", @@ -27486,11 +5863,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -27505,27 +5877,82 @@ "lodash": "^4.17.14" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "autoprefixer": { + "version": "10.4.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", + "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", + "requires": { + "browserslist": "^4.20.2", + "caniuse-lite": "^1.0.30001317", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, + "electron-to-chromium": { + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + } + } }, "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "requires": { - "follow-redirects": "^1.14.0" + "follow-redirects": "^1.14.7" + } + }, + "babel-loader": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.4.tgz", + "integrity": "sha512-8dytA3gcvPPPv4Grjhnt8b5IIiTcq/zeXOPk4iTYI0SVXcsmuGg7JtBRDp8S9X+gJfhQ8ektjXZlDu1Bb33U8A==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } } }, "babel-plugin-apply-mdx-type-prop": { @@ -27535,13 +5962,6 @@ "requires": { "@babel/helper-plugin-utils": "7.10.4", "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - } } }, "babel-plugin-dynamic-import-node": { @@ -27561,20 +5981,15 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", + "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" }, "dependencies": { - "@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -27583,20 +5998,20 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2" + "@babel/helper-define-polyfill-provider": "^0.3.1" } }, "bail": { @@ -27609,56 +6024,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", @@ -27679,37 +6044,33 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" }, "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -27725,24 +6086,15 @@ } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "bonjour-service": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.11.tgz", + "integrity": "sha512-drMprzr2rDTCtgEE3VgdA9uUFaUHF+jXduwYSThHJnKMYM+FhI9Z3ph+TX3xy0LtgYHae6CHYPJ/2UnK8nQHcA==", "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", + "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - } + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.4" } }, "boolbase": { @@ -27750,6 +6102,68 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.12.2.tgz", + "integrity": "sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==" + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -27783,31 +6197,10 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "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" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacheable-request": { "version": "6.1.0", @@ -27873,9 +6266,9 @@ } }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "camelcase-css": { "version": "2.0.1", @@ -28020,10 +6413,22 @@ } } }, + "cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "requires": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + } + }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -28051,30 +6456,9 @@ } }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "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==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "classnames": { "version": "2.3.1", @@ -28082,9 +6466,9 @@ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, "clean-css": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.3.tgz", - "integrity": "sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", + "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", "requires": { "source-map": "~0.6.0" }, @@ -28102,9 +6486,9 @@ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" }, "cli-color": { "version": "2.0.0", @@ -28128,75 +6512,23 @@ } } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } + "colors": "1.4.0", + "string-width": "^4.2.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "clone-response": { @@ -28212,68 +6544,11 @@ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, "collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -28288,14 +6563,20 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colord": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", - "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==" + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "optional": true }, "combine-promises": { "version": "1.1.0", @@ -28317,11 +6598,6 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -28344,11 +6620,6 @@ "vary": "~1.1.2" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -28393,12 +6664,9 @@ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, "content-type": { "version": "1.0.4", @@ -28414,19 +6682,19 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "copy-text-to-clipboard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", + "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" }, "copy-to-clipboard": { "version": "3.3.1", @@ -28436,36 +6704,140 @@ "toggle-selection": "^1.0.6" } }, + "copy-webpack-plugin": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", + "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", + "requires": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", + "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", + "requires": { + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.9", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, "core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz", + "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==" }, "core-js-compat": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", - "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" }, "semver": { "version": "7.0.0", @@ -28475,21 +6847,33 @@ } }, "core-js-pure": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", - "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==" + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", + "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } }, "cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "requires": { - "node-fetch": "2.6.1" + "node-fetch": "2.6.7" } }, "cross-spawn": { @@ -28507,301 +6891,182 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" + "css-declaration-sorter": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", + "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==" + }, + "css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + } }, "css-minimizer-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", "requires": { "cssnano": "^5.0.6", "jest-worker": "^27.0.2", - "p-limit": "^3.0.2", "postcss": "^8.3.5", - "schema-utils": "^3.0.0", + "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", - "requires": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano-preset-advanced": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz", - "integrity": "sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q==", - "requires": { - "autoprefixer": "^10.2.0", - "cssnano-preset-default": "^5.1.3", - "postcss-discard-unused": "^5.0.1", - "postcss-merge-idents": "^5.0.1", - "postcss-reduce-idents": "^5.0.1", - "postcss-zindex": "^5.0.1" - }, - "dependencies": { - "autoprefixer": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", - "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001243", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - } - } - }, - "cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", - "requires": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" - }, - "dependencies": { - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", - "requires": { - "timsort": "^0.3.0" - } - }, - "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" - }, - "postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", - "requires": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - } - }, - "postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" - } - }, - "postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "fast-deep-equal": "^3.1.3" } }, - "postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz", + "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==", + "requires": { + "cssnano-preset-default": "^5.2.7", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-advanced": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.3.tgz", + "integrity": "sha512-AB9SmTSC2Gd8T7PpKUsXFJ3eNsg7dc4CTZ0+XAJ29MNxyJsrCEk7N1lw31bpHrsQH2PVJr21bbWgGAfA9j0dIA==", + "requires": { + "autoprefixer": "^10.3.7", + "cssnano-preset-default": "^5.2.7", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + } + }, + "cssnano-preset-default": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz", + "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==", + "requires": { + "css-declaration-sorter": "^6.2.2", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.0", + "postcss-discard-comments": "^5.1.1", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.4", + "postcss-merge-rules": "^5.1.1", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.2", + "postcss-minify-selectors": "^5.2.0", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.0", + "postcss-normalize-repeat-style": "^5.1.0", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.1", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, "cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", - "requires": {} + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" }, "csso": { "version": "4.2.0", @@ -28834,16 +7099,6 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -28852,19 +7107,6 @@ "mimic-response": "^1.0.0" } }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -28882,12 +7124,11 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "execa": "^5.0.0" } }, "defer-to-connect": { @@ -28895,6 +7136,11 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -28903,41 +7149,19 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" } }, "depd": { @@ -29001,20 +7225,11 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", + "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", "requires": { - "buffer-indexof": "^1.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" } }, "doctrine": { @@ -29034,39 +7249,37 @@ "utila": "~0.4" } }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" - }, - "dependencies": { - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - } } }, "dot-case": { @@ -29084,6 +7297,13 @@ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + } } }, "duplexer": { @@ -29096,6 +7316,11 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -29107,9 +7332,9 @@ "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "emojis-list": { "version": "3.0.0", @@ -29157,14 +7382,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -29177,6 +7394,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -29209,6 +7427,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -29370,8 +7589,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} + "dev": true }, "eslint-mdx": { "version": "1.13.0", @@ -29621,10 +7839,11 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "requires": { + "@types/node": "*", "require-like": ">= 0.1.1" } }, @@ -29648,121 +7867,40 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } - }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { - "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" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" } } }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -29776,19 +7914,32 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -29801,6 +7952,21 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -29834,66 +8000,15 @@ "is-extendable": "^0.1.0" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -29922,9 +8037,9 @@ } }, "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } @@ -29946,17 +8061,17 @@ } }, "fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "requires": { - "cross-fetch": "^3.0.4", + "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "ua-parser-js": "^0.7.30" } }, "fbjs-css-vars": { @@ -29968,23 +8083,8 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } + "requires": { + "xml-js": "^1.6.11" } }, "file-entry-cache": { @@ -30005,16 +8105,10 @@ "schema-utils": "^3.0.0" } }, - "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==", - "optional": true - }, "filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" }, "fill-range": { "version": "7.0.1", @@ -30054,9 +8148,9 @@ } }, "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -30089,202 +8183,76 @@ "dev": true }, "flux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", - "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", + "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", "requires": { "fbemitter": "^3.0.0", - "fbjs": "^3.0.0" + "fbjs": "^3.0.1" } }, "follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "requires": { - "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" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } } } }, @@ -30294,23 +8262,30 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -30338,11 +8313,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -30376,30 +8346,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, "github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - } - } + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" }, "glob": { "version": "7.1.7", @@ -30485,22 +8441,22 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "dependencies": { "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" } } }, @@ -30558,12 +8514,11 @@ } }, "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" + "duplexer": "^0.1.2" } }, "handle-thing": { @@ -30582,7 +8537,8 @@ "has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -30598,62 +8554,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -30737,11 +8642,6 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, "history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -30774,6 +8674,11 @@ "wbuf": "^1.1.0" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -30798,61 +8703,49 @@ } } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", "he": "^1.2.0", - "param-case": "^3.0.3", + "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^4.6.3" + "terser": "^5.10.0" }, "dependencies": { - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "requires": { - "source-map": "~0.6.0" - } + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", "requires": { + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" }, "dependencies": { "commander": { @@ -30874,6 +8767,18 @@ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -30948,168 +8853,48 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz", + "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==", + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "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" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" } } }, @@ -31126,12 +8911,30 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "image-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", + "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", + "requires": { + "queue": "6.0.2" + } + }, + "immer": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", + "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==" + }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -31146,63 +8949,6 @@ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - } - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -31214,9 +8960,9 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infima": { - "version": "0.2.0-alpha.26", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.26.tgz", - "integrity": "sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw==" + "version": "0.2.0-alpha.38", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.38.tgz", + "integrity": "sha512-1WsmqSMI5IqzrUx3goq+miJznHBonbE3aoqZ1AR/i/oHhroxNeSV6Awv5VoVfXBhfTzLSnxkHaRI2qpAMYcCzw==" }, "inflight": { "version": "1.0.6", @@ -31242,19 +8988,11 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -31266,49 +9004,19 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "loose-envify": "^1.0.0" } }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -31329,14 +9037,6 @@ "is-decimal": "^1.0.0" } }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -31345,7 +9045,8 @@ "is-bigint": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true }, "is-binary-path": { "version": "2.1.0", @@ -31359,6 +9060,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -31371,7 +9073,8 @@ "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true }, "is-ci": { "version": "2.0.0", @@ -31379,33 +9082,6 @@ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { "ci-info": "^2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - } - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - }, - "dependencies": { - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - } } }, "is-core-module": { @@ -31416,56 +9092,17 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true }, "is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "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==" - } - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -31511,7 +9148,8 @@ "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true }, "is-npm": { "version": "5.0.0", @@ -31526,36 +9164,19 @@ "is-number-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true }, "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - }, - "dependencies": { - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - } - } - }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -31584,6 +9205,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -31594,11 +9216,6 @@ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, "is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", @@ -31607,17 +9224,19 @@ "is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -31626,6 +9245,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -31639,6 +9259,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -31648,11 +9269,6 @@ "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" }, - "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==" - }, "is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", @@ -31672,9 +9288,9 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isexe": { "version": "2.0.0", @@ -31808,11 +9424,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -31848,11 +9459,6 @@ "json-buffer": "3.0.0" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -31864,9 +9470,9 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, "latest-version": { "version": "5.1.0", @@ -31891,6 +9497,11 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -32010,11 +9621,6 @@ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -32026,11 +9632,6 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" - }, "longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", @@ -32090,19 +9691,6 @@ } } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, "markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -32190,6 +9778,14 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "requires": { + "fs-monkey": "1.0.3" + } + }, "memoizee": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", @@ -32214,39 +9810,6 @@ } } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -32267,11 +9830,6 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, "micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -32283,19 +9841,12 @@ } }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - } + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -32336,27 +9887,46 @@ } }, "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", + "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } @@ -32379,37 +9949,18 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, - "module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + "mrmime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", + "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==" }, "ms": { "version": "2.1.2", @@ -32417,19 +9968,14 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", "requires": { - "dns-packet": "^1.3.1", + "dns-packet": "^5.2.2", "thunky": "^1.0.2" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, "mustache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", @@ -32447,53 +9993,10 @@ "thenify-all": "^1.0.0" } }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", + "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==" }, "natural-compare": { "version": "1.4.0", @@ -32502,9 +10005,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -32517,11 +10020,6 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, "no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -32532,22 +10030,25 @@ } }, "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "requires": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-releases": { "version": "1.1.73", @@ -32570,18 +10071,11 @@ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - } + "path-key": "^3.0.0" } }, "nprogress": { @@ -32590,9 +10084,9 @@ "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" }, "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "requires": { "boolbase": "^1.0.0" } @@ -32612,66 +10106,17 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -32705,16 +10150,6 @@ "es-abstract": "^1.19.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, "object.hasown": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", @@ -32725,18 +10160,11 @@ "es-abstract": "^1.19.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -32778,12 +10206,13 @@ } }, "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, "opener": { @@ -32791,21 +10220,6 @@ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - } - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -32820,24 +10234,11 @@ "word-wrap": "^1.2.3" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -32873,11 +10274,12 @@ } }, "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "requires": { - "retry": "^0.12.0" + "@types/retry": "^0.12.0", + "retry": "^0.13.1" } }, "p-try": { @@ -32945,15 +10347,23 @@ } }, "parse-numeric-range": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", - "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -32968,16 +10378,6 @@ "tslib": "^2.0.3" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -33004,122 +10404,27 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pkg-dir": { "version": "4.2.0", @@ -33197,112 +10502,239 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, "postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, "postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "dependencies": { "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, "electron-to-chromium": { - "version": "1.3.779", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", - "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==" + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" } } }, "postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", + "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, + "postcss-discard-comments": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", + "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==" + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + }, "postcss-discard-unused": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz", - "integrity": "sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "requires": { "postcss-selector-parser": "^6.0.5" } }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, "postcss-merge-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz", - "integrity": "sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-merge-longhand": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", + "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + } + }, + "postcss-merge-rules": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", + "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "dependencies": { + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, + "electron-to-chromium": { + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + } } }, "postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "requires": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", + "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, + "electron-to-chromium": { + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + } } }, "postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", + "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", "requires": { - "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5" } }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + }, "postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", @@ -33311,14 +10743,14 @@ "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - } + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" } }, "postcss-modules-values": { @@ -33327,178 +10759,214 @@ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "requires": { "icss-utils": "^5.0.0" - }, - "dependencies": { - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - } + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "requires": { + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", + "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", + "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", "requires": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" }, "dependencies": { "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" } } }, "postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "requires": { - "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", + "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-idents": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz", - "integrity": "sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0" }, "dependencies": { "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" } } }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "postcss-sort-media-queries": { - "version": "3.11.12", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz", - "integrity": "sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz", + "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==", "requires": { - "sort-css-media-queries": "1.5.4" + "sort-css-media-queries": "2.0.4" } }, "postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" } }, "postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "postcss-zindex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.1.tgz", - "integrity": "sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA==", - "requires": {} + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==" }, "prebuild-webpack-plugin": { "version": "1.1.1", @@ -33517,6 +10985,11 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, "prettier": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", @@ -33524,50 +10997,12 @@ "dev": true }, "pretty-error": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", - "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "requires": { "lodash": "^4.17.20", - "renderkid": "^2.0.6" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + "renderkid": "^3.0.0" } }, "pretty-time": { @@ -33578,13 +11013,12 @@ "prism-react-renderer": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", - "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", - "requires": {} + "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==" }, "prismjs": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", - "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" }, "process-nextick-args": { "version": "2.0.1", @@ -33606,9 +11040,9 @@ } }, "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -33639,13 +11073,15 @@ "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + } } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -33656,9 +11092,9 @@ } }, "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "pupa": { "version": "2.1.1", @@ -33673,25 +11109,18 @@ "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } }, "queue-microtask": { "version": "1.2.3", @@ -33707,19 +11136,26 @@ } }, "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + } } }, "rc": { @@ -33752,8 +11188,7 @@ "react-async": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "requires": {} + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==" }, "react-base16-styling": { "version": "0.6.0", @@ -33776,36 +11211,81 @@ } }, "react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "requires": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", + "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.10", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -33815,30 +11295,59 @@ } }, "browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -33872,48 +11381,57 @@ "debug": "^2.6.0" } }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "electron-to-chromium": { + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "ansi-regex": "^5.0.1" } } } @@ -33929,24 +11447,25 @@ } }, "react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", + "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" }, "react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "react-helmet-async": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.2.3.tgz", + "integrity": "sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw==", "requires": { - "object-assign": "^4.1.1", + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" } }, "react-is": { @@ -33971,11 +11490,12 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "requires": { - "prop-types": "^15.5.0" + "@types/react": "*", + "prop-types": "^15.6.2" } }, "react-loadable-ssr-addon-v5-slorber": { @@ -33987,11 +11507,11 @@ } }, "react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.1.tgz", + "integrity": "sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==", "requires": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", @@ -34001,21 +11521,6 @@ "react-is": "^16.6.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } } }, "react-router-config": { @@ -34027,25 +11532,19 @@ } }, "react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.0.tgz", + "integrity": "sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ==", "requires": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.2.0", + "react-router": "5.2.1", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" } }, - "react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "requires": {} - }, "react-textarea-autosize": { "version": "8.3.3", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", @@ -34083,9 +11582,9 @@ } }, "reading-time": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", - "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "rechoir": { "version": "0.6.2", @@ -34109,17 +11608,17 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { "version": "0.14.5", @@ -34129,38 +11628,11 @@ "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -34173,16 +11645,16 @@ "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "registry-auth-token": { @@ -34202,14 +11674,14 @@ } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "requires": { "jsesc": "~0.5.0" }, @@ -34636,42 +12108,59 @@ "xtend": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "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==" + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -34686,21 +12175,6 @@ "path-parse": "^1.0.6" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -34711,11 +12185,6 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -34724,31 +12193,16 @@ "lowercase-keys": "^1.0.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -34763,14 +12217,13 @@ "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, "rtlcss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.3.0.tgz", - "integrity": "sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "requires": { - "chalk": "^4.1.0", "find-up": "^5.0.0", - "mkdirp": "^1.0.4", - "postcss": "^8.2.4", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -34791,11 +12244,6 @@ "p-locate": "^5.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -34815,18 +12263,11 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "tslib": "^2.1.0" } }, "safe-buffer": { @@ -34834,14 +12275,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -34886,11 +12319,11 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", "requires": { - "node-forge": "^0.10.0" + "node-forge": "^1" } }, "semver": { @@ -34917,9 +12350,9 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -34928,9 +12361,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -34952,9 +12385,14 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" } } }, @@ -34981,16 +12419,6 @@ "range-parser": "1.2.0" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, "mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", @@ -35008,11 +12436,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" } } }, @@ -35067,30 +12490,14 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "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==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "send": "0.17.2" } }, "setimmediate": { @@ -35099,9 +12506,9 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shallow-clone": { "version": "3.0.1", @@ -35111,6 +12518,11 @@ "kind-of": "^6.0.2" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -35125,9 +12537,9 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" }, "shelljs": { "version": "0.8.5", @@ -35143,6 +12555,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -35150,25 +12563,18 @@ } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sirv": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", - "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "requires": { - "@polka/url": "^1.0.0-next.15", - "mime": "^2.3.1", + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", "totalist": "^1.0.0" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - } } }, "sisteransi": { @@ -35177,20 +12583,20 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "sitemap": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.0.0.tgz", - "integrity": "sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", "requires": { - "@types/node": "^15.0.1", + "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, "dependencies": { "@types/node": { - "version": "15.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", - "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" } } }, @@ -35210,127 +12616,20 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "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==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "requires": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "sort-css-media-queries": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", - "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz", + "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==" }, "source-list-map": { "version": "2.0.1", @@ -35343,21 +12642,9 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" - }, - "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==", - "requires": { - "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" - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { "version": "0.5.20", @@ -35375,11 +12662,6 @@ } } }, - "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==" - }, "space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", @@ -35410,33 +12692,6 @@ "wbuf": "^1.7.3" } }, - "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==", - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -35452,52 +12707,15 @@ "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "std-env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", - "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", - "requires": { - "ci-info": "^1.6.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.0.1.tgz", + "integrity": "sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==" }, "string-replace-loader": { "version": "3.0.3", @@ -35546,6 +12764,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -35555,11 +12774,27 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, "stringify-entities": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", @@ -35579,13 +12814,6 @@ "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - } } }, "strip-ansi": { @@ -35601,11 +12829,6 @@ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -35625,30 +12848,40 @@ } }, "stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "postcss-selector-parser": "^6.0.4" }, "dependencies": { "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, "electron-to-chromium": { - "version": "1.3.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz", - "integrity": "sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA==" + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" } } }, @@ -35673,16 +12906,16 @@ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", - "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", "css-select": "^4.1.3", - "css-tree": "^1.1.2", + "css-tree": "^1.1.3", "csso": "^4.2.0", + "picocolors": "^1.0.0", "stable": "^0.1.8" }, "dependencies": { @@ -35830,15 +13063,10 @@ "next-tick": "1" } }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", + "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" }, "tiny-warning": { "version": "1.0.3", @@ -35850,64 +13078,11 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -35922,15 +13097,20 @@ "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -35946,11 +13126,6 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, - "ts-essentials": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", - "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" - }, "tslib": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", @@ -36000,14 +13175,15 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", @@ -36025,28 +13201,28 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" }, "unified": { "version": "9.2.0", @@ -36061,22 +13237,6 @@ "vfile": "^4.0.0" } }, - "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==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -36158,52 +13318,67 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" }, "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" } }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } } } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, "uri-js": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", @@ -36219,20 +13394,6 @@ } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, "url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -36243,48 +13404,23 @@ "schema-utils": "^3.0.0" } }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { "prepend-http": "^2.0.0" - }, - "dependencies": { - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - } } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, "use-composed-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", - "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", - "requires": { - "ts-essentials": "^2.0.3" - } + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.2.1.tgz", + "integrity": "sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw==" }, "use-isomorphic-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", - "requires": {} + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" }, "use-latest": { "version": "1.2.0", @@ -36299,17 +13435,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -36326,9 +13451,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", @@ -36346,11 +13471,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, "vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -36377,15 +13497,15 @@ } }, "wait-on": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", "requires": { - "axios": "^0.21.1", - "joi": "^17.3.0", + "axios": "^0.25.0", + "joi": "^17.6.0", "lodash": "^4.17.21", "minimist": "^1.2.5", - "rxjs": "^6.6.3" + "rxjs": "^7.5.4" } }, "watchpack": { @@ -36415,10 +13535,16 @@ "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, "webpack": { "version": "5.58.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", "@types/estree": "^0.0.50", @@ -36449,481 +13575,174 @@ "acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true }, "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} + "dev": true } } }, "webpack-bundle-analyzer": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", - "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", + "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", "requires": { "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^6.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "requires": {} - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - } - } - }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "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" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.1", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { - "binary-extensions": "^1.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "fast-deep-equal": "^3.1.3" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "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" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "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" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + } + } + }, + "webpack-dev-server": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.8.0.tgz", + "integrity": "sha512-yZ7OWVP1nOtv8s10R/ZCsH6zf6QKkNusMRBE9DsQbOknRzKaFYYrbwVPCXp8ynUOTt3RlD9szM8H0pUlrJ6wcw==", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "requires": { - "glob": "^7.1.3" + "fast-deep-equal": "^3.1.3" } }, - "schema-utils": { + "json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "has-flag": "^3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==" } } }, @@ -36934,18 +13753,6 @@ "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - } } }, "webpack-sources": { @@ -36953,6 +13760,17 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, + "webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + } + }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -36968,6 +13786,15 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -36980,6 +13807,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -36988,17 +13816,37 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "requires": { - "string-width": "^4.0.0" + "string-width": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "wildcard": { @@ -37012,22 +13860,44 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "wrappy": { @@ -37047,12 +13917,9 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==" }, "xdg-basedir": { "version": "4.0.0", @@ -37072,11 +13939,6 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -37087,107 +13949,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/docs/package.json b/docs/package.json index 8941645e669..53b69bbb3ac 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^2.0.0-beta.3", - "@docusaurus/preset-classic": "^2.0.0-beta.3", + "@docusaurus/core": "^2.0.0-beta.18", + "@docusaurus/preset-classic": "^2.0.0-beta.18", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.16", @@ -43,8 +43,8 @@ ] }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.0.0-beta.3", - "@docusaurus/types": "^2.0.0-beta.3", + "@docusaurus/module-type-aliases": "^2.0.0-beta.18", + "@docusaurus/types": "^2.0.0-beta.18", "@tsconfig/docusaurus": "^1.0.2", "@types/js-yaml": "^4.0.5", "@types/react": "^17.0.3", From 17affd8081a03669720dc05766832dfa21d0c639 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 5 Apr 2022 19:28:46 +0000 Subject: [PATCH 0353/1130] refactor(docs): Bump typescript dependency. * Newer `tsc` needed for Docusaurus changes. --- docs/package-lock.json | 6 +++--- docs/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 24e40eaa137..64573d4aec9 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13169,9 +13169,9 @@ } }, "typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "ua-parser-js": { diff --git a/docs/package.json b/docs/package.json index 53b69bbb3ac..755482b6c88 100644 --- a/docs/package.json +++ b/docs/package.json @@ -60,7 +60,7 @@ "prebuild-webpack-plugin": "^1.1.1", "prettier": "2.3.1", "string-replace-loader": "^3.0.3", - "typescript": "^4.2.3", + "typescript": "^4.6.3", "webpack": "^5.46.0" } } From c259c7b27aa909917f5b7a2b6d9c11354f1550c4 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 5 Apr 2022 21:02:14 +0000 Subject: [PATCH 0354/1130] fix(docs): Updated proper API key. --- docs/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 536fa922201..ff1a13605f0 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -106,7 +106,7 @@ module.exports = { }, algolia: { appId: "USXLDJ14JE", - apiKey: "75325855fc90356828fe212d38e5ca34", + apiKey: "384a3bd2d50136c9dc8c8ddfe1b3a4b2", indexName: "zmkfirmware", }, }, From 6501e68c2d070fc5c85df2cbffe143e5f68ab9e8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 6 Apr 2022 02:26:38 +0000 Subject: [PATCH 0355/1130] fix(docs): Remove breadcrumbs (for now) * Remove breadcrumbs until they're useful with content for each level in our docs. --- docs/docusaurus.config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ff1a13605f0..66fa811dcd6 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -119,6 +119,8 @@ module.exports = { anonymizeIP: true, }, docs: { + // Removed (for now) until we have content for each level of the generated breadcrumbs + breadcrumbs: false, // It is recommended to set document id as docs home page (`docs/` path). sidebarPath: require.resolve("./sidebars.js"), // Please change this to your repo. From 5c83be0de13fdcb1d77285afe475f668a9dddd03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Apr 2022 10:02:30 +0000 Subject: [PATCH 0356/1130] chore(deps): bump path-parse from 1.0.6 to 1.0.7 in /docs Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 64573d4aec9..f0dc8fc7b7a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -10399,9 +10399,9 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "1.8.0", From 642fe0ce3d0cde8624ddaed295820f60fd00aff1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Apr 2022 10:02:38 +0000 Subject: [PATCH 0357/1130] chore(deps): bump browserslist from 4.14.5 to 4.20.2 in /docs Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.14.5 to 4.20.2. - [Release notes](https://github.com/browserslist/browserslist/releases) - [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md) - [Commits](https://github.com/browserslist/browserslist/compare/4.14.5...4.20.2) --- updated-dependencies: - dependency-name: browserslist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 162 +++++++---------------------------------- 1 file changed, 25 insertions(+), 137 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index f0dc8fc7b7a..c72f901b41c 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -447,18 +447,6 @@ "semver": "^6.3.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -5895,18 +5883,6 @@ "postcss-value-parser": "^4.2.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -6182,14 +6158,32 @@ } }, "browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "requires": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==" + }, + "electron-to-chromium": { + "version": "1.4.104", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.104.tgz", + "integrity": "sha512-2kjoAyiG7uMyGRM9mx25s3HAzmQG2ayuYXxsFmYugHSDcwxREgLtscZvbL1JcW9S/OemeQ3f/SG6JhDwpnCclQ==" + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + } } }, "buffer-from": { @@ -6812,18 +6806,6 @@ "semver": "7.0.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -7326,11 +7308,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "electron-to-chromium": { - "version": "1.3.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", - "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" - }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -10050,11 +10027,6 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, - "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10532,18 +10504,6 @@ "postcss-value-parser": "^4.2.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -10636,18 +10596,6 @@ "postcss-selector-parser": "^6.0.5" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -10693,18 +10641,6 @@ "postcss-value-parser": "^4.2.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -10815,18 +10751,6 @@ "postcss-value-parser": "^4.2.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -10887,18 +10811,6 @@ "caniuse-api": "^3.0.0" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -11294,18 +11206,6 @@ "color-convert": "^1.9.0" } }, - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", @@ -12856,18 +12756,6 @@ "postcss-selector-parser": "^6.0.4" }, "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "caniuse-lite": { "version": "1.0.30001325", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", From 7e844bc269b814a3b7028db9700ac51739bea6e3 Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Tue, 5 Apr 2022 12:59:24 -0700 Subject: [PATCH 0358/1130] fix(behaviors): Remove `behavior_hold_tap_data` Related to discussion during development of tap-dance behavior: https://github.com/zmkfirmware/zmk/pull/1139#discussion_r810564682 This PR suggests to remove the `struct behavior_hold_tap_data` because is not used to store data for each hold tap. --- app/src/behaviors/behavior_hold_tap.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 485b9dc3dfd..030cd3dd015 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -674,9 +674,6 @@ static int behavior_hold_tap_init(const struct device *dev) { return 0; } -struct behavior_hold_tap_data {}; -static struct behavior_hold_tap_data behavior_hold_tap_data; - #define KP_INST(n) \ static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ @@ -688,9 +685,9 @@ static struct behavior_hold_tap_data behavior_hold_tap_data; .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, &behavior_hold_tap_data, \ - &behavior_hold_tap_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api); + DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) From 20a72263b2a10f0e75df18bc0cbda473e728826c Mon Sep 17 00:00:00 2001 From: DoctorNefario <5243039+DoctorNefario@users.noreply.github.com> Date: Thu, 7 Apr 2022 01:00:01 +1000 Subject: [PATCH 0359/1130] fix(behaviors): Prevent accidental transparent behavior return values. Needed because k_work_reschedule can return positive success codes. --- app/src/ext_power_generic.c | 3 ++- app/src/rgb_underglow.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 3f83bd9522b..0743d50d0f0 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -50,7 +50,8 @@ static struct k_work_delayable ext_power_save_work; int ext_power_save_state() { #if IS_ENABLED(CONFIG_SETTINGS) - return k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + int ret = k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return MIN(ret, 0); #else return 0; #endif diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index b1e2348ed91..517da1b81b6 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -272,7 +272,8 @@ static int zmk_rgb_underglow_init(const struct device *_arg) { int zmk_rgb_underglow_save_state() { #if IS_ENABLED(CONFIG_SETTINGS) - return k_work_reschedule(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + int ret = k_work_reschedule(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return MIN(ret, 0); #else return 0; #endif From 9c3d909b82efb537cba748e354f5e532826c9ab7 Mon Sep 17 00:00:00 2001 From: Caleb Goates Date: Tue, 5 Apr 2022 14:43:53 -0600 Subject: [PATCH 0360/1130] feat(docs): Reference conditional layers from the layers behavior page --- docs/docs/behaviors/layers.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 5aa988795a6..694b516a488 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -123,3 +123,8 @@ Example: ``` It is possible to use "toggle layer" to have keys that raise and lower the layers as well. + +## Conditional Layers + +The "conditional layers" feature enables a particular layer when all layers in a specified set are active. +For more information, see [conditional layers](../features/conditional-layers.md). From b44410ac44990f6dc64926b7a27ab0304ff7596f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 3 Apr 2022 01:57:05 -0400 Subject: [PATCH 0361/1130] feat(shields): Add Hummingbird shield * Reference shield for the Seeed(uino) XIAO interconnect. --- .../shields/hummingbird/Kconfig.defconfig | 9 ++ app/boards/shields/hummingbird/Kconfig.shield | 5 + .../shields/hummingbird/hummingbird.conf | 0 .../shields/hummingbird/hummingbird.keymap | 98 +++++++++++++++++++ .../shields/hummingbird/hummingbird.overlay | 57 +++++++++++ .../shields/hummingbird/hummingbird.zmk.yml | 8 ++ 6 files changed, 177 insertions(+) create mode 100644 app/boards/shields/hummingbird/Kconfig.defconfig create mode 100644 app/boards/shields/hummingbird/Kconfig.shield create mode 100644 app/boards/shields/hummingbird/hummingbird.conf create mode 100644 app/boards/shields/hummingbird/hummingbird.keymap create mode 100644 app/boards/shields/hummingbird/hummingbird.overlay create mode 100644 app/boards/shields/hummingbird/hummingbird.zmk.yml diff --git a/app/boards/shields/hummingbird/Kconfig.defconfig b/app/boards/shields/hummingbird/Kconfig.defconfig new file mode 100644 index 00000000000..343eb6ad37d --- /dev/null +++ b/app/boards/shields/hummingbird/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_HUMMINGBIRD + +config ZMK_KEYBOARD_NAME + default "Hummingbird" + +endif diff --git a/app/boards/shields/hummingbird/Kconfig.shield b/app/boards/shields/hummingbird/Kconfig.shield new file mode 100644 index 00000000000..b8115359382 --- /dev/null +++ b/app/boards/shields/hummingbird/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_HUMMINGBIRD + def_bool $(shields_list_contains,hummingbird) diff --git a/app/boards/shields/hummingbird/hummingbird.conf b/app/boards/shields/hummingbird/hummingbird.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/hummingbird/hummingbird.keymap b/app/boards/shields/hummingbird/hummingbird.keymap new file mode 100644 index 00000000000..990d79094d4 --- /dev/null +++ b/app/boards/shields/hummingbird/hummingbird.keymap @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#define DEF_L 0 +#define NAV_L 1 +#define NUM_L 2 +#define SYM_L 3 + +// Using layer taps on thumbs, having quick tap as well helps w/ repeating space/backspace +< { quick_tap_ms = <200>; }; + +/ { + behaviors { + hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "homerow mods"; + #binding-cells = <2>; + tapping_term_ms = <225>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; + + combos { + compatible = "zmk,combos"; + combo_z { + timeout-ms = <50>; + key-positions = <20 21>; + bindings = <&kp Z>; + }; + combo_b { + timeout-ms = <50>; + key-positions = <21 22>; + bindings = <&kp B>; + }; + + combo_y { + timeout-ms = <50>; + key-positions = <23 24>; + bindings = <&kp Y>; + }; + + combo_slash { + timeout-ms = <50>; + key-positions = <24 25>; + bindings = <&kp SLASH>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp H &kp U &kp I &kp O &kp P + &hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp N &hm RSHFT J &hm RCTRL K &hm LALT L &hm RGUI QUOT + &kp X &kp C &kp V &kp M &kp COMMA &kp DOT + < NAV_L TAB &kp RET < NUM_L SPACE < SYM_L BKSP + >; + }; + + nav_layer { + label = "Nav"; + bindings = < + &trans &trans &trans &trans &trans &trans &kp HOME &kp UARW &kp PG_UP &trans + &trans &trans &trans &trans &trans &trans &kp LARW &kp DARW &kp RARW &trans + &trans &trans &trans &kp END &trans &kp PG_DN + &trans &trans &kp ESC &kp DEL + >; + }; + + num_layer { + label = "Num"; + bindings = < + &kp LBKT &kp N7 &kp N8 &kp N9 &kp RBKT &trans &trans &trans &trans &trans + &kp SEMI &kp N4 &kp N5 &kp N6 &kp EQUAL &trans &trans &trans &trans &trans + &kp N1 &kp N2 &kp N3 &trans &trans &trans + &kp N0 &kp MINUS &trans &trans + >; + }; + + sym_layer { + label = "Sym"; + bindings = < + &kp LBRC &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp RBRC &trans &trans &trans &trans &trans + &kp COLON &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp PLUS &trans &trans &trans &trans &trans + &kp LS(N1) &kp LS(N2) &kp LS(N3) &trans &trans &trans + &kp LS(N0) &kp UNDER &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay new file mode 100644 index 00000000000..327200a8f57 --- /dev/null +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + /delete-property/ zephyr,console; + /delete-property/ zephyr,shell-uart; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <6>; + map = < + RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) + RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) + RC(4,0) RC(5,0) RC(4,1) RC(5,2) RC(4,3) RC(5,3) + RC(5,1) RC(4,2) RC(5,4) RC(4,4) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "row2col"; + + col-gpios + = <&xiao_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&xiao_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&xiao_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&xiao_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&xiao_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + row-gpios + = <&xiao_d 0 GPIO_ACTIVE_HIGH> + , <&xiao_d 1 GPIO_ACTIVE_HIGH> + , <&xiao_d 2 GPIO_ACTIVE_HIGH> + , <&xiao_d 3 GPIO_ACTIVE_HIGH> + , <&xiao_d 4 GPIO_ACTIVE_HIGH> + , <&xiao_d 5 GPIO_ACTIVE_HIGH> + ; + }; + +}; + +&xiao_spi { status = "disabled"; }; +&xiao_i2c { status = "disabled"; }; +&xiao_serial { status = "disabled"; }; diff --git a/app/boards/shields/hummingbird/hummingbird.zmk.yml b/app/boards/shields/hummingbird/hummingbird.zmk.yml new file mode 100644 index 00000000000..ee3a8bc804a --- /dev/null +++ b/app/boards/shields/hummingbird/hummingbird.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: hummingbird +name: Hummingbird +type: shield +url: https://github.com/PJE66/hummingbird +requires: [seeed_xiao] +features: + - keys From 6753d31ee9104ff49f6d21e8a0b8acb0b06df049 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Thu, 7 Apr 2022 16:26:22 +0800 Subject: [PATCH 0362/1130] docs: Revise "Troubleshooting" for Zephyr 3.0 (#1214) Co-authored-by: Cem Aksoylar Co-authored-by: Dom H --- .../troubleshooting/keymaps/errorscreen.png | Bin 186351 -> 0 bytes .../troubleshooting/keymaps/healthyEDIT.png | Bin 188078 -> 0 bytes .../troubleshooting/keymaps/unhealthyEDIT.png | Bin 187729 -> 0 bytes docs/docs/behaviors/key-press.md | 5 --- docs/docs/troubleshooting.md | 39 +++++++++++------- 5 files changed, 23 insertions(+), 21 deletions(-) delete mode 100644 docs/docs/assets/troubleshooting/keymaps/errorscreen.png delete mode 100644 docs/docs/assets/troubleshooting/keymaps/healthyEDIT.png delete mode 100644 docs/docs/assets/troubleshooting/keymaps/unhealthyEDIT.png diff --git a/docs/docs/assets/troubleshooting/keymaps/errorscreen.png b/docs/docs/assets/troubleshooting/keymaps/errorscreen.png deleted file mode 100644 index 73b5b58487eb96ac22651edbf0fb9f90ca198eb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186351 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�oN3TeHS02;_erTgMa_v{ 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 z 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�Ji0$nC~tz*fHIHQloRKRkvR*xT068 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

    $U= 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 diff --git a/docs/docs/assets/troubleshooting/keymaps/unhealthyEDIT.png b/docs/docs/assets/troubleshooting/keymaps/unhealthyEDIT.png deleted file mode 100644 index 3fd8dc70fb1f79085f8ce70ac6627f151aa6b92c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187729 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 QAGq+#m7jBUZ~pqf0FSe~%K!iX diff --git a/docs/docs/behaviors/key-press.md b/docs/docs/behaviors/key-press.md index f048b686c61..12d4094feec 100644 --- a/docs/docs/behaviors/key-press.md +++ b/docs/docs/behaviors/key-press.md @@ -33,11 +33,6 @@ provided by ZMK near the top: Doing so makes a set of defines such as `A`, `N1`, etc. available for use with these behaviors -### Improperly defined keymap - `dtlib.DTError: .dts.pre.tmp:` - -When compiling firmware from a keymap, it may be common to encounter an error in the form of a`dtlib.DTError: .dts.pre.tmp:`. -For instructions to resolve such an error, click [here](../troubleshooting.md###Improperly-defined-keymap) - ## Key Press The "key press" behavior sends standard keycodes on press/release. diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 0f2ea4c9818..b163e7ba410 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -26,28 +26,35 @@ Variations of the warnings shown below occur when flashing the `.uf2` An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. For more information, click [here](../docs/development/setup.md#environment-variables). -### dtlib.DTError +### West Build Errors -An error along the lines of `dtlib.DTError: .dts.pre.tmp:` during firmware compilation indicates an issue within the `.keymap` file. -This can be verified by checking the file in question, found in `mkdir/app/build`. - -| ![Example Error Screen](../docs/assets/troubleshooting/keymaps/errorscreen.png) | -| :----------------------------------------------------------------------------------------------------------------: | -| An example of the dtlib.DTError when compiling an iris with the nice!nano while the keymap is not properly defined | - -After opening the `.dts.pre.tmp:` and scrolling down to the referenced line, one can locate errors within their shield's keymap by checking if the referenced keycodes were properly converted into the correct [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12). +West build errors usually indicate syntax problems in the `.keymap` file during the compilation process. The following are some examples and root causes. :::note -If you are reviewing these errors in the GitHub Actions tab, the contents of `.dts.pre.tmp` is output (with line numbers) in the next step of the build process. +If you are reviewing these errors in the GitHub Actions tab, they can be found in the `West Build` step of the build process. ::: -| ![Unhealthy Keymap Temp](../docs/assets/troubleshooting/keymaps/unhealthyEDIT.png) | -| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| An incorrectly defined keymap unable to compile. As shown in red, `&kp SPAC` is not a valid reference to the [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12) used for "Keyboard Spacebar" | +#### devicetree error + +A `devicetree error` followed by a reference to the line number on `.keymap` refers to an issue at the exact line position in that file. For example, below error message indicates a missing `;` at line 109 of the `cradio.keymap` file: + +``` +devicetree error: /__w/zmk-config/zmk-config/config/cradio.keymap:109 (column 4): parse error: expected ';' or ',' +``` + +#### devicetree_unfixed.h error -| ![Healthy Keymap Temp](../docs/assets/troubleshooting/keymaps/healthyEDIT.png) | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| A properly defined keymap with successful compilation. As shown in red, the corrected keycode (`&kp SPACE`) references the proper Usage ID defined in the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12) | +A `devicetree_unfixed.h` error that follows with an "undeclared here" string indicates a problem with key bindings, like behavior nodes (e.g. `&kp` or `&mt`) with incorrect number of parameters: + +``` +/__w/zmk-config/zmk-config/build/zephyr/include/generated/devicetree_unfixed.h:3756:145: error: 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label' undeclared here (not in a function); did you mean 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_16_PH'? +``` + +In this example, the error string `DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label` indicates a problem with the key binding in position `12` in the `symbol_layer` of the keymap. + +:::note +Key positions are numbered starting from `0` at the top left key on the keymap, incrementing horizontally, row by row. +::: ### Split Keyboard Halves Unable to Pair From 32c8737a2225ce03455d7df0145a96a451672c7b Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Thu, 7 Apr 2022 22:31:05 -0700 Subject: [PATCH 0363/1130] fix(docs): Fix cmake version requirements --- docs/docs/development/setup.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 26d667b6d4c..bf1bd1221da 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -70,9 +70,7 @@ sudo apt install -y \ ``` :::note -Recent LTS releases of Debian and Ubuntu may include outdated CMake versions. If the output of `cmake --version` is older than 3.15, upgrade your distribution (e.g., from Ubuntu 18.04 LTS to Ubuntu 20.04 LTS), or else install CMake version 3.15 or newer manually (e.g, from Debian backports or by building from source). - -There is also a [zephyr bug](https://github.com/zephyrproject-rtos/zephyr/issues/22060) with cmake 3.19.x. You'll need a version _below_ 3.19. +Recent LTS releases of Debian and Ubuntu may include outdated CMake versions. If the output of `cmake --version` is older than 3.20, upgrade your distribution (e.g., from Ubuntu 20.04 LTS to Ubuntu 22.04 LTS), or else install CMake version 3.20 or newer manually (e.g, from Debian backports or from PyPI with `pip install --user cmake`). ::: From 22c487f2767b6eaed14366379f6c3a07687ab6de Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 8 Apr 2022 01:59:19 +0000 Subject: [PATCH 0364/1130] feat(boards): Add BDN9 rev2 RGB support --- app/boards/arm/bdn9/Kconfig.defconfig | 6 ++++- app/boards/arm/bdn9/bdn9_rev2.conf | 5 ++++ app/boards/arm/bdn9/bdn9_rev2.dts | 35 +++++++++++++++++---------- 3 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 app/boards/arm/bdn9/bdn9_rev2.conf diff --git a/app/boards/arm/bdn9/Kconfig.defconfig b/app/boards/arm/bdn9/Kconfig.defconfig index 9af7ca4c3f0..176951857e4 100644 --- a/app/boards/arm/bdn9/Kconfig.defconfig +++ b/app/boards/arm/bdn9/Kconfig.defconfig @@ -1,6 +1,6 @@ # keeb.io BDN9 board configuration -# Copyright (c) 2020 Pete Johanson +# Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT if BOARD_BDN9 @@ -14,4 +14,8 @@ config ZMK_KEYBOARD_NAME config ZMK_USB default y +config ZMK_RGB_UNDERGLOW + select SPI + select WS2812_STRIP + endif # BOARD_BDN9 diff --git a/app/boards/arm/bdn9/bdn9_rev2.conf b/app/boards/arm/bdn9/bdn9_rev2.conf new file mode 100644 index 00000000000..3691085392d --- /dev/null +++ b/app/boards/arm/bdn9/bdn9_rev2.conf @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the line below to enable RGB. +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index a28a3ae58a5..8a66be070cc 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -18,9 +18,7 @@ zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan; - /* TODO: Enable once the GPIO bitbanging driver supports STM32 zmk,underglow = &led_strip; - */ }; kscan: kscan { @@ -40,17 +38,6 @@ ; }; - /* - led_strip: ws2812 { - compatible = "worldsemi,ws2812-gpio"; - label = "WS2812"; - - in-gpios = <&gpiob 15 0>; - - chain-length = <9>; - }; - */ - left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; @@ -83,6 +70,28 @@ }; }; +&spi2 { + status = "okay"; + pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>; + pinctrl-names = "default"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <9>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + &clk_hsi { status = "okay"; }; From 8c99313a6781e7ff37149c711766e35c34c12fb2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 16 Mar 2022 17:50:57 +0000 Subject: [PATCH 0365/1130] feat(blog): Add SOTF #5. --- docs/blog/2022-04-10-zmk-sotf-5.md | 265 +++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 docs/blog/2022-04-10-zmk-sotf-5.md diff --git a/docs/blog/2022-04-10-zmk-sotf-5.md b/docs/blog/2022-04-10-zmk-sotf-5.md new file mode 100644 index 00000000000..b0dd6310354 --- /dev/null +++ b/docs/blog/2022-04-10-zmk-sotf-5.md @@ -0,0 +1,265 @@ +--- +title: "ZMK State Of The Firmware #5" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [SOTF, keyboards, firmware, oss, ble] +--- + +Welcome to the fifth ZMK "State Of The Firmware" (SOTF)! + +This update will cover all the major activity since [SOTF #4](/blog/2021/01/27/zmk-sotf-4). That was over a year ago, so lots to cover! + +## Recent Activity + +Here's a summary of the various major changes since last time, broken down by theme: + +### Keymaps/Behaviors + +Since last time, there have been several new powerful keymap features and behaviors added, including several asked for features, such as tap-dance and macros. + +#### Caps Word + +[petejohanson] added the [caps word](/docs/behaviors/caps-word) behavior, i.e. `&caps_word`, in [#823](https://github.com/zmkfirmware/zmk/pull/823) that allows toggling a mode where all all alpha characters are sent +to the host capitalized until a non-alpha, non-"continue list" keycode is sent. This can be useful for typing things like `CONFIG_ENABLE_CAPS_WORD` without having to hold down shift. This is similar in spirit to using the caps lock key, but with the added benefit of turning itself off automatically. + +#### Key Repeat + +[petejohanson] added the new [key repeat](/docs/behaviors/key-repeat) behavior in [#1034](https://github.com/zmkfirmware/zmk/pull/1034) to allow repeating the last sent key-press again, including any modifiers that were applied to that key press. It can be added to your keymap using the simple `&key_repeat` reference. + +#### Macros + +[petejohanson], taking heavy inspiration on the initial work from [okke-formsma], added [macro support](/docs/behaviors/macros) in [#1168](https://github.com/zmkfirmware/zmk/pull/1166). Several [common patterns](/docs/behaviors/macros#common-patterns) are documented, but one example, changing the underglow color as you activate/deactivate a layer, looks like: + +``` +ZMK_MACRO(layer_color_macro, + wait-ms = <0>; + tap-ms = <0>; + bindings + = <¯o_press &mo 1> + , <¯o_tap &rgb_ug RGB_COLOR_HSB(128,100,100)> + , <¯o_pause_for_release> + , <¯o_release &mo 1> + , <¯o_tap &rgb_ug RGB_COLOR_HSB(300,100,50)>; +) +``` + +#### Tap Dance + +[kurtis-lew] worked diligently to add the [tap-dance behavior](/docs/behaviors/tap-dance) in [#1139](https://github.com/zmkfirmware/zmk/pull/1139), allowing different behaviors to be invoked based on the number of times +a user taps a single key in their keymap, e.g. + +``` +/ { + behaviors { + td0: tap_dance_0 { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_0"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp N1>, <&kp N2>, <&kp N3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &td0 + >; + }; + }; +}; +``` + +#### Conditional Layers + +[bcat] added [conditional layers](/docs/features/conditional-layers) in [#830](https://github.com/zmkfirmware/zmk/pull/830) as a generalized version of the common "adjust layer" pattern on smaller keyboards. + +Example: + +``` +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; + }; + }; +}; +``` + +#### Combos + +[mcrosson] added the [layer specific combos](https://zmk.dev/docs/features/combos#configuration) in [#661](https://github.com/zmkfirmware/zmk/pull/661), so users can make certain combos only triggerable when the layers set for the combo are active. + +This is used by the [ZMK implementation](https://github.com/artseyio/zmk-artsey) of [ARTSEY](https://artsey.io/) extensively. + +#### Sticky Keys + +[okke-formsma] updated [sticky keys](/docs/behaviors/sticky-key) in [#1122](https://github.com/zmkfirmware/zmk/pull/1122) to add the `ignore-modifiers;` property; when set, sticky keys won't release when other modifiers are pressed. This allows you to combine sticky modifiers, which is popularly used with ["callum-style mods"](https://github.com/callum-oakley/qmk_firmware/tree/master/users/callum#oneshot-modifiers). + +#### Hold-Tap Improvements + +[jmding8](https://github.com/jmding8) added an additional [positional hold-tap configuration](https://zmk.dev/docs/behaviors/hold-tap#positional-hold-tap-and-hold-trigger-key-positions) in [#835](https://github.com/zmkfirmware/zmk/pull/835) to help certain sequences produce the expected results. + +[jmding8](https://github.com/jmding8) also added an additional [hold-tap flavor: `tap-unless-interrupted`](https://zmk.dev/docs/behaviors/hold-tap#flavors) in [#1018](https://github.com/zmkfirmware/zmk/pull/1018) which works very well with the new positional hold-tap config. + +[okke-formsma] implemented [`retro-tap` hold-tap property](https://zmk.dev/docs/behaviors/hold-tap#retro-tap) in [#667](https://github.com/zmkfirmware/zmk/pull/667) + +[okke-formsma] _also_ added [`quick-tap-ms` hold-tap property](https://zmk.dev/docs/behaviors/hold-tap#quick-tap-ms) in [#655](https://github.com/zmkfirmware/zmk/pull/655) + +### Apple Device Compatibility Improvements + +#### Pairing + +[petejohanson] did some sleuthing and fixed a long standing problem with inconsistent pairing with macOS in [#946]](https://github.com/zmkfirmware/zmk/pull/946). With the changes, macOS more reliably pairs with ZMK devices. + +#### Consumer (Media) Codes + +Another persistent bug that Apple users experienced was related to crashes and problems with keyboard configurations, that was traced to an issue with ZMK's HID usage that was fixed by [petejohanson] in [#726](https://github.com/zmkfirmware/zmk/pull/726). + +### Debounce Enhancements + +[joelspadin] applied some major enhancements to our [debouncing](/docs/features/debouncing) approach to allow fine grained control of our debouncing in [#888](https://github.com/zmkfirmware/zmk/pull/888), including allowing [eager debouncing](/docs/features/debouncing#eager-debouncing) which can reduce key press latency. + +### Split Improvements + +#### Behavior Locality + +The long awaited locality enhancement was finally merged by [petejohanson] in [#547](https://github.com/zmkfirmware/zmk/pull/547), allowing more fine grained control of where certain behaviors are invoked. Some key improvements thanks to the changes: + +- [RGB Underglow](/docs/features/underglow) behaviors now run globally, so enabling/disabling RGB, changing the color, animation, etc. applies to both sides of a split properly. +- [Reset](/docs/behaviors/reset#reset)/[Bootloader](/docs/behaviors/reset#bootloader) behaviors now run wherever the key was pressed. For example, adding a `&bootloader` reference to the peripheral side of a split will now put that side of the split into the bootloader when pressed. + +#### Split Connections + +[petejohanson] also added fixes to improve split re-connection for certain scenarios in [#984](https://github.com/zmkfirmware/zmk/pull/984), helping ensure splits properly connect when one side or the other is reset. + +### Hardware Support + +#### Backlight + +[bortoz](https://github.com/bortoz) added [single color backlight support](/docs/features/backlight) in [#904](https://github.com/zmkfirmware/zmk/pull/904) for those keyboards that have it as an alternative to RGB underglow. + +#### E-Paper Display (EPD) Driver + +[petejohanson] worked with [LOWPROKB](https://github.com/LOWPROKB) to add support for the E-Paper Displays (EPD) in [#895](https://github.com/zmkfirmware/zmk/pull/895) used in keyboards like the Corne-ish Zen. + +#### nRF VDDH Battery Sensing + +[joelspadin] added a new sensor driver to support battery charge calculation by sensing voltage on the VDDH pin on nRF52 chips in [#750](https://github.com/zmkfirmware/zmk/pull/750), which is particularly useful for designs +using "high voltage mode" with that SoC. + +### Miscellaneous + +#### Documentation + +[dxmh] and [caksoylar](https://github.com/caksoylar) have joined the ZMK organization to help with documentation, and have been doing an amazing job adding new docs, and leading reviewing docs related PRs to free other contributors up to focus on other areas. It's been an incredible addition to ZMK! + +#### NKRO Support + +[petejohanson]'s work on the HID foundation also included adding support for full NKRO HID in [#726](https://github.com/zmkfirmware/zmk/pull/726) that can be enabled by adding the following to your `.conf` file for your config: + +``` +CONFIG_ZMK_HID_REPORT_TYPE_NKRO=y +``` + +#### Power Profiler + +It's been live for a while, but [nicell] added an amazing [power profiler](/power-profiler) in [#312](https://github.com/zmkfirmware/zmk/pull/312) to allow users to estimate their battery life for various hardware configurations. + +#### Min/Max Underglow Brightness + +[malinges](https://github.com/malinges) added support for configuring min/max underglow brightness in [#944](https://github.com/zmkfirmware/zmk/pull/944) by setting the values in your `.conf` file as percentages of full: + +``` +CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN=20 +CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX=80 +``` + +This can be useful to be sure that lowering brightness doesn't set the brightness to zero, and raising the brightness doesn't consume too much power. + +#### Zephyr 3.0 + +[petejohanson] helped prepare and test the upgrade of ZMK to Zephyr 3.0 in [#1143](https://github.com/zmkfirmware/zmk/pull/1143). The updated Zephyr release brings with it some key BLE stability fixes, as well as various other core improvements that improve ZMK. This was a huge undertaking! + +## New Shields + +- Contra in [#633](https://github.com/zmkfirmware/zmk/pull/633) - [iangus](https://github.com/iangus) +- Naked60 in [#681](https://github.com/zmkfirmware/zmk/pull/681) - [xiushak](https://github.com/xiushak) +- Murphpad in [#806](https://github.com/zmkfirmware/zmk/pull/806) - [kylemccreery](https://github.com/kylemccreery) +- A. Dux in [#951](https://github.com/zmkfirmware/zmk/pull/951) - [dxmh] +- Bat43 in [#956](https://github.com/zmkfirmware/zmk/pull/956) - [dnaq](https://github.com/dnaq) +- Zodiark in [#959](https://github.com/zmkfirmware/zmk/pull/959) - [Aleblazer](https://github.com/Aleblazer) +- Osprette in [#974](https://github.com/zmkfirmware/zmk/pull/974) - [smores56](https://github.com/smores56) +- Knob Goblin in [#990](https://github.com/zmkfirmware/zmk/pull/990) - [lucasuyezu](https://github.com/lucasuyezu) +- Redox in [#1002](https://github.com/zmkfirmware/zmk/pull/1002) - [toddmok](https://github.com/toddmok) +- Elephant42 in [#1009](https://github.com/zmkfirmware/zmk/pull/1009) - [filoxo](https://github.com/filoxo) +- Chalice in [#1022](https://github.com/zmkfirmware/zmk/pull/1022) - [joshajohnson](https://github.com/joshajohnson) +- Boardsource 5x12 in [#1027](https://github.com/zmkfirmware/zmk/pull/1027) - [fsargent](https://github.com/fsargent) +- Jiran in [#1048](https://github.com/zmkfirmware/zmk/pull/1048) - [krikun98](https://github.com/krikun98) +- keeb.io Fourier in [#1056](https://github.com/zmkfirmware/zmk/pull/1056) - [TheButlah](https://github.com/TheButlah) +- Lotus58 in [#1090](https://github.com/zmkfirmware/zmk/pull/1090) - [nettema](https://github.com/nettema) +- Clog in [#1092](https://github.com/zmkfirmware/zmk/pull/1092) - [smores56](https://github.com/smores56) +- Kyria rev2 in [#1112](https://github.com/zmkfirmware/zmk/pull/1112) - [petejohanson] +- Leeloo in [#1165](https://github.com/zmkfirmware/zmk/pull/1165) - [ClicketySplit](https://github.com/ClicketySplit) +- 2% Milk in [#1135](https://github.com/zmkfirmware/zmk/pull/1135) - [kurtis-lew] + +## New Boards + +- Ferris rev02 in [#642](https://github.com/zmkfirmware/zmk/pull/642) - [petejohanson] +- nice!60 in [#810](https://github.com/zmkfirmware/zmk/pull/810) - [nicell] +- nice!nano v2 in [#867](https://github.com/zmkfirmware/zmk/pull/867) - [nicell] +- Mikoto 520 in [#985](https://github.com/zmkfirmware/zmk/pull/985) - [mrninhvn](https://github.com/mrninhvn) +- S40NC in [#1021](https://github.com/zmkfirmware/zmk/pull/1021) - [kylemccreery](https://github.com/kylemccreery) +- BT60 in [#1029](https://github.com/zmkfirmware/zmk/pull/1029) - [ReFil](https://github.com/ReFil) +- Seeeduino XIAO BLE (as part of the Zephyr 3.0 work) in [#1143](https://github.com/zmkfirmware/zmk/pull/1143) - [petejohanson] + +## Board/Shield Metadata + +[nicell] and [petejohanson] worked together in [#883](https://github.com/zmkfirmware/zmk/pull/883) to settle on a [metadata format](/docs/development/hardware-metadata-files) that is used to document every board and shield. This now drives automatic generation of our [supported hardware](/docs/hardware) page and our +more nuanced GH Actions automation for testing changes to ZMK. + +## Coming Soon! + +Some items listed in the last coming soon section are still under active development. + +- RP2040 support +- Peripheral rotary encoder support +- Caps/Scroll/Num Lock LED support +- Mouse Keys +- Wired split support +- More modular approach to external boards/shields, custom code, user keymaps, etc. +- More shields and boards + +## Statistics + +Some statistics of interest for ZMK: + +- GitHub (lifetime stats) + - 105 Contributors + - 791 Closed PRs + - 849 Stars + - 832 Forks +- Discord Chat + - 3430 total registered +- Website (last 30 days) + - 35.9K page views + - 3.29K new users + +## Thanks! + +As we approach the two year birthday for ZMK, I am reminded of how far we have come in such a short time, in large part thanks to the _amazing_ community that has grown around it. I am so grateful to have so many contributors, testers, and user believing in the project and helping make it a joy to work on. + +[okke-formsma]: https://github.com/okke-formsma +[mcrosson]: https://github.com/mcrosson +[nicell]: https://github.com/Nicell +[petejohanson]: https://github.com/petejohanson +[kurtis-lew]: https://github.com/kurtis-lew +[joelspadin]: https://github.com/joelspadin +[bcat]: https://github.com/bcat +[dxmh]: https://github.com/dxmh From 1dccb7fe50a349cda94603042b5e81ae7c606c2a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 7 Apr 2022 16:24:25 +0000 Subject: [PATCH 0366/1130] fix(hid): Use a full valid range for consumer page * Switch to a logical max for the consumer page that avoid signed issue, and still allows full range of documented consumer page values. --- app/include/zmk/hid.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 61c5fa80573..f507b56a2af 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -78,9 +78,9 @@ static const uint8_t zmk_hid_report_desc[] = { HID_REPORT_SIZE(0x08), #elif IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL) HID_LOGICAL_MIN8(0x00), - HID_LOGICAL_MAX16(0xFF, 0xFF), + HID_LOGICAL_MAX16(0xFF, 0x0F), HID_USAGE_MIN8(0x00), - HID_USAGE_MAX16(0xFF, 0xFF), + HID_USAGE_MAX16(0xFF, 0x0F), HID_REPORT_SIZE(0x10), #else #error "A proper consumer HID report usage range must be selected" From 789fd03f8b6b15317a1b86a1d9b15024bc308295 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 12 Apr 2022 10:43:18 -0400 Subject: [PATCH 0367/1130] fix: Properly use zmkfirmware Zephyr version. --- app/west.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/west.yml b/app/west.yml index 964d54c87aa..14c494c0084 100644 --- a/app/west.yml +++ b/app/west.yml @@ -4,13 +4,9 @@ manifest: url-base: https://github.com/zephyrproject-rtos - name: zmkfirmware url-base: https://github.com/zmkfirmware - - name: petejohanson - url-base: https://github.com/petejohanson - - name: microsoft - url-base: https://github.com/microsoft projects: - name: zephyr - remote: petejohanson + remote: zmkfirmware revision: v3.0.0+zmk-fixes clone-depth: 1 import: From 40cd8da743b10aee61e0396138354d062cd0e23e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 13 Apr 2022 03:20:35 +0000 Subject: [PATCH 0368/1130] fix(usb): Split HID from core USB, logging fix. * Split core USB init from USB HID init. * Tweak logging to avoid "log loop" causing spurious buffer messages on startup. --- app/CMakeLists.txt | 1 + app/Kconfig | 7 +++++ app/include/zmk/usb.h | 4 --- app/include/zmk/usb_hid.h | 9 ++++++ app/src/endpoints.c | 2 +- app/src/usb.c | 48 ----------------------------- app/src/usb_hid.c | 64 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 82 insertions(+), 53 deletions(-) create mode 100644 app/include/zmk/usb_hid.h create mode 100644 app/src/usb_hid.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index b760389fff3..1492be16c83 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -78,6 +78,7 @@ if (CONFIG_ZMK_SPLIT_BLE AND CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/split/bluetooth/central.c) endif() target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/usb.c) +target_sources_ifdef(CONFIG_ZMK_USB app PRIVATE src/usb_hid.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/hog.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/backlight.c) diff --git a/app/Kconfig b/app/Kconfig index 5551ed31dc5..8b13d52470a 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -477,6 +477,10 @@ if ZMK_USB_LOGGING config ZMK_LOG_LEVEL default 4 +# We do this to avoid log loop where logging to USB generates more log messages. +config USB_CDC_ACM_LOG_LEVEL + default 1 + config USB_CDC_ACM_RINGBUF_SIZE default 1024 @@ -486,6 +490,9 @@ config LOG_BUFFER_SIZE config LOG_STRDUP_BUF_COUNT default 16 +config LOG_PROCESS_THREAD_STARTUP_DELAY_MS + default 1000 + #ZMK_USB_LOGGING endif diff --git a/app/include/zmk/usb.h b/app/include/zmk/usb.h index 62a7e3cb36e..786d9c731a6 100644 --- a/app/include/zmk/usb.h +++ b/app/include/zmk/usb.h @@ -23,7 +23,3 @@ enum zmk_usb_conn_state zmk_usb_get_conn_state(); static inline bool zmk_usb_is_powered() { return zmk_usb_get_conn_state() != ZMK_USB_CONN_NONE; } static inline bool zmk_usb_is_hid_ready() { return zmk_usb_get_conn_state() == ZMK_USB_CONN_HID; } - -#ifdef CONFIG_ZMK_USB -int zmk_usb_hid_send_report(const uint8_t *report, size_t len); -#endif /* CONFIG_ZMK_USB */ \ No newline at end of file diff --git a/app/include/zmk/usb_hid.h b/app/include/zmk/usb_hid.h new file mode 100644 index 00000000000..1748835eef2 --- /dev/null +++ b/app/include/zmk/usb_hid.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_usb_hid_send_report(const uint8_t *report, size_t len); \ No newline at end of file diff --git a/app/src/endpoints.c b/app/src/endpoints.c index ebbb9fbca4d..33760010608 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/app/src/usb.c b/app/src/usb.c index 2f0fa439c42..8d2b62f1217 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -26,41 +26,6 @@ static void raise_usb_status_changed_event(struct k_work *_work) { K_WORK_DEFINE(usb_status_notifier_work, raise_usb_status_changed_event); -#ifdef CONFIG_ZMK_USB - -static const struct device *hid_dev; - -static K_SEM_DEFINE(hid_sem, 1, 1); - -static void in_ready_cb(const struct device *dev) { k_sem_give(&hid_sem); } - -static const struct hid_ops ops = { - .int_in_ready = in_ready_cb, -}; - -int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { - switch (usb_status) { - case USB_DC_SUSPEND: - return usb_wakeup_request(); - case USB_DC_ERROR: - case USB_DC_RESET: - case USB_DC_DISCONNECTED: - case USB_DC_UNKNOWN: - return -ENODEV; - default: - k_sem_take(&hid_sem, K_MSEC(30)); - int err = hid_int_ep_write(hid_dev, report, len, NULL); - - if (err) { - k_sem_give(&hid_sem); - } - - return err; - } -} - -#endif /* CONFIG_ZMK_USB */ - enum usb_dc_status_code zmk_usb_get_status() { return usb_status; } enum zmk_usb_conn_state zmk_usb_get_conn_state() { @@ -87,19 +52,6 @@ void usb_status_cb(enum usb_dc_status_code status, const uint8_t *params) { static int zmk_usb_init(const struct device *_arg) { int usb_enable_ret; -#ifdef CONFIG_ZMK_USB - hid_dev = device_get_binding("HID_0"); - if (hid_dev == NULL) { - LOG_ERR("Unable to locate HID device"); - return -EINVAL; - } - - usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), &ops); - - usb_hid_init(hid_dev); - -#endif /* CONFIG_ZMK_USB */ - usb_enable_ret = usb_enable(usb_status_cb); if (usb_enable_ret != 0) { diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c new file mode 100644 index 00000000000..4b90cf96123 --- /dev/null +++ b/app/src/usb_hid.c @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include +#include + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static const struct device *hid_dev; + +static K_SEM_DEFINE(hid_sem, 1, 1); + +static void in_ready_cb(const struct device *dev) { k_sem_give(&hid_sem); } + +static const struct hid_ops ops = { + .int_in_ready = in_ready_cb, +}; + +int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { + switch (zmk_usb_get_status()) { + case USB_DC_SUSPEND: + return usb_wakeup_request(); + case USB_DC_ERROR: + case USB_DC_RESET: + case USB_DC_DISCONNECTED: + case USB_DC_UNKNOWN: + return -ENODEV; + default: + k_sem_take(&hid_sem, K_MSEC(30)); + int err = hid_int_ep_write(hid_dev, report, len, NULL); + + if (err) { + k_sem_give(&hid_sem); + } + + return err; + } +} + +static int zmk_usb_hid_init(const struct device *_arg) { + hid_dev = device_get_binding("HID_0"); + if (hid_dev == NULL) { + LOG_ERR("Unable to locate HID device"); + return -EINVAL; + } + + usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), &ops); + usb_hid_init(hid_dev); + + return 0; +} + +SYS_INIT(zmk_usb_hid_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); From 0e54603ec66dc63b5a8d9c8f565df31cc745fe3c Mon Sep 17 00:00:00 2001 From: DoctorNefario <5243039+DoctorNefario@users.noreply.github.com> Date: Thu, 14 Apr 2022 23:55:04 +1000 Subject: [PATCH 0369/1130] fix(docs): Clarify backlight & underglow use cases This should help reduce confusion for newcomers. --- docs/docs/features/backlight.md | 6 +++++- docs/docs/features/underglow.md | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index ef1c0521ad7..6632a0f03c3 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -6,7 +6,11 @@ sidebar_label: Backlight import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -Backlight is a feature used to control array of LEDs, usually placed through or under switches. Unlike [RGB Underglow](underglow.md), backlight currently allows only one color per LED, also LEDs are not addressable, so you can't control individual LEDs. +Backlight is a feature used to control an array of LEDs, usually placed through or under switches. + +:::info +Unlike [RGB Underglow](underglow.md), backlight can only control single color LEDs. Additionally, because backlight LEDs all receive the same power, it's not possible to dim individual LEDs. +::: ## Enabling Backlight diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index ac8658265c2..58b3ef453fd 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -5,6 +5,10 @@ sidebar_label: RGB Underglow RGB underglow is a feature used to control "strips" of RGB LEDs. Most of the time this is called underglow and creates a glow underneath the board using a ring of LEDs around the edge, hence the name. However, this can be extended to be used to control anything from a single LED to a long string of LEDs anywhere on the keyboard. +:::info +RGB underglow can also be used for under-key lighting. If you have RGB LEDs on your keyboard, this is what you want. For PWM/single color LEDs, see [Backlight](backlight.md). +::: + ZMK supports all the RGB LEDs supported by Zephyr. Here's the current list supported: - WS2812-ish (WS2812B, WS2813, SK6812, or compatible) From ebc6275a72b8d9140a80ccd50332298da1299eed Mon Sep 17 00:00:00 2001 From: Herald Date: Thu, 14 Apr 2022 16:13:33 +0100 Subject: [PATCH 0370/1130] fix(docs): Document `ignore-modifiers` and `quick-release` for sticky keys (#1228) --- docs/docs/behaviors/sticky-key.md | 39 ++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index e708576307d..12541ed868c 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -7,8 +7,6 @@ sidebar_label: Sticky Key A sticky key stays pressed until another key is pressed. It is often used for 'sticky shift'. By using a sticky shift, you don't have to hold the shift key to write a capital. -By default, sticky keys stay pressed for a second if you don't press any other key. You can configure this with the `release-after-ms` setting (see below). - ### Behavior Binding - Reference: `&sk` @@ -28,14 +26,49 @@ You can use any keycode that works for `&kp` as parameter to `&sk`: ### Configuration -You can configure a different `release-after-ms` in your keymap: +#### `release-after-ms` + +By default, sticky keys stay pressed for a second if you don't press any other key. You can configure this with the `release-after-ms` setting. + +#### `quick-release` + +Some typists may find that using a sticky shift key interspersed with rapid typing results in two or more capitalized letters instead of one. This happens as the sticky key is active until the next key is released, under which other keys may be pressed and will receive the modifier. You can enable the `quick-release` setting to instead deactivate the sticky key on the next key being pressed, as opposed to released. + +#### `ignore-modifiers` + +This setting is enabled by default. It ensures that if a sticky key modifier is pressed before a previously pressed sticky key is released, the modifiers will get combined so you can add more sticky keys or press a regular key to apply the modifiers. This is to accommodate _callum-style mods_ where you are prone to rolling sticky keys. If you want sticky key modifiers to only chain after release, you can disable this setting. + +#### Example ``` &sk { release-after-ms = <2000>; + quick-release; + /delete-property/ ignore-modifiers; +}; + +/ { + keymap { + ... + }; }; +``` +This configuration would apply to all sticky keys. This may not be appropriate if using `quick-release` as you'll lose the ability to chain sticky key modifiers. A better approach for this use case would be to create a new behavior: + +``` / { + behaviors { + skq: sticky_key_quick_release { + compatible = "zmk,behavior-sticky-key"; + label = "STICKY_KEY_QUICK_RELEASE"; + #binding-cells = <1>; + bindings = <&kp>; + release-after-ms = <1000>; + quick-release; + }; + }; + keymap { ... }; From c7a6836735d0a77d8327d4377ebacd0e25c5bb9e Mon Sep 17 00:00:00 2001 From: DoctorNefario <5243039+DoctorNefario@users.noreply.github.com> Date: Fri, 15 Apr 2022 02:29:09 +1000 Subject: [PATCH 0371/1130] fix(docs): Add `#include` to Underglow upgrade notes --- docs/blog/2022-04-02-zephyr-3-0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md index 44a4fa721eb..103573c663c 100644 --- a/docs/blog/2022-04-02-zephyr-3-0.md +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -74,7 +74,7 @@ The following changes have [already been completed](https://github.com/zmkfirmwa ### RGB Underglow -Zephyr's WS2812 `led_strip` driver added a new required property. When adding [underglow](/docs/features/underglow#adding-rgb-underglow-to-a-board) to a board, you now must also add a `color-mapping` property, like: +Zephyr's WS2812 `led_strip` driver added a new required property. When adding [underglow](/docs/features/underglow#adding-rgb-underglow-to-a-board) to a board, you now must also add the additional include `#include ` at the top of your devicetree file, and add a `color-mapping` property like: ``` led_strip: ws2812@0 { From d08463e483a57ab83ff8be5bdc2f324e4184c331 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Fri, 15 Apr 2022 11:10:59 -0500 Subject: [PATCH 0372/1130] fix(ble): Restore manual connection params --- app/src/ble.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/ble.c b/app/src/ble.c index d9121583d99..ed8231789eb 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -398,6 +398,11 @@ static void connected(struct bt_conn *conn, uint8_t err) { LOG_DBG("Connected %s", log_strdup(addr)); + err = bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 30, 400)); + if (err) { + LOG_WRN("Failed to update LE parameters (err %d)", err); + } + #if IS_SPLIT_PERIPHERAL bt_conn_le_phy_update(conn, BT_CONN_LE_PHY_PARAM_2M); #endif From 388e345c28907dcf3a7e04b844e582e2dbc0c261 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 17 Jul 2021 17:49:37 -0500 Subject: [PATCH 0373/1130] feat(battery)!: Add chosen node for battery battery.c now uses the zmk,battery chosen node to select a battery sensor. Using the node labeled "BATTERY" is maintained for backwards compatibility but is now deprecated. Custom boards should switch to using the chosen node. # Conflicts: # app/boards/arm/bluemicro840/bluemicro840_v1.dts # app/boards/arm/nice60/nice60.dts # app/boards/arm/nrfmicro/nrfmicro_13.dts # Conflicts: # app/boards/arm/bluemicro840/bluemicro840_v1.dts --- .../arm/bluemicro840/bluemicro840_v1.dts | 3 ++- app/boards/arm/bt60/bt60.dtsi | 3 ++- app/boards/arm/mikoto/mikoto_520.dts | 3 ++- app/boards/arm/nice60/nice60.dts | 3 ++- app/boards/arm/nice_nano/nice_nano.dts | 6 +++++- app/boards/arm/nice_nano/nice_nano_v2.dts | 6 +++++- app/boards/arm/nrfmicro/nrfmicro_13.dts | 3 ++- app/boards/arm/s40nc/s40nc.dts | 3 ++- app/boards/seeeduino_xiao_ble.overlay | 3 ++- app/src/battery.c | 19 ++++++++++++++++--- 10 files changed, 40 insertions(+), 12 deletions(-) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index 7f2db85bde8..29bf0f8d0c1 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -17,6 +17,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; }; leds { @@ -34,7 +35,7 @@ control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 7>; diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index e684bc1d44f..3858ba46715 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -17,6 +17,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -46,7 +47,7 @@ }; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 2>; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index 5ce1764063f..44321e792fa 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -17,6 +17,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; }; leds { @@ -34,7 +35,7 @@ init-delay-ms = <50>; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 2>; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index ee38c9a5553..bb058da879a 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -19,6 +19,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; zmk,underglow = &led_strip; @@ -81,7 +82,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 2>; diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index cce3dba65a9..e29df2057a6 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -8,13 +8,17 @@ #include "nice_nano.dtsi" / { + chosen { + zmk,battery = &vbatt; + }; + ext-power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 2>; diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts index 8f72aad684d..ed2b35f4ebf 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2.dts +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -8,6 +8,10 @@ #include "nice_nano.dtsi" / { + chosen { + zmk,battery = &vbatt; + }; + ext-power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; @@ -15,7 +19,7 @@ init-delay-ms = <50>; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-nrf-vddh"; label = "BATTERY"; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index d60417fdb78..a0f7417067a 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -17,6 +17,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; }; leds { @@ -33,7 +34,7 @@ control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 2>; diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index 67a3c293350..5b588b45ffe 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -17,6 +17,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; }; @@ -69,7 +70,7 @@ }; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 2>; diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index 7e0d4ff9c2c..0f5df9993ac 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -8,9 +8,10 @@ / { chosen { zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; }; - vbatt { + vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; label = "BATTERY"; io-channels = <&adc 7>; diff --git a/app/src/battery.c b/app/src/battery.c index c63008e6444..4292dafe5d8 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -18,12 +19,16 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -const struct device *battery; - static uint8_t last_state_of_charge = 0; uint8_t zmk_battery_state_of_charge() { return last_state_of_charge; } +#if DT_HAS_CHOSEN(zmk_battery) +static const struct device *const battery = DEVICE_DT_GET(DT_CHOSEN(zmk_battery)); +#else +static const struct device *battery; +#endif + static int zmk_battery_update(const struct device *battery) { struct sensor_value state_of_charge; @@ -75,10 +80,18 @@ static void zmk_battery_timer(struct k_timer *timer) { k_work_submit(&battery_wo K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL); static int zmk_battery_init(const struct device *_arg) { +#if !DT_HAS_CHOSEN(zmk_battery) battery = device_get_binding("BATTERY"); if (battery == NULL) { - LOG_DBG("No battery device labelled BATTERY found."); + return -ENODEV; + } + + LOG_WRN("Finding battery device labeled BATTERY is deprecated. Use zmk,battery chosen node."); +#endif + + if (!device_is_ready(battery)) { + LOG_ERR("Battery device \"%s\" is not ready", battery->name); return -ENODEV; } From f91472fbe5e2577ac672231f4490db289b68dbce Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 15 Apr 2022 22:09:35 -0500 Subject: [PATCH 0374/1130] fix(battery): Warn if using deprecated battery label --- app/src/battery.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/battery.c b/app/src/battery.c index 4292dafe5d8..51f96c123f9 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -26,6 +26,8 @@ uint8_t zmk_battery_state_of_charge() { return last_state_of_charge; } #if DT_HAS_CHOSEN(zmk_battery) static const struct device *const battery = DEVICE_DT_GET(DT_CHOSEN(zmk_battery)); #else +#warning \ + "Using a node labeled BATTERY for the battery sensor is deprecated. Set a zmk,battery chosen node instead. (Ignore this if you don't have a battery sensor.)" static const struct device *battery; #endif From b7b026f20c1c01758b1780a5928efc085e0c0ab9 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 15 Apr 2022 23:17:38 -0500 Subject: [PATCH 0375/1130] feat(docs): Add battery sensor documentation --- docs/docs/features/battery.md | 38 +++++++++++++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 39 insertions(+) create mode 100644 docs/docs/features/battery.md diff --git a/docs/docs/features/battery.md b/docs/docs/features/battery.md new file mode 100644 index 00000000000..0b4172c2d08 --- /dev/null +++ b/docs/docs/features/battery.md @@ -0,0 +1,38 @@ +--- +title: Battery Level +sidebar_label: Battery Level +--- + +If your keyboard has a battery sensor, ZMK will report its battery level to the connected bluetooth host and show it on the keyboard's display, if it has one. + +For split keyboards, only the battery level of the central (usually left) side is reported over bluetooth. + +:::note + +Windows may not properly ask the keyboard to notify it of changes in battery level, so the level shown may be out of date. + +::: + +## Adding a Battery Sensor to a Board + +To enable a battery sensor on a new board, add the driver for the sensor to your board's `.dts` file. ZMK provides two drivers for estimating the battery level using its voltage: + +- `zmk,battery-voltage-divider`: Reads the voltage on an analog input pin. +- `zmk,battery-nrf-vddh`: Reads the power supply voltage on a Nordic nRF52's VDDH pin. + +Zephyr also provides some drivers for fuel gauge ICs such as the TI bq274xx series and Maxim MAX17xxx series. If you use a battery sensor that does not have an existing driver, you will need to write a new driver that supports the `SENSOR_CHAN_GAUGE_STATE_OF_CHARGE` sensor channel and contribute it to Zephyr or ZMK. + +Once you have the sensor driver defined, add a `zmk,battery` property to the `chosen` node and set it to reference the sensor node. For example: + +``` +/ { + chosen { + zmk,battery = &vbatt; + }; + + vbatt: vbatt { + compatible = "zmk,battery-nrf-vddh"; + label = "VBATT"; + }; +} +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index cbeceef7d60..ea66439b286 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -17,6 +17,7 @@ module.exports = { "features/encoders", "features/underglow", "features/backlight", + "features/battery", "features/beta-testing", ], Behaviors: [ From 3e294375b63d5ec288ffc05d85c6b2e376500a73 Mon Sep 17 00:00:00 2001 From: Dom H Date: Mon, 18 Apr 2022 14:40:35 +0100 Subject: [PATCH 0376/1130] feat(docs): Provide current status of Displays --- docs/docs/features/displays.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/docs/features/displays.md b/docs/docs/features/displays.md index 2b3d001dc89..f18b3acd84e 100644 --- a/docs/docs/features/displays.md +++ b/docs/docs/features/displays.md @@ -1,6 +1,10 @@ --- -title: OLED Displays -sidebar_label: OLED Displays +title: Displays +sidebar_label: Displays --- -TODO: Documentation on OLED displays. +Displays in ZMK are currently a proof of concept and official support is coming soon. + +:::info +Although ZMK-powered keyboards _are_ capable of utilizing OLED and ePaper displays, the Displays feature is not yet considered production-ready due to an issue where the display remains blank after resuming from [external power cutoff](../behaviors/power#external-power-control). This issue can be tracked on GitHub at [zmkfirmware/zmk #674](https://github.com/zmkfirmware/zmk/issues/674). +::: From d0176f368585c5bbb0a6a5f69465eb083349eff0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 19 Apr 2022 01:28:22 +0000 Subject: [PATCH 0377/1130] fix(boards): Enable battery driver for XIAO BLE. --- app/boards/seeeduino_xiao_ble.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/seeeduino_xiao_ble.conf b/app/boards/seeeduino_xiao_ble.conf index 92367028cbe..22e6a9b5bf8 100644 --- a/app/boards/seeeduino_xiao_ble.conf +++ b/app/boards/seeeduino_xiao_ble.conf @@ -3,6 +3,7 @@ CONFIG_CONSOLE=n CONFIG_SERIAL=n CONFIG_UART_CONSOLE=n CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_BATTERY_VOLTAGE_DIVIDER=y CONFIG_ZMK_USB=y CONFIG_ZMK_BLE=y From bbaa6af81b0f70e117264a087a04935b0268d047 Mon Sep 17 00:00:00 2001 From: elagil Date: Sun, 3 Apr 2022 18:53:37 +0200 Subject: [PATCH 0378/1130] feat(ci): introduce reusable user-config workflow --- .github/workflows/build-user-config.yml | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 .github/workflows/build-user-config.yml diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml new file mode 100644 index 00000000000..ea889db09db --- /dev/null +++ b/.github/workflows/build-user-config.yml @@ -0,0 +1,96 @@ +name: Reusable user config build + +on: + workflow_call: + +jobs: + matrix: + runs-on: ubuntu-latest + name: Fetch Build Keyboards + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install yaml2json + run: python3 -m pip install remarshal + - id: set-matrix + name: Fetch Build Matrix + run: | + matrix=$(yaml2json build.yaml | jq -c .) + yaml2json build.yaml + echo "::set-output name=matrix::${matrix}" + build: + runs-on: ubuntu-latest + container: + image: zmkfirmware/zmk-build-arm:stable + needs: matrix + name: Build + strategy: + fail-fast: false + matrix: ${{fromJson(needs.matrix.outputs.matrix)}} + steps: + - name: Prepare variables + id: variables + run: | + if [ -n "${{ matrix.shield }}" ]; then + EXTRA_CMAKE_ARGS="-DSHIELD=${{ matrix.shield }}" + ARTIFACT_NAME="${{ matrix.shield }}-${{ matrix.board }}-zmk" + DISPLAY_NAME="${{ matrix.shield }} - ${{ matrix.board }}" + else + EXTRA_CMAKE_ARGS= + DISPLAY_NAME="${{ matrix.board }}" + ARTIFACT_NAME="${{ matrix.board }}-zmk" + fi + echo ::set-output name=extra-cmake-args::${EXTRA_CMAKE_ARGS} + echo ::set-output name=artifact-name::${ARTIFACT_NAME} + echo ::set-output name=display-name::${DISPLAY_NAME} + - name: Checkout + uses: actions/checkout@v2 + - name: Cache west modules + uses: actions/cache@v2 + env: + cache-name: cache-zephyr-modules + with: + path: | + modules/ + tools/ + zephyr/ + bootloader/ + zmk/ + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('manifest-dir/west.yml') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: West Init + run: west init -l config + - name: West Update + run: west update + - name: West Zephyr export + run: west zephyr-export + - name: West Build (${{ steps.variables.outputs.display-name }}) + run: | + west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/config ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} + - name: ${{ steps.variables.outputs.display-name }} DTS File + if: ${{ always() }} + run: | + if [ -f "build/zephyr/${{ matrix.board }}.dts.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.dts.pre.tmp; fi + if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + - name: ${{ steps.variables.outputs.display-name }} Kconfig file + run: cat build/zephyr/.config | grep -v "^#" | grep -v "^$" + - name: Rename artifacts + run: | + mkdir build/artifacts + if [ -f build/zephyr/zmk.uf2 ] + then + cp build/zephyr/zmk.uf2 "build/artifacts/${{ steps.variables.outputs.artifact-name }}.uf2" + elif [ -f build/zephyr/zmk.hex ] + then + cp build/zephyr/zmk.hex "build/artifacts/${{ steps.variables.outputs.artifact-name }}.hex" + fi + - name: Archive (${{ steps.variables.outputs.display-name }}) + uses: actions/upload-artifact@v2 + with: + name: firmware + path: build/artifacts From b1687eec2a1a8a4e3110e89fdfb553fbc5895fa9 Mon Sep 17 00:00:00 2001 From: Adrian Date: Sun, 3 Apr 2022 18:53:37 +0200 Subject: [PATCH 0379/1130] fix(ci): path to custom west.yml Co-authored-by: Joel Spadin --- .github/workflows/build-user-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index ea889db09db..de35ffb4509 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -58,7 +58,7 @@ jobs: zephyr/ bootloader/ zmk/ - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('manifest-dir/west.yml') }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('config/west.yml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- From 2c4ca7390b5904b0dbd5f88d321ba5bdccddf607 Mon Sep 17 00:00:00 2001 From: elagil Date: Sun, 3 Apr 2022 18:53:37 +0200 Subject: [PATCH 0380/1130] feat(ci): Use input variables for configuring user build --- .github/workflows/build-user-config.yml | 28 +++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index de35ffb4509..7da9a546a98 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -2,6 +2,22 @@ name: Reusable user config build on: workflow_call: + inputs: + build_matrix_path: + description: 'Path to the build matrix file' + default: 'build.yaml' + required: false + type: string + config_path: + description: 'Path to the config directory' + default: 'config' + required: false + type: string + fallback_binary: + description: 'Fallback binary format, if no *.uf2 file was built' + default: 'bin' + required: false + type: string jobs: matrix: @@ -17,8 +33,8 @@ jobs: - id: set-matrix name: Fetch Build Matrix run: | - matrix=$(yaml2json build.yaml | jq -c .) - yaml2json build.yaml + matrix=$(yaml2json ${{ inputs.build_matrix_path }} | jq -c .) + yaml2json ${{ inputs.build_matrix_path }} echo "::set-output name=matrix::${matrix}" build: runs-on: ubuntu-latest @@ -64,14 +80,14 @@ jobs: ${{ runner.os }}-build- ${{ runner.os }}- - name: West Init - run: west init -l config + run: west init -l ${{ inputs.config_path }} - name: West Update run: west update - name: West Zephyr export run: west zephyr-export - name: West Build (${{ steps.variables.outputs.display-name }}) run: | - west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/config ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} + west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} - name: ${{ steps.variables.outputs.display-name }} DTS File if: ${{ always() }} run: | @@ -85,9 +101,9 @@ jobs: if [ -f build/zephyr/zmk.uf2 ] then cp build/zephyr/zmk.uf2 "build/artifacts/${{ steps.variables.outputs.artifact-name }}.uf2" - elif [ -f build/zephyr/zmk.hex ] + elif [ -f build/zephyr/zmk.${{ inputs.fallback_binary }} ] then - cp build/zephyr/zmk.hex "build/artifacts/${{ steps.variables.outputs.artifact-name }}.hex" + cp build/zephyr/zmk.${{ inputs.fallback_binary }} "build/artifacts/${{ steps.variables.outputs.artifact-name }}.${{ inputs.fallback_binary }}" fi - name: Archive (${{ steps.variables.outputs.display-name }}) uses: actions/upload-artifact@v2 From 0f70f4005497381062e7edd5fc9f09e3b2e1fb0b Mon Sep 17 00:00:00 2001 From: elagil Date: Sun, 3 Apr 2022 18:53:37 +0200 Subject: [PATCH 0381/1130] style(ci): add empty lines for readability --- .github/workflows/build-user-config.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 7da9a546a98..3b9912f949a 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -28,14 +28,17 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + - name: Install yaml2json run: python3 -m pip install remarshal + - id: set-matrix name: Fetch Build Matrix run: | matrix=$(yaml2json ${{ inputs.build_matrix_path }} | jq -c .) yaml2json ${{ inputs.build_matrix_path }} echo "::set-output name=matrix::${matrix}" + build: runs-on: ubuntu-latest container: @@ -61,8 +64,10 @@ jobs: echo ::set-output name=extra-cmake-args::${EXTRA_CMAKE_ARGS} echo ::set-output name=artifact-name::${ARTIFACT_NAME} echo ::set-output name=display-name::${DISPLAY_NAME} + - name: Checkout uses: actions/checkout@v2 + - name: Cache west modules uses: actions/cache@v2 env: @@ -79,12 +84,16 @@ jobs: ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- + - name: West Init run: west init -l ${{ inputs.config_path }} + - name: West Update run: west update + - name: West Zephyr export run: west zephyr-export + - name: West Build (${{ steps.variables.outputs.display-name }}) run: | west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} @@ -93,8 +102,10 @@ jobs: run: | if [ -f "build/zephyr/${{ matrix.board }}.dts.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.dts.pre.tmp; fi if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + - name: ${{ steps.variables.outputs.display-name }} Kconfig file run: cat build/zephyr/.config | grep -v "^#" | grep -v "^$" + - name: Rename artifacts run: | mkdir build/artifacts @@ -105,6 +116,7 @@ jobs: then cp build/zephyr/zmk.${{ inputs.fallback_binary }} "build/artifacts/${{ steps.variables.outputs.artifact-name }}.${{ inputs.fallback_binary }}" fi + - name: Archive (${{ steps.variables.outputs.display-name }}) uses: actions/upload-artifact@v2 with: From e676c79929a50c1c51bb7a7dc1c2b11043a49c17 Mon Sep 17 00:00:00 2001 From: elagil Date: Sun, 3 Apr 2022 18:53:37 +0200 Subject: [PATCH 0382/1130] fix(ci): generalize path to west.yml --- .github/workflows/build-user-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 3b9912f949a..78d324edda3 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -79,7 +79,7 @@ jobs: zephyr/ bootloader/ zmk/ - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('config/west.yml') }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('${{ inputs.config_path }}/west.yml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- From b7771fbdd299e9dbfa606c8c3b1551c5acd401e6 Mon Sep 17 00:00:00 2001 From: elagil Date: Sun, 3 Apr 2022 18:57:35 +0200 Subject: [PATCH 0383/1130] ci: updated for Zephyr 3.0, cache invalidation --- .github/workflows/build-user-config.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 78d324edda3..0f22bd99dc2 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -64,14 +64,15 @@ jobs: echo ::set-output name=extra-cmake-args::${EXTRA_CMAKE_ARGS} echo ::set-output name=artifact-name::${ARTIFACT_NAME} echo ::set-output name=display-name::${DISPLAY_NAME} + echo ::set-output name=zephyr-version::${ZEPHYR_VERSION} - name: Checkout uses: actions/checkout@v2 - name: Cache west modules - uses: actions/cache@v2 + uses: actions/cache@v3.0.1 env: - cache-name: cache-zephyr-modules + cache-name: cache-zephyr-${{ steps.variables.outputs.zephyr-version }}-modules with: path: | modules/ @@ -97,12 +98,7 @@ jobs: - name: West Build (${{ steps.variables.outputs.display-name }}) run: | west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} - - name: ${{ steps.variables.outputs.display-name }} DTS File - if: ${{ always() }} - run: | - if [ -f "build/zephyr/${{ matrix.board }}.dts.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.dts.pre.tmp; fi - if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi - + - name: ${{ steps.variables.outputs.display-name }} Kconfig file run: cat build/zephyr/.config | grep -v "^#" | grep -v "^$" From 142d5187342e37b524b969f3e87b131478f1ac2b Mon Sep 17 00:00:00 2001 From: Adrian Date: Tue, 5 Apr 2022 08:28:45 +0200 Subject: [PATCH 0384/1130] ci: make cache hash independent of input parameter --- .github/workflows/build-user-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 0f22bd99dc2..226a53c1253 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -80,7 +80,7 @@ jobs: zephyr/ bootloader/ zmk/ - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('${{ inputs.config_path }}/west.yml') }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/west.yml', '**/build.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- From 3ff8014cf299d682f7e76296c0c7e8e53c041a87 Mon Sep 17 00:00:00 2001 From: Adrian Date: Fri, 8 Apr 2022 18:44:12 +0200 Subject: [PATCH 0385/1130] ci: sort build configuration output Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com> --- .github/workflows/build-user-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 226a53c1253..cb462b1a6d4 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -100,7 +100,7 @@ jobs: west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} - name: ${{ steps.variables.outputs.display-name }} Kconfig file - run: cat build/zephyr/.config | grep -v "^#" | grep -v "^$" + run: cat build/zephyr/.config | grep -v "^#" | grep -v "^$" | sort - name: Rename artifacts run: | From 6308ab942661656e9ca06787ebb0918df6ffd268 Mon Sep 17 00:00:00 2001 From: Dom H Date: Mon, 18 Apr 2022 17:44:43 +0100 Subject: [PATCH 0386/1130] fix(docs): Ensure relative links always resolve Linking to the document _file path_ rather than the document _URL_ ensures that the link resolves regardless of trailing slash config. More information is at https://docusaurus.io/docs/docs-markdown-features --- docs/docs/features/displays.md | 2 +- docs/docs/intro.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/features/displays.md b/docs/docs/features/displays.md index f18b3acd84e..283bf880671 100644 --- a/docs/docs/features/displays.md +++ b/docs/docs/features/displays.md @@ -6,5 +6,5 @@ sidebar_label: Displays Displays in ZMK are currently a proof of concept and official support is coming soon. :::info -Although ZMK-powered keyboards _are_ capable of utilizing OLED and ePaper displays, the Displays feature is not yet considered production-ready due to an issue where the display remains blank after resuming from [external power cutoff](../behaviors/power#external-power-control). This issue can be tracked on GitHub at [zmkfirmware/zmk #674](https://github.com/zmkfirmware/zmk/issues/674). +Although ZMK-powered keyboards _are_ capable of utilizing OLED and ePaper displays, the Displays feature is not yet considered production-ready due to an issue where the display remains blank after resuming from [external power cutoff](../behaviors/power.md#external-power-control). This issue can be tracked on GitHub at [zmkfirmware/zmk #674](https://github.com/zmkfirmware/zmk/issues/674). ::: diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 91b4e21bb15..142dcafc97e 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -32,7 +32,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | [Backlight](features/backlight.md) | ✅ | ✅ | ✅ | | One Shot Keys | ✅ | ✅ | ✅ | | [Combo Keys](features/combos.md) | ✅ | | ✅ | -| [Macros](behaviors/macros) | ✅ | ✅ | ✅ | +| [Macros](behaviors/macros.md) | ✅ | ✅ | ✅ | | Mouse Keys | 🚧 | ✅ | ✅ | | Low Active Power Usage | ✅ | | | | Low Power Sleep States | ✅ | ✅ | | From 56d5f4153c22213dd032452ad846272a5ed12246 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Apr 2022 03:35:40 +0000 Subject: [PATCH 0387/1130] chore(deps): bump async from 2.6.3 to 2.6.4 in /docs Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4. - [Release notes](https://github.com/caolan/async/releases) - [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md) - [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4) --- updated-dependencies: - dependency-name: async dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index c72f901b41c..18a272ca644 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -5858,9 +5858,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } From e13ea3fbfb46c41a188185faaa8451b9f430fe8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Apr 2022 05:09:13 +0000 Subject: [PATCH 0388/1130] chore(deps): bump @fortawesome/react-fontawesome in /docs Bumps [@fortawesome/react-fontawesome](https://github.com/FortAwesome/react-fontawesome) from 0.1.16 to 0.1.18. - [Release notes](https://github.com/FortAwesome/react-fontawesome/releases) - [Changelog](https://github.com/FortAwesome/react-fontawesome/blob/master/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/react-fontawesome/compare/0.1.16...0.1.18) --- updated-dependencies: - dependency-name: "@fortawesome/react-fontawesome" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 20 ++++++++++++++++---- docs/package.json | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 18a272ca644..c87e0abaec9 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -4825,11 +4825,23 @@ } }, "@fortawesome/react-fontawesome": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.16.tgz", - "integrity": "sha512-aLmzDwC9rEOAJv2UJdMns89VZR5Ry4IHu5dQQh24Z/lWKEm44lfQr1UNalZlkUaQN8d155tNh+CS7ntntj1VMA==", + "version": "0.1.18", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.18.tgz", + "integrity": "sha512-RwLIB4TZw0M9gvy5u+TusAA0afbwM4JQIimNH/j3ygd6aIvYPQLqXMhC9ErY26J23rDPyDZldIfPq/HpTTJ/tQ==", "requires": { - "prop-types": "^15.7.2" + "prop-types": "^15.8.1" + }, + "dependencies": { + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + } } }, "@hapi/hoek": { diff --git a/docs/package.json b/docs/package.json index 755482b6c88..978795a84dc 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "@docusaurus/preset-classic": "^2.0.0-beta.18", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.16", + "@fortawesome/react-fontawesome": "^0.1.18", "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", "js-yaml": "^4.1.0", From 158ac2720724123b91e6534c95710804cc49243e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Apr 2022 10:03:28 +0000 Subject: [PATCH 0389/1130] chore(deps-dev): bump eslint-plugin-mdx from 1.13.0 to 1.17.0 in /docs Bumps [eslint-plugin-mdx](https://github.com/mdx-js/eslint-mdx) from 1.13.0 to 1.17.0. - [Release notes](https://github.com/mdx-js/eslint-mdx/releases) - [Changelog](https://github.com/mdx-js/eslint-mdx/blob/master/CHANGELOG.md) - [Commits](https://github.com/mdx-js/eslint-mdx/compare/v1.13.0...v1.17.0) --- updated-dependencies: - dependency-name: eslint-plugin-mdx dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 96 +++++++++++++++++------------------------- docs/package.json | 2 +- 2 files changed, 40 insertions(+), 58 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index c87e0abaec9..d09c588882a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -7581,21 +7581,29 @@ "dev": true }, "eslint-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.13.0.tgz", - "integrity": "sha512-Yqc5mnh2JMEm9yTp6NUnfOg1wXGLibCqQTjvb5+EQH4LtQEmWG0DtqWUXWHRy0gmy/3lBdN9Zkc5KGwAizaTrQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.17.0.tgz", + "integrity": "sha512-O8+JRfwCzpoR2P6zUI1GDAAM/bsuzcoBS1ArvpQrgQO/E2Km0vBmM15ukiJxZ+YUh5d+qDlrqha0fZB50MojJQ==", "dev": true, "requires": { + "cosmiconfig": "^7.0.1", "remark-mdx": "^1.6.22", "remark-parse": "^8.0.3", - "tslib": "^2.2.0", - "unified": "^9.2.1" + "remark-stringify": "^8.1.1", + "tslib": "^2.3.1", + "unified": "^9.2.2" }, "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, "unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, "requires": { "bail": "^1.0.0", @@ -7609,58 +7617,32 @@ } }, "eslint-plugin-markdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", - "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz", + "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", "dev": true, "requires": { "mdast-util-from-markdown": "^0.8.5" } }, "eslint-plugin-mdx": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.13.0.tgz", - "integrity": "sha512-oZ/R9OmSx1gZs52CO58HTHlJXRKoZtF6ZMaWP+sOcSGMFxoddoPr9PDgpP52ab5TWu5yVl5guR9D+GMfzkR2Uw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.17.0.tgz", + "integrity": "sha512-Kicizy+fbfsB2UxTDXP92qTtFqITApu4v4DRQUfXMoPwBHeQRvZnaEtXu2S9aia51GYRYsMSqUvoPPih/5oB+g==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", - "eslint-mdx": "^1.13.0", - "eslint-plugin-markdown": "^2.1.0", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "synckit": "^0.1.5", - "tslib": "^2.2.0", - "unified": "^9.2.1", + "eslint-mdx": "^1.17.0", + "eslint-plugin-markdown": "^2.2.1", + "synckit": "^0.4.1", + "tslib": "^2.3.1", "vfile": "^4.2.1" }, "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true } } }, @@ -12827,19 +12809,19 @@ } }, "synckit": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.1.5.tgz", - "integrity": "sha512-s9rDbMJAF5SDEwBGH/DvbN/fb5N1Xu1boL4Uv66idbCbtosNX3ikUsFvGhROmPXsvlMYMcT5ksmkU5RSnkFi9Q==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.4.1.tgz", + "integrity": "sha512-ngUh0+s+DOqEc0sGnrLaeNjbXp0CWHjSGFBqPlQmQ+oN/OfoDoYDBXPh+b4qs1M5QTk5nuQ3AmVz9+2xiY/ldw==", "dev": true, "requires": { - "tslib": "^2.2.0", + "tslib": "^2.3.1", "uuid": "^8.3.2" }, "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true } } diff --git a/docs/package.json b/docs/package.json index 978795a84dc..f8ef6dfe976 100644 --- a/docs/package.json +++ b/docs/package.json @@ -52,7 +52,7 @@ "@types/react-router-dom": "^5.1.7", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-mdx": "^1.13.0", + "eslint-plugin-mdx": "^1.17.0", "eslint-plugin-react": "^7.28.0", "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", From c8c273d83b6806e53116748b8e5a216ed52ca1a1 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 17 Apr 2022 14:30:22 +0000 Subject: [PATCH 0390/1130] feat(docs): Add TOC to supported hardware page. --- docs/docs/hardware.mdx | 42 +++++++- docs/src/components/hardware-list.tsx | 133 ++++++++------------------ docs/src/components/hardware-utils.ts | 70 ++++++++++++++ docs/tsconfig.json | 2 +- 4 files changed, 151 insertions(+), 96 deletions(-) create mode 100644 docs/src/components/hardware-utils.ts diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index 76a0a3cbb72..d2b6aa9df21 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -6,12 +6,48 @@ sidebar_label: Supported Hardware import HardwareList from "@site/src/components/hardware-list"; import Metadata from "@site/src/data/hardware-metadata.json"; +import Heading from "@theme/Heading"; + +import { groupedMetadata } from "@site/src/components/hardware-utils"; + +export const toc = [ + { + value: "Onboard Controller Keyboards", + id: "onboard", + level: 2, + }, + { + value: "Composite Keyboards", + id: "composite", + level: 2, + }, + ...Object.values(groupedMetadata(Metadata).interconnects).map( + ({ interconnect }) => ({ + value: `${interconnect.name} Interconnect`, + id: interconnect.id, + level: 3, + }) + ), + { + value: "Other Hardware", + id: "other-hardware", + level: 2, + }, + { + value: "Contributing", + id: "contributing", + level: 2, + }, +]; + With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been implemented and tested by the ZMK contributors. -## Other Hardware + + Other Hardware + In addition to the basic keyboard functionality, there is some initial support for additional keyboard hardware: @@ -22,6 +58,8 @@ In addition to the basic keyboard functionality, there is some initial support f Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite). -## Contributing + + Contributing + If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation. diff --git a/docs/src/components/hardware-list.tsx b/docs/src/components/hardware-list.tsx index e611f5cfb50..54034ada3bf 100644 --- a/docs/src/components/hardware-list.tsx +++ b/docs/src/components/hardware-list.tsx @@ -1,11 +1,9 @@ import React from "react"; -import { - Board, - HardwareMetadata, - Interconnect, - Shield, -} from "../hardware-metadata"; +import Heading from "@theme/Heading"; + +import { HardwareMetadata } from "../hardware-metadata"; +import { groupedMetadata, InterconnectDetails } from "./hardware-utils"; interface HardwareListProps { items: HardwareMetadata[]; @@ -53,12 +51,6 @@ function HardwareLineItem({ item }: { item: HardwareMetadata }) { ); } -interface InterconnectDetails { - interconnect?: Interconnect; - boards: Board[]; - shields: Shield[]; -} - function mapInterconnect({ interconnect, boards, @@ -70,15 +62,17 @@ function mapInterconnect({ return (
    -

    {interconnect.name} Interconnect

    + + {interconnect.name} Interconnect + {interconnect.description &&

    {interconnect.description}

    } -
    Boards
    + Boards
      {boards.map((s) => ( ))}
    -
    Shields
    + Shields

    #7( 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�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

    + + + + + + + + +
    Col 0Col 1Col 2
    Row 0A0A1A2
    Row 1A3A4A5
    Row 2A6A7A8
    + + +

    + + +To combine them, we need to create a composite matrix with enough rows and columns to fit both sets of keys without overlapping, then set row and/or columns offsets to shift them so they do not overlap. + +One possible way to do this is a 3x4 matrix where the direct GPIO keys are shifted to below the matrix keys... + + + + + + + + + + + +
    Col 0Col 1Col 2
    Row 0A0A1A2
    Row 1A3A4A5
    Row 2A6A7A8
    Row 3B0B1(none)
    + +...which can be configured with the following Devicetree code: + +```devicetree +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan_composite { + compatible = "zmk,kscan-composite"; + label = "KSCAN0"; + rows = <3>; + columns = <4>; + + // Include the matrix driver + matrix { + kscan = <&kscan1>; + }; + + // Include the direct GPIO driver... + direct { + kscan = <&kscan2>; + row-offset = <3>; // ..and shift it to not overlap + }; + }; + + kscan1: kscan_matrix { + compatible = "zmk,kscan-gpio-matrix"; + // define 3x3 matrix here... + }; + + kscan2: kscan_direct { + compatible = "zmk,kscan-gpio-direct"; + // define 2 direct GPIOs here... + }; +} +``` + +## Mock Driver + +Mock keyboard scan driver that simulates key events. + +### Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Config | Type | Description | Default | +| ------------------------------ | ---- | ------------------------ | ------- | +| `CONFIG_ZMK_KSCAN_MOCK_DRIVER` | bool | Enable mock kscan driver | n | + +### Devicetree + +Applies to: `compatible = "zmk,kscan-mock"` + +Definition file: [zmk/app/dts/bindings/zmk,kscan-mock.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/zmk%2Ckscan-mock.yaml) + +| Property | Type | Description | Default | +| -------------- | ------ | --------------------------------------------- | ------- | +| `label` | string | Unique label for the node | | +| `event-period` | int | Milliseconds between each generated event | | +| `events` | array | List of key events to simulate | | +| `rows` | int | The number rows of in the composite matrix | | +| `cols` | int | The number columns of in the composite matrix | | +| `exit-after` | bool | Exit the program after running all events | false | + +The `events` array should be defined using the macros from [dt-bindings/zmk/kscan_mock.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/kscan_mock.h). + +## Matrix Transform + +Defines a mapping from keymap logical positions to physical matrix positions. + +Transforms should be used any time the physical layout of a keyboard's keys does not match the layout of its electrical matrix and/or when not all positions in the matrix are used. This applies to most non-ortholinear boards. + +Transforms can also be used for keyboards with multiple layouts. You can define multiple matrix transform nodes, one for each layout, and users can select which one they want from the `/chosen` node in their keymaps. + +See the [new shield guide](/docs/development/new-shield/#optional-matrix-transform) for more documentation on how to define a matrix transform. + +### Devicetree + +Applies to: `compatible = "zmk,matrix-transform"` + +Definition file: [zmk/app/dts/bindings/zmk,matrix-transform.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/zmk%2Cmatrix-transform.yaml) + +| Property | Type | Description | Default | +| ------------ | ----- | --------------------------------------------------------------------- | ------- | +| `rows` | int | Number of rows in the transformed matrix | | +| `columns` | int | Number of columns in the transformed matrix | | +| `row-offset` | int | Adds an offset to all rows before looking them up in the transform | 0 | +| `col-offset` | int | Adds an offset to all columns before looking them up in the transform | 0 | +| `map` | array | A list of position transforms | | + +The `map` array should be defined using the `RC()` macro from [dt-bindings/zmk/matrix_transform.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/matrix_transform.h). It should have one item per logical position in the keymap. Each item should list the physical row and column that should trigger the key in that position. + +### Example Configuration + +Consider a keyboard with a [duplex matrix](https://wiki.ai03.com/books/pcb-design/page/matrices-and-duplex-matrix), where the matrix has twice as many rows and half as many columns as the keyboard has keys. A matrix transform can be used to correct for this so that keymaps can match the layout of the keys, not the layout of the matrix. + +```devicetree +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + rows = <12>; + columns = <8>; + // define the matrix... + }; + + default_transform: matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <6>; + columns = <16>; + // ESC F1 F2 F3 ... + // ` 1 2 3 ... + // Tab Q W E ... + // Caps A S D ... + // Shift Z X C ... + // Ctrl Alt ... + map = < + RC(0,0) RC(1,0) RC(0,1) RC(1,1) // ... + RC(2,0) RC(3,0) RC(2,1) RC(3,1) // ... + RC(4,0) RC(5,0) RC(4,1) RC(5,1) // ... + RC(6,0) RC(7,0) RC(6,1) RC(7,1) // ... + RC(8,0) RC(8,1) RC(9,1) // ... + RC(10,0) RC(11,0) // ... + >; + }; +}; +``` diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md new file mode 100644 index 00000000000..c3dae3de88b --- /dev/null +++ b/docs/docs/config/power.md @@ -0,0 +1,65 @@ +--- +title: Power Management Configuration +sidebar_label: Power Management +--- + +See [Configuration Overview](/docs/config/index) for instructions on how to +change these settings. + +## Idle/Sleep + +Configuration for entering low power modes when the keyboard is idle. + +In the idle state, peripherals such as displays and lighting are disabled, but the keyboard remains connected to Bluetooth so it can immediately respond when you press a key. + +In the deep sleep state, the keyboard additionally disconnects from Bluetooth. This state uses very little power, but it may take a few seconds to reconnect after waking. + +### Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Config | Type | Description | Default | +| ------------------------------- | ---- | ----------------------------------------------------- | ------- | +| `CONFIG_ZMK_IDLE_TIMEOUT` | int | Milliseconds of inactivity before entering idle state | 30000 | +| `CONFIG_ZMK_SLEEP` | bool | Enable deep sleep support | n | +| `CONFIG_ZMK_IDLE_SLEEP_TIMEOUT` | int | Milliseconds of inactivity before entering deep sleep | 900000 | + +## External Power Control + +Driver for enabling or disabling power to peripherals such as displays and lighting. This driver must be configured to use [power management behaviors](/docs/behaviors/power). + +### Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Config | Type | Description | Default | +| ---------------------- | ---- | ----------------------------------------------- | ------- | +| `CONFIG_ZMK_EXT_POWER` | bool | Enable support to control external power output | y | + +### Devicetree + +Applies to: `compatible = "zmk,ext-power-generic"` + +| Property | Type | Description | +| --------------- | ---------- | ------------------------------------------------------------- | +| `label` | string | Unique label for the node | +| `control-gpios` | GPIO array | List of GPIOs which should be active to enable external power | +| `init-delay-ms` | int | number of milliseconds to delay after initializing the driver | + +## Battery Voltage Divider + +Driver for reading the voltage of a battery using an ADC connected to a voltage divider. + +### Kconfig + +Definition file: [zmk/app/drivers/sensor/battery_voltage_divider/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/sensor/battery_voltage_divider/Kconfig) + +| Config | Type | Description | Default | +| ------------------------------------ | ---- | ------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BATTERY_VOLTAGE_DIVIDER` | bool | Enable battery voltage divider driver for battery monitoring | n | + +### Devicetree + +Applies to: `compatible = "zmk,battery-voltage-divider"` + +See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/latest/reference/devicetree/bindings/voltage-divider.html). diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md new file mode 100644 index 00000000000..86bf24c721b --- /dev/null +++ b/docs/docs/config/system.md @@ -0,0 +1,66 @@ +--- +title: System Configuration +sidebar_label: System +--- + +These are general settings that control how the keyboard behaves and which features it supports. Several of these settings come from Zephyr and are not specific to ZMK, but they are listed here because they are relevant to how a keyboard functions. + +See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. + +## Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +### General + +| Config | Type | Description | Default | +| ----------------------------------- | ------ | ----------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard | | +| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | +| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | +| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | + +### USB + +| Config | Type | Description | Default | +| --------------------------------- | ------ | --------------------------------------- | --------------- | +| `CONFIG_USB` | bool | Enable USB drivers | | +| `CONFIG_USB_DEVICE_VID` | int | The vendor ID advertised to USB | `0x1D50` | +| `CONFIG_USB_DEVICE_PID` | int | The product ID advertised to USB | `0x615E` | +| `CONFIG_USB_DEVICE_MANUFACTURER` | string | The manufacturer name advertised to USB | `"ZMK Project"` | +| `CONFIG_USB_HID_POLL_INTERVAL_MS` | int | USB polling interval in milliseconds | 9 | +| `CONFIG_ZMK_USB` | bool | Enable ZMK as a USB keyboard | | +| `CONFIG_ZMK_USB_INIT_PRIORITY` | int | USB init priority | 50 | + +### Bluetooth + +See [Zephyr's Bluetooth stack architecture documentation](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-arch.html) +for more information on configuring Bluetooth. + +| Config | Type | Description | Default | +| ----------------------------------------------------- | ---- | ---------------------------------------------------------------------- | ------- | +| `CONFIG_BT` | bool | Enable Bluetooth support | | +| `CONFIG_BT_MAX_CONN` | int | Maximum number of simultaneous Bluetooth connections | 5 | +| `CONFIG_BT_MAX_PAIRED` | int | Maximum number of paired Bluetooth devices | 5 | +| `CONFIG_ZMK_BLE` | bool | Enable ZMK as a Bluetooth keyboard | | +| `CONFIG_ZMK_BLE_INIT_PRIORITY` | int | BLE init priority | 50 | +| `CONFIG_ZMK_BLE_THREAD_STACK_SIZE` | int | Stack size of the BLE notify thread | 512 | +| `CONFIG_ZMK_BLE_THREAD_PRIORITY` | int | Priority of the BLE notify thread | 5 | +| `CONFIG_ZMK_BLE_KEYBOARD_REPORT_QUEUE_SIZE` | int | Max number of keyboard HID reports to queue for sending over BLE | 20 | +| `CONFIG_ZMK_BLE_CONSUMER__REPORT_QUEUE_SIZE` | int | Max number of consumer HID reports to queue for sending over BLE | 5 | +| `CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START` | bool | Clears all bond information from the keyboard on startup | n | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Experimental: require typing passkey from host to pair BLE connection | n | +| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | +| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | +| `CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the split peripheral BLE notify thread | 512 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the split peripheral BLE notify thread | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | + +### Logging + +| Config | Type | Description | Default | +| ------------------------ | ---- | ---------------------------------------- | ------- | +| `CONFIG_ZMK_USB_LOGGING` | bool | Enable USB CDC ACM logging for debugging | n | +| `CONFIG_ZMK_LOG_LEVEL` | int | Log level for ZMK debug messages | 4 | diff --git a/docs/docs/config/underglow.md b/docs/docs/config/underglow.md new file mode 100644 index 00000000000..256e1b4f1d1 --- /dev/null +++ b/docs/docs/config/underglow.md @@ -0,0 +1,43 @@ +--- +title: RGB Underglow Configuration +sidebar_label: RGB Underglow +--- + +See the [RGB Underglow feature page](/docs/features/underglow) for more details, including instructions for adding underglow support to a board. + +See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. + +## Kconfig + +RGB underglow depends on [Zephyr's LED strip driver](https://github.com/zephyrproject-rtos/zephyr/tree/master/drivers/led_strip), which provides additional Kconfig options. + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Config | Type | Description | Default | +| ------------------------------------ | ---- | ----------------------------------------------------- | ------- | +| `CONFIG_ZMK_RGB_UNDERGLOW` | bool | Enable RGB underglow | n | +| `CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER` | bool | Underglow toggling also controls external power | y | +| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP` | int | Hue step in degrees (0-359) used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP` | int | Saturation step in percent used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP` | int | Brightness step in percent used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_START` | int | Default hue in degrees (0-359) | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_START` | int | Default saturation percent (0-100) | 100 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_START` | int | Default brightness in percent (0-100) | 100 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SPD_START` | int | Default effect speed (1-5) | 3 | +| `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START` | int | Default effect index from the effect list (see below) | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_ON_START` | bool | Default on state | y | + +Values for `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START`: + +| Value | Effect | +| ----- | ----------- | +| 0 | Solid color | +| 1 | Breathe | +| 2 | Spectrum | +| 3 | Swirl | + +## Devicetree + +ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip driver](https://github.com/zephyrproject-rtos/zephyr/tree/master/dts/bindings/led_strip). + +See the [RGB underglow feature page](/docs/features/underglow) for examples of the properties that must be set to enable underglow. diff --git a/docs/docs/customization.md b/docs/docs/customization.md index ff5da61d1bf..1ffc38ccf8d 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -9,10 +9,10 @@ with the main `zmk` firmware repository to build your desired firmware. The main working components of ZMK are kept separate from your personal keyboard settings, reducing the amount of file manipulation in the configuration process. This makes flashing ZMK to your keyboard much easier, especially because you don't need to keep an up-to-date copy of zmk on your computer at all times. -On default `zmk-config` folder should contain two files: +By default, the `zmk-config` folder should contain two files: - `.conf` -- ``.keymap +- `.keymap` However, your config folder can also be modified to include a `boards/` directory for keymaps and configurations for multiple boards/shields outside of the default keyboard setting definitions. @@ -23,6 +23,8 @@ The setup script creates a `config/.conf` file that allows you to add ad control what features and options are built into your firmware. Opening that file with your text editor will allow you to see the various config settings that can be commented/uncommented to modify how your firmware is built. +Refer to the [Configuration](/docs/config/index) documentation for more details on this file. + ## Keymap Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 55e1563c9d7..5c73a8455ca 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -25,7 +25,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - The name of the combo doesn't really matter, but convention is to start the node name with `combo_`. - The `compatible` property should always be `"zmk,combos"` for combos. -- `timeout-ms` is the length of the window (in milliseconds) in which all keys of the combo must be pressed in order to successfully trigger the combo. +- All the keys must be pressed within `timeout-ms` milliseconds to trigger the combo. - `key-positions` is an array of key positions. See the info section below about how to figure out the positions on your board. - `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. @@ -47,10 +47,4 @@ Key positions are numbered like the keys in your keymap, starting at 0. So, if t Invoking a source-specific behavior such as one of the [reset behaviors](behaviors/reset.md) using a combo will always trigger it on the central side of the keyboard, regardless of the side that the keys corresponding to `key-positions` are on. ::: -### Advanced configuration - -There are three global combo parameters which are set through KConfig. You can set them in the `.conf` file in the same directory as your keymap file. - -- `CONFIG_ZMK_COMBO_MAX_PRESSED_COMBOS` is the number of combos that can be active at the same time. Default 4. -- `CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY` is the maximum number of combos that can be active on a key position. Defaults to 5. (So you can have 5 separate combos that use position `3` for example) -- `CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO` is the maximum number of keys that need to be pressed to activate a combo. Default 4. If you want a combo that triggers when pressing 5 keys, you'd set this to 5 for example. +See [combo configuration](/docs/config/combos) for advanced configuration options. diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index 58b3ef453fd..d1cd8e20b65 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -25,7 +25,8 @@ Here you can see the RGB underglow feature in action using WS2812 LEDs. ## Enabling RGB Underglow -To enable RGB underglow on your board or shield, simply enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `X_STRIP` configuration values in the `.conf` file of your user config directory as such: +To enable RGB underglow on your board or shield, simply enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `CONFIG_*_STRIP` configuration values in the `.conf` file for your board or shield. +For example: ``` CONFIG_ZMK_RGB_UNDERGLOW=y @@ -33,24 +34,14 @@ CONFIG_ZMK_RGB_UNDERGLOW=y CONFIG_WS2812_STRIP=y ``` +See [Configuration Overview](/docs/config/index) for more instructions on how to +use Kconfig. + If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). ## Configuring RGB Underglow -There are various Kconfig options used to configure the RGB underglow feature. These can all be set in the `.conf` file. - -| Option | Description | Default | -| ------------------------------------ | ----------------------------------------------- | ------- | -| `CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER` | Underglow toggling also controls external power | y | -| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP` | Hue step in degrees of 360 used by RGB actions | 10 | -| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP` | Saturation step in percent used by RGB actions | 10 | -| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP` | Brightness step in percent used by RGB actions | 10 | -| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_START` | Default hue 0-359 in degrees | 0 | -| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_START` | Default saturation 0-100 in percent | 100 | -| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_START` | Default brightness 0-100 in percent | 100 | -| `CONFIG_ZMK_RGB_UNDERGLOW_SPD_START` | Default effect speed 1-5 | 3 | -| `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START` | Default effect integer from the effect enum | 0 | -| `CONFIG_ZMK_RGB_UNDERGLOW_ON_START` | Default on state | y | +See [RGB underglow configuration](/docs/config/underglow). ## Adding RGB Underglow to a Board @@ -154,7 +145,7 @@ Once you have your `led_strip` properly defined you need to add it to the root d }; ``` -Finally you need to enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `X_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): +Finally you need to enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `CONFIG*_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): ``` CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/docs/sidebars.js b/docs/sidebars.js index e7d05850c5a..b8e74e0fdb1 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -52,6 +52,18 @@ module.exports = { "codes/power", "codes/keymap-upgrader", ], + Configuration: [ + "config/index", + "config/behaviors", + "config/combos", + "config/displays", + "config/encoders", + "config/keymap", + "config/kscan", + "config/power", + "config/system", + "config/underglow", + ], Development: [ "development/clean-room", "development/documentation", From d36792db2d776c7c9b45db677fb02a8a4fbe4b94 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Thu, 28 Apr 2022 21:26:57 -0500 Subject: [PATCH 0476/1130] feat(docs): Update kscan config docs --- docs/docs/config/kscan.md | 46 +++++++++++++++------------------------ 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 9b7d1053260..379107569a8 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -14,11 +14,14 @@ Definition files: - [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) - [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) -| Config | Type | Description | Default | -| ----------------------------------- | ---- | ------------------------------------------------------ | ------- | -| `CONFIG_ZMK_KSCAN_GPIO_DRIVER` | bool | Enable GPIO keyboard scan driver to detect key presses | y | -| `CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE` | int | Size of the event queue for kscan events | 4 | -| `CONFIG_ZMK_KSCAN_INIT_PRIORITY` | int | Keyboard scan device driver initialization priority | 40 | +| Config | Type | Description | Default | +| -------------------------------------- | ---- | ---------------------------------------------------- | ------- | +| `CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE` | int | Size of the event queue for kscan events | 4 | +| `CONFIG_ZMK_KSCAN_INIT_PRIORITY` | int | Keyboard scan device driver initialization priority | 40 | +| `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS` | int | Global debounce time for key press in milliseconds | -1 | +| `CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS` | int | Global debounce time for key release in milliseconds | -1 | + +If the debounce press/release values are set to any value other than `-1`, they override the `debounce-press-ms` and `debounce-release-ms` devicetree properties for all keyboard scan drivers which support them. ### Devicetree @@ -87,13 +90,16 @@ Applies to: `compatible = "zmk,kscan-gpio-matrix"` Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-matrix.yaml) -| Property | Type | Description | Default | -| ----------------- | ---------- | ------------------------------------------------------------ | ----------- | -| `label` | string | Unique label for the node | | -| `row-gpios` | GPIO array | Matrix row GPIOs in order, starting from the top row | | -| `col-gpios` | GPIO array | Matrix column GPIOs in order, starting from the leftmost row | | -| `debounce-period` | int | Debounce period in milliseconds | 5 | -| `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | +| Property | Type | Description | Default | +| ------------------------- | ---------- | -------------------------------------------------------------------------------------------------- | ----------- | +| `label` | string | Unique label for the node | | +| `row-gpios` | GPIO array | Matrix row GPIOs in order, starting from the top row | | +| `col-gpios` | GPIO array | Matrix column GPIOs in order, starting from the leftmost row | | +| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | +| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | +| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | +| `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | +| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and ZMK_KSCAN_MATRIX_POLLING is enabled. | 10 | The `diode-direction` property must be one of: @@ -106,14 +112,6 @@ The `diode-direction` property must be one of: Keyboard scan driver which combines multiple other keyboard scan drivers. -### Kconfig - -Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) - -| Config | Type | Description | Default | -| ----------------------------------- | ---- | ----------------------------- | ------- | -| `CONFIG_ZMK_KSCAN_COMPOSITE_DRIVER` | bool | Enable composite kscan driver | n | - ### Devicetree Applies to : `compatible = "zmk,kscan-composite"` @@ -227,14 +225,6 @@ One possible way to do this is a 3x4 matrix where the direct GPIO keys are shift Mock keyboard scan driver that simulates key events. -### Kconfig - -Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) - -| Config | Type | Description | Default | -| ------------------------------ | ---- | ------------------------ | ------- | -| `CONFIG_ZMK_KSCAN_MOCK_DRIVER` | bool | Enable mock kscan driver | n | - ### Devicetree Applies to: `compatible = "zmk,kscan-mock"` From bf84481b47fd64bedbfcf665b1dbc09aab5d5029 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 20:20:21 -0500 Subject: [PATCH 0477/1130] feat(docs): Update behavior config docs --- docs/docs/behaviors/caps-word.md | 2 +- docs/docs/config/behaviors.md | 149 +++++++++++++++++++++++++++---- 2 files changed, 134 insertions(+), 17 deletions(-) diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index 479e350f620..1b743a595e2 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -5,7 +5,7 @@ sidebar_label: Caps Word ## Summary -The caps word behavior behaves similar to a caps lock, but will automatically deactivate when one of the configured "break keycodes" is pressed, or if the caps word key is pressed again. For smaller keyboards, using [mod-taps](/docs/behaviors/mod-tap), this can help avoid repeated alternating holds when typing words in all caps. +The caps word behavior behaves similar to a caps lock, but will automatically deactivate when any key not in a continue list is pressed, or if the caps word key is pressed again. For smaller keyboards using [mod-taps](/docs/behaviors/mod-tap), this can help avoid repeated alternating holds when typing words in all caps. The modifiers are applied only to to the alphabetic (`A` to `Z`) keycodes, to avoid automatically appliying them to numeric values, etc. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index f8a0df7db7b..726f2bb2079 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -9,6 +9,35 @@ See [Configuration Overview](/docs/config/index) for instructions on how to chan See the [zmk/app/dts/behaviors/](https://github.com/zmkfirmware/zmk/tree/main/app/dts/behaviors) folder for all default behaviors. +## Caps Word + +Creates a custom behavior that behaves similar to a caps lock but deactivates when any key not in a continue list is pressed. + +See the [caps word behavior](/docs/behaviors/caps-word) documentation for more details and examples. + +### Devicetree + +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-caps-word.yaml) + +Applies to: `compatible = "zmk,behavior-caps-word"` + +| Property | Type | Description | Default | +| ---------------- | ------ | ------------------------------------------------------------------ | -------------- | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<0>` | | +| `continue-list` | array | List of [key codes](/docs/codes) which do not deactivate caps lock | `` | +| `mods` | int | A bit field of modifiers to apply | `` | + +`continue-list` is treated as if it always includes alphanumeric characters (A-Z, 0-9). + +See [dt-bindings/zmk/modifiers.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/modifiers.h) for a list of modifiers. + +You can use the following nodes to tweak the default behaviors: + +| Node | Behavior | +| ------------ | -------------------------------------- | +| `&caps_word` | [Caps Word](/docs/behaviors/caps-word) | + ## Hold-Tap Creates a custom behavior that triggers one behavior when a key is held or a different one when the key is tapped. @@ -17,45 +46,113 @@ See the [hold-tap behavior documentation](/docs/behaviors/hold-tap) for more det ### Devicetree +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-hold-tap.yaml) + Applies to: `compatible = "zmk,behavior-hold-tap"` -| Property | Type | Description | Default | -| ----------------- | ------------- | ------------------------------------------------------------------------------ | ------------------ | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<2>` | | -| `bindings` | phandle array | A list of two behaviors: one for hold and one for tap | | -| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | -| `quick-tap-ms` | int | Tap twice within this period in milliseconds to trigger a tap, even when held | -1 | -| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | -| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | +| Property | Type | Description | Default | +| ---------------------------- | ------------- | ----------------------------------------------------------------------------------------- | ------------------ | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<2>` | | +| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | +| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | +| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | +| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | +| `global-quick-tap` | bool | If enabled, `quick-tap-ms` also applies when tapping another key and then this one. | false | +| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | +| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | The `flavor` property may be one of: - `"hold-preferred"` - `"balanced"` - `"tap-preferred"` +- `"tap-unless-interrupted"` See the [hold-tap behavior documentation](/docs/behaviors/hold-tap) for an explanation of each flavor. +`hold-trigger-key-positions` is an array of zero-based key position indices. + +You can use the following nodes to tweak the default behaviors: + | Node | Behavior | | ----- | --------------------------------------------- | | `<` | [Layer-tap](/docs/behaviors/layers#layer-tap) | | `&mt` | [Mod-tap](/docs/behaviors/mod-tap) | +## Key Repeat + +Creates a custom behavior that repeats the whatever key code was last sent. + +See the [key repeat behavior](/docs/behaviors/key-repeat) documentation for more details and examples. + +### Devicetree + +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-key-repeat.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-key-repeat.yaml) + +Applies to: `compatible = "zmk,behavior-key-repeat"` + +| Property | Type | Description | Default | +| ---------------- | ------ | -------------------------------- | ----------------- | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<0>` | | +| `usage-pages` | array | List of HID usage pages to track | `` | + +For the `usage-pages` property, use the `HID_USAGE_*` defines from [dt-bindings/zmk/hid_usage_pages.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/hid_usage_pages.h). + +You can use the following nodes to tweak the default behaviors: + +| Node | Behavior | +| ------------- | ---------------------------------------- | +| `&key_repeat` | [Key repeat](/docs/behaviors/key-repeat) | + +## Macro + +Creates a custom behavior which triggers a sequence of other behaviors. + +See the [macro behavior](/docs/behaviors/macros) documentation for more details and examples. + +### Devicetree + +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro.yaml) + +Applies to: `compatible = "zmk,behavior-macro"` + +| Property | Type | Description | Default | +| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ------- | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<0>` | | +| `bindings` | phandle array | List of behaviors to trigger | | +| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | 100 | +| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | 100 | + +The following macro-specific behaviors can be added at any point in the `bindings` list to change how the macro triggers subsequent behaviors. + +| Behavior | Description | +| -------------------------- | ----------------------------------------------------------------------------------------------------- | +| `¯o_tap` | Switches to tap mode | +| `¯o_press` | Switches to press mode | +| `¯o_release` | Switches to release mode | +| `¯o_pause_for_release` | Pauses the macro until the macro key itself is released | +| `¯o_wait_time TIME` | Changes the time to wait (in milliseconds) before triggering the next behavior. | +| `¯o_tap_time TIME` | Changes the time to wait (in milliseconds) between the press and release events of a tapped behavior. | + ## Mod-Morph -Creates a custom behavior that triggers one behavior when a key is pressed without certain modifiers held or a different one if certain modifiers are held. +Creates a custom behavior that triggers one of two behaviors depending on whether certain modifiers are held. ### Devicetree +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-mod-morph.yaml) + Applies to: `compatible = "zmk,behavior-mod-morph"` -| Property | Type | Description | -| ---------------- | ------------- | ----------------------------------------------------------------------------------- | -| `label` | string | Unique label for the node | -| `#binding-cells` | int | Must be `<0>` | -| `bindings` | phandle array | A list of two behaviors: one for normal press and one for mod morphed press | -| `mods` | int | A bit field of modifiers which will switch to the morph behavior if any are pressed | +| Property | Type | Description | +| ---------------- | ------------- | --------------------------------------------------------------------------------- | +| `label` | string | Unique label for the node | +| `#binding-cells` | int | Must be `<0>` | +| `bindings` | phandle array | A list of two behaviors: one for normal press and one for mod morphed press | +| `mods` | int | A bit field of modifiers. The morph behavior is used if any of these are pressed. | See [dt-bindings/zmk/modifiers.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/modifiers.h) for a list of modifiers. @@ -73,6 +170,8 @@ See the [sticky key behavior](/docs/behaviors/sticky-key) and [sticky layer beha ### Devicetree +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sticky-key.yaml) + Applies to: `compatible = "zmk,behavior-sticky-key"` | Property | Type | Description | Default | @@ -82,6 +181,7 @@ Applies to: `compatible = "zmk,behavior-sticky-key"` | `bindings` | phandle array | A behavior (without parameters) to trigger | | | `release-after-ms` | int | Releases the key after this many milliseconds if no other key is pressed | 1000 | | `quick-release` | bool | Release the sticky key on the next key press instead of release | false | +| `ignore-modifiers` | bool | If enabled, pressing a modifier key does not cancel the sticky key | true | You can use the following nodes to tweak the default behaviors: @@ -89,3 +189,20 @@ You can use the following nodes to tweak the default behaviors: | ----- | -------------------------------------------- | | `&sk` | [Sticky key](/docs/behaviors/sticky-key) | | `&sl` | [Sticky layer](/docs/behaviors/sticky-layer) | + +## Tap Dance + +Creates a custom behavior that triggers a different behavior corresponding to the number of times the key is tapped. + +### Devicetree + +Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-tap-dance.yaml) + +Applies to: `compatible = "zmk,behavior-tap-dance"` + +| Property | Type | Description | Default | +| ----------------- | ------------- | -------------------------------------------------------------------------------------------- | ------- | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<0>` | | +| `bindings` | phandle array | A list of behaviors from which to select | | +| `tapping-term-ms` | int | The maximum time (in milliseconds) between taps before an item from `bindings` is triggered. | 200 | From 71b8f9d4acc0e1a5ba8a077d7efa78756fbe665c Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 20:46:23 -0500 Subject: [PATCH 0478/1130] feat(docs): Update display config docs --- docs/docs/config/displays.md | 39 ++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/docs/docs/config/displays.md b/docs/docs/config/displays.md index 93d314a8233..685540b72cc 100644 --- a/docs/docs/config/displays.md +++ b/docs/docs/config/displays.md @@ -22,22 +22,39 @@ Definition files: | `CONFIG_ZMK_WIDGET_OUTPUT_STATUS` | bool | Enable a widget to show the current output (USB/BLE) | y | | `CONFIG_ZMK_WIDGET_WPM_STATUS` | bool | Enable a widget to show words per minute | n | -If `CONFIG_ZMK_DISPLAY` is enabled, exactly one of the following options must be set to `y`: +If `CONFIG_ZMK_DISPLAY` is enabled, exactly zero or one of the following options must be set to `y`. The first option is used if none are set. -| Config | Type | Description | Default | -| ------------------------------------------- | ---- | ------------------------------ | ------- | -| `CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN` | bool | Use the built-in status screen | y | -| `CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM` | bool | Use a custom status screen | n | +| Config | Description | +| ------------------------------------------- | ------------------------------ | +| `CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN` | Use the built-in status screen | +| `CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM` | Use a custom status screen | -You must also configure the Zephyr driver for your display. Here are the Kconfig options for common displays. +If `CONFIG_ZMK_DISPLAY` is enabled, exactly zero or one of the following options must be set to `y`. The first option is used if none are set. -- [SSD1306](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_SSD1306.html) +| Config | Description | +| ----------------------------------------- | ----------------------------------------- | +| `CONFIG_ZMK_DISPLAY_WORK_QUEUE_SYSTEM` | Use the system main thread for UI updates | +| `CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED` | Use a dedicated thread for UI updates | + +Using a dedicated thread requires more memory but prevents displays with slow updates (e.g. E-paper) from delaying key scanning and other processes. If enabled, the following options configure the thread: + +| Config | Type | Description | Default | +| ------------------------------------------------ | ---- | ---------------------------- | ------- | +| `CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE` | int | Stack size for the UI thread | 2048 | +| `CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY` | int | Priority for the UI thread | 5 | + +You must also configure the driver for your display. ZMK provides the following display drivers: + +- [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/display/Kconfig.il0323) + +Zephyr provides several display drivers as well. Search for the name of your display in [Zephyr's Kconfig options](https://docs.zephyrproject.org/latest/kconfig.html) documentation. ## Devicetree -See the Zephyr Devicetree bindings for your display. Here are the bindings for common displays: +See the Devicetree bindings for your display. Here are the bindings for common displays: -- [SSD1306 (i2c)](https://docs.zephyrproject.org/latest/reference/devicetree/bindings/solomon,ssd1306fb-i2c.html) -- [SSD1306 (spi)](https://docs.zephyrproject.org/latest/reference/devicetree/bindings/solomon,ssd1306fb-spi.html) +- [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/display/gooddisplay%2Cil0323.yaml) +- [SSD1306 (i2c)](https://docs.zephyrproject.org/latest/build/dts/api/bindings/display/solomon,ssd1306fb-i2c.html) +- [SSD1306 (spi)](https://docs.zephyrproject.org/latest/build/dts/api/bindings/display/solomon,ssd1306fb-spi.html) -A full list of supported drivers can be found in [Zephyr's Devicetree bindings index](https://docs.zephyrproject.org/latest/reference/devicetree/bindings.html). +A full list of drivers provided by Zephyr can be found in [Zephyr's Devicetree bindings index](https://docs.zephyrproject.org/latest/build/dts/api/bindings.html). From e46eaf5617fd84b18aa6b0512f6407a8c1e28a69 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 21:10:37 -0500 Subject: [PATCH 0479/1130] feat(docs): Update power config docs --- docs/docs/config/power.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index c3dae3de88b..54e44e5795a 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -50,16 +50,8 @@ Applies to: `compatible = "zmk,ext-power-generic"` Driver for reading the voltage of a battery using an ADC connected to a voltage divider. -### Kconfig - -Definition file: [zmk/app/drivers/sensor/battery_voltage_divider/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/sensor/battery_voltage_divider/Kconfig) - -| Config | Type | Description | Default | -| ------------------------------------ | ---- | ------------------------------------------------------------ | ------- | -| `CONFIG_ZMK_BATTERY_VOLTAGE_DIVIDER` | bool | Enable battery voltage divider driver for battery monitoring | n | - ### Devicetree Applies to: `compatible = "zmk,battery-voltage-divider"` -See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/latest/reference/devicetree/bindings/voltage-divider.html). +See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/latest/build/dts/api/bindings/adc/voltage-divider.html). From e8e6b2a33311651be4b6fa1367a39408f60268ce Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 21:10:49 -0500 Subject: [PATCH 0480/1130] feat(docs): Update general system config docs --- docs/docs/config/index.md | 2 +- docs/docs/config/system.md | 72 +++++++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 71058237097..9f24c5a36fe 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -72,7 +72,7 @@ CONFIG_EC11=y CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y ``` -The list of available settings is determined by various files in ZMK whose names start with `Kconfig`. +The list of available settings is determined by various files in ZMK whose names start with `Kconfig`. Note that options are _not_ prefixed with `CONFIG_` in these files. See [Zephyr's Kconfig documentation](https://docs.zephyrproject.org/latest/guides/kconfig/index.html) for more details on Kconfig files. diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 86bf24c721b..930ec1e5107 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -20,6 +20,32 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | | `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | +### HID + +| Config | Type | Description | Default | +| ------------------------------------- | ---- | ------------------------------------------------- | ------- | +| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | + +Exactly zero or one of the following options may be set to `y`. The first is used if none are set. + +| Config | Description | +| --------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `CONFIG_ZMK_HID_REPORT_TYPE_HKRO` | Enable `CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE` key roll over. | +| `CONFIG_ZMK_HID_REPORT_TYPE_NKRO` | Enable full N-key roll over. This may prevent the keyboard from working with some BIOS/UEFI versions. | + +If `CONFIG_ZMK_HID_REPORT_TYPE_HKRO` is enabled, it may be configured with the following options: + +| Config | Type | Description | Default | +| ------------------------------------- | ---- | ------------------------------------------------- | ------- | +| `CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE` | int | Number of keyboard keys simultaneously reportable | 6 | + +Exactly zero or one of the following options may be set to `y`. The first is used if none are set. + +| Config | Description | +| --------------------------------------------- | ------------------------------------------------------------------------------------ | +| `CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL` | Enable all consumer key codes, but may have compatibility issues with some host OSes | +| `CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC` | Prevents using some consumer key codes, but allows compatibility with more host OSes | + ### USB | Config | Type | Description | Default | @@ -28,7 +54,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | `CONFIG_USB_DEVICE_VID` | int | The vendor ID advertised to USB | `0x1D50` | | `CONFIG_USB_DEVICE_PID` | int | The product ID advertised to USB | `0x615E` | | `CONFIG_USB_DEVICE_MANUFACTURER` | string | The manufacturer name advertised to USB | `"ZMK Project"` | -| `CONFIG_USB_HID_POLL_INTERVAL_MS` | int | USB polling interval in milliseconds | 9 | +| `CONFIG_USB_HID_POLL_INTERVAL_MS` | int | USB polling interval in milliseconds | 1 | | `CONFIG_ZMK_USB` | bool | Enable ZMK as a USB keyboard | | | `CONFIG_ZMK_USB_INIT_PRIORITY` | int | USB init priority | 50 | @@ -37,26 +63,30 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ See [Zephyr's Bluetooth stack architecture documentation](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-arch.html) for more information on configuring Bluetooth. -| Config | Type | Description | Default | -| ----------------------------------------------------- | ---- | ---------------------------------------------------------------------- | ------- | -| `CONFIG_BT` | bool | Enable Bluetooth support | | -| `CONFIG_BT_MAX_CONN` | int | Maximum number of simultaneous Bluetooth connections | 5 | -| `CONFIG_BT_MAX_PAIRED` | int | Maximum number of paired Bluetooth devices | 5 | -| `CONFIG_ZMK_BLE` | bool | Enable ZMK as a Bluetooth keyboard | | -| `CONFIG_ZMK_BLE_INIT_PRIORITY` | int | BLE init priority | 50 | -| `CONFIG_ZMK_BLE_THREAD_STACK_SIZE` | int | Stack size of the BLE notify thread | 512 | -| `CONFIG_ZMK_BLE_THREAD_PRIORITY` | int | Priority of the BLE notify thread | 5 | -| `CONFIG_ZMK_BLE_KEYBOARD_REPORT_QUEUE_SIZE` | int | Max number of keyboard HID reports to queue for sending over BLE | 20 | -| `CONFIG_ZMK_BLE_CONSUMER__REPORT_QUEUE_SIZE` | int | Max number of consumer HID reports to queue for sending over BLE | 5 | -| `CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START` | bool | Clears all bond information from the keyboard on startup | n | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Experimental: require typing passkey from host to pair BLE connection | n | -| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | -| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | -| `CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the split peripheral BLE notify thread | 512 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the split peripheral BLE notify thread | 5 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | +| Config | Type | Description | Default | +| ----------------------------------------------------- | ---- | ----------------------------------------------------------------------- | ------- | +| `CONFIG_BT` | bool | Enable Bluetooth support | | +| `CONFIG_BT_MAX_CONN` | int | Maximum number of simultaneous Bluetooth connections | 5 | +| `CONFIG_BT_MAX_PAIRED` | int | Maximum number of paired Bluetooth devices | 5 | +| `CONFIG_ZMK_BLE` | bool | Enable ZMK as a Bluetooth keyboard | | +| `CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START` | bool | Clears all bond information from the keyboard on startup | n | +| `CONFIG_ZMK_BLE_CONSUMER_REPORT_QUEUE_SIZE` | int | Max number of consumer HID reports to queue for sending over BLE | 5 | +| `CONFIG_ZMK_BLE_KEYBOARD_REPORT_QUEUE_SIZE` | int | Max number of keyboard HID reports to queue for sending over BLE | 20 | +| `CONFIG_ZMK_BLE_INIT_PRIORITY` | int | BLE init priority | 50 | +| `CONFIG_ZMK_BLE_THREAD_PRIORITY` | int | Priority of the BLE notify thread | 5 | +| `CONFIG_ZMK_BLE_THREAD_STACK_SIZE` | int | Stack size of the BLE notify thread | 512 | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Experimental: require typing passkey from host to pair BLE connection | n | +| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | +| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | +| `CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | +| `CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | +| `CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | + +Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the same value. On a split keyboard they should only be set for the central and must be set to one greater than the desired number of bluetooth profiles. ### Logging From 2b122acfc38f82f3a681dbac7b6d47c60d6e6268 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 21:21:07 -0500 Subject: [PATCH 0481/1130] feat(docs): Updating lighting config docs --- docs/docs/config/backlight.md | 36 +++++++++++++++++++++++++++++++++++ docs/docs/config/underglow.md | 6 +++--- docs/sidebars.js | 1 + 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 docs/docs/config/backlight.md diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md new file mode 100644 index 00000000000..814a29a12ce --- /dev/null +++ b/docs/docs/config/backlight.md @@ -0,0 +1,36 @@ +--- +title: Backlight Configuration +sidebar_label: Backlight +--- + +See the [backlight feature page](/docs/features/backlight) for more details, including instructions for adding backlight support to a board. + +See [Configuration Overview](/docs/config) for instructions on how to change these settings. + +## Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Option | Type | Description | Default | +| ------------------------------------ | ---- | ----------------------------------------------------- | ------- | +| `CONFIG_ZMK_BACKLIGHT` | bool | Enables LED backlight | n | +| `CONFIG_ZMK_BACKLIGHT_BRT_STEP` | int | Brightness step in percent | 20 | +| `CONFIG_ZMK_BACKLIGHT_BRT_START` | int | Default brightness in percent | 40 | +| `CONFIG_ZMK_BACKLIGHT_ON_START` | bool | Default backlight state | y | +| `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | bool | Turn off backlight when keyboard goes into idle state | n | +| `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB` | bool | Turn off backlight when USB is disconnected | n | + +## Devicetree + +Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/build/dts/intro.html#aliases-and-chosen-nodes) + +| Property | Type | Description | +| --------------- | ---- | -------------------------------------------- | +| `zmk,backlight` | path | The node for the backlight LED driver to use | + +See the Zephyr devicetree bindings for LED drivers: + +- [gpio-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/gpio/gpio-leds.html) +- [pwm-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/led/pwm-leds.html) + +See the [backlight feature page](/docs/features/backlight) for examples of the properties that must be set to enable backlighting. diff --git a/docs/docs/config/underglow.md b/docs/docs/config/underglow.md index 256e1b4f1d1..4b74236262e 100644 --- a/docs/docs/config/underglow.md +++ b/docs/docs/config/underglow.md @@ -5,11 +5,11 @@ sidebar_label: RGB Underglow See the [RGB Underglow feature page](/docs/features/underglow) for more details, including instructions for adding underglow support to a board. -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](/docs/config) for instructions on how to change these settings. ## Kconfig -RGB underglow depends on [Zephyr's LED strip driver](https://github.com/zephyrproject-rtos/zephyr/tree/master/drivers/led_strip), which provides additional Kconfig options. +RGB underglow depends on [Zephyr's LED strip driver](https://github.com/zephyrproject-rtos/zephyr/tree/main/drivers/led_strip), which provides additional Kconfig options. Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) @@ -38,6 +38,6 @@ Values for `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START`: ## Devicetree -ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip driver](https://github.com/zephyrproject-rtos/zephyr/tree/master/dts/bindings/led_strip). +ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip drivers](https://github.com/zephyrproject-rtos/zephyr/tree/main/dts/bindings/led_strip). See the [RGB underglow feature page](/docs/features/underglow) for examples of the properties that must be set to enable underglow. diff --git a/docs/sidebars.js b/docs/sidebars.js index b8e74e0fdb1..231d4f71c4e 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -54,6 +54,7 @@ module.exports = { ], Configuration: [ "config/index", + "config/backlight", "config/behaviors", "config/combos", "config/displays", From c350f7130beb8153ffc717d7567a7aff0d9734a3 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 21:22:13 -0500 Subject: [PATCH 0482/1130] fix(docs): Fix links in config pages --- docs/docs/config/backlight.md | 6 +++--- docs/docs/config/behaviors.md | 26 +++++++++++++------------- docs/docs/config/combos.md | 6 +++--- docs/docs/config/displays.md | 4 ++-- docs/docs/config/encoders.md | 4 ++-- docs/docs/config/index.md | 2 +- docs/docs/config/keymap.md | 8 ++++---- docs/docs/config/kscan.md | 4 ++-- docs/docs/config/power.md | 4 ++-- docs/docs/config/system.md | 2 +- docs/docs/config/underglow.md | 6 +++--- docs/docs/customization.md | 2 +- docs/docs/features/underglow.md | 2 +- 13 files changed, 38 insertions(+), 38 deletions(-) diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md index 814a29a12ce..abdbc82b12b 100644 --- a/docs/docs/config/backlight.md +++ b/docs/docs/config/backlight.md @@ -3,9 +3,9 @@ title: Backlight Configuration sidebar_label: Backlight --- -See the [backlight feature page](/docs/features/backlight) for more details, including instructions for adding backlight support to a board. +See the [backlight feature page](../features/backlight.md) for more details, including instructions for adding backlight support to a board. -See [Configuration Overview](/docs/config) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Kconfig @@ -33,4 +33,4 @@ See the Zephyr devicetree bindings for LED drivers: - [gpio-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/gpio/gpio-leds.html) - [pwm-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/led/pwm-leds.html) -See the [backlight feature page](/docs/features/backlight) for examples of the properties that must be set to enable backlighting. +See the [backlight feature page](../features/backlight.md) for examples of the properties that must be set to enable backlighting. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 726f2bb2079..4a01dfd3b5a 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -5,7 +5,7 @@ sidebar_label: Behaviors Some behaviors have properties to adjust how they behave. These can also be used as templates to create custom behaviors when none of the built-in behaviors do what you want. -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. See the [zmk/app/dts/behaviors/](https://github.com/zmkfirmware/zmk/tree/main/app/dts/behaviors) folder for all default behaviors. @@ -13,7 +13,7 @@ See the [zmk/app/dts/behaviors/](https://github.com/zmkfirmware/zmk/tree/main/ap Creates a custom behavior that behaves similar to a caps lock but deactivates when any key not in a continue list is pressed. -See the [caps word behavior](/docs/behaviors/caps-word) documentation for more details and examples. +See the [caps word behavior](../behaviors/caps-word.md) documentation for more details and examples. ### Devicetree @@ -36,13 +36,13 @@ You can use the following nodes to tweak the default behaviors: | Node | Behavior | | ------------ | -------------------------------------- | -| `&caps_word` | [Caps Word](/docs/behaviors/caps-word) | +| `&caps_word` | [Caps Word](../behaviors/caps-word.md) | ## Hold-Tap Creates a custom behavior that triggers one behavior when a key is held or a different one when the key is tapped. -See the [hold-tap behavior documentation](/docs/behaviors/hold-tap) for more details and examples. +See the [hold-tap behavior documentation](../behaviors/hold-tap.md) for more details and examples. ### Devicetree @@ -69,7 +69,7 @@ The `flavor` property may be one of: - `"tap-preferred"` - `"tap-unless-interrupted"` -See the [hold-tap behavior documentation](/docs/behaviors/hold-tap) for an explanation of each flavor. +See the [hold-tap behavior documentation](../behaviors/hold-tap.md) for an explanation of each flavor. `hold-trigger-key-positions` is an array of zero-based key position indices. @@ -77,14 +77,14 @@ You can use the following nodes to tweak the default behaviors: | Node | Behavior | | ----- | --------------------------------------------- | -| `<` | [Layer-tap](/docs/behaviors/layers#layer-tap) | -| `&mt` | [Mod-tap](/docs/behaviors/mod-tap) | +| `<` | [Layer-tap](../behaviors/layers.md#layer-tap) | +| `&mt` | [Mod-tap](../behaviors/mod-tap.md) | ## Key Repeat Creates a custom behavior that repeats the whatever key code was last sent. -See the [key repeat behavior](/docs/behaviors/key-repeat) documentation for more details and examples. +See the [key repeat behavior](../behaviors/key-repeat.md) documentation for more details and examples. ### Devicetree @@ -104,13 +104,13 @@ You can use the following nodes to tweak the default behaviors: | Node | Behavior | | ------------- | ---------------------------------------- | -| `&key_repeat` | [Key repeat](/docs/behaviors/key-repeat) | +| `&key_repeat` | [Key repeat](../behaviors/key-repeat.md) | ## Macro Creates a custom behavior which triggers a sequence of other behaviors. -See the [macro behavior](/docs/behaviors/macros) documentation for more details and examples. +See the [macro behavior](../behaviors/macros.md) documentation for more details and examples. ### Devicetree @@ -166,7 +166,7 @@ You can use the following nodes to tweak the default behaviors: Creates a custom behavior that triggers a behavior and keeps it pressed it until another key is pressed and released. -See the [sticky key behavior](/docs/behaviors/sticky-key) and [sticky layer behavior](/docs/behaviors/sticky-layer) documentation for more details and examples. +See the [sticky key behavior](../behaviors/sticky-key.md) and [sticky layer behavior](../behaviors/sticky-layer.md) documentation for more details and examples. ### Devicetree @@ -187,8 +187,8 @@ You can use the following nodes to tweak the default behaviors: | Node | Behavior | | ----- | -------------------------------------------- | -| `&sk` | [Sticky key](/docs/behaviors/sticky-key) | -| `&sl` | [Sticky layer](/docs/behaviors/sticky-layer) | +| `&sk` | [Sticky key](../behaviors/sticky-key.md) | +| `&sl` | [Sticky layer](../behaviors/sticky-layer.md) | ## Tap Dance diff --git a/docs/docs/config/combos.md b/docs/docs/config/combos.md index fe8877ef76d..479cd8e5260 100644 --- a/docs/docs/config/combos.md +++ b/docs/docs/config/combos.md @@ -3,9 +3,9 @@ title: Combo Configuration sidebar_label: Combos --- -See the [Combos feature page](/docs/features/combos) for more details and examples. +See the [Combos feature page](../features/combos.md) for more details and examples. -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Kconfig @@ -33,7 +33,7 @@ Each child node can have the following properties: | Property | Type | Description | Default | | --------------- | ------------- | ---------------------------------------------------------------------------------- | ------- | -| `bindings` | phandle-array | A [behavior](/docs/features/keymaps#behaviors) to run when the combo is triggered | | +| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | | `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | | `timeout-ms` | int | All the keys must be pressed within this time in milliseconds to trigger the combo | 50 | | `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | diff --git a/docs/docs/config/displays.md b/docs/docs/config/displays.md index 685540b72cc..cf6c07ee46b 100644 --- a/docs/docs/config/displays.md +++ b/docs/docs/config/displays.md @@ -3,9 +3,9 @@ title: Display Configuration sidebar_label: Displays --- -See the [displays feature page](/docs/features/displays) for more details. +See the [displays feature page](../features/displays.md) for more details. -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Kconfig diff --git a/docs/docs/config/encoders.md b/docs/docs/config/encoders.md index 28440738739..f6bd6de1495 100644 --- a/docs/docs/config/encoders.md +++ b/docs/docs/config/encoders.md @@ -3,9 +3,9 @@ title: Encoder Configuration sidebar_label: Encoders --- -See the [Encoders feature page](/docs/features/encoders) for more details, including instructions for adding encoder support to a board. +See the [Encoders feature page](../features/encoders.md) for more details, including instructions for adding encoder support to a board. -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## EC11 Encoders diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 9f24c5a36fe..1762839ff64 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -58,7 +58,7 @@ ZMK will search the shield folder for the following config files: - `.overlay` (Devicetree) - `.keymap` (Devicetree) -For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/latest/guides/porting/shields.html) and [ZMK's new keyboard shield](/docs/development/new-shield) guide. +For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/latest/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/new-shield.md) guide. ## Kconfig Files diff --git a/docs/docs/config/keymap.md b/docs/docs/config/keymap.md index 917b82c632c..b4e81f5edcb 100644 --- a/docs/docs/config/keymap.md +++ b/docs/docs/config/keymap.md @@ -3,7 +3,7 @@ title: Keymap Configuration sidebar_label: Keymap --- -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Keymap @@ -20,10 +20,10 @@ Each child node can have the following properties: | Property | Type | Description | | ----------------- | ------------- | ---------------------------------------------------------------------- | | `label` | string | Unique label for the node | -| `bindings` | phandle-array | List of [key behaviors](/docs/features/keymaps#behaviors), one per key | +| `bindings` | phandle-array | List of [key behaviors](../features/keymaps.md#behaviors), one per key | | `sensor-bindings` | phandle-array | List of sensor behaviors, one per sensor | -Items for `bindings` must be listed in the order the keys are defined in the [keyboard scan configuration](/docs/config/kscan). +Items for `bindings` must be listed in the order the keys are defined in the [keyboard scan configuration](kscan.md). Items for `sensor-bindings` must be listed in the order the [sensors](#keymap-sensors) are defined. @@ -39,4 +39,4 @@ Applies to: `compatible = "zmk,keymap-sensors"` The following types of nodes can be used as a sensor: -- [`alps,ec11`](/docs/config/encoders#ec11-encoders) +- [`alps,ec11`](encoders.md#ec11-encoders) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 379107569a8..410f55884e0 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -3,7 +3,7 @@ title: Keyboard Scan Configuration sidebar_label: Keyboard Scan --- -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Common @@ -250,7 +250,7 @@ Transforms should be used any time the physical layout of a keyboard's keys does Transforms can also be used for keyboards with multiple layouts. You can define multiple matrix transform nodes, one for each layout, and users can select which one they want from the `/chosen` node in their keymaps. -See the [new shield guide](/docs/development/new-shield/#optional-matrix-transform) for more documentation on how to define a matrix transform. +See the [new shield guide](../development/new-shield.md#optional-matrix-transform) for more documentation on how to define a matrix transform. ### Devicetree diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index 54e44e5795a..bf0de718685 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -3,7 +3,7 @@ title: Power Management Configuration sidebar_label: Power Management --- -See [Configuration Overview](/docs/config/index) for instructions on how to +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Idle/Sleep @@ -26,7 +26,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ## External Power Control -Driver for enabling or disabling power to peripherals such as displays and lighting. This driver must be configured to use [power management behaviors](/docs/behaviors/power). +Driver for enabling or disabling power to peripherals such as displays and lighting. This driver must be configured to use [power management behaviors](../behaviors/power.md). ### Kconfig diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 930ec1e5107..cf88c4f5a17 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -5,7 +5,7 @@ sidebar_label: System These are general settings that control how the keyboard behaves and which features it supports. Several of these settings come from Zephyr and are not specific to ZMK, but they are listed here because they are relevant to how a keyboard functions. -See [Configuration Overview](/docs/config/index) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Kconfig diff --git a/docs/docs/config/underglow.md b/docs/docs/config/underglow.md index 4b74236262e..6353330d9cb 100644 --- a/docs/docs/config/underglow.md +++ b/docs/docs/config/underglow.md @@ -3,9 +3,9 @@ title: RGB Underglow Configuration sidebar_label: RGB Underglow --- -See the [RGB Underglow feature page](/docs/features/underglow) for more details, including instructions for adding underglow support to a board. +See the [RGB Underglow feature page](../features/underglow.md) for more details, including instructions for adding underglow support to a board. -See [Configuration Overview](/docs/config) for instructions on how to change these settings. +See [Configuration Overview](index.md) for instructions on how to change these settings. ## Kconfig @@ -40,4 +40,4 @@ Values for `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START`: ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip drivers](https://github.com/zephyrproject-rtos/zephyr/tree/main/dts/bindings/led_strip). -See the [RGB underglow feature page](/docs/features/underglow) for examples of the properties that must be set to enable underglow. +See the [RGB underglow feature page](../features/underglow.md) for examples of the properties that must be set to enable underglow. diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 1ffc38ccf8d..6fb39f85015 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -23,7 +23,7 @@ The setup script creates a `config/.conf` file that allows you to add ad control what features and options are built into your firmware. Opening that file with your text editor will allow you to see the various config settings that can be commented/uncommented to modify how your firmware is built. -Refer to the [Configuration](/docs/config/index) documentation for more details on this file. +Refer to the [Configuration](/docs/config) documentation for more details on this file. ## Keymap diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index d1cd8e20b65..af182faee9f 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -34,7 +34,7 @@ CONFIG_ZMK_RGB_UNDERGLOW=y CONFIG_WS2812_STRIP=y ``` -See [Configuration Overview](/docs/config/index) for more instructions on how to +See [Configuration Overview](/docs/config) for more instructions on how to use Kconfig. If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). From 01ffea1b47c3b94d542ba07ae774774ad2734845 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 29 Apr 2022 21:37:38 -0500 Subject: [PATCH 0483/1130] feat(docs): Update configuration overview --- docs/docs/config/index.md | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 1762839ff64..a6cb337e08f 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -3,7 +3,7 @@ title: Configuration Overview sidebar_label: Overview --- -ZMK has several configuration settings that can be changed to change the behavior of your keyboard. They are set in either Kconfig or Devicetree files. +ZMK has many configuration settings that can be changed to change the behavior of your keyboard. They are set in either Kconfig or Devicetree files. This page describes the Kconfig and Devicetree file formats and how to change settings in them. See the other pages in the configuration section for a list of settings you can change. @@ -41,7 +41,7 @@ ZMK will search the board folder for the following config files: - `.dts` (Devicetree) - `.keymap` (Devictree, standalone boards only) -For more documentation on creating and configuring a new board, see [Zephyr's board porting guide](https://docs.zephyrproject.org/latest/guides/porting/board_porting.html#write-kconfig-files). +For more documentation on creating and configuring a new board, see [Zephyr's board porting guide](https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html#write-kconfig-files). ### Shield Folder @@ -74,7 +74,7 @@ CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y The list of available settings is determined by various files in ZMK whose names start with `Kconfig`. Note that options are _not_ prefixed with `CONFIG_` in these files. -See [Zephyr's Kconfig documentation](https://docs.zephyrproject.org/latest/guides/kconfig/index.html) for more details on Kconfig files. +See [Zephyr's Kconfig documentation](https://docs.zephyrproject.org/latest/build/kconfig/index.html) for more details on Kconfig files. ### KConfig Value Types @@ -117,7 +117,7 @@ Devicetree files look like this: Devicetree properties apply to specific nodes in the tree instead of globally. The properties that can be set for each node are determined by `.yaml` files in ZMK in the various `dts/bindings` folders. -See [Zephyr's Devicetree guide](https://docs.zephyrproject.org/latest/guides/dts/index.html) for more details on Devicetree files. +See [Zephyr's Devicetree guide](https://docs.zephyrproject.org/latest/build/dts/index.html) for more details on Devicetree files. ### Changing Devicetree Properties @@ -138,7 +138,7 @@ The part before the colon, `kscan0`, is a label. This is optional, and it provid The `compatible` property indicates what type of node it is. Search this documentation for the text inside the quotes to see which properties the node supports. You can also search ZMK for a file whose name is the value of the `compatible` property with a `.yaml` file extension. -To set a property, see below for examples for common property types, or see [Zephyr's Devicetree documentation](https://docs.zephyrproject.org/latest/guides/dts/intro.html#writing-property-values) for more details on the syntax for properties. +To set a property, see below for examples for common property types, or see [Zephyr's Devicetree documentation](https://docs.zephyrproject.org/latest/build/dts/intro.html#writing-property-values) for more details on the syntax for properties. To change a property for an existing node, first find the node you want to change and find its label. Next, outside of any other node, write an ampersand (`&`) followed by the node's label, an opening curly brace (`{`), one or more new property values, a closing curly brace (`}`), and a semicolon (`;`). @@ -147,13 +147,23 @@ For example, to adjust the debouncing of the `zmk,kscan-gpio-matrix` node shown ```devicetree &kscan0 { - debounce-period = <7>; + debounce-press-ms = <0>; +}; +``` + +If the node you want to edit doesn't have a label, you can also write a new tree and it will be merged with the existing tree, overriding any properties. Adding this to your keymap would be equivalent to the previous example. + +```devicetree +/ { + kscan { + debounce-press-ms = <0>; + }; }; ``` ### Devicetree Property Types -These are some of the property types you will see most often when working with ZMK. [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/latest/guides/dts/bindings.html) provides more detailed information and a full list of types. +These are some of the property types you will see most often when working with ZMK. [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/latest/build/dts/bindings.html) provides more detailed information and a full list of types. #### bool @@ -207,14 +217,14 @@ Example: `property = <&none &mo 1>;` Values can also be split into multiple blocks, e.g. `property = <&none>, <&mo 1>;` -See the documentation for "phandle-array" in [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/latest/guides/dts/bindings.html) +See the documentation for "phandle-array" in [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/latest/build/dts/bindings.html) for more details on how parameters are associated with nodes. #### GPIO array This is just a phandle array. The documentation lists this as a different type to make it clear which properties expect an array of GPIOs. -Each item in the array should be a label for a GPIO node (the names of which differ between hardware platforms) followed by an index and configuration flags. See [Zephyr's GPIO documentation](https://docs.zephyrproject.org/latest/reference/peripherals/gpio.html) for a full list of flags. +Each item in the array should be a label for a GPIO node (the names of which differ between hardware platforms) followed by an index and configuration flags. See [Zephyr's GPIO documentation](https://docs.zephyrproject.org/latest/hardware/peripherals/gpio.html) for a full list of flags. Example: From e0e0928f9c185bd73ad1391605d945e5e3adaace Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Tue, 3 May 2022 21:28:41 -0500 Subject: [PATCH 0484/1130] fix(docs): Update config docs for review feedback --- docs/docs/config/combos.md | 16 ++++++++-------- docs/docs/config/kscan.md | 10 +++++++++- docs/docs/features/combos.md | 2 +- docs/docs/features/debouncing.md | 10 ++++++++-- docs/docs/features/underglow.md | 2 +- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/docs/docs/config/combos.md b/docs/docs/config/combos.md index 479cd8e5260..cd351125450 100644 --- a/docs/docs/config/combos.md +++ b/docs/docs/config/combos.md @@ -23,7 +23,7 @@ If you want a combo that triggers when pressing 5 keys, you must set `CONFIG_ZMK ## Devicetree -Applies to: `compatible = "zmk,combo"` +Applies to: `compatible = "zmk,combos"` Definition file: [zmk/app/dts/bindings/zmk,combos.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/zmk%2Ccombos.yaml) @@ -31,12 +31,12 @@ The `zmk,combos` node itself has no properties. It should have one child node pe Each child node can have the following properties: -| Property | Type | Description | Default | -| --------------- | ------------- | ---------------------------------------------------------------------------------- | ------- | -| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | -| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | -| `timeout-ms` | int | All the keys must be pressed within this time in milliseconds to trigger the combo | 50 | -| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | -| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | +| Property | Type | Description | Default | +| --------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ------- | +| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | +| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | +| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | +| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | +| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | The `key-positions` array must not be longer than the `CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO` setting, which defaults to 4. If you want a combo that triggers when pressing 5 keys, then you must change the setting to 5. diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 410f55884e0..d81d26b6349 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -21,7 +21,7 @@ Definition files: | `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS` | int | Global debounce time for key press in milliseconds | -1 | | `CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS` | int | Global debounce time for key release in milliseconds | -1 | -If the debounce press/release values are set to any value other than `-1`, they override the `debounce-press-ms` and `debounce-release-ms` devicetree properties for all keyboard scan drivers which support them. +If the debounce press/release values are set to any value other than `-1`, they override the `debounce-press-ms` and `debounce-release-ms` devicetree properties for all keyboard scan drivers which support them. See the [debouncing documentation](../features/debouncing.md) for more details. ### Devicetree @@ -36,6 +36,10 @@ Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/in Keyboard scan driver which works like a regular matrix but uses a demultiplexer to drive the rows or columns. This allows N GPIOs to drive N2 rows or columns instead of just N like with a regular matrix. +:::note +Currently this driver does not honor the `CONFIG_ZMK_KSCAN_DEBOUNCE_*` settings. +::: + ### Devicetree Applies to: `compatible = "zmk,kscan-gpio-demux"` @@ -54,6 +58,10 @@ Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-demux Keyboard scan driver where each key has a dedicated GPIO. +:::note +Currently this driver does not honor the `CONFIG_ZMK_KSCAN_DEBOUNCE_*` settings. +::: + ### Kconfig Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 5c73a8455ca..09191896190 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -25,7 +25,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - The name of the combo doesn't really matter, but convention is to start the node name with `combo_`. - The `compatible` property should always be `"zmk,combos"` for combos. -- All the keys must be pressed within `timeout-ms` milliseconds to trigger the combo. +- All the keys in `key-positions` must be pressed within `timeout-ms` milliseconds to trigger the combo. - `key-positions` is an array of key positions. See the info section below about how to figure out the positions on your board. - `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md index f0022a59626..9629131d7e7 100644 --- a/docs/docs/features/debouncing.md +++ b/docs/docs/features/debouncing.md @@ -19,14 +19,20 @@ socket or using some sharp tweezers to bend the contacts back together. ## Debounce Configuration +:::note +Currently only the `zmk,kscan-gpio-matrix` driver supports these options. The other drivers have not yet been updated to use the new debouncing code. +::: + ### Global Options You can set these options in your `.conf` file to control debouncing globally. -Values must be <= 127. +Values must be <= 16383. - `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS`: Debounce time for key press in milliseconds. Default = 5. - `CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS`: Debounce time for key release in milliseconds. Default = 5. +If one of these options is set, it overrides the matching per-driver option described below. + For example, this would shorten the debounce time for both press and release: ```ini @@ -37,7 +43,7 @@ CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=3 ### Per-driver Options You can add these Devicetree properties to a kscan node to control debouncing for -that instance of the driver. Values must be <= 127. +that instance of the driver. Values must be <= 16383. - `debounce-press-ms`: Debounce time for key press in milliseconds. Default = 5. - `debounce-release-ms`: Debounce time for key release in milliseconds. Default = 5. diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index af182faee9f..020701fdadf 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -145,7 +145,7 @@ Once you have your `led_strip` properly defined you need to add it to the root d }; ``` -Finally you need to enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `CONFIG*_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): +Finally you need to enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `CONFIG_*_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): ``` CONFIG_ZMK_RGB_UNDERGLOW=y From 74b49339800638b745cf0d1b196bb6c7371055be Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 21 May 2022 16:17:11 -0500 Subject: [PATCH 0485/1130] feat(docs): Clarify descriptions of config files --- docs/docs/config/index.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index a6cb337e08f..9e35df836a5 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -22,9 +22,9 @@ When building with a `zmk-config` folder, ZMK will search the `zmk-config/config - `.conf` (Kconfig) - `.keymap` (Devicetree) -These files hold your personal settings for the keyboard. They override any configuration set in the board or shield folders. +These files hold your personal settings for the keyboard. All files are optional. If present, they override any configuration set in the board or shield folders. Otherwise, the default configuration and/or keymap is used. -When using a split keyboard, you can use a single file without the `_left` or `_right` suffix to configure both sides. For example, `corne.conf` and `corne.keymap` will apply to both `corne_left` and `corne_right`. +When using a split keyboard, you can use a single file without the `_left` or `_right` suffix to configure both sides. For example, `corne.conf` and `corne.keymap` will apply to both `corne_left` and `corne_right`. If a shared config file exists, any left or right files will be ignored. ### Board Folder @@ -38,8 +38,11 @@ ZMK will search for config files in either of: ZMK will search the board folder for the following config files: - `_defconfig` (Kconfig) +- `.conf` (Kconfig) - `.dts` (Devicetree) -- `.keymap` (Devictree, standalone boards only) +- `.keymap` (Devicetree, keyboards with onboard controllers only) + +Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in board folders. For more documentation on creating and configuring a new board, see [Zephyr's board porting guide](https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html#write-kconfig-files). @@ -58,6 +61,8 @@ ZMK will search the shield folder for the following config files: - `.overlay` (Devicetree) - `.keymap` (Devicetree) +Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in shield folders. + For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/latest/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/new-shield.md) guide. ## Kconfig Files @@ -72,7 +77,7 @@ CONFIG_EC11=y CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y ``` -The list of available settings is determined by various files in ZMK whose names start with `Kconfig`. Note that options are _not_ prefixed with `CONFIG_` in these files. +The list of available settings is determined by various files in ZMK whose names start with `Kconfig`. Files ending with `_defconfig` use the same syntax, but are intended for setting configuration specific to the hardware which users typically won't need to change. Note that options are _not_ prefixed with `CONFIG_` in these files. See [Zephyr's Kconfig documentation](https://docs.zephyrproject.org/latest/build/kconfig/index.html) for more details on Kconfig files. @@ -98,7 +103,14 @@ Example: `CONFIG_FOO="foo"` ## Devicetree Files -Various Devicetree files are combined to build a tree that describes the hardware for a keyboard. They are also used to define keymaps. Common file extensions for Devicetree files are `.dts`, `.dtsi`, `.overlay`, and `.keymap`. +Various Devicetree files are combined to build a tree that describes the hardware for a keyboard. They are also used to define keymaps. + +Devicetree files use various file extensions. These indicate the purpose of the file, but they have no effect on how the file is processed. Common file extensions for Devicetree files include: + +- `.dts`: The base hardware definition. +- `.overlay`: Adds to and/or overrides definitions in a `.dts` file. +- `.keymap`: Holds a keymap and user-specific hardware configuration. +- `.dtsi`: A file which is only intended to be `#include`d from another file. Devicetree files look like this: From 6e67e4a3a52cc962aa4da2024ea42b9af1133583 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 21 May 2022 16:50:20 -0500 Subject: [PATCH 0486/1130] feat(docs): Update direct GPIO configuration --- docs/docs/config/kscan.md | 45 ++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index d81d26b6349..ac773f1885c 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -58,10 +58,6 @@ Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-demux Keyboard scan driver where each key has a dedicated GPIO. -:::note -Currently this driver does not honor the `CONFIG_ZMK_KSCAN_DEBOUNCE_*` settings. -::: - ### Kconfig Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) @@ -76,11 +72,20 @@ Applies to: `compatible = "zmk,kscan-gpio-direct"` Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-direct.yaml) -| Property | Type | Description | Default | -| ----------------- | ---------- | ------------------------------- | ------- | -| `label` | string | Unique label for the node | | -| `input-gpios` | GPIO array | Input GPIOs (one per key) | | -| `debounce-period` | int | Debounce period in milliseconds | 5 | +| Property | Type | Description | Default | +| ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ----------- | +| `label` | string | Unique label for the node | | +| `input-gpios` | GPIO array | Input GPIOs (one per key) | | +| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | +| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | +| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | +| `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | +| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `CONFIG_ZMK_KSCAN_DIRECT_POLLING` is enabled. | 10 | +| `toggle-mode` | bool | Use toggle switch mode. | n | + +By default, a switch will drain current through the internal pull up/down resistor whenever it is pressed. This is not ideal for a toggle switch, where the switch may be left in the "pressed" state for a long time. Enabling `toggle-mode` will make the driver flip between pull up and down as the switch is toggled to optimize for power. + +`toggle-mode` applies to all switches handled by the instance of the driver. To use a toggle switch with other, non-toggle, direct GPIO switches, create two instances of the direct GPIO driver, one with `toggle-mode` and the other without. Then, use a [composite driver](#composite-driver) to combine them. ## Matrix Driver @@ -98,16 +103,16 @@ Applies to: `compatible = "zmk,kscan-gpio-matrix"` Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-matrix.yaml) -| Property | Type | Description | Default | -| ------------------------- | ---------- | -------------------------------------------------------------------------------------------------- | ----------- | -| `label` | string | Unique label for the node | | -| `row-gpios` | GPIO array | Matrix row GPIOs in order, starting from the top row | | -| `col-gpios` | GPIO array | Matrix column GPIOs in order, starting from the leftmost row | | -| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | -| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | -| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | -| `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | -| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and ZMK_KSCAN_MATRIX_POLLING is enabled. | 10 | +| Property | Type | Description | Default | +| ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ----------- | +| `label` | string | Unique label for the node | | +| `row-gpios` | GPIO array | Matrix row GPIOs in order, starting from the top row | | +| `col-gpios` | GPIO array | Matrix column GPIOs in order, starting from the leftmost row | | +| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | +| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | +| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | +| `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | +| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `CONFIG_ZMK_KSCAN_MATRIX_POLLING` is enabled. | 10 | The `diode-direction` property must be one of: @@ -213,7 +218,7 @@ One possible way to do this is a 3x4 matrix where the direct GPIO keys are shift // Include the direct GPIO driver... direct { kscan = <&kscan2>; - row-offset = <3>; // ..and shift it to not overlap + row-offset = <3>; // ...and shift it to not overlap }; }; From 1646cd7f3048e98fb80b09bc56f458b237cfac61 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 21 May 2022 17:15:41 -0500 Subject: [PATCH 0487/1130] feat(docs): Add a simpler matrix transform example --- docs/docs/config/kscan.md | 65 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index ac773f1885c..984fd6ac9a9 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -281,7 +281,70 @@ Definition file: [zmk/app/dts/bindings/zmk,matrix-transform.yaml](https://github The `map` array should be defined using the `RC()` macro from [dt-bindings/zmk/matrix_transform.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/matrix_transform.h). It should have one item per logical position in the keymap. Each item should list the physical row and column that should trigger the key in that position. -### Example Configuration +### Example: Skipping Unused Positions + +Any keyboard which is not a grid of 1 unit keys will likely have some unused positions in the matrix. A matrix transform can be used to skip the unused positions so users don't have to set them to `&none` in keymaps. + +```devicetree +// numpad.overlay +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + rows = <5>; + columns = <4>; + // define the matrix... + }; + + default_transform: matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <5>; + columns = <4>; + // ┌───┬───┬───┬───┐ + // │NUM│ / │ * │ - │ + // ├───┼───┼───┼───┤ + // │ 7 │ 8 │ 9 │ + │ + // ├───┼───┼───┤ │ + // │ 4 │ 5 │ 6 │ │ + // ├───┼───┼───┼───┤ + // │ 1 │ 2 │ 3 │RET│ + // ├───┴───┼───┤ │ + // │ 0 │ . │ │ + // └───────┴───┴───┘ + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) + RC(2,0) RC(2,1) RC(2,2) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) + RC(4,0) RC(4,1) + >; + }; +}; +``` + +```devicetree +// numpad.keymap +/ { + keymap { + compatible = "zmk,keymap"; + default { + bindings = < + &kp KP_NUM &kp KP_DIV &kp KP_MULT &kp KP_MINUS + &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS + &kp KP_N4 &kp KP_N5 &kp KP_N6 + &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER + &kp KP_N0 &kp KP_DOT + >; + }; + } +}; +``` + +### Example: Non-standard Matrix Consider a keyboard with a [duplex matrix](https://wiki.ai03.com/books/pcb-design/page/matrices-and-duplex-matrix), where the matrix has twice as many rows and half as many columns as the keyboard has keys. A matrix transform can be used to correct for this so that keymaps can match the layout of the keys, not the layout of the matrix. From ae78aa247a99b0b0e7d77cf680c7e419955354ca Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 21 May 2022 17:48:27 -0500 Subject: [PATCH 0488/1130] feat(docs): Update power and lighting config pages Moved battery configuration to its own page to match the feature page. Documented that external power is disabled when in sleep mode. Clarified that the *_START configs apply on first boot, and any changes after that are persisted. --- docs/docs/config/backlight.md | 4 ++++ docs/docs/config/battery.md | 40 +++++++++++++++++++++++++++++++++++ docs/docs/config/behaviors.md | 6 +++--- docs/docs/config/power.md | 12 +---------- docs/docs/config/underglow.md | 4 ++++ docs/docs/features/battery.md | 2 ++ docs/sidebars.js | 3 ++- 7 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 docs/docs/config/battery.md diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md index abdbc82b12b..a3650766578 100644 --- a/docs/docs/config/backlight.md +++ b/docs/docs/config/backlight.md @@ -20,6 +20,10 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | bool | Turn off backlight when keyboard goes into idle state | n | | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB` | bool | Turn off backlight when USB is disconnected | n | +:::note +The `*_START` settings only determine the initial backlight state. Any changes you make with the [backlight behavior](../behaviors/backlight.md) are saved to flash after a one minute delay and will be used after that. +::: + ## Devicetree Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/build/dts/intro.html#aliases-and-chosen-nodes) diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md new file mode 100644 index 00000000000..73b4ee92933 --- /dev/null +++ b/docs/docs/config/battery.md @@ -0,0 +1,40 @@ +--- +title: Battery Level +sidebar_label: Battery Level +--- + +See the [battery level feature page](../features/battery.md) for more details on configuring a battery sensor. + +See [Configuration Overview](index.md) for instructions on how to change these settings. + +### Devicetree + +Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/intro.html#aliases-and-chosen-nodes) + +| Property | Type | Description | +| ------------- | ---- | --------------------------------------------- | +| `zmk,battery` | path | The node for the battery sensor driver to use | + +## Battery Voltage Divider Sensor + +Driver for reading the voltage of a battery using an ADC connected to a voltage divider. + +### Devicetree + +Applies to: `compatible = "zmk,battery-voltage-divider"` + +See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/latest/build/dts/api/bindings/adc/voltage-divider.html). + +## nRF VDDH Battery Sensor + +Driver for reading the voltage of a battery using a Nordic nRF52's VDDH pin. This driver has no configuration except for the required `label` property. + +### Devicetree + +Applies to: `compatible = "zmk,battery-nrf-vddh"` + +Definition file: [zmk/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/sensor/zmk%2Cbattery-nrf-vddh.yaml) + +| Property | Type | Description | +| -------- | ------ | ------------------------- | +| `label` | string | Unique label for the node | diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 4a01dfd3b5a..72db21d71be 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -158,9 +158,9 @@ See [dt-bindings/zmk/modifiers.h](https://github.com/zmkfirmware/zmk/blob/main/a You can use the following nodes to tweak the default behaviors: -| Node | Behavior | -| -------- | ------------ | -| `&gresc` | Grave escape | +| Node | Behavior | +| -------- | ----------------------------------------- | +| `&gresc` | [Grave escape](../behaviors/mod-morph.md) | ## Sticky Key diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index bf0de718685..e09045ed09d 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -12,7 +12,7 @@ Configuration for entering low power modes when the keyboard is idle. In the idle state, peripherals such as displays and lighting are disabled, but the keyboard remains connected to Bluetooth so it can immediately respond when you press a key. -In the deep sleep state, the keyboard additionally disconnects from Bluetooth. This state uses very little power, but it may take a few seconds to reconnect after waking. +In the deep sleep state, the keyboard additionally disconnects from Bluetooth and any external power output is disabled. This state uses very little power, but it may take a few seconds to reconnect after waking. ### Kconfig @@ -45,13 +45,3 @@ Applies to: `compatible = "zmk,ext-power-generic"` | `label` | string | Unique label for the node | | `control-gpios` | GPIO array | List of GPIOs which should be active to enable external power | | `init-delay-ms` | int | number of milliseconds to delay after initializing the driver | - -## Battery Voltage Divider - -Driver for reading the voltage of a battery using an ADC connected to a voltage divider. - -### Devicetree - -Applies to: `compatible = "zmk,battery-voltage-divider"` - -See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/latest/build/dts/api/bindings/adc/voltage-divider.html). diff --git a/docs/docs/config/underglow.md b/docs/docs/config/underglow.md index 6353330d9cb..f9d9e15d1a8 100644 --- a/docs/docs/config/underglow.md +++ b/docs/docs/config/underglow.md @@ -36,6 +36,10 @@ Values for `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START`: | 2 | Spectrum | | 3 | Swirl | +:::note +The `*_START` settings only determine the initial underglow state. Any changes you make with the [underglow behavior](../behaviors/underglow.md) are saved to flash after a one minute delay and will be used after that. +::: + ## Devicetree ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip drivers](https://github.com/zephyrproject-rtos/zephyr/tree/main/dts/bindings/led_strip). diff --git a/docs/docs/features/battery.md b/docs/docs/features/battery.md index 0b4172c2d08..42ba6d40f26 100644 --- a/docs/docs/features/battery.md +++ b/docs/docs/features/battery.md @@ -20,6 +20,8 @@ To enable a battery sensor on a new board, add the driver for the sensor to your - `zmk,battery-voltage-divider`: Reads the voltage on an analog input pin. - `zmk,battery-nrf-vddh`: Reads the power supply voltage on a Nordic nRF52's VDDH pin. +See the [battery level configuration page](../config/battery.md) for the configuration supported by each driver provided by ZMK. + Zephyr also provides some drivers for fuel gauge ICs such as the TI bq274xx series and Maxim MAX17xxx series. If you use a battery sensor that does not have an existing driver, you will need to write a new driver that supports the `SENSOR_CHAN_GAUGE_STATE_OF_CHARGE` sensor channel and contribute it to Zephyr or ZMK. Once you have the sensor driver defined, add a `zmk,battery` property to the `chosen` node and set it to reference the sensor node. For example: diff --git a/docs/sidebars.js b/docs/sidebars.js index 231d4f71c4e..7b445a29012 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -55,6 +55,7 @@ module.exports = { Configuration: [ "config/index", "config/backlight", + "config/battery", "config/behaviors", "config/combos", "config/displays", @@ -62,8 +63,8 @@ module.exports = { "config/keymap", "config/kscan", "config/power", - "config/system", "config/underglow", + "config/system", ], Development: [ "development/clean-room", From 851c37e14fb1315203caf5f7807cdf4bf922a464 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Jul 2022 14:05:55 -0700 Subject: [PATCH 0489/1130] fix(docs): Apply suggestions from #722 reviews --- docs/docs/config/behaviors.md | 12 ++++++------ docs/docs/config/kscan.md | 8 ++++---- docs/docs/config/system.md | 13 +++++++------ docs/docs/development/new-shield.md | 6 ++++++ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 72db21d71be..a4e847dcf44 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -21,12 +21,12 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml](ht Applies to: `compatible = "zmk,behavior-caps-word"` -| Property | Type | Description | Default | -| ---------------- | ------ | ------------------------------------------------------------------ | -------------- | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<0>` | | -| `continue-list` | array | List of [key codes](/docs/codes) which do not deactivate caps lock | `` | -| `mods` | int | A bit field of modifiers to apply | `` | +| Property | Type | Description | Default | +| ---------------- | ------ | ------------------------------------------------------------------ | ------------------------------- | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<0>` | | +| `continue-list` | array | List of [key codes](/docs/codes) which do not deactivate caps lock | `` | +| `mods` | int | A bit field of modifiers to apply | `` | `continue-list` is treated as if it always includes alphanumeric characters (A-Z, 0-9). diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 984fd6ac9a9..77dc23cb8cc 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -134,8 +134,8 @@ Definition file: [zmk/app/dts/bindings/zmk,kscan-composite.yaml](https://github. | Property | Type | Description | Default | | -------- | ------ | --------------------------------------------- | ------- | | `label` | string | Unique label for the node | | -| `rows` | int | The number rows of in the composite matrix | | -| `cols` | int | The number columns of in the composite matrix | | +| `rows` | int | The number of rows in the composite matrix | | +| `cols` | int | The number of columns in the composite matrix | | The `zmk,kscan-composite` node should have one child node per keyboard scan driver that should be composited. Each child node can have the following properties: @@ -249,8 +249,8 @@ Definition file: [zmk/app/dts/bindings/zmk,kscan-mock.yaml](https://github.com/z | `label` | string | Unique label for the node | | | `event-period` | int | Milliseconds between each generated event | | | `events` | array | List of key events to simulate | | -| `rows` | int | The number rows of in the composite matrix | | -| `cols` | int | The number columns of in the composite matrix | | +| `rows` | int | The number of rows in the composite matrix | | +| `cols` | int | The number of columns in the composite matrix | | | `exit-after` | bool | Exit the program after running all events | false | The `events` array should be defined using the macros from [dt-bindings/zmk/kscan_mock.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/kscan_mock.h). diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index cf88c4f5a17..af7bced506b 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -13,12 +13,13 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ### General -| Config | Type | Description | Default | -| ----------------------------------- | ------ | ----------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard | | -| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | -| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | -| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | +| Config | Type | Description | Default | +| ------------------------------------ | ------ | ----------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard | | +| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | +| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | +| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | +| `CONFIG_ZMK_BATTERY_REPORT_INTERVAL` | int | Battery level report interval in seconds | 60 | ### HID diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index b46c319d494..03a27289fbf 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -157,6 +157,8 @@ this might look something like: }; ``` +See the [Keyboard Scan configuration documentation](../config/kscan.md) for details on configuring the KSCAN driver. +
    @@ -260,6 +262,8 @@ This is exemplified with the iris .overlay files. ``` +See the [Keyboard Scan configuration documentation](../config/kscan.md) for details on configuring the KSCAN driver. + ### .conf files (Split Shields) While unibody boards only have one .conf file that applies configuration characteristics to the entire keyboard, @@ -341,6 +345,8 @@ Some important things to note: - `RC(row, column)` is placed sequentially to define what row and column values that position corresponds to. - If you have a keyboard with options for `2u` keys in certain positions, or break away portions, it is a good idea to set the chosen `zmk,matrix_transform` to the default arrangement, and include _other_ possible matrix transform nodes in the devicetree that users can select in their user config by overriding the chosen node. +See the [matrix transform section](../config/kscan.md#matrix-transform) in the Keyboard Scan configuration documentation for details and more examples of matrix transforms. + ## Default Keymap Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//.keymap` file. The keymap is configured as an additional devicetree overlay that includes the following: From 19d8c5ba40b3e8767f68db7c9f16e595f638e423 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Jul 2022 14:20:47 -0700 Subject: [PATCH 0490/1130] feat(docs): Document new underglow Kconfig --- docs/docs/config/underglow.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/docs/docs/config/underglow.md b/docs/docs/config/underglow.md index f9d9e15d1a8..1209e60ecc0 100644 --- a/docs/docs/config/underglow.md +++ b/docs/docs/config/underglow.md @@ -13,19 +13,21 @@ RGB underglow depends on [Zephyr's LED strip driver](https://github.com/zephyrpr Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) -| Config | Type | Description | Default | -| ------------------------------------ | ---- | ----------------------------------------------------- | ------- | -| `CONFIG_ZMK_RGB_UNDERGLOW` | bool | Enable RGB underglow | n | -| `CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER` | bool | Underglow toggling also controls external power | y | -| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP` | int | Hue step in degrees (0-359) used by RGB actions | 10 | -| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP` | int | Saturation step in percent used by RGB actions | 10 | -| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP` | int | Brightness step in percent used by RGB actions | 10 | -| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_START` | int | Default hue in degrees (0-359) | 0 | -| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_START` | int | Default saturation percent (0-100) | 100 | -| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_START` | int | Default brightness in percent (0-100) | 100 | -| `CONFIG_ZMK_RGB_UNDERGLOW_SPD_START` | int | Default effect speed (1-5) | 3 | -| `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START` | int | Default effect index from the effect list (see below) | 0 | -| `CONFIG_ZMK_RGB_UNDERGLOW_ON_START` | bool | Default on state | y | +| Config | Type | Description | Default | +| ---------------------------------------- | ---- | --------------------------------------------------------- | ------- | +| `CONFIG_ZMK_RGB_UNDERGLOW` | bool | Enable RGB underglow | n | +| `CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER` | bool | Underglow toggling also controls external power | y | +| `CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE` | bool | Turn off RGB underglow when keyboard goes into idle state | n | +| `CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB` | bool | Turn off RGB underglow when USB is disconnected | n | +| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP` | int | Hue step in degrees (0-359) used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP` | int | Saturation step in percent used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP` | int | Brightness step in percent used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_START` | int | Default hue in degrees (0-359) | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_START` | int | Default saturation percent (0-100) | 100 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_START` | int | Default brightness in percent (0-100) | 100 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SPD_START` | int | Default effect speed (1-5) | 3 | +| `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START` | int | Default effect index from the effect list (see below) | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_ON_START` | bool | Default on state | y | Values for `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START`: From 41c9d810967c3be71df9c3727660ce968756ce34 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Jul 2022 14:48:09 -0700 Subject: [PATCH 0491/1130] fix(docs): Update config docs for split Kconfig refactor --- docs/docs/config/system.md | 49 +++++++++++++++------------ docs/docs/development/new-behavior.md | 4 +-- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index af7bced506b..4784339cefd 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -64,34 +64,41 @@ Exactly zero or one of the following options may be set to `y`. The first is use See [Zephyr's Bluetooth stack architecture documentation](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-arch.html) for more information on configuring Bluetooth. +| Config | Type | Description | Default | +| ------------------------------------------- | ---- | --------------------------------------------------------------------- | ------- | +| `CONFIG_BT` | bool | Enable Bluetooth support | | +| `CONFIG_BT_MAX_CONN` | int | Maximum number of simultaneous Bluetooth connections | 5 | +| `CONFIG_BT_MAX_PAIRED` | int | Maximum number of paired Bluetooth devices | 5 | +| `CONFIG_ZMK_BLE` | bool | Enable ZMK as a Bluetooth keyboard | | +| `CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START` | bool | Clears all bond information from the keyboard on startup | n | +| `CONFIG_ZMK_BLE_CONSUMER_REPORT_QUEUE_SIZE` | int | Max number of consumer HID reports to queue for sending over BLE | 5 | +| `CONFIG_ZMK_BLE_KEYBOARD_REPORT_QUEUE_SIZE` | int | Max number of keyboard HID reports to queue for sending over BLE | 20 | +| `CONFIG_ZMK_BLE_INIT_PRIORITY` | int | BLE init priority | 50 | +| `CONFIG_ZMK_BLE_THREAD_PRIORITY` | int | Priority of the BLE notify thread | 5 | +| `CONFIG_ZMK_BLE_THREAD_STACK_SIZE` | int | Stack size of the BLE notify thread | 512 | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Experimental: require typing passkey from host to pair BLE connection | n | + +Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the same value. On a split keyboard they should only be set for the central and must be set to one greater than the desired number of bluetooth profiles. + +### Logging + +| Config | Type | Description | Default | +| ------------------------ | ---- | ---------------------------------------- | ------- | +| `CONFIG_ZMK_USB_LOGGING` | bool | Enable USB CDC ACM logging for debugging | n | +| `CONFIG_ZMK_LOG_LEVEL` | int | Log level for ZMK debug messages | 4 | + +### Split keyboards + +Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). + | Config | Type | Description | Default | | ----------------------------------------------------- | ---- | ----------------------------------------------------------------------- | ------- | -| `CONFIG_BT` | bool | Enable Bluetooth support | | -| `CONFIG_BT_MAX_CONN` | int | Maximum number of simultaneous Bluetooth connections | 5 | -| `CONFIG_BT_MAX_PAIRED` | int | Maximum number of paired Bluetooth devices | 5 | -| `CONFIG_ZMK_BLE` | bool | Enable ZMK as a Bluetooth keyboard | | -| `CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START` | bool | Clears all bond information from the keyboard on startup | n | -| `CONFIG_ZMK_BLE_CONSUMER_REPORT_QUEUE_SIZE` | int | Max number of consumer HID reports to queue for sending over BLE | 5 | -| `CONFIG_ZMK_BLE_KEYBOARD_REPORT_QUEUE_SIZE` | int | Max number of keyboard HID reports to queue for sending over BLE | 20 | -| `CONFIG_ZMK_BLE_INIT_PRIORITY` | int | BLE init priority | 50 | -| `CONFIG_ZMK_BLE_THREAD_PRIORITY` | int | Priority of the BLE notify thread | 5 | -| `CONFIG_ZMK_BLE_THREAD_STACK_SIZE` | int | Stack size of the BLE notify thread | 512 | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Experimental: require typing passkey from host to pair BLE connection | n | | `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | | `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | -| `CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | +| `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | | `CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | | `CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | | `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | | `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | | `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | - -Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the same value. On a split keyboard they should only be set for the central and must be set to one greater than the desired number of bluetooth profiles. - -### Logging - -| Config | Type | Description | Default | -| ------------------------ | ---- | ---------------------------------------- | ------- | -| `CONFIG_ZMK_USB_LOGGING` | bool | Enable USB CDC ACM logging for debugging | n | -| `CONFIG_ZMK_LOG_LEVEL` | int | Log level for ZMK debug messages | 4 | diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index 782dc01003e..af98613e54f 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -347,8 +347,8 @@ endif() For behaviors that do not require central locality, the following options for updating `app/CmakeLists.txt` also exist: - Behavior applies to unibody, or central or peripheral half of keyboard: place `target_sources(app PRIVATE .c)` line _before_ `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` -- Behavior applies to _only_ central half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT_BLE AND CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` -- Behavior applies to _only_ peripheral half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT_BLE AND (NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL))` +- Behavior applies to _only_ central half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT AND CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` +- Behavior applies to _only_ peripheral half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT AND (NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL))` - Behavior requires certain condition in a keyboard's `.conf` file to be met: use `target_sources_ifdef(CONFIG_ app PRIVATE .c)` instead of `target_sources(.c)` ### Defining common use-cases for the behavior (`.dtsi`) (Optional) From b1ce8a0d3346be78301637a9861e4b70587aa2bb Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Tue, 12 Jul 2022 03:47:19 -0400 Subject: [PATCH 0492/1130] fix(docs): typo fixes --- docs/docs/config/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 9e35df836a5..51fd45b7109 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -134,7 +134,7 @@ See [Zephyr's Devicetree guide](https://docs.zephyrproject.org/latest/build/dts/ ### Changing Devicetree Properties Since Devicetree properties are set for specific nodes in the tree, you will first need to find the node you want to configure. You will typically need to -search through the `.dts` file for you board, `.overlay` file for your shield, or a `.dtsi` file included in by of those files using an `#include` statement. +search through the `.dts` file for your board, `.overlay` file for your shield, or a `.dtsi` file included by those files using an `#include` statement. A Devicetree node looks like this: From 08c43feaaff548b4ba7d32a26e72313024a989bc Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 19 Apr 2022 03:02:00 -0400 Subject: [PATCH 0493/1130] feat(kscan): Kconfig for optional scan delay. Add optional Kconfig setting to delay scanning after each output column is set, and inputs are read, to allow inputs to "settle" after the last column is set back to inactive. --- app/drivers/kscan/Kconfig | 14 ++++++++++++++ app/drivers/kscan/kscan_gpio_matrix.c | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index c9ace0a30c6..b76a27b4969 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -30,6 +30,20 @@ config ZMK_KSCAN_GPIO_MATRIX default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX)) select ZMK_KSCAN_GPIO_DRIVER +if ZMK_KSCAN_GPIO_MATRIX + +config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS + int "Ticks to wait between each output when scanning" + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for the previous output to + "settle" before reading inputs for the next active output column. In that + scenario, set this value to a positive value to configure the number of + usecs to wait after reading each column of keys. + +endif # ZMK_KSCAN_GPIO_MATRIX + config ZMK_KSCAN_MOCK_DRIVER bool default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_MOCK)) diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index fc355ca2c47..1ab4d4426fc 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -250,6 +250,10 @@ static int kscan_matrix_read(const struct device *dev) { LOG_ERR("Failed to set output %i inactive: %i", o, err); return err; } + +#if CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS > 0 + k_busy_wait(CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS); +#endif } // Process the new state. From f68692effd96a75627d0b3e96d77f47f37d9f5f7 Mon Sep 17 00:00:00 2001 From: GreenAirplane Date: Wed, 20 Jul 2022 11:17:19 -0400 Subject: [PATCH 0494/1130] feat(docs): Document behavior queue limit for Macros (#1384) Co-authored-by: Cem Aksoylar Co-authored-by: Dom H --- docs/docs/behaviors/macros.md | 6 ++++++ docs/docs/config/behaviors.md | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index aca9eb7a651..1648892e9f7 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -134,6 +134,12 @@ bindings ; ``` +### Behavior Queue Limit + +Macros use an internal queue to invoke each behavior in the bindings list when triggered, which has a size of 64 by default. Bindings in "press" and "release" modes correspond to one event in the queue, whereas "tap" mode bindings correspond to two (one for press and one for release). As a result, the effective number of actions processed might be less than 64 and this can cause problems for long macros. + +To prevent issues with longer macros, you can change the size of this queue via the `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE` setting in your configuration, [typically through your `.conf` file](../config/index.md). For example, `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE=512` would allow your macro to type about 256 characters. + ## Common Patterns Below are some examples of how the macro behavior can be used for various useful functionality. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index a4e847dcf44..67f5ce74c21 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -9,6 +9,14 @@ See [Configuration Overview](index.md) for instructions on how to change these s See the [zmk/app/dts/behaviors/](https://github.com/zmkfirmware/zmk/tree/main/app/dts/behaviors) folder for all default behaviors. +## Common + +### Kconfig + +| Config | Type | Description | Default | +| --------------------------------- | ---- | ------------------------------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE` | int | Maximum number of behaviors to allow queueing from a macro or other complex behavior | 64 | + ## Caps Word Creates a custom behavior that behaves similar to a caps lock but deactivates when any key not in a continue list is pressed. From 54aa3e6a1e1dd26d945edaf9c45672bd093dd744 Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Mon, 25 Jul 2022 23:43:56 -0400 Subject: [PATCH 0495/1130] fix(docs): typo fixes * Update user-setup.md --- docs/docs/user-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index faa4bef8cbe..06c168b3350 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -199,7 +199,7 @@ storage device. Once the flash is complete, the controller should automatically ZMK will automatically advertise itself as connectable if it is not currently connected to a device. You should be able to see your keyboard from the bluetooth scanning view of your laptop or phone / tablet. It is reported by some users that the connections with Android / iOS devices are generally smoother than with laptops, so if you have trouble connecting, you could try to connect from your phone or tablet first to eliminate any potential hardware issues. -ZMK support multiple BLE “profiles”, which allows you to connect to and switch among multiple devices. Please refer to the [Bluetooth behavior](behaviors/bluetooth.md) section for detailed explanations of how to use them. +ZMK supports multiple BLE “profiles”, which allows you to connect to and switch among multiple devices. Please refer to the [Bluetooth behavior](behaviors/bluetooth.md) section for detailed explanations on how to use them. ### Connecting Split Keyboard Halves From c4a47c08def72ae0b096e949f4388e5a539187b6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 24 Jan 2022 14:34:48 -0500 Subject: [PATCH 0496/1130] fix(display): Initialize display on queue as well. --- app/src/display/main.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/display/main.c b/app/src/display/main.c index 5dfad910a4e..79a054a714e 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -85,26 +85,20 @@ static void stop_display_updates() { int zmk_display_is_initialized() { return initialized; } -int zmk_display_init() { +void initialize_display(struct k_work *work) { LOG_DBG(""); display = device_get_binding(ZMK_DISPLAY_NAME); if (display == NULL) { LOG_ERR("Failed to find display device"); - return -EINVAL; + return; } -#if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) - k_work_queue_start(&display_work_q, display_work_stack_area, - K_THREAD_STACK_SIZEOF(display_work_stack_area), - CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY, NULL); -#endif - screen = zmk_display_status_screen(); if (screen == NULL) { LOG_ERR("No status screen provided"); - return 0; + return; } lv_scr_load(screen); @@ -112,6 +106,20 @@ int zmk_display_init() { start_display_updates(); initialized = true; +} + +K_WORK_DEFINE(init_work, initialize_display); + +int zmk_display_init() { + LOG_DBG(""); + +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) + k_work_queue_start(&display_work_q, display_work_stack_area, + K_THREAD_STACK_SIZEOF(display_work_stack_area), + CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_PRIORITY, NULL); +#endif + + k_work_submit_to_queue(zmk_display_work_q(), &init_work); LOG_DBG(""); return 0; From e3efffa9a885c5d10d7b248b96fe8bc163c070ce Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 25 Apr 2022 22:07:13 -0400 Subject: [PATCH 0497/1130] refactor(display): Move clear to unblank for EPD driver. --- app/drivers/display/il0323.c | 110 +++++++++++++++++------------------ 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/app/drivers/display/il0323.c b/app/drivers/display/il0323.c index b8117584163..f6c9037e68d 100644 --- a/app/drivers/display/il0323.c +++ b/app/drivers/display/il0323.c @@ -115,28 +115,6 @@ static int il0323_update_display(const struct device *dev) { return 0; } -static int il0323_blanking_off(const struct device *dev) { - struct il0323_data *driver = dev->data; - - if (blanking_on) { - /* Update EPD pannel in normal mode */ - il0323_busy_wait(driver); - if (il0323_update_display(dev)) { - return -EIO; - } - } - - blanking_on = false; - - return 0; -} - -static int il0323_blanking_on(const struct device *dev) { - blanking_on = true; - - return 0; -} - static int il0323_write(const struct device *dev, const uint16_t x, const uint16_t y, const struct display_buffer_descriptor *desc, const void *buf) { struct il0323_data *driver = dev->data; @@ -208,6 +186,58 @@ static int il0323_read(const struct device *dev, const uint16_t x, const uint16_ return -ENOTSUP; } +static int il0323_clear_and_write_buffer(const struct device *dev, uint8_t pattern, bool update) { + struct display_buffer_descriptor desc = { + .buf_size = IL0323_NUMOF_PAGES, + .width = EPD_PANEL_WIDTH, + .height = 1, + .pitch = EPD_PANEL_WIDTH, + }; + uint8_t *line; + + line = k_malloc(IL0323_NUMOF_PAGES); + if (line == NULL) { + return -ENOMEM; + } + + memset(line, pattern, IL0323_NUMOF_PAGES); + for (int i = 0; i < EPD_PANEL_HEIGHT; i++) { + il0323_write(dev, 0, i, &desc, line); + } + + k_free(line); + + if (update == true) { + if (il0323_update_display(dev)) { + return -EIO; + } + } + + return 0; +} + +static int il0323_blanking_off(const struct device *dev) { + struct il0323_data *driver = dev->data; + + if (blanking_on) { + /* Update EPD pannel in normal mode */ + il0323_busy_wait(driver); + if (il0323_clear_and_write_buffer(dev, 0xff, true)) { + return -EIO; + } + } + + blanking_on = false; + + return 0; +} + +static int il0323_blanking_on(const struct device *dev) { + blanking_on = true; + + return 0; +} + static void *il0323_get_framebuffer(const struct device *dev) { LOG_ERR("not supported"); return NULL; @@ -247,36 +277,6 @@ static int il0323_set_pixel_format(const struct device *dev, const enum display_ return -ENOTSUP; } -static int il0323_clear_and_write_buffer(const struct device *dev, uint8_t pattern, bool update) { - struct display_buffer_descriptor desc = { - .buf_size = IL0323_NUMOF_PAGES, - .width = EPD_PANEL_WIDTH, - .height = 1, - .pitch = EPD_PANEL_WIDTH, - }; - uint8_t *line; - - line = k_malloc(IL0323_NUMOF_PAGES); - if (line == NULL) { - return -ENOMEM; - } - - memset(line, pattern, IL0323_NUMOF_PAGES); - for (int i = 0; i < EPD_PANEL_HEIGHT; i++) { - il0323_write(dev, 0, i, &desc, line); - } - - k_free(line); - - if (update == true) { - if (il0323_update_display(dev)) { - return -EIO; - } - } - - return 0; -} - static int il0323_controller_init(const struct device *dev) { struct il0323_data *driver = dev->data; uint8_t tmp[IL0323_TRES_REG_LENGTH]; @@ -350,10 +350,6 @@ static int il0323_controller_init(const struct device *dev) { return -EIO; } - if (il0323_clear_and_write_buffer(dev, 0xff, false)) { - return -1; - } - return 0; } @@ -429,4 +425,4 @@ static struct display_driver_api il0323_driver_api = { }; DEVICE_DT_INST_DEFINE(0, il0323_init, NULL, &il0323_driver, NULL, POST_KERNEL, - CONFIG_APPLICATION_INIT_PRIORITY, &il0323_driver_api); \ No newline at end of file + CONFIG_APPLICATION_INIT_PRIORITY, &il0323_driver_api); From 90b45a1284d11c0003949bb0b57c20a3ecb6d682 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 25 Apr 2022 22:07:21 -0400 Subject: [PATCH 0498/1130] feat(display): Blank on idle optionally. * Add new defaulted-on Kconfig option to control if displays are blanked/unblanked on idle/activity. --- app/src/display/Kconfig | 4 ++++ app/src/display/main.c | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 8023025a0cd..ee9775569a4 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -11,6 +11,10 @@ menuconfig ZMK_DISPLAY if ZMK_DISPLAY +config ZMK_DISPLAY_BLANK_ON_IDLE + bool "Blank display on idle" + default y + choice LVGL_TXT_ENC default LVGL_TXT_ENC_UTF8 diff --git a/app/src/display/main.c b/app/src/display/main.c index 79a054a714e..9de0ad7f2db 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -111,8 +111,6 @@ void initialize_display(struct k_work *work) { K_WORK_DEFINE(init_work, initialize_display); int zmk_display_init() { - LOG_DBG(""); - #if IS_ENABLED(CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED) k_work_queue_start(&display_work_q, display_work_stack_area, K_THREAD_STACK_SIZEOF(display_work_stack_area), @@ -125,6 +123,7 @@ int zmk_display_init() { return 0; } +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) int display_event_handler(const zmk_event_t *eh) { struct zmk_activity_state_changed *ev = as_zmk_activity_state_changed(eh); if (ev == NULL) { @@ -148,3 +147,5 @@ int display_event_handler(const zmk_event_t *eh) { ZMK_LISTENER(display, display_event_handler); ZMK_SUBSCRIPTION(display, zmk_activity_state_changed); + +#endif /* IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) */ \ No newline at end of file From 70beff7e624157955ab0c2c1083466eaffec74e9 Mon Sep 17 00:00:00 2001 From: Nick Coutsos Date: Wed, 27 Jul 2022 08:15:46 -0400 Subject: [PATCH 0499/1130] refactor(docs): Change wording in RGB_COLOR_HSB description Simplify description for second &rgb_ug parameter --- docs/docs/behaviors/underglow.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/underglow.md b/docs/docs/behaviors/underglow.md index c028f832c0a..52429e69987 100644 --- a/docs/docs/behaviors/underglow.md +++ b/docs/docs/behaviors/underglow.md @@ -41,11 +41,11 @@ Here is a table describing the action for each define: - Reference: `&rgb_ug` - Parameter #1: The RGB action define, e.g. `RGB_TOG` or `RGB_BRI` -- Parameter #2: Only applies to `RGB_COLOR_HSB` and is the HSB values of the color to set within parenthesis and separated by a common (see below for an example) +- Parameter #2: Only applies to `RGB_COLOR_HSB` and is the HSB representation of the color to set (see below for an example) :::note HSB Values -When specifying HSB values you'll need to use `RGB_COLOR_HSB(h, s, b)` in your keymap file. See below for an example. +When specifying HSB values you'll need to use `RGB_COLOR_HSB(h, s, b)` in your keymap file. Value Limits: From 01f51f06dc044f20b38c4cc69403ede2a8cd5aa2 Mon Sep 17 00:00:00 2001 From: HanfG <376840834@qq.com> Date: Wed, 27 Jul 2022 20:17:40 +0800 Subject: [PATCH 0500/1130] fix(docs): Fix col/row properties in kscan.md example --- docs/docs/config/kscan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 77dc23cb8cc..1f54692d73b 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -207,8 +207,8 @@ One possible way to do this is a 3x4 matrix where the direct GPIO keys are shift kscan0: kscan_composite { compatible = "zmk,kscan-composite"; label = "KSCAN0"; - rows = <3>; - columns = <4>; + rows = <4>; + columns = <3>; // Include the matrix driver matrix { From 8bc96ab9fe6121e586208a8d45666ec136002643 Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Wed, 27 Jul 2022 09:07:57 -0400 Subject: [PATCH 0501/1130] feat(docs): added "how is the latency" * Update docs/docs/faq.md Co-authored-by: Kurtis Lew Co-authored-by: Dom H Co-authored-by: Pete Johanson --- docs/docs/faq.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 36ecc010083..edb41f3b697 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -80,6 +80,14 @@ Please note, many keyboards only have a single PCB which includes the “brains Currently, ZMK only supports wireless split, but wired split is possible and we welcome contributions! +### How is the latency? + +The latency of ZMK is comparable to other firmware offerings. ZMK is equipped with a variety of scanning methods and [debounce algorithms](features/debouncing.md) that can affect the final measured latency. [This video](https://www.youtube.com/watch?v=jWL4nU-vtWs) shows a latency comparison of ZMK and other keyboard firmwares. + +### Any chance for 2.4GHz dongle implementation? + +At this time, there are no current plans to implement 2.4GHz dongle mode. This is because utilizing Nordic's proprietary 2.4GHz low level protocols requires use of the Nordic Connect SDK, which is licensed with a more restrictive license than ZMK's MIT license. However, ZMK does plan to implement dongle mode using BLE (with encryption). This will result in a 3.75ms average latency from the protocol itself. + ### What bootloader does ZMK use? ZMK isn’t designed for any particular bootloader, and supports flashing different boards with different flash utilities (e.g. OpenOCD, nrfjprog, etc.). So if you have any difficulties, please let us know on [Discord](https://zmk.dev/community/discord/invite)! From be0d49b62d7a423512e6e9052eca037b331109b7 Mon Sep 17 00:00:00 2001 From: Jason Hazel Date: Wed, 27 Jul 2022 11:39:42 -0400 Subject: [PATCH 0502/1130] feat(shields) add support for Spaceman Pancake (#1400) * add support for Spaceman Pancake Co-authored-by: Pete Johanson Co-authored-by: Jason Hazel Co-authored-by: Pete Johanson --- app/boards/shields/pancake/Kconfig.defconfig | 9 ++++ app/boards/shields/pancake/Kconfig.shield | 5 ++ app/boards/shields/pancake/pancake.conf | 1 + app/boards/shields/pancake/pancake.keymap | 57 ++++++++++++++++++++ app/boards/shields/pancake/pancake.overlay | 39 ++++++++++++++ app/boards/shields/pancake/pancake.zmk.yml | 8 +++ 6 files changed, 119 insertions(+) create mode 100644 app/boards/shields/pancake/Kconfig.defconfig create mode 100644 app/boards/shields/pancake/Kconfig.shield create mode 100644 app/boards/shields/pancake/pancake.conf create mode 100644 app/boards/shields/pancake/pancake.keymap create mode 100644 app/boards/shields/pancake/pancake.overlay create mode 100644 app/boards/shields/pancake/pancake.zmk.yml diff --git a/app/boards/shields/pancake/Kconfig.defconfig b/app/boards/shields/pancake/Kconfig.defconfig new file mode 100644 index 00000000000..47f5e6820c1 --- /dev/null +++ b/app/boards/shields/pancake/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_PANCAKE + +config ZMK_KEYBOARD_NAME + default "Pancake" + +endif \ No newline at end of file diff --git a/app/boards/shields/pancake/Kconfig.shield b/app/boards/shields/pancake/Kconfig.shield new file mode 100644 index 00000000000..784d25a4c58 --- /dev/null +++ b/app/boards/shields/pancake/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_PANCAKE + def_bool $(shields_list_contains,pancake) \ No newline at end of file diff --git a/app/boards/shields/pancake/pancake.conf b/app/boards/shields/pancake/pancake.conf new file mode 100644 index 00000000000..67b8cb5ca5f --- /dev/null +++ b/app/boards/shields/pancake/pancake.conf @@ -0,0 +1 @@ +# CONFIG_ZMK_USB_LOGGING=y \ No newline at end of file diff --git a/app/boards/shields/pancake/pancake.keymap b/app/boards/shields/pancake/pancake.keymap new file mode 100644 index 00000000000..99f2aaff21e --- /dev/null +++ b/app/boards/shields/pancake/pancake.keymap @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#define DEF 0 +#define LWR 1 +#define RSE 2 +#define FNC 3 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT &kp SEMI + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp UP &kp ENTER + &kp LCTRL &kp LALT &kp LGUI &mo FNC &mo LWR &kp SPACE &kp SPACE &mo RSE &kp SLASH &kp LEFT &kp DOWN &kp RIGHT + >; + }; + + lower_layer { + bindings = < + &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp BSPC + &trans &trans &trans &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &kp LBRC &kp RBRC &kp C_VOL_UP &trans + &trans &trans &trans &trans &trans &trans &trans &trans &kp QMARK &trans &kp C_VOL_DN &trans + >; + }; + + raise_layer { + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &trans &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans &kp LBKT &kp RBKT &kp C_VOL_UP &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_VOL_DN &trans + >; + }; + + function_layer { + bindings = < + &bootloader &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &trans + &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp F11 &kp F12 &trans + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans + &out OUT_BLE &out OUT_USB &out OUT_TOG &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/pancake/pancake.overlay b/app/boards/shields/pancake/pancake.overlay new file mode 100644 index 00000000000..53e8c8c121e --- /dev/null +++ b/app/boards/shields/pancake/pancake.overlay @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 3 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/app/boards/shields/pancake/pancake.zmk.yml b/app/boards/shields/pancake/pancake.zmk.yml new file mode 100644 index 00000000000..21cc544456a --- /dev/null +++ b/app/boards/shields/pancake/pancake.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: pancake +name: Pancake +type: shield +url: https://mkultra.click/pancake-keyboard-kit +requires: [pro_micro] +features: + - keys From eee7e1cd41c8bed81c5abcc0e8986c05e811b251 Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Sat, 30 Jul 2022 02:24:49 -0700 Subject: [PATCH 0503/1130] fix(docs): Update tap-dance and hold-tap documentation Co-Authored-By: Cem Aksoylar --- docs/docs/assets/hold-tap/case1_2.png | Bin 10323 -> 0 bytes docs/docs/assets/hold-tap/case1_2.svg | 21 +++ .../assets/hold-tap/case_hold_preferred.png | Bin 6380 -> 0 bytes .../assets/hold-tap/case_hold_preferred.svg | 23 +++ docs/docs/assets/hold-tap/comparison.png | Bin 158912 -> 0 bytes docs/docs/assets/hold-tap/comparison.svg | 131 ++++++++++++++++ docs/docs/assets/tap-dance/timing_diagram.svg | 140 ++++++++---------- docs/docs/behaviors/hold-tap.md | 132 ++++++++++++++--- docs/docs/behaviors/layers.md | 11 +- docs/docs/behaviors/mod-tap.md | 9 +- docs/docs/behaviors/tap-dance.md | 83 +++++++---- 11 files changed, 420 insertions(+), 130 deletions(-) delete mode 100644 docs/docs/assets/hold-tap/case1_2.png create mode 100644 docs/docs/assets/hold-tap/case1_2.svg delete mode 100644 docs/docs/assets/hold-tap/case_hold_preferred.png create mode 100644 docs/docs/assets/hold-tap/case_hold_preferred.svg delete mode 100644 docs/docs/assets/hold-tap/comparison.png create mode 100644 docs/docs/assets/hold-tap/comparison.svg diff --git a/docs/docs/assets/hold-tap/case1_2.png b/docs/docs/assets/hold-tap/case1_2.png deleted file mode 100644 index 818ac83752dd0c47c590b015ca18923797981c42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10323 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 JMA|6uKLDAAvPJ*^ diff --git a/docs/docs/assets/hold-tap/case1_2.svg b/docs/docs/assets/hold-tap/case1_2.svg new file mode 100644 index 00000000000..697d73462cc --- /dev/null +++ b/docs/docs/assets/hold-tap/case1_2.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/assets/hold-tap/case_hold_preferred.png b/docs/docs/assets/hold-tap/case_hold_preferred.png deleted file mode 100644 index 6d7fd43bb58681629387932f0053995d7d5d0c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6380 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 diff --git a/docs/docs/assets/hold-tap/case_hold_preferred.svg b/docs/docs/assets/hold-tap/case_hold_preferred.svg new file mode 100644 index 00000000000..70b27014c7d --- /dev/null +++ b/docs/docs/assets/hold-tap/case_hold_preferred.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/assets/hold-tap/comparison.png b/docs/docs/assets/hold-tap/comparison.png deleted file mode 100644 index 419b2040015ecf851e6605950e9e1a48472b8094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158912 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

    v=mX|&cA`aBl<}f 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

    PS-t8+}tN=<%$fuLj)8^>@g5<-1abqat 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 diff --git a/docs/docs/assets/hold-tap/comparison.svg b/docs/docs/assets/hold-tap/comparison.svg new file mode 100644 index 00000000000..eef79f39927 --- /dev/null +++ b/docs/docs/assets/hold-tap/comparison.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/assets/tap-dance/timing_diagram.svg b/docs/docs/assets/tap-dance/timing_diagram.svg index ab02dcafb7a..3bf0b137e57 100644 --- a/docs/docs/assets/tap-dance/timing_diagram.svg +++ b/docs/docs/assets/tap-dance/timing_diagram.svg @@ -1,83 +1,59 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index d0255c70e8a..528b9aec742 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -3,6 +3,9 @@ title: Hold-Tap Behavior sidebar_label: Hold-Tap --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + ## Summary Hold-tap is the basis for other behaviors such as layer-tap and mod-tap. @@ -13,11 +16,11 @@ Simply put, the hold-tap key will output the 'hold' behavior if it's held for a The graph below shows how the hold-tap decides between a 'tap' and a 'hold'. -![Simple behavior](../assets/hold-tap/case1_2.png) +![Simple behavior](../assets/hold-tap/case1_2.svg) By default, the hold-tap is configured to also select the 'hold' functionality if another key is tapped while it's active: -![Hold preferred behavior](../assets/hold-tap/case1_2.png) +![Hold preferred behavior](../assets/hold-tap/case_hold_preferred.svg) We call this the 'hold-preferred' flavor of hold-taps. While this flavor may work very well for a ctrl/escape key, it's not very well suited for home-row mods or layer-taps. That's why there are two more flavors to choose from: 'tap-preferred' and 'balanced'. @@ -30,11 +33,11 @@ We call this the 'hold-preferred' flavor of hold-taps. While this flavor may wor When the hold-tap key is released and the hold behavior has not been triggered, the tap behavior will trigger. -![Hold-tap comparison](../assets/hold-tap/comparison.png) +![Hold-tap comparison](../assets/hold-tap/comparison.svg) ### Basic usage -For basic usage, please see [mod-tap](mod-tap.md) and [layer-tap](layers.md) pages. +For basic usage, please see the [mod-tap](mod-tap.md) and [layer-tap](layers.md#layer-tap) pages. ### Advanced Configuration @@ -50,9 +53,9 @@ In QMK, unlike ZMK, this functionality is enabled by default, and you turn it of #### `global-quick-tap` -If global quick tap is enabled, then `quick-tap-ms` will apply not only when the given hold-tap is tapped but for any key tap before it. This effectively disables the hold tap when typing quickly, which can be quite useful for home row mods. It can also have the effect of removing the input delay when typing quickly. +If `global-quick-tap` is enabled, then `quick-tap-ms` will apply not only when the given hold-tap is tapped, but for any key tapped before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. -For example, the following hold-tap configuration enables global quick tap with a 125 millisecond term. +For example, the following hold-tap configuration enables `global-quick-tap` with a 125 millisecond `quick-tap-ms` term. ``` gqt: global-quick-tap { @@ -69,11 +72,11 @@ gqt: global-quick-tap { If you press `&kp A` and then `&gqt LEFT_SHIFT B` **within** 125 ms, then `ab` will be output. Importantly, `b` will be output immediately since it was within the `quick-tap-ms`. This quick-tap behavior will work for any key press, whether it is within a behavior like hold-tap, or a simple `&kp`. This means the `&gqt LEFT_SHIFT B` binding will only have its underlying hold-tap behavior if it is pressed 125 ms **after** a key press. -Note that the higher the `quick-tap-ms` the harder it will be to use the hold behavior, making this less applicable for something like capitalizing letter while typing normally. However, if the hold behavior isn't used during fast typing, then it can be an effective way to mitigate misfires. +Note that the greater the value of `quick-tap-ms` is, the harder it will be to invoke the hold behavior, making this feature less applicable for use-cases like capitalizing letters while typing normally. However, if the hold behavior isn't used during fast typing, then it can be an effective way to mitigate misfires. #### `retro-tap` -If retro tap is enabled, the tap behavior is triggered when releasing the hold-tap key if no other key was pressed in the meantime. +If `retro-tap` is enabled, the tap behavior is triggered when releasing the hold-tap key if no other key was pressed in the meantime. For example, if you press `&mt LEFT_SHIFT A` and then release it without pressing another key, it will output `a`. @@ -85,16 +88,20 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin #### Positional hold-tap and `hold-trigger-key-positions` -- Including `hold-trigger-key-positions` in your hold-tap definition turns on the positional hold-tap feature. -- With positional hold-tap enabled, if you press any key **NOT** listed in `hold-trigger-key-positions` before `tapping-term-ms` expires, it will produce a tap. -- In all other situations, positional hold-tap will not modify the behavior of your hold-tap. -- Positional hold-tap is useful with home-row modifiers. If you have a home-row modifier key in the left hand for example, by including only keys positions from the right hand in `hold-trigger-key-positions`, you will only get hold behaviors during cross-hand key combinations. -- Note that `hold-trigger-key-positions` is an array of key position indexes. Key positions are numbered according to your keymap, starting with 0. So if the first key in your keymap is Q, this key is in position 0. The next key (probably W) will be in position 1, et cetera. -- See the following example, which uses a hold-tap behavior definition, configured with the `hold-preferred` flavor, and with positional hold-tap enabled: +Including `hold-trigger-key-positions` in your hold-tap definition turns on the positional hold-tap feature. With positional hold-tap enabled, if you press any key **NOT** listed in `hold-trigger-key-positions` before `tapping-term-ms` expires, it will produce a tap. + +In all other situations, positional hold-tap will not modify the behavior of your hold-tap. Positional hold-tap is useful when used with home-row modifiers: for example, if you have a home-row modifier key in the left hand, by including only key positions from the right hand in `hold-trigger-key-positions`, you will only get hold behaviors during cross-hand key combinations. + +:::info +Note that `hold-trigger-key-positions` is an array of key position indexes. Key positions are numbered sequentially according to your keymap, starting with 0. So if the first key in your keymap is Q, this key is in position 0. The next key (probably W) will be in position 1, et cetera. +::: + +See the following example, which uses a hold-tap behavior definition, configured with the `hold-preferred` flavor, and with positional hold-tap enabled: ``` #include #include + / { behaviors { pht: positional_hold_tap { @@ -125,15 +132,26 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin - The sequence `(pht_down, W_down, W_up, pht_up)` produces `W`. The normal hold behavior (LEFT_SHIFT) **is NOT** modified into a tap behavior (Q) by positional hold-tap because the first key pressed after the hold-tap key is the `W key`, which is in position 1, which **IS** included in `hold-trigger-key-positions`. - If the `LEFT_SHIFT / Q key` is held by itself for longer than `tapping-term-ms`, a hold behavior is produced. This is because positional hold-tap only modifies the behavior of a hold-tap if another key is pressed before the `tapping-term-ms` period expires. -#### Home row mods +### Example Use-Cases + + + + The following are suggested hold-tap configurations that work well with home row mods: ##### Option 1: cross-hand only modifiers, using `tap-unless-interrupted` and positional hold-tap (`hold-trigger-key-positions`) -``` +```dtsi title="Homerow Mods: Cross-hand Example" #include #include + / { behaviors { lh_pht: left_hand_positional_hold_tap { @@ -162,7 +180,7 @@ The following are suggested hold-tap configurations that work well with home row ##### Option 2: `tap-preferred` -``` +```dtsi title="Homerow Mods: Tap-Preferred Example" #include #include @@ -188,12 +206,11 @@ The following are suggested hold-tap configurations that work well with home row }; }; }; - ``` ##### Option 3: `balanced` -``` +```dtsi title="Homerow Mods: Balanced Example" #include #include @@ -219,9 +236,84 @@ The following are suggested hold-tap configurations that work well with home row }; }; }; +``` + + + + +A popular method of implementing Autoshift in ZMK involves a C-preprocessor macro, commonly defined as `AS(keycode)`. This macro applies the `LSHIFT` modifier to the specified `keycode` when `AS(keycode)` is held, and simply performs a [keypress](key-press.md), `&kp keycode`, when the `AS(keycode)` binding is tapped. This simplifies the use of Autoshift in a keymap, as the complete hold-tap bindings for each desired Autoshift key, as in `&as LS() &as LS() ... &as LS() `, can be quite cumbersome to use when applied to a large portion of the keymap. + +```dtsi title="Hold-Tap Example: Autoshift" +#include +#include + +#define AS(keycode) &as LS(keycode) keycode // Autoshift Macro + +/ { + behaviors { + as: auto_shift { + compatible = "zmk,behavior-hold-tap"; + label = "AUTO_SHIFT"; + #binding-cells = <2>; + tapping_term_ms = <135>; + quick_tap_ms = <0>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + AS(Q) AS(W) AS(E) AS(R) AS(T) AS(Y) // Autoshift applied for QWERTY keys + >; + }; + }; +}; +``` + + + + + +This hold-tap example implements a [toggle-layer](layers.md/#toggle-layer) when the keybind is tapped and a [momentary-layer](layers.md/#momentary-layer) when it is held. Similarly to the Autoshift and Sticky Hold use-cases, a `TOG_MO(layer)` macro is defined such that the `&tog` and `&mo` behaviors can target a single layer. + +```dtsi title="Hold-Tap Example: Toggle layer on Tap, Momentary layer on Hold" +#include +#include + +#define TOG_MO(layer) &tog_mo layer layer // Macro to apply toggle-layer-on-tap/momentary-layer-on-hold to a specific layer + +/ { + behaviors { + tog_mo: behavior_mo_tog { + compatible = "zmk,behavior-hold-tap"; + label = "mo_tog"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <200>; + bindings = <&tog>, <&mo>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &tog_mo 2 1 // &mo 2 on hold, &tog 1 on tap + TOG_MO(3) // &mo 3 on hold, &tog 3 on tap + >; + }; + }; +}; ``` -#### Comparison to QMK + + + + +### Comparison to QMK The hold-preferred flavor works similar to the `HOLD_ON_OTHER_KEY_PRESS` setting in QMK. The 'balanced' flavor is similar to the `PERMISSIVE_HOLD` setting, and the `tap-preferred` flavor is similar to `IGNORE_MOD_TAP_INTERRUPT`. diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 694b516a488..0818aaaeacc 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -43,7 +43,7 @@ Example: ## Layer-tap -The "layer-tap" behavior enables a layer when a key is held, and output another key when the key is only tapped for a short time. For more information on the inner workings of layer-tap, see [hold-tap](hold-tap.md). +The "layer-tap" behavior enables a layer when a key is held, and outputs a [keypress](key-press.md) when the key is only tapped for a short time. ### Behavior Binding @@ -57,6 +57,15 @@ Example: < LOWER SPACE ``` +:::info +Functionally, the layer-tap is a [hold-tap](hold-tap.md) of the ["tap-preferred" flavor](hold-tap.md/#flavors) and a [`tapping-term-ms`](hold-tap.md/#tapping-term-ms) of 200 that takes in a [`momentary layer`](#momentary-layer) and a [keypress](key-press.md) as its "hold" and "tap" parameters, respectively. + +For users who want to send a different [keycode](../codes/index.mdx) depending on if the same key is held or tapped, see [Mod-Tap](mod-tap.md). + +Similarly, for users looking to create a keybind like the layer-tap that depending on how long the key is held, invokes behaviors like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.md). + +::: + ## To Layer The "to layer" behavior enables a layer and disables _all_ other layers _except_ the default layer. diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index cc2b1ce0a60..5f4fa50653a 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -44,6 +44,11 @@ You can configure a different tapping term in your keymap: }; ``` -### Additional information +:::info +Under the hood, the mod-tap is simply a [hold-tap](hold-tap.md) of the ["hold-preferred" flavor](hold-tap.md/#flavors) with a [`tapping-term-ms`](hold-tap.md/#tapping-term-ms) of 200 that takes in two [keypresses](key-press.md) as its "hold" and "tap" parameters. This means that the mod-tap can be used to invoke **any** [keycode](../codes/index.mdx), and is not limited to only activating [modifier keys](../codes/modifiers.mdx) when it is held. -The mod-tap is a [hold-tap](hold-tap.md) under the hood with the "hold-preferred" flavor and tapping-term-ms 200. +For users who want to momentarily access a specific [layer](../features/keymaps#layers) while a key is held and send a keycode when the same key is tapped, see [Layer-Tap](layers.md/#layer-tap). + +Similarly, for users looking to create a keybind like the mod-tap that invokes behaviors _other_ than [keypresses](key-press.md), like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.md). + +::: diff --git a/docs/docs/behaviors/tap-dance.md b/docs/docs/behaviors/tap-dance.md index af49ca3ca85..65d5e7659d6 100644 --- a/docs/docs/behaviors/tap-dance.md +++ b/docs/docs/behaviors/tap-dance.md @@ -3,39 +3,41 @@ title: Tap-Dance Behavior sidebar_label: Tap-Dance --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + ## Summary -A tap-dance key invokes a different behavior (e.g. `kp`) corresponding -to how many times it is pressed. For example, you could configure a -tap-dance key that acts as `LSHIFT` if tapped once, or Caps _Lock_ if tapped twice. -The expandability of the number of [`bindings`](#bindings) attached to a -particular tap-dance is a great way to add more functionality to a single key, -especially for keyboards with a limited number of keys. -Tap-dances are completely custom, so for every unique tap-dance key, -a new tap-dance must be defined in your keymap's `behaviors`. +A tap-dance key invokes a different behavior (e.g. `kp`) corresponding to how many times it is pressed. For example, you could configure a tap-dance key that acts as `LSHIFT` if tapped once, or Caps _Lock_ if tapped twice. The expandability of the number of [`bindings`](#bindings) attached to a particular tap-dance is a great way to add more functionality to a single key, especially for keyboards with a limited number of keys. Tap-dances are completely custom, so for every unique tap-dance key,a new tap-dance must be defined in your keymap's `behaviors`. -Tap-dances are designed to resolve immediately when interrupted by another keypress. -Meaning, when a keybind is pressed other than any active tap-dances, -the tap-dance will activate according to the current value of its -counter before the interrupting keybind is registered. +Tap-dances are designed to resolve immediately when interrupted by another keypress. Meaning, when a keybind is pressed other than any active tap-dances, the tap-dance will activate according to the current value of its counter before the interrupting keybind is registered. ### Configuration #### `tapping-term-ms` -Defines the maximum elapsed time after the last tap-dance keybind press -before a binding is selected from [`bindings`](#bindings). -Default value is `200`ms. +Defines the maximum elapsed time after the last tap-dance keybind press before a binding is selected from [`bindings`](#bindings). Default value is `200`ms. #### `bindings` -An array of one or more keybinds. This list can include [any ZMK keycode](../codes/) and bindings for ZMK behaviors. +An array of one or more keybinds. This list can include [any ZMK keycode](../codes/) and any listed ZMK behavior, like [hold-taps](hold-tap.md), or [sticky keys](sticky-key.md). The index of a keybind in the `bindings` array corresponds to the number of times the tap-dance binding is pressed. For example, in the [basic tap-dance counter](#basic-example-counter) shown below, `&kp N2` is the second binding in the array of `bindings`: we then see an output of `2` when the `td0` binding is pressed twice. -#### Example Usage +The number of bindings in this array also determines the tap-dance's maximum number of keypresses. When a tap-dance reaches its maximum number of keypresses, it will immediately invoke the last behavior in its list of `bindings`, rather than waiting for [`tapping-term-ms`](#tapping-term-ms) to expire before the output is displayed. -This example configures a tap-dance named `td0` that outputs the number of times it is pressed from 1-3. +### Example Usage -``` + + + + +This example configures a tap-dance named `td0` that outputs the number of times its binding is pressed from 1-3. + +```title="Basic Tap-Dance Example: Counter" #include #include @@ -67,10 +69,41 @@ The following image describes the behavior of this particular tap-dance. ![Timing Diagram](../assets/tap-dance/timing_diagram.svg) :::note -Alphanumeric [`key press`](key-press.md) bindings, like those used for `td0`, -will release as soon as an interrupting key press occurs. -For instance, if a modifier key like `LSHIFT` were to replace the `N1` -binding in the last example above, it would remain pressed until `td0`'s -binding is released and the output would instead be `J`. Any following -alphanumeric key presses would be capitalized as long as `td0` is held down. +Alphanumeric [`key press`](key-press.md) bindings, like those used for `td0`, will release as soon as an interrupting key press occurs. For instance, if a modifier key like `LSHIFT` were to replace the `N1` binding in the last example above, it would remain pressed until `td0`'s binding is released and the output would instead be `J`. Any following alphanumeric key presses would be capitalized as long as `td0` is held down. ::: + + + + + +This example configures a mod-tap inside a tap-dance named `td_mt` that outputs `CAPSLOCK` on a single tap, `LSHIFT` on a single press and hold, and `LCTRL` when the tap-dance is pressed twice. + +```title="Advanced Tap-Dance Example: Nested Mod-Tap" +#include +#include + +/ { + behaviors { + td_mt: tap_dance_mod_tap { + compatible = "zmk,behavior-tap-dance"; + label = "TAP_DANCE_MOD_TAP"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&mt LSHIFT CAPSLOCK>, <&kp LCTRL>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &td_mt + >; + }; + }; +}; +``` + + + From fc511e40cc1a274473a753c959f8d7e5fcc317d0 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 3 Aug 2022 20:09:50 -0400 Subject: [PATCH 0504/1130] fix(behaviors): Fixing erroneous combo triggering, hold-taps sticking * This is a very simple fix to a rather complicated issue. Essentially, hold-taps will "release" (raise) their captured keys before actually telling the event manager they have captured a key. This means the event manager ends up assigning the `last_listener_index` to the hold-tap subscription rather than the combo. So when the combo calls `ZMK_EVENT_RELEASE` it raises after the hold-tap instead of after the combo as the combo code expects. * The corresponding test (which fails without this change) has also been added. * An event can be captured and released in the same event handler, before the last_listener_index would have been updated. This causes some handlers to be triggered multiple times. * The solution is to update the last_listener_index before calling the next event handler, so capturing and releasing within an event handler is harmless. * Also see discussion at https://github.com/zmkfirmware/zmk/pull/1401 * If our handler dedides our undedided hold-tap, return early before continuing. * Fix incorrect pointer logic, resulting in combo candidate filtering leaving incorrect timeout details. Co-authored-by: Andrew Rae Co-authored-by: okke --- app/src/behaviors/behavior_hold_tap.c | 4 ++ app/src/combo.c | 2 +- app/src/event_manager.c | 2 +- .../combos-and-holdtaps-3/events.patterns | 1 + .../keycode_events.snapshot | 5 ++ .../native_posix_64.keymap | 40 ++++++++++++++++ .../combos-and-holdtaps-4/events.patterns | 1 + .../keycode_events.snapshot | 4 ++ .../native_posix_64.keymap | 46 +++++++++++++++++++ 9 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 app/tests/combo/combos-and-holdtaps-3/events.patterns create mode 100644 app/tests/combo/combos-and-holdtaps-3/keycode_events.snapshot create mode 100644 app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap create mode 100644 app/tests/combo/combos-and-holdtaps-4/events.patterns create mode 100644 app/tests/combo/combos-and-holdtaps-4/keycode_events.snapshot create mode 100644 app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 413806b467f..f09006ed716 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -612,6 +612,10 @@ static int position_state_changed_listener(const zmk_event_t *eh) { decide_hold_tap(undecided_hold_tap, HT_TIMER_EVENT); } + if (undecided_hold_tap == NULL) { + return ZMK_EV_EVENT_BUBBLE; + } + if (!ev->state && find_captured_keydown_event(ev->position) == NULL) { // no keydown event has been captured, let it bubble. // we'll catch modifiers later in modifier_state_changed_listener diff --git a/app/src/combo.c b/app/src/combo.c index 13ed1709215..e434ae170bc 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -211,7 +211,7 @@ static int filter_timed_out_candidates(int64_t timestamp) { if (candidate->timeout_at > timestamp) { // reorder candidates so they're contiguous candidates[num_candidates].combo = candidate->combo; - candidates[num_candidates].timeout_at = candidates->timeout_at; + candidates[num_candidates].timeout_at = candidate->timeout_at; num_candidates++; } else { candidate->combo = NULL; diff --git a/app/src/event_manager.c b/app/src/event_manager.c index eef5d839542..471432a8b01 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -25,6 +25,7 @@ int zmk_event_manager_handle_from(zmk_event_t *event, uint8_t start_index) { if (ev_sub->event_type != event->event) { continue; } + event->last_listener_index = i; ret = ev_sub->listener->callback(event); switch (ret) { case ZMK_EV_EVENT_BUBBLE: @@ -35,7 +36,6 @@ int zmk_event_manager_handle_from(zmk_event_t *event, uint8_t start_index) { goto release; case ZMK_EV_EVENT_CAPTURED: LOG_DBG("Listener captured the event"); - event->last_listener_index = i; // Listeners are expected to free events they capture return 0; default: diff --git a/app/tests/combo/combos-and-holdtaps-3/events.patterns b/app/tests/combo/combos-and-holdtaps-3/events.patterns new file mode 100644 index 00000000000..833100f6ac4 --- /dev/null +++ b/app/tests/combo/combos-and-holdtaps-3/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-3/keycode_events.snapshot b/app/tests/combo/combos-and-holdtaps-3/keycode_events.snapshot new file mode 100644 index 00000000000..843832ddbc1 --- /dev/null +++ b/app/tests/combo/combos-and-holdtaps-3/keycode_events.snapshot @@ -0,0 +1,5 @@ +pressed: usage_page 0x07 keycode 0xE5 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap new file mode 100644 index 00000000000..d405379327c --- /dev/null +++ b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap @@ -0,0 +1,40 @@ +#include +#include +#include + +&mt { + flavor = "hold-preferred"; +}; + +/ { + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <40>; + key-positions = <0 1>; + bindings = <&kp X>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &mt RSHFT RET &kp C + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,1,50) + ZMK_MOCK_RELEASE(1,1,50) + >; +}; diff --git a/app/tests/combo/combos-and-holdtaps-4/events.patterns b/app/tests/combo/combos-and-holdtaps-4/events.patterns new file mode 100644 index 00000000000..833100f6ac4 --- /dev/null +++ b/app/tests/combo/combos-and-holdtaps-4/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-4/keycode_events.snapshot b/app/tests/combo/combos-and-holdtaps-4/keycode_events.snapshot new file mode 100644 index 00000000000..f84bc761b33 --- /dev/null +++ b/app/tests/combo/combos-and-holdtaps-4/keycode_events.snapshot @@ -0,0 +1,4 @@ +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap new file mode 100644 index 00000000000..ba6cecc6495 --- /dev/null +++ b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap @@ -0,0 +1,46 @@ +#include +#include +#include + + +#define ZMK_COMBO(name, combo_bindings, keypos, combo_term) \ +/ { \ + combos { \ + compatible = "zmk,combos"; \ + combo_ ## name { \ + key-positions = ; \ + bindings = ; \ + timeout-ms = ; \ + }; \ + }; \ +}; + +ZMK_COMBO(qmark, &kp QMARK, 0 3, 30) +ZMK_COMBO(dllr, &kp DLLR, 1 3, 50) +ZMK_COMBO(tilde, &kp TILDE, 3 4, 50) + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &none &none + &kp A &mt LSHFT T + &none + >; + }; + }; +}; + +&kscan { + rows = <3>; + columns = <2>; + events = < + ZMK_MOCK_PRESS(1,1,500) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,500) + ZMK_MOCK_RELEASE(1,1,0) + >; +}; \ No newline at end of file From f238001904a220a08b53606fff034e747b0dbd77 Mon Sep 17 00:00:00 2001 From: Anton <14187674+antosha417@users.noreply.github.com> Date: Fri, 12 Aug 2022 14:37:06 +0300 Subject: [PATCH 0505/1130] doc(keymaps): fix typo (#1425) --- docs/docs/features/keymaps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index 59577d8fef0..6d4e5f2c5f9 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -58,7 +58,7 @@ in the stack _also_ get the event. Binding a behavior at a certain key position may include up to two extra parameters that are used to alter the behavior when that specific key position is activated/deactivated. For example, when binding -the "key press" (`kp`) behavior at a certain key position, you must specific _which_ keycode should +the "key press" (`kp`) behavior at a certain key position, you must specify _which_ keycode should be used for that key position. ``` From b21ddcf79ab11a6631e6e992aa4ec291ae09db2f Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Fri, 19 Aug 2022 10:29:12 -0400 Subject: [PATCH 0506/1130] fix(docs): added concrete number for Bluetooth advertising name length * Update new-shield.md * Update config docs. --- docs/docs/config/system.md | 2 +- docs/docs/development/new-shield.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 4784339cefd..a5347b96a1b 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -15,7 +15,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | Config | Type | Description | Default | | ------------------------------------ | ------ | ----------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard | | +| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | | | `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | | `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | | `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 03a27289fbf..565f424c844 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -77,7 +77,7 @@ which controls the display name of the device over USB and BLE. The updated new default values should always be wrapped inside a conditional on the shield config name defined in the `Kconfig.shield` file. Here's the simplest example file. :::warning -Do not make the keyboard name too long, otherwise the bluetooth advertising might fail and you will not be able to find your keyboard from your laptop / tablet. +The keyboard name must be less than or equal to 16 characters in length, otherwise the bluetooth advertising might fail and you will not be able to find your keyboard from your device. ::: ``` From 391f80f06952c288e2f66c23eaa742644fd927e1 Mon Sep 17 00:00:00 2001 From: Shreyas <69219163+shrekale@users.noreply.github.com> Date: Mon, 22 Aug 2022 00:27:47 -0400 Subject: [PATCH 0507/1130] feat(hid): Add C_AC_DESKTOP_SHOW_ALL_APPLICATIONS * support for C_AC_DESKTOP_SHOW_ALL_APPLICATIONS Co-authored-by: Shreyas Kale --- app/include/dt-bindings/zmk/keys.h | 4 ++++ docs/src/data/groups.js | 1 + docs/src/data/hid.js | 25 +++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index 32e78795968..d144ebb353b 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -1404,6 +1404,10 @@ #define C_AC_DESKTOP_SHOW_ALL_WINDOWS \ (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_WINDOWS)) +/* Consumer AC Desktop Show All Applications */ +#define C_AC_DESKTOP_SHOW_ALL_APPLICATIONS \ + (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_APPLICATIONS)) + /* Consumer Keyboard Input Assist Previous */ #define C_KEYBOARD_INPUT_ASSIST_PREVIOUS \ (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS)) diff --git a/docs/src/data/groups.js b/docs/src/data/groups.js index f7ced16199b..0eb15d27fc5 100644 --- a/docs/src/data/groups.js +++ b/docs/src/data/groups.js @@ -47,6 +47,7 @@ export default { "C_AC_DEL", "C_AC_VIEW_TOGGLE", "C_AC_DESKTOP_SHOW_ALL_WINDOWS", + "C_AC_DESKTOP_SHOW_ALL_APPLICATIONS", "C_VOICE_COMMAND", ], applications: [ diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index f2bde565a3b..ac90ea80c0e 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -7251,7 +7251,7 @@ export default [ windows: null, linux: true, android: true, - macos: null, + macos: true, ios: null, }, footnotes: {}, @@ -7713,7 +7713,28 @@ export default [ windows: null, linux: true, android: null, - macos: null, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_DESKTOP_SHOW_ALL_APPLICATIONS"], + description: "Desktop Show All Applications", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2a2), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=153", + os: { + windows: null, + linux: true, + android: null, + macos: true, ios: null, }, footnotes: {}, From ce7a0e2b6c72ac19008d9974be8b14c0455b9f0f Mon Sep 17 00:00:00 2001 From: Elliot Pahl Date: Tue, 6 Sep 2022 08:07:02 +1000 Subject: [PATCH 0508/1130] feat(shields): Add Eternal Keypad * Add Eternal Keypad Co-authored-by: Duccio --- .../shields/eternal_keypad/Kconfig.defconfig | 9 +++ .../shields/eternal_keypad/Kconfig.shield | 8 +++ app/boards/shields/eternal_keypad/README.md | 10 ++++ .../boards/nice_nano_v2.overlay | 38 +++++++++++++ .../eternal_keypad/eternal_keypad.conf | 9 +++ .../eternal_keypad/eternal_keypad.dtsi | 53 ++++++++++++++++++ .../eternal_keypad/eternal_keypad.keymap | 56 +++++++++++++++++++ .../eternal_keypad/eternal_keypad.overlay | 7 +++ .../eternal_keypad/eternal_keypad.zmk.yml | 9 +++ .../eternal_keypad_lefty.keymap | 56 +++++++++++++++++++ .../eternal_keypad_lefty.overlay | 7 +++ .../eternal_keypad_lefty.zmk.yml | 9 +++ 12 files changed, 271 insertions(+) create mode 100644 app/boards/shields/eternal_keypad/Kconfig.defconfig create mode 100644 app/boards/shields/eternal_keypad/Kconfig.shield create mode 100644 app/boards/shields/eternal_keypad/README.md create mode 100644 app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad.conf create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad.dtsi create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad.keymap create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad.overlay create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad.zmk.yml create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad_lefty.overlay create mode 100644 app/boards/shields/eternal_keypad/eternal_keypad_lefty.zmk.yml diff --git a/app/boards/shields/eternal_keypad/Kconfig.defconfig b/app/boards/shields/eternal_keypad/Kconfig.defconfig new file mode 100644 index 00000000000..4d4195ef759 --- /dev/null +++ b/app/boards/shields/eternal_keypad/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ETERNAL_KEYPAD || SHIELD_ETERNAL_KEYPAD_LEFTY + +config ZMK_KEYBOARD_NAME + default "Eternal Keypad" + +endif diff --git a/app/boards/shields/eternal_keypad/Kconfig.shield b/app/boards/shields/eternal_keypad/Kconfig.shield new file mode 100644 index 00000000000..4a59379e5c1 --- /dev/null +++ b/app/boards/shields/eternal_keypad/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ETERNAL_KEYPAD + def_bool $(shields_list_contains,eternal_keypad) + +config SHIELD_ETERNAL_KEYPAD_LEFTY + def_bool $(shields_list_contains,eternal_keypad_lefty) diff --git a/app/boards/shields/eternal_keypad/README.md b/app/boards/shields/eternal_keypad/README.md new file mode 100644 index 00000000000..4b217c5fdc5 --- /dev/null +++ b/app/boards/shields/eternal_keypad/README.md @@ -0,0 +1,10 @@ +# Eternal Keypad + +Eternal Keypad is an open-source input device for gaming that can be assembled for both right and left hand mouse users. + +Firmware is described in the [Eternal Keypad](https://github.com/duckyb/eternal-keypad) repository [README](https://github.com/duckyb/eternal-keypad#firmware). + +Two keymaps are included: + +- eternal_keypad (default) +- eternal_keypad_lefty (for left handed users) diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..61950d18d52 --- /dev/null +++ b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + /* Cannot be used together with i2c0. */ + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "SK6812mini"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <8>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.conf b/app/boards/shields/eternal_keypad/eternal_keypad.conf new file mode 100644 index 00000000000..65fa295516d --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment to turn on logging, and set ZMK logging to debug output +# CONFIG_ZMK_USB_LOGGING=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi new file mode 100644 index 00000000000..6319d9e03a2 --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <8>; + rows = <5>; + map = < + RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) + RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,5) RC(4,7) + >; + }; +}; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.keymap b/app/boards/shields/eternal_keypad/eternal_keypad.keymap new file mode 100644 index 00000000000..0f3eda7bf27 --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad.keymap @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#define BASE 0 +#define ARROW 1 +#define FUNC 2 + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp N7 + &kp F13 &kp ENTER &kp A &kp S &kp D &kp F &kp G &kp N8 + &kp F14 &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N9 + &kp F15 &kp LCTRL &sl FUNC &kp LALT &kp SPACE < ARROW N0 + >; + }; + + arrow_layer { + bindings = < + &bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE + &trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD + &bt BT_CLR &trans &kp LEFT &kp DOWN &kp RIGHT &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD + &reset &trans &trans &trans &trans &trans &rgb_ug RGB_EFF &rgb_ug RGB_EFR + &bootloader &trans &trans &trans &trans &trans + >; + }; + + function_layer { + bindings = < + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 + &trans &kp P &kp O &kp I &kp U &kp Y &kp F7 + &bt BT_CLR &kp BSPC &kp SEMI &kp L &kp K &kp J &kp H &kp F8 + &reset &trans &kp LGUI &kp M &kp N &kp F12 &kp F11 &kp F9 + &bootloader &trans &trans &trans &trans &kp F10 + >; + }; + }; +}; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.overlay b/app/boards/shields/eternal_keypad/eternal_keypad.overlay new file mode 100644 index 00000000000..4828baf7381 --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "eternal_keypad.dtsi" diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.zmk.yml b/app/boards/shields/eternal_keypad/eternal_keypad.zmk.yml new file mode 100644 index 00000000000..c5c86bc7c2e --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: eternal_keypad +name: Eternal Keypad +type: shield +url: https://github.com/duckyb/eternal-keypad +requires: [pro_micro] +features: + - keys + - underglow diff --git a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap new file mode 100644 index 00000000000..e1bddbadc9b --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#define BASE 0 +#define ARROW 1 +#define FUNC 2 + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp N7 + &kp F13 &kp ENTER &kp D &kp S &kp A &kp F &kp G &kp N8 + &kp F14 &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N9 + &kp F15 &kp LCTRL &sl FUNC &kp LALT &kp SPACE < ARROW N0 + >; + }; + + arrow_layer { + bindings = < + &bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE + &trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD + &bt BT_CLR &trans &kp RIGHT &kp DOWN &kp RIGHT &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD + &reset &trans &trans &trans &trans &trans &rgb_ug RGB_EFF &rgb_ug RGB_EFR + &bootloader &trans &trans &trans &trans &trans + >; + }; + + function_layer { + bindings = < + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 + &trans &kp P &kp O &kp I &kp U &kp Y &kp F7 + &bt BT_CLR &kp BSPC &kp SEMI &kp L &kp K &kp J &kp H &kp F8 + &reset &trans &kp LGUI &kp M &kp N &kp F12 &kp F11 &kp F9 + &bootloader &trans &trans &trans &trans &kp F10 + >; + }; + }; +}; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.overlay b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.overlay new file mode 100644 index 00000000000..0c5599a16b8 --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 202 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "eternal_keypad.dtsi" diff --git a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.zmk.yml b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.zmk.yml new file mode 100644 index 00000000000..9f5fb57858e --- /dev/null +++ b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: eternal_keypad_lefty +name: Eternal Keypad Lefty +type: shield +url: https://github.com/duckyb/eternal-keypad +requires: [pro_micro] +features: + - keys + - underglow From 41bfc56e137df2b30e2208fd0b9afafd4d4db4b6 Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 6 Sep 2022 00:15:24 +0200 Subject: [PATCH 0509/1130] feat(board): add puchi_ble_v1 to boards * feat(board): Add Puchi-BLE v1 board --- app/boards/arm/puchi_ble/CMakeLists.txt | 6 + app/boards/arm/puchi_ble/Kconfig | 3 + app/boards/arm/puchi_ble/Kconfig.board | 8 ++ app/boards/arm/puchi_ble/Kconfig.defconfig | 28 ++++ .../arm/puchi_ble/arduino_pro_micro_pins.dtsi | 59 +++++++++ app/boards/arm/puchi_ble/board.cmake | 6 + app/boards/arm/puchi_ble/pinmux.c | 29 +++++ app/boards/arm/puchi_ble/puchi_ble_v1.dts | 121 ++++++++++++++++++ app/boards/arm/puchi_ble/puchi_ble_v1.yaml | 15 +++ app/boards/arm/puchi_ble/puchi_ble_v1.zmk.yml | 10 ++ .../arm/puchi_ble/puchi_ble_v1_defconfig | 24 ++++ 11 files changed, 309 insertions(+) create mode 100644 app/boards/arm/puchi_ble/CMakeLists.txt create mode 100644 app/boards/arm/puchi_ble/Kconfig create mode 100644 app/boards/arm/puchi_ble/Kconfig.board create mode 100644 app/boards/arm/puchi_ble/Kconfig.defconfig create mode 100644 app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi create mode 100644 app/boards/arm/puchi_ble/board.cmake create mode 100644 app/boards/arm/puchi_ble/pinmux.c create mode 100644 app/boards/arm/puchi_ble/puchi_ble_v1.dts create mode 100644 app/boards/arm/puchi_ble/puchi_ble_v1.yaml create mode 100644 app/boards/arm/puchi_ble/puchi_ble_v1.zmk.yml create mode 100644 app/boards/arm/puchi_ble/puchi_ble_v1_defconfig diff --git a/app/boards/arm/puchi_ble/CMakeLists.txt b/app/boards/arm/puchi_ble/CMakeLists.txt new file mode 100644 index 00000000000..12cf9b1cf1a --- /dev/null +++ b/app/boards/arm/puchi_ble/CMakeLists.txt @@ -0,0 +1,6 @@ + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() \ No newline at end of file diff --git a/app/boards/arm/puchi_ble/Kconfig b/app/boards/arm/puchi_ble/Kconfig new file mode 100644 index 00000000000..719c3845721 --- /dev/null +++ b/app/boards/arm/puchi_ble/Kconfig @@ -0,0 +1,3 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + diff --git a/app/boards/arm/puchi_ble/Kconfig.board b/app/boards/arm/puchi_ble/Kconfig.board new file mode 100644 index 00000000000..0763888513f --- /dev/null +++ b/app/boards/arm/puchi_ble/Kconfig.board @@ -0,0 +1,8 @@ +# Puchi-BLE board configuration + +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_PUCHI_BLE_v1 + bool "puchi_ble_v1" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/puchi_ble/Kconfig.defconfig b/app/boards/arm/puchi_ble/Kconfig.defconfig new file mode 100644 index 00000000000..94d12c17b63 --- /dev/null +++ b/app/boards/arm/puchi_ble/Kconfig.defconfig @@ -0,0 +1,28 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_PUCHI_BLE_v1 + +config BOARD + default "puchi_ble" + +if USB_DEVICE_STACK + +config USB_NRFX + default y + +endif # USB_DEVICE_STACK + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config PINMUX + default y + +endif # BOARD_PUCHI_BLE_v1 diff --git a/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi b/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi new file mode 100644 index 00000000000..ed3317f1c73 --- /dev/null +++ b/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + , <18 0 &gpio0 2 0> /* D18/A0 */ + , <19 0 &gpio0 29 0> /* D19/A1 */ + , <20 0 &gpio0 31 0> /* D20/A2 */ + , <21 0 &gpio0 30 0> /* D21/A3 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* D18/A0 */ + , <1 0 &gpio0 29 0> /* D19/A1 */ + , <2 0 &gpio0 31 0> /* D20/A2 */ + , <3 0 &gpio0 30 0> /* D21/A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; +}; + + +pro_micro_d: &pro_micro {}; +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/puchi_ble/board.cmake b/app/boards/arm/puchi_ble/board.cmake new file mode 100644 index 00000000000..3b5c4aeafa1 --- /dev/null +++ b/app/boards/arm/puchi_ble/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/puchi_ble/pinmux.c b/app/boards/arm/puchi_ble/pinmux.c new file mode 100644 index 00000000000..78cea3141f8 --- /dev/null +++ b/app/boards/arm/puchi_ble/pinmux.c @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +static int pinmux_puchi_ble_init(const struct device *port) { + ARG_UNUSED(port); + +#if CONFIG_BOARD_PUCHI_BLE_v1 + const struct device *p0 = device_get_binding("GPIO_0"); +#if CONFIG_BOARD_PUCHI_BLE_CHARGER + gpio_pin_configure(p0, 5, GPIO_OUTPUT); + gpio_pin_set(p0, 5, 0); +#else + gpio_pin_configure(p0, 5, GPIO_INPUT); +#endif +#endif + return 0; +} + +SYS_INIT(pinmux_puchi_ble_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.dts b/app/boards/arm/puchi_ble/puchi_ble_v1.dts new file mode 100644 index 00000000000..e324cccc1dc --- /dev/null +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.dts @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "puchi_ble"; + compatible = "puchi_ble"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + tx-pin = <6>; + rx-pin = <8>; +}; + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.yaml b/app/boards/arm/puchi_ble/puchi_ble_v1.yaml new file mode 100644 index 00000000000..18770722242 --- /dev/null +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.yaml @@ -0,0 +1,15 @@ +identifier: puchi_ble_v1 +name: puchi_ble_v1 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.zmk.yml b/app/boards/arm/puchi_ble/puchi_ble_v1.zmk.yml new file mode 100644 index 00000000000..f3114008043 --- /dev/null +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: puchi_ble_v1 +name: Puchi-BLE V1 +type: board +arch: arm +outputs: + - usb + - ble +url: https://keycapsss.com/keyboard-parts/mcu-controller/202/puchi-ble-wireless-microcontroller +exposes: [pro_micro] diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig b/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig new file mode 100644 index 00000000000..e32886d0596 --- /dev/null +++ b/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_PUCHI_BLE_v1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y From 6124d254f94ab6c115172311e0878a159b8ddcaa Mon Sep 17 00:00:00 2001 From: John Drogo Date: Sun, 11 Sep 2022 00:05:15 -0700 Subject: [PATCH 0510/1130] fix(usb): add USB_DC_RESUME to supported states All credit for this one goes to @xudongzheng (thanks for helping debug this!). Should fix the issue where keyboards go unresponsive after their host machine wakes from sleep due to the USB driver entering an error state. I was able to both reliably reproduce the issue before the patch goes in and confirmed it no longer occurs post patch. The `USB_DC_RESUME` state indicates the host event has resumed the connection. Adding it to the list of valid connection states to prevent the error when waking from sleep. Zephyr API Link: https://docs.zephyrproject.org/apidoc/latest/group____usb__device__controller__api.html#gac09e3e0af1a2b41a5bfbad91f900baf7 fixes #1372 --- app/src/usb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/usb.c b/app/src/usb.c index 5f170ee665a..aa2d3e754dc 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -33,6 +33,7 @@ enum zmk_usb_conn_state zmk_usb_get_conn_state() { switch (usb_status) { case USB_DC_SUSPEND: case USB_DC_CONFIGURED: + case USB_DC_RESUME: return ZMK_USB_CONN_HID; case USB_DC_DISCONNECTED: From 3f28a55452eb34d02876e0c98bdc4be9e00936c3 Mon Sep 17 00:00:00 2001 From: Robert U <978080+urob@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:06:04 -0400 Subject: [PATCH 0511/1130] fix(docs): Fix ambiguous tap-preferred desc. --- docs/docs/behaviors/hold-tap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 528b9aec742..667e5df88f7 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -28,7 +28,7 @@ We call this the 'hold-preferred' flavor of hold-taps. While this flavor may wor - The 'hold-preferred' flavor triggers the hold behavior when the `tapping-term-ms` has expired or another key is pressed. - The 'balanced' flavor will trigger the hold behavior when the `tapping-term-ms` has expired or another key is pressed and released. -- The 'tap-preferred' flavor triggers the hold behavior when the `tapping-term-ms` has expired. It triggers the tap behavior when another key is pressed. +- The 'tap-preferred' flavor triggers the hold behavior when the `tapping-term-ms` has expired. Pressing another key within `tapping-term-ms` does not affect the decision. - The 'tap-unless-interrupted' flavor triggers a hold behavior only when another key is pressed before `tapping-term-ms` has expired. It triggers the tap behavior in all other situations. When the hold-tap key is released and the hold behavior has not been triggered, the tap behavior will trigger. From cc6dd5fc49f977546c3a686a5a89f66af781485c Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:45:52 +0100 Subject: [PATCH 0512/1130] chore(lighting): fix deprecation Removed deprecated macros, replace with correct Zephyr 3 implementation --- app/src/backlight.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/backlight.c b/app/src/backlight.c index 28a93e73d15..159c6fb25f1 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -75,7 +75,7 @@ static void backlight_save_work_handler(struct k_work *work) { settings_save_one("backlight/state", &state, sizeof(state)); } -static K_DELAYED_WORK_DEFINE(backlight_save_work, backlight_save_work_handler); +static struct k_work_delayable backlight_save_work; #endif static int zmk_backlight_init(const struct device *_arg) { @@ -90,6 +90,7 @@ static int zmk_backlight_init(const struct device *_arg) { if (rc != 0) { LOG_ERR("Failed to load backlight settings: %d", rc); } + k_work_init_delayable(&backlight_save_work, backlight_save_work_handler); #endif #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) state.on = zmk_usb_is_powered(); @@ -104,8 +105,8 @@ static int zmk_backlight_update_and_save() { } #if IS_ENABLED(CONFIG_SETTINGS) - k_delayed_work_cancel(&backlight_save_work); - return k_delayed_work_submit(&backlight_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + int ret = k_work_reschedule(&backlight_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + return MIN(ret, 0); #else return 0; #endif From 597a48ff2db4e88188ce8f7acf6ac57069f04de7 Mon Sep 17 00:00:00 2001 From: "David A. Bell" <8835326+dabell-cc@users.noreply.github.com> Date: Tue, 2 Aug 2022 14:41:55 -0400 Subject: [PATCH 0513/1130] Update hold-tap.md The bindings for the toggle-layer-on-tap/momentary-layer-on-hold example code were backwards, resulting in toggle-on-hold. This also made momentary unachievable. --- docs/docs/behaviors/hold-tap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 667e5df88f7..8fc94523afe 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -294,7 +294,7 @@ This hold-tap example implements a [toggle-layer](layers.md/#toggle-layer) when #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <200>; - bindings = <&tog>, <&mo>; + bindings = <&mo>, <&tog>; }; }; From 9756a16306e0c927ea2d869c87e73fdd518fac28 Mon Sep 17 00:00:00 2001 From: "David A. Bell" <8835326+dabell-cc@users.noreply.github.com> Date: Wed, 3 Aug 2022 20:11:11 -0400 Subject: [PATCH 0514/1130] fix(docs): Consistent naming in Mo-Tog example. Updated all references in example to conform to Hold action-Tap action wording order. --- docs/docs/behaviors/hold-tap.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 8fc94523afe..212cff9f690 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -276,19 +276,19 @@ A popular method of implementing Autoshift in ZMK involves a C-preprocessor macr - + -This hold-tap example implements a [toggle-layer](layers.md/#toggle-layer) when the keybind is tapped and a [momentary-layer](layers.md/#momentary-layer) when it is held. Similarly to the Autoshift and Sticky Hold use-cases, a `TOG_MO(layer)` macro is defined such that the `&tog` and `&mo` behaviors can target a single layer. +This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) when it is held and a [toggle-layer](layers.md/#toggle-layer) when the keybind is tapped. Similarly to the Autoshift and Sticky Hold use-cases, a `MO_TOG(layer)` macro is defined such that the `&mo` and `&tog` behaviors can target a single layer. -```dtsi title="Hold-Tap Example: Toggle layer on Tap, Momentary layer on Hold" +```dtsi title="Hold-Tap Example: Momentary layer on Hold, Toggle layer on Tap" #include #include -#define TOG_MO(layer) &tog_mo layer layer // Macro to apply toggle-layer-on-tap/momentary-layer-on-hold to a specific layer +#define MO_TOG(layer) &mo_tog layer layer // Macro to apply momentary-layer-on-hold/toggle-layer-on-tap to a specific layer / { behaviors { - tog_mo: behavior_mo_tog { + mo_tog: behavior_mo_tog { compatible = "zmk,behavior-hold-tap"; label = "mo_tog"; #binding-cells = <2>; @@ -302,8 +302,8 @@ This hold-tap example implements a [toggle-layer](layers.md/#toggle-layer) when compatible = "zmk,keymap"; default_layer { bindings = < - &tog_mo 2 1 // &mo 2 on hold, &tog 1 on tap - TOG_MO(3) // &mo 3 on hold, &tog 3 on tap + &mo_tog 2 1 // &mo 2 on hold, &tog 1 on tap + MO_TOG(3) // &mo 3 on hold, &tog 3 on tap >; }; }; From 8f6733395705fa3ad52632f4be11d3d055bbddf8 Mon Sep 17 00:00:00 2001 From: "David A. Bell" <8835326+dabell-cc@users.noreply.github.com> Date: Thu, 4 Aug 2022 08:00:25 -0400 Subject: [PATCH 0515/1130] Update docs/docs/behaviors/hold-tap.md Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/hold-tap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 212cff9f690..8b2dbba8c43 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -278,7 +278,7 @@ A popular method of implementing Autoshift in ZMK involves a C-preprocessor macr -This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) when it is held and a [toggle-layer](layers.md/#toggle-layer) when the keybind is tapped. Similarly to the Autoshift and Sticky Hold use-cases, a `MO_TOG(layer)` macro is defined such that the `&mo` and `&tog` behaviors can target a single layer. +This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) when the keybind is held and a [toggle-layer](layers.md/#toggle-layer) when it is tapped. Similar to the Autoshift and Sticky Hold use-cases, a `MO_TOG(layer)` macro is defined such that the `&mo` and `&tog` behaviors can target a single layer. ```dtsi title="Hold-Tap Example: Momentary layer on Hold, Toggle layer on Tap" #include From b655554b03f16519b23626b612b2d70cc2a648b8 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Thu, 22 Sep 2022 19:14:09 +0000 Subject: [PATCH 0516/1130] refactor(boards): CRBN and Planck keymap fixes * Update planck_rev6.keymap Third layer was causing problems so i moved reset and bootloader to second layer * BT_sel functions A customer requested this so we added it * Update crbn.keymap Co-authored-by: Nick Winans --- app/boards/arm/planck/planck_rev6.keymap | 42 +++++++++++++++++++----- app/boards/shields/crbn/README.md | 1 - app/boards/shields/crbn/crbn.keymap | 22 +++++++------ 3 files changed, 45 insertions(+), 20 deletions(-) delete mode 100644 app/boards/shields/crbn/README.md diff --git a/app/boards/arm/planck/planck_rev6.keymap b/app/boards/arm/planck/planck_rev6.keymap index 47e63dc0a35..bbfb770e3a9 100644 --- a/app/boards/arm/planck/planck_rev6.keymap +++ b/app/boards/arm/planck/planck_rev6.keymap @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + #include #include @@ -6,16 +12,34 @@ compatible = "zmk,keymap"; default_layer { -// ----------------------------------------------------------------------------------------- -// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | -// | ESC | A | S | D | F | G | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | -// | FN | LGUI | LALT | LCTL | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + // ----------------------------------------------------------------------------------------- + // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | + // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | + // | | LCTL | LALT | LGUI | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET + &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &trans &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + }; + + lower { + bindings = < + &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(HASH) &kp LS(BSLH) &kp HOME &kp END &trans + &trans &trans &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + >; + }; + + raise { bindings = < - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL - &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp BSLH &kp RET - &trans &kp LGUI &kp LALT &kp LCTRL &trans &trans &kp SPACE &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans + &reset &bootloader &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP >; }; }; diff --git a/app/boards/shields/crbn/README.md b/app/boards/shields/crbn/README.md deleted file mode 100644 index fee388f1b1d..00000000000 --- a/app/boards/shields/crbn/README.md +++ /dev/null @@ -1 +0,0 @@ -A 40% Ortho keyboard made by Polarity Works diff --git a/app/boards/shields/crbn/crbn.keymap b/app/boards/shields/crbn/crbn.keymap index d9aeaa9560b..9423e1af92a 100644 --- a/app/boards/shields/crbn/crbn.keymap +++ b/app/boards/shields/crbn/crbn.keymap @@ -13,16 +13,16 @@ compatible = "zmk,keymap"; default_layer { - // ----------------------------------------------------------------------------------------- - // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | - // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | - // | FN | LGUI | LALT | LCTL | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + // ----------------------------------------------------------------------------------------- + // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | + // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | + // | | LCTL | LALT | LGUI | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | bindings = < &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp BSLH &kp RET - &trans &kp LGUI &kp LALT &kp LCTRL &mo 1 &kp SPACE &trans &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET + &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &kp SPACE &trans &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT >; sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; @@ -31,7 +31,7 @@ lower { bindings = < &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL - &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LT &kp GT &kp PIPE + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(HASH) &kp LS(BSLH) &kp HOME &kp END &trans &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP >; @@ -46,12 +46,14 @@ &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans &trans &trans &trans &trans &mo 3 &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP >; + + sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; }; - + control { bindings = < &reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; From 8976b353ae792b1c58726e3a80506ab289d1eb5d Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Fri, 23 Sep 2022 21:48:18 -0700 Subject: [PATCH 0517/1130] fix(docs): Correct mo_tog implementation in tabbed menu --- docs/docs/behaviors/hold-tap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 8b2dbba8c43..793e350dea5 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -139,7 +139,7 @@ defaultValue="homerow_mods" values={[ {label: 'Homerow Mods', value: 'homerow_mods'}, {label: 'Autoshift', value: 'autoshift'}, -{label: 'Toggle-on-Tap, Momentary-on-Hold Layers', value: 'tog_mo'}, +{label: 'Toggle-on-Tap, Momentary-on-Hold Layers', value: 'mo_tog'}, ]}> From fad8dd66126fb4aa4a69239ac7a26c108f31c7fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 17:47:41 +0000 Subject: [PATCH 0518/1130] chore(deps): bump terser from 5.9.0 to 5.14.2 in /docs Bumps [terser](https://github.com/terser/terser) from 5.9.0 to 5.14.2. - [Release notes](https://github.com/terser/terser/releases) - [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md) - [Commits](https://github.com/terser/terser/commits) --- updated-dependencies: - dependency-name: terser dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 102 +++++++++++------------------------------ 1 file changed, 28 insertions(+), 74 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 06a79af0778..4297f7aca19 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -3323,6 +3323,15 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", @@ -8413,36 +8422,6 @@ "node": ">= 12" } }, - "node_modules/html-minifier-terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/html-minifier-terser/node_modules/terser": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", - "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", - "dependencies": { - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "node_modules/html-tags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", @@ -13561,12 +13540,13 @@ } }, "node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "bin": { @@ -13614,14 +13594,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -17436,6 +17408,15 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", @@ -21282,29 +21263,6 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, - "terser": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", - "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", - "requires": { - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } } } }, @@ -25015,12 +24973,13 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "dependencies": { @@ -25028,11 +24987,6 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, From 0b39bf433639ac3aa537d8ca203d253cc7c04dc1 Mon Sep 17 00:00:00 2001 From: innovaker <66737976+innovaker@users.noreply.github.com> Date: Sat, 19 Jun 2021 11:07:29 +0100 Subject: [PATCH 0519/1130] ci: remove `4-` prefix from zephyr-modules cache keys This is no longer required. --- .github/workflows/build.yml | 8 ++++---- .github/workflows/test.yml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5989cef845..8e945cde91a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,11 +35,11 @@ jobs: tools/ zephyr/ bootloader/ - key: 4-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} restore-keys: | - 4-${{ runner.os }}-build-${{ env.cache-name }}- - 4-${{ runner.os }}-build- - 4-${{ runner.os }}- + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- timeout-minutes: 2 continue-on-error: true - name: Initialize workspace (west init) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f019cdc589..3393d0c42fc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,11 +47,11 @@ jobs: tools/ zephyr/ bootloader/ - key: 4-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} restore-keys: | - 4-${{ runner.os }}-build-${{ env.cache-name }}- - 4-${{ runner.os }}-build- - 4-${{ runner.os }}- + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- timeout-minutes: 2 continue-on-error: true - name: Initialize workspace (west init) From 978251839767ab754b727d1c59e478ac8be30894 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 28 Sep 2022 17:59:25 +0000 Subject: [PATCH 0520/1130] feature(drivers): Option for read wait on matrix. * Add a new Kconfig option, `ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS` to delay reading inputs after setting an output active. --- app/drivers/kscan/Kconfig | 12 +++++++++++- app/drivers/kscan/kscan_gpio_matrix.c | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index b76a27b4969..51546006316 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -32,6 +32,16 @@ config ZMK_KSCAN_GPIO_MATRIX if ZMK_KSCAN_GPIO_MATRIX +config ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS + int "Ticks to wait before reading inputs after an output set active" + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for output to propagate to the + inputs. In that scenario, set this value to a positive value to configure + the number of ticks to wait after setting an output active before reading + the inputs for their active state. + config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS int "Ticks to wait between each output when scanning" default 0 @@ -40,7 +50,7 @@ config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS inactive again, some boards may take time for the previous output to "settle" before reading inputs for the next active output column. In that scenario, set this value to a positive value to configure the number of - usecs to wait after reading each column of keys. + ticks to wait after reading each column of keys. endif # ZMK_KSCAN_GPIO_MATRIX diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 1ab4d4426fc..71fcad29d2d 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -235,6 +235,10 @@ static int kscan_matrix_read(const struct device *dev) { return err; } +#if CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS > 0 + k_busy_wait(CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS); +#endif + for (int i = 0; i < config->inputs.len; i++) { const struct gpio_dt_spec *in_gpio = &config->inputs.gpios[i]; From 30e9accc95ff4c5035bbd7137c28d1a483ed5a48 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 28 Sep 2022 18:14:35 +0000 Subject: [PATCH 0521/1130] feat(docs): Wait options for matrix driver. * Document `CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS` and `CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS` options --- docs/docs/config/kscan.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 1f54692d73b..787d513661f 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -93,9 +93,11 @@ Keyboard scan driver where keys are arranged on a matrix with one GPIO per row a Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) -| Config | Type | Description | Default | -| --------------------------------- | ---- | ------------------------------------------------ | ------- | -| `CONFIG_ZMK_KSCAN_MATRIX_POLLING` | bool | Poll for key presses instead of using interrupts | n | +| Config | Type | Description | Default | +| ---------------------------------------------- | ----------- | ------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_KSCAN_MATRIX_POLLING` | bool | Poll for key presses instead of using interrupts | n | +| `CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS` | int (ticks) | How long to wait before reading input pins after setting output active | 0 | +| `CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS` | int (ticks) | How long to wait between each output to allow previous output to "settle" | 0 | ### Devicetree From 3d3c45bc80607c68cd82a94d9c3e372b6c5ec63e Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Thu, 29 Sep 2022 20:11:26 -0500 Subject: [PATCH 0522/1130] feature(shields): Add nice!view * Use two shield system, nice_view, and nice_view_adapter * Build system fixes for interconnect use. --- .github/workflows/build-user-config.yml | 2 +- .github/workflows/build.yml | 5 +++- .../shields/nice_view/Kconfig.defconfig | 22 ++++++++++++++++++ app/boards/shields/nice_view/Kconfig.shield | 5 ++++ app/boards/shields/nice_view/README.md | 5 ++++ app/boards/shields/nice_view/nice_view.conf | 4 ++++ .../shields/nice_view/nice_view.overlay | 23 +++++++++++++++++++ .../shields/nice_view/nice_view.zmk.yml | 8 +++++++ .../nice_view_adapter/Kconfig.defconfig | 2 ++ .../shields/nice_view_adapter/Kconfig.shield | 5 ++++ .../shields/nice_view_adapter/README.md | 11 +++++++++ .../boards/bluemicro840_v1.overlay | 17 ++++++++++++++ .../boards/mikoto_520.overlay | 17 ++++++++++++++ .../boards/nice_nano.overlay | 17 ++++++++++++++ .../boards/nice_nano_v2.overlay | 17 ++++++++++++++ .../boards/nrfmicro_11.overlay | 17 ++++++++++++++ .../boards/nrfmicro_11_flipped.overlay | 17 ++++++++++++++ .../boards/nrfmicro_13.overlay | 17 ++++++++++++++ .../boards/puchi_ble_v1.overlay | 17 ++++++++++++++ .../nice_view_adapter/nice_view_adapter.conf | 2 ++ .../nice_view_adapter.overlay | 5 ++++ .../nice_view_adapter.zmk.yml | 7 ++++++ app/core-coverage.yml | 3 +++ docs/docs/hardware.mdx | 8 +++---- docs/src/components/hardware-utils.ts | 6 ++++- 25 files changed, 252 insertions(+), 7 deletions(-) create mode 100644 app/boards/shields/nice_view/Kconfig.defconfig create mode 100644 app/boards/shields/nice_view/Kconfig.shield create mode 100644 app/boards/shields/nice_view/README.md create mode 100644 app/boards/shields/nice_view/nice_view.conf create mode 100644 app/boards/shields/nice_view/nice_view.overlay create mode 100644 app/boards/shields/nice_view/nice_view.zmk.yml create mode 100644 app/boards/shields/nice_view_adapter/Kconfig.defconfig create mode 100644 app/boards/shields/nice_view_adapter/Kconfig.shield create mode 100644 app/boards/shields/nice_view_adapter/README.md create mode 100644 app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/nice_nano.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay create mode 100644 app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay create mode 100644 app/boards/shields/nice_view_adapter/nice_view_adapter.conf create mode 100644 app/boards/shields/nice_view_adapter/nice_view_adapter.overlay create mode 100644 app/boards/shields/nice_view_adapter/nice_view_adapter.zmk.yml diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index c31b6783c92..215ccb63fe4 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -61,7 +61,7 @@ jobs: set -x if [ -n "${{ matrix.shield }}" ] then - EXTRA_CMAKE_ARGS="-DSHIELD=${{ matrix.shield }}" + EXTRA_CMAKE_ARGS="-DSHIELD=\"${{ matrix.shield }}\"" ARTIFACT_NAME="${{ matrix.shield }}-${{ matrix.board }}-zmk" DISPLAY_NAME="${{ matrix.shield }} - ${{ matrix.board }}" else diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e945cde91a..16373673c6d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -71,7 +71,7 @@ jobs: for (const shieldArgs of buildShieldArgs) { try { - const output = execSync(`west build -s app -p -b ${{ matrix.board }} -- ${shieldArgs.shield ? '-DSHIELD=' + shieldArgs.shield : ''} ${shieldArgs['cmake-args'] || ''}`); + const output = execSync(`west build -s app -p -b ${{ matrix.board }} -- ${shieldArgs.shield ? '-DSHIELD="' + shieldArgs.shield + '"' : ''} ${shieldArgs['cmake-args'] || ''}`); console.log(`::group::${{ matrix.board}} ${shieldArgs.shield} Build`) console.log(output.toString()); @@ -246,6 +246,9 @@ jobs: return hm.requires.flatMap(i => metadata.interconnects[i].boards.flatMap(b => boardAndShield(b, hm)) ); + } else { + console.warn("Unhandled shield without keys"); + return []; } break; case "interconnect": diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig new file mode 100644 index 00000000000..622c7498376 --- /dev/null +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -0,0 +1,22 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_NICE_VIEW + +config ZMK_DISPLAY + select LVGL_FONT_MONTSERRAT_26 + +if ZMK_DISPLAY + +config SPI + default y + +config LS0XX + default y + +config ZMK_WIDGET_WPM_STATUS + default y if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL + +endif # ZMK_DISPLAY + +endif diff --git a/app/boards/shields/nice_view/Kconfig.shield b/app/boards/shields/nice_view/Kconfig.shield new file mode 100644 index 00000000000..55cba78861d --- /dev/null +++ b/app/boards/shields/nice_view/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_NICE_VIEW + def_bool $(shields_list_contains,nice_view) diff --git a/app/boards/shields/nice_view/README.md b/app/boards/shields/nice_view/README.md new file mode 100644 index 00000000000..0b4ac21f848 --- /dev/null +++ b/app/boards/shields/nice_view/README.md @@ -0,0 +1,5 @@ +# nice!view + +The nice!view is a low power, high refresh rate display meant to replace I2C OLEDs traditionally used. + +This shield requires that an `&nice_view_spi` labelled SPI bus is provided with *at least* MOSI, SCK, and CS pins defined. diff --git a/app/boards/shields/nice_view/nice_view.conf b/app/boards/shields/nice_view/nice_view.conf new file mode 100644 index 00000000000..368e848a9a5 --- /dev/null +++ b/app/boards/shields/nice_view/nice_view.conf @@ -0,0 +1,4 @@ +# Enable nice!view +CONFIG_ZMK_DISPLAY=y +CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_26=y +CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y diff --git a/app/boards/shields/nice_view/nice_view.overlay b/app/boards/shields/nice_view/nice_view.overlay new file mode 100644 index 00000000000..eacdd41a711 --- /dev/null +++ b/app/boards/shields/nice_view/nice_view.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +&nice_view_spi { + status = "okay"; + nice_view: ls0xx@0 { + compatible = "sharp,ls0xx"; + label = "DISPLAY"; + spi-max-frequency = <1000000>; + reg = <0>; + width = <160>; + height = <68>; + }; +}; + +/ { + chosen { + zephyr,display = &nice_view; + }; +}; diff --git a/app/boards/shields/nice_view/nice_view.zmk.yml b/app/boards/shields/nice_view/nice_view.zmk.yml new file mode 100644 index 00000000000..04b98a8ac5b --- /dev/null +++ b/app/boards/shields/nice_view/nice_view.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: nice_view +name: nice!view +type: shield +url: https://nicekeyboards.com/nice-view +requires: [nice_view_header] +features: + - display diff --git a/app/boards/shields/nice_view_adapter/Kconfig.defconfig b/app/boards/shields/nice_view_adapter/Kconfig.defconfig new file mode 100644 index 00000000000..fb23f20ccd2 --- /dev/null +++ b/app/boards/shields/nice_view_adapter/Kconfig.defconfig @@ -0,0 +1,2 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT diff --git a/app/boards/shields/nice_view_adapter/Kconfig.shield b/app/boards/shields/nice_view_adapter/Kconfig.shield new file mode 100644 index 00000000000..bf9ba7cb8a4 --- /dev/null +++ b/app/boards/shields/nice_view_adapter/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_NICE_VIEW_ADAPTER + def_bool $(shields_list_contains,nice_view_adapter) diff --git a/app/boards/shields/nice_view_adapter/README.md b/app/boards/shields/nice_view_adapter/README.md new file mode 100644 index 00000000000..ec4665a3fec --- /dev/null +++ b/app/boards/shields/nice_view_adapter/README.md @@ -0,0 +1,11 @@ +# nice!view Adapter + +This shield is used as an adapter between the nice!view and existing shields/boards that expose an I2C OLED header. + +To use this shield, you should add this shield to your list of shields *before* `nice_view`. + +The nice!view will use the SDA/SCL pins of the OLED, and then the adapter expects a final pin to be "bodged" from your microcontroller to the nice!view CS pin. This adapter assumes that the CS pin bodged is the `&pro_micro 1` pin or "D1", which is the top left pin when looking at the front of the board. If you can't use this pin, you'll need to override the `cs-gpios` for the `&nice_view_spi` bus (in your `zmk-config` keymap for example) or you will want to define your own `&nice_view_spi` bus without using this adapter. + +``` +west build -b nice_nano_v2 -- -DSHIELD="lily58_left nice_view_adapter nice_view" +``` diff --git a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay new file mode 100644 index 00000000000..9d9ab734c0d --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <17>; + mosi-pin = <15>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay new file mode 100644 index 00000000000..9f6fad1c90d --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <20>; + mosi-pin = <17>; + miso-pin = <5>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay new file mode 100644 index 00000000000..3a0ad4624ca --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <20>; + mosi-pin = <17>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..3a0ad4624ca --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <20>; + mosi-pin = <17>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay new file mode 100644 index 00000000000..9d9ab734c0d --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <17>; + mosi-pin = <15>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay new file mode 100644 index 00000000000..7b12c252f3e --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <31>; + mosi-pin = <30>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay new file mode 100644 index 00000000000..9d9ab734c0d --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <17>; + mosi-pin = <15>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay new file mode 100644 index 00000000000..9d9ab734c0d --- /dev/null +++ b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + sck-pin = <17>; + mosi-pin = <15>; + miso-pin = <25>; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; +}; + +&pro_micro_i2c { + status = "disabled"; +}; diff --git a/app/boards/shields/nice_view_adapter/nice_view_adapter.conf b/app/boards/shields/nice_view_adapter/nice_view_adapter.conf new file mode 100644 index 00000000000..c5fe224e262 --- /dev/null +++ b/app/boards/shields/nice_view_adapter/nice_view_adapter.conf @@ -0,0 +1,2 @@ +# Disable OLED +CONFIG_SSD1306=n diff --git a/app/boards/shields/nice_view_adapter/nice_view_adapter.overlay b/app/boards/shields/nice_view_adapter/nice_view_adapter.overlay new file mode 100644 index 00000000000..2b82df5ca7c --- /dev/null +++ b/app/boards/shields/nice_view_adapter/nice_view_adapter.overlay @@ -0,0 +1,5 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ diff --git a/app/boards/shields/nice_view_adapter/nice_view_adapter.zmk.yml b/app/boards/shields/nice_view_adapter/nice_view_adapter.zmk.yml new file mode 100644 index 00000000000..e63b01e5ab0 --- /dev/null +++ b/app/boards/shields/nice_view_adapter/nice_view_adapter.zmk.yml @@ -0,0 +1,7 @@ +file_format: "1" +id: nice_view_adapter +name: nice!view adapter +type: shield +url: https://nicekeyboards.com/nice-view +requires: [i2c_oled] +exposes: [nice_view_header] diff --git a/app/core-coverage.yml b/app/core-coverage.yml index 90470ba3daa..12c03613588 100644 --- a/app/core-coverage.yml +++ b/app/core-coverage.yml @@ -30,3 +30,6 @@ include: shield: romac_plus cmake-args: "-DCONFIG_ZMK_RGB_UNDERGLOW=y -DCONFIG_WS2812_STRIP=y" nickname: "underglow" +- board: nice_nano_v2 + shield: lily58_left nice_view_adapter nice_view + nickname: "niceview" diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index d2b6aa9df21..6f377073810 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -21,13 +21,13 @@ export const toc = [ id: "composite", level: 2, }, - ...Object.values(groupedMetadata(Metadata).interconnects).map( - ({ interconnect }) => ({ + ...Object.values(groupedMetadata(Metadata).interconnects) + .filter((ic) => ic.interconnect !== undefined) + .map(({ interconnect }) => ({ value: `${interconnect.name} Interconnect`, id: interconnect.id, level: 3, - }) - ), + })), { value: "Other Hardware", id: "other-hardware", diff --git a/docs/src/components/hardware-utils.ts b/docs/src/components/hardware-utils.ts index 13ca5eb64b2..76452dc357d 100644 --- a/docs/src/components/hardware-utils.ts +++ b/docs/src/components/hardware-utils.ts @@ -41,7 +41,11 @@ function groupedShield(agg: GroupedMetadata, shield: Shield) { ic.shields.push(shield); agg.interconnects[id] = ic; }); - + shield.exposes?.forEach((id) => { + let ic = agg.interconnects[id] ?? { boards: [], shields: [] }; + ic.shields.push(shield); + agg.interconnects[id] = ic; + }); return agg; } From cc3d5529fd9c24bed1a08c8a32899d09257197c9 Mon Sep 17 00:00:00 2001 From: zhiayang <500236+zhiayang@users.noreply.github.com> Date: Fri, 30 Sep 2022 09:22:01 +0800 Subject: [PATCH 0523/1130] feat(drivers): Driver for MAX7318 GPIO expander (#1295) Add driver for max7318 i2c gpio expander Co-authored-by: Pete Johanson --- app/drivers/gpio/CMakeLists.txt | 3 +- app/drivers/gpio/Kconfig | 3 +- app/drivers/gpio/Kconfig.max7318 | 25 ++ app/drivers/gpio/gpio_max7318.c | 336 ++++++++++++++++++ .../dts/bindings/gpio/maxim,max7318.yaml | 29 ++ 5 files changed, 394 insertions(+), 2 deletions(-) create mode 100644 app/drivers/gpio/Kconfig.max7318 create mode 100644 app/drivers/gpio/gpio_max7318.c create mode 100644 app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml diff --git a/app/drivers/gpio/CMakeLists.txt b/app/drivers/gpio/CMakeLists.txt index 0df31ad5c0c..f43781516e0 100644 --- a/app/drivers/gpio/CMakeLists.txt +++ b/app/drivers/gpio/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2020 The ZMK Contributors +# Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT zephyr_library_named(zmk__drivers__gpio) @@ -6,3 +6,4 @@ zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) zephyr_library_sources_ifdef(CONFIG_GPIO_595 gpio_595.c) zephyr_library_sources_ifdef(CONFIG_GPIO_MCP23017 gpio_mcp23017.c) +zephyr_library_sources_ifdef(CONFIG_GPIO_MAX7318 gpio_max7318.c) diff --git a/app/drivers/gpio/Kconfig b/app/drivers/gpio/Kconfig index e6f8bfb8ee6..43c7c24e5d3 100644 --- a/app/drivers/gpio/Kconfig +++ b/app/drivers/gpio/Kconfig @@ -2,4 +2,5 @@ menuconfig ZMK_DRIVERS_GPIO bool "GPIO" rsource "Kconfig.mcp23017" -rsource "Kconfig.595" \ No newline at end of file +rsource "Kconfig.max7318" +rsource "Kconfig.595" diff --git a/app/drivers/gpio/Kconfig.max7318 b/app/drivers/gpio/Kconfig.max7318 new file mode 100644 index 00000000000..ded7f926b9c --- /dev/null +++ b/app/drivers/gpio/Kconfig.max7318 @@ -0,0 +1,25 @@ +# MAX7318 GPIO configuration options + +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +DT_COMPAT_MAXIM_MAX7318 := maxim,max7318 + +menuconfig GPIO_MAX7318 + bool "MAX7318 I2C-based GPIO chip" + default $(dt_compat_enabled,$(DT_COMPAT_MAXIM_MAX7318)) + depends on I2C + select HAS_DTS_GPIO + select ZMK_DRIVERS_GPIO + help + Enable driver for MAX7318 I2C-based GPIO chip. + +if GPIO_MAX7318 + +config GPIO_MAX7318_INIT_PRIORITY + int "Init priority" + default 75 + help + Device driver initialization priority. + +endif #GPIO_MAX7318 diff --git a/app/drivers/gpio/gpio_max7318.c b/app/drivers/gpio/gpio_max7318.c new file mode 100644 index 00000000000..3dcc710cd7b --- /dev/null +++ b/app/drivers/gpio/gpio_max7318.c @@ -0,0 +1,336 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT maxim_max7318 + +/** + * @file Driver for MAX7318 I2C-based GPIO driver. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#define LOG_LEVEL CONFIG_GPIO_LOG_LEVEL +#include + +LOG_MODULE_REGISTER(gpio_max7318); + +// Register definitions +#define REG_INPUT_PORTA 0x00 +#define REG_INPUT_PORTB 0x01 +#define REG_OUTPUT_PORTA 0x02 +#define REG_OUTPUT_PORTB 0x03 +#define REG_IPOL_PORTA 0x04 +#define REG_IPOL_PORTB 0x05 +#define REG_CONFIG_PORTA 0x06 +#define REG_CONFIG_PORTB 0x07 + +// Configuration data +struct max7318_config { + struct gpio_driver_config common; + + struct i2c_dt_spec i2c_bus; + uint8_t ngpios; +}; + +// Runtime driver data +struct max7318_drv_data { + // gpio_driver_data needs to be first + struct gpio_driver_config data; + + struct k_sem lock; + + struct { + uint16_t ipol; + uint16_t config; + uint16_t output; + } reg_cache; +}; + +/** + * @brief Read the value of two consecutive registers + * + * Read two consecutive bytes from the register at address `reg` and `reg + 1`, + * typically reading from registers for port 0 and 1 simultaneously. + * + * @param dev The max7318 device. + * @param reg Register to read (the PORT0 of the pair of registers). + * @param buf Buffer to read data into. + * + * @return 0 if successful, failed otherwise. + */ +static int read_registers(const struct device *dev, uint8_t reg, uint16_t *buf) { + const struct max7318_config *config = dev->config; + + uint16_t data = 0; + int ret = i2c_burst_read_dt(&config->i2c_bus, reg, (uint8_t *)&data, sizeof(data)); + if (ret) { + LOG_DBG("i2c_write_read FAIL %d\n", ret); + return ret; + } + + *buf = sys_le16_to_cpu(data); + + LOG_DBG("max7318: read: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, (*buf & 0xFF), (reg + 1), + (*buf >> 8)); + + return 0; +} + +/** + * @brief Write the value of two consecutive registers + * + * Write two consecutive bytes from the register at address `reg` and `reg + 1`, + * typically to registers for port 0 and 1 simultaneously. + * + * @param dev The max7318 device. + * @param reg Register to write (usually the register for PORT0). + * @param value The value to write + * + * @return 0 if successful, failed otherwise. + */ +static int write_registers(const struct device *dev, uint8_t reg, uint16_t value) { + const struct max7318_config *config = dev->config; + + LOG_DBG("max7318: write: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, (value & 0xFF), (reg + 1), + (value >> 8)); + + uint16_t data = sys_cpu_to_le16(value); + + return i2c_burst_write_dt(&config->i2c_bus, reg, (uint8_t *)&data, sizeof(data)); +} + +/** + * @brief Setup the pin direction (input or output) + * + * @param dev The max7318 device. + * @param pin The pin number. + * @param flags Flags of pin or port. + * + * @return 0 if successful, failed otherwise + */ +static int set_pin_direction(const struct device *dev, uint32_t pin, int flags) { + struct max7318_drv_data *const drv_data = (struct max7318_drv_data *const)dev->data; + uint16_t *dir = &drv_data->reg_cache.config; + uint16_t *output = &drv_data->reg_cache.output; + + /* + The output register is 1=high, 0=low; the direction (config) register + is 1=input, 0=output. + */ + if ((flags & GPIO_OUTPUT) != 0U) { + if ((flags & GPIO_OUTPUT_INIT_HIGH) != 0U) { + *output |= BIT(pin); + } else if ((flags & GPIO_OUTPUT_INIT_LOW) != 0U) { + *output &= ~BIT(pin); + } + *dir &= ~BIT(pin); + } else { + *dir |= BIT(pin); + } + + int ret = write_registers(dev, REG_OUTPUT_PORTA, *output); + if (ret != 0) { + return ret; + } + + return write_registers(dev, REG_CONFIG_PORTA, *dir); +} + +/** + * @brief Setup the pin pull up/pull down status. This function doesn't actually set any + * registers, since the max7318 only supports a pullup, and it can't be controlled. + * + * @param dev The max7318 device. + * @param pin The pin number + * @param flags Flags of pin or port + * + * @return 0 if successful, failed otherwise + */ +static int set_pin_pull_direction(const struct device *dev, uint32_t pin, int flags) { + // actually, this chip only supports pull-up, and it can't be disabled. + // so, if we try to set anything else, return enotsup; we don't actually + // need to set any registers. + if ((flags & GPIO_PULL_DOWN) != 0U) { + return -ENOTSUP; + } + + return 0; +} + +static int max7318_config(const struct device *dev, gpio_pin_t pin, gpio_flags_t flags) { + struct max7318_drv_data *const drv_data = (struct max7318_drv_data *const)dev->data; + + /* Can't do I2C bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + int ret = 0; + if ((flags & GPIO_OPEN_DRAIN) != 0U) { + ret = -ENOTSUP; + goto done; + }; + + ret = set_pin_direction(dev, pin, flags); + if (ret != 0) { + LOG_ERR("error setting pin direction (%d)", ret); + goto done; + } + + ret = set_pin_pull_direction(dev, pin, flags); + if (ret != 0) { + LOG_ERR("error setting pin pull up/down (%d)", ret); + goto done; + } + +done: + k_sem_give(&drv_data->lock); + return ret; +} + +static int max7318_port_get_raw(const struct device *dev, uint32_t *value) { + struct max7318_drv_data *const drv_data = (struct max7318_drv_data *const)dev->data; + + /* Can't do I2C bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + uint16_t buf = 0; + int ret = read_registers(dev, REG_INPUT_PORTA, &buf); + if (ret != 0) { + goto done; + } + + *value = buf; + +done: + k_sem_give(&drv_data->lock); + return ret; +} + +static int max7318_port_set_masked_raw(const struct device *dev, uint32_t mask, uint32_t value) { + struct max7318_drv_data *const drv_data = (struct max7318_drv_data *const)dev->data; + + /* Can't do I2C bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + uint16_t buf = drv_data->reg_cache.output; + buf = (buf & ~mask) | (mask & value); + + int ret = write_registers(dev, REG_OUTPUT_PORTA, buf); + if (ret == 0) { + drv_data->reg_cache.output = buf; + } + + k_sem_give(&drv_data->lock); + return ret; +} + +static int max7318_port_set_bits_raw(const struct device *dev, uint32_t mask) { + return max7318_port_set_masked_raw(dev, mask, mask); +} + +static int max7318_port_clear_bits_raw(const struct device *dev, uint32_t mask) { + return max7318_port_set_masked_raw(dev, mask, 0); +} + +static int max7318_port_toggle_bits(const struct device *dev, uint32_t mask) { + struct max7318_drv_data *const drv_data = (struct max7318_drv_data *const)dev->data; + + /* Can't do I2C bus operations from an ISR */ + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + k_sem_take(&drv_data->lock, K_FOREVER); + + uint16_t buf = drv_data->reg_cache.output; + buf ^= mask; + + int ret = write_registers(dev, REG_OUTPUT_PORTA, buf); + if (ret == 0) { + drv_data->reg_cache.output = buf; + } + + k_sem_give(&drv_data->lock); + return ret; +} + +static int max7318_pin_interrupt_configure(const struct device *dev, gpio_pin_t pin, + enum gpio_int_mode mode, enum gpio_int_trig trig) { + return -ENOTSUP; +} + +static const struct gpio_driver_api api_table = { + .pin_configure = max7318_config, + .port_get_raw = max7318_port_get_raw, + .port_set_masked_raw = max7318_port_set_masked_raw, + .port_set_bits_raw = max7318_port_set_bits_raw, + .port_clear_bits_raw = max7318_port_clear_bits_raw, + .port_toggle_bits = max7318_port_toggle_bits, + .pin_interrupt_configure = max7318_pin_interrupt_configure, +}; + +/** + * @brief Initialisation function of MAX7318 + * + * @param dev Device struct + * @return 0 if successful, failed otherwise. + */ +static int max7318_init(const struct device *dev) { + const struct max7318_config *const config = dev->config; + struct max7318_drv_data *const drv_data = (struct max7318_drv_data *const)dev->data; + + if (!device_is_ready(config->i2c_bus.bus)) { + LOG_WRN("i2c bus not ready!"); + return -EINVAL; + } + + LOG_INF("device initialised at 0x%x", config->i2c_bus.addr); + + k_sem_init(&drv_data->lock, 1, 1); + return 0; +} + +#define GPIO_PORT_PIN_MASK_FROM_NGPIOS(ngpios) ((gpio_port_pins_t)(((uint64_t)1 << (ngpios)) - 1U)) + +#define GPIO_PORT_PIN_MASK_FROM_DT_INST(inst) \ + GPIO_PORT_PIN_MASK_FROM_NGPIOS(DT_INST_PROP(inst, ngpios)) + +#define MAX7318_INIT(inst) \ + static struct max7318_config max7318_##inst##_config = { \ + .common = {.port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(inst)}, \ + .i2c_bus = I2C_DT_SPEC_INST_GET(inst)}; \ + \ + static struct max7318_drv_data max7318_##inst##_drvdata = { \ + /* Default for registers according to datasheet */ \ + .reg_cache.ipol = 0x0, \ + .reg_cache.config = 0xFFFF, \ + .reg_cache.output = 0xFFFF, \ + }; \ + \ + DEVICE_DT_INST_DEFINE(inst, max7318_init, NULL, &max7318_##inst##_drvdata, \ + &max7318_##inst##_config, POST_KERNEL, \ + CONFIG_GPIO_MAX7318_INIT_PRIORITY, &api_table); + +DT_INST_FOREACH_STATUS_OKAY(MAX7318_INIT) diff --git a/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml b/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml new file mode 100644 index 00000000000..2db84bcd5a3 --- /dev/null +++ b/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml @@ -0,0 +1,29 @@ +# +# Copyright (c) 2022 The ZMK Contributors +# +# SPDX-License-Identifier: MIT +# + +description: > + This is a representation of the Maxim MAX7318 I2C Gpio Expander. + +compatible: "maxim,max7318" + +include: [gpio-controller.yaml, i2c-device.yaml] + +properties: + label: + required: true + + "#gpio-cells": + const: 2 + + ngpios: + type: int + required: true + const: 16 + description: Number of gpios supported + +gpio-cells: + - pin + - flags From 1e25ee77d232e34cc5ed88912b7390acab8703bd Mon Sep 17 00:00:00 2001 From: Pavel Glushkov Date: Mon, 3 Oct 2022 04:01:55 +0200 Subject: [PATCH 0524/1130] fear(boards): Add nrfmicro_13_52833 board * Add nrfmicro_13_52833 board definition. Co-authored-by: Alexander Krikun Co-authored-by: Pete Johanson --- app/boards/arm/nrfmicro/Kconfig | 4 +- app/boards/arm/nrfmicro/Kconfig.board | 4 + app/boards/arm/nrfmicro/Kconfig.defconfig | 8 +- .../arduino_pro_micro_pins_52833.dtsi | 59 +++++++++ app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 121 ++++++++++++++++++ .../arm/nrfmicro/nrfmicro_13_52833.yaml | 15 +++ .../arm/nrfmicro/nrfmicro_13_52833.zmk.yml | 10 ++ .../arm/nrfmicro/nrfmicro_13_52833_defconfig | 23 ++++ app/boards/arm/nrfmicro/pinmux.c | 2 +- 9 files changed, 239 insertions(+), 7 deletions(-) create mode 100644 app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13_52833.dts create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13_52833.yaml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13_52833.zmk.yml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig diff --git a/app/boards/arm/nrfmicro/Kconfig b/app/boards/arm/nrfmicro/Kconfig index 35019722315..12b06621781 100644 --- a/app/boards/arm/nrfmicro/Kconfig +++ b/app/boards/arm/nrfmicro/Kconfig @@ -2,9 +2,9 @@ config BOARD_ENABLE_DCDC bool "Enable DCDC mode" select SOC_DCDC_NRF52X default y - depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13) + depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833) config BOARD_NRFMICRO_CHARGER bool "Enable battery charger" default y - depends on (BOARD_NRFMICRO_13) + depends on (BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833) diff --git a/app/boards/arm/nrfmicro/Kconfig.board b/app/boards/arm/nrfmicro/Kconfig.board index 36b2d55e8bc..244242a9360 100644 --- a/app/boards/arm/nrfmicro/Kconfig.board +++ b/app/boards/arm/nrfmicro/Kconfig.board @@ -14,3 +14,7 @@ config BOARD_NRFMICRO_11_FLIPPED config BOARD_NRFMICRO_13 bool "nrfmicro_13" depends on SOC_NRF52840_QIAA + +config BOARD_NRFMICRO_13_52833 + bool "nrfmicro_13_52833" + depends on SOC_NRF52833_QIAA diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index 159d9ade014..751d592b955 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -3,7 +3,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -if BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 +if BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 config BOARD default "nrfmicro" @@ -27,11 +27,11 @@ config ZMK_USB config PINMUX default y -if BOARD_NRFMICRO_13 +if BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 config BOARD_NRFMICRO_CHARGER default y -endif # BOARD_NRFMICRO_13 +endif # BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 -endif # BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 +endif # BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi new file mode 100644 index 00000000000..651edb94166 --- /dev/null +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 4 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 5 0> /* D15 */ + , <18 0 &gpio0 2 0> /* D18/A0 */ + , <19 0 &gpio0 29 0> /* D19/A1 */ + , <20 0 &gpio0 31 0> /* D20/A2 */ + , <21 0 &gpio0 30 0> /* D21/A3 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* D18/A0 */ + , <1 0 &gpio0 29 0> /* D19/A1 */ + , <2 0 &gpio0 31 0> /* D20/A2 */ + , <3 0 &gpio0 30 0> /* D21/A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; +}; + + +pro_micro_d: &pro_micro {}; +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts new file mode 100644 index 00000000000..7f833ff555f --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins_52833.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + tx-pin = <6>; + rx-pin = <8>; +}; + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x00046000>; + }; + + /* + * The flash starting at 0x0006c000 and ending at + * 0x00073fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@6c000 { + label = "storage"; + reg = <0x0006c000 0x00008000>; + }; + + boot_partition: partition@74000 { + label = "adafruit_boot"; + reg = <0x00074000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.yaml b/app/boards/arm/nrfmicro/nrfmicro_13_52833.yaml new file mode 100644 index 00000000000..768a59c9c40 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_13_52833 +name: nrfmicro_13_52833 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.zmk.yml b/app/boards/arm/nrfmicro/nrfmicro_13_52833.zmk.yml new file mode 100644 index 00000000000..757ff860a1c --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrfmicro_13_52833 +name: nRFMicro 1.3/1.4 (nRF52833) +type: board +arch: arm +outputs: + - usb + - ble +url: https://github.com/joric/nrfmicro/ +exposes: [pro_micro] diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig new file mode 100644 index 00000000000..112e0344ae4 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52833_QIAA=y +CONFIG_BOARD_NRFMICRO_13_52833=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index dc3bf6c235e..ef5b5521324 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -14,7 +14,7 @@ static int pinmux_nrfmicro_init(const struct device *port) { ARG_UNUSED(port); -#if CONFIG_BOARD_NRFMICRO_13 +#if (CONFIG_BOARD_NRFMICRO_13 || CONFIG_BOARD_NRFMICRO_13_52833) const struct device *p0 = device_get_binding("GPIO_0"); #if CONFIG_BOARD_NRFMICRO_CHARGER gpio_pin_configure(p0, 5, GPIO_OUTPUT); From fd5e9e1403de15d896620ec23f5ef558118f53a2 Mon Sep 17 00:00:00 2001 From: Joe Peterson Date: Sat, 1 Oct 2022 14:36:52 -0700 Subject: [PATCH 0525/1130] docs(codes): Windows Support: F13-F19 F13-F19 are confirmed to work on Windows 11 in VSCode 1.71.2. Refs: #1476 --- docs/src/data/hid.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index ac90ea80c0e..2b651ac53f6 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -2732,7 +2732,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2753,7 +2753,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2774,7 +2774,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2795,7 +2795,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2816,7 +2816,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2837,7 +2837,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2858,7 +2858,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, From a035fe4cc8c62b0483b1775cb9968b650e2c12dc Mon Sep 17 00:00:00 2001 From: Joe Peterson Date: Sat, 1 Oct 2022 22:50:34 -0700 Subject: [PATCH 0526/1130] docs(codes): Windows Support: F20-F24 F20-24 are confirmed to work on Windows 11 via a web based keyboard tester Refs: #1476 --- docs/src/data/hid.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 2b651ac53f6..dde8bae48d3 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -2879,7 +2879,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2900,7 +2900,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2921,7 +2921,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2942,7 +2942,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, @@ -2963,7 +2963,7 @@ export default [ ], documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", os: { - windows: null, + windows: true, linux: true, android: false, macos: true, From 605d88f26609aa7cb5d92c590ee7f2313d768cfe Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 4 Oct 2022 23:37:45 -0400 Subject: [PATCH 0527/1130] feat(ble): Default a few configs for DIS GATT svc. Default values for DIS GATT characteristics for: * Vendor ID * Product ID * Manufacturer * Model --- app/Kconfig | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index f89d3279d1c..9902046db3d 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -25,6 +25,18 @@ config USB_DEVICE_PID config USB_DEVICE_MANUFACTURER default "ZMK Project" +config BT_DIS_PNP_VID + default 0x1D50 + +config BT_DIS_PNP_PID + default 0x615E + +config BT_DIS_MODEL + default ZMK_KEYBOARD_NAME + +config BT_DIS_MANUF + default "ZMK Project" + menu "HID" choice ZMK_HID_REPORT_TYPE From bdc706f88d54697c01d26c5aef270339495931b9 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Fri, 7 Oct 2022 19:43:12 -0500 Subject: [PATCH 0528/1130] docs(power profiling): add nice!view --- docs/src/data/power.js | 6 ++++++ docs/src/pages/power-profiler.js | 1 + 2 files changed, 7 insertions(+) diff --git a/docs/src/data/power.js b/docs/src/data/power.js index 28e4b0edbd9..354f0511eea 100644 --- a/docs/src/data/power.js +++ b/docs/src/data/power.js @@ -96,4 +96,10 @@ export const displayPower = { active: 10000, // Estimated power draw when about half the pixels are on sleep: 7, // Deep sleep power draw (display off) }, + // Based on the nice!view using Sharp's LS011B7DH01 + NICEVIEW: { + activePercent: 0.01, // Estimated two refreshes per second taking five milliseconds each + active: 1425, // Power draw during refresh (225uA display + 1200uA SPIM) + sleep: 1, // Idle power draw of the display + }, }; diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js index c230257058c..c909ec02ebb 100644 --- a/docs/src/pages/power-profiler.js +++ b/docs/src/pages/power-profiler.js @@ -308,6 +308,7 @@ function PowerProfiler() { + )} From 18b8b9b3a57226ef84064b1382d846c634dcfd2e Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Fri, 14 Oct 2022 11:39:47 -0500 Subject: [PATCH 0529/1130] fix(shields): Disable idle blanking on nice!view --- app/boards/shields/nice_view/nice_view.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/shields/nice_view/nice_view.conf b/app/boards/shields/nice_view/nice_view.conf index 368e848a9a5..2c1d6c71088 100644 --- a/app/boards/shields/nice_view/nice_view.conf +++ b/app/boards/shields/nice_view/nice_view.conf @@ -2,3 +2,4 @@ CONFIG_ZMK_DISPLAY=y CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_26=y CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y +CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE=n From ef2e6e9156806760d9e91c0d635cd809058c3ee7 Mon Sep 17 00:00:00 2001 From: Robert U <978080+urob@users.noreply.github.com> Date: Fri, 14 Oct 2022 21:40:28 -0400 Subject: [PATCH 0530/1130] feat(behaviors): Add mod-morph `keep-mods` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update docs for mod-morph * Add unit tests for mod-morph * Add keep-mods to DT binding Co-authored-by: Martin Aumüller Co-authored-by: Cem Aksoylar --- .../behaviors/zmk,behavior-mod-morph.yaml | 3 ++ app/include/zmk/hid.h | 2 + app/src/behaviors/behavior_mod_morph.c | 9 +++- app/src/hid.c | 24 ++++++++-- .../mod-morph/1-no-morph/events.patterns | 8 ++++ .../1-no-morph/keycode_events.snapshot | 5 ++ .../1-no-morph/native_posix_64.keymap | 11 +++++ .../mod-morph/2a-masked-morph/events.patterns | 8 ++++ .../2a-masked-morph/keycode_events.snapshot | 12 +++++ .../2a-masked-morph/native_posix_64.keymap | 13 +++++ .../events.patterns | 8 ++++ .../keycode_events.snapshot | 12 +++++ .../native_posix_64.keymap | 37 +++++++++++++++ .../events.patterns | 8 ++++ .../keycode_events.snapshot | 18 +++++++ .../native_posix_64.keymap | 15 ++++++ .../events.patterns | 8 ++++ .../keycode_events.snapshot | 12 +++++ .../native_posix_64.keymap | 45 ++++++++++++++++++ .../events.patterns | 8 ++++ .../keycode_events.snapshot | 12 +++++ .../native_posix_64.keymap | 47 +++++++++++++++++++ .../3-unmasked-morph/events.patterns | 8 ++++ .../3-unmasked-morph/keycode_events.snapshot | 12 +++++ .../3-unmasked-morph/native_posix_64.keymap | 37 +++++++++++++++ app/tests/mod-morph/behavior_keymap.dtsi | 23 +++++++++ .../keycode_events.snapshot | 2 +- docs/docs/behaviors/mod-morph.md | 29 +++++++++--- 28 files changed, 425 insertions(+), 11 deletions(-) create mode 100644 app/tests/mod-morph/1-no-morph/events.patterns create mode 100644 app/tests/mod-morph/1-no-morph/keycode_events.snapshot create mode 100644 app/tests/mod-morph/1-no-morph/native_posix_64.keymap create mode 100644 app/tests/mod-morph/2a-masked-morph/events.patterns create mode 100644 app/tests/mod-morph/2a-masked-morph/keycode_events.snapshot create mode 100644 app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap create mode 100644 app/tests/mod-morph/2b-masked-morph-implicit-overwrite/events.patterns create mode 100644 app/tests/mod-morph/2b-masked-morph-implicit-overwrite/keycode_events.snapshot create mode 100644 app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap create mode 100644 app/tests/mod-morph/2c-masked-morph-and-explicit-mods/events.patterns create mode 100644 app/tests/mod-morph/2c-masked-morph-and-explicit-mods/keycode_events.snapshot create mode 100644 app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap create mode 100644 app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/events.patterns create mode 100644 app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/keycode_events.snapshot create mode 100644 app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap create mode 100644 app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/events.patterns create mode 100644 app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/keycode_events.snapshot create mode 100644 app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap create mode 100644 app/tests/mod-morph/3-unmasked-morph/events.patterns create mode 100644 app/tests/mod-morph/3-unmasked-morph/keycode_events.snapshot create mode 100644 app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap create mode 100644 app/tests/mod-morph/behavior_keymap.dtsi diff --git a/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml b/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml index ed40f9368c8..20235d045f7 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml @@ -14,3 +14,6 @@ properties: mods: type: int required: true + keep-mods: + type: int + required: false diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 902b76d15a4..0f9cfe2e77f 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -135,6 +135,8 @@ int zmk_hid_register_mods(zmk_mod_flags_t explicit_modifiers); int zmk_hid_unregister_mods(zmk_mod_flags_t explicit_modifiers); int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers); int zmk_hid_implicit_modifiers_release(); +int zmk_hid_masked_modifiers_set(zmk_mod_flags_t masked_modifiers); +int zmk_hid_masked_modifiers_clear(); int zmk_hid_keyboard_press(zmk_key_t key); int zmk_hid_keyboard_release(zmk_key_t key); diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index a40bd3651a2..effbe4ac887 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -27,6 +27,7 @@ struct behavior_mod_morph_config { struct zmk_behavior_binding normal_binding; struct zmk_behavior_binding morph_binding; zmk_mod_flags_t mods; + zmk_mod_flags_t masked_mods; }; struct behavior_mod_morph_data { @@ -45,6 +46,7 @@ static int on_mod_morph_binding_pressed(struct zmk_behavior_binding *binding, } if (zmk_hid_get_explicit_mods() & cfg->mods) { + zmk_hid_masked_modifiers_set(cfg->masked_mods); data->pressed_binding = (struct zmk_behavior_binding *)&cfg->morph_binding; } else { data->pressed_binding = (struct zmk_behavior_binding *)&cfg->normal_binding; @@ -64,7 +66,10 @@ static int on_mod_morph_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding *pressed_binding = data->pressed_binding; data->pressed_binding = NULL; - return behavior_keymap_binding_released(pressed_binding, event); + int err; + err = behavior_keymap_binding_released(pressed_binding, event); + zmk_hid_masked_modifiers_clear(); + return err; } static const struct behavior_driver_api behavior_mod_morph_driver_api = { @@ -88,6 +93,8 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } .normal_binding = _TRANSFORM_ENTRY(0, n), \ .morph_binding = _TRANSFORM_ENTRY(1, n), \ .mods = DT_INST_PROP(n, mods), \ + .masked_mods = COND_CODE_0(DT_INST_NODE_HAS_PROP(n, keep_mods), (DT_INST_PROP(n, mods)), \ + (DT_INST_PROP(n, mods) & ~DT_INST_PROP(n, keep_mods))), \ }; \ static struct behavior_mod_morph_data behavior_mod_morph_data_##n = {}; \ DEVICE_DT_INST_DEFINE(n, behavior_mod_morph_init, NULL, &behavior_mod_morph_data_##n, \ diff --git a/app/src/hid.c b/app/src/hid.c index c3462ddeb72..b66a910d3d2 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -20,10 +20,12 @@ static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = // Only release the modifier if the count is 0. static int explicit_modifier_counts[8] = {0, 0, 0, 0, 0, 0, 0, 0}; static zmk_mod_flags_t explicit_modifiers = 0; +static zmk_mod_flags_t implicit_modifiers = 0; +static zmk_mod_flags_t masked_modifiers = 0; #define SET_MODIFIERS(mods) \ { \ - keyboard_report.body.modifiers = mods; \ + keyboard_report.body.modifiers = (mods & ~masked_modifiers) | implicit_modifiers; \ LOG_DBG("Modifiers set to 0x%02X", keyboard_report.body.modifiers); \ } @@ -158,13 +160,29 @@ static inline int check_keyboard_usage(zmk_key_t usage) { } \ } -int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers) { +int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t new_implicit_modifiers) { + implicit_modifiers = new_implicit_modifiers; zmk_mod_flags_t current = GET_MODIFIERS; - SET_MODIFIERS(explicit_modifiers | implicit_modifiers); + SET_MODIFIERS(explicit_modifiers); return current == GET_MODIFIERS ? 0 : 1; } int zmk_hid_implicit_modifiers_release() { + implicit_modifiers = 0; + zmk_mod_flags_t current = GET_MODIFIERS; + SET_MODIFIERS(explicit_modifiers); + return current == GET_MODIFIERS ? 0 : 1; +} + +int zmk_hid_masked_modifiers_set(zmk_mod_flags_t new_masked_modifiers) { + masked_modifiers = new_masked_modifiers; + zmk_mod_flags_t current = GET_MODIFIERS; + SET_MODIFIERS(explicit_modifiers); + return current == GET_MODIFIERS ? 0 : 1; +} + +int zmk_hid_masked_modifiers_clear() { + masked_modifiers = 0; zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers); return current == GET_MODIFIERS ? 0 : 1; diff --git a/app/tests/mod-morph/1-no-morph/events.patterns b/app/tests/mod-morph/1-no-morph/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/1-no-morph/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/1-no-morph/keycode_events.snapshot b/app/tests/mod-morph/1-no-morph/keycode_events.snapshot new file mode 100644 index 00000000000..3a2d70febeb --- /dev/null +++ b/app/tests/mod-morph/1-no-morph/keycode_events.snapshot @@ -0,0 +1,5 @@ +pressed: keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +reg implicit: Modifiers set to 0x00 +released: keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x00 +unmask mods: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/1-no-morph/native_posix_64.keymap b/app/tests/mod-morph/1-no-morph/native_posix_64.keymap new file mode 100644 index 00000000000..fb939de59c8 --- /dev/null +++ b/app/tests/mod-morph/1-no-morph/native_posix_64.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; diff --git a/app/tests/mod-morph/2a-masked-morph/events.patterns b/app/tests/mod-morph/2a-masked-morph/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/2a-masked-morph/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/2a-masked-morph/keycode_events.snapshot b/app/tests/mod-morph/2a-masked-morph/keycode_events.snapshot new file mode 100644 index 00000000000..dcf2aae6384 --- /dev/null +++ b/app/tests/mod-morph/2a-masked-morph/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x02 +reg implicit: Modifiers set to 0x02 +mask mods: Modifiers set to 0x00 +pressed: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +reg implicit: Modifiers set to 0x00 +released: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x00 +unmask mods: Modifiers set to 0x02 +released: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x00 +unreg implicit: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap b/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap new file mode 100644 index 00000000000..9ad50202c32 --- /dev/null +++ b/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; diff --git a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/events.patterns b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/keycode_events.snapshot b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/keycode_events.snapshot new file mode 100644 index 00000000000..ce85f25db6c --- /dev/null +++ b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x02 +reg implicit: Modifiers set to 0x02 +mask mods: Modifiers set to 0x00 +pressed: keycode 0x05 implicit_mods 0x02 explicit_mods 0x00 +reg implicit: Modifiers set to 0x02 +released: keycode 0x05 implicit_mods 0x02 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x00 +unmask mods: Modifiers set to 0x02 +released: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x00 +unreg implicit: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap new file mode 100644 index 00000000000..74de8588d63 --- /dev/null +++ b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/ { + behaviors { + mod_morph: mod_morph { + compatible = "zmk,behavior-mod-morph"; + label = "MOD_MORPH_TEST"; + #binding-cells = <0>; + bindings = <&kp A>, <&kp LS(B)>; // implict mod overwrite + mods = <(MOD_LSFT|MOD_RSFT)>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_ALT &mod_morph + &kp LEFT_SHIFT &kp RIGHT_SHIFT + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; + diff --git a/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/events.patterns b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/keycode_events.snapshot b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/keycode_events.snapshot new file mode 100644 index 00000000000..561f88a9297 --- /dev/null +++ b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/keycode_events.snapshot @@ -0,0 +1,18 @@ +pressed: keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x04 +reg implicit: Modifiers set to 0x04 +pressed: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x06 +reg implicit: Modifiers set to 0x06 +mask mods: Modifiers set to 0x04 +pressed: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +reg implicit: Modifiers set to 0x04 +released: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x04 +unmask mods: Modifiers set to 0x06 +released: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x04 +unreg implicit: Modifiers set to 0x04 +released: keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x00 +unreg implicit: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap new file mode 100644 index 00000000000..d5406e195a1 --- /dev/null +++ b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap @@ -0,0 +1,15 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/events.patterns b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/keycode_events.snapshot b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/keycode_events.snapshot new file mode 100644 index 00000000000..dcf2aae6384 --- /dev/null +++ b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x02 +reg implicit: Modifiers set to 0x02 +mask mods: Modifiers set to 0x00 +pressed: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +reg implicit: Modifiers set to 0x00 +released: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x00 +unmask mods: Modifiers set to 0x02 +released: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x00 +unreg implicit: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap new file mode 100644 index 00000000000..7071e8cd397 --- /dev/null +++ b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap @@ -0,0 +1,45 @@ +#include +#include +#include + +&kscan { + events = < + /* Shift + tap &mod_morph --> expect B (but get Shift + B) */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; + +/ { + behaviors { + mod_morph: mod_morph { + compatible = "zmk,behavior-mod-morph"; + label = "MOD_MORPH_TEST"; + #binding-cells = <0>; + bindings = <&kp A>, << 1 B>; + mods = <(MOD_LSFT|MOD_RSFT)>; + }; + + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_SHIFT &mod_morph + &kp C &none + >; + }; + + second_layer { + bindings = < + &trans &trans + &kp D &trans + >; + }; + }; +}; diff --git a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/events.patterns b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/keycode_events.snapshot b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/keycode_events.snapshot new file mode 100644 index 00000000000..ba70ee98177 --- /dev/null +++ b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x02 +reg implicit: Modifiers set to 0x02 +mask mods: Modifiers set to 0x00 +pressed: keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +reg implicit: Modifiers set to 0x00 +released: keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x00 +unmask mods: Modifiers set to 0x02 +released: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x00 +unreg implicit: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap new file mode 100644 index 00000000000..96c2f270fef --- /dev/null +++ b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap @@ -0,0 +1,47 @@ +#include +#include +#include + +&kscan { + events = < + /* Shift + hold &mod_morph --> expect and get D (no shift) */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,200) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; + +/ { + behaviors { + mod_morph: mod_morph { + compatible = "zmk,behavior-mod-morph"; + label = "MOD_MORPH_TEST"; + #binding-cells = <0>; + bindings = <&kp A>, << 1 B>; + mods = <(MOD_LSFT|MOD_RSFT)>; + }; + + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_SHIFT &mod_morph + &kp C &none + >; + }; + + second_layer { + bindings = < + &trans &trans + &kp D &trans + >; + }; + }; +}; diff --git a/app/tests/mod-morph/3-unmasked-morph/events.patterns b/app/tests/mod-morph/3-unmasked-morph/events.patterns new file mode 100644 index 00000000000..f1a41fcf2c3 --- /dev/null +++ b/app/tests/mod-morph/3-unmasked-morph/events.patterns @@ -0,0 +1,8 @@ +s/.*hid_listener_keycode_pressed.*keycode/pressed: keycode/p +s/.*hid_listener_keycode_released.*keycode/released: keycode/p +s/.*hid_register_mod.*Modifiers set to /reg explicit: Modifiers set to /p +s/.*hid_unregister_mod.*Modifiers set to /unreg explicit: Modifiers set to /p +s/.*hid_implicit_modifiers_press.*Modifiers set to /reg implicit: Modifiers set to /p +s/.*hid_implicit_modifiers_release.*Modifiers set to /unreg implicit: Modifiers set to /p +s/.*hid_masked_modifiers_set.*Modifiers set to /mask mods: Modifiers set to /p +s/.*hid_masked_modifiers_clear.*Modifiers set to /unmask mods: Modifiers set to /p diff --git a/app/tests/mod-morph/3-unmasked-morph/keycode_events.snapshot b/app/tests/mod-morph/3-unmasked-morph/keycode_events.snapshot new file mode 100644 index 00000000000..424242d599e --- /dev/null +++ b/app/tests/mod-morph/3-unmasked-morph/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +reg explicit: Modifiers set to 0x02 +reg implicit: Modifiers set to 0x02 +mask mods: Modifiers set to 0x02 +pressed: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +reg implicit: Modifiers set to 0x02 +released: keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +unreg implicit: Modifiers set to 0x02 +unmask mods: Modifiers set to 0x02 +released: keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +unreg explicit: Modifiers set to 0x00 +unreg implicit: Modifiers set to 0x00 diff --git a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap new file mode 100644 index 00000000000..a82d3ea724b --- /dev/null +++ b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/ { + behaviors { + mod_morph: mod_morph { + compatible = "zmk,behavior-mod-morph"; + label = "MOD_MORPH_TEST"; + #binding-cells = <0>; + bindings = <&kp A>, <&kp B>; + mods = <(MOD_LSFT|MOD_RSFT)>; + keep-mods = <(MOD_LSFT|MOD_RSFT)>; // no masking + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_ALT &mod_morph + &kp LEFT_SHIFT &kp RIGHT_SHIFT + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; diff --git a/app/tests/mod-morph/behavior_keymap.dtsi b/app/tests/mod-morph/behavior_keymap.dtsi new file mode 100644 index 00000000000..09720d8d032 --- /dev/null +++ b/app/tests/mod-morph/behavior_keymap.dtsi @@ -0,0 +1,23 @@ +/ { + behaviors { + mod_morph: mod_morph { + compatible = "zmk,behavior-mod-morph"; + label = "MOD_MORPH_TEST"; + #binding-cells = <0>; + bindings = <&kp A>, <&kp B>; + mods = <(MOD_LSFT|MOD_RSFT)>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_ALT &mod_morph + &kp LEFT_SHIFT &kp RIGHT_SHIFT + >; + }; + }; +}; diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot index 43edb961222..45719679dfb 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot @@ -7,7 +7,7 @@ mods: Modifiers set to 0x03 released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 unreg: Modifier 0 count: 0 unreg: Modifier 0 released -unreg: Modifiers set to 0x00 +unreg: Modifiers set to 0x02 mods: Modifiers set to 0x00 released: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00 mods: Modifiers set to 0x00 diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index 2606aaf8bf9..33d18e33a2e 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -14,8 +14,6 @@ The Mod-Morph behavior sends a different keypress, depending on whether a specif The Mod-Morph behavior acts as one of two keycodes, depending on if the required modifier is being held during the keypress. -When the modifier is being held it is sent along with the morphed keycode. This can cause problems when the morphed keycode and modifier have an existing relationship (such as `shift-delete` or `ctrl-v` on many operating systems). - ### Configuration An example of how to implement the mod-morph "Grave Escape": @@ -31,10 +29,6 @@ An example of how to implement the mod-morph "Grave Escape": mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; }; }; - - keymap { - ... - }; }; ``` @@ -71,3 +65,26 @@ Example: ``` mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; ``` + +### Advanced configuration + +`keep-mods` + +When a modifier specified in `mods` is being held, it won't be sent along with the morphed keycode unless it is also specified in `keep-mods`. By default `keep-mods` equals `0`, which means no modifier specified in `mods` will be sent along with the morphed keycode. + +For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into `DELETE`, and morphs `RIGHT_SHIFT` + `BACKSPACE` into `RIGHT_SHIFT` + `DELETE`. + +``` +/ { + behaviors { + bspc_del: backspace_delete { + compatible = "zmk,behavior-mod-morph"; + label = "BACKSPACE_DELETE"; + #binding-cells = <0>; + bindings = <&kp BACKSPACE>, <&kp DELETE>; + mods = <(MOD_LSFT|MOD_RSFT)>; + keep-mods = <(MOD_RSFT)>; + }; + }; +}; +``` From 3f00f14e36d3fda905d7b7be0ecadce23d5c9b97 Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Sat, 15 Oct 2022 15:00:09 -0400 Subject: [PATCH 0531/1130] feat(docs): Added a Spelling Error Caution Notice --- docs/docs/codes/index.mdx | 2 ++ docs/src/components/codes/SpellingCaution.jsx | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 docs/src/components/codes/SpellingCaution.jsx diff --git a/docs/docs/codes/index.mdx b/docs/docs/codes/index.mdx index 6a2fbdc82ca..a701b4ce4b0 100644 --- a/docs/docs/codes/index.mdx +++ b/docs/docs/codes/index.mdx @@ -5,6 +5,7 @@ hide_title: true slug: ./ --- +import SpellingCaution from "@site/src/components/codes/SpellingCaution"; import OsLegend from "@site/src/components/codes/OsLegend"; import ToastyContainer from "@site/src/components/codes/ToastyContainer"; import Key, { toc as keyToc } from "./_keyboard-keypad.mdx"; @@ -23,6 +24,7 @@ export const toc = [ ...powerToc, ]; + diff --git a/docs/src/components/codes/SpellingCaution.jsx b/docs/src/components/codes/SpellingCaution.jsx new file mode 100644 index 00000000000..15ba9488ecd --- /dev/null +++ b/docs/src/components/codes/SpellingCaution.jsx @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import Admonition from "@theme/Admonition"; + +export default function SpellingCaution() { + return ( + +

    + Take extra notice of the spelling of the keycodes, especially the + shorthand spelling. Otherwise, it will result in an elusive parsing + error! +

    + + ); +} + +SpellingCaution.propTypes = {}; From c9eb63199a2853af2395162ee574f2ed167f0aa0 Mon Sep 17 00:00:00 2001 From: ebastler Date: Tue, 18 Oct 2022 03:48:19 +0200 Subject: [PATCH 0532/1130] feat(keymaps): add NUHS/NUBS alias for Non-US-Backslash/Non-US-Hash --- app/include/dt-bindings/zmk/keys.h | 2 ++ docs/src/data/hid.js | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index d144ebb353b..3e67c402470 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -263,6 +263,7 @@ /* Keyboard Non-US # and ~ (Non-US Hash/Number and Tilde) */ #define NON_US_HASH (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE)) +#define NUHS (NON_US_HASH) /* Keyboard ~ (Tilde) */ #define TILDE2 (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE))) @@ -499,6 +500,7 @@ #define NON_US_BACKSLASH \ (ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE)) #define NON_US_BSLH (NON_US_BACKSLASH) +#define NUBS (NON_US_BACKSLASH) /* Keyboard Pipe */ #define PIPE2 (LS(ZMK_HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE))) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index dde8bae48d3..00d48f3fe67 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -1356,7 +1356,7 @@ export default [ footnotes: {}, }, { - names: ["NON_US_HASH"], + names: ["NON_US_HASH", "NUHS"], description: "Non-US # [Hash/Pound] and ~ [Tilde]", context: "Keyboard", clarify: false, @@ -2606,7 +2606,7 @@ export default [ footnotes: {}, }, { - names: ["NON_US_BACKSLASH", "NON_US_BSLH"], + names: ["NON_US_BACKSLASH", "NON_US_BSLH", "NUBS"], description: "Non-US \\ [Backslash] and | [Pipe]", context: "Keyboard", clarify: false, From d3d5b8eb8a070bab19a0d053bcd94902b447df34 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Fri, 21 Oct 2022 22:10:55 -0500 Subject: [PATCH 0533/1130] fix(displays): Adjust alignment and spacing * Adjust alignment and spacing * Fix char array lengths --- app/src/display/status_screen.c | 2 +- app/src/display/widgets/battery_status.c | 5 +++-- app/src/display/widgets/layer_status.c | 8 ++++---- app/src/display/widgets/output_status.c | 16 ++++++++-------- app/src/display/widgets/wpm_status.c | 3 ++- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app/src/display/status_screen.c b/app/src/display/status_screen.c index 6ace1925af8..0fe7212d3db 100644 --- a/app/src/display/status_screen.c +++ b/app/src/display/status_screen.c @@ -68,7 +68,7 @@ lv_obj_t *zmk_display_status_screen() { #if IS_ENABLED(CONFIG_ZMK_WIDGET_WPM_STATUS) zmk_widget_wpm_status_init(&wpm_status_widget, screen); - lv_obj_align(zmk_widget_wpm_status_obj(&wpm_status_widget), NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -12, + lv_obj_align(zmk_widget_wpm_status_obj(&wpm_status_widget), NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); #endif return screen; diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 3dfcdb473f9..9179b0d0b76 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -27,13 +27,13 @@ struct battery_status_state { }; static void set_battery_symbol(lv_obj_t *label, struct battery_status_state state) { - char text[2] = " "; + char text[8] = {}; uint8_t level = state.level; #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) if (state.usb_present) { - strcpy(text, LV_SYMBOL_CHARGE); + strcpy(text, LV_SYMBOL_CHARGE " "); } #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ @@ -49,6 +49,7 @@ static void set_battery_symbol(lv_obj_t *label, struct battery_status_state stat strcat(text, LV_SYMBOL_BATTERY_EMPTY); } lv_label_set_text(label, text); + lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); } void battery_status_update_cb(struct battery_status_state state) { diff --git a/app/src/display/widgets/layer_status.c b/app/src/display/widgets/layer_status.c index 32bdb82821e..a4a7be58df7 100644 --- a/app/src/display/widgets/layer_status.c +++ b/app/src/display/widgets/layer_status.c @@ -24,15 +24,15 @@ struct layer_status_state { static void set_layer_symbol(lv_obj_t *label, struct layer_status_state state) { if (state.label == NULL) { - char text[6] = {}; + char text[7] = {}; - sprintf(text, LV_SYMBOL_KEYBOARD "%i", state.index); + sprintf(text, LV_SYMBOL_KEYBOARD " %i", state.index); lv_label_set_text(label, text); } else { - char text[12] = {}; + char text[13] = {}; - snprintf(text, 12, LV_SYMBOL_KEYBOARD "%s", state.label); + snprintf(text, sizeof(text), LV_SYMBOL_KEYBOARD " %s", state.label); lv_label_set_text(label, text); } diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index fe99ac9659b..8bbe1a7ef29 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -39,24 +39,24 @@ static struct output_status_state get_state(const zmk_event_t *_eh) { } static void set_status_symbol(lv_obj_t *label, struct output_status_state state) { - char text[9] = {}; + char text[10] = {}; switch (state.selected_endpoint) { case ZMK_ENDPOINT_USB: - strcat(text, LV_SYMBOL_USB " "); + strcat(text, LV_SYMBOL_USB); break; case ZMK_ENDPOINT_BLE: if (state.active_profile_bonded) { if (state.active_profile_connected) { - snprintf(text, sizeof(text), LV_SYMBOL_WIFI "%i " LV_SYMBOL_OK, - state.active_profile_index); + snprintf(text, sizeof(text), LV_SYMBOL_WIFI " %i " LV_SYMBOL_OK, + state.active_profile_index + 1); } else { - snprintf(text, sizeof(text), LV_SYMBOL_WIFI "%i " LV_SYMBOL_CLOSE, - state.active_profile_index); + snprintf(text, sizeof(text), LV_SYMBOL_WIFI " %i " LV_SYMBOL_CLOSE, + state.active_profile_index + 1); } } else { - snprintf(text, sizeof(text), LV_SYMBOL_WIFI "%i " LV_SYMBOL_SETTINGS, - state.active_profile_index); + snprintf(text, sizeof(text), LV_SYMBOL_WIFI " %i " LV_SYMBOL_SETTINGS, + state.active_profile_index + 1); } break; } diff --git a/app/src/display/widgets/wpm_status.c b/app/src/display/widgets/wpm_status.c index 7ed047c30c6..a2c6a2871dc 100644 --- a/app/src/display/widgets/wpm_status.c +++ b/app/src/display/widgets/wpm_status.c @@ -28,9 +28,10 @@ void set_wpm_symbol(lv_obj_t *label, struct wpm_status_state state) { char text[4] = {}; LOG_DBG("WPM changed to %i", state.wpm); - snprintf(text, sizeof(text), "%i ", state.wpm); + snprintf(text, sizeof(text), "%i", state.wpm); lv_label_set_text(label, text); + lv_obj_align(label, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); } void wpm_status_update_cb(struct wpm_status_state state) { From b90e3ae03d9f48a33f7327e9c478aa6fe215d0c6 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Sat, 22 Oct 2022 12:50:44 +0800 Subject: [PATCH 0534/1130] fix(ci): Replace workflow set-output with environment variables * Needed for deprecation: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ --- .github/workflows/build-user-config.yml | 67 +++++++++++-------------- 1 file changed, 30 insertions(+), 37 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 215ccb63fe4..759dd72a32a 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -18,8 +18,8 @@ on: default: "bin" required: false type: string - artifact_name: - description: 'Artifact output file name' + archive_name: + description: 'Archive output file name' default: 'firmware' required: false type: string @@ -29,21 +29,18 @@ jobs: runs-on: ubuntu-latest name: Fetch Build Keyboards outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + build_matrix: ${{ env.build_matrix }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3.1.0 - name: Install yaml2json run: python3 -m pip install remarshal - name: Fetch Build Matrix - id: set-matrix run: | - set -x - matrix=$(yaml2json ${{ inputs.build_matrix_path }} | jq -c .) - yaml2json ${{ inputs.build_matrix_path }} - echo "::set-output name=matrix::${matrix}" + echo "build_matrix=$(yaml2json ${{ inputs.build_matrix_path }} | jq -c .)" >> $GITHUB_ENV + yaml2json ${{ inputs.build_matrix_path }} | jq build: runs-on: ubuntu-latest @@ -53,35 +50,31 @@ jobs: name: Build strategy: fail-fast: false - matrix: ${{fromJson(needs.matrix.outputs.matrix)}} + matrix: ${{ fromJson(needs.matrix.outputs.build_matrix) }} steps: - name: Prepare variables - id: variables + shell: sh -x {0} run: | - set -x if [ -n "${{ matrix.shield }}" ] then - EXTRA_CMAKE_ARGS="-DSHIELD=\"${{ matrix.shield }}\"" - ARTIFACT_NAME="${{ matrix.shield }}-${{ matrix.board }}-zmk" - DISPLAY_NAME="${{ matrix.shield }} - ${{ matrix.board }}" + echo "extra_cmake_args=-DSHIELD=\"${{ matrix.shield }}\"" >> $GITHUB_ENV + echo "artifact_name=${{ matrix.shield }}-${{ matrix.board }}-zmk" >> $GITHUB_ENV + echo "display_name=${{ matrix.shield }} - ${{ matrix.board }}" >> $GITHUB_ENV else - EXTRA_CMAKE_ARGS= - DISPLAY_NAME="${{ matrix.board }}" - ARTIFACT_NAME="${{ matrix.board }}-zmk" + echo "extra_cmake_args=" >> $GITHUB_ENV + echo "artifact_name=${{ matrix.board }}-zmk" >> $GITHUB_ENV + echo "display_name=${{ matrix.board }}" >> $GITHUB_ENV fi - echo ::set-output name=extra-cmake-args::${EXTRA_CMAKE_ARGS} - echo ::set-output name=artifact-name::${ARTIFACT_NAME} - echo ::set-output name=display-name::${DISPLAY_NAME} - echo ::set-output name=zephyr-version::${ZEPHYR_VERSION} + echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3.1.0 - name: Cache west modules - uses: actions/cache@v3.0.2 + uses: actions/cache@v3.0.11 continue-on-error: true env: - cache-name: cache-zephyr-${{ steps.variables.outputs.zephyr-version }}-modules + cache_name: cache-zephyr-${{ env.zephyr_version }}-modules with: path: | modules/ @@ -89,9 +82,9 @@ jobs: zephyr/ bootloader/ zmk/ - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/west.yml', '**/build.yaml') }} + key: ${{ runner.os }}-build-${{ env.cache_name }}-${{ hashFiles('**/west.yml', '**/build.yaml') }} restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build-${{ env.cache_name }}- ${{ runner.os }}-build- ${{ runner.os }}- @@ -104,28 +97,28 @@ jobs: - name: West Zephyr export run: west zephyr-export - - name: West Build (${{ steps.variables.outputs.display-name }}) + - name: West Build (${{ env.display_name }}) + shell: sh -x {0} run: | - set -x - west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }} + west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - - name: ${{ steps.variables.outputs.display-name }} Kconfig file + - name: ${{ env.display_name }} Kconfig file run: grep -v -e "^#" -e "^$" build/zephyr/.config | sort - name: Rename artifacts + shell: sh -x {0} run: | - set -x mkdir build/artifacts if [ -f build/zephyr/zmk.uf2 ] then - cp build/zephyr/zmk.uf2 "build/artifacts/${{ steps.variables.outputs.artifact-name }}.uf2" + cp build/zephyr/zmk.uf2 "build/artifacts/${{ env.artifact_name }}.uf2" elif [ -f build/zephyr/zmk.${{ inputs.fallback_binary }} ] then - cp build/zephyr/zmk.${{ inputs.fallback_binary }} "build/artifacts/${{ steps.variables.outputs.artifact-name }}.${{ inputs.fallback_binary }}" + cp build/zephyr/zmk.${{ inputs.fallback_binary }} "build/artifacts/${{ env.artifact_name }}.${{ inputs.fallback_binary }}" fi - - name: Archive (${{ steps.variables.outputs.display-name }}) - uses: actions/upload-artifact@v2 + - name: Archive (${{ env.display_name }}) + uses: actions/upload-artifact@v3 with: - name: ${{ inputs.artifact_name }} + name: ${{ inputs.archive_name }} path: build/artifacts From f59da74a3e714825448b5dcde7794e175dea975a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 22 Oct 2022 04:51:29 +0000 Subject: [PATCH 0535/1130] chore(deps): bump actions/checkout from 2 to 3.1.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.1.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3.1.0) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build-user-config.yml | 4 ++-- .github/workflows/build.yml | 8 ++++---- .github/workflows/clang-format-lint.yml | 2 +- .github/workflows/doc-checks.yml | 6 +++--- .github/workflows/hardware-metadata-validation.yml | 6 +++--- .github/workflows/test.yml | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 759dd72a32a..3833abe80f7 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -32,7 +32,7 @@ jobs: build_matrix: ${{ env.build_matrix }} steps: - name: Checkout - uses: actions/checkout@v3.1.0 + uses: actions/checkout@v3 - name: Install yaml2json run: python3 -m pip install remarshal @@ -68,7 +68,7 @@ jobs: echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v3.1.0 + uses: actions/checkout@v3 - name: Cache west modules uses: actions/cache@v3.0.11 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 16373673c6d..92df03c3cb8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: include: ${{ fromJSON(needs.compile-matrix.outputs.include-list) }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache west modules uses: actions/cache@v3.0.2 env: @@ -151,7 +151,7 @@ jobs: core-include: ${{ steps.core-list.outputs.result }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v2 with: @@ -180,7 +180,7 @@ jobs: boards-include: ${{ steps.boards-list.outputs.result }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v2 with: @@ -307,7 +307,7 @@ jobs: organized-metadata: ${{ steps.organize-metadata.outputs.result }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v2 with: diff --git a/.github/workflows/clang-format-lint.yml b/.github/workflows/clang-format-lint.yml index 375bcd4e521..8c2cfbcfced 100644 --- a/.github/workflows/clang-format-lint.yml +++ b/.github/workflows/clang-format-lint.yml @@ -22,7 +22,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: DoozyX/clang-format-lint-action@v0.13 with: source: "./app" diff --git a/.github/workflows/doc-checks.yml b/.github/workflows/doc-checks.yml index a9b2d5ae0f6..d048a03e0ab 100644 --- a/.github/workflows/doc-checks.yml +++ b/.github/workflows/doc-checks.yml @@ -14,7 +14,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: bahmutov/npm-install@v1 with: working-directory: docs @@ -24,7 +24,7 @@ jobs: prettier: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: bahmutov/npm-install@v1 with: working-directory: docs @@ -34,7 +34,7 @@ jobs: typecheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: bahmutov/npm-install@v1 with: working-directory: docs diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index 7b5ec92719f..c6566feb932 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -18,8 +18,8 @@ jobs: check-metadata-format: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - uses: bahmutov/npm-install@v1 with: working-directory: app @@ -31,7 +31,7 @@ jobs: container: image: docker.io/zmkfirmware/zmk-dev-arm:3.0 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install dependencies run: pip install -r app/scripts/requirements.txt - name: West init diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3393d0c42fc..38c61eeaf56 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Find test directories id: test-dirs run: | @@ -36,7 +36,7 @@ jobs: image: docker.io/zmkfirmware/zmk-build-arm:3.0 steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache west modules uses: actions/cache@v3.0.2 env: From 41fdd07315fbd683eba9a9d7f3475bf55ce9dcdb Mon Sep 17 00:00:00 2001 From: Jay Greco Date: Mon, 23 May 2022 08:00:01 +0000 Subject: [PATCH 0536/1130] feat(boards): Add nullbits SNAP shield --- app/boards/shields/snap/Kconfig.defconfig | 49 +++++++++++ app/boards/shields/snap/Kconfig.shield | 8 ++ .../shields/snap/boards/nice_nano.overlay | 37 ++++++++ .../shields/snap/boards/nice_nano_v2.overlay | 37 ++++++++ app/boards/shields/snap/snap.conf | 17 ++++ app/boards/shields/snap/snap.dtsi | 86 +++++++++++++++++++ app/boards/shields/snap/snap.keymap | 47 ++++++++++ app/boards/shields/snap/snap.zmk.yml | 15 ++++ app/boards/shields/snap/snap_left.overlay | 34 ++++++++ app/boards/shields/snap/snap_right.overlay | 51 +++++++++++ 10 files changed, 381 insertions(+) create mode 100644 app/boards/shields/snap/Kconfig.defconfig create mode 100644 app/boards/shields/snap/Kconfig.shield create mode 100644 app/boards/shields/snap/boards/nice_nano.overlay create mode 100644 app/boards/shields/snap/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/snap/snap.conf create mode 100644 app/boards/shields/snap/snap.dtsi create mode 100644 app/boards/shields/snap/snap.keymap create mode 100644 app/boards/shields/snap/snap.zmk.yml create mode 100644 app/boards/shields/snap/snap_left.overlay create mode 100644 app/boards/shields/snap/snap_right.overlay diff --git a/app/boards/shields/snap/Kconfig.defconfig b/app/boards/shields/snap/Kconfig.defconfig new file mode 100644 index 00000000000..24a8e5cc747 --- /dev/null +++ b/app/boards/shields/snap/Kconfig.defconfig @@ -0,0 +1,49 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SNAP_LEFT + +config ZMK_KEYBOARD_NAME + default "SNAP" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif + +if SHIELD_SNAP_LEFT || SHIELD_SNAP_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/snap/Kconfig.shield b/app/boards/shields/snap/Kconfig.shield new file mode 100644 index 00000000000..eb02c45f8f7 --- /dev/null +++ b/app/boards/shields/snap/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SNAP_LEFT + def_bool $(shields_list_contains,snap_left) + +config SHIELD_SNAP_RIGHT + def_bool $(shields_list_contains,snap_right) diff --git a/app/boards/shields/snap/boards/nice_nano.overlay b/app/boards/shields/snap/boards/nice_nano.overlay new file mode 100644 index 00000000000..f869db5db1d --- /dev/null +++ b/app/boards/shields/snap/boards/nice_nano.overlay @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <10>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/snap/boards/nice_nano_v2.overlay b/app/boards/shields/snap/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..f869db5db1d --- /dev/null +++ b/app/boards/shields/snap/boards/nice_nano_v2.overlay @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <10>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/snap/snap.conf b/app/boards/shields/snap/snap.conf new file mode 100644 index 00000000000..e76bccb4815 --- /dev/null +++ b/app/boards/shields/snap/snap.conf @@ -0,0 +1,17 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment these two lines to add support for encoders to your firmware +# and enable the encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable the RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=n +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y +# CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP=5 +# CONFIG_ZMK_RGB_UNDERGLOW_SPD_START=1 \ No newline at end of file diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi new file mode 100644 index 00000000000..0b7f32e592b --- /dev/null +++ b/app/boards/shields/snap/snap.dtsi @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan_composite; + zmk,matrix_transform = &default_transform; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <17>; + rows = <6>; + +// | R0C06L | R0C05L | R0C04L | R0C03L | R0C02L | R0C01L | R0C00L | | R0C15R | R0C14R | R0C13R | R0C12R | R0C11R | R0C10R | R0C09R | R0C08R | +// R1C07L | R1C06L | R1C05L | R1C04L | R1C03L | R1C02L | R1C01L | R1C00L | | R1C15R | R1C14R | R1C13R | R1C12R | R1C11R | R1C10R | R1C09R | R1C08R | R2C0XR | +// R2C07L | R2C06L | R2C05L | R2C04L | R2C03L | R2C02L | R2C00L | | R2C15R | R2C14R | R2C13R | R2C12R | R2C11R | R2C10R | R2C09R | R3C08R | R2C08R | +// R3C07L | R3C06L | R3C05L | R3C04L | R3C03L | R3C02L | R3C00L | | R3C15R | R3C14R | R3C13R | R3C12R | R3C11R | R3C10R | R3C09R | R4C08R | +// R4C07L | R4C06L | R4C05L | R4C04L | R4C03L | R4C02L | R4C01L | R4C00L | | R4C15R | R4C14R | R4C13R | R4C12R | R4C11R | R4C10R | R4C09R | R5C08R | +// R5C07L | R5C06L | R5C05L | R5C04L | R5C02L | R5C00L | | R5C15R | R5C14R | R5C13R | R5C12R | R5C11R | R5C10R | R5C09R | + + map = < + RC(0,6) RC(0,5) RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,15) RC(0,14) RC(0,13) RC(0,12) RC(0,11) RC(0,10) RC(0,9) RC(0,8) +RC(1,7) RC(1,6) RC(1,5) RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,15) RC(1,14) RC(1,13) RC(1,12) RC(1,11) RC(1,10) RC(1,9) RC(1,8) RC(1,16) +RC(2,7) RC(2,6) RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,0) RC(2,15) RC(2,14) RC(2,13) RC(2,12) RC(2,11) RC(2,10) RC(2,9) RC(3,8) RC(2,8) +RC(3,7) RC(3,6) RC(3,5) RC(3,4) RC(3,3) RC(3,2) RC(3,0) RC(3,15) RC(3,14) RC(3,13) RC(3,12) RC(3,11) RC(3,10) RC(3,9) RC(4,8) +RC(4,7) RC(4,6) RC(4,5) RC(4,4) RC(4,3) RC(4,2) RC(4,1) RC(4,0) RC(4,15) RC(4,14) RC(4,13) RC(4,12) RC(4,11) RC(4,10) RC(4,9) RC(5,8) +RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,2) RC(5,0) RC(5,15) RC(5,14) RC(5,13) RC(5,12) RC(5,11) RC(5,10) RC(5,9) + >; + }; + + kscan_composite: kscan { + compatible = "zmk,kscan-composite"; + label = "KSCAN"; + rows = <6>; + columns = <17>; + + demux { + kscan = <&kscan_demux>; + }; + }; + + kscan_demux: kscan_demux { + compatible = "zmk,kscan-gpio-demux"; + label = "DEMUX"; + polling-interval-msec = <25>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/snap/snap.keymap b/app/boards/shields/snap/snap.keymap new file mode 100644 index 00000000000..db44eb690aa --- /dev/null +++ b/app/boards/shields/snap/snap.keymap @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + label = "Default"; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp C_VOL_UP C_VOL_DN>; + bindings = < + &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp KP_NUM &kp PAUSE_BREAK +&kp C_MUTE &kp TILDE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL &kp HOME +&kp F13 &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp END +&kp F14 &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP +&kp F15 &kp LSHFT &kp NUHS &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN +&kp F16 &kp LCTRL &kp LGUI &kp LALT &mo 1 &kp SPACE &kp BSPC &mo 1 &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + }; + + function_layer { + label = "Function"; + sensor-bindings = <&inc_dec_kp C_NEXT C_PREV &inc_dec_kp C_NEXT C_PREV>; + bindings = < + &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader +&kp C_PP &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_PP +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_BRI &rgb_ug RGB_EFF +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_BRD &rgb_ug RGB_HUI + >; + }; + }; +}; diff --git a/app/boards/shields/snap/snap.zmk.yml b/app/boards/shields/snap/snap.zmk.yml new file mode 100644 index 00000000000..718c7ba2ce5 --- /dev/null +++ b/app/boards/shields/snap/snap.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: snap +name: SNAP +type: shield +url: https://nullbits.co/snap +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - snap_left + - snap_right diff --git a/app/boards/shields/snap/snap_left.overlay b/app/boards/shields/snap/snap_left.overlay new file mode 100644 index 00000000000..90fd66d1fa5 --- /dev/null +++ b/app/boards/shields/snap/snap_left.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "snap.dtsi" + +&kscan_demux { + input-gpios + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + output-gpios + = <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + a-gpios = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + status = "okay"; +}; + +&oled { + segment-remap; + com-invdir; +}; diff --git a/app/boards/shields/snap/snap_right.overlay b/app/boards/shields/snap/snap_right.overlay new file mode 100644 index 00000000000..4243f5189e6 --- /dev/null +++ b/app/boards/shields/snap/snap_right.overlay @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "snap.dtsi" + +/ { +kscan_direct: kscan_direct { + compatible = "zmk,kscan-gpio-direct"; + label = "DIRECT"; + input-gpios + = <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; +}; + +&default_transform { + col-offset = <8>; +}; + +&kscan_composite { + direct { + kscan = <&kscan_direct>; + row-offset = <1>; + column-offset = <8>; + }; +}; + +&kscan_demux { + input-gpios + = <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + output-gpios + = <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + status = "okay"; +}; From 2d7c8f6073c065da695f4974bd8a892bb362f185 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 26 Oct 2022 05:28:18 +0000 Subject: [PATCH 0537/1130] chore(docs): Bump docusaurus and run audit fix. --- docs/package-lock.json | 22507 +++++++++++++++++++++------------------ docs/package.json | 12 +- 2 files changed, 11996 insertions(+), 10523 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 4297f7aca19..61af445c220 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,8 +8,8 @@ "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^2.0.0-beta.21", - "@docusaurus/preset-classic": "^2.0.0-beta.21", + "@docusaurus/core": "^2.1.0", + "@docusaurus/preset-classic": "^2.1.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.18", @@ -24,16 +24,16 @@ "web-tree-sitter": "^0.19.4" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.0.0-beta.21", - "@docusaurus/types": "^2.0.0-beta.21", + "@docusaurus/module-type-aliases": "^2.1.0", + "@docusaurus/types": "^2.1.0", "@tsconfig/docusaurus": "^1.0.5", "@types/js-yaml": "^4.0.5", "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.5", "@types/react-router-dom": "^5.1.7", - "eslint": "^7.32.0", + "eslint": "^8.0.0", "eslint-config-prettier": "^8.5.0", - "eslint-plugin-mdx": "^1.17.0", + "eslint-plugin-mdx": "^2.0.5", "eslint-plugin-react": "^7.30.0", "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", @@ -46,87 +46,99 @@ } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.6.3.tgz", - "integrity": "sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", + "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", + "dependencies": { + "@algolia/autocomplete-shared": "1.7.2" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", + "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", "dependencies": { - "@algolia/autocomplete-shared": "1.6.3" + "@algolia/autocomplete-shared": "1.7.2" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.3.tgz", - "integrity": "sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", + "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.1.tgz", - "integrity": "sha512-UAUVG2PEfwd/FfudsZtYnidJ9eSCpS+LW9cQiesePQLz41NAcddKxBak6eP2GErqyFagSlnVXe/w2E9h2m2ttg==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", + "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", "dependencies": { - "@algolia/cache-common": "4.13.1" + "@algolia/cache-common": "4.14.2" } }, "node_modules/@algolia/cache-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.13.1.tgz", - "integrity": "sha512-7Vaf6IM4L0Jkl3sYXbwK+2beQOgVJ0mKFbz/4qSxKd1iy2Sp77uTAazcX+Dlexekg1fqGUOSO7HS4Sx47ZJmjA==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", + "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.13.1.tgz", - "integrity": "sha512-pZzybCDGApfA/nutsFK1P0Sbsq6fYJU3DwIvyKg4pURerlJM4qZbB9bfLRef0FkzfQu7W11E4cVLCIOWmyZeuQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", + "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", "dependencies": { - "@algolia/cache-common": "4.13.1" + "@algolia/cache-common": "4.14.2" } }, "node_modules/@algolia/client-account": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.13.1.tgz", - "integrity": "sha512-TFLiZ1KqMiir3FNHU+h3b0MArmyaHG+eT8Iojio6TdpeFcAQ1Aiy+2gb3SZk3+pgRJa/BxGmDkRUwE5E/lv3QQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", + "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-analytics": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.13.1.tgz", - "integrity": "sha512-iOS1JBqh7xaL5x00M5zyluZ9+9Uy9GqtYHv/2SMuzNW1qP7/0doz1lbcsP3S7KBbZANJTFHUOfuqyRLPk91iFA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", + "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.13.1.tgz", - "integrity": "sha512-LcDoUE0Zz3YwfXJL6lJ2OMY2soClbjrrAKB6auYVMNJcoKZZ2cbhQoFR24AYoxnGUYBER/8B+9sTBj5bj/Gqbg==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", + "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", "dependencies": { - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-personalization": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.13.1.tgz", - "integrity": "sha512-1CqrOW1ypVrB4Lssh02hP//YxluoIYXAQCpg03L+/RiXJlCs+uIqlzC0ctpQPmxSlTK6h07kr50JQoYH/TIM9w==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", + "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-search": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.13.1.tgz", - "integrity": "sha512-YQKYA83MNRz3FgTNM+4eRYbSmHi0WWpo019s5SeYcL3HUan/i5R09VO9dk3evELDFJYciiydSjbsmhBzbpPP2A==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", + "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/events": { @@ -135,127 +147,107 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.13.1.tgz", - "integrity": "sha512-L6slbL/OyZaAXNtS/1A8SAbOJeEXD5JcZeDCPYDqSTYScfHu+2ePRTDMgUTY4gQ7HsYZ39N1LujOd8WBTmM2Aw==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", + "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" }, "node_modules/@algolia/logger-console": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.13.1.tgz", - "integrity": "sha512-7jQOTftfeeLlnb3YqF8bNgA2GZht7rdKkJ31OCeSH2/61haO0tWPoNRjZq9XLlgMQZH276pPo0NdiArcYPHjCA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", + "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", "dependencies": { - "@algolia/logger-common": "4.13.1" + "@algolia/logger-common": "4.14.2" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.1.tgz", - "integrity": "sha512-oa0CKr1iH6Nc7CmU6RE7TnXMjHnlyp7S80pP/LvZVABeJHX3p/BcSCKovNYWWltgTxUg0U1o+2uuy8BpMKljwA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", + "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", "dependencies": { - "@algolia/requester-common": "4.13.1" + "@algolia/requester-common": "4.14.2" } }, "node_modules/@algolia/requester-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.13.1.tgz", - "integrity": "sha512-eGVf0ID84apfFEuXsaoSgIxbU3oFsIbz4XiotU3VS8qGCJAaLVUC5BUJEkiFENZIhon7hIB4d0RI13HY4RSA+w==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", + "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.13.1.tgz", - "integrity": "sha512-7C0skwtLdCz5heKTVe/vjvrqgL/eJxmiEjHqXdtypcE5GCQCYI15cb+wC4ytYioZDMiuDGeVYmCYImPoEgUGPw==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", + "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", "dependencies": { - "@algolia/requester-common": "4.13.1" + "@algolia/requester-common": "4.14.2" } }, "node_modules/@algolia/transporter": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.13.1.tgz", - "integrity": "sha512-pICnNQN7TtrcYJqqPEXByV8rJ8ZRU2hCiIKLTLRyNpghtQG3VAFk6fVtdzlNfdUGZcehSKGarPIZEHlQXnKjgw==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", + "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", "dependencies": { - "@algolia/cache-common": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/requester-common": "4.13.1" + "@algolia/cache-common": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/requester-common": "4.14.2" } }, "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", + "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", "dev": true, "dependencies": { "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "js-yaml": "^4.1.0" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", - "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "dependencies": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -279,49 +271,62 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -340,17 +345,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -360,12 +365,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" }, "engines": { "node": ">=6.9.0" @@ -375,14 +380,12 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -392,14 +395,6 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -409,213 +404,228 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dependencies": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dependencies": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -658,20 +668,39 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", - "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -680,11 +709,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -693,22 +722,14 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -717,21 +738,14 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -741,21 +755,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -764,21 +770,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", - "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -788,20 +786,12 @@ "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -811,20 +801,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -834,20 +816,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -857,20 +831,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -880,20 +846,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -903,20 +861,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -926,33 +876,30 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -962,21 +909,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -986,21 +925,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1009,22 +940,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1034,21 +957,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" @@ -1057,14 +972,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -1087,14 +994,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", @@ -1109,14 +1008,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -1140,11 +1031,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", - "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1153,14 +1044,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -1173,11 +1056,14 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1263,14 +1149,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -1285,20 +1163,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1307,20 +1177,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1329,22 +1191,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1353,20 +1207,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1375,20 +1221,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1397,26 +1235,19 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, "engines": { @@ -1426,20 +1257,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1448,20 +1271,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1470,21 +1285,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1493,20 +1300,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1515,21 +1314,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1538,20 +1329,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1560,22 +1343,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1584,20 +1359,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1606,20 +1373,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1628,22 +1387,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", - "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1652,23 +1402,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -1677,24 +1418,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.4.tgz", - "integrity": "sha512-lH2UaQaHVOAeYrUUuZ8i38o76J/FnO8vu21OE+tD1MyP9lxdZoSfz+pDbWkq46GogUrdrMz3tiz/FYGB+bVThg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { "node": ">=6.9.0" @@ -1703,21 +1435,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", - "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1726,21 +1450,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1749,20 +1465,12 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", - "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1771,21 +1479,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1794,20 +1494,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1816,20 +1508,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1838,20 +1522,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz", - "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==", + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", + "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1860,20 +1536,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-constant-elements/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1882,24 +1550,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1909,33 +1569,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/plugin-transform-react-jsx": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1945,12 +1583,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1959,20 +1597,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" }, "engines": { @@ -1982,20 +1612,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2004,24 +1626,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.2.tgz", - "integrity": "sha512-mr1ufuRMfS52ttq+1G1PD8OJNqgcTFjq3hwn8SZ5n1x1pBhi0E36rYMdTK0TsKtApJ4lDEdfXJwtGobQMHSMPg==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" }, "engines": { @@ -2031,14 +1645,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2048,11 +1654,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2061,21 +1667,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -2084,20 +1682,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2106,20 +1696,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -2128,20 +1710,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -2150,22 +1724,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2174,20 +1740,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -2196,21 +1754,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2219,46 +1769,38 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/preset-env": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", - "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.18.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "dependencies": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.17.12", + "@babel/plugin-syntax-import-assertions": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -2268,44 +1810,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.18.0", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.18.1", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.18.0", - "@babel/plugin-transform-modules-commonjs": "^7.18.2", - "@babel/plugin-transform-modules-systemjs": "^7.18.0", - "@babel/plugin-transform-modules-umd": "^7.18.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.18.0", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.18.2", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.2", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "engines": { @@ -2315,32 +1857,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2365,16 +1881,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz", - "integrity": "sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.17.12", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2383,22 +1899,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/preset-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", - "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2407,18 +1915,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-typescript/node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -2427,11 +1927,11 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz", - "integrity": "sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", + "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", "dependencies": { - "core-js-pure": "^3.20.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" }, "engines": { @@ -2439,31 +1939,31 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", - "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.2", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2472,11 +1972,12 @@ } }, "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2493,48 +1994,60 @@ } }, "node_modules/@docsearch/css": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.1.0.tgz", - "integrity": "sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", + "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" }, "node_modules/@docsearch/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.1.0.tgz", - "integrity": "sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", + "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", "dependencies": { - "@algolia/autocomplete-core": "1.6.3", - "@docsearch/css": "3.1.0", + "@algolia/autocomplete-core": "1.7.2", + "@algolia/autocomplete-preset-algolia": "1.7.2", + "@docsearch/css": "3.3.0", "algoliasearch": "^4.0.0" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", "react-dom": ">= 16.8.0 < 19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.21.tgz", - "integrity": "sha512-qysDMVp1M5UozK3u/qOxsEZsHF7jeBvJDS+5ItMPYmNKvMbNKeYZGA0g6S7F9hRDwjIlEbvo7BaX0UMDcmTAWA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.1.0.tgz", + "integrity": "sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q==", "dependencies": { - "@babel/core": "^7.18.2", - "@babel/generator": "^7.18.2", + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.2", - "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@babel/runtime-corejs3": "^7.18.3", - "@babel/traverse": "^7.18.2", - "@docusaurus/cssnano-preset": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", - "@slorber/static-site-generator-webpack-plugin": "^4.0.4", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", "babel-loader": "^8.2.5", @@ -2547,10 +2060,10 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.22.7", + "core-js": "^3.23.3", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.9", + "cssnano": "^5.1.12", "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", @@ -2563,7 +2076,7 @@ "import-fresh": "^3.3.0", "leven": "^3.1.0", "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.0", + "mini-css-extract-plugin": "^2.6.1", "postcss": "^8.4.14", "postcss-loader": "^7.0.0", "prompts": "^2.4.2", @@ -2574,19 +2087,18 @@ "react-router": "^5.3.3", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.3", - "remark-admonitions": "^1.2.1", "rtl-detect": "^1.0.4", "semver": "^7.3.7", "serve-handler": "^6.1.3", "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.1", + "terser-webpack-plugin": "^5.3.3", "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", "wait-on": "^6.0.1", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.0", + "webpack-dev-server": "^4.9.3", "webpack-merge": "^5.8.0", "webpackbar": "^5.0.2" }, @@ -2601,26 +2113,12 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz", - "integrity": "sha512-fhTZrg1vc6zYYZIIMXpe1TnEVGEjqscBo0s1uomSwKjjtMgu7wkzc1KKJYY7BndsSA+fVVkZ+OmL/kAsmK7xxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz", + "integrity": "sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ==", "dependencies": { - "cssnano-preset-advanced": "^5.3.5", + "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", "postcss-sort-media-queries": "^4.2.1", "tslib": "^2.4.0" @@ -2630,9 +2128,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz", - "integrity": "sha512-HTFp8FsSMrAj7Uxl5p72U+P7rjYU/LRRBazEoJbs9RaqoKEdtZuhv8MYPOCh46K9TekaoquRYqag2o23Qt4ggA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.1.0.tgz", + "integrity": "sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.4.0" @@ -2642,14 +2140,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz", - "integrity": "sha512-AI+4obJnpOaBOAYV6df2ux5Y1YJCBS+MhXFf0yhED12sVLJi2vffZgdamYd/d/FwvWDw6QLs/VD2jebd7P50yQ==", - "dependencies": { - "@babel/parser": "^7.18.3", - "@babel/traverse": "^7.18.2", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz", + "integrity": "sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.1.0", + "@docusaurus/utils": "2.1.0", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -2659,9 +2157,10 @@ "remark-emoji": "^2.2.0", "stringify-object": "^3.3.0", "tslib": "^2.4.0", + "unified": "^9.2.2", "unist-util-visit": "^2.0.3", "url-loader": "^4.1.1", - "webpack": "^5.72.1" + "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" @@ -2672,15 +2171,18 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.21.tgz", - "integrity": "sha512-gRkWICgQZiqSJgrwRKWjXm5gAB+9IcfYdUbCG0PRPP/G8sNs9zBIOY4uT4Z5ox2CWFEm44U3RTTxj7BiLVMBXw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz", + "integrity": "sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ==", "dependencies": { - "@docusaurus/types": "2.0.0-beta.21", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.1.0", + "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "*" + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" }, "peerDependencies": { "react": "*", @@ -2688,26 +2190,26 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.21.tgz", - "integrity": "sha512-IP21yJViP3oBmgsWBU5LhrG1MZXV4mYCQSoCAboimESmy1Z11RCNP2tXaqizE3iTmXOwZZL+SNBk06ajKCEzWg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", - "cheerio": "^1.0.0-rc.11", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz", + "integrity": "sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg==", + "dependencies": { + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", + "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "reading-time": "^1.5.0", - "remark-admonitions": "^1.2.1", "tslib": "^2.4.0", "unist-util-visit": "^2.0.3", "utility-types": "^3.10.0", - "webpack": "^5.72.1" + "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" @@ -2717,126 +2219,27 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/cheerio": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.11.tgz", - "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dependencies": { - "entities": "^4.3.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.21.tgz", - "integrity": "sha512-aa4vrzJy4xRy81wNskyhE3wzRf3AgcESZ1nfKh8xgHUkT7fDTZ1UWlg50Jb3LBCQFFyQG2XQB9N6llskI/KUnw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz", + "integrity": "sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q==", + "dependencies": { + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/module-type-aliases": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", + "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "remark-admonitions": "^1.2.1", "tslib": "^2.4.0", "utility-types": "^3.10.0", - "webpack": "^5.72.1" + "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" @@ -2847,18 +2250,18 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.21.tgz", - "integrity": "sha512-DmXOXjqNI+7X5hISzCvt54QIK6XBugu2MOxjxzuqI7q92Lk/EVdraEj5mthlH8IaEH/VlpWYJ1O9TzLqX5vH2g==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz", + "integrity": "sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g==", + "dependencies": { + "@docusaurus/core": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "fs-extra": "^10.1.0", - "remark-admonitions": "^1.2.1", "tslib": "^2.4.0", - "webpack": "^5.72.1" + "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" @@ -2869,12 +2272,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.21.tgz", - "integrity": "sha512-P54J4q4ecsyWW0Jy4zbimSIHna999AfbxpXGmF1IjyHrjoA3PtuakV1Ai51XrGEAaIq9q6qMQkEhbUd3CffGAw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz", + "integrity": "sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", + "@docusaurus/core": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" @@ -2888,12 +2292,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.21.tgz", - "integrity": "sha512-+5MS0PeGaJRgPuNZlbd/WMdQSpOACaxEz7A81HAxm6kE+tIASTW3l8jgj1eWFy/PGPzaLnQrEjxI1McAfnYmQw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz", + "integrity": "sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "@docusaurus/core": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "tslib": "^2.4.0" }, "engines": { @@ -2905,12 +2310,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.21.tgz", - "integrity": "sha512-4zxKZOnf0rfh6myXLG7a6YZfQcxYDMBsWqANEjCX77H5gPdK+GHZuDrxK6sjFvRBv4liYCrNjo7HJ4DpPoT0zA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz", + "integrity": "sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "@docusaurus/core": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "tslib": "^2.4.0" }, "engines": { @@ -2922,15 +2328,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.21.tgz", - "integrity": "sha512-/ynWbcXZXcYZ6sT2X6vAJbnfqcPxwdGEybd0rcRZi4gBHq6adMofYI25AqELmnbBDxt0If+vlAeUHFRG5ueP7Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz", + "integrity": "sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw==", + "dependencies": { + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" @@ -2944,21 +2351,22 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.21.tgz", - "integrity": "sha512-KvBnIUu7y69pNTJ9UhX6SdNlK6prR//J3L4rhN897tb8xx04xHHILlPXko2Il+C3Xzgh3OCgyvkoz9K6YlFTDw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/plugin-content-blog": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/plugin-content-pages": "2.0.0-beta.21", - "@docusaurus/plugin-debug": "2.0.0-beta.21", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.21", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.21", - "@docusaurus/plugin-sitemap": "2.0.0-beta.21", - "@docusaurus/theme-classic": "2.0.0-beta.21", - "@docusaurus/theme-common": "2.0.0-beta.21", - "@docusaurus/theme-search-algolia": "2.0.0-beta.21" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz", + "integrity": "sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w==", + "dependencies": { + "@docusaurus/core": "2.1.0", + "@docusaurus/plugin-content-blog": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/plugin-content-pages": "2.1.0", + "@docusaurus/plugin-debug": "2.1.0", + "@docusaurus/plugin-google-analytics": "2.1.0", + "@docusaurus/plugin-google-gtag": "2.1.0", + "@docusaurus/plugin-sitemap": "2.1.0", + "@docusaurus/theme-classic": "2.1.0", + "@docusaurus/theme-common": "2.1.0", + "@docusaurus/theme-search-algolia": "2.1.0", + "@docusaurus/types": "2.1.0" }, "engines": { "node": ">=16.14" @@ -2981,31 +2389,35 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.21.tgz", - "integrity": "sha512-Ge0WNdTefD0VDQfaIMRRWa8tWMG9+8/OlBRd5MK88/TZfqdBq7b/gnCSaalQlvZwwkj6notkKhHx72+MKwWUJA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/plugin-content-blog": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/plugin-content-pages": "2.0.0-beta.21", - "@docusaurus/theme-common": "2.0.0-beta.21", - "@docusaurus/theme-translations": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz", + "integrity": "sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng==", + "dependencies": { + "@docusaurus/core": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/module-type-aliases": "2.1.0", + "@docusaurus/plugin-content-blog": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/plugin-content-pages": "2.1.0", + "@docusaurus/theme-common": "2.1.0", + "@docusaurus/theme-translations": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "@mdx-js/react": "^1.6.22", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.39", + "infima": "0.2.0-alpha.42", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.3", + "prism-react-renderer": "^1.3.5", "prismjs": "^1.28.0", "react-router-dom": "^5.3.3", "rtlcss": "^3.5.0", - "tslib": "^2.4.0" + "tslib": "^2.4.0", + "utility-types": "^3.10.0" }, "engines": { "node": ">=16.14" @@ -3016,17 +2428,22 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.21.tgz", - "integrity": "sha512-fTKoTLRfjuFG6c3iwnVjIIOensxWMgdBKLfyE5iih3Lq7tQgkE7NyTGG9BKLrnTJ7cAD2UXdXM9xbB7tBf1qzg==", - "dependencies": { - "@docusaurus/module-type-aliases": "2.0.0-beta.21", - "@docusaurus/plugin-content-blog": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/plugin-content-pages": "2.0.0-beta.21", - "clsx": "^1.1.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.1.0.tgz", + "integrity": "sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag==", + "dependencies": { + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/module-type-aliases": "2.1.0", + "@docusaurus/plugin-content-blog": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/plugin-content-pages": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.3", + "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", "utility-types": "^3.10.0" }, @@ -3039,21 +2456,21 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.21.tgz", - "integrity": "sha512-T1jKT8MVSSfnztSqeebUOpWHPoHKtwDXtKYE0xC99JWoZ+mMfv8AFhVSoSddn54jLJjV36mxg841eHQIySMCpQ==", - "dependencies": { - "@docsearch/react": "^3.1.0", - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/theme-common": "2.0.0-beta.21", - "@docusaurus/theme-translations": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz", + "integrity": "sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg==", + "dependencies": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/theme-common": "2.1.0", + "@docusaurus/theme-translations": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.8.2", - "clsx": "^1.1.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", "eta": "^1.12.3", "fs-extra": "^10.1.0", "lodash": "^4.17.21", @@ -3069,9 +2486,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.21.tgz", - "integrity": "sha512-dLVT9OIIBs6MpzMb1bAy+C0DPJK3e3DNctG+ES0EP45gzEqQxzs4IsghpT+QDaOsuhNnAlosgJpFWX3rqxF9xA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz", + "integrity": "sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg==", "dependencies": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" @@ -3081,16 +2498,17 @@ } }, "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.21.tgz", - "integrity": "sha512-/GH6Npmq81eQfMC/ikS00QSv9jNyO1RXEpNSx5GLA3sFX8Iib26g2YI2zqNplM8nyxzZ2jVBuvUoeODTIbTchQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.1.0.tgz", + "integrity": "sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ==", "dependencies": { - "commander": "^5.1.0", - "history": "^4.9.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", "joi": "^17.6.0", "react-helmet-async": "^1.3.0", "utility-types": "^3.10.0", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-merge": "^5.8.0" }, "peerDependencies": { @@ -3099,11 +2517,11 @@ } }, "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz", - "integrity": "sha512-M/BrVCDmmUPZLxtiStBgzpQ4I5hqkggcpnQmEN+LbvbohjbtVnnnZQ0vptIziv1w8jry/woY+ePsyOO7O/yeLQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.1.0.tgz", + "integrity": "sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A==", "dependencies": { - "@docusaurus/logger": "2.0.0-beta.21", + "@docusaurus/logger": "2.1.0", "@svgr/webpack": "^6.2.1", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", @@ -3117,30 +2535,46 @@ "shelljs": "^0.8.5", "tslib": "^2.4.0", "url-loader": "^4.1.1", - "webpack": "^5.72.1" + "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } } }, "node_modules/@docusaurus/utils-common": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.21.tgz", - "integrity": "sha512-5w+6KQuJb6pUR2M8xyVuTMvO5NFQm/p8TOTDFTx60wt3p0P1rRX00v6FYsD4PK6pgmuoKjt2+Ls8dtSXc4qFpQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.1.0.tgz", + "integrity": "sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg==", "dependencies": { "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz", - "integrity": "sha512-6NG1FHTRjv1MFzqW//292z7uCs77vntpWEbZBHk3n67aB1HoMn5SOwjLPtRDjbCgn6HCHFmdiJr6euCbjhYolg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz", + "integrity": "sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ==", "dependencies": { - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", + "@docusaurus/logger": "2.1.0", + "@docusaurus/utils": "2.1.0", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -3150,38 +2584,32 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "devOptional": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "devOptional": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -3193,56 +2621,55 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "devOptional": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "engines": { + "node": ">=10" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", - "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", + "version": "1.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", + "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" + "@fortawesome/fontawesome-common-types": "^0.2.36" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", + "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.35" + "@fortawesome/fontawesome-common-types": "^0.2.36" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.18.tgz", - "integrity": "sha512-RwLIB4TZw0M9gvy5u+TusAA0afbwM4JQIimNH/j3ygd6aIvYPQLqXMhC9ErY26J23rDPyDZldIfPq/HpTTJ/tQ==", + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz", + "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", "dependencies": { "prop-types": "^15.8.1" }, @@ -3251,20 +2678,10 @@ "react": ">=16.x" } }, - "node_modules/@fortawesome/react-fontawesome/node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "node_modules/@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { "version": "5.1.0", @@ -3275,12 +2692,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", + "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", "devOptional": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, @@ -3288,37 +2705,76 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "devOptional": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "devOptional": true }, + "node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", + "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dependencies": { "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" } @@ -3332,18 +2788,31 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@jsdevtools/ono": { @@ -3417,6 +2886,17 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@mdx-js/mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -3425,6 +2905,59 @@ "semver": "bin/semver" } }, + "node_modules/@mdx-js/mdx/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", @@ -3478,6 +3011,26 @@ "node": ">= 8" } }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", @@ -3501,6 +3054,11 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -3510,37 +3068,22 @@ } }, "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.4.tgz", - "integrity": "sha512-FvMavoWEIePps6/JwGCOLYKCRhuwIHhMtmbKpBFgzNkxwpa/569LfTkrbRk1m1I3n+ezJK4on9E1A6cjuZmD9g==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", "eval": "^0.1.8", - "webpack-sources": "^1.4.3" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/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==", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "node": ">=14" } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==", "engines": { "node": ">=10" }, @@ -3553,9 +3096,9 @@ } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", "engines": { "node": ">=10" }, @@ -3568,9 +3111,9 @@ } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", - "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", "engines": { "node": ">=10" }, @@ -3583,9 +3126,9 @@ } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", - "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz", + "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==", "engines": { "node": ">=10" }, @@ -3598,9 +3141,9 @@ } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", - "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz", + "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==", "engines": { "node": ">=10" }, @@ -3613,9 +3156,9 @@ } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", - "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz", + "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==", "engines": { "node": ">=10" }, @@ -3628,9 +3171,9 @@ } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", - "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz", + "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==", "engines": { "node": ">=10" }, @@ -3643,9 +3186,9 @@ } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", - "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz", + "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==", "engines": { "node": ">=12" }, @@ -3658,18 +3201,18 @@ } }, "node_modules/@svgr/babel-preset": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", - "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz", + "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", - "@svgr/babel-plugin-transform-svg-component": "^6.2.0" + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0", + "@svgr/babel-plugin-transform-svg-component": "^6.5.0" }, "engines": { "node": ">=10" @@ -3683,11 +3226,13 @@ } }, "node_modules/@svgr/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", - "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz", + "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==", "dependencies": { - "@svgr/plugin-jsx": "^6.2.1", + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.5.0", + "@svgr/plugin-jsx": "^6.5.0", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" }, @@ -3700,12 +3245,12 @@ } }, "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", - "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz", + "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==", "dependencies": { - "@babel/types": "^7.15.6", - "entities": "^3.0.1" + "@babel/types": "^7.18.4", + "entities": "^4.3.0" }, "engines": { "node": ">=10" @@ -3715,26 +3260,15 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/@svgr/plugin-jsx": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", - "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz", + "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==", "dependencies": { - "@babel/core": "^7.15.5", - "@svgr/babel-preset": "^6.2.0", - "@svgr/hast-util-to-babel-ast": "^6.2.1", - "svg-parser": "^2.0.2" + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.5.0", + "@svgr/hast-util-to-babel-ast": "^6.5.0", + "svg-parser": "^2.0.4" }, "engines": { "node": ">=10" @@ -3748,13 +3282,13 @@ } }, "node_modules/@svgr/plugin-svgo": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", - "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz", + "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==", "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", - "svgo": "^2.5.0" + "svgo": "^2.8.0" }, "engines": { "node": ">=10" @@ -3768,18 +3302,18 @@ } }, "node_modules/@svgr/webpack": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz", - "integrity": "sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.0.tgz", + "integrity": "sha512-rM/Z4pwMhqvAXEHoHIlE4SeTb0ToQNmJuBdiHwhP2ZtywyX6XqrgCv2WX7K/UCgNYJgYbekuylgyjnuLUHTcZQ==", "dependencies": { - "@babel/core": "^7.15.5", - "@babel/plugin-transform-react-constant-elements": "^7.14.5", - "@babel/preset-env": "^7.15.6", - "@babel/preset-react": "^7.14.5", - "@babel/preset-typescript": "^7.15.0", - "@svgr/core": "^6.2.1", - "@svgr/plugin-jsx": "^6.2.1", - "@svgr/plugin-svgo": "^6.2.0" + "@babel/core": "^7.18.5", + "@babel/plugin-transform-react-constant-elements": "^7.17.12", + "@babel/preset-env": "^7.18.2", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", + "@svgr/core": "^6.5.0", + "@svgr/plugin-jsx": "^6.5.0", + "@svgr/plugin-svgo": "^6.5.0" }, "engines": { "node": ">=10" @@ -3809,11 +3343,20 @@ } }, "node_modules/@tsconfig/docusaurus": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.5.tgz", - "integrity": "sha512-KM/TuJa9fugo67dTGx+ktIqf3fVc077J6jwHu845Hex4EQf7LABlNonP/mohDKT0cmncdtlYVHHF74xR/YpThg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.6.tgz", + "integrity": "sha512-1QxDaP54hpzM6bq9E+yFEo4F9WbWHhsDe4vktZXF/iDlc9FqGr9qlg+3X/nuKQXx8QxHV7ue8NXFazzajsxFBA==", "dev": true }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -3848,33 +3391,51 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.8.tgz", + "integrity": "sha512-zUCKQI1bUCTi+0kQs5ZQzQ/XILWRLIlh15FXWNykJ+NG3TMKMVvwwC6GP3DR1Ylga15fB7iAExSzc4PNlR5i3w==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -3883,9 +3444,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3893,9 +3454,9 @@ } }, "node_modules/@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -3911,9 +3472,9 @@ } }, "node_modules/@types/history": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", - "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==" + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", @@ -3928,46 +3489,73 @@ "@types/node": "*" } }, - "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, "node_modules/@types/node": { - "version": "17.0.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.38.tgz", - "integrity": "sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g==" + "version": "18.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.5.tgz", + "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3980,15 +3568,15 @@ "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -4001,9 +3589,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", - "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "version": "17.0.51", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.51.tgz", + "integrity": "sha512-YMddzAE+nSH04BiTJ5GydTxk0/3hckqyuOclg0s6zQYj/XzfRVNzHZAFwZb5SCSavkzTYUtcq/gwjLnvt2Y4cg==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4020,11 +3608,11 @@ } }, "node_modules/@types/react-router": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz", - "integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==", + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", + "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", "dependencies": { - "@types/history": "*", + "@types/history": "^4.7.11", "@types/react": "*" } }, @@ -4038,17 +3626,12 @@ "@types/react-router": "*" } }, - "node_modules/@types/react-router-config/node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/react-router-dom": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", - "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", "dependencies": { - "@types/history": "*", + "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router": "*" } @@ -4067,9 +3650,9 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/serve-index": { "version": "1.9.1", @@ -4080,11 +3663,11 @@ } }, "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "dependencies": { - "@types/mime": "^1", + "@types/mime": "*", "@types/node": "*" } }, @@ -4097,9 +3680,9 @@ } }, "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "node_modules/@types/ws": { "version": "8.5.3", @@ -4109,6 +3692,19 @@ "@types/node": "*" } }, + "node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4262,10 +3858,29 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "bin": { "acorn": "bin/acorn" }, @@ -4299,11 +3914,11 @@ } }, "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", "engines": { - "node": ">= 0.12.0" + "node": ">= 10.0.0" } }, "node_modules/aggregate-error": { @@ -4378,35 +3993,35 @@ } }, "node_modules/algoliasearch": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.13.1.tgz", - "integrity": "sha512-dtHUSE0caWTCE7liE1xaL+19AFf6kWEcyn76uhcitWpntqvicFHXKFoZe5JJcv9whQOTRM6+B8qJz6sFj+rDJA==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.13.1", - "@algolia/cache-common": "4.13.1", - "@algolia/cache-in-memory": "4.13.1", - "@algolia/client-account": "4.13.1", - "@algolia/client-analytics": "4.13.1", - "@algolia/client-common": "4.13.1", - "@algolia/client-personalization": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/logger-console": "4.13.1", - "@algolia/requester-browser-xhr": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/requester-node-http": "4.13.1", - "@algolia/transporter": "4.13.1" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", + "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.14.2", + "@algolia/cache-common": "4.14.2", + "@algolia/cache-in-memory": "4.14.2", + "@algolia/client-account": "4.14.2", + "@algolia/client-analytics": "4.14.2", + "@algolia/client-common": "4.14.2", + "@algolia/client-personalization": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/logger-console": "4.14.2", + "@algolia/requester-browser-xhr": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/requester-node-http": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/algoliasearch-helper": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz", - "integrity": "sha512-AXxiF0zT9oYwl8ZBgU/eRXvfYhz7cBA5YrLPlw9inZHdaYF0QEya/f1Zp1mPYMXc1v6VkHwBq4pk6/vayBLICg==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", + "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", "dependencies": { "@algolia/events": "^4.0.1" }, "peerDependencies": { - "algoliasearch": ">= 3.1 < 5" + "algoliasearch": ">= 3.1 < 6" } }, "node_modules/ansi-align": { @@ -4417,13 +4032,22 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "devOptional": true, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/ansi-html-community": { @@ -4462,7 +4086,7 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, "node_modules/anymatch": { @@ -4478,9 +4102,9 @@ } }, "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", @@ -4511,22 +4135,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-includes/node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -4558,15 +4166,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4576,9 +4175,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", "funding": [ { "type": "opencollective", @@ -4590,8 +4189,8 @@ } ], "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -4633,23 +4232,6 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/babel-plugin-apply-mdx-type-prop": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", @@ -4666,6 +4248,11 @@ "@babel/core": "^7.11.6" } }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -4686,13 +4273,18 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -4708,23 +4300,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -4770,15 +4362,10 @@ "node": ">=8" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -4788,7 +4375,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -4820,20 +4407,20 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.12.tgz", - "integrity": "sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.4" + "multicast-dns": "^7.2.5" } }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boxen": { "version": "6.2.1", @@ -4856,58 +4443,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.12.2.tgz", - "integrity": "sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4929,9 +4464,9 @@ } }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "funding": [ { "type": "opencollective", @@ -4943,11 +4478,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -4957,14 +4491,14 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } @@ -5031,7 +4565,7 @@ "node_modules/call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", "dev": true }, "node_modules/callsites": { @@ -5082,9 +4616,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001346", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001346.tgz", - "integrity": "sha512-q6ibZUO2t88QCIPayP/euuDREq+aMAxFE5S70PkrLh0iTDj/zEhgvJRKC2+CvXY6EWc6oQwUR48lL5vCW6jiXQ==", + "version": "1.0.30001425", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz", + "integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==", "funding": [ { "type": "opencollective", @@ -5120,17 +4654,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", @@ -5141,9 +4664,9 @@ } }, "node_modules/character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, "funding": { "type": "github", @@ -5169,29 +4692,23 @@ } }, "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, "node_modules/cheerio-select": { @@ -5210,198 +4727,61 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/cheerio-select/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" } }, - "node_modules/cheerio-select/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/ci-info": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "node_modules/clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/cheerio-select/node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/cheerio-select/node_modules/entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/cheerio/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/cheerio/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/cheerio/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/cheerio/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/chrome-trace-event/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "dependencies": { - "source-map": "~0.6.0" + "source-map": "~0.6.0" }, "engines": { "node": ">= 10.0" } }, - "node_modules/clean-css/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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -5422,32 +4802,25 @@ } }, "node_modules/cli-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", - "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", "dev": true, "dependencies": { - "ansi-regex": "^2.1.1", "d": "^1.0.1", - "es5-ext": "^0.10.51", + "es5-ext": "^0.10.61", "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", + "memoizee": "^0.4.15", "timers-ext": "^0.1.7" - } - }, - "node_modules/cli-color/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dependencies": { "string-width": "^4.2.0" }, @@ -5458,6 +4831,24 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -5472,17 +4863,20 @@ } }, "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dependencies": { "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { "node": ">=6" } @@ -5513,14 +4907,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "node_modules/combine-promises": { "version": "1.1.0", @@ -5563,6 +4957,14 @@ "node": ">= 0.6" } }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/compression": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", @@ -5593,10 +4995,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/compression/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==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/configstore": { "version": "5.0.1", @@ -5615,9 +5022,9 @@ } }, "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "engines": { "node": ">=0.8" } @@ -5630,7 +5037,7 @@ "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "engines": { "node": ">= 0.6" } @@ -5644,12 +5051,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "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==" }, "node_modules/cookie": { "version": "0.5.0", @@ -5676,9 +5080,9 @@ } }, "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz", + "integrity": "sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==", "dependencies": { "toggle-selection": "^1.0.6" } @@ -5744,9 +5148,9 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -5761,14 +5165,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -5804,9 +5200,9 @@ } }, "node_modules/core-js": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.8.tgz", - "integrity": "sha512-UoGQ/cfzGYIuiq6Z7vWL1HfkE9U9IZ4Ub+0XSiJTCzvbZzgPA69oDF2f+lgJ6dFFLEdjW5O6svvoKzXX23xFkA==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", + "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5814,30 +5210,21 @@ } }, "node_modules/core-js-compat": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.8.tgz", - "integrity": "sha512-pQnwg4xtuvc2Bs/5zYQPaEYYSuTxsF7LBWF0SvnVhthZo/Qe+rJpcEekrdNK5DWwDJ0gv0oI9NNX5Mppdy0ctg==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", + "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", "dependencies": { - "browserslist": "^4.20.3", - "semver": "7.0.0" + "browserslist": "^4.21.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-js-pure": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.8.tgz", - "integrity": "sha512-bOxbZIy9S5n4OVH63XaLVXZ49QKicjowDx/UELyJ68vxfCRpYsbyh/WNZNfEfAk+ekA8vSjt+gCDpvh672bc3w==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", + "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5894,9 +5281,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", "engines": { "node": "^10 || ^12 || >=14" }, @@ -5930,13 +5317,13 @@ } }, "node_modules/css-minimizer-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", "dependencies": { "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" @@ -5955,6 +5342,9 @@ "@parcel/css": { "optional": true }, + "@swc/css": { + "optional": true + }, "clean-css": { "optional": true }, @@ -5963,6 +5353,9 @@ }, "esbuild": { "optional": true + }, + "lightningcss": { + "optional": true } } }, @@ -6015,23 +5408,15 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/css-minimizer-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { @@ -6050,14 +5435,6 @@ "node": ">=8.0.0" } }, - "node_modules/css-tree/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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -6081,11 +5458,11 @@ } }, "node_modules/cssnano": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.10.tgz", - "integrity": "sha512-ACpnRgDg4m6CZD/+8SgnLcGCgy6DDGdkMbOawwdvVxNietTNLe/MtWcenp6qT0PRt5wzhGl6/cjMWCdhKXC9QA==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", "dependencies": { - "cssnano-preset-default": "^5.2.10", + "cssnano-preset-default": "^5.2.12", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -6101,12 +5478,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.6.tgz", - "integrity": "sha512-OZHsytu16eStRVrIY3wmPQqhJMaI0+O3raU4JHoKV3uuQYEeQek/FJVUIvYXD55hWR6OjCMyKYNRDw+k3/xgUw==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz", + "integrity": "sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==", "dependencies": { "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.10", + "cssnano-preset-default": "^5.2.12", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -6120,11 +5497,11 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.10.tgz", - "integrity": "sha512-H8TJRhTjBKVOPltp9vr9El9I+IfYsOMhmXdK0LwdvwJcxYX9oWkY7ctacWusgPWAgQq1vt/WO8v+uqpfLnM7QA==", + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", "dependencies": { - "css-declaration-sorter": "^6.2.2", + "css-declaration-sorter": "^6.3.0", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", @@ -6133,7 +5510,7 @@ "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.5", + "postcss-merge-longhand": "^5.1.6", "postcss-merge-rules": "^5.1.2", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", @@ -6141,14 +5518,14 @@ "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.0", - "postcss-normalize-repeat-style": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", "postcss-normalize-unicode": "^5.1.0", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.1", + "postcss-ordered-values": "^5.1.3", "postcss-reduce-initial": "^5.1.0", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", @@ -6184,9 +5561,9 @@ } }, "node_modules/csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/d": { "version": "1.0.1", @@ -6199,9 +5576,9 @@ } }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -6214,10 +5591,33 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decode-named-character-reference/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { "mimic-response": "^1.0.0" }, @@ -6234,9 +5634,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "devOptional": true }, "node_modules/deepmerge": { @@ -6272,14 +5672,18 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/del": { @@ -6311,6 +5715,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -6338,19 +5751,16 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dependencies": { "address": "^1.0.1", - "debug": "^2.6.0" + "debug": "4" }, "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" } }, "node_modules/detect-port-alt": { @@ -6382,19 +5792,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" } }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6412,9 +5818,9 @@ "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6443,13 +5849,13 @@ } }, "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" @@ -6467,11 +5873,11 @@ ] }, "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -6481,13 +5887,13 @@ } }, "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -6527,9 +5933,9 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" }, "node_modules/eastasianwidth": { "version": "0.2.0", @@ -6542,9 +5948,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.144", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", - "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -6584,22 +5990,25 @@ "once": "^1.4.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "devOptional": true, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dependencies": { - "ansi-colors": "^4.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8.6" + "node": ">=10.13.0" } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -6613,31 +6022,32 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -6649,18 +6059,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-abstract/node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -6693,20 +6091,24 @@ } }, "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, + "hasInstallScript": true, "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "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": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "dependencies": { "d": "1", @@ -6755,7 +6157,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -6769,57 +6171,56 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", + "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", "devOptional": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6838,216 +6239,539 @@ } }, "node_modules/eslint-mdx": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.17.0.tgz", - "integrity": "sha512-O8+JRfwCzpoR2P6zUI1GDAAM/bsuzcoBS1ArvpQrgQO/E2Km0vBmM15ukiJxZ+YUh5d+qDlrqha0fZB50MojJQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.0.5.tgz", + "integrity": "sha512-1ZzcJwJNfladtuK+uuG/MdC0idc1e3d1vCI2STOq/pLcJBGuao2biWh90vEh2M93zDiNoHJGUIU7UAxupiiHFw==", "dev": true, "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "cosmiconfig": "^7.0.1", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "tslib": "^2.3.1", - "unified": "^9.2.2" + "espree": "^9.4.0", + "estree-util-visit": "^1.2.0", + "remark-mdx": "^2.1.3", + "remark-parse": "^10.0.1", + "remark-stringify": "^10.0.2", + "synckit": "^0.8.4", + "tslib": "^2.4.0", + "unified": "^10.1.2", + "unist-util-visit": "^4.1.1", + "uvu": "^0.5.6", + "vfile": "^5.3.4" }, "engines": { - "node": ">=10.0.0" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { - "eslint": ">=5.0.0" + "eslint": ">=8.0.0" } }, - "node_modules/eslint-mdx/node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "node_modules/eslint-mdx/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-mdx/node_modules/mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", "dev": true, "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-markdown": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz", - "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", + "node_modules/eslint-mdx/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-mdx": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.17.0.tgz", - "integrity": "sha512-Kicizy+fbfsB2UxTDXP92qTtFqITApu4v4DRQUfXMoPwBHeQRvZnaEtXu2S9aia51GYRYsMSqUvoPPih/5oB+g==", + "node_modules/eslint-mdx/node_modules/micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/eslint-mdx/node_modules/remark-mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", "dev": true, "dependencies": { - "eslint-mdx": "^1.17.0", - "eslint-plugin-markdown": "^2.2.1", - "synckit": "^0.4.1", - "tslib": "^2.3.1", - "vfile": "^4.2.1" - }, - "engines": { - "node": ">=10.0.0" + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-react": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", + "node_modules/eslint-mdx/node_modules/remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { + "node_modules/eslint-mdx/node_modules/trough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-mdx/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "dev": true, - "engines": { - "node": ">=4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/eslint-mdx/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@types/unist": "^2.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/eslint-mdx/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "dev": true, "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "node_modules/eslint-mdx/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/eslint-plugin-markdown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", + "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "mdast-util-from-markdown": "^0.8.5" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "devOptional": true, + "node_modules/eslint-plugin-mdx": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.0.5.tgz", + "integrity": "sha512-j2xN97jSlc5IoH94rJTHqYMztl46+hHzyC8Zqjx+OI1Rvv33isyf8xSSBHN6f0z8IJmgPgGsb/fH90JbvKplXg==", + "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-mdx": "^2.0.5", + "eslint-plugin-markdown": "^3.0.0", + "remark-mdx": "^2.1.3", + "remark-parse": "^10.0.1", + "remark-stringify": "^10.0.2", + "tslib": "^2.4.0", + "unified": "^10.1.2", + "vfile": "^5.3.4" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=8.0.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "devOptional": true, + "node_modules/eslint-plugin-mdx/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "dev": true, + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-visitor-keys": { + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "devOptional": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "devOptional": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -7056,28 +6780,31 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "devOptional": true, - "dependencies": { - "@babel/highlight": "^7.10.4" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "devOptional": true, "dependencies": { - "sprintf-js": "~1.0.2" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/eslint/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -7089,52 +6816,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "devOptional": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "engines": { + "node": ">=10" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "devOptional": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "devOptional": true, - "engines": { - "node": ">=4" + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -7161,15 +6869,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "devOptional": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -7181,20 +6880,36 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" + "node_modules/estree-util-is-identifier-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", + "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", + "integrity": "sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/esutils": { @@ -7239,7 +6954,7 @@ "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, "dependencies": { "d": "1", @@ -7293,13 +7008,13 @@ } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -7318,7 +7033,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -7375,38 +7090,19 @@ "node": ">= 0.6" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "dependencies": { - "type": "^2.0.0" + "type": "^2.7.2" } }, "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true }, "node_modules/extend": { @@ -7431,9 +7127,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7453,13 +7149,13 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "devOptional": true }, "node_modules/fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dependencies": { "punycode": "^1.3.2" } @@ -7552,6 +7248,23 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/filesize": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", @@ -7618,15 +7331,18 @@ } }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat-cache": { @@ -7643,9 +7359,9 @@ } }, "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "devOptional": true }, "node_modules/flux": { @@ -7661,9 +7377,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", @@ -7820,7 +7536,20 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.1", @@ -7845,12 +7574,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "devOptional": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -7869,13 +7592,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7926,19 +7649,19 @@ } }, "node_modules/github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -8045,6 +7768,12 @@ "node": ">=4" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8064,13 +7793,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true }, "node_modules/got": { "version": "9.6.0", @@ -8094,9 +7821,15 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "devOptional": true }, "node_modules/gray-matter": { "version": "4.0.3", @@ -8183,7 +7916,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -8192,9 +7924,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -8260,6 +7992,34 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-from-parse5/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-parse-selector": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", @@ -8290,6 +8050,39 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-raw/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-parse5": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", @@ -8381,6 +8174,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/hpack.js/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==" + }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -8465,73 +8263,23 @@ } }, "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] - }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/htmlparser2/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/htmlparser2/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/htmlparser2/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + ], "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -8558,9 +8306,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -8640,18 +8388,17 @@ } }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "devOptional": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { "node": ">= 4" } }, "node_modules/image-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", - "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "dependencies": { "queue": "6.0.2" }, @@ -8659,13 +8406,13 @@ "image-size": "bin/image-size.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, "node_modules/immer": { - "version": "9.0.14", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.14.tgz", - "integrity": "sha512-ubBeqQutOSLIFCUBN03jGeOS6a3DoYlSYwYJTa+gSKEZKU5redJIqkIdZ3JVv/4RZpfcXdAWH5zCNLWPRv2WDw==", + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -8689,7 +8436,7 @@ "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "engines": { "node": ">=4" } @@ -8697,7 +8444,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } @@ -8711,9 +8458,9 @@ } }, "node_modules/infima": { - "version": "0.2.0-alpha.39", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.39.tgz", - "integrity": "sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw==", + "version": "0.2.0-alpha.42", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", "engines": { "node": ">=12" } @@ -8721,7 +8468,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8789,15 +8536,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", @@ -8814,7 +8552,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -8878,9 +8616,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -8900,10 +8638,15 @@ "is-ci": "bin.js" } }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dependencies": { "has": "^1.0.3" }, @@ -8960,7 +8703,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -9191,7 +8934,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-weakref": { "version": "1.0.2", @@ -9242,32 +8985,49 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, + "node_modules/jest-util": { + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz", + "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==", + "dependencies": { + "@jest/types": "^29.2.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.1.tgz", + "integrity": "sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==", "dependencies": { "@types/node": "*", + "jest-util": "^29.2.1", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -9285,9 +9045,9 @@ } }, "node_modules/joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "version": "17.6.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.4.tgz", + "integrity": "sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -9296,6 +9056,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "devOptional": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9326,7 +9092,7 @@ "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -9334,12 +9100,12 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-uxU9Ix+MVszvCTvBucQiIcNEny3oAEFg7EQHSZw2bquCCuqUqEPEczIdv/Uqo1Zv4/wDPZqOI+ulrMk1ncMtjQ==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", + "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", "dev": true, "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.7" + "@apidevtools/json-schema-ref-parser": "9.0.9" }, "engines": { "node": ">=10" @@ -9374,18 +9140,6 @@ "node": ">=10.0.0" } }, - "node_modules/json-schema-to-typescript/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -9394,13 +9148,13 @@ "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "devOptional": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "node_modules/json5": { @@ -9426,13 +9180,13 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", - "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "object.assign": "^4.1.2" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" }, "engines": { "node": ">=4.0" @@ -9503,30 +9257,30 @@ } }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "engines": { "node": ">=10" } }, "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz", + "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -9537,14 +9291,17 @@ } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -9552,22 +9309,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "devOptional": true - }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -9576,38 +9317,13 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -9616,32 +9332,7 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "devOptional": true }, "node_modules/lodash.uniq": { @@ -9650,9 +9341,9 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", "dev": true, "funding": { "type": "github", @@ -9700,7 +9391,7 @@ "node_modules/lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", "dev": true, "dependencies": { "es5-ext": "~0.10.2" @@ -9737,19 +9428,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", @@ -9762,19 +9440,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "dev": true, - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", @@ -9804,115 +9469,76 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "node_modules/mdast-util-mdx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", + "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", + "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "node_modules/mdast-util-mdx-expression": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.1.tgz", + "integrity": "sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz", - "integrity": "sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA==", + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, "dependencies": { - "fs-monkey": "1.0.3" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" }, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "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" - } - }, - "node_modules/memoizee/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 - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "node_modules/mdast-util-mdx-expression/node_modules/micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", "dev": true, "funding": [ { @@ -9925,5875 +9551,7159 @@ } ], "dependencies": { + "@types/debug": "^4.0.0", "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/mdast-util-mdx-jsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.0.tgz", + "integrity": "sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==", + "dev": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" + "node_modules/mdast-util-mdx-jsx/node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" + "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", - "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", + "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-remove-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", + "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/unified" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", - "engines": { - "node": ">=10" + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.0.tgz", + "integrity": "sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" }, - "bin": { - "multicast-dns": "cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", "dev": true, - "bin": { - "mustache": "bin/mustache" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "devOptional": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" + "node_modules/mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, "dependencies": { - "lodash": "^4.17.21" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" + "node_modules/mdast-util-to-markdown/node_modules/zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" - }, - "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "node_modules/memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", "dependencies": { - "boolbase": "^1.0.0" + "fs-monkey": "^1.0.3" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "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" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "node_modules/object-inspect": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", - "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "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==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">= 0.4" + "node": ">= 8" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "node_modules/micromark-core-commonmark": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", + "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", + "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.hasown/node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", + "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "micromark-util-types": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", + "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", + "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "dev": true, "dependencies": { - "ee-first": "1.1.1" + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } + "node_modules/micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/micromark-factory-label": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", + "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "wrappy": "1" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", + "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "node_modules/micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" + "node_modules/micromark-factory-title": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", + "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "devOptional": true, + "node_modules/micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-cancelable": { + "node_modules/micromark-util-character": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" + "node_modules/micromark-util-decode-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", + "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" + "node_modules/micromark-util-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", + "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.0.tgz", + "integrity": "sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" } }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/micromark-util-events-to-acorn/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/micromark-util-html-tag-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-types": "^1.0.0" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/micromark-util-sanitize-uri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", + "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/micromark-util-subtokenize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", + "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + "node_modules/micromark-util-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", + "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "node_modules/micromark-util-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", + "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=8.6" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=4" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dependencies": { - "entities": "^4.3.0" + "mime-db": "~1.33.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "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==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "node_modules/mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "schema-utils": "^4.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { - "find-up": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "find-up": "^3.0.0" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { - "locate-path": "^3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=10" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "peerDependencies": { - "postcss": "^8.2.2" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "dependencies": { - "browserslist": "^4.20.3", - "postcss-value-parser": "^4.2.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "devOptional": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.6" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "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 + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "4.x || >=6.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 6.13.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "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==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "path-key": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/postcss-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.0.tgz", - "integrity": "sha512-IDyttebFzTSY6DI24KuHUcBjbAev1i+RyICoPEWcAstZsj03r533uMXtDn506l6/wlsRYiS5XBdx7TpccCsyUg==", + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">= 10.13.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.4" } }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.5.tgz", - "integrity": "sha512-NOG1grw9wIO+60arKa2YYsrbgvP6tp+jqc7+ZD5/MalIw234ooH2C6KlR6FEn4yle7GqZoBxSK1mLBE9KPur6w==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.4" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "ee-first": "1.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 0.8" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "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==", "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "wrappy": "1" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dependencies": { - "icss-utils": "^5.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "devOptional": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8.0" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "callsites": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-sort-media-queries": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz", - "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "sort-css-media-queries": "2.0.4" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=10.0.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.4.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "entities": "^4.4.0" }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "domhandler": "^5.0.2", + "parse5": "^7.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/prebuild-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", - "dev": true, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dependencies": { - "debug": "^4.1.1", - "glob": "^7.1.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8.9.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "devOptional": true, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "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==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "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==" + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "isarray": "0.0.1" } }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/prism-react-renderer": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz", - "integrity": "sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", - "engines": { - "node": ">=6" - } - }, - "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==" + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "devOptional": true, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": ">=0.4.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { - "asap": "~2.0.3" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "xtend": "^4.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/pump": { + "node_modules/pkg-up/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "escape-goat": "^2.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "side-channel": "^1.0.4" + "p-try": "^2.0.0" }, "engines": { - "node": ">=0.6" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "inherits": "~2.0.3" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + ], "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "react": ">=16.3.1" + "postcss": "^8.2.15" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0" + "postcss": "^8.2.15" } }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "engines": { - "node": ">=14" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "node_modules/postcss-loader": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.7" + }, "engines": { - "node": ">= 12.13.0" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "dependencies": { - "p-locate": "^5.0.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/postcss-merge-longhand": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", "dependencies": { - "yocto-queue": "^0.1.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", "dependencies": { - "p-limit": "^3.0.2" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "17.0.2" + "postcss": "^8.2.15" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.2.15" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "node_modules/postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + "postcss": "^8.2.15" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dependencies": { - "@babel/runtime": "^7.10.3" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" + "postcss": "^8.2.15" } }, - "node_modules/react-router": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.3.tgz", - "integrity": "sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "react": ">=15" + "postcss": "^8.1.0" } }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dependencies": { - "@babel/runtime": "^7.1.2" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "react": ">=15", - "react-router": ">=5" + "postcss": "^8.1.0" } }, - "node_modules/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.3", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "react": ">=15" + "postcss": "^8.1.0" } }, - "node_modules/react-textarea-autosize": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", - "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" + "icss-utils": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.1.0" } }, - "node_modules/react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", - "dependencies": { - "clsx": "^1.1.1" + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" + "postcss": "^8.2.15" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dependencies": { - "picomatch": "^2.2.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dependencies": { - "resolve": "^1.1.6" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dependencies": { - "minimatch": "3.0.4" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dependencies": { - "regenerate": "^1.4.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "node_modules/postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", "dependencies": { - "@babel/runtime": "^7.8.4" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "dependencies": { - "rc": "^1.2.8" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/registry-url": { + "node_modules/postcss-reduce-initial": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", "dependencies": { - "rc": "^1.2.8" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dependencies": { - "jsesc": "~0.5.0" + "postcss-value-parser": "^4.2.0" }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "node_modules/postcss-sort-media-queries": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", + "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" + "sort-css-media-queries": "2.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" } }, - "node_modules/rehype-parse/node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/rehype-parse/node_modules/parse5": { + "node_modules/postcss-unique-selectors": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, "engines": { - "node": ">= 0.10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "node_modules/prebuild-webpack-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", + "dev": true, "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "debug": "^4.1.1", + "glob": "^7.1.5", + "minimatch": "^3.0.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.9.0" } }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "devOptional": true, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/remark-footnotes": { + "node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" } }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "node_modules/prettier": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=4" } }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node_modules/prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "peerDependencies": { + "react": ">=0.14.9" } }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" } }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "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==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "asap": "~2.0.3" } }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", - "dev": true, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, "engines": { - "node": ">=0.10" + "node": ">= 0.10" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { - "lowercase-keys": "^1.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "bin": { - "rtlcss": "bin/rtlcss.js" + "rc": "cli.js" } }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { - "p-locate": "^5.0.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "peerDependencies": { + "react": ">=16.3.1" + } + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-copy-to-clipboard": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "dependencies": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" } }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dependencies": { - "p-limit": "^3.0.2" + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { - "queue-microtask": "^1.2.2" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", "dependencies": { - "tslib": "^2.1.0" + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, - "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==" + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" } }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@babel/runtime": "^7.10.3" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10.13.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "react": ">=15" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "dependencies": { - "node-forge": "^1" + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", + "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/react-toastify": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", + "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", "dependencies": { - "lru-cache": "^6.0.0" + "clsx": "^1.1.1" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { - "semver": "^6.3.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=8" + "node": ">=8.10.0" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "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==", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "resolve": "^1.1.6" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.10" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { - "ms": "2.0.0" + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/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==" + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "node_modules/regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dependencies": { - "randombytes": "^2.1.0" + "@babel/runtime": "^7.8.4" } }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "devOptional": true, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/regexpu-core": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dependencies": { - "mime-db": "~1.33.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "rc": "1.2.8" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6.0.0" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dependencies": { - "ms": "2.0.0" + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" } }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "jsesc": "~0.5.0" }, - "engines": { - "node": ">= 0.6" + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.10" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" } }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { + "node_modules/remark-footnotes": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" }, - "engines": { - "node": ">= 10" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" + "@babel/helper-plugin-utils": "^7.10.4" }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" + "semver": "bin/semver" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/remark-mdx/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==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "devOptional": true, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "node_modules/remark-mdx/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sort-css-media-queries": { + "node_modules/remark-mdx/node_modules/vfile-message": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz", - "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==", - "engines": { - "node": ">= 6.3.0" + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "node_modules/remark-stringify": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", + "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", + "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/source-map-support/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==", + "node_modules/remark-stringify/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "node_modules/remark-stringify/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/remark-stringify/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/spdy-transport": { + "node_modules/renderkid": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/std-env": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.0.1.tgz", - "integrity": "sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { - "safe-buffer": "~5.2.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "url": "https://github.com/sponsors/fb55" } - ] - }, - "node_modules/string-replace-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", - "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", - "dev": true, + ], "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "peerDependencies": { - "webpack": "^5" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.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==", "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.matchall/node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { - "node": ">= 0.4" + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "rtlcss": "bin/rtlcss.js" } }, - "node_modules/string.prototype.trimend/node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "mri": "^1.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart/node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 8.9.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "dev": true, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=4" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "node-forge": "^1" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { - "ansi-regex": "^5.0.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" - } - }, - "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": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/strip-json-comments": { + "node_modules/semver-diff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ms": "2.0.0" } }, - "node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/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==" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" + "randombytes": "^2.1.0" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" } }, - "node_modules/synckit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.4.1.tgz", - "integrity": "sha512-ngUh0+s+DOqEc0sGnrLaeNjbXp0CWHjSGFBqPlQmQ+oN/OfoDoYDBXPh+b4qs1M5QTk5nuQ3AmVz9+2xiY/ldw==", - "dev": true, + "node_modules/serve-handler/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dependencies": { - "tslib": "^2.3.1", - "uuid": "^8.3.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "devOptional": true, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.8.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "devOptional": true, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "ms": "2.0.0" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "devOptional": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" - }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" + "node": ">= 0.6" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { - "thenify": ">= 3.1.0 < 4" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">=0.8" + "node": ">= 0.8.0" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/tiny-invariant": { + "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dependencies": { - "is-number": "^7.0.0" + "kind-of": "^6.0.2" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=8" } }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "node_modules/shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "devOptional": true, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dependencies": { - "prelude-ls": "^1.2.1" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 10" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, - "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "sitemap": "dist/cli.js" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.0.0", + "npm": ">=5.6.0" } }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, - "node_modules/unbox-primitive/node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", "engines": { - "node": ">=4" + "node": ">= 6.3.0" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.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==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "engines": { - "node": ">=4" + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dependencies": { - "crypto-random-string": "^2.0.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/std-env": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", + "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "node_modules/string-replace-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", + "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", + "dev": true, "dependencies": { - "unist-util-is": "^4.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "webpack": "^5" } }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "node_modules/string-replace-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, "dependencies": { - "unist-util-visit": "^2.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/webpack" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "@types/unist": "^2.0.2" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dev": true, "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, + "node_modules/stringify-entities/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dependencies": { - "string-width": "^4.0.0" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dependencies": { - "punycode": "^2.1.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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" } }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { - "node": ">= 10.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" + "inline-style-parser": "0.1.1" } }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "node_modules/stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "dependencies": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.2.15" } }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "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==", "engines": { - "node": ">= 4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, "bin": { - "uuid": "dist/bin/uuid" + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "devOptional": true - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">= 0.8" + "node": ">= 10" } }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "node_modules/svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "node_modules/svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "node_modules/svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": ">=10.13.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "node_modules/synckit": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", + "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://opencollective.com/unts" } }, - "node_modules/web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } }, - "node_modules/webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", + "node_modules/terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, "bin": { - "webpack": "bin/webpack.js" + "terser": "bin/terser" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, + "peerDependencies": { + "webpack": "^5.1.0" + }, "peerDependenciesMeta": { - "webpack-cli": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { "optional": true } } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", - "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "has-flag": "^4.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "ajv": "^8.8.2" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "any-promise": "^1.0.0" } }, - "node_modules/webpack-dev-server": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.1.tgz", - "integrity": "sha512-CTMfu2UMdR/4OOZVHRpdy84pNopOuigVIsRbGX3LVDMWNP8EUgC5mUBMErbwBlHTEX99ejZJpVqrir6EXAEajA==", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "thenify": ">= 3.1.0 < 4" }, "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">=0.8" } }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "es5-ext": "~0.10.46", + "next-tick": "1" } }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "globalyzer": "0.1.0", + "globrex": "^0.1.2" } }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=4" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", - "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">=6" } }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=8.0" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { - "node": ">=10.13.0" + "node": ">=0.6" } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "devOptional": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.8.0" } }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=12" + "node": ">=12.20" }, - "peerDependencies": { - "webpack": "3 || 4 || 5" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.6" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">=0.8.0" + "node": ">= 0.6" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { - "isexe": "^2.0.0" - }, + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "bin": { - "node-which": "bin/node-which" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">= 8" + "node": ">=4.2.0" } }, - "node_modules/which-boxed-primitive": { + "node_modules/ua-parser-js": { + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" + "inherits": "^2.0.0", + "xtend": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=4" } }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "devOptional": true, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" + "node_modules/unified/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "engines": { - "node": ">=12" + "node_modules/unified/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "node_modules/unist-util-position-from-estree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", + "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "dev": true, "dependencies": { - "sax": "^1.2.4" + "@types/unist": "^2.0.0" }, - "bin": { - "xml-js": "bin/cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.6.3.tgz", - "integrity": "sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA==", - "requires": { - "@algolia/autocomplete-shared": "1.6.3" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@algolia/autocomplete-shared": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.3.tgz", - "integrity": "sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.1.tgz", - "integrity": "sha512-UAUVG2PEfwd/FfudsZtYnidJ9eSCpS+LW9cQiesePQLz41NAcddKxBak6eP2GErqyFagSlnVXe/w2E9h2m2ttg==", - "requires": { - "@algolia/cache-common": "4.13.1" + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@algolia/cache-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.13.1.tgz", - "integrity": "sha512-7Vaf6IM4L0Jkl3sYXbwK+2beQOgVJ0mKFbz/4qSxKd1iy2Sp77uTAazcX+Dlexekg1fqGUOSO7HS4Sx47ZJmjA==" - }, - "@algolia/cache-in-memory": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.13.1.tgz", - "integrity": "sha512-pZzybCDGApfA/nutsFK1P0Sbsq6fYJU3DwIvyKg4pURerlJM4qZbB9bfLRef0FkzfQu7W11E4cVLCIOWmyZeuQ==", - "requires": { - "@algolia/cache-common": "4.13.1" + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" } }, - "@algolia/client-account": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.13.1.tgz", - "integrity": "sha512-TFLiZ1KqMiir3FNHU+h3b0MArmyaHG+eT8Iojio6TdpeFcAQ1Aiy+2gb3SZk3+pgRJa/BxGmDkRUwE5E/lv3QQ==", - "requires": { - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/transporter": "4.13.1" + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" } }, - "@algolia/client-analytics": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.13.1.tgz", - "integrity": "sha512-iOS1JBqh7xaL5x00M5zyluZ9+9Uy9GqtYHv/2SMuzNW1qP7/0doz1lbcsP3S7KBbZANJTFHUOfuqyRLPk91iFA==", - "requires": { - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "@algolia/client-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.13.1.tgz", - "integrity": "sha512-LcDoUE0Zz3YwfXJL6lJ2OMY2soClbjrrAKB6auYVMNJcoKZZ2cbhQoFR24AYoxnGUYBER/8B+9sTBj5bj/Gqbg==", - "requires": { - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "@algolia/client-personalization": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.13.1.tgz", - "integrity": "sha512-1CqrOW1ypVrB4Lssh02hP//YxluoIYXAQCpg03L+/RiXJlCs+uIqlzC0ctpQPmxSlTK6h07kr50JQoYH/TIM9w==", - "requires": { - "@algolia/client-common": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "node_modules/update-notifier/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@algolia/client-search": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.13.1.tgz", - "integrity": "sha512-YQKYA83MNRz3FgTNM+4eRYbSmHi0WWpo019s5SeYcL3HUan/i5R09VO9dk3evELDFJYciiydSjbsmhBzbpPP2A==", - "requires": { - "@algolia/client-common": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "node_modules/update-notifier/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.13.1.tgz", - "integrity": "sha512-L6slbL/OyZaAXNtS/1A8SAbOJeEXD5JcZeDCPYDqSTYScfHu+2ePRTDMgUTY4gQ7HsYZ39N1LujOd8WBTmM2Aw==" + "node_modules/update-notifier/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "@algolia/logger-console": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.13.1.tgz", - "integrity": "sha512-7jQOTftfeeLlnb3YqF8bNgA2GZht7rdKkJ31OCeSH2/61haO0tWPoNRjZq9XLlgMQZH276pPo0NdiArcYPHjCA==", - "requires": { - "@algolia/logger-common": "4.13.1" + "node_modules/update-notifier/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "@algolia/requester-browser-xhr": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.1.tgz", - "integrity": "sha512-oa0CKr1iH6Nc7CmU6RE7TnXMjHnlyp7S80pP/LvZVABeJHX3p/BcSCKovNYWWltgTxUg0U1o+2uuy8BpMKljwA==", - "requires": { - "@algolia/requester-common": "4.13.1" + "node_modules/update-notifier/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@algolia/requester-common": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.13.1.tgz", - "integrity": "sha512-eGVf0ID84apfFEuXsaoSgIxbU3oFsIbz4XiotU3VS8qGCJAaLVUC5BUJEkiFENZIhon7hIB4d0RI13HY4RSA+w==" + "node_modules/update-notifier/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "@algolia/requester-node-http": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.13.1.tgz", - "integrity": "sha512-7C0skwtLdCz5heKTVe/vjvrqgL/eJxmiEjHqXdtypcE5GCQCYI15cb+wC4ytYioZDMiuDGeVYmCYImPoEgUGPw==", - "requires": { - "@algolia/requester-common": "4.13.1" + "node_modules/update-notifier/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "@algolia/transporter": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.13.1.tgz", - "integrity": "sha512-pICnNQN7TtrcYJqqPEXByV8rJ8ZRU2hCiIKLTLRyNpghtQG3VAFk6fVtdzlNfdUGZcehSKGarPIZEHlQXnKjgw==", - "requires": { - "@algolia/cache-common": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/requester-common": "4.13.1" + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" } }, - "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true } } }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "requires": { - "@babel/highlight": "^7.16.7" + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" } }, - "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" - }, - "@babel/core": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", - "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", - "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "requires": { - "@babel/types": "^7.16.7" + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "peerDependenciesMeta": { + "@types/react": { + "optional": true } } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true } } }, - "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "requires": { - "@babel/types": "^7.16.7" - } + "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==" }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "requires": { - "@babel/types": "^7.17.0" + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" } }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "requires": { - "@babel/types": "^7.16.7" + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "requires": { - "@babel/types": "^7.16.7" + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - } + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, - "@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" } }, - "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "requires": { - "@babel/types": "^7.18.2" + "node_modules/vfile": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", + "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "requires": { - "@babel/types": "^7.16.0" + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" + "node_modules/vfile-message": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", + "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "node_modules/vfile-message/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "node_modules/vfile/node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" } }, - "@babel/parser": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", - "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" - }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "minimalistic-assert": "^1.0.0" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } + "node_modules/web-tree-sitter": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", + "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", - "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "bin": { + "webpack": "bin/webpack.js" }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "engines": { + "node": ">=10.13.0" }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", + "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "engines": { + "node": ">= 12.13.0" }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" } }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", + "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", + "requires": { + "@algolia/autocomplete-shared": "1.7.2" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", + "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", + "requires": { + "@algolia/autocomplete-shared": "1.7.2" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", + "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" + }, + "@algolia/cache-browser-local-storage": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", + "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", + "requires": { + "@algolia/cache-common": "4.14.2" + } + }, + "@algolia/cache-common": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", + "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" + }, + "@algolia/cache-in-memory": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", + "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", + "requires": { + "@algolia/cache-common": "4.14.2" + } + }, + "@algolia/client-account": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", + "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", + "requires": { + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/transporter": "4.14.2" + } + }, + "@algolia/client-analytics": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", + "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", + "requires": { + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" + } + }, + "@algolia/client-common": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", + "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", + "requires": { + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" + } + }, + "@algolia/client-personalization": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", + "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", + "requires": { + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" + } + }, + "@algolia/client-search": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", + "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", + "requires": { + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" + } + }, + "@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "@algolia/logger-common": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", + "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" + }, + "@algolia/logger-console": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", + "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", + "requires": { + "@algolia/logger-common": "4.14.2" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", + "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", + "requires": { + "@algolia/requester-common": "4.14.2" + } + }, + "@algolia/requester-common": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", + "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" + }, + "@algolia/requester-node-http": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", + "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", + "requires": { + "@algolia/requester-common": "4.14.2" + } + }, + "@algolia/transporter": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", + "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", + "requires": { + "@algolia/cache-common": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/requester-common": "4.14.2" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@apidevtools/json-schema-ref-parser": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", + "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", + "dev": true, + "requires": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" + }, + "@babel/core": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/generator": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", + "requires": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "requires": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { @@ -15809,18 +16719,11 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", - "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-json-strings": { @@ -15832,11 +16735,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -15893,13 +16796,6 @@ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } } }, "@babel/plugin-syntax-top-level-await": { @@ -15908,530 +16804,298 @@ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } } }, "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", - "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.4.tgz", - "integrity": "sha512-lH2UaQaHVOAeYrUUuZ8i38o76J/FnO8vu21OE+tD1MyP9lxdZoSfz+pDbWkq46GogUrdrMz3tiz/FYGB+bVThg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", - "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", - "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz", - "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/plugin-transform-react-constant-elements": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", + "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - } + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.7" + "@babel/plugin-transform-react-jsx": "^7.18.6" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-regenerator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } } }, "@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-runtime": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.2.tgz", - "integrity": "sha512-mr1ufuRMfS52ttq+1G1PD8OJNqgcTFjq3hwn8SZ5n1x1pBhi0E36rYMdTK0TsKtApJ4lDEdfXJwtGobQMHSMPg==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" }, "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -16440,161 +17104,105 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - } + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", - "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.18.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.17.12", + "@babel/plugin-syntax-import-assertions": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -16604,64 +17212,47 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.18.0", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.18.1", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.18.0", - "@babel/plugin-transform-modules-commonjs": "^7.18.2", - "@babel/plugin-transform-modules-systemjs": "^7.18.0", - "@babel/plugin-transform-modules-umd": "^7.18.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.18.0", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.18.2", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.2", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -16682,92 +17273,79 @@ } }, "@babel/preset-react": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz", - "integrity": "sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.17.12", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" } }, "@babel/preset-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", - "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.17.12" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" } }, "@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz", - "integrity": "sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", + "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", "requires": { - "core-js-pure": "^3.20.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", - "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.2", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -16778,43 +17356,44 @@ "optional": true }, "@docsearch/css": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.1.0.tgz", - "integrity": "sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", + "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" }, "@docsearch/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.1.0.tgz", - "integrity": "sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", + "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", "requires": { - "@algolia/autocomplete-core": "1.6.3", - "@docsearch/css": "3.1.0", + "@algolia/autocomplete-core": "1.7.2", + "@algolia/autocomplete-preset-algolia": "1.7.2", + "@docsearch/css": "3.3.0", "algoliasearch": "^4.0.0" } }, "@docusaurus/core": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.21.tgz", - "integrity": "sha512-qysDMVp1M5UozK3u/qOxsEZsHF7jeBvJDS+5ItMPYmNKvMbNKeYZGA0g6S7F9hRDwjIlEbvo7BaX0UMDcmTAWA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.1.0.tgz", + "integrity": "sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q==", "requires": { - "@babel/core": "^7.18.2", - "@babel/generator": "^7.18.2", + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.2", - "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@babel/runtime-corejs3": "^7.18.3", - "@babel/traverse": "^7.18.2", - "@docusaurus/cssnano-preset": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", - "@slorber/static-site-generator-webpack-plugin": "^4.0.4", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", "babel-loader": "^8.2.5", @@ -16827,10 +17406,10 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.22.7", + "core-js": "^3.23.3", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.9", + "cssnano": "^5.1.12", "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", @@ -16843,7 +17422,7 @@ "import-fresh": "^3.3.0", "leven": "^3.1.0", "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.0", + "mini-css-extract-plugin": "^2.6.1", "postcss": "^8.4.14", "postcss-loader": "^7.0.0", "prompts": "^2.4.2", @@ -16854,62 +17433,51 @@ "react-router": "^5.3.3", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.3", - "remark-admonitions": "^1.2.1", "rtl-detect": "^1.0.4", "semver": "^7.3.7", "serve-handler": "^6.1.3", "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.1", + "terser-webpack-plugin": "^5.3.3", "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", "wait-on": "^6.0.1", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.0", + "webpack-dev-server": "^4.9.3", "webpack-merge": "^5.8.0", "webpackbar": "^5.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz", - "integrity": "sha512-fhTZrg1vc6zYYZIIMXpe1TnEVGEjqscBo0s1uomSwKjjtMgu7wkzc1KKJYY7BndsSA+fVVkZ+OmL/kAsmK7xxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz", + "integrity": "sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ==", "requires": { - "cssnano-preset-advanced": "^5.3.5", + "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", "postcss-sort-media-queries": "^4.2.1", "tslib": "^2.4.0" } }, "@docusaurus/logger": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz", - "integrity": "sha512-HTFp8FsSMrAj7Uxl5p72U+P7rjYU/LRRBazEoJbs9RaqoKEdtZuhv8MYPOCh46K9TekaoquRYqag2o23Qt4ggA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.1.0.tgz", + "integrity": "sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q==", "requires": { "chalk": "^4.1.2", "tslib": "^2.4.0" } }, "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz", - "integrity": "sha512-AI+4obJnpOaBOAYV6df2ux5Y1YJCBS+MhXFf0yhED12sVLJi2vffZgdamYd/d/FwvWDw6QLs/VD2jebd7P50yQ==", - "requires": { - "@babel/parser": "^7.18.3", - "@babel/traverse": "^7.18.2", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz", + "integrity": "sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg==", + "requires": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.1.0", + "@docusaurus/utils": "2.1.0", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -16919,214 +17487,156 @@ "remark-emoji": "^2.2.0", "stringify-object": "^3.3.0", "tslib": "^2.4.0", + "unified": "^9.2.2", "unist-util-visit": "^2.0.3", "url-loader": "^4.1.1", - "webpack": "^5.72.1" + "webpack": "^5.73.0" } }, "@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.21.tgz", - "integrity": "sha512-gRkWICgQZiqSJgrwRKWjXm5gAB+9IcfYdUbCG0PRPP/G8sNs9zBIOY4uT4Z5ox2CWFEm44U3RTTxj7BiLVMBXw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz", + "integrity": "sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ==", "requires": { - "@docusaurus/types": "2.0.0-beta.21", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.1.0", + "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "*" + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" } }, "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.21.tgz", - "integrity": "sha512-IP21yJViP3oBmgsWBU5LhrG1MZXV4mYCQSoCAboimESmy1Z11RCNP2tXaqizE3iTmXOwZZL+SNBk06ajKCEzWg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", - "cheerio": "^1.0.0-rc.11", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz", + "integrity": "sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg==", + "requires": { + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", + "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "reading-time": "^1.5.0", - "remark-admonitions": "^1.2.1", "tslib": "^2.4.0", "unist-util-visit": "^2.0.3", "utility-types": "^3.10.0", - "webpack": "^5.72.1" - }, - "dependencies": { - "cheerio": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.11.tgz", - "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "tslib": "^2.4.0" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==" - }, - "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "requires": { - "entities": "^4.3.0" - } - } + "webpack": "^5.73.0" } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.21.tgz", - "integrity": "sha512-aa4vrzJy4xRy81wNskyhE3wzRf3AgcESZ1nfKh8xgHUkT7fDTZ1UWlg50Jb3LBCQFFyQG2XQB9N6llskI/KUnw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz", + "integrity": "sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q==", + "requires": { + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/module-type-aliases": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", + "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "remark-admonitions": "^1.2.1", "tslib": "^2.4.0", "utility-types": "^3.10.0", - "webpack": "^5.72.1" + "webpack": "^5.73.0" } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.21.tgz", - "integrity": "sha512-DmXOXjqNI+7X5hISzCvt54QIK6XBugu2MOxjxzuqI7q92Lk/EVdraEj5mthlH8IaEH/VlpWYJ1O9TzLqX5vH2g==", - "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/mdx-loader": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz", + "integrity": "sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g==", + "requires": { + "@docusaurus/core": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "fs-extra": "^10.1.0", - "remark-admonitions": "^1.2.1", "tslib": "^2.4.0", - "webpack": "^5.72.1" + "webpack": "^5.73.0" } }, "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.21.tgz", - "integrity": "sha512-P54J4q4ecsyWW0Jy4zbimSIHna999AfbxpXGmF1IjyHrjoA3PtuakV1Ai51XrGEAaIq9q6qMQkEhbUd3CffGAw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz", + "integrity": "sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw==", "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", + "@docusaurus/core": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.21.tgz", - "integrity": "sha512-+5MS0PeGaJRgPuNZlbd/WMdQSpOACaxEz7A81HAxm6kE+tIASTW3l8jgj1eWFy/PGPzaLnQrEjxI1McAfnYmQw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz", + "integrity": "sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg==", "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "@docusaurus/core": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.21.tgz", - "integrity": "sha512-4zxKZOnf0rfh6myXLG7a6YZfQcxYDMBsWqANEjCX77H5gPdK+GHZuDrxK6sjFvRBv4liYCrNjo7HJ4DpPoT0zA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz", + "integrity": "sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA==", "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "@docusaurus/core": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "tslib": "^2.4.0" } }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.21.tgz", - "integrity": "sha512-/ynWbcXZXcYZ6sT2X6vAJbnfqcPxwdGEybd0rcRZi4gBHq6adMofYI25AqELmnbBDxt0If+vlAeUHFRG5ueP7Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz", + "integrity": "sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw==", + "requires": { + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" } }, "@docusaurus/preset-classic": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.21.tgz", - "integrity": "sha512-KvBnIUu7y69pNTJ9UhX6SdNlK6prR//J3L4rhN897tb8xx04xHHILlPXko2Il+C3Xzgh3OCgyvkoz9K6YlFTDw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/plugin-content-blog": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/plugin-content-pages": "2.0.0-beta.21", - "@docusaurus/plugin-debug": "2.0.0-beta.21", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.21", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.21", - "@docusaurus/plugin-sitemap": "2.0.0-beta.21", - "@docusaurus/theme-classic": "2.0.0-beta.21", - "@docusaurus/theme-common": "2.0.0-beta.21", - "@docusaurus/theme-search-algolia": "2.0.0-beta.21" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz", + "integrity": "sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w==", + "requires": { + "@docusaurus/core": "2.1.0", + "@docusaurus/plugin-content-blog": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/plugin-content-pages": "2.1.0", + "@docusaurus/plugin-debug": "2.1.0", + "@docusaurus/plugin-google-analytics": "2.1.0", + "@docusaurus/plugin-google-gtag": "2.1.0", + "@docusaurus/plugin-sitemap": "2.1.0", + "@docusaurus/theme-classic": "2.1.0", + "@docusaurus/theme-common": "2.1.0", + "@docusaurus/theme-search-algolia": "2.1.0", + "@docusaurus/types": "2.1.0" } }, "@docusaurus/react-loadable": { @@ -17139,65 +17649,74 @@ } }, "@docusaurus/theme-classic": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.21.tgz", - "integrity": "sha512-Ge0WNdTefD0VDQfaIMRRWa8tWMG9+8/OlBRd5MK88/TZfqdBq7b/gnCSaalQlvZwwkj6notkKhHx72+MKwWUJA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/plugin-content-blog": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/plugin-content-pages": "2.0.0-beta.21", - "@docusaurus/theme-common": "2.0.0-beta.21", - "@docusaurus/theme-translations": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-common": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz", + "integrity": "sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng==", + "requires": { + "@docusaurus/core": "2.1.0", + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/module-type-aliases": "2.1.0", + "@docusaurus/plugin-content-blog": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/plugin-content-pages": "2.1.0", + "@docusaurus/theme-common": "2.1.0", + "@docusaurus/theme-translations": "2.1.0", + "@docusaurus/types": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-common": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "@mdx-js/react": "^1.6.22", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.39", + "infima": "0.2.0-alpha.42", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.3", + "prism-react-renderer": "^1.3.5", "prismjs": "^1.28.0", "react-router-dom": "^5.3.3", "rtlcss": "^3.5.0", - "tslib": "^2.4.0" + "tslib": "^2.4.0", + "utility-types": "^3.10.0" } }, "@docusaurus/theme-common": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.21.tgz", - "integrity": "sha512-fTKoTLRfjuFG6c3iwnVjIIOensxWMgdBKLfyE5iih3Lq7tQgkE7NyTGG9BKLrnTJ7cAD2UXdXM9xbB7tBf1qzg==", - "requires": { - "@docusaurus/module-type-aliases": "2.0.0-beta.21", - "@docusaurus/plugin-content-blog": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/plugin-content-pages": "2.0.0-beta.21", - "clsx": "^1.1.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.1.0.tgz", + "integrity": "sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag==", + "requires": { + "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/module-type-aliases": "2.1.0", + "@docusaurus/plugin-content-blog": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/plugin-content-pages": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.3", + "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", "utility-types": "^3.10.0" } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.21.tgz", - "integrity": "sha512-T1jKT8MVSSfnztSqeebUOpWHPoHKtwDXtKYE0xC99JWoZ+mMfv8AFhVSoSddn54jLJjV36mxg841eHQIySMCpQ==", - "requires": { - "@docsearch/react": "^3.1.0", - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/plugin-content-docs": "2.0.0-beta.21", - "@docusaurus/theme-common": "2.0.0-beta.21", - "@docusaurus/theme-translations": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", - "@docusaurus/utils-validation": "2.0.0-beta.21", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz", + "integrity": "sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg==", + "requires": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.1.0", + "@docusaurus/logger": "2.1.0", + "@docusaurus/plugin-content-docs": "2.1.0", + "@docusaurus/theme-common": "2.1.0", + "@docusaurus/theme-translations": "2.1.0", + "@docusaurus/utils": "2.1.0", + "@docusaurus/utils-validation": "2.1.0", "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.8.2", - "clsx": "^1.1.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", "eta": "^1.12.3", "fs-extra": "^10.1.0", "lodash": "^4.17.21", @@ -17206,34 +17725,35 @@ } }, "@docusaurus/theme-translations": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.21.tgz", - "integrity": "sha512-dLVT9OIIBs6MpzMb1bAy+C0DPJK3e3DNctG+ES0EP45gzEqQxzs4IsghpT+QDaOsuhNnAlosgJpFWX3rqxF9xA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz", + "integrity": "sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg==", "requires": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" } }, "@docusaurus/types": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.21.tgz", - "integrity": "sha512-/GH6Npmq81eQfMC/ikS00QSv9jNyO1RXEpNSx5GLA3sFX8Iib26g2YI2zqNplM8nyxzZ2jVBuvUoeODTIbTchQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.1.0.tgz", + "integrity": "sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ==", "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", "commander": "^5.1.0", - "history": "^4.9.0", "joi": "^17.6.0", "react-helmet-async": "^1.3.0", "utility-types": "^3.10.0", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-merge": "^5.8.0" } }, "@docusaurus/utils": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz", - "integrity": "sha512-M/BrVCDmmUPZLxtiStBgzpQ4I5hqkggcpnQmEN+LbvbohjbtVnnnZQ0vptIziv1w8jry/woY+ePsyOO7O/yeLQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.1.0.tgz", + "integrity": "sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A==", "requires": { - "@docusaurus/logger": "2.0.0-beta.21", + "@docusaurus/logger": "2.1.0", "@svgr/webpack": "^6.2.1", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", @@ -17247,121 +17767,96 @@ "shelljs": "^0.8.5", "tslib": "^2.4.0", "url-loader": "^4.1.1", - "webpack": "^5.72.1" + "webpack": "^5.73.0" } }, "@docusaurus/utils-common": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.21.tgz", - "integrity": "sha512-5w+6KQuJb6pUR2M8xyVuTMvO5NFQm/p8TOTDFTx60wt3p0P1rRX00v6FYsD4PK6pgmuoKjt2+Ls8dtSXc4qFpQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.1.0.tgz", + "integrity": "sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg==", "requires": { "tslib": "^2.4.0" } }, "@docusaurus/utils-validation": { - "version": "2.0.0-beta.21", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz", - "integrity": "sha512-6NG1FHTRjv1MFzqW//292z7uCs77vntpWEbZBHk3n67aB1HoMn5SOwjLPtRDjbCgn6HCHFmdiJr6euCbjhYolg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz", + "integrity": "sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ==", "requires": { - "@docusaurus/logger": "2.0.0-beta.21", - "@docusaurus/utils": "2.0.0-beta.21", + "@docusaurus/logger": "2.1.0", + "@docusaurus/utils": "2.1.0", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" } }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "devOptional": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "devOptional": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "devOptional": true, "requires": { "type-fest": "^0.20.2" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "devOptional": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "devOptional": true } } }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==" }, "@fortawesome/fontawesome-svg-core": { - "version": "1.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz", - "integrity": "sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==", + "version": "1.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", + "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.35" + "@fortawesome/fontawesome-common-types": "^0.2.36" } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", - "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==", + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", + "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.35" + "@fortawesome/fontawesome-common-types": "^0.2.36" } }, "@fortawesome/react-fontawesome": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.18.tgz", - "integrity": "sha512-RwLIB4TZw0M9gvy5u+TusAA0afbwM4JQIimNH/j3ygd6aIvYPQLqXMhC9ErY26J23rDPyDZldIfPq/HpTTJ/tQ==", + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz", + "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", "requires": { "prop-types": "^15.8.1" - }, - "dependencies": { - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - } } }, "@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "@hapi/topo": { "version": "5.1.0", @@ -17372,41 +17867,67 @@ } }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", + "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", "devOptional": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "devOptional": true + }, "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "devOptional": true }, + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", + "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "requires": { "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/source-map": { "version": "0.3.2", @@ -17415,20 +17936,32 @@ "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@jsdevtools/ono": { @@ -17491,10 +18024,56 @@ "source-map": "^0.5.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } } } }, @@ -17532,6 +18111,20 @@ "fastq": "^1.6.0" } }, + "@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + } + }, "@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", @@ -17555,161 +18148,144 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.4.tgz", - "integrity": "sha512-FvMavoWEIePps6/JwGCOLYKCRhuwIHhMtmbKpBFgzNkxwpa/569LfTkrbRk1m1I3n+ezJK4on9E1A6cjuZmD9g==", - "requires": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.8", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } + "@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "requires": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" } }, "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==", "requires": {} }, "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", "requires": {} }, "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", - "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", "requires": {} }, "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", - "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz", + "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==", "requires": {} }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", - "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz", + "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==", "requires": {} }, "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", - "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz", + "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==", "requires": {} }, "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", - "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz", + "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==", "requires": {} }, "@svgr/babel-plugin-transform-svg-component": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", - "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz", + "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==", "requires": {} }, "@svgr/babel-preset": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", - "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz", + "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", - "@svgr/babel-plugin-transform-svg-component": "^6.2.0" + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0", + "@svgr/babel-plugin-transform-svg-component": "^6.5.0" } }, "@svgr/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", - "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz", + "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==", "requires": { - "@svgr/plugin-jsx": "^6.2.1", + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.5.0", + "@svgr/plugin-jsx": "^6.5.0", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" } }, "@svgr/hast-util-to-babel-ast": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", - "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz", + "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==", "requires": { - "@babel/types": "^7.15.6", - "entities": "^3.0.1" - }, - "dependencies": { - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - } + "@babel/types": "^7.18.4", + "entities": "^4.3.0" } }, "@svgr/plugin-jsx": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", - "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz", + "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==", "requires": { - "@babel/core": "^7.15.5", - "@svgr/babel-preset": "^6.2.0", - "@svgr/hast-util-to-babel-ast": "^6.2.1", - "svg-parser": "^2.0.2" + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.5.0", + "@svgr/hast-util-to-babel-ast": "^6.5.0", + "svg-parser": "^2.0.4" } }, "@svgr/plugin-svgo": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", - "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz", + "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==", "requires": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", - "svgo": "^2.5.0" + "svgo": "^2.8.0" } }, "@svgr/webpack": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz", - "integrity": "sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.0.tgz", + "integrity": "sha512-rM/Z4pwMhqvAXEHoHIlE4SeTb0ToQNmJuBdiHwhP2ZtywyX6XqrgCv2WX7K/UCgNYJgYbekuylgyjnuLUHTcZQ==", "requires": { - "@babel/core": "^7.15.5", - "@babel/plugin-transform-react-constant-elements": "^7.14.5", - "@babel/preset-env": "^7.15.6", - "@babel/preset-react": "^7.14.5", - "@babel/preset-typescript": "^7.15.0", - "@svgr/core": "^6.2.1", - "@svgr/plugin-jsx": "^6.2.1", - "@svgr/plugin-svgo": "^6.2.0" + "@babel/core": "^7.18.5", + "@babel/plugin-transform-react-constant-elements": "^7.17.12", + "@babel/preset-env": "^7.18.2", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", + "@svgr/core": "^6.5.0", + "@svgr/plugin-jsx": "^6.5.0", + "@svgr/plugin-svgo": "^6.5.0" } }, "@szmarczak/http-timer": { @@ -17726,11 +18302,20 @@ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, "@tsconfig/docusaurus": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.5.tgz", - "integrity": "sha512-KM/TuJa9fugo67dTGx+ktIqf3fVc077J6jwHu845Hex4EQf7LABlNonP/mohDKT0cmncdtlYVHHF74xR/YpThg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.6.tgz", + "integrity": "sha512-1QxDaP54hpzM6bq9E+yFEo4F9WbWHhsDe4vktZXF/iDlc9FqGr9qlg+3X/nuKQXx8QxHV7ue8NXFazzajsxFBA==", "dev": true }, + "@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -17765,33 +18350,51 @@ "@types/node": "*" } }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, "@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.8.tgz", + "integrity": "sha512-zUCKQI1bUCTi+0kQs5ZQzQ/XILWRLIlh15FXWNykJ+NG3TMKMVvwwC6GP3DR1Ylga15fB7iAExSzc4PNlR5i3w==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } }, "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -17800,9 +18403,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -17810,9 +18413,9 @@ } }, "@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -17828,9 +18431,9 @@ } }, "@types/history": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", - "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==" + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "@types/html-minifier-terser": { "version": "6.1.0", @@ -17845,6 +18448,27 @@ "@types/node": "*" } }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, "@types/js-yaml": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", @@ -17852,39 +18476,45 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "requires": { "@types/unist": "*" } }, "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, "@types/node": { - "version": "17.0.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.38.tgz", - "integrity": "sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g==" + "version": "18.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.5.tgz", + "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -17897,15 +18527,15 @@ "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/qs": { "version": "6.9.7", @@ -17918,9 +18548,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", - "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "version": "17.0.51", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.51.tgz", + "integrity": "sha512-YMddzAE+nSH04BiTJ5GydTxk0/3hckqyuOclg0s6zQYj/XzfRVNzHZAFwZb5SCSavkzTYUtcq/gwjLnvt2Y4cg==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -17937,11 +18567,11 @@ } }, "@types/react-router": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz", - "integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==", + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", + "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", "requires": { - "@types/history": "*", + "@types/history": "^4.7.11", "@types/react": "*" } }, @@ -17953,21 +18583,14 @@ "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router": "*" - }, - "dependencies": { - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - } } }, "@types/react-router-dom": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", - "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", "requires": { - "@types/history": "*", + "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router": "*" } @@ -17986,9 +18609,9 @@ } }, "@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/serve-index": { "version": "1.9.1", @@ -17999,11 +18622,11 @@ } }, "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "requires": { - "@types/mime": "^1", + "@types/mime": "*", "@types/node": "*" } }, @@ -18016,9 +18639,9 @@ } }, "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "@types/ws": { "version": "8.5.3", @@ -18028,6 +18651,19 @@ "@types/node": "*" } }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -18176,12 +18812,27 @@ "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + } } }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" }, "acorn-import-assertions": { "version": "1.8.0", @@ -18202,9 +18853,9 @@ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" }, "aggregate-error": { "version": "3.1.0", @@ -18259,30 +18910,30 @@ "requires": {} }, "algoliasearch": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.13.1.tgz", - "integrity": "sha512-dtHUSE0caWTCE7liE1xaL+19AFf6kWEcyn76uhcitWpntqvicFHXKFoZe5JJcv9whQOTRM6+B8qJz6sFj+rDJA==", - "requires": { - "@algolia/cache-browser-local-storage": "4.13.1", - "@algolia/cache-common": "4.13.1", - "@algolia/cache-in-memory": "4.13.1", - "@algolia/client-account": "4.13.1", - "@algolia/client-analytics": "4.13.1", - "@algolia/client-common": "4.13.1", - "@algolia/client-personalization": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/logger-console": "4.13.1", - "@algolia/requester-browser-xhr": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/requester-node-http": "4.13.1", - "@algolia/transporter": "4.13.1" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", + "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", + "requires": { + "@algolia/cache-browser-local-storage": "4.14.2", + "@algolia/cache-common": "4.14.2", + "@algolia/cache-in-memory": "4.14.2", + "@algolia/client-account": "4.14.2", + "@algolia/client-analytics": "4.14.2", + "@algolia/client-common": "4.14.2", + "@algolia/client-personalization": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/logger-console": "4.14.2", + "@algolia/requester-browser-xhr": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/requester-node-http": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "algoliasearch-helper": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz", - "integrity": "sha512-AXxiF0zT9oYwl8ZBgU/eRXvfYhz7cBA5YrLPlw9inZHdaYF0QEya/f1Zp1mPYMXc1v6VkHwBq4pk6/vayBLICg==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", + "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", "requires": { "@algolia/events": "^4.0.1" } @@ -18293,14 +18944,25 @@ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { "string-width": "^4.1.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "devOptional": true - }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -18322,7 +18984,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, "anymatch": { @@ -18335,9 +18997,9 @@ } }, "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "argparse": { "version": "2.0.1", @@ -18360,18 +19022,6 @@ "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" - }, - "dependencies": { - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - } } }, "array-union": { @@ -18396,24 +19046,18 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "devOptional": true - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -18437,18 +19081,6 @@ "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } } }, "babel-plugin-apply-mdx-type-prop": { @@ -18458,6 +19090,13 @@ "requires": { "@babel/helper-plugin-utils": "7.10.4", "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } } }, "babel-plugin-dynamic-import-node": { @@ -18474,15 +19113,22 @@ "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "requires": { "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "dependencies": { @@ -18494,20 +19140,20 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "bail": { @@ -18540,15 +19186,10 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -18558,7 +19199,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -18585,20 +19226,20 @@ } }, "bonjour-service": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.12.tgz", - "integrity": "sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", "requires": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.4" + "multicast-dns": "^7.2.5" } }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "boxen": { "version": "6.2.1", @@ -18613,36 +19254,6 @@ "type-fest": "^2.5.0", "widest-line": "^4.0.1", "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "type-fest": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.12.2.tgz", - "integrity": "sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==" - } } }, "brace-expansion": { @@ -18663,26 +19274,25 @@ } }, "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "cacheable-request": { "version": "6.1.0", @@ -18730,7 +19340,7 @@ "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", "dev": true }, "callsites": { @@ -18769,9 +19379,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001346", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001346.tgz", - "integrity": "sha512-q6ibZUO2t88QCIPayP/euuDREq+aMAxFE5S70PkrLh0iTDj/zEhgvJRKC2+CvXY6EWc6oQwUR48lL5vCW6jiXQ==" + "version": "1.0.30001425", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz", + "integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==" }, "ccount": { "version": "1.1.0", @@ -18785,16 +19395,6 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "character-entities": { @@ -18803,9 +19403,9 @@ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" }, "character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true }, "character-entities-legacy": { @@ -18819,80 +19419,17 @@ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - } + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, "cheerio-select": { @@ -18906,53 +19443,6 @@ "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" - }, - "dependencies": { - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==" - } } }, "chokidar": { @@ -18966,48 +19456,31 @@ "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" }, "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, "clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", "requires": { "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "clean-stack": { @@ -19021,34 +19494,42 @@ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" }, "cli-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", - "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", "dev": true, "requires": { - "ansi-regex": "^2.1.1", "d": "^1.0.1", - "es5-ext": "^0.10.51", + "es5-ext": "^0.10.61", "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", + "memoizee": "^0.4.15", "timers-ext": "^0.1.7" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } } }, "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "requires": { "@colors/colors": "1.5.0", "string-width": "^4.2.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } } }, "clone-deep": { @@ -19062,17 +19543,17 @@ } }, "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "requires": { "mimic-response": "^1.0.0" } }, "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" }, "collapse-white-space": { "version": "1.0.6", @@ -19093,14 +19574,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "combine-promises": { "version": "1.1.0", @@ -19128,6 +19609,13 @@ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "requires": { "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + } } }, "compression": { @@ -19156,13 +19644,18 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==" } } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "configstore": { "version": "5.0.1", @@ -19178,9 +19671,9 @@ } }, "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" }, "consola": { "version": "2.15.3", @@ -19190,7 +19683,7 @@ "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" }, "content-type": { "version": "1.0.4", @@ -19198,12 +19691,9 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } + "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==" }, "cookie": { "version": "0.5.0", @@ -19221,9 +19711,9 @@ "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" }, "copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz", + "integrity": "sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==", "requires": { "toggle-selection": "^1.0.6" } @@ -19269,9 +19759,9 @@ } }, "globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", "requires": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -19280,11 +19770,6 @@ "slash": "^4.0.0" } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -19309,30 +19794,22 @@ } }, "core-js": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.8.tgz", - "integrity": "sha512-UoGQ/cfzGYIuiq6Z7vWL1HfkE9U9IZ4Ub+0XSiJTCzvbZzgPA69oDF2f+lgJ6dFFLEdjW5O6svvoKzXX23xFkA==" + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", + "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==" }, "core-js-compat": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.8.tgz", - "integrity": "sha512-pQnwg4xtuvc2Bs/5zYQPaEYYSuTxsF7LBWF0SvnVhthZo/Qe+rJpcEekrdNK5DWwDJ0gv0oI9NNX5Mppdy0ctg==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", + "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", "requires": { - "browserslist": "^4.20.3", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } + "browserslist": "^4.21.4" } }, "core-js-pure": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.8.tgz", - "integrity": "sha512-bOxbZIy9S5n4OVH63XaLVXZ49QKicjowDx/UELyJ68vxfCRpYsbyh/WNZNfEfAk+ekA8vSjt+gCDpvh672bc3w==" + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", + "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==" }, "core-util-is": { "version": "1.0.3", @@ -19375,9 +19852,9 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "css-declaration-sorter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", "requires": {} }, "css-loader": { @@ -19396,13 +19873,13 @@ } }, "css-minimizer-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", "requires": { "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" @@ -19442,23 +19919,18 @@ "ajv-formats": "^2.1.1", "ajv-keywords": "^5.0.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, @@ -19469,13 +19941,6 @@ "requires": { "mdn-data": "2.0.14", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "css-what": { @@ -19489,22 +19954,22 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.10.tgz", - "integrity": "sha512-ACpnRgDg4m6CZD/+8SgnLcGCgy6DDGdkMbOawwdvVxNietTNLe/MtWcenp6qT0PRt5wzhGl6/cjMWCdhKXC9QA==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", "requires": { - "cssnano-preset-default": "^5.2.10", + "cssnano-preset-default": "^5.2.12", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-advanced": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.6.tgz", - "integrity": "sha512-OZHsytu16eStRVrIY3wmPQqhJMaI0+O3raU4JHoKV3uuQYEeQek/FJVUIvYXD55hWR6OjCMyKYNRDw+k3/xgUw==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz", + "integrity": "sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==", "requires": { "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.10", + "cssnano-preset-default": "^5.2.12", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -19512,11 +19977,11 @@ } }, "cssnano-preset-default": { - "version": "5.2.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.10.tgz", - "integrity": "sha512-H8TJRhTjBKVOPltp9vr9El9I+IfYsOMhmXdK0LwdvwJcxYX9oWkY7ctacWusgPWAgQq1vt/WO8v+uqpfLnM7QA==", + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", "requires": { - "css-declaration-sorter": "^6.2.2", + "css-declaration-sorter": "^6.3.0", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", @@ -19525,7 +19990,7 @@ "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.5", + "postcss-merge-longhand": "^5.1.6", "postcss-merge-rules": "^5.1.2", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", @@ -19533,14 +19998,14 @@ "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.0", - "postcss-normalize-repeat-style": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", "postcss-normalize-unicode": "^5.1.0", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.1", + "postcss-ordered-values": "^5.1.3", "postcss-reduce-initial": "^5.1.0", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", @@ -19562,9 +20027,9 @@ } }, "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "d": { "version": "1.0.1", @@ -19577,17 +20042,34 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "requires": { + "character-entities": "^2.0.0" + }, + "dependencies": { + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true + } + } + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "requires": { "mimic-response": "^1.0.0" } @@ -19598,9 +20080,9 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "devOptional": true }, "deepmerge": { @@ -19627,11 +20109,12 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "del": { @@ -19654,6 +20137,12 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -19673,27 +20162,12 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "requires": { "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "debug": "4" } }, "detect-port-alt": { @@ -19720,6 +20194,12 @@ } } }, + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -19734,9 +20214,9 @@ "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "requires": { "@leichtgewicht/ip-codec": "^2.0.1" } @@ -19759,13 +20239,13 @@ } }, "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "domelementtype": { @@ -19774,21 +20254,21 @@ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" } }, "dot-case": { @@ -19821,9 +20301,9 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" }, "eastasianwidth": { "version": "0.2.0", @@ -19836,9 +20316,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.144", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", - "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "emoji-regex": { "version": "9.2.2", @@ -19868,19 +20348,19 @@ "once": "^1.4.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "devOptional": true, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "requires": { - "ansi-colors": "^4.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "error-ex": { "version": "1.3.2", @@ -19891,42 +20371,35 @@ } }, "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - } } }, "es-module-lexer": { @@ -19955,20 +20428,20 @@ } }, "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "requires": { "d": "1", @@ -20011,7 +20484,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "4.0.0", @@ -20019,155 +20492,395 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", + "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", "devOptional": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "devOptional": true, "requires": { - "@babel/highlight": "^7.10.4" + "is-glob": "^4.0.3" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "devOptional": true, "requires": { - "sprintf-js": "~1.0.2" + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "devOptional": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-mdx": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.0.5.tgz", + "integrity": "sha512-1ZzcJwJNfladtuK+uuG/MdC0idc1e3d1vCI2STOq/pLcJBGuao2biWh90vEh2M93zDiNoHJGUIU7UAxupiiHFw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "cosmiconfig": "^7.0.1", + "espree": "^9.4.0", + "estree-util-visit": "^1.2.0", + "remark-mdx": "^2.1.3", + "remark-parse": "^10.0.1", + "remark-stringify": "^10.0.2", + "synckit": "^0.8.4", + "tslib": "^2.4.0", + "unified": "^10.1.2", + "unist-util-visit": "^4.1.1", + "uvu": "^0.5.6", + "vfile": "^5.3.4" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + }, + "micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "remark-mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "dev": true, + "requires": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + } + }, + "remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + } + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" } }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "devOptional": true, + "unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, "requires": { - "type-fest": "^0.20.2" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "devOptional": true, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "eslint-plugin-markdown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", + "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", "dev": true, - "requires": {} + "requires": { + "mdast-util-from-markdown": "^0.8.5" + } }, - "eslint-mdx": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.17.0.tgz", - "integrity": "sha512-O8+JRfwCzpoR2P6zUI1GDAAM/bsuzcoBS1ArvpQrgQO/E2Km0vBmM15ukiJxZ+YUh5d+qDlrqha0fZB50MojJQ==", + "eslint-plugin-mdx": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.0.5.tgz", + "integrity": "sha512-j2xN97jSlc5IoH94rJTHqYMztl46+hHzyC8Zqjx+OI1Rvv33isyf8xSSBHN6f0z8IJmgPgGsb/fH90JbvKplXg==", "dev": true, "requires": { - "cosmiconfig": "^7.0.1", - "remark-mdx": "^1.6.22", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "tslib": "^2.3.1", - "unified": "^9.2.2" + "eslint-mdx": "^2.0.5", + "eslint-plugin-markdown": "^3.0.0", + "remark-mdx": "^2.1.3", + "remark-parse": "^10.0.1", + "remark-stringify": "^10.0.2", + "tslib": "^2.4.0", + "unified": "^10.1.2", + "vfile": "^5.3.4" }, "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + }, + "micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "remark-mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "dev": true, + "requires": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + } + }, + "remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + } + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true + }, "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "dev": true, "requires": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" } } } }, - "eslint-plugin-markdown": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz", - "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^0.8.5" - } - }, - "eslint-plugin-mdx": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.17.0.tgz", - "integrity": "sha512-Kicizy+fbfsB2UxTDXP92qTtFqITApu4v4DRQUfXMoPwBHeQRvZnaEtXu2S9aia51GYRYsMSqUvoPPih/5oB+g==", - "dev": true, - "requires": { - "eslint-mdx": "^1.17.0", - "eslint-plugin-markdown": "^2.2.1", - "synckit": "^0.4.1", - "tslib": "^2.3.1", - "vfile": "^4.2.1" - } - }, "eslint-plugin-react": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", "dev": true, "requires": { "array-includes": "^3.1.5", @@ -20195,40 +20908,15 @@ "esutils": "^2.0.2" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "semver": { @@ -20240,60 +20928,47 @@ } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "devOptional": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "devOptional": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "devOptional": true } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "devOptional": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "devOptional": true, "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "devOptional": true - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "devOptional": true - } + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -20308,14 +20983,6 @@ "devOptional": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "devOptional": true - } } }, "esrecurse": { @@ -20324,19 +20991,28 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "estree-util-is-identifier-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", + "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==", + "dev": true + }, + "estree-util-visit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", + "integrity": "sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==", + "dev": true, + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + } }, "esutils": { "version": "2.0.3", @@ -20365,7 +21041,7 @@ "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, "requires": { "d": "1", @@ -20406,13 +21082,13 @@ } }, "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -20431,7 +21107,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -20478,27 +21154,22 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "requires": { - "type": "^2.0.0" + "type": "^2.7.2" }, "dependencies": { "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true } } @@ -20522,9 +21193,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -20541,13 +21212,13 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "devOptional": true }, "fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "requires": { "punycode": "^1.3.2" } @@ -20619,6 +21290,18 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "filesize": { @@ -20674,11 +21357,11 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, @@ -20693,9 +21376,9 @@ } }, "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "devOptional": true }, "flux": { @@ -20708,9 +21391,9 @@ } }, "follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "fork-ts-checker-webpack-plugin": { "version": "6.5.2", @@ -20805,7 +21488,13 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true }, "function-bind": { "version": "1.1.1", @@ -20824,12 +21513,6 @@ "functions-have-names": "^1.2.2" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "devOptional": true - }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -20842,13 +21525,13 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-own-enumerable-property-symbols": { @@ -20881,19 +21564,19 @@ } }, "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -20968,6 +21651,12 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -20979,15 +21668,14 @@ "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - } } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -21007,9 +21695,15 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "devOptional": true }, "gray-matter": { "version": "4.0.3", @@ -21077,15 +21771,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "requires": { "get-intrinsic": "^1.1.1" } }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", @@ -21126,6 +21819,28 @@ "vfile": "^4.0.0", "vfile-location": "^3.2.0", "web-namespaces": "^1.0.0" + }, + "dependencies": { + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } } }, "hast-util-parse-selector": { @@ -21148,6 +21863,33 @@ "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } } }, "hast-util-to-parse5": { @@ -21230,6 +21972,11 @@ "util-deprecate": "~1.0.1" } }, + "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==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -21266,89 +22013,37 @@ } } }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - } + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, "http-cache-semantics": { @@ -21374,9 +22069,9 @@ } }, "http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "http-proxy": { "version": "1.18.1", @@ -21427,23 +22122,22 @@ "requires": {} }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "devOptional": true + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "image-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", - "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "requires": { "queue": "6.0.2" } }, "immer": { - "version": "9.0.14", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.14.tgz", - "integrity": "sha512-ubBeqQutOSLIFCUBN03jGeOS6a3DoYlSYwYJTa+gSKEZKU5redJIqkIdZ3JVv/4RZpfcXdAWH5zCNLWPRv2WDw==" + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" }, "import-fresh": { "version": "3.3.0", @@ -21457,12 +22151,12 @@ "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "4.0.0", @@ -21470,14 +22164,14 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infima": { - "version": "0.2.0-alpha.39", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.39.tgz", - "integrity": "sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw==" + "version": "0.2.0-alpha.42", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -21532,12 +22226,6 @@ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", @@ -21550,7 +22238,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { "version": "1.0.4", @@ -21585,9 +22273,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -21596,12 +22284,19 @@ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + } } }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } @@ -21633,7 +22328,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -21776,7 +22471,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-weakref": { "version": "1.0.2", @@ -21813,24 +22508,38 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "jest-util": { + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz", + "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==", + "requires": { + "@jest/types": "^29.2.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } }, "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.1.tgz", + "integrity": "sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==", "requires": { "@types/node": "*", + "jest-util": "^29.2.1", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -21846,9 +22555,9 @@ } }, "joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "version": "17.6.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.4.tgz", + "integrity": "sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -21857,6 +22566,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "devOptional": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -21878,483 +22593,1058 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-uxU9Ix+MVszvCTvBucQiIcNEny3oAEFg7EQHSZw2bquCCuqUqEPEczIdv/Uqo1Zv4/wDPZqOI+ulrMk1ncMtjQ==", + "json-schema-ref-parser": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", + "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", + "dev": true, + "requires": { + "@apidevtools/json-schema-ref-parser": "9.0.9" + } + }, + "json-schema-to-typescript": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", + "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "@types/lodash": "^4.14.168", + "@types/prettier": "^2.1.5", + "cli-color": "^2.0.0", + "get-stdin": "^8.0.0", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "is-glob": "^4.0.1", + "json-schema-ref-parser": "^9.0.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.20", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.2.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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==", + "devOptional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "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==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "devOptional": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + }, + "loader-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz", + "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "devOptional": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "longest-streak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "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, "requires": { - "@apidevtools/json-schema-ref-parser": "9.0.7" + "es5-ext": "~0.10.2" } }, - "json-schema-to-typescript": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", - "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", - "dev": true, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { - "@types/json-schema": "^7.0.6", - "@types/lodash": "^4.14.168", - "@types/prettier": "^2.1.5", - "cli-color": "^2.0.0", - "get-stdin": "^8.0.0", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "is-glob": "^4.0.1", - "json-schema-ref-parser": "^9.0.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.20", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "mz": "^2.7.0", - "prettier": "^2.2.0" + "semver": "^6.0.0" }, "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "devOptional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "requires": { + "unist-util-remove": "^2.0.0" + } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "unist-util-visit": "^2.0.0" } }, - "jsx-ast-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", - "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "object.assign": "^4.1.2" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "mdast-util-mdx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", + "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", + "dev": true, "requires": { - "json-buffer": "3.0.0" + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0" } }, - "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==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "mdast-util-mdx-expression": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.1.tgz", + "integrity": "sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==", + "dev": true, "requires": { - "package-json": "^6.3.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "dependencies": { + "mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + }, + "micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + } } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "devOptional": true, + "mdast-util-mdx-jsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.0.tgz", + "integrity": "sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==", + "dev": true, "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "dependencies": { + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true + }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true + }, + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true + }, + "character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true + }, + "is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true + }, + "is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "requires": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + } + }, + "is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true + }, + "is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true + }, + "parse-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", + "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true + }, + "unist-util-remove-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", + "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } } }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" + "mdast-util-mdxjs-esm": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.0.tgz", + "integrity": "sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==", + "dev": true, + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "dependencies": { + "mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + }, + "micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + } + } }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "dev": true, "requires": { - "p-locate": "^4.1.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true + }, + "unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + }, + "zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "dev": true + } } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "devOptional": true - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "requires": { + "fs-monkey": "^1.0.3" + } }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + "memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "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" + } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "devOptional": true + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "micromark-core-commonmark": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", + "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "dev": true, "requires": { - "tslib": "^2.0.3" + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-extension-mdx-expression": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", + "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "dev": true, + "requires": { + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "dev": true, + "requires": { + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "micromark-extension-mdx-md": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", + "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "dev": true, "requires": { - "yallist": "^4.0.0" + "micromark-util-types": "^1.0.0" } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "micromark-extension-mdxjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", + "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", "dev": true, "requires": { - "es5-ext": "~0.10.2" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "micromark-extension-mdxjs-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", + "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "dev": true, "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + "micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "micromark-factory-label": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", + "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", "dev": true, "requires": { - "repeat-string": "^1.0.0" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "micromark-factory-mdx-expression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", + "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "dev": true, "requires": { - "unist-util-remove": "^2.0.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", "dev": true, "requires": { - "unist-util-visit": "^2.0.0" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "micromark-factory-title": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", + "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "dev": true, "requires": { - "unist-util-visit": "^2.0.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "dev": true, + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } }, - "memfs": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz", - "integrity": "sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA==", + "micromark-util-decode-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", + "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "dev": true, "requires": { - "fs-monkey": "1.0.3" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "micromark-util-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", + "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", + "dev": true + }, + "micromark-util-events-to-acorn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.0.tgz", + "integrity": "sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==", "dev": true, "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "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" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" }, "dependencies": { - "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 + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "micromark-util-html-tag-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", + "dev": true }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "dev": true, + "requires": { + "micromark-util-types": "^1.0.0" + } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "micromark-util-sanitize-uri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", + "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "micromark-util-subtokenize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", + "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", "dev": true, "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, + "micromark-util-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", + "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", + "dev": true + }, + "micromark-util-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", + "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", + "dev": true + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -22370,16 +23660,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.52.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { @@ -22392,19 +23682,10 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, "mini-css-extract-plugin": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", - "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "requires": { "schema-utils": "^4.0.0" }, @@ -22452,22 +23733,34 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true }, "mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" }, "ms": { "version": "2.1.2", @@ -22508,7 +23801,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "devOptional": true }, "negotiator": { @@ -22522,9 +23815,9 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, "no-case": { @@ -22558,9 +23851,9 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "normalize-path": { "version": "3.0.0", @@ -22591,9 +23884,9 @@ "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "requires": { "boolbase": "^1.0.0" } @@ -22606,17 +23899,30 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", - "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==" + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-keys": { "version": "1.1.1", @@ -22624,13 +23930,13 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, @@ -22664,18 +23970,6 @@ "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.19.5" - }, - "dependencies": { - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - } } }, "object.values": { @@ -22710,7 +24004,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -22758,19 +24052,19 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, "p-map": { @@ -22860,9 +24154,12 @@ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "requires": { + "entities": "^4.4.0" + } }, "parse5-htmlparser2-tree-adapter": { "version": "7.0.0", @@ -22871,29 +24168,6 @@ "requires": { "domhandler": "^5.0.2", "parse5": "^7.0.0" - }, - "dependencies": { - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "entities": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==" - }, - "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "requires": { - "entities": "^4.3.0" - } - } } }, "parseurl": { @@ -22918,12 +24192,12 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, "path-key": { "version": "3.1.1", @@ -22964,6 +24238,41 @@ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + } } }, "pkg-up": { @@ -22991,6 +24300,14 @@ "path-exists": "^3.0.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -23007,9 +24324,9 @@ } }, "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -23078,23 +24395,13 @@ } }, "postcss-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.0.tgz", - "integrity": "sha512-IDyttebFzTSY6DI24KuHUcBjbAev1i+RyICoPEWcAstZsj03r533uMXtDn506l6/wlsRYiS5XBdx7TpccCsyUg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", "requires": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", "semver": "^7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "postcss-merge-idents": { @@ -23107,9 +24414,9 @@ } }, "postcss-merge-longhand": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.5.tgz", - "integrity": "sha512-NOG1grw9wIO+60arKa2YYsrbgvP6tp+jqc7+ZD5/MalIw234ooH2C6KlR6FEn4yle7GqZoBxSK1mLBE9KPur6w==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", "requires": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.0" @@ -23209,17 +24516,17 @@ } }, "postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "requires": { "postcss-value-parser": "^4.2.0" } @@ -23267,9 +24574,9 @@ } }, "postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "requires": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" @@ -23310,11 +24617,11 @@ } }, "postcss-sort-media-queries": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz", - "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", + "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", "requires": { - "sort-css-media-queries": "2.0.4" + "sort-css-media-queries": "2.1.0" } }, "postcss-svgo": { @@ -23365,7 +24672,7 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { "version": "2.3.1", @@ -23388,27 +24695,21 @@ "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" }, "prism-react-renderer": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz", - "integrity": "sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", "requires": {} }, "prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" }, "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==" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "devOptional": true - }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -23427,13 +24728,13 @@ } }, "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" } }, "property-information": { @@ -23472,7 +24773,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "pupa": { "version": "2.1.1", @@ -23488,9 +24789,9 @@ "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { "side-channel": "^1.0.4" } @@ -23519,7 +24820,7 @@ "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" }, "raw-body": { "version": "2.5.1", @@ -23553,7 +24854,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" } } }, @@ -23575,7 +24876,7 @@ "react-base16-styling": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "requires": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", @@ -23584,12 +24885,12 @@ } }, "react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", "requires": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" } }, "react-dev-utils": { @@ -23623,43 +24924,10 @@ "text-table": "^0.2.0" }, "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, "loader-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } } } }, @@ -23734,15 +25002,14 @@ } }, "react-router": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.3.tgz", - "integrity": "sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "requires": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.2", "react-is": "^16.6.0", @@ -23759,15 +25026,15 @@ } }, "react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "requires": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.3.3", + "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" } @@ -23816,17 +25083,17 @@ "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "requires": { "resolve": "^1.1.6" } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.5" } }, "regenerate": { @@ -23835,17 +25102,17 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" }, "regenerator-transform": { "version": "0.15.0", @@ -23873,24 +25140,24 @@ "devOptional": true }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "registry-url": { @@ -23902,14 +25169,14 @@ } }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -23917,78 +25184,14 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, - "hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "requires": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - }, - "dependencies": { - "unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" }, "remark-emoji": { "version": "2.2.0", @@ -24043,10 +25246,71 @@ "source-map": "^0.5.0" } }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } } } }, @@ -24082,25 +25346,49 @@ } }, "remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", + "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", "dev": true, "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + } } }, "renderkid": { @@ -24115,6 +25403,51 @@ "strip-ansi": "^6.0.1" }, "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -24131,7 +25464,7 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, "require-from-string": { "version": "2.0.2", @@ -24141,20 +25474,21 @@ "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { @@ -24170,7 +25504,7 @@ "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "requires": { "lowercase-keys": "^1.0.0" } @@ -24207,41 +25541,6 @@ "picocolors": "^1.0.0", "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } } }, "run-parallel": { @@ -24253,17 +25552,37 @@ } }, "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", "requires": { "tslib": "^2.1.0" } }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, "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==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } }, "safer-buffer": { "version": "2.1.2", @@ -24285,12 +25604,12 @@ } }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" } }, @@ -24306,20 +25625,20 @@ "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "requires": { "node-forge": "^1" } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } @@ -24409,17 +25728,12 @@ "range-parser": "1.2.0" }, "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "mime-db": "~1.33.0" + "brace-expansion": "^1.1.7" } }, "path-to-regexp": { @@ -24432,7 +25746,7 @@ "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -24485,7 +25799,7 @@ "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, @@ -24503,7 +25817,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { "version": "1.2.0", @@ -24537,9 +25851,9 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" }, "shelljs": { "version": "0.8.5", @@ -24590,6 +25904,13 @@ "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" + }, + "dependencies": { + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + } } }, "slash": { @@ -24597,17 +25918,6 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "devOptional": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -24619,19 +25929,14 @@ } }, "sort-css-media-queries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz", - "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==" - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { "version": "1.0.2", @@ -24639,19 +25944,12 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "space-separated-tokens": { @@ -24687,7 +25985,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "stable": { "version": "0.1.8", @@ -24705,9 +26003,9 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "std-env": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.0.1.tgz", - "integrity": "sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", + "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" }, "string_decoder": { "version": "1.3.0", @@ -24715,13 +26013,6 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "string-replace-loader": { @@ -24732,22 +26023,43 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } } } }, @@ -24765,14 +26077,6 @@ "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.4.1", "side-channel": "^1.0.4" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - } } }, "string.prototype.trimend": { @@ -24784,18 +26088,6 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.19.5" - }, - "dependencies": { - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - } } }, "string.prototype.trimstart": { @@ -24803,33 +26095,28 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "dependencies": { - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - } + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", "dev": true, "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "dependencies": { + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true + } } }, "stringify-object": { @@ -24853,7 +26140,7 @@ "strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" }, "strip-final-newline": { "version": "2.0.0", @@ -24883,20 +26170,18 @@ } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - } + "has-flag": "^4.0.0" } }, + "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==" + }, "svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -24920,51 +26205,62 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" } } }, "synckit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.4.1.tgz", - "integrity": "sha512-ngUh0+s+DOqEc0sGnrLaeNjbXp0CWHjSGFBqPlQmQ+oN/OfoDoYDBXPh+b4qs1M5QTk5nuQ3AmVz9+2xiY/ldw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", + "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", "dev": true, "requires": { - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "devOptional": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "devOptional": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "devOptional": true - } + "@pkgr/utils": "^2.3.1", + "tslib": "^2.4.0" } }, "tapable": { @@ -24973,9 +26269,9 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -24991,21 +26287,51 @@ } }, "terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "requires": { - "@jridgewell/trace-mapping": "^0.3.7", + "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" + "terser": "^5.14.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "thenify": { "version": "3.3.1", @@ -25019,7 +26345,7 @@ "thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" @@ -25040,10 +26366,20 @@ "next-tick": "1" } }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, "tiny-warning": { "version": "1.0.3", @@ -25053,7 +26389,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-readable-stream": { "version": "1.0.0", @@ -25071,7 +26407,7 @@ "toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, "toidentifier": { "version": "1.0.1", @@ -25086,12 +26422,12 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" }, "trim-trailing-lines": { "version": "1.1.4", @@ -25124,9 +26460,9 @@ } }, "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" }, "type-is": { "version": "1.6.18", @@ -25135,6 +26471,21 @@ "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + } } }, "typedarray-to-buffer": { @@ -25146,14 +26497,14 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" }, "unbox-primitive": { "version": "1.0.2", @@ -25165,14 +26516,6 @@ "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - } } }, "unherit": { @@ -25204,14 +26547,14 @@ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "requires": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -25219,6 +26562,28 @@ "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "dependencies": { + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } } }, "unique-string": { @@ -25249,6 +26614,15 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" }, + "unist-util-position-from-estree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", + "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, "unist-util-remove": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", @@ -25300,7 +26674,16 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } }, "update-notifier": { "version": "5.1.0", @@ -25343,6 +26726,26 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -25364,9 +26767,9 @@ } }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" }, @@ -25386,12 +26789,37 @@ "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "requires": { "prepend-http": "^2.0.0" } @@ -25419,12 +26847,12 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, "utility-types": { "version": "3.10.0", @@ -25434,18 +26862,32 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "devOptional": true + "uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "dependencies": { + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + } + } }, "value-equal": { "version": "1.0.1", @@ -25455,17 +26897,29 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", + "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", + "dev": true, "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + } } }, "vfile-location": { @@ -25474,12 +26928,24 @@ "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" }, "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", + "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "dev": true, "requires": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "unist-util-stringify-position": "^3.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + } } }, "wait-on": { @@ -25495,9 +26961,9 @@ } }, "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -25524,23 +26990,23 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", + "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", + "enhanced-resolve": "^5.10.0", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -25553,7 +27019,7 @@ "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "dependencies": { @@ -25562,21 +27028,49 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, - "enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } }, "webpack-bundle-analyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", - "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", + "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", "requires": { "acorn": "^8.0.4", "acorn-walk": "^8.0.0", @@ -25632,6 +27126,19 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -25651,14 +27158,15 @@ } }, "webpack-dev-server": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.1.tgz", - "integrity": "sha512-CTMfu2UMdR/4OOZVHRpdy84pNopOuigVIsRbGX3LVDMWNP8EUgC5mUBMErbwBlHTEX99ejZJpVqrir6EXAEajA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", "requires": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", "@types/ws": "^8.5.1", "ansi-html-community": "^0.0.8", @@ -25666,7 +27174,7 @@ "chokidar": "^3.5.3", "colorette": "^2.0.10", "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", + "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", @@ -25677,7 +27185,7 @@ "p-retry": "^4.5.0", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", + "selfsigned": "^2.1.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", @@ -25721,9 +27229,9 @@ } }, "ws": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", - "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", "requires": {} } } @@ -25771,7 +27279,7 @@ "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -25804,31 +27312,6 @@ "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "requires": { "string-width": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } } }, "wildcard": { @@ -25858,19 +27341,9 @@ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, "strip-ansi": { "version": "7.0.1", @@ -25885,7 +27358,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", @@ -25899,9 +27372,9 @@ } }, "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "requires": {} }, "xdg-basedir": { diff --git a/docs/package.json b/docs/package.json index b2833c309fb..a6582472a72 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^2.0.0-beta.21", - "@docusaurus/preset-classic": "^2.0.0-beta.21", + "@docusaurus/core": "^2.1.0", + "@docusaurus/preset-classic": "^2.1.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.18", @@ -43,16 +43,16 @@ ] }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.0.0-beta.21", - "@docusaurus/types": "^2.0.0-beta.21", + "@docusaurus/module-type-aliases": "^2.1.0", + "@docusaurus/types": "^2.1.0", "@tsconfig/docusaurus": "^1.0.5", "@types/js-yaml": "^4.0.5", "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.5", "@types/react-router-dom": "^5.1.7", - "eslint": "^7.32.0", + "eslint": "^8.0.0", "eslint-config-prettier": "^8.5.0", - "eslint-plugin-mdx": "^1.17.0", + "eslint-plugin-mdx": "^2.0.5", "eslint-plugin-react": "^7.30.0", "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", From a02eb282717ccef4dfde175b0a6d74b5ed60a1c8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 26 Oct 2022 13:55:47 +0000 Subject: [PATCH 0538/1130] fix(docs): Move to `data-tooltip` for profiler. * Fix ESLint warning by using `data-` prefixed custom attr. --- docs/src/components/custom-board-form.js | 8 ++++---- docs/src/css/power-profiler.css | 12 ++++++------ docs/src/pages/power-profiler.js | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/src/components/custom-board-form.js b/docs/src/components/custom-board-form.js index 0279f6b1c4c..e8ae429454c 100644 --- a/docs/src/components/custom-board-form.js +++ b/docs/src/components/custom-board-form.js @@ -34,7 +34,7 @@ function CustomBoardForm({
    @@ -45,7 +45,7 @@ function CustomBoardForm({
    @@ -64,7 +64,7 @@ function CustomBoardForm({
    @@ -74,7 +74,7 @@ function CustomBoardForm({
    diff --git a/docs/src/css/power-profiler.css b/docs/src/css/power-profiler.css index 94c4a5dd0b6..a0c1892806b 100644 --- a/docs/src/css/power-profiler.css +++ b/docs/src/css/power-profiler.css @@ -26,12 +26,12 @@ font-size: 14px; } -span[tooltip] { +span[data-tooltip] { position: relative; } -span[tooltip]::before { - content: attr(tooltip); +span[data-tooltip]::before { + content: attr(data-tooltip); font-size: 13px; padding: 5px 10px; position: absolute; @@ -47,7 +47,7 @@ span[tooltip]::before { left: 50%; } -span[tooltip]::after { +span[data-tooltip]::after { content: ""; position: absolute; border-top: 8px solid var(--ifm-background-surface-color); @@ -62,12 +62,12 @@ span[tooltip]::after { left: 50%; } -span[tooltip]:hover::before { +span[data-tooltip]:hover::before { opacity: 1; visibility: visible; } -span[tooltip]:hover::after { +span[data-tooltip]:hover::after { opacity: 1; visibility: visible; } diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js index c909ec02ebb..d28886efb85 100644 --- a/docs/src/pages/power-profiler.js +++ b/docs/src/pages/power-profiler.js @@ -155,7 +155,7 @@ function PowerProfiler() {
    @@ -167,7 +167,7 @@ function PowerProfiler() {
    From 3353712bc1be89e9c239eeacbe51c163135fdeb7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 27 Oct 2022 03:53:28 +0000 Subject: [PATCH 0539/1130] fix(docs): `npm start` to work from Docker. * Listen on 0.0.0.0 so testing docs within our container works properly with port forwarding. --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index a6582472a72..7c933b032a3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "start": "docusaurus start", + "start": "docusaurus start --host 0.0.0.0", "build": "docusaurus build", "serve": "docusaurus serve", "swizzle": "docusaurus swizzle", From 4e1191312745597b2312fda3d53e079ace4ea7f3 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Fri, 28 Oct 2022 10:03:16 +0800 Subject: [PATCH 0540/1130] feat(docs): troubleshooting steps for macOS 13 Finder bug --- docs/docs/troubleshooting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 46901d15e0d..91c7d6d77b3 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -21,6 +21,10 @@ Variations of the warnings shown below occur when flashing the `.uf2` | :--------------------------------------------------------------------------: | | An example of the file transfer error on MacOS | +### MacOS Ventura error + +MacOS 13.0 (Ventura) Finder running on Apple silicon hardware may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. + ### CMake Error An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. From d393247e15210a424c3cfcae4cd1eb67195c6595 Mon Sep 17 00:00:00 2001 From: HookyQR Date: Mon, 31 Oct 2022 08:50:21 +0800 Subject: [PATCH 0541/1130] fix(display): Set bits per pixel and color depth on n!v --- app/boards/shields/nice_view/Kconfig.defconfig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig index 622c7498376..a699a81394e 100644 --- a/app/boards/shields/nice_view/Kconfig.defconfig +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -17,6 +17,13 @@ config LS0XX config ZMK_WIDGET_WPM_STATUS default y if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + endif # ZMK_DISPLAY endif From a61eac91395a7e8f2695e76c7512fb97e0e13e11 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Tue, 1 Nov 2022 21:13:19 +0100 Subject: [PATCH 0542/1130] fix(behaviors): make tap dances work on a combo * Tap dance event handler goes after combos * Add test --- app/CMakeLists.txt | 2 +- .../tap-dance/6-combo-tap2/events.patterns | 2 ++ .../6-combo-tap2/keycode_events.snapshot | 7 +++++ .../6-combo-tap2/native_posix_64.keymap | 17 +++++++++++ app/tests/tap-dance/behavior_keymap.dtsi | 30 ++++++++++++------- 5 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 app/tests/tap-dance/6-combo-tap2/events.patterns create mode 100644 app/tests/tap-dance/6-combo-tap2/keycode_events.snapshot create mode 100644 app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 4b61fc72174..3da50b57e5d 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -47,13 +47,13 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) target_sources(app PRIVATE src/behaviors/behavior_outputs.c) - target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) target_sources(app PRIVATE src/behaviors/behavior_to_layer.c) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) target_sources(app PRIVATE src/behaviors/behavior_none.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources(app PRIVATE src/combo.c) + target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behavior_queue.c) target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/endpoints.c) diff --git a/app/tests/tap-dance/6-combo-tap2/events.patterns b/app/tests/tap-dance/6-combo-tap2/events.patterns new file mode 100644 index 00000000000..1768fc21062 --- /dev/null +++ b/app/tests/tap-dance/6-combo-tap2/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*on_tap_dance_binding/td_binding/p \ No newline at end of file diff --git a/app/tests/tap-dance/6-combo-tap2/keycode_events.snapshot b/app/tests/tap-dance/6-combo-tap2/keycode_events.snapshot new file mode 100644 index 00000000000..227d9cf2983 --- /dev/null +++ b/app/tests/tap-dance/6-combo-tap2/keycode_events.snapshot @@ -0,0 +1,7 @@ +td_binding_pressed: 4 created new tap dance +td_binding_pressed: 4 tap dance pressed +td_binding_released: 4 tap dance keybind released +td_binding_pressed: 4 tap dance pressed +td_binding_released: 4 tap dance keybind released +kp_pressed: usage_page 0x07 keycode 0x1F implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x1F implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap b/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap new file mode 100644 index 00000000000..72b6744ae44 --- /dev/null +++ b/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,200) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-dance/behavior_keymap.dtsi b/app/tests/tap-dance/behavior_keymap.dtsi index 5e95cd50574..ce80e958d23 100644 --- a/app/tests/tap-dance/behavior_keymap.dtsi +++ b/app/tests/tap-dance/behavior_keymap.dtsi @@ -3,7 +3,7 @@ #include / { - behaviors { + behaviors { ht: hold_tap { compatible = "zmk,behavior-hold-tap"; label = "HOLD_TAP"; @@ -47,14 +47,24 @@ }; }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + combos { + compatible = "zmk,combos"; - default_layer { - bindings = < - &tdm &tds - &tdb &td2>; - }; - }; + td_combo { + bindings = <&tdb>; + key-positions = <0 1>; + timeout-ms = <50>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &tdm &tds + &tdb &td2>; + }; + }; }; From 2364960f842f34d3c552cca358b7be62fbbf9988 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 22 Oct 2022 02:01:20 -0400 Subject: [PATCH 0543/1130] feat(shields): Add splitkb.com Aurora Sweep. --- .../splitkb_aurora_sweep/Kconfig.defconfig | 55 ++++++++++ .../splitkb_aurora_sweep/Kconfig.shield | 8 ++ .../boards/nice_nano.overlay | 31 ++++++ .../boards/nice_nano_v2.overlay | 31 ++++++ .../splitkb_aurora_sweep.conf | 9 ++ .../splitkb_aurora_sweep.dtsi | 80 ++++++++++++++ .../splitkb_aurora_sweep.keymap | 102 ++++++++++++++++++ .../splitkb_aurora_sweep.zmk.yml | 12 +++ .../splitkb_aurora_sweep_left.overlay | 48 +++++++++ .../splitkb_aurora_sweep_right.overlay | 51 +++++++++ 10 files changed, 427 insertions(+) create mode 100644 app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig create mode 100644 app/boards/shields/splitkb_aurora_sweep/Kconfig.shield create mode 100644 app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay create mode 100644 app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.conf create mode 100644 app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi create mode 100644 app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap create mode 100644 app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.zmk.yml create mode 100644 app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay create mode 100644 app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig new file mode 100644 index 00000000000..51fbc28c5c8 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SPLITKB_AURORA_SWEEP_LEFT + +config ZMK_KEYBOARD_NAME + default "Aurora Sweep" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # SHIELD_SPLITKB_AURORA_SWEEP_LEFT + +if SHIELD_SPLITKB_AURORA_SWEEP_LEFT || SHIELD_SPLITKB_AURORA_SWEEP_RIGHT + +config ZMK_SPLIT + default y + +config ZMK_RGB_UNDERGLOW + select WS2812_STRIP + select SPI + +config ZMK_DISPLAY + +if ZMK_DISPLAY + +config SSD1306 + default y + +config I2C + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif # SHIELD_SPLITKB_AURORA_SWEEP_LEFT || SHIELD_SPLITKB_AURORA_SWEEP_RIGHT diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield b/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield new file mode 100644 index 00000000000..abb05282eda --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITKB_AURORA_SWEEP_LEFT + def_bool $(shields_list_contains,splitkb_aurora_sweep_left) + +config SHIELD_SPLITKB_AURORA_SWEEP_RIGHT + def_bool $(shields_list_contains,splitkb_aurora_sweep_right) diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay new file mode 100644 index 00000000000..0087208cf17 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay @@ -0,0 +1,31 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..0087208cf17 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay @@ -0,0 +1,31 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.conf b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.conf new file mode 100644 index 00000000000..bb2b843ddfd --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.conf @@ -0,0 +1,9 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Kyria OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi new file mode 100644 index 00000000000..a999df6a073 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; + map = < + RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) + RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) + RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,1) RC(3,0) RC(3,5) RC(3,6) + >; + }; + + left_encoder1: left_encoder1 { + compatible = "alps,ec11"; + label = "L_ENCODER1"; + resolution = <4>; + status = "disabled"; + }; + + left_encoder2: left_encoder2 { + compatible = "alps,ec11"; + label = "L_ENCODER2"; + resolution = <4>; + status = "disabled"; + }; + + right_encoder1: right_encoder1 { + compatible = "alps,ec11"; + label = "R_ENCODER1"; + resolution = <4>; + status = "disabled"; + }; + + right_encoder2: right_encoder2 { + compatible = "alps,ec11"; + label = "R_ENCODER2"; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder1 &right_encoder1>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap new file mode 100644 index 00000000000..136e6927f47 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + + +&mt { + // flavor = "tap-preferred"; + // tapping_term_ms = <200>; +}; + +/ { + + combos { + compatible = "zmk,combos"; + combo_esc { + timeout-ms = <50>; + key-positions = <0 1>; + bindings = <&kp ESC>; + }; + + combo_tab { + timeout-ms = <50>; + key-positions = <10 11>; + bindings = <&kp TAB>; + }; + + combo_ralt { + timeout-ms = <50>; + key-positions = <17 16>; + bindings = <&kp RALT>; + }; + + combo_lalt { + timeout-ms = <50>; + key-positions = <11 12>; + bindings = <&kp LALT>; + }; + + combo_lgui { + timeout-ms = <50>; + key-positions = <12 13>; + bindings = <&kp LGUI>; + }; + + + combo_rgui { + timeout-ms = <50>; + key-positions = <17 18>; + bindings = <&kp RGUI>; + }; + + + + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT + &mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET + &mo 1 &kp LCTL &kp SPC &mo 2 + >; + }; + + left_layer { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL + &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL + &mo 1 &kp LGUI &kp RGUI &mo 2 + >; + }; + + right_layer { + bindings = < + &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN + &kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP + &kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT + &mo 3 &kp LCTL &kp SPC &mo 2 + >; + }; + + tri_layer { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans + &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans + &trans &trans &trans &trans + >; + }; + + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.zmk.yml b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.zmk.yml new file mode 100644 index 00000000000..97d3c53b55d --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: splitkb_aurora_sweep +name: splitkb.com Aurora Sweep +type: shield +url: https://splitkb.com/products/aurora-sweep-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys +siblings: + - splitkb_aurora_sweep_left + - splitkb_aurora_sweep_right diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay new file mode 100644 index 00000000000..3dc954c33a9 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_sweep.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; +}; + +&left_encoder1 { + status = "okay"; + a-gpios = <&pro_micro 9 GPIO_PULL_UP>; + b-gpios = <&pro_micro 8 GPIO_PULL_UP>; +}; + +&left_encoder2 { + status = "okay"; + a-gpios = <&pro_micro 14 GPIO_PULL_UP>; + b-gpios = <&pro_micro 16 GPIO_PULL_UP>; +}; + diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay new file mode 100644 index 00000000000..3811423eeee --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_sweep.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; +}; + +&right_encoder1 { + status = "okay"; + a-gpios = <&pro_micro 16 GPIO_PULL_UP>; + b-gpios = <&pro_micro 10 GPIO_PULL_UP>; +}; + +&right_encoder2 { + status = "okay"; + a-gpios = <&pro_micro 20 GPIO_PULL_UP>; + b-gpios = <&pro_micro 4 GPIO_PULL_UP>; +}; + +&default_transform { + col-offset = <5>; +}; From 9847a4c5d597cce84f41455d1990c5338d5bac34 Mon Sep 17 00:00:00 2001 From: Terence Stenvold Date: Wed, 9 Nov 2022 21:56:22 +0100 Subject: [PATCH 0544/1130] fix(docs): copy error not exclusive to Apple silicon --- docs/docs/troubleshooting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 91c7d6d77b3..6944135ea08 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -23,7 +23,7 @@ Variations of the warnings shown below occur when flashing the `.uf2` ### MacOS Ventura error -MacOS 13.0 (Ventura) Finder running on Apple silicon hardware may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. +MacOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. ### CMake Error From c7d83fb951528c825a8c3a221b7b9659c60034d8 Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Wed, 9 Nov 2022 21:38:08 -0500 Subject: [PATCH 0545/1130] fix(docs): changed MacOS to macOS as per Apple styling --- docs/docs/development/usb-logging.md | 2 +- docs/docs/troubleshooting.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.md index cd1d834d06c..9a2980ae6c8 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.md @@ -68,7 +68,7 @@ If you already have the Ardunio IDE installed you can also use its built-in Seri -On MacOS, the device name is something like `/dev/tty.usbmodemXXXXX` where `XXXXX` is some numerical ID. +On macOS, the device name is something like `/dev/tty.usbmodemXXXXX` where `XXXXX` is some numerical ID. You can connect to the device with [tio](https://tio.github.io/) (can be installed via [Homebrew](https://formulae.brew.sh/formula/tio)): ``` diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 6944135ea08..a535a4ef145 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -19,11 +19,11 @@ Variations of the warnings shown below occur when flashing the `.uf2` | ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/mac.png) | | :--------------------------------------------------------------------------: | -| An example of the file transfer error on MacOS | +| An example of the file transfer error on macOS | -### MacOS Ventura error +### macOS Ventura error -MacOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. +macOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. ### CMake Error From a9048956b500e1104bed69038b4a32c2c1e9b7ff Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 3 Nov 2022 16:16:14 -0400 Subject: [PATCH 0546/1130] feat(shields): Add splitkb.com Aurora Corne. --- .../splitkb_aurora_corne/Kconfig.defconfig | 55 +++++++++++ .../splitkb_aurora_corne/Kconfig.shield | 8 ++ .../boards/nice_nano.overlay | 31 +++++++ .../boards/nice_nano_v2.overlay | 31 +++++++ .../splitkb_aurora_corne.conf | 9 ++ .../splitkb_aurora_corne.dtsi | 92 +++++++++++++++++++ .../splitkb_aurora_corne.keymap | 56 +++++++++++ .../splitkb_aurora_corne.zmk.yml | 12 +++ .../splitkb_aurora_corne_left.overlay | 42 +++++++++ .../splitkb_aurora_corne_right.overlay | 48 ++++++++++ 10 files changed, 384 insertions(+) create mode 100644 app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig create mode 100644 app/boards/shields/splitkb_aurora_corne/Kconfig.shield create mode 100644 app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay create mode 100644 app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.conf create mode 100644 app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi create mode 100644 app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap create mode 100644 app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.zmk.yml create mode 100644 app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay create mode 100644 app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig new file mode 100644 index 00000000000..5a1eeb13b6d --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SPLITKB_AURORA_CORNE_LEFT + +config ZMK_KEYBOARD_NAME + default "Aurora Corne" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # SHIELD_SPLITKB_AURORA_CORNE_LEFT + +if SHIELD_SPLITKB_AURORA_CORNE_LEFT || SHIELD_SPLITKB_AURORA_CORNE_RIGHT + +config ZMK_SPLIT + default y + +config ZMK_RGB_UNDERGLOW + select WS2812_STRIP + select SPI + +config ZMK_DISPLAY + +if ZMK_DISPLAY + +config SSD1306 + default y + +config I2C + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif # SHIELD_SPLITKB_AURORA_CORNE_LEFT || SHIELD_SPLITKB_AURORA_CORNE_RIGHT diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.shield b/app/boards/shields/splitkb_aurora_corne/Kconfig.shield new file mode 100644 index 00000000000..3de10105976 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITKB_AURORA_CORNE_LEFT + def_bool $(shields_list_contains,splitkb_aurora_corne_left) + +config SHIELD_SPLITKB_AURORA_CORNE_RIGHT + def_bool $(shields_list_contains,splitkb_aurora_corne_right) diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay new file mode 100644 index 00000000000..0087208cf17 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay @@ -0,0 +1,31 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..0087208cf17 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay @@ -0,0 +1,31 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.conf b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.conf new file mode 100644 index 00000000000..bb2b843ddfd --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.conf @@ -0,0 +1,9 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Kyria OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi new file mode 100644 index 00000000000..aa52594882e --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "L_ENCODER"; + resolution = <4>; + status = "disabled"; + + a-gpios = <&pro_micro 4 GPIO_PULL_UP>; + b-gpios = <&pro_micro 5 GPIO_PULL_UP>; + }; + + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "R_ENCODER"; + resolution = <4>; + status = "disabled"; + + a-gpios = <&pro_micro 19 GPIO_PULL_UP>; + b-gpios = <&pro_micro 18 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap new file mode 100644 index 00000000000..53218a860c6 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | ESC | +// | GUI | LWR | SPC | | ENT | RSE | ALT | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ESC + &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT + >; + }; + lower_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | +// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | +// | SHFT | | | | | | | | | | | | | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans + &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; + + raise_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | +// | CTRL | | | | | | | - | = | [ | ] | \ | ` | +// | SHFT | | | | | | | _ | + | { | } | "|" | ~ | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC + &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE + &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.zmk.yml b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.zmk.yml new file mode 100644 index 00000000000..cc14182696d --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: splitkb_aurora_corne +name: splitkb.com Aurora Corne +type: shield +url: https://splitkb.com/products/aurora-corne-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys +siblings: + - splitkb_aurora_corne_left + - splitkb_aurora_corne_right diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay new file mode 100644 index 00000000000..864321cc156 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_corne.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&left_encoder { + status = "okay"; +}; + + diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay new file mode 100644 index 00000000000..b4c4b438dee --- /dev/null +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_corne.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&right_encoder { + status = "okay"; +}; + +&default_transform { + col-offset = <5>; +}; + +&five_column_transform { + col-offset = <6>; +}; From 1e98ea0afbbcc9bc8bcb1057a5290e0d4b1d594e Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Fri, 11 Nov 2022 08:48:16 +0800 Subject: [PATCH 0547/1130] fix(ci): Refactor west build step --- .github/workflows/build-user-config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 3833abe80f7..3d89ed7b321 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -99,8 +99,7 @@ jobs: - name: West Build (${{ env.display_name }}) shell: sh -x {0} - run: | - west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} + run: west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file run: grep -v -e "^#" -e "^$" build/zephyr/.config | sort From 768fc4a5e54fd11229a4f9c3f07eadc4d00da955 Mon Sep 17 00:00:00 2001 From: jhorology Date: Sat, 5 Nov 2022 05:47:16 +0900 Subject: [PATCH 0548/1130] fix: HID report descriptor --- app/include/zmk/hid.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 0f9cfe2e77f..01104d1cd7d 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -52,7 +52,7 @@ static const uint8_t zmk_hid_report_desc[] = { HID_INPUT(0x02), #elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) HID_LOGICAL_MIN8(0x00), - HID_LOGICAL_MAX8(0xFF), + HID_LOGICAL_MAX16(0xFF, 0x00), HID_USAGE_MIN8(0x00), HID_USAGE_MAX8(0xFF), HID_REPORT_SIZE(0x08), From 6e7c2a08a26d011512edb76d63c6f96ff081e0be Mon Sep 17 00:00:00 2001 From: Michael Anthony <5498095+manthonygfp@users.noreply.github.com> Date: Mon, 14 Nov 2022 15:58:28 -0700 Subject: [PATCH 0549/1130] fix(docs): Update link to Zephyr led docs * Change Zephyr gpio-leds link to 3.0.0 --- docs/docs/config/backlight.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md index a3650766578..8084be8953d 100644 --- a/docs/docs/config/backlight.md +++ b/docs/docs/config/backlight.md @@ -34,7 +34,7 @@ Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/build/dts/int See the Zephyr devicetree bindings for LED drivers: -- [gpio-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/gpio/gpio-leds.html) +- [gpio-leds](https://docs.zephyrproject.org/3.0.0/reference/devicetree/bindings/gpio/gpio-leds.html) - [pwm-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/led/pwm-leds.html) See the [backlight feature page](../features/backlight.md) for examples of the properties that must be set to enable backlighting. From 9f90dd1fc76feb272a856742b9f110ec352c0c8a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 17 Nov 2022 23:25:11 -0500 Subject: [PATCH 0550/1130] fix(boards): Fix XIAO BLE voltage divider config. * Use proper resistor value for the `output-ohms` property. --- app/boards/seeeduino_xiao_ble.overlay | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index 0f5df9993ac..452786d1901 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -16,7 +16,7 @@ label = "BATTERY"; io-channels = <&adc 7>; power-gpios = <&gpio0 14 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; - output-ohms = <1000000>; + output-ohms = <510000>; full-ohms = <(1000000 + 510000)>; }; }; From c7fdce863ac2f03bc70495f9904b127f2d99d85c Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Wed, 16 Nov 2022 17:00:39 -0500 Subject: [PATCH 0551/1130] fix(usb): add USB_DC_CLEAR_HALT to supported states See https://manpages.debian.org/testing/linux-manual-4.9/usb_clear_halt.9 for information on halted USB endpoints --- app/src/usb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/usb.c b/app/src/usb.c index aa2d3e754dc..146e7bb7ed9 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -34,6 +34,7 @@ enum zmk_usb_conn_state zmk_usb_get_conn_state() { case USB_DC_SUSPEND: case USB_DC_CONFIGURED: case USB_DC_RESUME: + case USB_DC_CLEAR_HALT: return ZMK_USB_CONN_HID; case USB_DC_DISCONNECTED: From 5cd608cb6016729f115591145a234faec77da3f4 Mon Sep 17 00:00:00 2001 From: Nick Coutsos Date: Thu, 24 Nov 2022 20:02:44 -0500 Subject: [PATCH 0552/1130] fix(docs): Correct syntax in capsword mods --- docs/docs/behaviors/caps-word.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index 1b743a595e2..e85d7ecae98 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -43,7 +43,7 @@ In addition, if you would like _multiple_ modifiers, instead of just `MOD_LSFT`, ``` &caps_word { - mods = ; + mods = <(MOD_LSFT | MOD_LALT)>; }; / { From 4d0e0fa34b379584dea17a40c5fed4eb1d64e76b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 03:29:20 +0000 Subject: [PATCH 0553/1130] chore(deps): bump loader-utils from 2.0.3 to 2.0.4 in /docs Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4. - [Release notes](https://github.com/webpack/loader-utils/releases) - [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md) - [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4) --- updated-dependencies: - dependency-name: loader-utils dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 61af445c220..69ee0fc4d9a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9278,9 +9278,9 @@ } }, "node_modules/loader-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz", - "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -12521,9 +12521,9 @@ } }, "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", "engines": { "node": ">= 12.13.0" } @@ -22735,9 +22735,9 @@ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz", - "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -24925,9 +24925,9 @@ }, "dependencies": { "loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" } } }, From 6550c043c49fcd4db9e213c324f016e622f12d54 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Sat, 26 Nov 2022 13:02:28 +0800 Subject: [PATCH 0554/1130] refactor: Update cradio keymap with better indentation and additional features --- app/boards/shields/cradio/cradio.keymap | 178 ++++++++++++------------ 1 file changed, 90 insertions(+), 88 deletions(-) diff --git a/app/boards/shields/cradio/cradio.keymap b/app/boards/shields/cradio/cradio.keymap index ec5e0e7a5dd..587bc7aa450 100644 --- a/app/boards/shields/cradio/cradio.keymap +++ b/app/boards/shields/cradio/cradio.keymap @@ -1,102 +1,104 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ +// Copyright (c) 2022 The ZMK Contributors +// SPDX-License-Identifier: MIT #include #include #include +// Home row mods macro +#define HRML(k1,k2,k3,k4) &ht LSHFT k1 &ht LALT k2 &ht LCTRL k3 &ht LGUI k4 +#define HRMR(k1,k2,k3,k4) &ht RGUI k1 &ht RCTRL k2 &ht RALT k3 &ht RSHFT k4 -&mt { - // flavor = "tap-preferred"; - // tapping_term_ms = <200>; -}; - -/ { - - combos { - compatible = "zmk,combos"; - combo_esc { - timeout-ms = <50>; - key-positions = <0 1>; - bindings = <&kp ESC>; - }; - - combo_tab { - timeout-ms = <50>; - key-positions = <10 11>; - bindings = <&kp TAB>; +/ { + behaviors { + ht: hold_tap { + label = "hold_tap"; + compatible = "zmk,behavior-hold-tap"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <220>; + quick-tap-ms = <150>; + global-quick-tap; + bindings = <&kp>, <&kp>; }; - - combo_ralt { - timeout-ms = <50>; - key-positions = <17 16>; - bindings = <&kp RALT>; + }; + + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; }; - - combo_lalt { - timeout-ms = <50>; - key-positions = <11 12>; - bindings = <&kp LALT>; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ + //│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ' " │ + HRML(A, S, D, F) &kp G &kp H HRMR(J, K, L, SQT) + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ Z │ X │ C │ V │ B │ │ N │ M │ , < │ . > │ / ? │ + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH + //╰──────────┴──────────┴──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┴──────────┴──────────╯ + < 2 TAB &kp ENTER &kp SPACE < 1 BSPC + // ╰──────────┴──────────╯ ╰──────────┴──────────╯ + >; }; - - combo_lgui { - timeout-ms = <50>; - key-positions = <12 13>; - bindings = <&kp LGUI>; + + right_layer { + bindings = < + //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ + //│ INSERT │ 1 │ 2 │ 3 │ │ │ HOME │ PAGE DN │ PAGE UP │ END │ : │ + &kp INS &kp N1 &kp N2 &kp N3 &trans &kp HOME &kp PG_DN &kp PG_UP &kp END &kp COLON + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ DELETE │ 4 │ 5 │ 6 │ │ │ LEFT │ DOWN │ UP │ RIGHT │ ; │ + &kp DEL &kp N4 &kp N5 &kp N6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &kp SEMI + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ CAPS │ 7 │ 8 │ 9 │ 0 │ │ │ │ │ │ │ + &caps_word &kp N7 &kp N8 &kp N9 &kp N0 &trans &trans &trans &trans &trans + //╰──────────┴──────────┴──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┴──────────┴──────────╯ + &trans &kp ESC &trans &trans + // ╰──────────┴──────────╯ ╰──────────┴──────────╯ + >; }; - - - combo_rgui { - timeout-ms = <50>; - key-positions = <17 18>; - bindings = <&kp RGUI>; + + left_layer { + bindings = < + //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ + //│ │ [ │ { │ } │ │ │ ^ │ ( │ ) │ ] │ ~ │ + &trans &kp LBKT &kp LBRC &kp RBRC &trans &kp CARET &kp LPAR &kp RPAR &kp RBKT &kp TILDE + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ ! │ @ │ # │ $ │ % │ │ * │ - │ = │ \ │ ` │ + &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp ASTRK &kp MINUS &kp EQUAL &kp BSLH &kp GRAVE + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ │ │ │ │ │ │ & │ _ │ + │ │ │ │ + &trans &trans &trans &trans &trans &kp AMPS &kp UNDER &kp PLUS &kp PIPE &trans + //╰──────────┴──────────┴──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┴──────────┴──────────╯ + &trans &trans &trans &trans + // ╰──────────┴──────────╯ ╰──────────┴──────────╯ + >; }; - - + tri_layer { + bindings = < + //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ + //│ RESET │ │ │ │PROFILE 0 │ │ │ │ │ │ RESET │ + &reset &trans &trans &trans &bt BT_SEL 0 &trans &trans &trans &trans &reset + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│BOOTLOADER│ │ │ │PROFILE 1 │ │ │ │ │ │BOOTLOADER│ + &bootloader &trans &trans &trans &bt BT_SEL 1 &trans &trans &trans &trans &bootloader + //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ + //│ │ │ │ CLEAR BT │PROFILE 2 │ │ │ │ │ │ │ + &trans &trans &trans &bt BT_CLR &bt BT_SEL 2 &trans &trans &trans &trans &trans + //╰──────────┴──────────┴──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┴──────────┴──────────╯ + &trans &trans &trans &trans + // ╰──────────┴──────────╯ ╰──────────┴──────────╯ + >; + }; }; - - keymap { - compatible = "zmk,keymap"; - - default_layer { - bindings = < - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P - &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT - &mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET - &mo 1 &kp LCTL &kp SPC &mo 2 - >; - }; - - left_layer { - bindings = < - &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 - &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL - &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL - &mo 1 &kp LGUI &kp RGUI &mo 2 - >; - }; - - right_layer { - bindings = < - &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN - &kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP - &kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT - &mo 3 &kp LCTL &kp SPC &mo 2 - >; - }; - - tri_layer { - bindings = < - &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans - &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans - &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans - &trans &trans &trans &trans - >; - }; - - }; }; From 001105e31844f0f59b82a2e71a4c3ada980b931b Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Wed, 30 Nov 2022 17:59:26 -0800 Subject: [PATCH 0555/1130] fix(docs): Correct typo in hold-tap comparison balanced flavor --- docs/docs/assets/hold-tap/comparison.svg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/assets/hold-tap/comparison.svg b/docs/docs/assets/hold-tap/comparison.svg index eef79f39927..5193d846828 100644 --- a/docs/docs/assets/hold-tap/comparison.svg +++ b/docs/docs/assets/hold-tap/comparison.svg @@ -70,8 +70,8 @@ - - + + @@ -83,7 +83,7 @@ - + @@ -124,8 +124,8 @@ - + - + From 593db8537826539eb8ee81f14e635d3ed1cbed0e Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Thu, 1 Dec 2022 12:34:22 -0600 Subject: [PATCH 0556/1130] feat(boards): Add support for nRF5340 DK Added overlays to support building for the nRF5340 development kit. Also added some documentation on how to build and flash ZMK for dual- chip Bluetooth configurations, with an example for the nRF5340. --- app/boards/nrf5340dk_nrf5340_cpuapp.conf | 15 +++++++++++++++ docs/docs/development/build-flash.md | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 app/boards/nrf5340dk_nrf5340_cpuapp.conf diff --git a/app/boards/nrf5340dk_nrf5340_cpuapp.conf b/app/boards/nrf5340dk_nrf5340_cpuapp.conf new file mode 100644 index 00000000000..a40195e3c6c --- /dev/null +++ b/app/boards/nrf5340dk_nrf5340_cpuapp.conf @@ -0,0 +1,15 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Default main stack size is too small for HCI RPMsg +CONFIG_MAIN_STACK_SIZE=2048 diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index 15b4acf7e2d..09006646f41 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -140,3 +140,23 @@ your board and run the following command to flash: ``` west flash ``` + +## Multi-CPU and Dual-Chip Bluetooth Boards + +Zephyr supports running the Bluetooth host and controller on separate processors. In such a configuration, ZMK always runs on the host processor, but you may need to build and flash separate firmware for the controller. Zephyr provides sample code which can be used as the controller firmware for Bluetooth HCI over [RPMsg](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_rpmsg/README.html), [SPI](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_spi/README.html), [UART](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_uart/README.html), and [USB](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_usb/README.html). See [Zephyr's Bluetooth Stack Architecture documentation](https://docs.zephyrproject.org/latest/connectivity/bluetooth/bluetooth-arch.html) for more details. + +The following documentation shows how to build and flash ZMK for boards that use a dual-chip configuration. + +### nRF5340 + +To build and flash the firmware for the nRF5340 development kit's network core, run the following command from the root of the ZMK repo: + +```sh +cd zephyr/samples/bluetooth/hci_rpmsg +west build -b nrf5340dk_nrf5340_cpunet +west flash +``` + +You can then build and flash ZMK firmware using the normal steps described above. The network core's firmware only needs to be updated whenever ZMK upgrades to a new version of Zephyr. + +For a custom nRF5340-based board, you will need to define two Zephyr boards: one for the application core and one for the network core. The [nRF5340 DK's board definition](https://github.com/zephyrproject-rtos/zephyr/tree/main/boards/arm/nrf5340dk_nrf5340) can be used as reference. Replace `nrf5340dk_nrf5340_cpunet` with the name of your network core board. From 6ccb5280c9e2ca23c633e7cd8113687994acd8c5 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Tue, 6 Dec 2022 00:25:00 -0600 Subject: [PATCH 0557/1130] fix(docs): Pin Zephyr docs links to a version Co-authored-by: Cem Aksoylar --- docs/docs/development/build-flash.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index 09006646f41..6f4ba84d23e 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -143,7 +143,7 @@ west flash ## Multi-CPU and Dual-Chip Bluetooth Boards -Zephyr supports running the Bluetooth host and controller on separate processors. In such a configuration, ZMK always runs on the host processor, but you may need to build and flash separate firmware for the controller. Zephyr provides sample code which can be used as the controller firmware for Bluetooth HCI over [RPMsg](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_rpmsg/README.html), [SPI](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_spi/README.html), [UART](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_uart/README.html), and [USB](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_usb/README.html). See [Zephyr's Bluetooth Stack Architecture documentation](https://docs.zephyrproject.org/latest/connectivity/bluetooth/bluetooth-arch.html) for more details. +Zephyr supports running the Bluetooth host and controller on separate processors. In such a configuration, ZMK always runs on the host processor, but you may need to build and flash separate firmware for the controller. Zephyr provides sample code which can be used as the controller firmware for Bluetooth HCI over [RPMsg](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_rpmsg/README.html), [SPI](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_spi/README.html), [UART](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_uart/README.html), and [USB](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_usb/README.html). See [Zephyr's Bluetooth Stack Architecture documentation](https://docs.zephyrproject.org/3.2.0/connectivity/bluetooth/bluetooth-arch.html) for more details. The following documentation shows how to build and flash ZMK for boards that use a dual-chip configuration. From 58eb7a3305b11e465505e60657479346bec32f53 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 29 Nov 2022 22:05:04 -0800 Subject: [PATCH 0558/1130] feat(display): Add config to show battery level in percentage --- app/src/display/widgets/Kconfig | 7 +++++++ app/src/display/widgets/battery_status.c | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/display/widgets/Kconfig b/app/src/display/widgets/Kconfig index 96e7e16d309..847a47abc2b 100644 --- a/app/src/display/widgets/Kconfig +++ b/app/src/display/widgets/Kconfig @@ -15,6 +15,13 @@ config ZMK_WIDGET_BATTERY_STATUS default y if BT select LVGL_USE_LABEL +if ZMK_WIDGET_BATTERY_STATUS + +config ZMK_WIDGET_BATTERY_STATUS_SHOW_PERCENTAGE + bool "Show battery level percentage in text" + +endif + config ZMK_WIDGET_OUTPUT_STATUS bool "Widget for keyboard output status icons" depends on BT && (!ZMK_SPLIT_BLE || ZMK_SPLIT_ROLE_CENTRAL) diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 9179b0d0b76..71b243d34ed 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -27,7 +27,7 @@ struct battery_status_state { }; static void set_battery_symbol(lv_obj_t *label, struct battery_status_state state) { - char text[8] = {}; + char text[9] = {}; uint8_t level = state.level; @@ -37,6 +37,11 @@ static void set_battery_symbol(lv_obj_t *label, struct battery_status_state stat } #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ +#if IS_ENABLED(CONFIG_ZMK_WIDGET_BATTERY_STATUS_SHOW_PERCENTAGE) + char perc[5] = {}; + snprintf(perc, sizeof(perc), "%3u%%", level); + strcat(text, perc); +#else if (level > 95) { strcat(text, LV_SYMBOL_BATTERY_FULL); } else if (level > 65) { @@ -48,6 +53,7 @@ static void set_battery_symbol(lv_obj_t *label, struct battery_status_state stat } else { strcat(text, LV_SYMBOL_BATTERY_EMPTY); } +#endif lv_label_set_text(label, text); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); } From 2a42fe658ee713cb93609c743e7bde3242d7aa7f Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Thu, 1 Dec 2022 15:58:31 -0800 Subject: [PATCH 0559/1130] feat(docs): Document battery widget percentage Kconfig --- docs/docs/config/displays.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/docs/config/displays.md b/docs/docs/config/displays.md index cf6c07ee46b..d126e38aa1e 100644 --- a/docs/docs/config/displays.md +++ b/docs/docs/config/displays.md @@ -14,13 +14,14 @@ Definition files: - [zmk/app/src/display/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/display/Kconfig) - [zmk/app/src/display/widgets/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/display/widgets/Kconfig) -| Config | Type | Description | Default | -| ---------------------------------- | ---- | ---------------------------------------------------- | ------- | -| `CONFIG_ZMK_DISPLAY` | bool | Enable support for displays | n | -| `CONFIG_ZMK_WIDGET_LAYER_STATUS` | bool | Enable a widget to show the highest, active layer | y | -| `CONFIG_ZMK_WIDGET_BATTERY_STATUS` | bool | Enable a widget to show battery charge information | y | -| `CONFIG_ZMK_WIDGET_OUTPUT_STATUS` | bool | Enable a widget to show the current output (USB/BLE) | y | -| `CONFIG_ZMK_WIDGET_WPM_STATUS` | bool | Enable a widget to show words per minute | n | +| Config | Type | Description | Default | +| -------------------------------------------------- | ---- | -------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_DISPLAY` | bool | Enable support for displays | n | +| `CONFIG_ZMK_WIDGET_LAYER_STATUS` | bool | Enable a widget to show the highest, active layer | y | +| `CONFIG_ZMK_WIDGET_BATTERY_STATUS` | bool | Enable a widget to show battery charge information | y | +| `CONFIG_ZMK_WIDGET_BATTERY_STATUS_SHOW_PERCENTAGE` | bool | If battery widget is enabled, show percentage instead of icons | n | +| `CONFIG_ZMK_WIDGET_OUTPUT_STATUS` | bool | Enable a widget to show the current output (USB/BLE) | y | +| `CONFIG_ZMK_WIDGET_WPM_STATUS` | bool | Enable a widget to show words per minute | n | If `CONFIG_ZMK_DISPLAY` is enabled, exactly zero or one of the following options must be set to `y`. The first option is used if none are set. From 12329b388e5bf7a60c16185d8f714a0596b681a7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 9 Dec 2022 17:07:45 -0500 Subject: [PATCH 0560/1130] feat(boards): Add Arduino Uno interconnect, nrf52840dk config. --- .../nrf52840dk_nrf52840.zmk.yml | 10 ++++++++++ .../interconnects/arduino_uno/arduino_uno.zmk.yml | 15 +++++++++++++++ app/boards/nrf52840dk_nrf52840.conf | 12 ++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 app/boards/arm/nrf52840dk_nrf52840/nrf52840dk_nrf52840.zmk.yml create mode 100644 app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml create mode 100644 app/boards/nrf52840dk_nrf52840.conf diff --git a/app/boards/arm/nrf52840dk_nrf52840/nrf52840dk_nrf52840.zmk.yml b/app/boards/arm/nrf52840dk_nrf52840/nrf52840dk_nrf52840.zmk.yml new file mode 100644 index 00000000000..2a0d99460d8 --- /dev/null +++ b/app/boards/arm/nrf52840dk_nrf52840/nrf52840dk_nrf52840.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrf52840dk_nrf52840 +name: Nordic nRF52840 DK +type: board +arch: arm +outputs: + - usb + - ble +url: https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dk +exposes: [arduino_uno] diff --git a/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml b/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml new file mode 100644 index 00000000000..8ec164eb23a --- /dev/null +++ b/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: arduino_uno +name: Arduino Uno Rev3 +type: interconnect +url: https://store-usa.arduino.cc/products/arduino-uno-rev3?selectedStore=us +manufacturer: Arduino +description: | + The Arduino Uno Rev3 is a board who's popularity lead to countless shields being developed for it. By + natural extension, once there were many shields designed for it, many other *boards* began to be developed + that were compatible to leverage the extensive available shields. Today, many dev kits come with Uno + headers to make it easy to work with them. + + Note: ZMK doesn't support boards with AVR 8-bit processors, such as the ATmega32U4, because Zephyr™ only + supports 32-bit and 64-bit platforms. As a result, boards like the original Arduino Uno Rev3 itself are + *not* supported by ZMK. diff --git a/app/boards/nrf52840dk_nrf52840.conf b/app/boards/nrf52840dk_nrf52840.conf new file mode 100644 index 00000000000..6c9bcdf134e --- /dev/null +++ b/app/boards/nrf52840dk_nrf52840.conf @@ -0,0 +1,12 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y From 63b29ccd3256e0f9e253591c560eb104082a920a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 13 Jun 2022 03:28:56 +0000 Subject: [PATCH 0561/1130] feat(shields): Add ZMK Uno shield. * Support underglow, backlight, display, encoder, etc. --- app/boards/shields/zmk_uno/Kconfig.defconfig | 23 +++ app/boards/shields/zmk_uno/Kconfig.shield | 5 + app/boards/shields/zmk_uno/zmk_uno.conf | 18 ++ app/boards/shields/zmk_uno/zmk_uno.keymap | 62 +++++++ app/boards/shields/zmk_uno/zmk_uno.overlay | 186 +++++++++++++++++++ app/boards/shields/zmk_uno/zmk_uno.zmk.yml | 10 + 6 files changed, 304 insertions(+) create mode 100644 app/boards/shields/zmk_uno/Kconfig.defconfig create mode 100644 app/boards/shields/zmk_uno/Kconfig.shield create mode 100644 app/boards/shields/zmk_uno/zmk_uno.conf create mode 100644 app/boards/shields/zmk_uno/zmk_uno.keymap create mode 100644 app/boards/shields/zmk_uno/zmk_uno.overlay create mode 100644 app/boards/shields/zmk_uno/zmk_uno.zmk.yml diff --git a/app/boards/shields/zmk_uno/Kconfig.defconfig b/app/boards/shields/zmk_uno/Kconfig.defconfig new file mode 100644 index 00000000000..11c63a5a005 --- /dev/null +++ b/app/boards/shields/zmk_uno/Kconfig.defconfig @@ -0,0 +1,23 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ZMK_UNO + +config ZMK_KEYBOARD_NAME + default "ZMK Uno" + +config ZMK_BACKLIGHT + select LED + select LED_GPIO + +config SHIELD_SSD1306_128X64 + select ZMK_DISPLAY + +config SHIELD_SSD1306_128X32 + select ZMK_DISPLAY + +config ZMK_RGB_UNDERGLOW + select WS2812_STRIP + select SPI + +endif diff --git a/app/boards/shields/zmk_uno/Kconfig.shield b/app/boards/shields/zmk_uno/Kconfig.shield new file mode 100644 index 00000000000..3f7331c3772 --- /dev/null +++ b/app/boards/shields/zmk_uno/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ZMK_UNO + def_bool $(shields_list_contains,zmk_uno) diff --git a/app/boards/shields/zmk_uno/zmk_uno.conf b/app/boards/shields/zmk_uno/zmk_uno.conf new file mode 100644 index 00000000000..cf282bac2cb --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno.conf @@ -0,0 +1,18 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_LOG=y +CONFIG_ZMK_LOG_LEVEL_DBG=y + +# Uncomment for Single color backlight +# CONFIG_ZMK_BACKLIGHT=y + +# Uncomment for RGB +# CONFIG_ZMK_RGB_UNDERGLOW=y + +# Uncomment for Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to enable encoder support +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/zmk_uno/zmk_uno.keymap b/app/boards/shields/zmk_uno/zmk_uno.keymap new file mode 100644 index 00000000000..7ab2632a272 --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno.keymap @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include +#include + +// Uncomment the following block if using the "Direct Wire" jumper to switch the matrix to a direct wire. + +/* :REMOVE ME + +&kscan_direct_comp { status = "okay"; }; +&kscan_direct { status = "okay"; }; +&kscan_matrix_comp { status = "disabled"; }; +&kscan_matrix { status = "disabled"; }; + +/ { + chosen { + zmk,matrix-transform = &direct_matrix_transform; + zmk,kscan = &kscan_direct_comp; + }; +}; + +REMOVE ME: */ + + +/ { + macros { + ZMK_MACRO(ble_zero, + wait-ms = <1>; + tap-ms = <1>; + bindings = <&out OUT_BLE &bt BT_SEL 0>; + ) + ZMK_MACRO(ble_one, + wait-ms = <1>; + tap-ms = <1>; + bindings = <&out OUT_BLE &bt BT_SEL 1>; + ) + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp A &bl BL_TOG + &rgb_ug RGB_EFF &bt BT_CLR + + &out OUT_USB &ble_zero &ble_one + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; +}; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay new file mode 100644 index 00000000000..f10d18af4a1 --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +&arduino_i2c { + status = "okay"; +}; + +&arduino_spi { + status = "okay"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "RGB"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <7>; /* 4 underglow + 3 per-key LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,kscan = &kscan_matrix_comp; + zmk,backlight = &backlight; + zmk,underglow = &led_strip; + zmk,matrix-transform = &matrix_transform; + }; + + // Commented out until we add more powerful power domain support + // external_power { + // compatible = "zmk,ext-power-generic"; + // label = "EXT_POWER"; + // init-delay-ms = <200>; + // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + // }; + + rgb_power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + // label = "RGB_POWER"; + init-delay-ms = <200>; + control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + }; + + backlight: gpioleds { + compatible = "gpio-leds"; + label = "Backlight LEDs"; + gpio_led_0 { + gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + }; + + matrix_transform: matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(1,0) RC(1,1) + RC(2,0) RC(2,1) RC(2,2) + >; + }; + + direct_matrix_transform: direct_matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(0,2) RC(0,3) + RC(1,0) RC(1,1) RC(1,2) + >; + }; + + kscan_matrix_comp: kscan_matrix_comp { + compatible = "zmk,kscan-composite"; + rows = <1>; + columns = <7>; + + label = "KSCAN_MATRIX_COMP"; + + matrix { + kscan = <&kscan_matrix>; + }; + + toggle { + kscan = <&kscan_sp3t_toggle>; + row-offset = <2>; + }; + + }; + + kscan_direct_comp: kscan_direct_comp { + compatible = "zmk,kscan-composite"; + + label = "KSCAN_DIRECT_COMP"; + status = "disabled"; + + matrix { + kscan = <&kscan_direct>; + }; + + toggle { + kscan = <&kscan_sp3t_toggle>; + row-offset = <1>; + }; + + }; + + kscan_matrix: kscan_matrix { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN_MATRIX"; + + diode-direction = "col2row"; + + col-gpios + = <&arduino_header 10 GPIO_ACTIVE_HIGH> + , <&arduino_header 9 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + kscan_direct: kscan_direct { + compatible = "zmk,kscan-gpio-direct"; + status = "disabled"; + + label = "KSCAN_DIRECT"; + + input-gpios + = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + + }; + + kscan_sp3t_toggle: kscan_sp3t_toggle { + compatible = "zmk,kscan-gpio-direct"; + toggle-mode; + + label = "KSCAN_TOGGLE"; + + input-gpios + = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + + encoder: encoder { + label = "ENCODER"; + resolution = <4>; + compatible = "alps,ec11"; + a-gpios = <&arduino_header 14 GPIO_PULL_UP>; + b-gpios = <&arduino_header 15 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder>; + }; + +}; diff --git a/app/boards/shields/zmk_uno/zmk_uno.zmk.yml b/app/boards/shields/zmk_uno/zmk_uno.zmk.yml new file mode 100644 index 00000000000..cee108facbf --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: zmk_uno +name: ZMK Uno +type: shield +url: https://github.com/zmkfirmware/zmk-uno +requires: [arduino_uno] +features: + - keys + - encoder + - display From 2b235ae281e886afde8aad968dd768cd9e71718a Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Sun, 11 Dec 2022 01:33:50 +0000 Subject: [PATCH 0562/1130] fix(boards): Add encoder config to bdn9_rev2.conf --- app/boards/arm/bdn9/bdn9_rev2.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/boards/arm/bdn9/bdn9_rev2.conf b/app/boards/arm/bdn9/bdn9_rev2.conf index 3691085392d..f6506a065d0 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.conf +++ b/app/boards/arm/bdn9/bdn9_rev2.conf @@ -1,5 +1,9 @@ # Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT +# Uncomment these lines below to enable encoders. +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + # Uncomment the line below to enable RGB. # CONFIG_ZMK_RGB_UNDERGLOW=y From 36ee1f4e0a7f28c9df150dfd731142eb039bb798 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 10 Dec 2022 21:50:57 -0600 Subject: [PATCH 0563/1130] fix(boards): Fix nRF5340 DK issues - Fixed a stack overflow when enabling Bluetooth. - Increased the I2C buffer size to support displays. --- app/boards/nrf5340dk_nrf5340_cpuapp.conf | 3 ++- app/boards/nrf5340dk_nrf5340_cpuapp.overlay | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 app/boards/nrf5340dk_nrf5340_cpuapp.overlay diff --git a/app/boards/nrf5340dk_nrf5340_cpuapp.conf b/app/boards/nrf5340dk_nrf5340_cpuapp.conf index a40195e3c6c..ccb0ddbaf40 100644 --- a/app/boards/nrf5340dk_nrf5340_cpuapp.conf +++ b/app/boards/nrf5340dk_nrf5340_cpuapp.conf @@ -11,5 +11,6 @@ CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y -# Default main stack size is too small for HCI RPMsg +# Default main and BLE stack sizes are too small for HCI RPMsg CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_ZMK_BLE_THREAD_STACK_SIZE=1024 diff --git a/app/boards/nrf5340dk_nrf5340_cpuapp.overlay b/app/boards/nrf5340dk_nrf5340_cpuapp.overlay new file mode 100644 index 00000000000..66d2332f1a2 --- /dev/null +++ b/app/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +&arduino_i2c { + // Default buffer size is too small for use with displays. + zephyr,concat-buf-size = <512>; +}; From 70aa4fa82456ab6a739c43aae36815804cb58d51 Mon Sep 17 00:00:00 2001 From: Kyle McCreery Date: Sat, 10 Dec 2022 23:01:37 -0500 Subject: [PATCH 0564/1130] feat(boards): Add PillBug board, blackpill interconnect. * Add blackbill interconnect metadata. * Add config/overlay for upstream blackpill boards to work with ZMK. * Add pillbug board. * Updated new shield docs. Co-authored-by: Cem Aksoylar --- .../blackpill_f401ce/blackpill_f401ce.zmk.yml | 9 ++ .../blackpill_f411ce/blackpill_f411ce.zmk.yml | 9 ++ app/boards/arm/pillbug/Kconfig | 7 + app/boards/arm/pillbug/Kconfig.board | 6 + app/boards/arm/pillbug/Kconfig.defconfig | 25 ++++ app/boards/arm/pillbug/blackpill_pins.dtsi | 50 +++++++ app/boards/arm/pillbug/board.cmake | 6 + app/boards/arm/pillbug/pillbug.dts | 132 ++++++++++++++++++ app/boards/arm/pillbug/pillbug.yaml | 15 ++ app/boards/arm/pillbug/pillbug.zmk.yml | 10 ++ app/boards/arm/pillbug/pillbug_defconfig | 22 +++ app/boards/blackpill_f401ce.conf | 7 + app/boards/blackpill_f401ce.overlay | 51 +++++++ app/boards/blackpill_f411ce.conf | 7 + app/boards/blackpill_f411ce.overlay | 51 +++++++ .../interconnects/blackpill/blackpill.zmk.yml | 8 ++ .../blackpill/blackpill-pins-labelled.png | Bin 0 -> 924160 bytes docs/docs/development/new-shield.md | 24 ++++ 18 files changed, 439 insertions(+) create mode 100644 app/boards/arm/blackpill_f401ce/blackpill_f401ce.zmk.yml create mode 100644 app/boards/arm/blackpill_f411ce/blackpill_f411ce.zmk.yml create mode 100644 app/boards/arm/pillbug/Kconfig create mode 100644 app/boards/arm/pillbug/Kconfig.board create mode 100644 app/boards/arm/pillbug/Kconfig.defconfig create mode 100644 app/boards/arm/pillbug/blackpill_pins.dtsi create mode 100644 app/boards/arm/pillbug/board.cmake create mode 100644 app/boards/arm/pillbug/pillbug.dts create mode 100644 app/boards/arm/pillbug/pillbug.yaml create mode 100644 app/boards/arm/pillbug/pillbug.zmk.yml create mode 100644 app/boards/arm/pillbug/pillbug_defconfig create mode 100644 app/boards/blackpill_f401ce.conf create mode 100644 app/boards/blackpill_f401ce.overlay create mode 100644 app/boards/blackpill_f411ce.conf create mode 100644 app/boards/blackpill_f411ce.overlay create mode 100644 app/boards/interconnects/blackpill/blackpill.zmk.yml create mode 100644 docs/docs/assets/blackpill/blackpill-pins-labelled.png diff --git a/app/boards/arm/blackpill_f401ce/blackpill_f401ce.zmk.yml b/app/boards/arm/blackpill_f401ce/blackpill_f401ce.zmk.yml new file mode 100644 index 00000000000..251d2c27231 --- /dev/null +++ b/app/boards/arm/blackpill_f401ce/blackpill_f401ce.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: blackpill_f401ce +name: BlackPill F401CE +type: board +arch: arm +outputs: + - usb +url: https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1 +exposes: [blackpill] diff --git a/app/boards/arm/blackpill_f411ce/blackpill_f411ce.zmk.yml b/app/boards/arm/blackpill_f411ce/blackpill_f411ce.zmk.yml new file mode 100644 index 00000000000..eaa714d69af --- /dev/null +++ b/app/boards/arm/blackpill_f411ce/blackpill_f411ce.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: blackpill_f411ce +name: BlackPill F411CE +type: board +arch: arm +outputs: + - usb +url: https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1 +exposes: [blackpill] diff --git a/app/boards/arm/pillbug/Kconfig b/app/boards/arm/pillbug/Kconfig new file mode 100644 index 00000000000..3d53e3244fd --- /dev/null +++ b/app/boards/arm/pillbug/Kconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_PILLBUG) diff --git a/app/boards/arm/pillbug/Kconfig.board b/app/boards/arm/pillbug/Kconfig.board new file mode 100644 index 00000000000..70232e18a72 --- /dev/null +++ b/app/boards/arm/pillbug/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_PILLBUG + bool "PillBug" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/pillbug/Kconfig.defconfig b/app/boards/arm/pillbug/Kconfig.defconfig new file mode 100644 index 00000000000..8657f8aea30 --- /dev/null +++ b/app/boards/arm/pillbug/Kconfig.defconfig @@ -0,0 +1,25 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_PILLBUG + +config BOARD + default "PillBug" + +if USB_DEVICE_STACK + +config USB_NRFX + default y + +endif # USB_DEVICE_STACK + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +endif # BOARD_PILLBUG diff --git a/app/boards/arm/pillbug/blackpill_pins.dtsi b/app/boards/arm/pillbug/blackpill_pins.dtsi new file mode 100644 index 00000000000..e7e351403c7 --- /dev/null +++ b/app/boards/arm/pillbug/blackpill_pins.dtsi @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 Kyle McCreery + * + * SPDX-License-Identifier: MIT + */ + +/ { + blackpill: connector { + compatible = "blackpill"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <2 0 &gpio0 9 0> /* PC13 */ + , <3 0 &gpio0 10 0> /* PC14 */ + , <4 0 &gpio1 6 0> /* PC15 */ + , <10 0 &gpio0 25 0> /* PA0 */ + , <11 0 &gpio0 5 0> /* PA1 */ + , <12 0 &gpio1 15 0> /* PA2 */ + , <13 0 &gpio0 2 0> /* PA3 */ + , <14 0 &gpio1 11 0> /* PA4 */ + , <15 0 &gpio1 8 0> /* PA5 */ + , <16 0 &gpio0 26 0> /* PA6 */ + , <17 0 &gpio0 11 0> /* PA7 */ + , <18 0 &gpio1 9 0> /* PB0 */ + , <19 0 &gpio1 14 0> /* PB1 */ + , <20 0 &gpio0 3 0> /* PB2 */ + , <21 0 &gpio0 31 0> /* PB10 */ + , <25 0 &gpio0 12 0> /* PB12 */ + , <26 0 &gpio0 19 0> /* PB13 */ + , <27 0 &gpio1 1 0> /* PB14 */ + , <28 0 &gpio0 29 0> /* PB15 */ + , <29 0 &gpio1 13 0> /* PA8 */ + , <30 0 &gpio0 6 0> /* PA9 */ + , <31 0 &gpio0 8 0> /* PA10 */ + , <38 0 &gpio1 0 0> /* PA15 */ + , <39 0 &gpio1 10 0> /* PB3 */ + , <40 0 &gpio1 2 0> /* PB4 */ + , <41 0 &gpio1 4 0> /* PB5 */ + , <42 0 &gpio0 13 0> /* PB6 */ + , <43 0 &gpio0 15 0> /* PB7 */ + , <45 0 &gpio0 17 0> /* PB8 */ + , <46 0 &gpio0 24 0> /* PB9 */ + ; + }; +}; + +blackpill_i2c: &i2c0 {}; +blackpill_spi: &spi1 {}; +blackpill_serial: &uart0 {}; diff --git a/app/boards/arm/pillbug/board.cmake b/app/boards/arm/pillbug/board.cmake new file mode 100644 index 00000000000..992f395d95f --- /dev/null +++ b/app/boards/arm/pillbug/board.cmake @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: MIT + +set(OPENOCD_NRF5_SUBFAMILY nrf52) +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/app/boards/arm/pillbug/pillbug.dts b/app/boards/arm/pillbug/pillbug.dts new file mode 100644 index 00000000000..85c5cccdc08 --- /dev/null +++ b/app/boards/arm/pillbug/pillbug.dts @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; + +#include +#include "blackpill_pins.dtsi" + +/ { + model = "PillBug"; + compatible = "pillbug"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 20 GPIO_ACTIVE_LOW>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; + init-delay-ms = <50>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <13>; +}; + +&spi1{ + status = "disabled"; + compatible = "nordic,nrf-spim"; + sck-pin = <40>; + mosi-pin = <11>; + miso-pin = <26>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + tx-pin = <6>; + rx-pin = <8>; +}; + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "mbr"; + reg = <0x00000000 0x00001000>; + }; + + code_partition: partition@1000 { + label = "code_partition"; + reg = <0x00001000 0x000d3000>; + }; + + /* + * The flash starting at 0x000d4000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@d4000 { + label = "storage"; + reg = <0x000d4000 0x00020000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/pillbug/pillbug.yaml b/app/boards/arm/pillbug/pillbug.yaml new file mode 100644 index 00000000000..50aa4486c87 --- /dev/null +++ b/app/boards/arm/pillbug/pillbug.yaml @@ -0,0 +1,15 @@ +identifier: pillbug +name: PillBug +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/pillbug/pillbug.zmk.yml b/app/boards/arm/pillbug/pillbug.zmk.yml new file mode 100644 index 00000000000..5df11b9e04d --- /dev/null +++ b/app/boards/arm/pillbug/pillbug.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: pillbug +name: PillBug +type: board +arch: arm +outputs: + - usb + - ble +url: https://mechwild.com/product/pillbug +exposes: [blackpill] diff --git a/app/boards/arm/pillbug/pillbug_defconfig b/app/boards/arm/pillbug/pillbug_defconfig new file mode 100644 index 00000000000..d71d9f62626 --- /dev/null +++ b/app/boards/arm/pillbug/pillbug_defconfig @@ -0,0 +1,22 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_PILLBUG=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y diff --git a/app/boards/blackpill_f401ce.conf b/app/boards/blackpill_f401ce.conf new file mode 100644 index 00000000000..07e304cfa5c --- /dev/null +++ b/app/boards/blackpill_f401ce.conf @@ -0,0 +1,7 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=n +CONFIG_ZMK_KSCAN_MATRIX_POLLING=y diff --git a/app/boards/blackpill_f401ce.overlay b/app/boards/blackpill_f401ce.overlay new file mode 100644 index 00000000000..54e360a393e --- /dev/null +++ b/app/boards/blackpill_f401ce.overlay @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + blackpill: connector { + compatible = "blackpill"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <2 0 &gpioc 13 0> /* PC13 */ + , <3 0 &gpioc 14 0> /* PC14 */ + , <4 0 &gpioc 15 0> /* PC15 */ + , <10 0 &gpioa 0 0> /* PA0 */ + , <11 0 &gpioa 1 0> /* PA1 */ + , <12 0 &gpioa 2 0> /* PA2 */ + , <13 0 &gpioa 3 0> /* PA3 */ + , <14 0 &gpioa 4 0> /* PA4 */ + , <15 0 &gpioa 5 0> /* PA5 */ + , <16 0 &gpioa 6 0> /* PA6 */ + , <17 0 &gpioa 7 0> /* PA7 */ + , <18 0 &gpiob 0 0> /* PB0 */ + , <19 0 &gpiob 1 0> /* PB1 */ + , <20 0 &gpiob 2 0> /* PB2 */ + , <21 0 &gpiob 10 0> /* PB10 */ + , <25 0 &gpiob 12 0> /* PB12 */ + , <26 0 &gpiob 13 0> /* PB13 */ + , <27 0 &gpiob 14 0> /* PB14 */ + , <28 0 &gpiob 15 0> /* PB15 */ + , <29 0 &gpioa 8 0> /* PA8 */ + , <30 0 &gpioa 9 0> /* PA9 */ + , <31 0 &gpioa 10 0> /* PA10 */ + , <38 0 &gpioa 15 0> /* PA15 */ + , <39 0 &gpiob 3 0> /* PB3 */ + , <40 0 &gpiob 4 0> /* PB4 */ + , <41 0 &gpiob 5 0> /* PB5 */ + , <42 0 &gpiob 6 0> /* PB6 */ + , <43 0 &gpiob 7 0> /* PB7 */ + , <45 0 &gpiob 8 0> /* PB8 */ + , <46 0 &gpiob 9 0> /* PB9 */ + ; + }; +}; + +blackpill_i2c: &i2c1 {}; +blackpill_spi: &spi1 {}; +blackpill_serial: &usart1 {}; diff --git a/app/boards/blackpill_f411ce.conf b/app/boards/blackpill_f411ce.conf new file mode 100644 index 00000000000..07e304cfa5c --- /dev/null +++ b/app/boards/blackpill_f411ce.conf @@ -0,0 +1,7 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=n +CONFIG_ZMK_KSCAN_MATRIX_POLLING=y diff --git a/app/boards/blackpill_f411ce.overlay b/app/boards/blackpill_f411ce.overlay new file mode 100644 index 00000000000..54e360a393e --- /dev/null +++ b/app/boards/blackpill_f411ce.overlay @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + blackpill: connector { + compatible = "blackpill"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <2 0 &gpioc 13 0> /* PC13 */ + , <3 0 &gpioc 14 0> /* PC14 */ + , <4 0 &gpioc 15 0> /* PC15 */ + , <10 0 &gpioa 0 0> /* PA0 */ + , <11 0 &gpioa 1 0> /* PA1 */ + , <12 0 &gpioa 2 0> /* PA2 */ + , <13 0 &gpioa 3 0> /* PA3 */ + , <14 0 &gpioa 4 0> /* PA4 */ + , <15 0 &gpioa 5 0> /* PA5 */ + , <16 0 &gpioa 6 0> /* PA6 */ + , <17 0 &gpioa 7 0> /* PA7 */ + , <18 0 &gpiob 0 0> /* PB0 */ + , <19 0 &gpiob 1 0> /* PB1 */ + , <20 0 &gpiob 2 0> /* PB2 */ + , <21 0 &gpiob 10 0> /* PB10 */ + , <25 0 &gpiob 12 0> /* PB12 */ + , <26 0 &gpiob 13 0> /* PB13 */ + , <27 0 &gpiob 14 0> /* PB14 */ + , <28 0 &gpiob 15 0> /* PB15 */ + , <29 0 &gpioa 8 0> /* PA8 */ + , <30 0 &gpioa 9 0> /* PA9 */ + , <31 0 &gpioa 10 0> /* PA10 */ + , <38 0 &gpioa 15 0> /* PA15 */ + , <39 0 &gpiob 3 0> /* PB3 */ + , <40 0 &gpiob 4 0> /* PB4 */ + , <41 0 &gpiob 5 0> /* PB5 */ + , <42 0 &gpiob 6 0> /* PB6 */ + , <43 0 &gpiob 7 0> /* PB7 */ + , <45 0 &gpiob 8 0> /* PB8 */ + , <46 0 &gpiob 9 0> /* PB9 */ + ; + }; +}; + +blackpill_i2c: &i2c1 {}; +blackpill_spi: &spi1 {}; +blackpill_serial: &usart1 {}; diff --git a/app/boards/interconnects/blackpill/blackpill.zmk.yml b/app/boards/interconnects/blackpill/blackpill.zmk.yml new file mode 100644 index 00000000000..d3fcdc88fbb --- /dev/null +++ b/app/boards/interconnects/blackpill/blackpill.zmk.yml @@ -0,0 +1,8 @@ +file_format: "1" +id: blackpill +name: BlackPill +type: interconnect +url: https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1 +manufacturer: WeAct Studio +description: | + The WeAct Studio BlackPill has grown in popularity due to its low price, availability, and utilization of the powerful STM32F4x1CEU6 microcontroller. The BlackPill features more GPIO than most other boards, but also has a comparatively larger footprint as a result. Many clones and variations of the original BlackPill are available on the market as an affordable and more powerful alternative to many popular boards. The official WeAct variations of the WeAct Studio BlackPill are powered by the STM32F411CEU6 and STM32F401CEU6 microcontrollers. diff --git a/docs/docs/assets/blackpill/blackpill-pins-labelled.png b/docs/docs/assets/blackpill/blackpill-pins-labelled.png new file mode 100644 index 0000000000000000000000000000000000000000..3f15c620d208ef058c5b094a81272aa2d90199df GIT binary patch literal 924160 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�-?M$f@0qbx$xrRIC{--@kgRo!}qItL}@)+UkH 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

    <#4Q03z;=HZ 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∨LABwyc0Rs{g-9 zPZt>tu$zn?BkM>ou}QjRq&PX9cBmfLcH*2mut6NdF^dqM1>@%a@o3-Ve51KY0RM6# zzCRniRUFGc|J@jE!lp7YC+D#T)k067Uc5!))$?dvsL&-grw?pE`t*~wbi&zMAXWOO1LiE+6ze`NsjLSm^+kCTn zZVG>ujh34v;e?ftv659J0H ziodW1n96pzLVDWbtJh?EC;}QW`K-3I`N*g#ms>HTy#pc^Sly#fvK%5`ZU`WF6|r$wDD7uAXU%~$=FugscCPy`C%==@+`r);o6aPW3Y zdwwFId4_}_qnY<5(2|P#3j)2LK?0mh#Hgr?k1<@>#u3ZP#h}sT`{Hb?pXJb`(Odjt z{~h6^yiVs-2M~<5BiQuS66*)d%dmv)G5_Z+(+qEsCe;}WJk@a};sCi|^H%JH&JSWUs>#E`O6Pxu!r$^a zExZu(yCUf8Jmj?OGi~NMq4ehs6!ki?9CI}ci9|sqJ7QYuj@Z~g-On5mJhAYhcy9nA z3G_v7bJ`2zu(^_b6iz`gW~S-MPbBTpcuo%7WC<|nWYBm9v`v2$?&2))wW}~c4q$S0 zhnHwh2?BY^N0gaU?}?W1QnRpF7oWhB8_QKm3tdtEH!)1F*G7nMYSg^W0cTTz1j2srs{C~2ch~mJZFB`&*{1<(g)-FxoOE+rSWGS zRbn`}FH(eS{V9+!*$0C|&iU&54*VpN=rF_m@;`W}CdaczQOxs9`gj+3 z2bx?sB~hBhvc&#{D}A*JGiTO*Hww>tg#p%!=|J@3p8Bba+v0cK6O4%5RgmwrSj%i! z>-b|UhCv#YQkb)yIrIk+mYHM`H>pJPKTc_Eb3>Ifx$GubW}aXk|NT_x$rh9+M14O0gM}w(^;2NhS<#UsWD-=rBvQBxjnpu2}uCXbb1qkdE3OVf6e=zc;#F;gknKOCqLhJ4?@JGMq%RtSeaL7Qo_&3~v58elJ z4TJ(ND~e~f36^6Y-HvuYQ0R@5$?MK^xO`desdESA8E2D*M}U5`($IXmN4XX|QsYg% zIFSdFd-F>;k@SuI5>qwWbXCl{5uyT|jU8ga#* zZNLH2Ch7%gEjj(!TKc=~t7ROY*MhK-UwElU~8!*;S}U?TTrpjFQgE zd$^aiO}A(ejGig`Eh@-2Ma6VKWPI>g7cF2#C3i3y<^-HZJF%RaWz#w9kFcy}55`Tz0B zC>4W%J~4$2^qa0{G-oo&z$!mue^itc4rpTMTC#JX$xq=a2XVP!Uu&V_+34fjs`-i^KHO{%__NdxEP%lD=b2J| z#8nlv)lahqdq`nIhAN+Ny*dsp>>34AdC%~WyEK$>C%!OU^*Z0syQX-~!LBDmQ19h5 z?L$%RWV8C~Pv6f&er^}^k_|5dRqmwJ9mL}+ZHtp#*i528mSD;v^Wki^+4}F8WEsTB zH4sFi*IZ(pbkoAaHJ&Yop!L#1&D+OX+LE8+!YLd1yqBc& zHzcCc(tt~a+<;ucK~Z&>|*L(fR=IZQwl0!|j6@ z9~)cp-c?ANE+Y!seSykfnC(Jo2?Ft-un<~gIB07)uPbk@Ail@q{&RLzTZs?vQV=s0 z_Q#{8_IVksiXgb(&A|p@@wFV78w%>@b2U*n`#hH0sE?gVsdWgd$9;i-V5~E(a?lG%MP#0q4lw%gjX7YmpHw1Y5v=UzD)x@=)9|#|oO0dSC_( zPwkYrDkf$ntwCi0zDEpI_KgBG%mOk$?wfS2dU^@5E`0LEdDHS{;x4#k?PTUcG-6n| z!q?HubE|?HCZ}2KCNh*fi@ACZ#hkyQD8*x36llgUfVgkRPBTYx?FaR5=bkGLYmwA zYXXYd{J1&2-L5Y}o6!7TyLxljgn(%~o{H6f@n-V+B7ajNmfjwsW!4Bql;OGXG4$c& zv?S$sOa~Mi0aRpAz;K?~Qhj_yKoOB`LiiZ2>)9slP}URe51o?Wu>_iiv;mQxv{q_B z9XTrJC9Z#dM?E11sdtG)xwi%S)at+?TGY2wx62VafIw)Ux8{EcT&5?Zn<}D@59R-U zIc9lxqkNT>a9U*St{>3!WB|qbz~-V{nq-zw*47`N@8kh)Qw6c@*5C+h3q1-x2E5Z> z{@%_MC%ZQb7{aHPQL*hzRW{@~U=Bc+o@gOWkh5R)FRtjAMlP};6%h1 zh#86T6j&FG3)T(o)$iENOP4xnL#&WQ*X(Vu(3n1=KsTjYgdZ#XI=++0M3yt=RrTvU zs{KyQM*SnCziv;~;0CV>12P2N zzET*{iBgosytvI(FR9>c*xnjUb0|x=+IqM>|KNBOiaMU0Q}evfsx~U+9PhT#WA{4w zN)`%!KyKA6`u@xZ-23{KCD6<8%oKxtEl~yGp9*}|#>64snAtZfrA1~+8_r^g8Ty{q zHQH*7gzf=vB|RpH^XxYn^c(hO0!b`eThj^m7L1~(sS&-5bZ1e>ZU)X5>v*2{{oyQj zve@|QOs^#er~jMFK@(bMw`D0p4*6yT)6k5*25J)jLgmSN?PW^Rnkv#SriT!^B91)Y zw<$Ln@Q&gNg@b@R`W&!%yKWBHF@46Jvmy~DL(f2#kBU^xsc1hVfDCF4^i&n4%Zh7R zFO#&o993V&KY-*zLjN{4lqxChzrNSb0ilXd*%TtZP!M)hUw87yQ49{TSyyhwYMcd= zz^F&7E`>t4QZBdkA3k3gzo$OdT#HyjrO9ZaP^VkKb(bgZifmx0FjI9a{h|rRVj`A% zu3cl+5aju=Gm?#tRoaaw1w~`2GeiavhoSCY&zQl^NSK4)F<@Fq){*IPmJ#a=f9~AN zkgd2&nz-4`woPV(Q7$hZRJL=5EWpm$(JjY9kf8DAuI;k}LaaC9ze&(cnBLcI_tON+ zF352V`j7$5so$-`2h=RY3&Xnf`8e#?nNlnAQaK9EUW+wWj%j^+LI)X}Ud;71^_a;AUdNS6tl15hwdKeAi|2E&^=L*!x)K-nTI4x5)yi^7znDWgz@xNV z`L2y@QfK{CdA|tzUP;lE#x7|6oUYsJJ*Kr@n`(=5YHR!;lb_c&(a8M*r>6r3`i)WP zGuflQCBO|iy1o37icQYn_bmQp;+y6(b)tss^UvF6q1*upeQ9Z=zZu)vd)FbcY*&)z zGJO*IUkeJ%;L%!tKOR3E zA{}h2vAn_x?*AjEEfSNzGdMgC@j2TZH{gC$wvXJZE_Pk(bgih7DO#EaTbbV8-qLD* zS1DPBSMOTAE~n(Kc3Cl|I;pL#JsTY!8zicGRp$~-z)<~9dG78q_b#43awY$$5729S zIKxuS70+gGx!wK}-MhFj_oSxKwj6;)@_m7El#r=R#gW7Q{u%Y}>|oWxJBOqlyXha= ziih2!Vb5;!wuk-sGVdJ9ckCYTE`Lz|g_dSh#yvh0oZg=KRIPEwOtu||`3Aa@4!^!#I$W}lO7t7nb(<(@17;)EpJUuu(- zCL$`@yw-u?(jvCHv++_+Vv9DPvH%gq%BavO+Er@B`F-8A*Z$~KwCq8J7b95ZM$|W>nrSBl`xTQgXVAjMdyVh7eM_*VFF* zW(73eD<&TiX502#vSj>p8(39Q7=?W9ArnS^*?@s)2~{KlriZK0sXyLa`{D~*1(qjA zpW(6Kk&aIFu)P!t@H%ZraL1Q7JNX@`i1c8JxxNuv7%BS+Ti}Rtdk&VP_q7>%=k+@u zLD$`UX?!Zu1tAIvRhG{wJj$z!ZV~hnGHXj7hk?t?2@*&t7D|e{^psS^Z^jgVgK%c{ z-^{7U4%k{<&St%7H1c41F_eqe0r+p4+!AsZD?)2k>57_(M2KN zY-2UI3O7uskQ)Pl0)S9(1}s8qF&qpX5MInUtetuu*Jzz># zLsU2eejz41=p!lL0kZr(s2M}5JaD5Muly@KKIUfv{erJFlW_$`;m z&lm1Q@{3zFwXW>xwNRC1Efjrz`xfcNZu(S?@=Q6A-k8Zb>327&!>>IYPz9c!S>W>V zB(siC)V&~*=M}ZXpf_?US7P6!BQO_I3SHdX-4i!7@5K`myLW~n6M}wQ4yL~S*qWka4Wwa`18-`MO3_EO>6SR zz;`dv=aJvby#cSbxZaKI1(@qkXy&GDe=GO+wzgINz}rr7(5sR>)&xL~Js8EcljpN+8$S5~@*4JEB*O9677J9iXQ zSh(`~=D+|alPhgT;>cdjcY3-U?vu(6n2neFZ^P92EJX;lq9~SrP&PXLruQS?EWEsg zoeTZP?*YL~Eyjkmge${o+Oe0Xq%Al^?9np${<`#O!~mey!|ujbl$OQ9wY`M*fW8^%`5U@1g&5^Uff88;o_fuoF|UnCLr8*B#Hx-wCOUC5kT3(1dX1OpI#cx;8k9pG08Ln%1;9ojf+DA ztk-1PZ@fo_CiuHQZA&eFAK#sBM99>_m2Rb=n!@GL@T+7(hkh~d%NzO9LVVFRY9!am zU`K^zlolnXRZnT#EiJ$1 zsH1(t>?^DM#2}NiG7_1RaNpRnGNrvp7!L&P;ek$8PR{)5KTH)ir z_}3b2f|1VXU5~zTKz*UMp7Cq+9Co4cV>pAtjTbA(`eV4J9?wCb&IjA~uhPaUX(#c>zT+#OSz^um8T<$%@F#Iih1q4Fm7Ih6bp;5lV+i$ z%(r5Losn-zggA(DA}lp_U>>T?-|uetTqeckeFR+p*kAFFqGYw%vaC~oSl?+vg5cx` zL+$w-qC)r^n2^acQxbDqXuM}?jmV?jIbG{Xm(zBw5^Tq&#YmHBlUfA3yvq)4DiU^` z^2md}8Kc?~B;gJQf-n^GLOOzxupct+cDO3kSEaXtO-=Kp>D|P^Ay^&~4}hWRt!{Nw z^-qORHxi4hVc>REUGt24x%|i-9IG)DRj-Lft%}^~71;QcXLV@0iLPyoC~kc9A)EHe zA3KX;0r~cWjeNN(-^pdN!0BTlvkJ8_QW-h1e95|O7gmR`PgTuq=utmSx#D_<>DDdq z8flm5q0srh=v~j4J{`VDwOuUb{$Pm}5g&c`D;J{!@c_Sbr<*oTuz}x?>jWI6hKk7B zm)A@z$O}_?7~wi0 zvIk{o_5Mlj+@f9KcGSuy?;bObxu!b;a^Z{`xf_*hE~kZj)5rUAo{aeX{fbzS zWe5b2DGK*chJ$1z$v-a3zxg@xs*#%uQMvZ|rZ#C1neXBfOq~VsWHe3Ll%4h}lG3dA zm8`F$bAwa^hko1bZn&V`2g}Xn%rxVTCj4iJC>0F&t83l=E=oKu+!JQOs4C`?)mN7FUe~lZ*}~90K8Ii# zVg`o5ZOD_7W4o1Y-ssHL4h3p!W@5^q!5pwdyDItm`?*)qnd2L)V?-Mv8)}o3`uTM@ zrzA2m7`N->XKWooV>dKz{YNPh`UAwiEDVGHq3TrdR>gC4=95 z>%*k!|E|y9QgF*7(xSn(J61Ostb8QM<1LhKOpl6@ZnmJm1#6qxh}B-RR$X|GwdW_P z7=J#w`XHm8hZ?shw>H?1UHL&rpDkMlUHLmvcd3Skt$_sDj1Un_3f0#Mo5F)=?Tmsk zx>mOY=+%vB?eUsQ3Qy2D6RqCn(_xJoa}7J)q&g_Qq4mky{vkb}qemyFCxwWSqENWn z(x=#jz!?;CP;t`eIs52mM}k#gmYU>0T6-5?Sgv|qrszF2UIz=Pct{BPzuT_h`OCi8=u1jv%ikuesf&ICUtPu1z=g?i|nCwEcal?K}+9S zNxW)FFhl+o`y*!Q>Z;GcLiC8y`5z}gEPn_1`5qW8AZa)20c{;f*CdDoUjG*G?Glqk z!2Jg#INz6=s1OjXJ3lH!#oSUe2i%Aj%sn9HR9dxMG?QuB#!B6uuRqtWwm#o)pUNGE zw!i_XbHM{ubGuADIYRxej8=k|*RsI5g5Q??pR$DD_*9AH4KH6Ny!PV{4+ml3CE)Rk zQ?0tPb6W_X`cLgduO-&qGDaxhZ9}`Gnx4_vmz!f=eI#(*y%3rz)>j7iP|W6ZAd*uC z4E+$BljOh)#=fGEhK|HxKN1gDj5@F!!{z+NXn9SVVyxSF`%6D?UA+_H?=yIqt3Out z{GFIGnuy&tuzN^njLFJI5cJtwq@oCk`~#{w^H}>OL#hRGeR2&5>G1%8wR#G{$AOHmO^^?ht}49qlVlJv&9An` zB6#|t*``<3Ve$QtW#fzlK6hY&V07nKNJ^!pJuO>~0cp(ll+H9lhXNbu0<%`JI(I?> zDHY4SpD~FH7YP60QgTty$7Hsa@8nN1nckBdhGV+n3yC0OOoIHCqayj9L_ ztka8SK&*q0B7%J{0jJHV_4Aw|t{d$UPFy@RU2wx^9lI~@q2&~8DR~By$4;?47pbFwEz@}f03j3#Zfs{&3 zY*coS<3rJ(rhjouk`<@y{S5~&YP}G5`Hu8CrJ-Q^2eEHJ)`f7ya|oAd;b_$mCwFww zRC`q7zmli_mq%mVW`o;uwQDq^%2G!NGUt7`@eRDk^V1(s{nEL% z-p4|w0TZyc_sivqWTm-mm+jx&Ja} zeflH)>dLX>0BPp{&WueLfrr5yh3p`3tFd{-*5i6ydwcLgoJ~~~qJg!~B%hl;j%)$A z1k9!-$RMuM$)Z11dRDl9o$UJ#2}S%fcHThLPf?<-gjd%}K0N6vn7qt=`FmCy_1;`j zXvpu;$b;t-_6Ci~9x}Um28G_hFrVQ(*YmdQreQA>cJwOiA-OHO2=^p%X0so^RXqMA zn7edRJjgM@Y}!uiwxNC@^@mg<{LbC>rH!|r9}RC`Y^taGYSU?V#RqFHwhUu}6_sBR zv;oWi1j_MWya;dhIcJmxoSQCVaCAaQ3)z&x)#QF>1QxCQm18l1CINMvZ74&Pz1d^4 zt>Z&8W^2|2*hPy&_IiZG+C_E!pwQ=4#d!8Y$}icjs=ugsCzog9DM=wRN{Z>s&OFqp zka}t*KVYz9Ne3y_Rsv3rQAVE-B8BZ#bTyno$0J-<2Hi4gi7Rk0Tpfd9>OK2_`Psid zI}}~7cfg@hZ9e3HJ=@(CO-LveS_1?uh%cP(ydnu+8}iHl%9>x>`iqE*E39_MMNCW} zdCig(j91mKxdr9q($dJmUSblGM^--0U4I0EZFd~+(_%^XczjhO2}yoo{u8fpyAJH# zgj5weB3yPz?wLfpCM<-6WQI$xKdE@4-ulqm=?`?#{;r?c<|Ag{IcntSMz2j= zaGzyW>P)m2egK50Mrb3G%+XQ;*=L5! zg&40j@roMkH}jxg*s-$ge>{=@3ZPDvAO15MvOw}j{rd-Quu3>s+>tGflZhf!foE)A zPKf`kGI1o$c>fl!IslWxRX^YhYg#(4)If1#vMwU|ZL+rrISDG>&3(RP2a@gLcZhg~ zIDw&#TF)uvhMUZz@a6mZJx8yZ`ZHBji5{X^em>qP zGBu7=7f-=04_`X1&8QZOossb9LL*Rz9|Woqx;q%fxKz z=Ps13$|lgsd)ea>Hn)gr@c-bH!?q1C|IXjr99=e6;_3M&(ncdcu{nF~=T=HZ zg)S(Jq#+O_Hzn?0mNl2zfn>tr_pOg#%m~J$2xQzY5)U(H!>X~T`;BoA@J-F)@f&-M z`2A|tJq~XeXI}5dTkIRGZvMa&tgol=D%*{7XY!(3>yTMeR!F!kTl`p=)T*nJ$*TzL zobqUI@6Xl;lSE>Zf6kZjUgWH{pAO9-%%2MU1-lNpf7kHaYOFx!y;j`FrvwB6dvX`= zj3IhL6>DLER=KJ#2%sbCCF}$2g=OtVK?x%@Cvhc|^V`?dd*QdS-_IKm??TfD; zJ%8?}9@Pqf=HNdCW|8LHH;Dh5s>eC=lzgM3%Uik*#Xx>p`7~)uVfY@Gq^=HLBlZWc zt~`yb4Gpw$76OF%+_?h{goq}Yu;r`1V<(EJIiJ#)rxTj4y_tA;sPwJ1HA~oRkXd|q zdxbtq71a~B@@7kEJZcCMi}$Qjt%fM2t*V%#@u9U@=iM?c+g0C~J2!J*0+cpvyT5%@ z5t&<52B@5WOQHMHz|{n=z4TG$PX#L@)IyE~tGj%I>=&YjU2Xv6N)!hwSG1DYr{1*8 z^S$N;M})lyB~oe=6pcRQ8Qk$%D&vz%60i8Ttq_fh}@ z{9oqtfAYL>Y^#!O%T-ACg$fSVne-ac8nb3&!n+b_=J&s8lv3Cv%duX5THasud7oK( z8n|ry`%U0xTwg3rj@gi$_`Be4+HsnaSij5=HEVo7I$nAdmsWkWbL*CP8AGP^i5$fG z+Mg`W2gQ-(i>x$(hWcGD95G)+yx&v(GwHSTS-{QHo7|tsa)i>A9hlw0P#tOTH zk;De+1vG!s)pF?)%uWfGyiZ7eEd@rAV+5^6Nk$fCfwO1~q!2uF5XG~GX2=gP+Itj2 zP%jK(zaB8;`QR3NU$R#ZCta1`$vgI0(N%|+=HGRX4a&V|ci66hhLTM^4H$-CuMfCO z!PH`)NHW;Oqv>j)V8zQS#EiIsUnc_Nx9?hjAu$|M1tig_SU(W>Lk@u|FbTG_*@_jl zI?8Dyt%AYR`cy%K!~VGwe(9)d`%DDAD(gKP6*1jzia6DY z8$!q8$5P<*YkKKdj5R>am+#0GWI1|(l~h+GiJsJtMVn8{tp9^|AoX<`n7N`WOzH#A z3)zMbMCyz`*pQIJEF)X{H!)NzDDZPAi3Zb>pGb&_6%M;@i3KIX>HM2171-^+;6ekw z0<0Xxo)Cn|h?BO-di^DdURjVHySCyZvR}@L8%!YB3^fePp8C|;%mu;4o<}^gh1|b6 z@wEf9aGgy%CqnNmU+-zkmYbvgi@?W9Hk|Uq$e%X+8&8jZ^&g)RkC;RyJHzDb19qtX z5%8l4nQSG^(o4~Bsop60O1wdkQMMcwfw(nU^O{0v+|m|p72_xPgoHx5VPRmQhxY9c8fU6=r!1H zt7)1r4*%E7CwxMfoHyP_6s3#5vG?^2>n#3kI~A7ANgfM~`7QUrW~<`|ot9dW2WQIQ z?H$O840GWKK#VG@yO_xs+k8p0MjuO`q|SPD z__b1dFP(_qoG!jv?WsL`$#49rR<}3h&-;`8ZH#nLXU?w!$w;FL+v@y|UAo5D89?6g zB^@2-bFWps*DDLB(;fp1*qs=7uv#RidF zMhLNn$kfzAg4~kNw4EjxJAJ@*cp0a$2oafB%^q2sBTd&Tr6`0wWnW79Vkl2KHeX9e zL{&Vde7qFg1}1%=ulyDI@(0BxF!~ISFn`z{-9&fWdp@Z+dH6H+yTvk<8x2+ z*0|vBLNE^dr_NT?Z&npPxVAAd+&TD%IOhoG%)H^NQo-ROzr#`Um7$S(O{O$B z<@TW~scG<2qH)2-WNnaqns$3h8M52sL?9x#UlRVuZ?45ppeKG-DhxBGYZ)sm$c)p; zVY)Fc9QpjhHFSPak-$Kg)vohke5+!ssZp>xJVcJS^}ZO-KJ8kjLZSxweUTE@kX{Fh=(W69!@##2{DDxirrEkNKeAac)p}j;YR?g4eZ9+z z8Mcf_FDFAKDzr$kEF%M{etMQ;6d?aIuF+kwpB7f1ctSc$_|)ZM!(leRS3`Pr>x1D);qmu$a+r-rip%zM7&Y|Cv40Z*;mSquE=xo?l5zpXIgy_N)FqJHEkCkvyx1QJ2_Z~`MW@7Os* z3?y=#Y*E00`O(pPfT@c2nl|2FNU8?QKR^ryKB1?!r|VBzh4VCCl3ss4v4Jx|->+4O zYJHBo7fw%57c(ESs{d*lo>MLrf~2i_t+HApoO(5x8MllC*>z{24o5&{mAQv-p0IgD z3V|UH-rJ4wb=G>@kcS^sA=nfzp#!Y&2G+r4ob?nbt2xeGCa6d&neGeuRBofF&b4k) zx;Ajxpy|fW_*|nuvpEM9k<9JmJw|n4)Z#~Hv))FZ^ebn&X6-s4VTlSK3|j~zWUI0X ziEhDc-VD4+Z&t5Rr&Y;%!r*sa3ESEa?7UF3F1R9RrS&*n??x5WiYtq+rJZg)@673Zp72aVL5Mf!LoWTeK?W)mNQ zlS4W7SMiUQTH^osT@8GU><9xX+R_t=N6Ro`OD4WV zP3#|*?I3a?c|&y8IYoP0aTx=fYs*9V{Q6bcN~-L5qiE}6G3TDvg{&Te%nJ~hYQlx| z)9K}I04IwP!L>3@ewQ)dXLM}d0?(!^fJUyz`SAj(?7|;t`q`;Rh|Lld=`Wfof*+(J zEjV6`O#2kRAjE*zRPr+J&xiV2S*Z?hvNVB@T3YJrjJ6&;+VlJv^_m^&A7<8599*9kUiVXWRM0-HnXCs? z9{0KV-)+tA&NYZBrLl%P=6f7@WYMP=@ku02@o`$Nx_v=`&@+W;*BAcJzyg>npNQUd zRQiOO$Si`@7<5x=gr#Fpi|1gdEti3yR=+Uc*#Z1YS|9atRfz-R3YNDy;P|!&^n$N1 z@wT^t!Bmb-_8G9UgfiTwP4fTHH11)=#@v{n`Ek%+Re>}chu?777|!|f%a=7HMkkm_ z|A}7Sh#6Ro>)+#%qwWhvr6Ng+TME(fRB;F~DF^Wx`y z+`!%xk!v^cBgPTqrVw|x(|Yd>esh-&4?jA)a#_EIk z#QAZy<)D~>{#GY#S2K6bA#z>h?lZJ@$BEb{^ZM&)QAq0QOaT+O;r-oX??6(%Z!Bqi z7@K3bl?*+U@SS4Lym~n@0#U7k4}*fE?_Dl|soU4U56k$2v8^Y?2Qt|SlfetwdmMlAwXRc7>vF%hwe%Y1K-6(RZM<@wH- zqW@bDCm7zsft*81xulP9afKAV{(H{WAgY6BT1;RUL(kK(^2RK+vc>f^QKbu9&nQmp zwGS!*!JOVmoc|6{h~;juqS zGC1qh`6JG-;%dh!{k%J^Sigz?pQzs%kvXT^99IN(FA~uCQP;OGk2@j7Hfy0F( zQ6QR-k|{#rgI4))bzBR+-iN~_XJ9ZEFjSCMUJ;Rfx)Y|{kndG0roZyaJ7i@erYu54 z#}IjQFPMuu>bvtBrj=oghIU)<*RZDI=4ZZOb1m}c@=qPnDH?(e++@8ak8=ef`S5(J z6ck>gc(KAQ8`JVgD3aaLa#OsR-}M?Cw|AZLj#|*;gr@oW$n;`=lB(f@bp%wN5t!h3 z`NNW4oJ@}_w#w)3z^Ehw*TV`v5 zu{2u~)?*PXiAt3w3i3JVana1*GMVseDf|!fv}u@- zr{4djI8a+MM}RK<=%z+MIA+IYmSH-aiwm8v%~^%F0J6N{parFyw%Z>^5@X1f{_xg$ z0)j}f-q*^Osbs!GM`~O}`Jqvyzkzwavs(*)dU-Bf@xzikfyA|u9kB0)8NdoaE}r(% z!SA1yRadfVmUp}3bX@k<{i(8NTgtqv>A^~!)k{C?ZPV{ZbHQsiTMeKeu#=8(QoJym@FWD$nti488uX{Msh z8%?ltWgWwXLv5;5n{bhTsAD?Y36-Y8MtUjrjGN9N1m((j6*A@+9NRJdI>pW;Hr%kG z;XQ1HOIvdaKLS$M>zQ|B08eCDtj*sHN`dW&l0}Kjbzhbs*LT2hIKQiJHu^ z7(s&Lb#hYqPf~$-!TmvFEJvelS2?hm_f=Esen?z0B9e+ILEJOJ_vnEVQ7p%C#_85Ua;$EjcL= zD!JfPJT;RS|9Pw@HYexiICu|CI(IW-3_0kA@pR#D+--N{plaNBYS=kG|Ki4R&iM3Y zmVaF->klC znP#1+J_h(2hYc%4R#Nn(dV_6!jbTWy!C`2iyjSDxP^8Beh{Ev=(+ zOGB_aUFK~{z9$QX0a@7OV&wYvG#rzcvk+hXTwRnbaQQb8ogBFPo^D0zxlV+}q&15G zXJBv;Sr%)j7Y)8>x(wygJ8{E$XncI-XgG!SrHw5NSt7NoU)#zp@V!2TiT3|T+gk@k z9ln3R-Q5z4gs60bbb~ZYgM>Zzv6`qAKn8#qkj&>5 zChDN1WAi32LLEmL0G1)qL?1{@UZ^IA7WeKT3;iB!3}x{Yu^M4WA+Aodmi(YY8u={O zd0;$fH5d(q&A29_(=+)aMI}X9($XdtpWb|>Gh4%(1A{9|q-DNy`WMm1W_cltYq#_c56#g#`2~ky_UXfiXnn-J;=-a5 z%x#Un-KZ6O2ReOzRm1V|=?LF`m)UP|RPC|(=SZ0cKfW;)Hq?nQP<-70&cygVa1Qx_ zBe~88GQZsVf6vV;$)T;2=XS{_RiSaNPqhT-@g(T1p1qw5IlwNHgzP+#<^1-muLLyb z?*F|#+MTXD^g?1vR^LuN(lKqk&6I9Ks96=5rwP#A>=n-(3GRzBBRc@<)_=bPL=*AM zX(W}q$JvJmSN3I%hK5x$!*?$N`%_Ok6r$I#SN1L06nEk?=GInFNU(Bqvz5CgwrVIa`1N%rj{nEAT1{c%fjV}}Q@!`Qp z!p!Gwd1U7!0->BwF-*=~^ezQ3v%H!`|p32V9NCfEKsQU)`K(av8mB_E0S z65U0-?_lihBDZqh+q1Br_au4m+a9-)Kr+~}vc9kQMhpjwHp(gl0|!jw)gVoG*GnLm z);5OM`IyrR^)}(y?T+WQ2oeVy2rG|3!y)8{GhjfP%AaJf^q*PJ-K+6Y97nB2T14vWAQ=q;OI=W9Eayi3>VV|rN8ba9UwA|Zw z#!F#5kVe1=rjcBH-KrbVDq1H6u(sovr1yhktcX`94g;CbZ%J=Y{dMf`YwFm)O1FvA zc9cItNDWJvEyc8-kj>P{5$W+_+V=|MWj|OnII|7-;hg>MEHLEB| z)fwI)ysrB>j~HRaxB#ZD%HGw>=9tgV#ul|u(8Uq96F)Du6JIvNo zzi)Au*A-l}i_nmacsfAxMMB-QiQUlf|GWMNl0yytz9vz-?O>&x_4%!G_Boavm_+&j zwb_^t;_}ZU`QIRxlY>Me9^M+Iy(Xu1A>gFBI9av9L1V?7ot8Hn=CGg&?@%n(860qD zl{w4DCua+ha`iWP3DHt?dn=k=(hmQt!yj(-=lJ+&RRQd0#msJySb1ztq5wRzssc{l z8mM0~7zK8qO<3S}E!!i;Wj);vrqDYWW#WIOnhCj_DsK#|MUu#fK5@9_JZHN5F_hGW zlb9qYPr{7=Wj-CrG5Y$%;e%Pr*6Q4pIH2Ns?X5bQSrQsjl=lAE!s;EE`RSK~T0GZK zpRLGGnv?GRZgCF!vbrbPTuEEnnm3$Cket5I@vo~`bW#G2WkIuSCv1{0A=j9HC0UWe z>uF3>Dr%tk#Zlo5MEdurok`QqRcDw@HNJX}qL0yBpQ68!(7+2mAEBQv{uOnvHnkIK z-eeM{*l%pr40#P3hf5L7Fz+K3Z3*h5|7ho6qBF2>zqx`W7lqD^!R34(XOfQouJ~pM z0{e}fe#fG(+GyRry_CH2o7LbK!+}wwPb%EZ!Yj61H4=j3{@VArQz0UbM$~8)g)urD z=wez#$2c$|!jwAJm+Cd6-b;XswkVJ#Uz*`AmazD-*v=C5Zf6${Is4mUENO#2gYDVsc(+ zXP(zigg?R)8IrZ}W+iMuMJ1CQ9eprWif~3Dcz7o|!@q51m;_MpgYLrSaE=m>kLy?( z31!_JD$)eDM$&5C9MxN4K{%7=Uj)2$xRpO5>&ld-}wL#p_E4 z>_`os&~;wkwck^6wAPoQb6VaJ2JL?6wN|ebgZ)SoXTG*cA3yukgLBvx_l2o7`gztx zZ_04d(Mp%XU?ggLf~g7aA`|d+nenCr(O0590eJkLaD)0q&O37}BYs`|mbJD{IE_Y& z&?MuJX2CQfRuDcYl9bLMr8SqICt`5kId<<^yuk#Jskvutv02dPLqa{!39o^)Ve(2Vs1-Dm7@0>$iiCw-rv_=|fm!or3d4`Qf)HJ74jB<|TZh8Uk+d`89!83T3+ zDq!O|It$qB0OWM44mu#Y6Rtf&VtIi28zuu7Jyk*G1F)FY!J{#Y|7qxG6AIp~%8qp} z&M4X>nFIT#I=xkK%4Gvu23S@)Mie}Yw59FJRzK5HO5t9{1W!g8@B@9C#KgRrUE_al z&zf;MmW>bbrG+q3sVUkk_FstVGCYvSH;izvh8esd?Dd~L7j{(t8##(Czp`siy!G<_ zkzs?>lz&RYiBB8QSX`>qr6tm9nfosmW};jKcbiAH1yNEEmVRn?v4#WQ(xC^KT%ugQ zKXKw{O+!V5ap1iTL7`hlMEB_Fk_g(>uz!qa3w^;l!q~o4EDGgW;Bt=ps6A|Sy#p5t z-j55XJjtt5=QOXW4b97=>&9@+(JViQNyrQQB6E-`epT;5F*}F+wHR{z+|JnHVO4$l z2K?UXomO~O&9~vvCCL3Jduz?S$D`mz9+@)YfU*Rf@YeKIdv%#LOjeXyt#nl5H-Q2} zYIB%(0Oj>lff)Py12`NWQtCvtQ9em-=Fz{No_vLAf#*xHLN^vw_m24dcT?2 z_9mBWxLs4`LN)CCFkoD1LcV)OMLRd?&^v)x8a| zct1MzslCdZmEB0}^wyRkQE!V+&0kA5Q-5mHA${0*O55EtvjB_@xtGRC+p!d9qMqUN zx;zc|o+aWYI@lS}(31|Ptn&CpWzcqmW+VWB^v34nGhZKU zFVzYI7T<8;Y8}+l=ZlZR00jC@IOkn02nIie@f&mmM{5=VE+ZaPExv26{A5^!MPICq z8EK1W5WaI=iULRVg*yTeqpoIT2i!CkU*C)+(x0 zPq)s=EJ|Gs6CIwYoa4Dq_%qkqHoy6;a_rtzu|Xv%mhYOBC24?VGCIxK;`e!q?r`W< z5E{VPlgtz2zCicoXqvbZeq!9&*=LJQqt(R5v%8BatN>zi;;B3)Wyb&+5tl^fVAEAX zXshJJ#dNDcM7HHlfffHj|R&HZ3GLtE@3|W8|+IYhQ-gz1JWaC3r=Vw$Be5FzN@~j84Cv{5a(c>wpDMs!i_n%#8w=&Vp0N&y8r`XuKN0y62x|dfHu!d^#c>c;D;O(}$lKT^w z?I=7->0RY0V1Iown03Q^zNf}6sVr;1_k84w6y!PnpWwzKocEW)saaCXs#q~DaF$2&10h!xKi z+a*`smeMulPReqm^If323cOrlARhvAnEzD-`!d}aMklrEls zb6k<0RV7Yz^dqYoqHm$OeBb%+hOML*Tq*ATN7|O1*%Q%&<(2|@X@8xhJ_inzY2x>M zHQHeb+m*e{2^uj|!83mu@j&8W0{S@>;#9yX*G5x(2*NSXwVLpSdG6E3r%T6tD*wvz zq!V+tR#&6N3LN^*F35e1BeZ ze-ldatj1R0YDD&p)lb4VLmkNcKK8&wa&F-guEFnofd}?)_!HTphhsUVI14TW*kmIZ zmYD^NO5G(mlBD>`Q}diH&V0M2x6s^XE0_YQ-_KJgEH^c@6Ha(7GF=)!xVtgU$#Lo& zIgzJ!<_;`7P=fZWuSWubW)Og1mWcrKrkWbQ?x*m7tio@hxUxFL@mX_*8`b!2Acv$d zu$lWzyu99zG~hskoKoQx+!G#@riAw4lXaB0=G&FQZ&|+pMB3o3&1Vf3;+pRgU4yf+ zA+H&#zck34z5APt4#}MIx;EUlQ62l(3ElSiVY__RNSYKH==-boAPr?ZU%$EytHZ6? zf=4EWGVCovy9}5`ht&2$Cq(Pl*S@ofvxhGZ^ig^6pWcaiVhxSbMpa*1nF|7F2VlH* z{DuXYI3~!M>Utb0G035>x;I(-(4l-vZ0eq|$5V~cbb00#N9=6Ik)n!Yet8q)sWC6S z8Hxlsip{U3K1rY64F_`x6}%(HvQu=JK7!CJOJJL4n-$ij#lJZ0SAKUrf{;vL;wU>+OXpdvI{n3-E#e*(LelNQba-XYBv^CsSQY;-Q5Zxm@){ z6H_G7T$*w~_TpE>K@lOM;Ni_cHr>#_{d<2Zbx_Q)d9hwSM!;MGw&&&+BJE`c}Uu1b{l5A7ma4Am=M;5jL_Ss=Cgzbs50shiTB}gPx`{ z*6I0c$Lt`?(t0BQQ`n)&cxUvNwzjs_ABKc(jvu{QfsU-;j$O=ny_FLd2pbu5e)ARD zwYHB{o60LG*|u_E5mJ=OHIj(v!jtACMhE*O+S%~7Tdjp>9}D8LA33Kse55A?<8NQH zYbE|!1l*eVf`X57Me=?8N)}-wiD8yMSunS3j61tl6c2Iunq?~LmNDgmsh$)YQ4(~} zd{Ef^zBWzuThq6-+3DpR`Xv$tQY!aykhT^)UzKt0|san%@VIaU})k) zpD8MG4i6@LH3URAGm@$5>YI?i&idi%R6_85k^fu$n=DHXebJfN+(Se4$t1^T;i74N*>L`EH_tWou9D6%2N*dsD6R&wou*-)FD*_py1{}>v8?7p? zDpP?aav-}+wndh|fu$-w{@j#mKjn~C`9*VaPd+3sbv#fFj9YRkR%S*jJKa|t#%2>q z2z`iWIQt=pHQXa=w87|3l}CIVAAC3!Hm})HZ9uwULA<1THT&;E2awutq#&OHqC`&V zmPZY6=*stDs$4mx2!@3`rL|!9D{7nnC8S^dn#d}(1lMw8{xfKx3caI&JB(y(f#!)L zp5rS!1a!2aD%oFWw!BP6AOp&b{PjZEyy*)4d)-O+`(SCM}lGls$iv zdUN|4*MUbsyR_PTfa7j8u`KrTWnB6B-P0n`CERSL_E}ovGip1ylbTU$SD$|iAC36a z$A*|P>*rBBxP<~{4d>{^%O+%_dMx&i0H7uv_t^HX+d)mnq%Yn{A*FoRLBdVF} zAGQWJ#ZQNt#xarn!k||HDDO7M0m1VA)F>*pGV*R-$Nt}1%$Q7~^(W9e9z%lJA5={< z5}jQi1GaJADi!d=piBfxuYLCwmp@MpY%zg6m2kfGqpMYX`N*N9RA=uYOVD@ni)ag-3E+zUxSAu+GFOCkt_{H)P4*p5YBs3d+H#$jL6l|BSsn~$B;@p zG;z`0&>1-?L9z6}x>=T7`+lo{sofy3617N(L`JE?edguqZ-?~T8+Cf=TC#n7q2d~) z?fLoQbRx)J0uX-O;6e377o`y|7M41Wd^^VK6xdzvwJ&}QS34?)NN=jhA* z$u2QU$9>~R8jOt|Z#y^3&yIR8dAvG|u=kd$=@E>a))9jpHd-~oh|#Qj*xrX@$4ffI zL6*YpM`8}{Q^IfR=mhbkMvSQ<+C5xs_^ejNX(I-R0m={{;rUS}7y#lPd0qbY)~b9* zF3l-G2-VFtt+Na28c}>D9jF7xFji?DQM3VJL`T?Yi*P?nB-lSmhT1oocQR*!X<_5N z{W06_xt^inDOfb-4PqIXksn?QPb`+S9!IU*NlSCu>ZEMU0wh$gM@L{My&LmfsGFl( z{9eiG@M?hhpYI1<+2B9o=Ei2i9iL{e*)ums2UC!>FcYr}(;2}VLi#kFH!cF{8RXF? z`L3=m>!)S#^y}|b6}QK12aC;YS9E}>wL5NCr#f&RqwMxOS9{tdri0$pq$I5*Hj$w9 z%F{>&e0=b;QF^fwhTHmm%P$tA5dpP2oL)XYNaQe`p`oFkBZ$jZ#}gfl0m)}{XQII> zK6(Luy-*N9+K7Y1e*By4&`deImDKuiCefV#)0S`Itq`c7Z0^2R=KR}k)oM{(CWSNT z?*zdYdnTsmvdRfEv`>rUud;~x1WF~=2WmdR8tUr8)WzGr^Nm&tMAp*Tu8sEve3mf7 z9ZKf;h89{$_wAFA+40J)SEC)QuYsU<0&%iBME$Yp_8k_#zrvmGGPQCOxqt)T6}?vm zoXHB|(6j3P{#k9G=ku%LwbMo2GqJyBE(d<`{J%Q@hN-_H=9`>gL+kl=Of|z;WXe3T z#neN+1VYf{*c?k28hm2=Ofk%CaLXU=uk?OlLlS>p%Mf&K+4N%la3NEui7rsYW@MT=J06rtw0`KY3m z5aE!S(%_r2MuwLMBDh3H-A$-<=Yu)Io~7?fW7(xmUUx)sCo=3P;oY^kmYMHcXq@U< zYGc_x19XgvXM(uq#MB3vz{WHUR1*06pJsO}#Q=Qkk^Ob5W>D~MO$0b_qMbGVG;o+u zM4_?!&(hPG*hhKyi04GtTT5U7gVVawf}e7Cvw)kNxBPsxcXy>6*Y}$L4HmiDJAdjc zJ1Ir#)n#=4M?!8a6^rvR4s0Ka4^uwAuNEa-0zUvdc=Bt$)5#mMJPOxo`44{+f`dEN z*?}LF`7vkp7ABKKVozYB3ZTv3X1PVUWj#q^S9JR+_|qt#b?zo7-#4Fh?ne2IPa6cP z*OcGZk?Vq`F6*MWM0{8{^B@5Nm*eZSzfH|8zTNcD8XaalZGiI%lVhHjtd~AJMpfWC zbl`N7qADkzn?;|8+pjFh-l<31a%0SqvdI}TSY{QkdcsZ=CaP7dj*Ev37^T*? zVGPh2pX}d=AxzUZx6l0Cz6sbWNoe|e9POToaBgQM1p~GMv%!Sn;V|%Eor}~Or-v-I zC~YTyuh32DlcsOw2Jw}u%^yArHx217)Gl4DD{Ut=vio?Z#S+B)^#?v*+}@rfn4VKW z>+qZ{6aHn>Rgh2kPP2+Yu_GFS2ECQ}#TyO|rORpe3-)|oO?GzV`e0I$s)`38yCCcr z(3URAY?=G2=$W3iK;`9g4 zx&8w9S2LL>pO``$qzlHchy7>NW#Y5=ixfay6yK;Y)g^q*4_ZP43Z=X5)$KZar%0Pi z--d(-Y)jEW6YhPYq~?`!XhNZtqJpbmQ-0kU^^aE;li#g8LVUC$$`g19@*IfF?9dIy z<O#Iz*ZgI>6g-nU_fvE8AYD@Z}+>a&6ryuAiRL45}wddxX=V+ zS7JkNgY9rWt*n3apQ!hjaNBu`MczIe;)*wS5Li`(LZl|IChAhjI0=MLTbl$UdsJK`g zIZ31-g4YXgU@<}nB>vgKB4%pf7v^U2o){B-Z@koQymaEqG6XTs_`^VhceUeRu#n=1 zu46ovBMds;6x5rBkBkq_OrHFFeUtlVq>UW3(~VjbfXC7(`mR~BJxdoWoNd7bRikup zB zGetwuv`I@PSbLk}U*^wTEqaD3EO_=5Br#9iOx=}qg$8FWTYCGSA%W1`TY2K$F z6u;{WVRxaHa}eRW*66)S(qblZ&}&55l${81RnAgsau=rR*#8>3PmpHT zJMENb7uiTcMGF=Xa00eU6RVuFk|b({zPNfkvR+ZR2pfGj8k(eJ_2$O(HS`( zzcbNFNAu=#*En={6RroQmA{>+lGEn9^}~%XJB&BuHHG_VKN+p$jf_cK>dYbZ7qWX1 zm>kEWIK9JtSFZSuz!Je1C7`s`b!#%~e7fG+bY$abaL*^o?@t@eoAt51G)lk2FFb61 z8e0%h$vDc&O_8pV)FyqO`yS~)C94H^QOzyG-l`9E0EKlzx5<4vMeF8}Al+$KD)5a;}Bzery_G(6t z(DjBBW93WGq+TSkb9Iqm;3!(_A`f-n`Hx7WRISbosT3^mv1`z(*+PRJ?7KhoYok4j z7!QmKABl~9oXqMPo*Qr{Dj2Z#Z0~xLB%=~PxNrUXJP+_BIWHp>PGR%>`aD<3V+d4Uni2IQ}|=+EgN4r~ad~P{}#mv^6nfvl61T87|xTV3Q%)jJ#!;2d48% zIgr2aheMvzwvCx>KX{G1;+2g){PM09URSTwzREkvjysj-Bvj>Pd7Y)jC~TJExw(!h zm5@5uEvGkdMWf=PE1ljs!!!9*9iJ@LN{&wnTg15X8#E8FvpDVPc#)t_g| zVTNMvc1Y(hs?i;NAkB+X|4g1+$~R zpGvk5qxFwcxg;c8OLIrR%9zjJEE9b?ylcquAGh%QaQzcV5CS@R!2KDCEbV-DG5;g! zUZ8pW0x>c{BkaL_-ynU??a&i{eVgv4u+Czq36Qh}0B8?y-VSSHn^esd4WcD_{vR^< zsO~2i!e1}P5&=G?d!pKJx$WyBU*kiTf^YuW&yKb4Zi--1)#V8_^~T+$)XNv%1|XnZ z{o9nQ1VQaPzYQ54V^2+SfFCd2(+1}2@rQqUrIdvhAlQ_B-#J;5I#Hkix{kHt=H^mx zxsz@q{P2@nQo@z6>>Bm=j{6@A=&yF9s-D*G* z6g5W(%t+i326Oij;nSA`M+bssk1Y}d4#-f2lOE!Q?^r%x3EQV92nW93Q}r-#Y0HGG z*i9J3cDSiEc))+WL67Ty+&8Bm_%7uaOQ`URHVLwciU#tG;X z8VP?11(jP6Y$ecu4ZXR)pmy%N|KO6Do&P$nf0n(vXXf>6(@kMkQw*XE^F^kUYS#J1;)r^z^xYFh&C@?Wvq=cH(s?jIx3f%@{Sv}h z<)xVwKfs#6BE2dglv^WoHt;uQZ7@4h6~79exbPD92`@1?Q|^a}g_k0Xj;;6dmBTkl zqL-$vlX02!(8#zkFh0f;lFl66-~Qt)p^S+tk=VDHT_G4?e37cvxzN$zoFGhpPJIlXwTk`7^1mbV@hUU|G#X1NU{XgwYjj(iS9&Cx=Or+H!%K#)uS+^)=} z7}Ns8tilM*(s$-_b%A){tY<6RWu~weAn~c)McmorPD+nU(ksmO;(+=5RPnZ^1`{wU z#b6H48&6Ch<|v+hpnYjPhV@--hnhn*}Bm?gnGe4jv{* zFjlC;z)wVb=R`NF*k9v!Nk3_&3bnDdJLkb8#FIt(q*NO($X_&L%;OWX@t9M7m7tk(U> z%&lWIQ`g8?Fe@QYxHOKZD799J9;U>!Ix;Tf44Ys1=eYx=P1*DH?oU)r?%s5aG6B!l zlkTf`*0q8#G3B1dGd)~M#53x~MI-I9?UKs8Dy(yh+y6v1;NuZ(9y7bGV86|qweei7p@QUdb!6YCfT}pZE`=*5`3M;q zhKN7tM9`Qf+Y6^8>r+?Yvrhj`as?bj3#eMDI4(4}E5;wyd|p4AWCry%S96B2RP1JckVDZEtYX1K1+{x{L*IoI3nIFIZGf-f#FYBm}#!og%h1 zSg_QhBXofEiio_QRhu(BhPWyTIj41mL&Kc~_^{X&O)TUap48@JIWfMxbrQZ6zvm&xGA4nK_nzYwCY6+q4Bi;Hli3t8XmGq?UQX{Nfu;5U<^=xTV~$E9$P21n=excZR0?H)^Tn zX8hopt0K!w-;hXRCR1jGe;k8o!tM5S=1+0e=TY(eA?h91Z{!meuI~gEd`?q)gk?Mq z$ogV$G|0Zi(}-c{dmJJsYN^?)clv9s@?18pv1)KaElJE3{1XtuFmx!_34>6X%vu0L z0W;D=?RG>sXLx<;fM@3Xy*qgKEgA#e*7FOG&7<{ONE0MbyF%UaIai;Tj)~6c=fl8- zdrDE_^UnGo79^>#mapr*sr}d992yl-MI!--*nxN_DtYxettC2 z?LJ+L*bNeuy{^uc;J5}1NYB6k$UqJE$DrF&bxcCRZI+KfHTs-jUi@1D^(Y~`!?F@| z?l|5R2DPje#h5OQ?Pk=AV#j_&h8{|T_#sI$*0UT91ub8_po7@;iI=ihh6W=$C2 zp_Nf@2y6^<%d#rLt&=&zEf~z>U012jiT4+2lC?ASE$YfFZKZRBhTcd7O?31Df0Pie zo=7G`(h0vfaOla@i!`GXUrP;tJ#(W#Xm7YceMop1E9vbLjAVSb?K7lZ7Igt^jTV$n zo7{b3xIF0R*p{)z#i!uU9nG41Ckfl8g_+bM22&~!3Qo?))=B9}0+HHey4};OtQT^U zFN^(Qf2+NoT2Bw7$u4q5NCVDuWUvVlQ>h%NUG((Jg5}=eNwr<1>9K4yMH39tBkhOMjGlQ{TG2u1Ffc>VIB?UH@?oXcmDQ^PVWAo_yWUZ>%Y>@+eZ91;W!;3K9ZvxHA>iHU(uW&+zA7gZ>(Pr0~zzOSl3r|zcjqpN; zD}#<$N^0zP;*N>YpIhN z^HT-~J&}G`tA1fe+uP)_NlB2qAPcz9&+z{|y&s!LEBHIelopiRmfVu5X zz3aBahMH%eY)OLKGex3!G%4mU9zy7d?~~!m(}#EQMu@CJR2xa#_35+lsW*SJLdhEzw&WFjKoN zq4i~A=0aAY$JVGNJDhdeWo;o>pW=ymSM>L0RMR4JsskSag9ry++!^== zM)yP_~a*(8#beGqzOQs~ieRu=pHdm}QC`9JcZegmjoubO@rklayuKHEG1qDCt1 zDBJ&h+4=v0&{2~B^`l9Nptqx?lNYHgHy4|_GXk8#x^ixGq$rL))62$e(Mz4>`Mt#eroV@xd{F+M>}%( zS<@JyVBToe1C9kTlqC=pwutDJNXp|srAFpozA`k+MJ_97^ zi6q;vmS*OV=|%WoJ@?~1++)~!IR3sf+0vvo>Z?J;$LsxKn&5bm9ac3 zat(}sTXD_3tc(-6LMsLQ{KQ_8Y`s}A|Hcm-1T2LJ;@<9F)qe&uzYcQ<2uvGA)_cst z&P>kgf|c{;CB>4h0dc+UTg70>SpdxhkitNmoHiC_jC2-%2{y*NFyWgkIKZR+vC!f> zQ4g)o^2L+*Tic#V6@avy02C1JO)L80_OGwfr}*uU+LxG)*#?F})l($@->nK;)L7?H}y zTvu1c^k8V{dvJ|?nE60wpN%coxyO<7M>|ct9PM{fv5B2%WOV#zka7AcWr#newX)Wl zuL#IhnUOje?K@5=8t9u&`0JnX(`cdi1U*}-7Jt((7cOhHa9M~Ndl-r8jD+KN(Kv#v z4(#U1p3l3Fg|iEQ)B^T+`uu7K+3~*AS`5b%{jf9ZP0ws{^P)UhY~xrWp#Q$r6$<1S z|8Y;hcPAyPun)(Sd1m&oHaAn##H2`k7#o7k`uA3gG1~8nz_>4cjNN?FY0DI~ixP&p z{9%nxl%|)#o2{|TIbRo9_ak?E??Oax8U1Y9>KujPD~@Ym?0jqi!krVs!08#54dq$u zT44zap4X71f5~5$(S^oT8I0M!)eaW9Y+`@Zb<<4W$U;{n_WJwKS$4Q;;`z^RAw27B zvmZd5^F+3zg`bEWmgP&@sN;#=?UPry1a3-qL+Fb3@0?tUblj8M0BU{aN|>bB>O4hDk8lHe*yg=zrl@r%Lh5*KZIeF?&84-qUb zom5nd6iBq;6SCm(E9d1)*7p9y)0EuIP3^$yeKEw{515zu_nf=NIL;M~2S^yS!4kyuJ&5+w8o(W)y``!F zVd+ZAIGAi@5I#TMvKz#wITx0?wYj=kc&T;%!iRJIdw7o4-TC%X0k>&)8@VeK<(Z6u zy!a)WyfM5R3Pug1dO0-?z0|7rYKVe?)J$#r}R!44uxe$x4wP$gU&xrH$zB z>SK7URHj}n;Qwzt|Fx=yZ{)PB;Y=Woe=32cLX^jR^N_OQk%$qoZ~l{m=?d!^4$)hf zQJEyd-Z-li!>8}qxg<>WLsn3AKTftqDcY5cZE7jm(rC~U`2UgxF9+a%2{4}R>AhxhH)!F34`cWAJ9B778fME%+6(W5&_FaGuC#o=YU__VOpmR! zNpem<_W_v>_7{}q4Qy^u@N!dHfc&O!L-OIGh7e;xy%LB3zd%&Gcu8Ls z?P+;awFQQRE{ldxKX~OisK*3&X=O%dXce7#TiOpKKu4YN3%(}F{Y42#eN?yXeQq)} zsW~Ijz;|rfkp26{ZhI8|WnFjTs~P7!+e6gkVEn5RKqU4AezQF1Sn8*+Z4&gp(jkH{ zu67sB(i~Z`T#AXYv?AXasMS@-E4qcX9yQbCZ@ zaRo4h-Qdj>AFa7DTNCw+@u;G81SS|<6LHN9m=7Om=c0X}j(#>;MrF||>#W6Kdnb~bwaK0 zElr;I0hOUm8w0aNySwO@ui3>E6N&FCu4AteYcK2ljt#v`9eOEseAjg)-RjT67fsC> zQZy9CQCsQYG+xvD%kF_xO-La?((MfC9cD+JY^GgcL*XOmI{-Uk`q|bfNLk#<5z~<% z7~?np5K>kSl-WFLNMKsbRZW@|H)#*sy2HR|Y7NU?{n4}V2=-^lF@6@HOQOXeXj3MLx4;LhXn^j)WDjejG zOIZ5Mh19u#T?A4!*V+0xgZ*_i0xg0y{3NP66M%IwqrK9v>uzZ4Seuz0hB>c(3#$-+ zDbC=FndZ5tu=#DWZgHWLzOA>g8aj@|HgM_HS+Rxdxnf3sp_Rk9#W=s4b0S+!X`bqTLldL#} zM1zr`sza+&6*S+9BpnaN$z+^-F(Vsa$*ps~sso6r+s$i0-Wjfc2%&}mIHb@|@#t^z$wK~0 zWMz1=fajW+0*i_dy|1U4kr(+^0T=AroX!~AK!*szE|R>(>8uu^UVmXAZJ`EIyIe?d zQ}Z1Q%u2YtZBwDM7?!!Y5eNn6>5M#UqB-5Z(px3ez4R5hQzKyVAj=~kUR26rsb3ic zDO{{QlHr}QT@K{@k3d*HGKUF>JQDrQRK=Qdr}Bd4J&uWo$AEz=D`S4mLza9*##yL| z({4lNXS*pE3Yu}yj8GAGA;D(U|-#6}d=%S+!Ut|a0h`yTf#Ru&q2If}wr zx9ra>SJX>uN_MRlXy`EmMYhGUa^;G+VGl?jcE6_tSvo%=UY>qwIDaSTHPq)O7r{jU zGz|rP1z|ZWX_|1}I7aYyLoxGh6!(jkzedLl|A%;=lMR{rsK5dP* zQL2|}WuoqFF9zTxuMNE>0wl(8{l*Ka`N0hF`U*IvM!$YO8tGG&Ah`B;$pBqo6v2(0 z*HUm0g3hr(zq2{!7t1`AB7`V12WU8zRZvB1+zXj*6-m45a)FQ5zh`Ka+0&)_Z8?-Z zq6QI58);SvJ&tVK!y4ZAHhpDulUX1=xjHjvB-mQ( zkf&_dQR@{tYI2W{dO#$s(lc_|_s<1*7cB0NxL32U(pQX@GDkP>BW>4X)^SK1eFeYi z6~EfU9QVFMZJZU30|M7^WY{=?#m3w1>zDa+oxBFrr z@_eU_9kZ-23#h&$@u5e#03cO<%6_&EuF?+GH((A8C#)q}`O=PkY^mg?MY@4UOd0AH z)j{WCUeD}n8A0f1+H``d3Jwnla|PeX)?yG~(9Eo;xWlFF*`Ij(<_3iNz-rdXdk%}a znS)m4$ta5BD>=258XG38uPudI&lJ(?Y?7Iz<|(?ymnelS+=Tsv@+8_bXUS`2Y{RP$ zwYrj7II7Net-m4SlD{!haTT;xwPO^5ha#(tH&sZ0r0GMd#~%e%BsJ5fBh}KC&TNGe zkHkNZ&3Bt1T6>E3?cOTtZ9ebpbF^g=1`@~kMHYksMga$1hc=8uJJSRs6qA4<4=wa} ze~>H=evMiPkq>}ejlyqTf&6hR8=B6R14&0rq0<^`D4Ky_2e?(Awc1Qi&q+G7yJ6gB zjSK4NghM2c1$)aF#v)vQD33A{;b#{6r$+`O1*)yEe95YGFe6FU46vWGN(t5Jv+No4 zX0Lt@YY_J~MknHPif0=hTK#<(j;azQbWC7 z7awT=3-TI05k3D4W^5yJ1$e zC^}zh-H~%*e=+%XJ5BnXY4{NLJ#OJ&<}VQm?&Y+Iv2@( zonv5hwe3oeDZBJXIGkSFx#htfftX27jW`UdOy8cIa=8xJurP@83 z1))^gPe5$SBLNUf{!Py4nukc&r+Q(H2EXV3LQ6>$UK#~(zP|CD&y{UYr;+jigMMB_ z05)lrQS5_tpLXm6BnI8KA;mx{;ZwVwYy&rEbAt7B-i3$BlUK}`al(vgx0tC}q*?hO zi0*lC6y#ED>QE+vt>u%MUL@<$6k$gL|0A)3#-1bh>*I|B?DTlmXsX0dI>eC7PD=-! z&8`)_gofo80V6Wn5y9Zo#r0qKN7)aN2lf5y-|PFklZ=kE7heLe?`J4t(VuN%k!g1N z%;{1z2CjJzV_*9%#ZN0`L8BcSNj(oIXBsNkMv~FwAvHOFVcdYoku~Av7LMMfkzebe zV-F;AvXd28f5D8hGG|4dcd_5=tFDc$_z}qre+s<6SjK{!XUK)tNS~&Kw9o&c58|J9 z$~CKnqrO(3RfK~|1BzS%jb~!jj#5-au}P%34hp;kxBu^{hi+s!p=;;#Q>@1zztDLj zb@>i^H8>bJtund{XNVgZH zp6z{TSb9Ew@aDtG0NQ`~oi__2RC6Ow8(-6}Dfr|4wAgw_pEYtb_&*qXtFWl!e^HkZ z5EvR^Xprs{hEC~}kZuG8q`PxyM!FjTX=&+@A(RrNTS7XAhW&G|^X#+MKL3kz$-^_l z1>gGA`+iB-vHSj#qauy$BkP`~tBiGZA|M^1{Ry)`^%VM%lfeSX+?^XMHd9SE`@f;K zfq<^(|4?mL|2NfkyU9om!L&RH+m4{9!&{M~_4>JzHcZxdpu5!6o{1?iA zO1MR#8;P@dNBe7pS2OwCxJ9)45bT36Zlw-oEJhcE22}+Ls+j3NOs(|B&Y|hGfo`@4 zxnVP?=nekH;cfC|(ol6Qodptvi#3HqRx|LV;jwVOUm9=P{=n9k%rGX~k)FH@_&zgb zc;p9ul>orMx@BBtitck+!3{f~i=IKh00HI|cUi_Af&q8)!@Ht0w#F&e%77>3e$iXH5Pg&Rb;I z&UL;|q5$i*nf-HK2&))bp7K2hzt3e32zQA5gM4wzp2bSK*~UKFYOzI_5WcmGZ2e0g z9_wp-)v`xn?>YQN`&q14_Bt{Zgg1=-Z|Wp>1k8te(A5;aXk0n0!9=N946DGuIkRK; z+l|(@5w0Hu1>jz`n;Qu5fsrxMW~7chJgszM<7cSdGA+%5z)<{eC;0-mWW@`obi8AC zj^LGQS1V2UbAX@3GFH9A!+t=}YYK9>=76?x@}#qq%aJYGJxmv*lx7N9F` z2BrVn)Eun0@3Frj>+gN`9k?Ek4Ekb*6oyVhY|Nw5hUEJbU~X2a7zoBSV1${b;p}4R zvBgk7;u*iv-eKMX6pDK;)-~(*r&BlskRtv*nxeDSvU8!FfLn7_hwG(EWx% z$~cRG3hgiB1~9={$ZaF()AJxBakJc6MNL^>gz{{mnAbHwM5bq$w;wuNaS5h z?dIV6R+QN!3Vi2<^i!nt^YI^rS*=d&PI$xgy${f18o#&KywimNSuGJc*e&r9W9cEp zN*!dohPvvJdK+4b?-v9X#_^%?rzCOyUM%Xz;ON#vU9>%3uz9&xvis>y z*7ZBrR~H}OqU2`3kURc;!&@h7O5V`MDDY;SM0m2@2KT}~nW+EUpT2`nH>aaTc0TC4 z&YF$%==JTs8b|3&)Ud#}YR(iij-|OvUkKx3Cv^36v1-(=)rXHdi&t_+5R|RK9>gmc~ck-A+k|_1C$ZaNU-eIo=cVq@{VT|SxW!-oc3t*ywRk7i_CXKqkvw8@ z6wh{(=P2aLdBqgDRN%@zG~9!remWB86`XOq@dA(m|Jr+1#)nTf%dV^5(fujG=tyo5 zdWqc~JzfS>R#LX|%3h4t*J@ZzkG?=^NER0_U;ZSl@c!aJke>C2mLXmLnE@D_b4!{L zhe5{I`+bt6x#n`RLiAWPVSN&f(K@Dq2o(*7?_wdMdA;k*X7zXVGqzddn91b?OBwjg zuJJb%RTN^ePc3J9s(&BY7q+dv*MbW|8+bd;wN(GQAkptNNXu)|MArIee0F@%X_QT$tsb>b;CHByRpI5RLln; z>0G|c`a>!lO5n}naJc?=Ju#zbrvBUNN!eaN+M6&?Gvb1NQ4(VTsIVjtyK+t>Zi#%? z{C$9B>!)zLo=cUx=Q&tP@Y^P7|1w8T{!*GU zu+Qd=6uR$|<1D_f6ZXzXLmhOa0~k2V{^cQR!$;rhOyzFiPR@Kv`a6*oOTowpl9n08 z$tv^Gg{5>kUnhjWsorG!<2Ax!s_V%K=nwdfn=n?xV>=cmay%hy_`vhDdEfy0LWLV7 zq|kb6Eqyaav(c05HoUL;&-(Cmc6T~H0TG36t9%nuD&o#<%Q9b?ylaJYhAOY+y<`r< zCHuMu>xITUj3mXB#(%I;rcBdKeSShKs-~r^D8;M~ z#c&DPPzA>hi6*+gO*w+}7|HfJ!ec@D-$Du_@_a?Qe!-SBviBy&WRT4)b@wtRakVfgsWw^j^^*c#?`xt;?WNtT}J zJydbzq|3SnOXQ7348|?&RIiNMR*L9$Dx>f=zFLj7^jYHl>W6z^1ddqMliTd+W0-J$ zoaR~zI#E2gHcvz+^n(nT4a|FlooclhvkUmrl=P1c$@kx7zJ`*l&q#IGXHFy8W;MoVEKHn(r%k@VVi2 zF)#|rd61K{MnV|c(Ya_@?r{VK{liBABAY2Zvd6271==tZX}L(>zTbkN7xO2p_M}-h zE`^7mqMkQRBnki_#y|A*&6{`sgFJmBZA){F8+j!X<=FA?)zXVCalv_*W zat8(yu(d?PuiEMO-Wk1tl<8c2bK|>j*ja_+d1LF?naI_LgJ)-vvV zK$3J^jMl5pR#Hs*pvz`HpVbtlaV;x`tS_|tiusKMjTg2b9<_Xai(k*|C@$fZv1NXx z!Q~@~SMp}+vx_AhIkSQG7y>^F8JO~J29P-SFg2U=;?Y^CL_ zAzel#v|-d-e@~*_%1t{7{eK=kS4BtnU)$WrPB^)NUIJD*SHwV3I>UWLfR>csi zN-;3Nouc&Ny!?8F(j-Zd;gQjE{MWFxgD>M(lZ!!h9Hp&m!9$IXkO{L1&G-g@JMrV? zF+RBvm|VzSar^3EOFX<8+amh5@5?c|`F_mRN$&}Q#ekzbr&~l}Mz4d!T*~oHowJ4i zkLdhyW5NmNqXo5`Z~jymiTSCT%3^{8!RoW{!VZpYRd>@boe;54SeOG17j2H61G{5% zv2rL#DHx#__QF9;`FE`-$RM-pEWkv$BSvy>pktaOtU|U@BgP2!j%q=j9e0$2V-ath zx#9^#^?IBJ9`cuP%=YKATO#d5S^9|ce0vKCG|<6?rz>m@CGkNzN?syrb`#ilaB0`q z^IN?nLoSf;XqI~0%m6Zm^p;jqf)zKNgwQY!-3n-0fx|r>M9`Y=YGz@lD7m16i-)jY zllTD(8F7&;@!LEeuNzGsY$g?P|C0j}0hG_uM|1<@HLEiz1f}rla2%d< zARKAHvAU|DhlCv3v0{ij3veR;dd$=xHLzvyeg(;2azxSPx>?z!FL`%+nW|E}LBeJx z?GK?D*_wn|d^!eqjJ&r#{BpZ-MC!1+G*L6%v zKH5$H*lRVF4+%WtV^YhFnPS8mxp94r01#^e@2BvwNx8odW7h*3g->GRS%UAS#+f2D zj|9eagREa;S=(8nk!{dvOf6!Z9>Q8Q*(%dj1?!sJLKykb9p$+PPw)0JZ#B{YvaD&D zDTVcr{_U(Q-+j>Ss2z+h3~*hM*#cBK$@Kr`xai;lPDW-btpl=#7b%pQg`+a}xg+&Y z&A_MYxTE(Ni`Nt#3H09Ke0I-{wj8?%`_Ul$VGBnw97MDy7%tk9smxbQt2PP)8kx0t$9XOUg(k?^4_SZVWyU zJTIfbwsqnC*YVKA+mhw|_5A-P$|-vSI&M0}eD0s)J*mDw@C~IHMK92s`BH9JO~7;% zkdu)tt#O|t%zN6v?f;;9a_K3TEA+)`vpF}aGc)*wy-?I?z0^t-pDe`8`d!CWuN~0m z{<_isr|+pHaHW@knS(^VFvFl7sIlqdp~5;z+_CZJ9B-Y)9)4stST6j*b9Pz1Yi({~ z`{=M0UdxL@rZYru;~>^h^Af@RB}&aK<@*;6Ws9FVZ{`qc#0ebii7FJjD`;t<#9|a# zD^9hcZbqV(le6?%O|EfLIJ^tLUdhYVF{1)GhJWxG{HHZ;N?{*q#z4fWd;tyMzZmMt zqmpm{za0!%2BL6#ae}(MC}D$EpxhcW7gf18g_E&C&?9extF^hW?!o5VI~XXKfz451 z1&-Q{^g#mO)+vNa#(B+Dgi~NjoQwS!?9x}e;nVJ)+Qs*YdX_!FRwb@ z$x4h*zdh`64zoqLU6TVlhLVDWtH0qPVCfUL#CXinJ~mU+QC%X;B`Ti_u% zg8-qQ_H#vZ`k<-K37}uxl?vMP56q*C0 zywHJ06iwPoGQ1DWq|YW_o!&G+QJ^X@Y$gCafZ3_r`7q7f*rfXkBT&?h?B5*L-=v6V z0?uc*QIsJU94ye`U!Sq;ATEzd-o`dK=cRY)m|ehBoH*IL?pd5_av}MdFHJn|KXc`H zDr=t}H|eMunKqxsNdUy$V=is+2%w!>9|t_ffY=5IVVz_m*~PKGV9Hhu{VrDj0=H%W zU^)}$|5a%N9G0e4vlwK`h0+fzNvd;n2jX!K6Ikzzj9Oo-zAn30f?4>-?*S~|-^FOY zpDj=Fmr5G2j;+i{)EMi}2|%^;>N5I_O)Z?psxPz- z`shTHcdkB!du|nn(@=0Q;h}qNZr;uNs`Ha~vHGhYIid>hFli)%$YdjNL%(O!p+X@p zZ&pArZJkjJ1@GZHF}))+Wt)8oN3C7eN#Uv%^o-+CUCjnR<`-lN)WyT|73b*hyD~5Wt`D%hxt+B8XEwT z%iZ^PGstPg8@|#N4vI~&k!_Vi&Z8TXHxm4P2kBpZ8&NiC5vu$}#iq2wx0)6e0Mu9k ztg0V?9@Bt~mr*B43VF+;V8_#3zn~!G+Sd9~rd7u5GL!hHFTdf#4Ma%e%`r12G9501A1Pfyz(h)b=nwNDPYvssl zdtkI{DC-rw>(-CR0x3z6wD_};>#+@AYqi7g(Ip0t)7x#XTXODguHMBT#fiBM2rV-C zRZJ)c2g!L(ZvN6G>Es@`tSK!nm5ARgF{t8GO!{;OBm1gdX?EaV8wa;VeSl= zYZm3R@2ujp(8~LBdpMCXoCH{IcK#-@JeVC*qWzRpn@1~x$-~fG8`X>%yjH&+UgRUj z)1iWUV1OS_#6G&dJH>Kp2dTGVIU1nqP5ni|>!A~n!fGuK%NH@NeJiH-%yr^s(iYpg z;10fmu`yq8Nsq3LB~s6f8YUEr-qA|qLoYBC?n$)}#f;hCH!5^I3eJS+Zdq$aCoS*h z`Os2`Hw<=2K8Lp?es4OwY&wN+3cUwaG92)tVAndlJ1&V4NYKqp5e9?bJTITqr65Is zzVEn6NCBpfUE$t5vZFmRnc0y5eL_ioYZh%{qpO3m`g`W);|H|-z?)R>9^*1MN!MGH zL5-~NDMoB%nk%7s>~g!615Ssn#zCR5 z*k~W!2~Au-NZkjESc3Z+F!}*Jb{7a2MQpOrO7uX~pBT<<+*d$%T%Z|Z?Ctd9j_=$6 z3St9TfM0WaEL7%tDhQ?A`i${zyAPoNUUPjXHQB|+>n%`yWgApVIHzvOL`H#XSrjvj zJL~nVZ>tAnhk_g?tYtq_HZ;AgIk1cD+?ThUgXIn7GPi)6=A+mwU>rrQG_0Y~pRRE5uGnJAsc+PuF-imF%tRVW#yx`jpN|MMc z(Gc4mw{nJ4L)f_7PL&hG#0FvNF%fbIj2U z3#44Uu)dcWlP^_A>||#)WG|JlG9JTKes%es0qQ4PAhqb{IWPK@ zOSbGi?t#VU9VHZ2R@Tn3V}&?BPdm4F^-6zq4=z|kR%(W?p!<5iM3k&iVgqw$Ij+|f zsl`%`$+KPsRyJUBX7hpmWdjw%pF6q%cp^wAr_R64QKDPeVZpbE-?U-PPgr@HREd~4 z4CVKD4jnt5M>_Dk*E_ItTOQ4V0GL}1RV)&gqX|NASZ$oE)5vp1nq7JIeTk4gnYZ0~zj`g={(G== zLC{a`ZyqQI5X6%~RHr^yi)z-t5x$@RY<=UVDaM335dZ7)Pb{WYNTE~SF9QmM3>zKf zubPru{r7RZ?gDxEO7RMKd-IfBU~~ck#M)(Qq(ePdN)LhWYZ46r66`g@ey+3?r1>59rMOg<kT@+IUs`df$ycrj z-{|o7Q@}uP31E7s0nQP{`?(e1w)gi|;xK;WppMS%<=wVe;Lt`m*XW2*v+5U$W7J$I zTZYSG)(debo_QkHGIg%xHcTeW%>_igc^N!v`s_>eAaFS&2>2XqN zXmup`KoL)IN50v!9k{#NPStlF9_s~w>TVnzgPe#UE{@x4QXIzhAg_yo@%!KBH3D1%Wjk#qd0KP(uKDC;5R?P*Fba3CTB3;tmd$_`UdX4 zguQame@D;b$5^LjhzfFml#S=ar2}a~^MZ4xU}=7abI(hBB?lgoDA|BLAE3u^O$;a`^^yP_p!goW@Dzu@xqhOX0wf`Lo8*|%pCJ)>})7ADk&j1KWptXkB`&5 z8KaauEJ#uh6Cy_?a~`cLqjGOXJH#LdFm!!yNxQuLXO<^EpU+t%102nC3E!cCQ;aJT zq@(yw_;q+(`T&9s=H);^uUHGpj_=xWPPeQ}YhF+xg?88=g-I~Oi}XpbdFXpVp^ZGHfu3Sth{=*B$ja}JRBw)e z;Ei7i;`XXk<@R^;C{j$Po3t-@394rm_4!j~wlYn$1q#fiR2jq0-l14Q)zP$)v0XA`mmCN#dh{qpjQjGO&ft zyNc(<)Iw?mA~kFB?JNo#gxwZrDO- zU!>i;!o^AMkrQ&qE=2#%pQdrx9FM(>Coa2rtDm-iPxrb_#WCfyo=7wf2<8K@{@WgZ zPuEX&!JQ^47@k;aZ_?-(z(#Eip7F%nv*sBNGEYOaX$kl;-nNKEtgFoyD_PUEx|B0u zlUj4tqZS*+Ngokk%unIX7jGAPohLUwa)XV%uww2+G)3*NUsshpC?b(9RLL|lKfvFw zM>P_h^A_B2H4amt`^}f#+Fj*!0Nvb*SpZ7l6i9RqBp&{27KZ{JYo_(2Z=SCg+<|O9 zxA$rG1d}LcqJZ@^4{(BG3mr-JuA7ZnJ|r5|`)b~-owfwX&bFl=XI(s^U)MGBX;JR)MX?) zk_SR1R>XHg3&F{C3`CjG}+*xapNl36m7nGA1sAnMuYIS zI6wy+2egB6E?mXfG$KiJDdus1s?0GQdh3f=J9~Hl#h&&*shZUIOY)bSYKvD+cYiSb>>kI){49|Q5onRovnkz6fEjBIRCki2`jwPq z?8x&+*awL!v~P>0HwPg>;__#_CzrkJN%C>oilb!Syp+~f-FsokvHAIUF)!l#>ZEh) zgU)G}=2q1^$RPun!RS)~U4cqs0d-L6uq3Id&KE9sQf@g*lQjIySMsUcY%e|7)Th-K z&)-<&KjRwm)WyXf!?rpaK3Utc2j)5jlBoLJBA(kpT+cX6R&#o8S(lSPZd{~NBtavH z=4uzC4naX4~gEKdomf9CIQ!Ppd?Y$60~pz8)NM^8iYK()T9q1h3P zs${YR4*v-7`SQSJt^D<$2gW|YaL5_Axa&iF3JMm-8on5=Y_~cRnO&|H4*X?4w6pQ1 zco*tD^!$Q^J96`y>1D$oXT_>&o0$7@!z)me3YhCJ$E`xT7G}xjaQMWA)Mv7^s3vap(fOV8-eXEO!UD=za_L;5^VlRCeV2<#nz|Pk zua3H})#4Htuc!xR4;N^yU^Fs(CGx9}4=$T4^f?{Q1}gVI@<0x>I)l=JNFzG@;IGJ^ zaPsdxefOp-?EFf33N%C=On;N^cwY8YqyBWU4f0r;zau+3iXU7SFMXBT-x;9m;umCP zytGW<_xq~%53h+#IdFanog>0VS!IQ@FL`+JX$u9e8WHc4LV28&dj9VVNS z-?D71VXrugyS6w3Be4OrcyTA+3cCg_HS->2luH^SS5k$AE|L~SM(nSjrnbqyY!#A( zhDeFIccBaoZWLllz;A~N`68kM2eM~8d(U{t>hNUkF}lx z8U0BwSv^pS+<^*U`$~eLXe8$S!)a@g&59WMCGYD?G5NpxbHAY74b!aJMHb1QTb(x( z0Lq!?aYaw0g%y1Cdh<>uSjaK?7C({U_6K}qC#=_WKMkkeS>B9tRS;hY*K?p#7H3!F z0p)7fccymPuYGi5WktEwt4{DE)jheb*Jb}LBkHMRiyq6H5}r4u7wLB)OJUb@yP{UK z6{zUQxb9pGr*6H@2g3LK)E&NIoT8qX*5*ib!d$Ls#a27G`Yk@#V`l9U?c=7uUOiC& zmhxa6$&aspG2#5}+M?e{MUE$j`?i)q{=K^Cji>%4m6ZUa`~UVW0VyxKn-pNcUSAxS z>c09J-+|3g-A7@j?Z$`*U2=D-wynf~fe+XSe`+LqYz3X;F4j+5Rd`{b+Phh~8?5Ei z(NNQJOZ)$O%YGQ*`F!a>?D~0}#Pc~D<}`yY)1}(cu&RZ)x{fnM=#& zRyKIHiJ?(!P2{pa?$qV}^DX-ss-m3Dr6`TgOVS>;S=(^R=NL=@;69RDLf_UbMlC}F z2YWY}>#bI$e`K{Fsb#;CAFKNNohOSc9^;E%b@(SMd8@UxW6cUnvTMb!x`H3}274h& zAJMbe=v%`&O2-B#9OfH}4Vy-GXDd0kHI757+5I+l@_jcBYN#PCmD#(0nvdpM3Q6_2 zcf$z6L<_XS$cOSJY2K8nb4EG|`hGoKNnE|3U0He8Pfx)mE6Zoz`}IZZ-MtrY(TWcO z9X@6P(5F*r7mPp+kM;8YfxqSr;#xX_zQIF#p7E}*S&0N~`=aCCB3?TzUAm*~5aQd> z74&}EBO~VtUlZ&|XwCyy9j4Z2E;d-qrN_e^@b!YFk-~FCJ-Bq=*s7sWdYcG}RaW4k zqG#>VN|UX=(8q^K!&wh+`2F5G+tIE_@}``-oOgXC$iIsJ?zDSuo7V21X8i2Jz!jx# zm!CTwCeJtSv0$r#j>drZ);kOG>_xzp14Efh0qEgF_Z-p>VZ6ELKd4cY+C#)CA>o9a zo1ScVD2GraBy@02F&&piC>F(lcijl}kEeaa*Hc`JnV3JZBY(nB7dQ*lqLECS_3E0O% zaAf7#-Pqymth2Fk`jLCa>Fenjp`6M-;X(FgjMeXs$GqTh*E!@nob?9W=u6|p{%0r) zHw=o~yYxMF!b?ihdOSzZC^2yow=nZfk!z{zb@NqAhFE~e=drAKLOS`{-_*7mg?RzjNs2Vs7uG4{^ zl>if}#6LIUb$urgx?Z0Yb!U#|fdIABYx9LhOR=4S@r~ggc}2m4Pj7BTfY7vYV@9(Q zk#09pAlP;Pl@E&)BpWH^#Je3`7V3p%t+*dSIX^{jltx>E_ot3?8VbG#v$3GkK?Af_ zK+RD<$9oo&@VOkS+(Wv%Tf#Y5-v}s!LLH5Sq!Md5Co2`${THjzL>ld*Zauo?=J_Uv zQrTO2&}v*RlX1?Bl6XN$`c5+9%A;Pl>?g2)23Ve5Y>C?$i?CVg8O4D&m| zDTV1c(+};y-rI3tuMws+Uc$zc2gZuVFK}C4E){Zura+@S>`#_}GNBCXE z=Mi8nV>w({qt>Gf&Ds43_|ElqHGZVKpo`unW7~(KiHa}`%>+x(4&9NUHX9|737z^2 z&9Dir%Y)j&jTOBpD)L+2g4mW|BqUr5>srtaCAne`((L>5tZCaw zO2a|NX-}WKg~#L+(s0DG9ZWhwV=(xO5C&+^Z`&7ld;kt#Ttgh7$vAq8Bi^lv%;!B) z+1(A?4en0_p6HloNR%R!mn0$>SP%lj+B63h1qmu9q5|BQz3<~Du0HoMYUN6yGomQQj*vKo#E1U8$g=dzZlP81o5zQQF7d^J;}*w>1|#;yk6L)TUDu!ptQT^hRmr|5 zhjx-)-`e7_Q5Dq@>uAo_WqnxueE9j)OGbap{7>SK2;+JFm+>@EIqlitz*?ohn^7#Sh>=NX0`~*p4+}%sN<}gN%X+x%{)(>O zv%^RPM_a}Ab%8ck#+%nguI1QO9O4u1J$JPIzCYp{0T?j%0_c%_=)@vA9|zbW+CcH> z|Jfm&|Mh(Q53!vhVsD0hco;u}OA$%7iaD&zH(5VAzHm?N8i@v@grS~JGh(-1*Rc_% z=2U=zBUxG5dh;8$r2qs);43J| zX0+$m=(8Y9Y%A`&pOM}^M7d+Jc|*c^%wb?BU2&+E{zN^S2}a0AD+fCt=Vf}9-UEETb{4%&HN*CKE~4~tPEyMZl`cu&0Uz&HZmPg zLquFf6PZ>9SSt0|;|a}c;2rgIMl|DmI35d_r-m{LnnV;M8;bTNzJC$GMnsw6MA-4yo{D!m8gmEKJ?R7{0Zz||I~^n%Gqde?-$wj7ImE6TX9in zvW+ki-+n$FNrdM1_M7#=pl^ac98s7M2G3b|yG+4qv9Xhg^MVj4rZ7CJ!i<6ZW8%sG zS^fT4L-=OdbtN!Vj_Rqxos27}%EDtNUKJ;$X7%ErTv`KgAF$l~|5)vALlbTG=~pu7 zyn{aMoB4bT?;~HEZdY&Q-(_x@Ojs3->MQ^&n)6qD;I~i5i7;tL?%>t0q+z9~428AO zVz5D{s``m**|@;5tcS}m>?hG2AH#$U!*KI;wWE+BpshQ;hOHkF@qVTjcO#gz8T|kZ zrjDI;)oHCDC)F7gNWY;AL%}$3p_Mns^ZT%=Y-v?13>cHYouGQlDn4Oa!+eRLM}@3cjFADj3V)=F0xbK*^NniCwnUzv%yeMOxtm_!tE`~E zuk504$_tg-Kz`|TBAUq=o4vOJVrxOU8g{&K^u*;Kh;&!S`WfkiYbLj!;Xcu;8G04A zo~R^^E>i2@ZmXCo9)=zBhqq8pLL()LVe4FGSdp7}d_Tgn>bXWH3GS5~LbZ|8P{<~j z<|V!B%P*SL#BAV%zLIj3c`Xh;so&fr>mfxq{6%t~6oK(2iVE!;dKSkIe@3&3USlc1 z&Wh{`jakyTIUV6f%>=1J@fQTTEGX-34RmUIDeew6LrJ|jH*P+(Y&lo(?At5(;d=>| z*D+jcVN*Aqnx6|=R2x3q*7dDcR0m_BgFZ58gy5KxTdy4}b~#bgKhX?H?Y!~`wyk1D z_2VfY80Y47p9UMOj?cy(p}7ZBcVQsXCc2%tlTi;P!!VdLN4$Z4gl}Cw ziyaApW;{^P_9Yh9z)$!}qPOxDGkUJS1F}2iHcYyk`Lr|UT&a9~DKgzn6re)Gf$%#C zsIxczzqx~C*~nMFP8<#G_1n@0v$mo+gnl(3zxXsbf)%nAx#{zA6lVz5>awVL_K&ui z!~uNx(eS_C|1bd{ir)mz_h_2MJ0RhP$L%0s#cRDgUFrtp*^|?mI|g=lkt79|GAYhF z=B{f&?%$BP$Lh)hNQ!g$zEq0*eEz;!z3*~n+CjX*rhYw5F>nP$4K}vBlRCTfB(`Fu z*q?XnN!(^+h$};(+=J-!y^}OUdnp5?LO^6kVuRIiZWn+BESJv8j8EH>y;`n^t|I8{ z_mvIk8gb0{CIwrsL=iXh;`ZSkLW78$~qm z5PHsG7~Na7m%aNgLtKJi8e9y0IC+c<0@5G0g|^7VG--fSTq9h(W62ReWr`Yyt*m#t zOSs_5m> zQQY9a;W-wJJe@%w7u5CQj>w|50wm$P(rObGj%sp|w$h)agr;j?=wS;sgXLTXyrmkr zAM#Q872UcKs?U&5+?!I4(|d7bNt4?}b4f)4Z;vbsiSlV4 z6TteIc2P83tb)v_J6CJI)Ef1(@uK(df1E>6O z`F*bJgyS5W@ga3QExVERlPiiTgRx}cZ?680mtA!#pArH!#{2qpvt7J4klaU7$!0#_ z4YX|mnY0vtAgNZ&Fls3k*$woYBmqP0|KI%AM+PDd^hl7j;f8I}86cSso#SD4Li^Q0 zeY{FZsF?e%l|P>}EKl{O!Ph<`ezl|K=5_>sSX-1g<4ehR0q)BW?HunF_LVw+Gef1$ zwptqJHOB`vA~AK~kqW8%y{3Ea{pGkXWn@Bmy-xWslid%Gh%hnS4h|UQ(m9zeOjDR6 zIdf4J>PTg)W<$Xr{@xGtg|~{RBMy`#^B`}-LP6x^g%4Ys7N|V=Z+We!z7fLn>B3sr zId@uy$Ux3U=%AxU)etOo#Y#{`hvb5A()o9I*=&X5?vBo0h5CvsGp2dLI0{aQy3oR6 z$a)ChftxAjLJbnSBh{&~bLbzEH5(LAqyMwUW4=_k9&OVju0wBAiBXYv`As4LWEyCE z-mOY=l=Hao3(|sKi$t9arVwm${Pkmnrnl=cI*-o~S#_x}Su#|riOSbZl*T&vw!caG zDrO>_9dt48J04Ximo-V-)AiuLZ_La`TvCS$^KeN5``aQ8?7B}5Rq5UL!q%~0jpRnbr=|afhU*4>!pAEW;-x} z)EL@l9Yy*OkZb(O^^Px&gxzf9w~wj<+ro_*oNw;h3$-@ofqHL<_jMg}{~`Qfm?!48 z%p*XJuq*EFtgN1Gw(Z?oVyFD3$?Ad__bf3swN0C8S!|-hGPmVy@`J8+8{&Oi_%z|f zKpywVzH%;hS9iI`On`j%YPrO8;6RhsBG8@>&=qGt`VW}{-5?P_So+6O3jOdHJ$f(! zh*MR8Z6mP-@XhWe{P4g1QOD6RvWK*y7a2Dpw{|QzbY8u`By{*zE4;%Bo**|qd?(<%CS~AdxivDk+;Q_1E<(b^0q=1CJN55(?rS~B z1}%nR=yTrp*H0a{i8S0hR@W!%(RsC3N>C7$sNnb0O^PSpg$|#D1Fv77)riDvx|3e( zgE@Ag-DtVpK`AfkKQXD19|nEZ(7tGKLF02jitA|%K>>pW>IyUBy&W30(S?)V!G6WN z5hg(yJRFvOrDeD9K2?DNwl96V9l#~y)P_dLFFdEb`aA|8BclUSdnl>+22hN~aS?Oa z!@AIClL{(|vo;(G#0&iAn3%mCjH50)!$4(#5_kK$ZIng38PuW5R)uvOmPqPH?cFmf zEB&mA%IQn-IfIk9-v_6shTdf&N_3@O48ihBfBcT|oY|hmUut4687vy1(5hmD0ol+z zjH@nWZ!Y6_zn>aq&(Y;FO@y=TyaY7hFOgEHCqwQ6ru$G#p#|{Ff2vR^1&3j@XgNzu zoQpJypQ0255F|d+z_sd+bXe~1&D^O9bNve=Tv8PBATd)c|#V(N)n#}Y~2k>C() z5LrCiX5bMG7z!M@hkO%|#I3FhF+-^Jrn*V4-*ZzqZx69it_pxL2LJRw7LwK3DzbRu z4abSgHkhvtd~J1i=j6&?lywx^-1tj#GCF1fX=K0xTDaFPBFF1o)k)>Hha<6UVl5As ze(StNww--3P@(&2uDgm){U|#|rL1LrDf%ZQz+GJ3fjX{OTY2pyN|O>y9n()Q>ufE9 zd|)<*bte?x6T-Q9a(mNCr_4i@PpZVo{*V_Ot4M_y)9>AC&Z0pji}rID%1*sr_sd@bbkW>05Lw=^ z`*p_T*~9higa>>!gqvBxD>=~nPHcNRKuW1wXm`Wr_L96-7mr*nRjSX*+|YiabeVkJDSSMPo?0YjTH6(g#4JG(|68 z$Mi5o;D{XVS+kI_D?K8Z_AzK9E@$iYcEK-Smm(OFD`ICE(Jvz zC7J@ycpK%u(Okr0cKl}$`n8(hmQTUToGmMT33Pjy_92-ejxgZebx+}2NC&~O5QUF0 z9j~7dPjJ+w^~rVzfuW3D5?<4e_k&2|$?0}W<6lVQ77DtzDSz6T&kJBqED4SBM8Y2K z)SU3a79A|m-#J}hpN|M@VRj0)ciaG|f(iq7M{0M~Vx)>orrW8cA;HK2G)lf*7~GCu zWGFv1KHl&jW9)>&9$-EJnSxG50Vj1B%xK%;!yViQZENcmp=HDIx9_4p$vCPQr4zB* zDjo(OsqvW~-`_);#Uv3w69*n=)Ld?sB*cPlDDotNLV$L!&BvQuh-4WGm&QmG1^?HL z?H?Q^KU$j`(enn32V;etPA}%MJN(aa(=|R0bfLXIJ^$Kq?Q?0XFH%hZvhQn=aVASu z&LpA2+cY?LCD!Db;(_TKqPJro;SHqRO0_2kH!4e_Z6rczDe#|Una=Ue9%0QM_69af zH#Rub;@=YQu8ucOH<`W9E?7UBt;B2Zvv2NgqqLsMx`?D*05JC&{>x=H#gYK{y~(*) zE-Gf__le*x{$(rao_KE#=Ptsrhu#9{9guB-h4dON>8ld0#oXfTuisyaM)?4QmlOB7 za;>ik;kp}v5Dct%)Gb~DulzNMja4Fn%zhO9zgH+|EIPTyaQ8SMM=z$~;j#{cv_w;= zx>MDQ{S~<^wKtVi0Igkgl>|}oWc-8&=UR2i9RBe4_PKe}IrG$AzP4t5$iYxO zxA^2%+w_!%Ma)u=n_KdtjCio^{wXRy;^|jXhQ*C+3XsNjIUT*~-Y2(sq7iaUNI+rY@oHQHZeY)OETrjvkaecV;@aR%bm64RVdfNQ* z>uYHa9yL^n^Iub-N2Ly{?Ecjq+^#1W_v`Ax@JT)~_U)++0X`D8i0uN=(#|%twn;_76>YT?J88&|_)d=cG@w6ZX(gnwxv-#>dt)@Z?KqP?J|f%a zZ?Giz+VYt-D*YiIJo(CH7W5f}H)r>yuT+uZ!}#e^X~OElw%|Aa7v|;>SzFevflsVJ zPuD>7`CCnqZyDf0ZDlSj+{I!aCfHoEblfRJBzFCJQi+CcEmA0oz_(trmEWXc9fo5Q zG94(5&pPhWTWg!gH^_QmA#`|DM9_WWDsW2SlwQ$mP+q~CjPj}aEm z6DgTPmWn#joP)GZ;-$a(?Aamw>nZ=E6rphbTy`OE=TIvRbUOc!@AG8;IIp^j-FnWP z{x8PfGAhcjZ5LL$yE~=3J0&GV5RfkE?(RVvK}v>hY3YukyF+q7y1QZDKJWMKSbP6? zf3apQ77LiU?&~~{bXEn{2?Nr?fw-mbf^CA79uq^+1|y`v6)EO*v&okw>JKU|cud9I zI12eGC_xQd`C%xgY=(R5j~fVW?tE_tUbL_wK3lYVM7wkAg2T4j*TIDB3t6yP8IX{A zG(MQYATpfH6tX>|x6w5X7^UbWFj!-{Zo>JT&u7(O(6U5*RhNCDd>Ixt9yTxT+?C|? z(|?BJMHvw$4`dq6L$?pt&tkdpc8j))x$RwB*H#3AAC_s-s~T*4`CoI-lTO`q3G z*`^C`WV6m#8F7*c;Zeh=T@|P_?uE;oClZ2t`vdP^hz+e1sQI;F<0(5T7fHVz!Yc_X z0UxEwoR9wc2>^oPe7yE)XbgB`g5e`@J{?+{8NCTd(f+a6P7QU>uFfjnvA^+OX^{wcAggYs`4;3%C)%&NAfn3tCUK{60tp#5drOeQ?c zVxiLDA~5^?+^@)2%J2Gfot;OX(FAODw2EJb(zw_(imsHeys3m(1O>@q_H?%-m@I~W z1c%f6FKoRI@FmEaML^8n)jz#Fo>te?Nc}wW#(ieHaGbTwlpnhPrCFNjL6G=a5H2!X zUQUzc&tsq={zYS|>rn2*&?A-r(iw+JdG+WZuT@oo7 zqM)FJl$F`$twSUB08oRQh~5y`ai8k1z-V&!r>RS|mLts${ATib=X|fRzks$yvPS7;PWCKX4;vI7$PUAQJsy@IE@$-TTxHj))p#@7>n~4#N z@~I(MFsd2PeuaR)w$1F0Nd$gtYA3=jG=eA5Bv)HfSGauQ|9v%Lh#a@E0*~Wp$a8Rr zoCT;Lmel4_+e*jeK2>DWeJ$EDpqsv zrOzfC-OI)aGS_}~!?seG%G+!vE_5F`$$?_BHF=OIj4wdLkY*x|S9Gl*I?$a&&!=wj zOgSfd4MTHEC=tkDFull^7zljXCY!m_;kY^N&bFQS$wCx^;CvMqk@VHGaNE`!&WcXi z%}5a4?8~Vj6C)R9r)>&$M$<^Us>j{6sg8K&UN>Zz0b;?f${8CgcQH+zLU`Im+*U|^ zbM$lPf9Lxa8#oL*`UXFn-Q_9qo{m_KaH+N|j4V=NSX?YSn_b+%AKVjp7%=|${DH^Mqb1jB_!+U_=N zP68*p_MODIBO^03aV3-0{KNgUGw7>QtXwRq@zak|ojOze9riCV9k36%Zu>MyACAj9 zK0T~GwU4=QPu`B0B}l~rSVnFGk!%Uq*aEJRG72|u!3)P)TXY7d(T38fOnMxVSW3!_ zC%f7AM{_l5kiTevm1s0Wn3#Q1J4sV42He$o**e2!e>HpQu5<4~+l!Eg?h0R**_Q{C zZ*mKvUQ=Ed9(-yj`||ekr?k$4rEE#QXn{K&o4e*n$mo5u*3Lr2z=wqW6@9}P2o-+< z+Q^0nht9BH91^UKh=hQ>^>rPLMwZCq`lm$p67!|1G>{hF{r-K=Yk}V^7%)aZh`4f} zi9r~LT7mEWUx??O8!(Y7vLKj$;{dRnc0kVziEd^9+~8jasUoxcbWSiNFvpU*N9IR$ z(k68XjUKo!`9)tX4|{KbVpKT$zZK^EH?`D1&`(X#EMWyY-H(-y>*2;$J|_`vwl6si zgFcVBcBk$xNm4M}nCn#AS=en_-dG6&#Rz%I^4-g^59c0<$GtwR35&SF3l^cQfk0nb zoBnCiq0nha6;_dIaVgH=Cq(75wWRwt;^HFuE9UWR6QK+@ywx-6>RF=Py-0))923@%HG-BA_SHs>I2|EUe58|ev z_eKAGADQQkZ6Jz<9|aGsr7>ir+>UhlSgPLPX840m>rG)4p``ks*#b>Q4M7--l1jTF z&L5E|vf(}Azhn18#J{nVMD5{tfBdaO2jK5iDhF@w?tQ4`8?a>YQRJt3pmi|~THF%D z3BxHx0ZN3j&Nh@KP4bst=4h zie?9)X{){ltzJfL&Hj42v(Um5o<|KC>eJ}BOo(9u8WkCiM7`ir9ajfpAJv?r7jLK8=EB_25ofGm0Q7-aK}!>Hw2%UG1uULoRfgI2a?rGWNF zqJ>ilNcEJNHF@!(t(K_0SDVdN_9K=~UsteLT$>P6UH%7nNzQLLUj3VgKOv;nk|7N& z6!2GK7vh7vi;tj0m@gfq({Ifkom#(g(zw?vh|d|~NcVGCFYE{m_tIsb2E z@qc8toq$k*bNDgpe`g2&x3i*?A}spm&Fht-td!>ee{Pi9z-R#GiJVI3czKbr^|L!} zJ!&DwWq7X`&3y+!8n) z-eF4u<1WN0mzr3;cAwF?V(4t-R}$e{63~uL;hX;TH=jl zG~eRBiy@dB@yT!~w-J?4@@G8`wmp<{Scck$PJA-yOGC2DPR5i_jqh#Hy|1x#kh054 z!BmzHGkZzk93=*metP&TxgeLGAkrH~mL57;Xs_~tatVb;p07Jm@w&!C<6}8FWt^5- zPmO~HmmPQ=<#5NdCvj;#SN(+(Z;&z$Ilskt8?36sQ%mt#l`$&W>_X$UnakA}?rVH` zh|pGs*~8xFy`>s{l=oj{ZZXV+3aH-YXp6oKTfmg1e_+;R_O3}OG%a=u>D z)uMoeglYvl9deE*ha+fY7h~goL|{|*?CM@ww8a&Fq2X$vPm#Kbn;tK<7z7k`5V1bs z!~+9@!^k1{)w=_Mn8wM<+Z))j1w>hZ4%@K4qzu#7L@P4gL?f!+6mNH@{VUb;6t9bz zO9|2FaI}SD%bqHp-^_!O>kIYAkn^;c^-sBph8sgk#Z7K5JRYM=N{?BT#R~-QixKwW zxC?Gvr7~{pozCv8^;_Ii-6&HXCAyN+zA z?)d<3+@4>C6aqyf^SP@SxWh#TNa}`~F-&4gw7kHf?Inaz!}u0fFGM4d!X1=~(-%iD zz|!96m^h+zfE1t7#k57Q!k|A9;Z9ShUYI91Spp*!aB%-04jezg<_0|l}=+J{DXS7AD2FZq}xoQx?w{YXWVK^V1tohWdryv>tq?4bP@#aY@Z2X^|78B+Y0 z;mni+j{oHlu$*lSWiQ>828I4L*J+UU=3eoQ(u+5O?#>W?EONshOA3ZOR?8zo;Djl! z@)gvcj#RF}8@fI8&H*r7)fe32mQN}Cq`b$;Z&TM#cI<8Zy}g^FKWg>G75iJ53D=*e z@H3l#mmpQU2M^sVQzvvU=*^v5B4^Ou zMc!75dA0JGW>}?swS4`(CkuoR2WhCbaw$DOnXYS`r5KKMmXHzWJ$q|ZDx7^>Rluv7 z#0(4CJ?DJMlU4TY_ZV802>39HZ{dEKMIwfVAZsw>NL6XO9}OjlC%1b%cU%vTZamrQi50==|K@%@Ziekk3T`C`RbBO^kpa1JkI&u#_mycC zJV`20Wn>m3W?yG3gId*_g+>+^+35T@#j--9s0!lRvH)}Un#Bh%a*c8(E`4hYCPOi$+XN4rij6P{|*JDxl~aEY%wtRmo%1fM}uk9v>JsVaiH`bcSfm z=RBlsLPIR18;g>~MJ>)6bNh1Q*GpvFdxwmU;l22`4cuzPIMwGXAG_g=9L`B0sukIWz8)iv*{RdZckO1N<#SPGP$b=qgMU zXd-_1?VKN8^S6P#J>{ZTSxi%+@zMUkij`r)TucNIA^45YUE29iz+vaRQLVTVK~gnL8Yx3nV;PDYqR~vl9YJWL zJsKvy{-gH?HhQ()XKgzjVJy-V^qz}mSWbIC$E(K%@`HuaIO*^UTCq^<10(MTr#MV^ zj*mf-V;RbGW!_=~09X7Z6fA(>IJ0x@F6(zXbs_=2ORw6!g97fev(*1Xa*|EL9aEx@ z&hDpXsv8cye6Tc2MX%DFv(pvq;MC)9SyGxE|3t8_vR2*L5FSe|=2^%ZuQ64|)l_lM zubQXUcQcs84XE4stAD!$CD{^~4=rJ?^NJPM-@~g&gRMp8&qiu{>j9ioSzM0#)_swXYt0v^utjM^(n;-G9wrdXRvcXU0?) zKL4IrfK@9z**YQwu4y@MBS8K5G0_4@yDq$89EY^2s?8qg$q74(Ta9eV65Z_lF zX!7>MVFo#%D3PrktvtKkhU-OPM>3u)va{NrWG7>{hW<{z0P)KpWKl@C>UwiG6=MM* zs+Rfr5nXVXPKpP$C>1?e!QJo?K~t_wjG=`=u!a%6hYA{I-mUt?D)e7Fh`icM+cU~X zcIBi{EUb1p)nSP1gvA5x)UWw!x@SLAL2}>2J9&S?W4CAghDxdoJ;=rOx;i5;YQZ)JT@@q$k#f^+Ix#?*Uy6d6W{uqaWm-Xup)4Mu6I0F9(rlw#en(Lyk{4QQ_>#H3j1dq%vq@}X>u zXM=<{Z##LIGO~Xdin~mz-MA_^609#kb}$qU8Bja<)avVXx4|DE){fCx&K}7kf!Etd zsf1+iq-qj5!Tcka%Lf~nlYgiyYM(l#(ZLf7{v{0TxZfatr;-t=FH}2opHm~ZkV|O* z6ah+6!NLjzBWtQ{MaAB8dszED)HK2x-#GLJambpILP?r%ET!Hb7_vpHY zJUf~0I+dqM5E+OxN^5FTpW7Kv?&XL3YUF5KYSN^K!gNq*+zV0(W>y^uFo-Sy)N`r% z95NN`m}?VVGvQRb(zZFEEwcUzgz9!`zndKZ>}>yq00DRTzZe?D>2(xhRuZBD*9G=gelE8o za@Va!kyx*q3>`ixQ$dz>4b;2mE-**PdHB1gv?8xEzO9YDQrL%*&3Y?RDQC=D&0FHH zIWN-zLr0BK%fDgc_CJ`cE+76@FWxV<@O1{KN#*3QvX1 z`qNdO*;G42q+mf`c#FK~o{?24TcFGQ+}v0_=OJMQWwy$TXR@#!QuWD zU^<3w_A~1L(LvgsPwnY@hB&>RR58O%)Dn8RJ;GEzFOu&veEs1hS&sUtc5AwY-RokH zBCBIVU2I~z;< zd%c$ekg8I5QcGCnblOi3HdrNQ=>M8;55F~B$J)e8PeiyYN4v8K=#_$G@WuS2^t3Uc zgMSbNJ3HPSyHcOS?9Fhe^@pMa_jXAV%D^YbQ)4g#OtA2`91nf@-CoETf%Vhz$5v_P zn8WYnwVfl8y0EUMYiCxhSr2?WD*M4gTOIvZ-&HubAHSsiX@!$(7z{c+Ks3?3RR3@< zOxo|x9!{JjZ+yOauOt1X(Sa>xj5KD*pO&k_h@X|{^P6X3ZMlZYE5-y4H2)TX{$6MW zm$jGj2a+$8Jo0mpJnPjOuX%OWG#=1HTI_uiqVb2~={+L>T7+5jo-qD>&azK(qYwNj z(Zy~92YqJMZfgpx84@I@#eSjhAr}g9G4;3?xr%eVPOf!$W=AQRzHr>tm21#_*mL71 zl1n52W9hy>0nZQriXLaunxq6-yzI%+O$r&>JG6a66^ZR;Dt=*3Q->P|IzQ z%76gpoXPCsId7%d2E%ijIoe}7z3F&@FnkB=ai~zJ%jOe8$2(;tthUZpB&H}$qFYbv zP48c=jjeDe$7M0C@_#mZf}w6%5jj%rKkHu8_eglAUaZ!nU`RJl$VDygn{;X98{GEh z+fhmQO5;P|U1-gOjR2G&s&!(LXli-HQrMw`a0sxI!>&i*nJerKaoRti(Vkx#{WIbG zPov(mK|=TRJTVh1D-;Z<7|wt5OXMYHqqDMR8av9Y15sUnPGmxjIk+73gm>N#xs-9{ zY%8MK{(d`lK^U$W6vFa5WhL^X(Q6C>F)_uYzu2z1-|`WiT)lXRA^ssPz7c6k>BqW1 zOn>4fLeVUzT4k{XryKruq_0qiHqVbrzh2GP`HN`o|6Z~qCcWi}bYACb;`bO|4qBEu z$PE(9-jZ}9zkh28d)4;4sDQA%6jN`#he+J%Ek(sjkgd#ezE4nvpFo54;l>_`&0}{0 zl=dh!{lE7BavcO#3LG_r#MDL+QI!V9&vZDoyBz;1Yu}xmSaiK3@}LxrB7ej%SqP?G zbPYQU=x6_BcDxvvRwQ42JLqh;)__Yc>>v80gFRtV!O+8Wan_ZCF+ZEUjhNHRhl-Vz z5QK3Mm((i1brZbP)G9*4C4z!#+|<}w(gpVxg?EAiU7z7h3Kq+ADXqDYsM4Mdgl~qL zXLDb!kjyQK7EzO%q>z|I?TSReZbUDq2?Ff69sQ-zop~S9P2E=F&XOj%!R5N%tX?zm zG?e@DQn2LQjF^bH-^V=(~dB^H73WeP3+)ZjnrPPDgz3|(t{?-2^d`8GB$FYTYnkU6usD0mQ z|3&hUKN)2o%osz4cWKEnX4eiw5b9c9{o+D@b+Sw-ubK%-7Qu8rpBEd;fKpekyj%4S z+CJpZ)xSqUI=d}A-;v!4k5dUEU@+LJ8QIbam;SUsD}#W5B`UXSt^bF%zLSN7_ZNo{ z@muW&ze{b!XGK&GG=ght&YJUC1cw|Ed{u1?E zULcP-43T5q#wWseVtwj_C;)AUrtY)g2UJ5khxze7^lS~HMaKYrin;Vi1!Bz z+a=BU@*gxtB2GpQc)$UBXw3$4Lv9CPFy5-5(2K7L!W^W21`KQ-W0Ae-eDHlN8>0`2 zf*e_B3-qr+UOc_}y|I+O8>4qIf+AdDMbt1P<7^Kon2rWrJma6J5}-m9;yywCWy{8= zD=R?NhG4*#HS+f;;rU)uAv%0zuo$dt(f*g0#+Rd3V4;S$@mY+6T{)XmkjJJrf8Ky} zyvUg?ZfH-zXyW0<@YC-mPt!t4gf);CxBj1KNLfeTb5TPXDs*xaW^aiVmOPcOZLEiy z9uCcK#W{Ol)QYnQA_l**qQ9|eL(|+n*Z1}vp{-Yw&eSZ*39GiPeO56)x7K9?XS48R zTYmX~i>rHB#)nL6F~Wmo{1b=S{^W%%aVv69La($HlROIthjAbTMB{jstp3G2qs~Zk zSINJrRp_IhB@Rd9T*}OiLB&S*=JVW+isnRawx~7W@~11zq%85jL3puIFiSJ8ugeesd3az=8f35-za0> zcNmiL+XT5TI4H9NFwcgq`QG67>3Dq^y7Bg|E|$S{j0)SL?%?KM*5C%!Sh=E8RrC( zgV`o0#fRr@xySsoXx!b? z!n8_$Ttv-xUmmn2K@taZiw{VaIa?nI4pZsZ`t=<_n(u{$i&L0T%(|z0mwS~W&|F?{ zwe?j&cS;BU-P0e5NWAwG^#dtmLigWoCLpzAgUzTCui@xV#B#i$l2uA==UVUn$b$31 zG@pK(vl`C3^`=+No;q-g7k)9vb5yOiqaqTagNV}^Rl&`!Y%TwRz3DN!skhns$lELm z2PCu)(ZSC?8>3m&P3>hk4vs7_%OZJBdOfsE`R1b-7HMq|M^Re@rOFxf6k#{xK2Enq zEf{T2fu0a+F)S@!6bcHvD}hUMq-`g~5%?6R556~6clV?3AFws>0P6Yfo{6a2sXH_P ztLFS;1e!B6Q9*xT2rQ=Yt@!P3@zcN!V+=pEZ+=VX{P{^<4%c)4kO;2 zEepk`gf8U`g0P2}8muqJURU?bs-a|1beV|$>WZ<8=MNvTR9MnIi(l8Bnrp4mk=yN%QTqN-x(&HXkp`5Q~U3q&?I#>*g5R7!x-jyZq8&&50{lYZCNePVz$j2SW z|7AwyoWmY>OcH%_`~|Wu5j0L4LF=kc9k-X}wJx+99p8%o+j1-j`BTxxAcrM=*z7R_ zuvy-p!iZO`bi`M*-kK~9e!n{?vq2ickK$!oweG~n!yD|X4lbx%ZTgoI)(vC>F#Yf3 z#Z{veXm&kMtAn-rceRYd`LR_J4?Qc}N<#6GIUaW?8e}Bpd*eErflYqw-%sDFzVrR; zo=EI)J?trAip&h`ZrmoJ$*;|9xs7BsabyPVO*EK>m8W8HgWqT4^Z^R~P09`=8NJy1 z1!<7LjBj2Fu6vS|y=_qaxPr1H_)L=;fusX!!29>IQ2GgVz*9wfG>gO8(-O}i+EV)Cxw$$>{@TNBv~s$s z=8#8!{TjaVv?PplInUYGGE!&I$y56Wfm~^mWR!?6GmtewLB!w0!2J~kH1wA}C^)u& zI=5S=$uFFU#!=KOZaLm)YjGcy(V!)b+v>qbSq~m}(Y9M=1Ey+ZG6))S;j|%m16B(b zL(@YJ1Qtb zO~fz|zLC0L=yW-XA?kaMpq4ET;jwu<>xMo0GKC^yxu1|r8YR0e1?{=7Hg+L>;%&ui zm_ULw+|M~}A7O}M51#2$_0{f9IBlItKXF&Usm7U9MXH0zvylmRenvvXBtqj(f@eStuxv2R&aS{UPD>mjmZVWjwV+)LfHJl&xQ5rpy2gX*j zlYXImXp>psF)Et|Rk}J9R~ogX+>?k;;w{g|LoD%Gx>hqASWJ@ej5%)=kj@(9t(=%O zEA`*PBKSubAYyLq$lR#<#6C`}e=F7+%}>4C?$Kh^ttTOGb(0-R498BSepBj4UU%8m z%mPfIMhj~fu&LA#H#UY)Asx z6s5J%d&}AS+iGz${u$s{v>s}!*`g74vM|^h^R#Ln22EY!lt0^LQuO`G%Go~uw-l^X zvqUIf*oAnk40Pggw}BUtwfyY%`~;~i`>4O^-VX3b?vHIue3ug?MlpGb@Zt88+_dyx z3T!dj`R|dbZZhdvN!?`JUbfK0;bgX8w$>Y(oqd)MU~zO4AsG{wI!Pr*dB4?4bX9|v zs3b!6e@ROU`w+(~ksP_}3FoUTV*S|W*i#UiG)bTsLnr}h=FW2)`3CeP%1+3|cqzoW zslGEgD8$znkF#maB;Es03T@12{WC(UCqHCcCg1rwb^Gpm^sBx^E5(A^XwP-1n6tm7 z7MII~-mDL|RY1m1F>;5a((uf~h@5$CK4b3m4M;O_TRRp>UJrersCR6cC&ktYpd|_b zM0xqjL6BM}K_Yl!ybs1iJ(qS}7NtIzUcSPpNE=(1*LB4{0?CX&sbNXomz+kZzb;NH z9~0quc{dHZIC8LgvuBgOMMopHQyBIdNAN_zvdKy<6Zq4dwZ3ObG?nK=Vwdrqu(O=? zTXw44=HBq{CNFb@Rb@&mLs*V8#vK6joFupGFYTQm>)*S&Gk)T3=B%X9&F`TXgBDDn zaNGS{fUzC;+Mi;5U;Whq5sw`U6moxQ{7_P)!&AyQA3Fw$<@vQSou2u74fn>}>j7rM zsH1mm>(JT8gC0zlglzdP49V`!!pB-)!?)nxk)$D&uh*6{d0{c zoJy%`w$J5{6yF1Px~$v3!bxHuc;$$>Ib}K1^*5kji`gs{x<-gt(_{@-Lo@&br- z)B`uMyE#Mtc>M}kER#A-qE7xfoi=mf%ZSxwrlKM=#l3+1_rim)t82GwW(+5bJ>|@) zpsq+lm{&dZMmwAH z;bTqy)+`R$MzMMf{WLqq$}7uy?Bf~1)Ud0tL>j=0l=;KBAzTDnnf@5JPA7t#E+?rr zKdUF@MLr75r}pM)|Dgr=&ha_{SVlHS&mZOrP zAouSqwg?9Uh8x)-5h$!*hZ5muN@D>pzBIra{LieF{nIeC=ZyIGIw+_*f0}!;)_>eu z$DdT}^aF+4{{nU?76>Q?wZ0mKfYIb9X>5arhc*_F#kRs_r)PJtT0ZZ6)4vLAg^w^B zZcjKEqlUPkG3yfX&ql1Uyi$q$WxgGud{mJgBIa)Ud5123Sr<}R$U{>W+m%^=p4zE) zy5lLQ`;f)TDmInl`2We2 z*&{XHM%g<4S>GX(km8E6%s<$W*S4;T+mVwhTVhgh<)>EVDP?Pty@ORl{}a*h#+=wvk;H15;V&p15c)twf7x-!Id| z%nT8+s&4R02Rgz@X9Qq5Sr_Xsf)`WIHRf#7*XWw>hGl{<=d2a@3toJ-y4o2TlD&8FTv)Pa3tz@tQFErUX)mssjlc~aXqbOnz2jUkG(Ajm!~PEL{pa4C zY>Z8|M&DYjikV5V;kL{|`b-|}f?@RC;Cl~$vzT8iBwv;EL{^6yyUuleFKXdIBs_cW}GCR7P%Q`oYlFRny^GQQA ze5qoyacveVLHP_5K$s`>zZ`Wq`g3N|+4@G%(%yQW1rJz)6GOl=1tCH%ijVjAZciLd z)77W<;AIIi&&uqsvIPzkhxx5DdXB7qs+~>YmBm*+hf~(~hrfuQ6-<(HX`KJa5?87D0kn!*^ zxlLD7792g;t`F*OLSjom zb>sa#oJGM}6n@tI=n`otqdq4LPk#gC=f06iUzk;S=10U-wdZdPn2wuMp`=ZLyUY|T z&7ebh?aiw;8$oel)VTPu5VQOcXHy?y;E9YjkzLyu`ltAi(9`U8(?*a}0w#h0ziV9R zek#{6AqW@4pkVjQhLao&23=di$x_!@x9WyuH>W4>lPLa|IR)Cth>XB=6qT|f*%{{2 zsq!y2ycH=ZvA+srAshRXqtF}x06byYEA!$R3;A%DzK@Mxh5WRH7;KW&Vq5TG z)o(A2XDdG=xpzLG0Y5jC<#+!MMnhkF_8_%wgEjfew`RqC}x(MHfp13?_ea zE~hie=35}b8QY-6Q>Ki+g42G-?nuOkEY<7;RY&vQJP3D}Bj0sF6-h~ELD*o#(Cy?u zQ72zV)0h&1M+QJB$Rh*cXs5h~fmr-Z z_q`kOEn#vf;(%|X%Rp*${1h?Q>BxuEfd1*9hSk3@BoFO(aUGMsy?6|s#c9U&?)D^I z1)0Cx{=}2y7BTv*5~#s5ZJ^Q9iCb_$XOu|JlrRhWp`*7Jpn`MTtYVY+ayvu~apf&~ zWiVY&SunRY!}LAHg7fFcQ)z4~@`(SKFZk*ZwLY%@St@h#;>~sQtLQ;}d1PI%cy(u9?e+AT8xZVj zdbgKy`CWtQJm9%DFZAq@&s@xC@A}wT!oIg1&DqR))P{wte038k5L0XK2)Tx}$#tsc z0NdLe@BR(1GufW{IvubQeLHx85wFH78GiteeRLRt=YesCgeDWtpHzM7u;P&<^IvkJ zdq*iyBad)iIV!1B5)$!zMK367UyG(dVvwNQ0ujo-Uh=PK(C3S%=50+8X$PPzu)Y70 zkUI#r+?#HM0pC%NvlB**c}pLPOO+KhTNo(cPN=&>%9;Xhv!&{%t^Z2>1=`KoB_7_^ z^DOpDNVI@2^R_0cw3a=&(w6uU$+mL^f>}RN8PvK9O20}mAal2Me8ZlDHBs?@Ndh=a z)=ZbpRg>r2(Qezq5duLr_YUFw>7)Wh%o<}uyoL%}r!m6r9lcXCmd^Y0_Q*zw!|`HdcNJzLTyVb$VSQ1}2h)%*Eo1vK zA;(maS)Qehx%VnNkFC+r1GT9;Yv)g3iFV8?qt3i%|7cIgK*ILI`^HnNte3TpXLPj_ zvi>m{a%bBNB~BJ^(z^69S9g4l@X68i8mB&+72lhTw!*Py;<(J_ zZ_|a!!x`HEKFHf;oN|{Ap?4O8Ao1V1WWn=4{MLr`6>##Mo0nO`((X6BQL4t5DQde` zwfAekZ(EGi6r?*D_`H+6D~+uKaLONGw8IfKl&Qor*q~kODEf;N!-dZ(P>3~bd>~*aakX|iJ@GB z-vYV!m7I!fv^v_FA)z;KaBG3D;Z(EaS#L*D>FNqWKZM#g;=C^6u)mK zY^r%1LbM=8+8;;?Iu~=zAGa)pZvyP{Zk3{omy%;VcHha+VTj#y^DV~Q7P;8~7b$Dl zGb+mFMxOMdNYxvU@!<%uOBB;xFwC8^4IL9DziLd^PiH6)FC;DfR8B;$ijsftG}UtM zUH#RLf|WdrbVOd>`2L4a$%D6bQ3mSx4t+o|7eZ=ser zMb$A<3s>0`|GG1!q29q%sys~-o27Vepk+y=CP4L5dFCpTttDS?fAd(iy*0~`&OFL; zYC~^UvOV4Y4HVridu5hFUZ4@OZ=dPpVd-e6CqV#z5k9l%^4*#GEOOwDiqJYT=^DK` zVJy@3+uR6QjfC!j6+k}~+S&zgsP=H_GDj7PI1QIJS)vFFfZXyfT-5?Hqel6()3U4Uh@$sg69M-KW$2Kde-KdEoR7wVc*32i6L=O#l zzom$>5un|b2}Z$uhuO%)?Bl`jsl*y}=wOKdzYFN@bvIDZoKyR#7NybO^Uch#aFkSR zs!%F%4CyJ(&46%3v@0{!BAbektZ_#d*?_g-DPJlRcQ0??-bv!I??IcJHt@k z(Ziv;D!8mEygChHF(?ZXqWl`>O^=+GNHjQ0AAClfif<4xe#Q%HVj&G_ zw&S^#KBRlPdC;SlS?1ZpA2O@PqlBDzp$+Ji|Xb>qpZQ=s7cVYaDo}f;{8TWJb`c zRc7O$F>SDc{kHq38L) z_H%&mhI$i14dE9((n4U`M=-TMj+h{g@9Lw^ICr}d{J;oCVJhKJK6Kj?`l>ul1%zV> zF4YU?tq^mb0SW8W%_*;PO$Be2AE|;UkB-IVW5tkDD1{@2@8|UB8gzZ~`;NpF?A7e8 z_2F+t-38+~d4WYA*R%9cD0-VV+>W^(!od1|IFoTnos60CBRY^#MEA!H6v30Oqo% zV#w~k>kbV!O>0=1V(K4QAal2;*{I5z(}W6`X+hbkq$C2R@iVDan->*&dm=d;Fn*ee zx~q(XP+dWffEt{>YRAJ5D{GhGe@&Z4sI>*NT1QiR=HZh$e>uJXZbX>wp?Q&CYG0B zbJJzG93z#UMxn-c$2+tP6S;0~Oy|5nKobHASR`16-rHr<>Y;oMVWB&eR8TfCOexWc zrE=QPTg>YC9^IJ(aoZm-MTer#tn||bNef^-{@iOzTg;bwwJUoAH>NyD^>Y_XiWND( z_tTe%^&QnM%V^0!(w~Wb72l(>=%2*cto%`JloP!%;LTwPEqw(=L?C~6M2tBpozWlFHwJo4?fU^owxODIYqxKNJvan_EL@ZLyEJ@# zlbjsm(Bbr)9N273Ti#c0ED6=<-fnonvZ-o#l!Y6aS$km`QB*NQTkWht^f`V^aX6fB z>%#bckh7c!AEX6CKm%MCa0Hkm;TE(mW=z&ggDWu9DXQh+9L%X9Wf`?zY-t}<-Tc5+ z-6-#F@tFN^V&7^D$QMjtePcJ$h9o*?Pw~@~#&ho5Zd?5!u%26VD!2G1^@mpoC!<)_ z^f^p)QB(-?I8d-*3~fMd#>MP(1&K`W^Beipoq==wduLN`L-4ZB+vRx-fZ|as>|+59 zL?ilkFHSAyU%uax#gVIJ06KjmgM(sn!y>cCsNrI15p>taH71}xH4wc3-Q|tBaaUL5 zl#l>q@*{0&Aj2O-+}PkZA4oKHFY-8z)g!@6sHK8}0>j(n*G`AiYF^I=%`M{F!i9&) zuYWJ~o>bk{DEo|OqQ2jCm?XSk8=lw>j{AyI@QtdCtXI=}M&LOhCc}1ugxXRx`)aTQynKGGCnC54 z)5uvHzQl*21)i5n+pim*gfsfws9=A@HUdpL7UG!@dAw+}y{w5pyp0yw3FnYdyKKHI zmI8gGd!bm$2#U{rv(KjZIs*W$H32j=yWKp~C^*mAREIaz=j$>WN;nJtsx1mWNI3KG(ybT3kB(G9|)JEXfoLXhrQG)Reb zcX#KWem{Gh-#KHPy%`SvL|tR>&UZe~eP0(MlA3t+g601Q%)iNQqu?1`?}Q>f4^mRy zDWlbCEPSCEs4{;eRJ`daloj|fkNf2)Z!qQT1C8`;b7$8)>Ggkg1-#&je|3eB`7E(@ z-)hi6PBxt`vdi5cRFr}bF?(W5V=)Eir4s|`3!*FkthsD@-OkzR zm2RttH_pNQR(!1a^xiy}=;`J8c#U*w=VWY>P%;~sjYPzpp6|Uo1O#j(>f`sHvnzJg z=888}|7%ovt~gayMzWnZvFfCY8sc zq;+sX^ihU0z4bAn4V>^RNn-v4yd)8cLdgC-!&ERy-0z0s&PAr`T zO6mmNL51({kW1iO9c4QcX=Xc6crtW!^noX_h1gWO4@$`1%bIwtmm3u=Ys+|j`Pu?R z)R)`v+L@MACh-FlRku3*x#5L+;Pipn8KtI>FB*k~ocVM;8=d6x-bqVyMcO%lC!T^x(oIRS}v7V(rNiyf-&&J0~bB|!09y_+mOd(%t2(8 z+?WA35Gq%&&@w#@`H+fwnV-4vA|u{jGoL=FUl~*Lr`Kc1YmHODk-!)zV z^~zIMWX4Xjfzyp>(Z-uc{>Lg?WR}lNN>}ygt`9v{e;`N8;6?9Ca%=vV(EF={^$1QD zlj+vG#;a2jWy5EJB~NDpXf-CWKrK3B)w`yaeBZYDMt4i{<0Iyvhxo%fCKCaV!>l)r zjfJ>KzxhAM?FkEEP9IqCLtaLhdJb7oG1KWB*4@r@rwbv* zvSgr#EZ^B;jDQdTvkrSKWQCl}od5`()YfYD*j!$U>=4xUM~#MlT0y zatC~x!1c~%(WSr>GqK>D|Ma`mp8>KBn@s}RD$!QK9?YjsT#2q+8<9kdfNTk9W5Xl~ z-R>RHte52SC!!4@0EsngY(aG07KAHyp)=!Pq=>2y|lgTDvdL-Nd~8p@@P zEYpu`7dK60)t8aKNT$Nfcp`n z9#Zxn#l6Au9@TCJVm8^SMCpt{#(#PsHW}E_?||~Qx2eGhSsGQs!wxLRzI(jXSHoMK zk##;nXJ#b4zV26!{!zK*%@@8;8nur+Z`&ut_$#!@J)E|JpoLf&wvVee3hLIJ0@_}a zQ|X)NL}Y#f+IQVEq7*|!oB@1w=<5eMa}&)-S8A+ezgb;Mq}1n^XAI5ajv6Xb5s$1b zWIFhoxXdJ8vyo~`toB@|A_5!(F(7RkhR2G&cDes3P?IZCUw#Pnj%zY|JarqB@1lPs z%nT90BBlh7!cEZ4H6{aOnSAaa)bLV21sobVh`z$W$$e>rJYg_s;rY$`r{F7xXV1t$ zg=X9fISE)S4y`4{^Rs>|y)|KZ#uJ9!aXC{gutA~I7S^|KaQ)u-H$VUM@eBiza5+u? z=Y00@AY^A-n=RuULx>lp>-#fK<0H@-gJZM2xAb!m5&4WE+YloKXkg7i_ch4Dhc&)! zfYi#Ho%`Fac$GNEQfSwn!VH(yJ!nLy3MIr>kTxd}mR}8+fhanbJpwVrZDj$d9(GE+ zRJI_ho~j^8E8W?}NUB2?sI|k9{PX2rKN}SyPsSvTJA;;V(dQS=y;y%>U{kM60A zvvDd;%Cmcgn)PM3X>;nEO;wGe{~NIDs`N{FRb8!2z5UFf0`^x5JE^PMXmAmVbWwpt zx*x9TZ6?0*dU7Z+N?_crTbEk=GZ3UmdBLEqmJ~(b_&TPgc@A$%do+JjN0{zOy8f_w%6NqPcfZ2XuoFBX%e)l3@xL#zoOmNI*VG_~GhA)94R$Wn;c=E+}{} zWnY-avn#><;6;)Ofn+qt?F!9OWQW*SY#B>?H)Kd0*h)Pd;oDK}Mhrc|7P?7OTYmcZ zHPR`_n%eW>X!>nDkD7e3B|5Vi_z>bhmGw95U`+|#ip4BrROH2Rp*_ubqfv6H@&{!_oi zZL^H2=Uc@7j1_Lj^!CPdH3NjklhTutF3!WRQLY`LiGnVnMkq|4)phvqj)8$^AN)AlAETQgR z?ZLmjVbTXpLg?SPnsi{BCLesN*0T2%kAXLYpux?eqH2@dPIUr?P&_yE@7SS66%tTu zw8mzk?$r8?!^2mM7GCp3?O42pW*n`YykqKLP6~d%ZOsAaje(>@EFUP3qj@n&fEX?k zBC-2dR?2ruWrcB7(k&J>Gw&&FGKhn}%M<^@jt-+?z}NhRcnV}dTaCXvk(mX zbB3Gtj$h*db1+WdG)jN?i1W2g0EpUA`lh~oH^SS)X|Qo3At(YFBMSY@1i-)a~il%6RLy1Xz7+Si*+~dxJY&sF0JC*D4f!=1XIN;fYw^Z{#s<=S?}_ zK<~#1%FC7tiZ=yT=tdBUWYS z>~i6Ft}hZO_vGO87n8`MAsp5Ya*Dwgy%h4HLvJcu&{O~(IM1td{yWx*&#*#3Vd7=wG7YNMT0#VUn`Fsn*Ctr_ zie2_De4Wvno`ysY=FW(pZ_N>+msUc3n|4V~vJpry<8R$0tZ==UK#bgUM#MQUZCE^q z3}@GOww}RgAYAvuY9g57Qxt=bRI|#^hx>l1V9ni*2hCbb%}+rpE=(am;*%u}cSK{? zPW7jL#w#bCIcUuzztP`1QMGo6+!oAgyk~zTWZt{4xvY%wY{9ipNC9eqXO}90pbnL< z0V3XQRvSk#za%HN71l)v;!FR#xqrexh!QI#H?m4cUdaS1vl`O@A&KuM>-J+9N>|`X zmPNaZw)g5F@<~;WA0zUjI{L%$uyV3=8e6+6UH3L$l#0iQs42m6MgO3x@=06y?}O_i zxY)ZfH25TUMVx63Tv^k22dche?>kW8&YJQK|KMSq7K3?iUGk=!;K5!`+ z%7v7-s@nQ2K0v})!ospSvu=yuBR%Q$CMSBmjuiDfdy4fp-N~kUa&vI({iAj2v0iOs z8}QWx1{)4Ll*#}$R1h;#w$@#N8rR_7xA&5oN5E(Mn_g?`qY4;0pPYq)?)l?EDjn;u z7d5QKtA+b8LUAZjd|9wgI{b6*gzZwDdtX_x!dIGa7#m>&!@>w(7_++-zV-);alnxX zxycyKcLG^UgA99W#DGs8-(WEr9jHtlZeeH=><=1Q(qU3HTddW{){P~GzpU@NO>_3!2*nS>U^<_#aIapi!_CTVM z&rF$uS%vqF&JF?HPJ$+AD;L;>S9ud09a!tNU1&w`%%-9nu9p#tmRE z?#{NoK_G8l5;5OVE0@WDFJMMazwE@Cm`<{?V2%oLYq}fF`28k|3Mm&6aSLaw5h_hWbjI&9MXen6 zjA`}ym=TPceV4h}xz-nXyHiZK=)u9p2azJPQvJ?Gk_gI`W-7t$p^*d3f~f9`a>{@K z#968OvS1DL+S^-^_b(0n-?LjqY!3OL&y(*x28oNf`@xAcQY?PFHj`Q+BzB^{Kuli9 z^z_0ZxTZ$*V={9DRJU*SczLL?MrupNsKm|Qg66RqD8MWUeOvMK%GWPG^zWIm(BnWF zf4ovauD1N7?!6#_573n*PLjH2xf!V_4_Rp-r_amlQ}#IW%f7BBHG>JcH!)3OlW{#Jt%wgvL6uCgb?z=bZkkgu*Ub_#G_~C5OGZZP$doF(9`>2Yf zNHf2DJMq3ktHds;=34xBMp(J_ABeNJQbGPjH$?U3(`0d$fz`Mv#ZJcfFsq*4JZ8}2 zQ7ji_ePJT&FYkAlA(Zr(tYTl4kshCAfz6?(^4-q+;M<)q$3Oh5Z6L$WdZFMBsiFCqh-gDH0&Mn%_mq=RvrvXi1X%g7|raku<%A@7@& zeyFTp%znGf^*dBLiwOdKZSng~`*>h4b>e=|ip*1Wo!O^Zm%lnRldz2SWN;e3A1q{@ z-D|I~-(k+@SY#6O29L*8_{o4c4lr8%QngOjpcPw~@6~%%_A(6WxW{ zs`_(@ieBr9b01(;UxuzVoy+veVV2gG{Io{q)Izj+o5#Y`J<8=ubnn>=@h8&3p87e! za{4D+rNZK|>HYij0yaEJs9hEbd;7yH@$&#SI_9Sw$KtE7hKa;Li2U|2kf?4QUV$UQ z%#!StyJ-xuRNyz=O}m92b`bC|iT01O$Q%i+pHlCZ4?H3uVAjy8u zdJ%|o`F$ylLc&&2zP7p@Rc^Kq-j_r|p5my6$lH%?>>WjE%}Q@oSE1U5K|3;g!_zYI z{lzTGgXwo-HU_t>EK~myCONmWj%_#?w*$CxT^iUz8B3{CczMck6ct)AA14w2G(yn)l>GY)4gH{Y=sllyj?KY82ThTs)F51xiMhj>=S!;^e? zLPtKdG9DbwjPM}}CMrlOo{eByp&jK_>DC~$&AvubmI(C>CzWJ4?|utDRnOylH+2unFCNWz-unbc zG8;RFG&f6*eugXVH7?@CG;58dbIk?GuNR74-8$@DMU9T*MAG9nah$XOx<@@@qt153 zOtWZ4M)}o&N|T)d?sAYtpC3e_G)IT@caUke)bTc$X3D!F67v|_$T=`6_&yXV<e)g!J?%V){#Xv3TvezQ}hd_9!0eKaCQR@5)1 zj_Mvf#BU&&aK2zYNd!%uB0%L$_wJ_@QXK1!yQ*WOYX6ler%WJQC<+0?0vEMJ`QV(8Wmg}fJ-7;V@wa0*p#*;v zjJHGI6aNvX>bvIr7Pdmrb-C8d?d6O*LZOQboVeY2VTDz(wKgAlla$y$T=jBWICGDX zspF#eCH5?G({tI|FpuQleZW%ycirM@iImcn;wLF`&|jc4d@ndsTiUc_EA%B)VW|kK zm%O^@bEI0-bWo(yM!-WR>JDALL_O~ z_Tbq}62V^PrQEzl6k#si1oXd_dK0&oXFL-YvZTTwszWQbKUd{JuQmXtmH)!sq`+qE zN0!axgm2ZKOW{;I9Plzad}UY3cFY(np=y}4;5|I5QwgF=3x&4QI-%!!oq1H#&S)`6VFo#Y0i_brYnxfZ4_el^nJljZRsX(BeoOP@pT;bygbpQW%C}Z%H>qhOZ=?o@PZV8>0V(;#>|YK7TNqND)a`3(yQRQ? zr*qrh{%^5)-@G5q(sf=gXoT5?1>BN5w7*!{j$5C=hVozXfF7x9JytM=;aIDWg0;IT zbC3?ZPOfnwO2My~x8~X&8r_FvLvPpa`l6Y>^K+huJJM8GFUAyklF0H1Bra7OMN!{v+>Z*4bO}kf zg6)jZtP$;3a3K|Et5xr8GJwgon4#)n+o> z<>~lAe>d{0%-`c{L^6jW(xQ!fFh>T#(2SO2y;DR5IAvUh{qt}rA+EI=G)aqkYulBt z0?NvgA|yjlNR3uKvVOFJ=6RBkC>Hf7;^t>4uUHGarhJWSGeuI~G2vbW6L#v&AGe;! zOPzx;tp;}kw74r{4-f9cK3M7?=e|;cOWDwFkjwUs#iX*2nIA-Cl zb?2>OluG2)5@P|8F$9On!fM4lCVt4+Ia_OE*T^RJT;ddR<@tTN+%v$U=%|EJW~LkU ztd6E|H4B?79{LNaYb|kkIckoiO(8lJyY??KFLArr$c|(TxHLD*FL?a%G&!!NoT@}N zSAP(ka_x#V_^k4zy5yZ^C{RO0IJU2}aisgT|G*`o-9qv3&68sGI7ULhYkvt1;Ca%; zb3V|blDdD_H^Tj{+R+oZva69+bcA>Aj^YT^a*0P*GC{8*yr|#2L5@<=B=x$c3)Ubt z%Be0CA#`W!!%FU%NyqG>Q^eJGJIu|0&k)xt@EFfit6+e{=_bElE)@)vyVm=l7Py|4 zyPb=gq*7<0(p!W;cQ{s+I1I z5KV`xZr?*aane7*pZglvYjRvFK$dE>@bfdjLun{#Ojf$zPsutguBa<^7Y#bwdjPR$ z+$hp_f$0(GOS0sNn)plU0*as30z4d6cM=+39{HQHIG37Pn+QFx4xr~-AE})H8`R#0 z+(YGS6`ahsoXV6HOWDo?)H8PErYXxcNRyLoosZ8}dxU|DI5?L+($w~*YL|;eIXer( zc&hOjuRMkOc?WJhXluV3;Ppb6j48aRRQ$MH{&yTwVK408A4S@Hw zu<G(UN1)M26bwmSiA8o|kRp&&f+?B~Ql*E-g zJ2`znyk@G8-cL6GeuWC)3E%$jJRhNfMfDG>LXV|1Dj6EJb-Vd&UMaWD-gm`Ha(0Ld z_$NZkXi`MU%Kzj(RnCN_8fb{DRlt!N*|xgN|Ey}TkpFJOjU=w8y!kt%qx8RYjkm}^ z722QYj#%R-zQrRA@^)uq-TB-6kAKt}e_bMrq`$>^t56KZy8>Hf5-!Qu0yw6QT5rIt z{x4;83i}mA@wk8TK08xam74v@JrDV7aY^ZJ#%k{M3NlHS(R&xSeHf{4qKwJemaM?d zHT$TTK*SyeEke7N#j*0y^4dT=>FGL^q3fQi`4r!w=Q&!j9eL-t%p5^M_3r@SdJT+v znAHX#Bpsp)QA!lQh6HQQO9B(eDp&7TxcoTZN{n< zPp-$Xd84B#zDYe15i~CpBhf2-eX$6Qc)5m&^e@Xd(nOeA#Hi%OeA7gsHu1fm6xL!J ztI_;8X$tovt0J)$2~?OsdS!a9%Gp$)(tgV~e7(!yNNIPe5MpJ)8cFq+Xz#6QU`R*{ zF*Xs0VUX9@@+zPYfb8tq3%K6rx$~4{fR&4`<@p~ zf4b?pO;4}Xf(`hd9Ye`Du`FH_vms%!;K!eTTIE|Lf=49alh2erGlJ~6vLTY32U@^t z*XkgqAG9A^d8sftB6~))ac-@25PUPzkgfZ7`obrgs=Pnju@T4P0feVu4`>Z|Vw_y- z)CY6qFdG9VY#}*;!YLp)kIHLQl~aU9&E*_B#xV+UaEbSz;AwPL!rqa%EiQ98 z^pPwvLe^xC&i$>3YS+J?Y_wY7$o5E1LZZsfXss^p6KCaI(r0QkJ}t4N{n9YGXimH} zhJBr6v3h{#%pViCHHe_%KWqMR#9*gjTW_O7`*hx%KFv|=n+(RgqVWMbpt40|Gaoxz z^_Pq5Sc$-Q-C@iuk;kmLK-m~w7sW91?qrP0Uyb%!*7Fp8YYTk5MV+X4Q z-G^b3tasBhyXQFa{KHs`WX?N~J&)L5TT==;+d7(95O9>HZknzxvXCoBI=zh~e@p1Q zoN)rfX>tkyFZ}}gfDM)3L`H`@vyee#c1KJRAHb|R)(3gJD@`H{SfxRC-~*%QT~gwi z2419kEZLK!+}$ZI+WE=1Ht9Mf<8=-Uiu;-Hj2Z-eFrR(jP7e}do}R-ea$r{}vo+R% zO}%|mfh%4^6p$Q&h(9lc71_pY46?-4(y9%9xavQCz1w%-fV0JY1{32PaP0@I(EWv@(Mjz7YUod5}uwvL|+2Kh;1*}0EXPP=t41W1Pw zk`EI{ap4a&m>(uQIJqDPLefaTl>DUh@^Y((xT*WE?^y|Z%Ql%maAl4gBV~WCtRIyj1HdKPHyNK>jzj!lEiDSFuw>gv zS2;~H{Ca(l0L?MG)y@%_fzhMgmtM9dOe?Re8vv|HOs}03lX*L*ClAEN@~Bc+^WoQ+ z_@e@UNm<^}G&V%f1MM(FZ82t30cVoG;U2?&sv45E6VmZv6R?Xw^V3bL*GXanLe$T& zi;jtewaa$Of%TNmk{`oEfpFll(t3M)6UPMA*^8Lsz$3P!xZEunav#|v=YiO&s3Lp< z^DdEB;~kVdDHL8J6H*^7L+ITZZ2dZ`y8S?BV4}rW3t0@i{Ql3+J!9J+0R-$b$K`6$ z>}{UYpTiJ@14c3oP5|>#XMqa#=;)d-5HxX$(bDmFV^|iZ<+n(TLSadJXCFRotCQ=HAXB1K zhZ{~f7*d`qSsP93y;RYQU9ya?p)SvLV2kW$FYEEprq|>s@C%G~e0-<43I~17r@=!G z5V_crRM^caaBZ-7a_ni^`3TA)_hjNI(Rz(Ca z1+vFN<_4h`P&=F(h`t1P^Ua0#K-exG`-DOi9A&Z=wYkBjw&dCdm?1=4{mXZERX*kh zY^0?Ak}I2%#YM)uvvmAIe3()#_e~Q;b{yXNoJ8$b#4SKO89qK?wkH zKLlN5%m4$_u&=2cR7mRt-YDQ=qlhDe&dcT)K6Iz>mE)U7*#`zW^?`@CuV&kxWDl3B z5xv}=14V`ZIqP0MM@YdOJWo)vr{}2qpD`qq@Dna!oude+5m5G#p*(v?Yklv7So*sfJu2 zzZD~+l(x}bM?Bc!cy}%3j{%d3Dzcr0{n?Dj0aGw1mi_8r7|0W<67FXi#JfY=JYUO`GkC0n@ z-?;`P@UD)N1(<^~ew(M_+g-J)Imd4zfcII2uY4M2V zUi1j|9tIc_D5Bv|M24RX%5}eFzW0gDR;S;P;j0%m22^x!{#tg8rTDY{MOY}L;KA(} zkvOgD33(SVhZD4^2Awo*@33V3-&E!B3yhl3CB|jPbS}k=mZO-b=dfk=On=0`5xGVm z@$_tLR#y)rszN!rtZsiaW?;zw619cF)F{T;WLezjv}uD9INzZ0cW(>oj!Zvrk;FBibRQ4E`4c&P}RzfJ7$X`x%bqCRkaKR4Bl+w%V+d~W}N>h9$ zs9yKt4jXMfP9L5q{@Zxc&q*Rp&%YCxsuW_eIENxHrP$hJ;{2~kOdcX^UB?H!b7&^1 zAd?v69&~c9j$rvrlf>Guivk7(L2oh_R>UE{_enq#W*h70#{Io!u!3g@6l*LG#OKaGS!P3R4Z9cF!1JwJ_^7UEQT6*7=Xbg}|V zAQegjF~vdx8+CzBS}t@J*VIt-pBwWXEe)Xj{UDlwB}`Z6XQ$6!gT5rMhiHFP93f!4W+cCauo^FUa*q3j$h9$mXEv=(r>LQ*z(BnVN?=&BcesD{j;Iqyv)0>ZUH z&ms3xvh&$0*^6afa}m8bT3O6;12NPFEZ#m*<&2g4@a-#*b;}zat17 z)r1H>0&G%q~2vY%378PWE`Q{NM6GI`Y!>vvU$vU-jb8gd| zQg>dtM<3*r#SEM*R&?{ok|3x;ezl*kflVr5^q2fM+&M06$i&biw~UTB*Z$aI^1SUb4B>%rSZywS_}=wFgV& z&ZEc~X;B+V)PWrgtGOf-YG0(T0y*gbmYl|juC(j91ETs@9)KIzNd<)9`25@>dZTM z=`2kbyU)e%^SK8;W=&pfuWQ#DNZY zREux~i|PO+N`bEMu*vW5j=R%8sMEX?@z|}o@j*q_eDG<$shI3v3;Ox5pcB=SGM8UT zBAcL2Ya{ba^3S7LI3QAD{N)9Gv>8n2o=t}p8YSwbY(5ur~ z8iADnTtDTFlYrRB(pYvUAyc^n=y$Q^WJ3027ocnlsKbbP6!+BNCF2viFz?dqWsS#r zd<)WtaWMs(P2AS^n3i?_lec6nzm%Uplt!a8;fj9|L{HsyDVr=j1mdALv%V8#h>LXpG#EFj_; zruUf4YbzaSJh9iuQfJtn(;L>zcjZf}s&xoZ-)|kz zv1gb+%vsSzzNTi0t(3Yrk(?1n&Yo^fTMR^`w?l)7s%9zm7PW}FmzpCx@r)8hCFS&_(hYDt?nAiT>q1!mEckVk#~0X*l;o3 z`Q)CS^v`FSvHn8~Ee~9K2jQV|Cm0sGtXgxEZ%z8VOC~)yqDA?Tk?kE`#zD^I7F;1#)H{IGFYYL z1)B%r;bM;Tqj=|0{EX^3aTnRCh&09ZoY|K`7vEJ6s14kPWq(md!s1j(5h3BJTANT? z&g0bKr79Z92umRPx!MP_XneTDIBvVuUw+<6IU;x5T`OBDJ;tyTa}R!-{L}b(ot{a( znYe;#XQETac`0Y-Xba9z`T5b7NKZ@v#m)76VSGrA`J0g&&L_Y_{{v(W;t0>GpgnbI zv#~UIi=gzwOrk7pZ@gX^$=Q-PvWw!E$6@ptm&j0pu0ifIQi=D@dt_8 zEoG>`a~UP|ZHUS9|U^+3DZ&_2xTZJ1YWm zyc97)4B}#h_M)}%K#mWi%~KhP51|G}y^WbY3zUTk>?fgJA<5jKMzq{yL35CDrQX=X zQ6w`v1#z^+48Zfk%HU&&*Fq!>-Z^a5;(H^`;LH)#uEd%LenPt~GVpNDv1)1F8n1UH z@zyUcFR`t#^j6AVnDiz~E%v-${K2sED#vyH*Yvp{5SLDtcKS4&R`{9hlftJ39kcQ1 z`MNSGbz3sq644naD%*CJ3ZLjCE9K_fz*=hd0@P^lIw^4E()6D*(i@RucdMp$kw!f4cMU8elC>V_JRk zL^Bom9lO@$6nAb){9)lE4NZc8h(_sTVYSmAgvEJv1>AQlbAvM#zE1?O!rv3KTy-EM zSGI3Sbv1v8QHmT=aVSU;B4nj*igIr&^$ADF;>r3o@RJZGZv>Okmf)QSI>QS6=H9{m zPJ5Rmz3MGG*d~2U+gu!g*5B7DAwtdz>AV0@-co*UlpqeqqzXso z4Dz#XEO=KlE-ngX{Kv%>?D|Ern?6dK1VrEMuBUH@#iS3WO_bz0A-iJ#e^}U9|A&R` zFK!V(7Tr}>?X--vNcjm1k*-IJx;a`gjUW2|CEz+QrG}j(q)}suQ%_>>JIv)+UeG&m zSPjYncg6o-7vv-7dnAq%%FNC@gF2kVK|JPiHe)L@WcB-ik~wQs<)H;Odj}x3mW!_M z1gI2%kXCx@^6@JF;aiK3Q8ciS^~)`5I08T(9-vP2b8R!ItdZ1-iW}HQJk~ADdaQC? zQwjzv@Smu)Xg0cUVD>4c1srNm%7@}UMVauK{!)vTs)hVoHR%lp-^8dpcp2(*EB}i7 zgp6<)2J!N8$S}~v6(3;>u!4Vc=2N^#JV`?q>@pO9qhAAFj^#ScG<=oJ|3PhmiCxT_ z8+EDsqQOsF zfItVEjuF1%XXGzTIK(NkzZ{cEq7=Zhl-zMJePj7zVbi(QX7}nElIYtia=R!*%_kDi zkr043}ijQJRNype?p+{Io*3}=fYJk zh4D!#@=yUYc>XTTs=c?3n z`cZ5Koj3mUGF|Iyt$4J8hId~d%eUyez53H^sg!qYU94D@Y#Hfhcp+WrTm9b-dWOrd z;SQo?L+z2f?;mcIl;*}rd`OLq%6?etFq2k%CG6Z3)2?>?NMHN)6Nz1h>ijznz4(x_ zcdd&yra!hxcnbPP`~|Baa+rW@g#f;NG|X5OJx}&wop`FFW>duo0NL^Mzt zHpw$9?Pj!nQM`DKUK7 zz4=TrYJNV&XnZUrBoK%QIP`{k0SNQW_wJ}CL-5{X+yDh3rW?OSVoaAhz0I~4T8JcW zN@o+Hzz*Es(pL1L2>+cY5gY8Jw<*W636L!f5N5W3KOuWMH5dI(epMVFz{C8oYLvk! zWsXSl__X^%7Yw?gcAE_8=jwP!9w6F8(p6}mnXIGGA-_T{?@TQQB$5mjfOzN3B4CpR zaP9<(11L>-KP*#$0GTcZEuA8%!TlldDp0T1zGPNIh$g%QZN$lVKzCzvel8;Qwybr05}8o*IyKmvUm!|M#x2@RWt}wzr)WH@N{}5HtdP{WKmwGf`sEmpYy&}WK4G0?6+!#%mY4m=0Z32+}&zzFg znn7MXkj8&-<{il(iFN)AA7ZYazB;!8@c8n#>1EuRHp=hBA0Y#Dd}s^I(5jFKcR}|_ z2d{L%77HUhs&K~h;yG>IZj(?KdqLxv?H=w4i#h5YA6kp=!zzzHs!=fMEkSX%A`iQE z88$xe#MI*UBG(wn4mP_e0&nHbX|*_u@l_ZEWb;+@P5-v8GJ}1z(eA(%pLG6{W;WX# zx6faZdslewagnw)+nQ8sj#&Rv6`fSki*@jCT|!WM%<@>}i^%tBA=|R;DBbF=?;URk z(t>4H@=K#{;?$ss6*{9r(G`D%0mDPJ!_}K|9Uj?hm20PMOU1(#!j&oZn7%I;#(HDq zT4L2A&oON^ug2!@pKo<@?SB4^P;hXYS+|1)#~4fTEe5yz`}+LNglqwFgU0nb_~I$s z$^QJ>mU(g|JIYRBdFO$ysi`S$yJ+xkGvne*#E))3SPauXGji8O!Xo1>CH&S)>u9_b zxR@eNhb-ef998`kk>_{gNX-8W>-u;;7>t8#hC&x7Wi0-i3OhHB7=>IuR#;MzwNrv1 znJPknuE=AA5@Vm26CCFGQJ;WIt4QjG=CM;uno^XxvpZ@b26D7b^*;G$-}=;GHd`#s z%wZ=uLk4>+LUC;*YBUb1p^tOC_g{U1bbhRB4}x3}@%hLih0!dcqWi;zkMfA-C?T&l<5SPmzItW7`3hCXkkq9pfJ zMRq(}Fy+p8<(L$P&(?Ub*iqO;c;%WUw(H7BAiYKtd{lE6d`&iL#~y)a9Zu_Lrk0_j z2_mXb?#YB6Hqo^anNlJV?tEg7D4~ryh53iw{;*}8Xc&=ko7j;COvJu#z7=NOqb`9X zDeK`x&T7LdF=))@L++KI?p^i_2*ZVM{Q83{7S!5wKHR1X?!A*j7b+ZBl09+!syJF@L%MvgSqiiRt-_sk{);CB5>zAZggN6cax&|2Z zO;b`3Vsi~kSq73UK%R9A;VkA44Kz~8e=HLxqUx>R$LVxvCHiR%68r;y5~m85Yqwtf zfJ&+Qkn33d?GwH_K!YNYtSdl4@>IZo=uE0L1Jvdf4v`10MD9E( zBF2-#t7X>}4(B6?dQr_WaT|SkM(yMPyNli=!^!(X657$vnOq4zN@8cyEkc+q#+2?? zHryyi*M#g%Q-B_Qso`3e=(Mm6LBgG5ow1U^jBAew9_L%VlR;pI4J~o$pfA{zC~q#& zpl|>ImAShb1xhdP$-=azjh{pP4Pgdj$7QZjo3a6`0XAAkJ6BF_@I6AaE?N(a?p3m_-c{SrwJ21lmM^%E@p;QzJ`;A_F7qtk9 zv?cukMBWC#3B!yww|LHKE+MhOCP=7QBaRw@Mgwve>S)q08%+Ib{DyyrnSGKAfl0 zZ9|B?rR##<(i^_PYR-ja!=p~rAZFNoX<>>X#{N@FgZ)bGwTI5=N`YsCyI>v7kR@A^ zx^C-pBC96kYM&rO_~EUqtxj0#ieHrW(^ueD2=1_0n zNJ803znt~Q<1|${I2w#l#ZySNZ1y!i({p{5AQ;IIA%1W>ktj&B6wJV{$BM&w05+V- z7LuMk10I!S-SC9TrAGe!EPAWeXpGXr1%XF{dp@B8&acEXgrH?Je!al)-~g~K^xE!_ zE0=ExEPR^+V4q`dLTF%;~J zJ{u;YEbi_Ee^I+~5t5SjSH^FqfQ2CAYdr5g&-ibVKds=eRQO-Be!BO_`?8=hTWd!***ptzMo5Z+bsD?dNyqsiCBQj8nRaSWk(zCX4#jK}EWH2sSNXW(E6 z$1U9CNMXZ&tK>k0(N#AAm*%UBnA{-;tCMkSDFSw}1KB2*=Q%!!f+jtp(ytWKiZ+xf zR{i69(Q{1XtUjYLD{TBK(TnRh!=G>t;&G-b37NYfnsiu#)p^}idtd2HRp`Q7si#Sc zCxvAf-o&GkY>yd!OXf_R?f;nPO*wT|OwKzHd;3<>F%h7=bphc@`N^Gcpah*u92sj} zb;iqmwqY?e9&ab?sL5SpaPsS|{p`M57F23zA_F}dN%@q=f-p5q5YR+X*4Hla_TK3H z_Z$Bxn1>pE>q(>J|I@*8LPJ{RFqFk}G-x$oUbMciEIlR5&rtr+)<%>C{1Day z*8BKuxo(X`M&=gitQW0`n&c-(YC0Z#gYoaXsi0--+W*t9JrEZv{Zt$*eJ&7QUzQbPo} zvcs2&rVRT2%)=HYH~ZD7I*uy{rKQ_YnoJ4la}m*aR2k#?_C%Hu7D6yOE+v<#kvnx% z61j3%RBVQxMvqPL)&v}1$pyVtyNDgt9U3wpmQ;xA?>IhNQb@_0yTW?B);7^NK?U>j z|J%n z8-U0)2K75paL|Ab+E5L+_p_(6h?;=Dt`Pb?-NvnJ6+e=Ejfdp3cKCB;6 zM>WGn54G`H{MYD*T0*EhV~>FkHzymuHs!?P-nZCTlp@pF)svcIHLnkU~0Vy{<#wGxjH|!k$sLqu>Oe{jM^GGqn_NMkRhkj z3ID@wy~j$g{aV5wy<>xPZ?f*;_N?CtMZ8M3mcSQ+mBdaC)y^*iZ{L_zy8usp?Juu& zH7@b8{x8PfIx6b$>lY=58oFlaMv)v40qHI&>FyGwm2QS^Ns(?zX{3h+X#oL|lz?}$i?wvQMtGiQ@BP`I0L!Y}vj?W2sZj|JfB zrJUG&$wn8FAp*HxV2(^sFnk}%6|R}z`1aN(U+c5Lpfls&SBXAWOP`*b`@mLVS4QLu zw1-N1+^)K`_eA_OlX9QcX)V)pFHN2|1c(YV5P#?OG|i>EYdAM082Z!lnAqCW=sthyxb5PPe>%c}UI=1gpIu<1&bQAe0NW`T1B=zjmX2L|<>b*b239QnSh92Tpv zq~zS;IOvYU&aNr40Fy=L5q~8vAuq6JEIPJ)7Pm>eH*`!Gne)?1)#g&%$jN7ZJ1g;P zKSbIo+TgNwiY|n|&1nMo$}}Po0;Wv`K_5GSZxkr`fGk3w*SH0mk9gV{E;n?`?O(*e zjU`Kv_%YPgzXU*d4CmV}K(Z!Q=_0~=#0C_W5z8(G$NhECRih(<5S$vI%QK&U%FJGe7wHB$^Y;rQ@75Nq>36E zv5mOs9?C7iOHq@gPa)*)Mj?@wC$%diAqbYLJ3c+8Xr`IO^_j(&8@S|1c>Y#4U2q^6 z)2SDvVdJcVerc&&=R%qPx!2vk-HQue6AR0T1z9l_8Pr!#u=p)TY)Yhh9pOv9mSH3}yUlf`nvHctl)W zu@yTOv|>)l!LPwErPc8L)4@gM-tP_%90Q%vo{Ht4+&-rM>=5GMMvijC^fYSrAt$zF zf)}I^BjnTa4-oE)8?)}3EM1XodMP~cQ7ZZRU0N5P_oOk*iRtoi86Gjwj=8ll0%%9J zyNq#BP(u5?I7-zd(804KfUCBq+7_dL9`BpFiV-bS`eH<(4w{mK*c!LLsGAWA+#ufe zp3-0NBWgGz9&@nEk=s(Y-I9t-r8G?MPa5JD%Zs3+O}MdgH$M2rt@{~~*ozj(wUBxh zxzd_V!D}NoSa;p4aH;%vGjgFQrv%)<;h-DYxwVq-&K6(*rw9EtN^w@;aJl*LiHLIt zf64zC&4N{hs7n(5JjqzW;r>@7zBs z{brht0=*V3Tjr{~c#eS!V|r9hFf0Q03CGhwUii5leMo=__*QrD_y-T4$^qSxP2^A& zkv>~qn(hc{Cs2R zlzJs?B_}k%FI!JVBF2iSJNcm|`tgl2w2?@)nLRRL_1EZO>HGSy*jP&JpE-f)mG%#X z3L)Ty05=u{d`8C!Af?<6NGS(;YEgf+SW6hIloOOw;my5+xs)e% zVzXDPd^(U3YaTEVnKN!C7C=wskH+dR7;gYfBR7;Ej~^!JpBa_c4E}N!0pbLSUSH8l zrwnhJo_^Dc3AsnF55;ld-ry?Jl4>8?4(dV*(5%pekCPkj)x9kCFxs(Tc! zNCzj?MyXu|lR!jC$N^y4oS}Smd6Hki&6YrWls4wC3BPoI40KySc=d;w#r23IYCy{Y zizJN;CRt+g>Lkum$CEr$;N!_X=_mX$I$_*qJW7G}Q+D}5y3Si`eDuv1E^zR&@tTq| za1BLB<+H@KanqQRPldW1+=*9{3Ry#90%&Prz)ii@IOBCz0qJZEW)oU~X2=rErVI0R z1qvIvr%b+kqvO+vCS+sbGx5pWF4?S@8ucdx4%q*y?tEmMtur1wV+*Y@?zh;p^BCPL zJ(l25)iwG3ipFieh~veU`S3?A?vHBzqfm9cAC%!;QsN++zIWYt-hH3DSIRv3n-}v{ z&}m0+L@Bl7e#HI?`DQlws)gH3oJW~f3rFd1Y}cd6Vs|zgA=S4CrkF=;Dz$E;=n}1F zQ(P#7qBM|RBMbvuzQ#C5gqf(ZWbBOJYtd}xa1tT66R?h+CFn*iHg&z7SP&sV(o|W4 z`n|^f1j3%Fi|Q7hidb+Fbg@-{I_NFSiGxDYJ_mwReW{s{!Pi3O=`wSln-AN7dWn>V znYJNe1s-H_UiXk5WHL_M>Jwtg{2-?&hF|}F8b#+&dL8d#{WX3L<~+Cmsih0G8x7iI zj$LN#6PO=Tx;dOe{QJ8fkcc3=www4E5$B-t@QvtVQe(y>`fX=X2W9_6UMRtp+0GY| z;JZYVmBUD5fwp&GS-b~4W+k%l>S~I$QHA$!TTCLH-29YC^uhB`}J1gW+ zurd9=TVNZkw3%;WQ$Pl=1;#m`rrr6SKu;9=NHz$Nf}dOLIDb9Gf8iww4{4q&B3QER z+#j{7vAqPk+-nMY8vco2nUnA5!`o=&7x~TJD74F`AFLP4X&-n8yoRpTg^^8y=zj}QFTKXT%yilP{FE|np#T~IieTf@KH z?F9Uob4=t+iCjoDp{bKd9_SG-lf=NWP2gGf^J`PD5%+hu|3ekM#q9ur8zi<9czfHW2jdeF(D_c_Dd{kS$F3$frC{85oFR22+(&GK z(9jcpMgceO)au`K!jSi3p6oq6_s)l~VL;LCUmBSMWp~D80%0gNGjZ}#uKdWewe9TF zS-tlVkirsjI_Y7?g5+&jnp$xAz_gHst$yqC#t5Jr6 z+rs#zVU@f}W@j7uy0A8y#_G(Fy}7Ej)#}c*4kDV!AQZ}rBAwt+EH-xe(PJl$hPYOm zaf7rnjWp)jIQ`2iSC7Zb%EkFcdm8KWa(EvC+w7#7px%}UMHT;JQu4W}v(1Dle*0_I zYb{CE$>@)W;i+V^gWfh2e(*sODlv$xdt>!yt?4ZH{vtCyB2g`4CWDy0?!-hKnN5r> zN#X@oPMI)IARSUjIky!Rp;&KHkw{TTYlmU{LS(KGg9C9qzWQ&qOwngO&&n1>$o%Cu zECIZbo$O6{*e?W|*~od4KwB$6Kj&U`sFG{RUWf>E%@r0=BL@Z&k9lC0xqER;r|^lF zY&|bBmdci}6I^nL=V;@&>t9U7 z%+Vb$z>itIOSs^3n5A;OP{UWVp6zUbdJhs#+8dgyxQ`P1wPek-zmTrVp87TZwA1R* z;>QIje)86= zP$O!v*Oood*HZs(O*&Jq9@#IfI&G-^9UB0#TMWw(>lE%zFVe**QT%?Rp^-f3gn{+y z%pZfpfLfIR^tu~B`5OMusA{8dzhw7ZapKA7iPCq;tc8Sc3W?a%aEE@%s=LVq zGcJa`qF}$^#!%be9}pFD4>f#)xwuC_E1Qcu0_x*6DWB4h7BZXM_^f#>mN2MD;a=_K+jHk zDz`gRrk*d&Q|~kfCYB2bZ-~ZNTlq^LvGfv+^%Bg2D|0=YH{a${R*$O01fadt6_;5C~l3 z?6IkLL3zPMu;(iLrCMY7>pp+GVvq&7FBdDe?>tmucHg2AhifC2cBE>22FM1pz;}c$ zw$+$!B;D|bnrqW83bs;nL}wtrW_XEAyVM=WUMaUk#7GMNOsnLou&Tw_4>}^%kppb? z#npPTHYYGSUEvnb6=7>OdMG#D;Ga-{OdXX4h8a#VCf9bq0TCSV$180aE{y_b7dbIF@u!3bkExJmzy$-LG51_{qx_ z*m!Vs5Q^kPj+TVdTYqM7`fB7VEdvAI$lnYma z>4hno7j)Ve;-9)mG>$%3&(}591V4|AB2~=OO%xu?>NbJwUPqhr?-!|B$o`E%mfzWW z&x3Xf%hul7oEv2S)rf=}RjUTMi{a#k8k+I%BnoLM62gm=?H)B+uqgu6DSv#Pm8xU8 zQ0sh;tNF|XbaT2%x)s;iYc17r3{#V=z?5Qg3W-g&))`FTkwwEO835)~=cl0;OEC}B zlL5j5s^ryql6_J2j_9x&IgBqjaFBz$hdN2;j1DfCB6$0$$fAHq3allS=D`AklpFsF+hPsT`>&YRqf=F+ICiZh`#V z*7s`6Xn(negx6bVAUF@b)>&DG&q&T%(y=|{;7amq$DV4CrF?pgV8nh(oWL5k*l3D8ujN|JFqF&hBv>- zt8o9gp@qOE0LiB)Yy966Gi280nAEq>Env)c&k6(|d`^)oI_;atRT0!I(?u!M08M!G zB?MKcG{2KY!f1%8@;iKGzh<)|Qy>m<3Q1_v1EAo?e!q~u7MbR8%0yTfdF4WVf8S?& z6}TLqe=rX*%iGsk;$LD<>p8C+jdeWvoekPJY!>i!AUpb3XIFXtWXfDIVQLMEm>0i= zY;UYk^ZH|Vfn=~@6ejDDY|@}0t$T{jP#oJ~gv$FbYBbc!UYt+sxuXF#mGPM;1PUEinV6pAEpZINCMOo4EW^1aD z(lr|Y|$uJJi?s>?x#)BMdt?ww!Ttd1fUQ5HKN1qK2q@vqdEE-WN3| zHp<;SZxaz1;^eRxq}ydvlf1AbFiCd%X3PjUzk|JZhD?huHeoNC#i!XER+{f%m!k0p zXz8Y^@TH#QJWl@cXR)!wQKm!3xAP4jf&#&81Zuc9yY&sPP*v-KOujT47gy!fjJ9U= zIhJeemF+oaV3QNgsxyyRKD=%^GCeBZOkeEe{|g?D&yX6)Q+RL%Oy9@_q34G%Wuh%} z(;X4ZH5)j77KwfqCBU-4ox;eNXz&nKrdEF&sq0Iq+D^!^Ay{*aUdlx?gs9PuL71H5%Fnj4!W-KT7 zuHdhh@Z(%l=K*89M}L3w%taW5h@Ie8MuKU=YOrneVzJ-1C7tU>af^4`3CE8NxuF++ z;d2e;pVK#lgp2P&n#XIJ!hfMa$vE_5(zr|_?+QWCWqRP8c>zG)>3`6Q7COYIvDfN| zal*#GW80M*R@e7J;l^RXX7AE)US@t#wY<5z0IbHUts7+gJDiT6BBib3r%b9N&ot$W z|Nmlw$FvNF8b`*!N{fPXX#07L|5~(-nSf@j%Wi!Nq3TPtasr7N1w$7{XAwaT;N8k& zPfqF=J4tC6f`SR>1&%m6Qd7?yHnukNv(5QF?M>*~z3sv&i0014_B1_}{<|`x+woq+ zoJOPxkVp_})WWF0?+(!+Xs~Qe)!K=5rvhIHlX!MQV3?{PEb@7SZc9yYyS7;h;7VA% z)jOWeJ>AxX1REybW-=4dHVw&~PwO)|!dao~VQv{*B7b;iF@3HvFHnn_8h?v&$IsDS z`T14o$@0Q{HN~|ScUOM^DG9f2L{wB%Q_NmDk|ec3Q&D4OV_s@qv#1h>&fMFekXB>E z&%$xtzh8fJHr-%G;#5o9&FA5GBw{d;$EoX&+IL4rg~kxhv4kLj*_m=3u? zAucT6V9__7znq_JoI3L1dy`bC61GJRT~H7j?%i@QW~vtmJ!)+jz~MVLO``rhbCEAK3 z^3=!5*>%{0lS_a`+DNSce}f25<9o4=4ex!4O%`!8fTzQc4r?R1Qn>K9t5gLxLjOg? z0a}3I9H0R&90x(=E%x}so4$xe{S^JOecEYsuvHL2DI&IM990|1@e~O34>$jsivM0F z15g(`F6`b9=rNM`fq$?Ac(%{~q1R%ivapvYb(zWCruBGfpL$L&YV0?N^I|=-aox!* zjC|K~?AwSzVj)CR(iPS0TXw1RVGiT=B3eCPC6v$je|oeiSEV_Bp3)r#$&#f!Ke)w4 zTBSz{scuRvHcAwHtH^HhUBwf&6mf%leDz?_n=>cql>6w2*Qs&MQkQV;{hf3JDYh5-HJf zn^0vi=DP^zt3xC8s;ZHL@)1w{-*`=BaOX9va!aG=xJvEdD3KBK9}tny>bV;- zxFXle7x6GIOSWC~-OmCNADaPjv0XNp_J4mv1?dr;Z}giB$60YG0ChSx zvrAb0H&rIo1BdPem?;bKfj;-Tn*w&8FPfG~AHw|4#41Xuc^KY&4Hy1t%1RoLQSnv9 zVBBENVm;^F+El8r-TYJGt;2m`EjL~{TrHK`mTlVHNKf@Qocme%nedwnT~TZD>xj^C z2dbabFjh1haL>1w?_@YZt3$`1!D*U_^dUjJ*PhY0L=@bfJeW@CV?%Vp3;@rmsoEQs zuBi$Fbgw2-O4S&&(Gqi5%K$o)ajho_+8J7*1NUZO>ifp3oDs1V1}Zpl#f+i|PY4-j z6TxC=b#V-AQu`NN&}(gVQTKm0lQg|wuJ>fDp$C5Pv)n-=THMY@%OWFf*kI3P3h85A zBOS-^5kb8=A;;gKG(A-G?7x1B%_i*Ge{TV{L4Q^32zUEOj#27Q_-Arqxj)lVR{tJ? z_OihCD7Nk49BoU~(&o0%g<(t+ljQ5~=p{HkO^!I`!^af5-0uV~50}ct;q7F$xhw{a z{HJH>xKHNU0|1>!*|{aXF_YXm(DFojrA8h&clU!5^kW0LaCwa;v-WJ6`fMZ;P1V1a zkl3PW`vT*>eeP+Vl2bSF+*ha|uQw6zq(haH=Ay7Eq+2F4s$^Pe+HWX4i2ZbdDf!G} zSWrQrI(YYh@itk`d@9M0pxejE+v>$h%4mev~6gZTX1$2pOi-4CLgeM47h`sQ}^XQpG~>&)Q=ec z13(ke-PEEE?l0X+$v^7#E zOivt?twS#rrwsYs1jkIPfA34r4$;SdJ;%}WgAy1I1e}oH>4g9kl9M)l9ivCi!Q9!c z&3)iW4Yq1uqR>9pb&MWh_b}KM;wfBgax%LEvU4U&SpEi>ASn%KNiLH8T*iXVf9)Rm zt;)&=5W*xj8hD$mDZLm3eGdUS}>orcLuFA2Vi?fB|Fj6Ayr zq(UtB`v7s!R(vqn;U52VuE1)Kzu8#|4p`jL!f^`*;>k_!-25>!7JH*-E#heoF_u1h zQPIK%J2)2O=dO12(^lx;XH-@AcQ7rCIv*KUG$c`2XF66?y6EXri9`v|cb&o)}(C91oy zRTN#jBUyAKzN7Sy5&ij(5f<@EKv1yz3+E`iL>XVZl(){SllY6t0=Z$myX!oo?;p&6 z^MO!dlS=ae60-cdQ#`a{{)U1$v|?adQNxO_S4!wdd>K!~uCH#RER1W-!(7RL!-~6Z ze4d{ps+9WFcCS%PvQ^;pr(+m;do3Z7CMwEeIh6EBTL6Y?L_bs+wtRDCQlNAPtM7E1 z$ZZ|bGVADgdU`&SJGlbSCIlgv^|mazDcVEL3~_ZnO$c0Z>J5mfj?R+@ESHadqe-hp zPU?54Avv2;8v-d4Dj6%E37sq^+zoFkz6RkXZ(ysOvm+x@C;!SArb-YLAl0r~44jvP zot(9sPMKo+_j9Q-EWRex)v?99-$_fl_qh7)?V_$bramb{n$|Bq5a(9 ziw233?94!wN7nTX#i3Zl$Y)ay&N|K}$PIBQ) z&X!iB7g1B4-w%}0T?67X4D#M2my~0z=v|m$(%?`oi+8FQL_jWV89|txeORj1PSx-G z#B3c`9v>NEpKr1i1(~h}7splvh1Ch3oROKG+enFSSw)y~p}mmm-2F`_9&CQSRf|sX z%)`siBYR)~KfM2QnnJc!HaaqkE||Qx4V!SSsch`4)c}Jep}+I1Sx(B36y81a+pcfA z{4o3vV{Cy|7N_)1WaKV1OqvlRi+RDIj%c@ZbB2 z0)pc#v3iLX<*@2Eybn`qGDi#jes;`r_;AVE|0e5M)kpY;p3gx+VR|ePX><~oeF7Gu zAyU6OwvY1TQanG~8%?HFrm7nmUsm}<2s!SYF?oSq&QgW27F67`i4mU#PTUMt;K~`n zJZ5W5h8@0o5n{n=B~REtvIO7WA5Gs}Gd+qiw6IBmYX1}|rKy}Zi!!w@6UW8jMT+7x z+3-NjEaZV~EqbfrPYREfb@u})LDE}6$Xe!GJAOhwmle8mL$QY+Bio|yDXmnf+2aHa z8XY3DlktbbmTi77Ep6ZaIL#sVp+9K>V_^}FcPmiG(76BkrkYs#WwU?;f+@!8^}xzP zX>&`vVFMrfh5X#1d6euq)o;QT%1@p?Sfr3ZP2=~@wM}8TO*Zc^SXn<_-=HzLsVQ3K zZ~1V3JU=e*@}L$=e|y}RwX&5nHKlDGKn&#d4NK6@Jw8cY)^kZnNDOBv-zKD+-B|Pn ze54dg(?j87w&5`~^?7d|fQX+gq4zVxM$aX#PqM-pAffP>jzp176Ilv%2PqFGT{HB)7qL*XsGy`T=H zvqiXslH@kp<}M#4iQf+*DqTuk84(&v&rIB)a`jJhDM=<$XRwBtxm6xY^)KC#4mW#_ zCss`g-aO9KiPv5S-srG<`k1o)q1?ZK-_J|Lz-QxQWqSsjv2nU~V#_LY=DfPyA@Qx) zG&iHiRxL?T23=-s=Y2y{Q@4~j=IT(c%{rG9+H=}IUBL72r`=2GxQLN)U;_r*!0b;) z24qCz&-^{?NDxkfmo903}J8c-=4yi!U zoCwr9mMPBD#Or;0|EC|o%+W1%xeJj}W2+;yf0SdYq9+2ZSgz8fn(h%GTa&V*lss6_ zqO&UrFuJ_EyNAp+(Dh%wfDbX+n?6?11JV%UxX?q=TzUp&xZ<}k|xSIIO zN8sm@HBinjE}=KxI@+3@&U%ub=9Zz$id?Uj7Jm3A?5EN^0OkC}dl7yxjYH=uW9INh zogmD$Im&|E7(7#=*+nOw(%fO2O&{`$*cy(7jik03lHLSDU2Bc`Qv%5X!a)Gp6^HXA zkfY9X5nlp%Wk>YW>WJliG(t0jWE>Okb0L#c@dJTl*~8-Sw$n~^zM-Cqh6L)Bhl>ea zq<6iOA!i#6n)9dW)8)L1f_h>dmOW<8dvAdJ=cf>Hh_hd0R@gy}0fm|6qd+0thHake zF_kG35m!%>RYu=?pE?5Un+uOR?l>pcZxbGeR+BV}6jQc&{N!;d_<#d;a)cLI^#%Bw zEZ*6oOc)s9PnOMv#cw{dc#DcMiHUVS-JoU%EOyb#AGat2D-`}%X`GLg^Az@`e^?rP zUpH!=hljrf`M!2#q~Xem$==cEqPMb;*57TDTI8Q<4RUsskDdL)(G?Q=olxY#$6e(J z&0wxAo!^O;#+?IA?hCc+%ZzxPU2g+2Gh3n8+xs}ChfyJ2f8Si!>b%uF{XihzL$5T@ z)N~=X?FLtJb;*6w9|7)@-D=YRM9>rX0Fs9tz@RQk{-0Z`)g=*uOwKig51}PL`7{z|$mVrX-*v@_i>uyBXl9odJfFYy_ECU3xtnsk-r_$5Lq-5EW3v#GhGmO~ly`8Hpy2)`V~JVU zg22?B%x@?>cH0_1Nq=mP>*~#6^3q4kKj(RmpQgr9EA^WQB6E&}eHrMed|)wO1QhDW z{p39{%e++P-vuxHg~4%`#+f$W-hHL|`k;BP^+KTxKn0<0mwA^=KV_;tSs|L9~}Lq(e2h<8Tm zJF6uhC2hDY&>#>!tLdInfGD@)ax&=%T1$0ehHn%PQg?ufLr;=%b7VK)y~`|V-K{-# zPi2SJx;|JVL*Mt`2c^q#Ndr(Zm_hSXydK1oBO!?CjGenCAwhz|X)|pdFp>asQ-Dzf zxIIlns=+!4lh5A~rCXcE^-I6j+H*N=AoM^oY8y7BH*J@X-)jM&^6n2Myw)L8rqICm z`J2|4t;bwr>1pI(EQ+JUY0`*<{%&1N6$jww8Vbf+ShT$N9i%Hh>chaBUEkh*hGQBL zr@hGN;)6nU%)c)D+)@OKY=-}*Rr&kn=AgUylrwR1I znq8&@)0fAtABhO^hsd>RoF!2!GISw0fH%Z(l^3@^z$l{bUQL2q{HZ!H<$@#3vi37b zff*_=aF{`W#~l&^e-Kc#N+cv=D&-DJqsH6vxava%&rYMz0G>GUFLV~`>Y?Ky!QCOs z_ibjIp6nThlxOhNfxkmH1hq5RFifsA0i+^h#x;t3SDG{O8x-e^ZK0RLd&V0qX4m4I zRLdiCrJidOFWIXsXx#qfx)Aul>g}Eb$p_J^-seuuQtK|sEYl4;73YjENuZ7cL_(3p zzm$RxsXMYrGH;pYPG0gH7lVqhAlP}(%(&B!mkC~R9Wt`kcigjK%cU6 zl=#1{D*sOp?Z-_^0sy|#b<%Ky)es&&sI69Vh4-b$1{xO6)akSA)y*TZrA0fQz{t|- zkpFC>BzNOlGX{kHz_R&qp1+SHWy>P5b31? zuc{Y&XSzmdi$p|=5l6r1Ml`EIf`40g?*YWT)^XEe^zbe2h#XmO`49~F;Gp)BQ1Cr^ zCpe8H4bYTLQ^!(jcL!tP*7~~=vO^Pz8Cy5IoBd^Y!idGjtySTbD4e0R3l@Z1Rs2rm3#awXMLvNVvnDf746IwMcxKf z3!ON7Y4M0}Ku@OzRFjE5^cpXH36ilLma(wFw`&yY)s(G`q=R(BF;(sd>H!3T5{8?w zj>8*$%RxHH@RrC9Q(Ow^oB|ic0M&ZCX+mu1M&jH3N@D6*+f_BJHjLFc*e730mebFjJC5gH;Za2VD40wCn*V> z<^SkZ{|7wI1boxF3Ou@vjy;F=WvkM6@AlM@KhLsg4CGVm8qXv1H+EcGpMN(E#fDlw z`6vO?WW(b>r1JLeA7l) zvl)sZ-Q&l?2jO8L%*^}+e4zC7q;`u_z!IXHTlYWe3TOT-n58M;#c4M~+HZiDMxv7@ z#W3Wo08r)@s$Nl(BZw|7xwlDGK?|&eyYR6PBpgH4&^EJb41mq!Cn${P6iqC)HIj_Z zE9Vzfvq|b~>aS2iVTAu(`$zA^*ZrYmB%aCgCM3!mQVV~+aM38)Pk|UyU+JR;m>&NW zvpE0V`Tp@J%5s#5liR&HdKI4WoiFe$CIWxi{_T#?xt8bLr=;z>~0At`7RC@@b&Rd~ONW`D2?E@1m? zh79fZO(O@$X9M->4Yjt1&R9^q1DRe4qIf~eBp6p$a6_$_au109=Lp?-AZBeZ62mDs z0vSrCU?lgY@luf>FQLcIE0l_Ng8+z|fU+=ER97Jq%>Ljx81m4(D4s(s0ZoaOqCb^> zIxS@hiTG;P;o5wkM~NZj6ly;4RPV(5U&vmWqupnoBgFQvQ^{Nd$7V6U z$oXNyeCb$2^s6M`OnWk7)EZHpdRYQH^>xvBzudNKEN2$?gsF<9jwFT9eAGp5pH>vs ziNZW|g$%=AVeNif9-YeT`0B7Izb9fy5pZ*NN$*yJM-1w1_+DLs*EoA2A2%js`J)(7 zA0*V)Xn$1=2rB-+yZF#-aM@IGkivzf8iF}P1Cue^K8v_tl)`}Wi2a)<>!26^<&bL< z_uuCr5woRa$5InEH(e%v&dgYc?K4R=H3Dps(RhIWuy%+1rN(ni+`)hs4WkJx+k4rK zxwu5@qw}%vR`3nCl^T}sG&?aH*_qVedYa=`Zib$HgQfBgX;Pdnwv0~1Fq<)U1oOj* zp*Tpz*=Ki@SrZeB(8L(%fHdPph@?xIyq}vV(Bal+{gDVmn_;1J2ejlfFLi}!XV4~5 zU~<+5TM#+2w1L27x{}rr3VeJkzua! zGJm;mcrG&b;5=jA7T-R;46gNbehNau7fv-s=TWp}gcD3H2JMYptQG6Aftv@Wu`5jR zu~s?gcNI;Yk7y7eEV^dgWljVxh?s~;p1XTdyNPQU>Ms2o5oV%d_D~_J%Tqzbugn%m zefBQ@?V|p9aNlZD7HJKEiMOhar33kSaV@j6g-*722&YGCc7n2n;H25m~nG z@lL(f><1bJR0j7amDQmdOIPaA#}2AS)fa)s%;+_CnacO02@=NmyA5m4kb=;;BWjaF z!Pv^CT%gsLjHZF?Hry<3tfhXTw>TF{*?4PNU`IfHWi-h(|9SPWT9wCojl}zew`Z=R zq!s3n}HN#FBxa?SGc33(*-&#nG=eQeE@H%`2pqgR+7NT0z z#vka>L!IdSh%r<7mKuoI4DIZs{f#QHK@`sTmcD2qpa>08(}hg*M`^pmqJ{PO-6sNo zVm)H#HM$RM-I?{gU=t$d!=K8?P^rU}zVXld+5ewQRSq)ra$UcP=(uUq-yGFqEbiK_ z;NrBm9zVR?2cfbRbL;nk&9qgDhGwxVLh_Iw|7jOw1?r}2ZZQvb={K7}l? zU)RR+umw6R`96%YM@Ss-=1Q8OPJx`CL43^6NEdk~(&GjO7Ln?ju)6hvfx(3Z$Fliq z@oko{4sHJ#DT2s)HPrGUcbUf;ZQzjq%U8b#ehggFjPT+`U|= z(oL`zt!EHH9>mUv;f&3G2Mq83GzWj4<6I}(xx9Fx`2qb^m2vOIi>AD5t3FxfxM}v=E|Luy%M&~)a8%}@i$9=g!&p?N~B}8BhR(ua4C6K=+pcOi9Lq~dM zk;qHW&PkQj+JQtcTwlcgX;>ft6&19QiVe{`xy{=D<(&=q1^kEP!yVxJW|T@3^xcM3 zawAG|9#%kyZRtkXA{eR@?CO~QODU*|lGL(nHQ86%vsNIT?ha*3{Fq>_f%$oT&~S?X zv)kvDT*A>h;I){ITv2 z3JY^_{0Nnn)9iUDczLp->$oJQjd8`eH+7A(BsNK*&f23}dDpzk9JV3Dr^1|!z%|2ZLHC9H0a;yqhszl$(vh0k{m z4JMB=R@G_S1g|y2VJhdZ8h++&nd&`S z!|_biL>^z?Sx%b$;HJ)=5aKEDfMgqllW4x*D@O!B*IvwRWI^9EwWyXVkQADK`z1ei z-G_>)5#Q;PU+F$)lTKTtpflhe}|sa5-P@Y#yn>xOGmUg+T#Hn;gdWNMbM{5a!_>~Gl9 zl$z{mAvCp?$|Hg)@Z3gbfp_aCp)3U$zJ7jc<(e)r&`BJ*tC+qYgHGt05m;Q|+Y@UM zSTEvi^N1p_n8Q*&O`8=FP#R-jF%GXS98T%J;^EStIhS&_--)E}^e#R~H(K4ZAaPj_ z;kD_Bx&ZjWvFU&M(iTd_j8X-mpL)k(tRX~?5lpVIbcG)0J@yr3O8cMH{esefynFsm z0^)iT?NC0jH8q$JL@Y)rVrGqx$#zxb${S!+rSih0tZu&MJs_6wT!`zBVwK9SNEa{wwdq!Q#=Oj3i&?+;DD)mZ zHSTNZ58kh)bNBZ1!beK=PH%Ns{4d=J0pAuJ;U8N)E1TfBI)pJ#9p$0m*G-s+P9&^hAlLy7Y+4Ga8i(uk`_CNix4ii8agcJ6f-DHbLwjLG zaYBw9ARPNe;p$*CGE~q{H;J(key>ck!E)wxZXe~B%Cx!^udPW463p%@Bmtk34YLv^ zOq*@#ISeD-@>e0}4l5mfc>zGQH_5ufjdSGrff6;1)w zIUtou-Guq%T0&YO?@rVI$yuhC#tHs;0JPGT>asoemG^XOoK-k-lnNecR$@g{dEzv;Yte?LYMIe`uW4X*hVXwzeXT`*^{dbRa+MZoT?U z)X^yXXOZv9N_y&Y3Hj>Wo9~3L-5}l@W5Ks?!q?Zl0h-lM#nG;D)0Jg$>L?(Ea=ikP zzw_<>0}gdo-ygm3i@LQ1g3J;rIVZ0i_Nix8_dji^PbZ%UN=AhYp=DCWnT_~Us~9f` z61GKaQg^vug*)&nc~Bc`=t%;*dq0uv#*wG54j$XDX3Aqb)&5t{0I8{egX%v9gvx)b zkcmcy2-2>9;mC6NeB#tX8_}-ruFV-=>*d;VK21B5Wc3%7OPU@C5Q?@a8K1b<%M@e% z>*b}p;quQFL<7UCd(PB`2XDAKNf1a+$NOT+@7Xo57?Ti1TI2qRX($9E`G}xgUCx6= zU|Fp*Q9f5n9>z>?7R!%Gw`nGL6Qy3PHBTV3N3E}k`GvAXI<=mP2p$Ay6nNhzzofiY zUGyuN{_hEnnRNTv9`U{NW7IJa={5?mzR&|6FlTNhQ zF}pkJLyhdjUi<1nO`0lVXujB+Igf+3e>WhP>u@?M+>aVl0pJiCShz8~dm0PWj?qzS zLa4;T-}To{rql*+kU&gjo+T|M4jOmF_Jv%-MnhvA8+be>Xh%nCC4FLe>*vC~L@D)!f> zn9Q4zlPWu!s^3N|eNby)7QkZ`ladML2v zwE?zNZcx@%o!t;3Rg|O#sWJ9XK3iQ zSh82iT}tgI?wWF;!!c^jrUZs$hwggh%ao@D;HfgTgl_}k8qMP-Z+Ja1IU;?+6&Zc) z%-nAoFn3Vqy8uBb@90Wl6_t|+2?n&rv~K6zEHqzoMVkHCTPk0vof*A=AB zGd5g3P&BE{6_ZCK56PVy;mZ3(_o9b+@h#;v?Ra z?h#S}`9az;t~b|5Af1>}*ehTML1z8-!6$=SX4iRF}4iQwkDLhl8SwhsjqW z9{7v&aT#=d15w~B_B+wpkh}YPU;&Rbe&)M#!||*OBj{1IC*ns!xA>j)lz|jTl$;2* zZD;U?QmgN@EVkCmTfG93jGBB)(pxA|G*NBf1++{U-y5AIuJc4N0U`FK!n`Ru1q7|s ze8p4&yRr*aU1iV3+?vxuJ`b*=F}Ln*?=wp$0Z<9oTs=hg>}q33{7ql|9fd^Iq7Iua z9~10nsS}iFlXq7M62WR-g=hM7@AqwW;m~B!8606H2UWl9Ft&U|U+v2^tfrDw@T5s6 zdG_~53#sL)&8iF{P=coyZ;u8uOV?&oH1vbmo<<-wwSQ zm-uoGC)CB?KwyjNYDgX-xbj*!#M z5sZRklC{u@DPsD=M~R1Ssc>_d(=~BvrhHr4BQY;}SNVJQ9kyAAh2Z6f+g$Gkf{oEs zn*WEfw+gDOi@I%b-MG6$aCdhNZoyrGySuwv@Ia6Rhv2>m8r%UQLqy;R&yZMYO$I(`nR@CKk!}&?5K#C2&C9EE+xL_3)lB)CH%5>(b z;>Mf>ml@OI9Tb;eKTugThg!l>gFc-G*pL}$OpAQ-p#WlUxTkDvatpOnqyK-NMc^;& zs+eTAFoEvuvj`v2_vHu=PaoWv0!KgpBVgG~?5pHFbh(WxbiSQad3?fr>pK4k=|Cgf zU7KI!yWeF6oJ)8>z7MCR@^xh$UkN}g+lIzp&aZ}~3Et=oh{UEObwPl9RV>PT7V~mS zoS9wGzxOjBhLzqLm{3{D4@744K^LIy`oJN(GEs|3%2OC6C4758t*>vOJ|`{>Fjhq{ z*1V7CS%%!OQmGpX=N0a>LY;`;KjqmzcT#Zy@GomVk1%wTh7wQ7=-D7(kFsd#+}qnL z$0}`w0Y!g4cA5TOFq|wx!vSk8HK;_8LSZgbI+=`kJadyh%26gecq=}fP63fK1Fyc$ z)x-onQ?3#RvV}%JI;9oD=d(y)BfQC;h(jWvHc6hPh4$m%n-OW9<|5iyH=XN16eA~x zBzh4xj8H51(?-NJt9dRxc2_`3nG}LI=~qg=EPi3C;#%se1DFd;rZ>ZfUR$oNE!Z`S z*lT}9XZiWG&2nIV_M72SRC3FSY6L)j%)c+ln=5OmGUM*Nl~(WEL(1V3gbi#2-9Jw? zA&GzrCb;rLE$E7((?MASFL#z{C%W8S^v&Z;iSxUzrYpUafGmXg*{e2K4eV=r*!-Ci zCIx_(UD~LMK@vUUfIp^HX$DeoOiaF*gr;8REUI-;%yAfz2AU*U3U6ohIxslsl80)2 zk#HeVW(u&`RQ{XI1+fd4KGfhcU*~2eo~Ne)<9C1~lVSk!Iit2Pkt;piTlDolLUBLm zFXl5;@gI+--kxA{8|HNB8r_?`Rt%gN6MF-g9K&N`Hy{GJ6TEkN>7B#OR(D3d+qm4= z^2wzbtjf<`1S~P)(1vmJ0sp3d*nWL&st<>NojH|L5R-s}p&?HPLgECYv6fH>sjaUe zKT!R+ryk`3@{q|Awk2QGjTKbhl0u?6Uty~(@cSRoCuB|I>~l2C_p;TN@B(2DYu5X# zmqf#(X5PwcojLD$rHDl%zT6y?7``-r()vz*Cmoa`NIUT>c02B5q_>U@xKIPVg8y>i zUkEK!|2KT^zb6yeu=tC-S-Wve@qG?xOMlvh3sy1~xD|a_JB9WGDXz%UY}Zf(X0-5}YRkoWNuQU`AtpbCBdULP|^%WA1)2JVd6hRGlh z*67`$kz{7)GeLvs%3=f+BqCXCNsV%ii-l$)xAu~Y&!r`c2g4QM-e6*~r6-RGNvB%b zK~O+OQ8`G`+TqS>ui_bD6f~)H27xfbWnsZE$JMXvKUpwg^A%8Pw5GKP%pne7H<(m?8sr*B$Q4s>K0y0q|3Y6A`RRY9s2*a1Y z4XBptsvXS&xAU$*0VD`$*ZpsTz<;;W|LZB$_2Z~W4uK5ov&ZBoP$C7E(Qtm?#AtN+ zxXfy?K7ao0{qI=GMeB>zSG!NhtN&-WKmoOR$$5v-#l=rVAjlfG+u^I{@7+7JX^^tcwYl9kz<2KI1QAt)Qu7`}B9~S9M zoKSh}8+2gkQo92_QnI^UA4F<40)kJ~(EdEi{H<-3-=_;~3oaWc>>D46TuC*~aeJgO z?&7*d0@oVBf|&de39w59!{9g*x+3sJoWJC$8F3FIL-$0H@ZDy>a(UO6LlKo3+U7uy zkotN7AgnWCAa)1|C&XM7M(6j*nLrW>R>GOcmz5oN1JR5GHJ@5MY-22|G z{-Opb5!5e*Co%31s+MbfYbnpi25TJ+WDggw(eMuwTYdTFtwA2bX3A(1f2Vz+7@UI+ z-&q&-n^ARotA}fJyKR^ntS1psr}t$aP!I`hj3X>+;82IGuIt2ulZa#z2tL0tYu`2k zjIF`SMm*bhodKah7Kx7al6T*ezpzY3^-v@Nzh#SGm$xoH9}XPR2JdtT5nyUaP;Gq3 z0+XEA9P&2cX)fFXBplTLjdvWUga||m-y4%nD^Zi^jxQYuftklAhOteh+2ZC@s=jQs zsC`KfZ;8`^#F_0EVobTZsQ$c>21gvavpKPC?3 zk1U!aCI*9>B_H&vd&sQ6S&AX8(3SVUUCO1C4AiD|OLydju<g zy}ill5u)3|wT%!nRJjqIP1@Z7WZ435bWd19J!F}%|BWY!^df1MGzyviQrTH}1}kRm z4g0enuvR2K+d~t)Gq}83Ug;Y#OyY|8YO?pf>pgyFR3%lO?w-_8BYVgk(FhOKm?d>c z({ZKS^njeX;2f{Rs+?HSapE8PZ%C&h6jWO)t}`O`vJ12RQ*?LK>0fwFVBnEZ<(e== z`$||*#}mhUyZpTMD6k6j0O;XBQ;tB%h|O=Q#0;ptZYNpmcKXA{;!MCgb&-U=u1{CG z`MvsIVX|zrMnG<&Nwufb!uWI)x$L%6R?Q?Fz2J-5rUrvV-~=CYeqd;LvuCdjNLmzb zZ0^iVr?mQ26{(09!V>K4)0}Bp0AMTL@ z?^Bd!eVhiZZbj7Rr0Jv>EokZeCx}lebh*5@MwsNz%7B)GH*O6R1nd1uMHhIG2a*9o zFNjI-JY|FlwD>4M^=VK~#hZw)rXwww$uxxyR&I;BEz9xG7G=z#lhjA#Y3W$Y#crxD zZUXY+#ZLdYU#sf{Wa7Jb|nAk%*hPgCp~QoC6hI&T{k-q=Cr08#Sij&7Jt+Y$}YN zoDnbO2&bXSnG01~s+$p9PL%-!Y#L{V3zT)F6<3*E&dU!3NvTt}okMMao_v}C2@U3m zv?>`)z>D-YCW96dzN=83LzB(KD-jtK6H`F(7_7T+)a5o1Mis!RzV#LSq_Zzr^V z2>E)Wv?zb>9e>l3?$ME?bs<7aN|(M(S>X$?!PIO1N>f80Nkgf|dBLhUQVHmQx@rAj zo?FcxD==CKu$Vh5+aHb+ahZDt9!JvZd6}RNYc?@92+#^T`<(zA^4|=iquCy`nNkk0 zMUmaK1@MA}ze}gognu;WEHCs{2?>3gCIRPbG|hb-GQmRQ4sWc>>?iXv)-IMc0+V0D z=+6IDqUEM}{`x~ah{)n`*czwU&b#g>66iJ0`ZNOWm&z=T^*Zh;6idz5nCqNdXHWM? z<3uF<)|*d8U0SRz|9zK4Y8DP0_RIOoHM|ScJ*8DmWG$7ERg%zWre8jAR#J>a4P1aK z-TjM`ZJGkNhsdjriR{~m#@n2-{tR)-`_W)pZ&1!9v;C&z7JoeE{r^H z&!tQY@6N#T*dul!~fbcp7_d*%6|W6Mu)6oj`P*F%D?^Rd7yU~vG{b38Ou3ok0bj6c1q zb8dZ|N6Wwtu;>-OoQ6>h{wihf^VY*1UGxPgvlOC!bW;sKt1UYiEaco@-2b_s&|pdF zJ6-%gXJ-(Og?HDMpr&Wmm-jRnAf7moNO-)JSrkx-J*??NZPudJ1^B`i<9v(1MXll4 zwOQE2knvQWcIgMvTi`Dt6WtKO+%;|R();2wt)jAPva++G)A?D@ztT8@luF;E($kyI zo0&qDUXvXR>7>!&ypBG!JAS4zT0~^9$2R2T zO9?Nk-%KeAi800sB|THn{}Ig$g0=9zAmv8ks2<6xtBap}<`yui3GJhIYc=ws=lIJr-cr>2c<=k|xxfBBQM zuqo5cFJCVjeMFH!efqgziwvPuA=?0bKL2)xvU zZw$lTw>r!Fp+-re3wu2 zecV3tS&NS8%Z}Mi5g3Lr4$Eglea=0LP)kD@Up}I70H5SU3oPJ1ppIsrqw#AhNZAr* zfg|#@>c7fhy}ExzD-a2gczHppHSX#sB4spFiC-+0MVr{(ND9Ni!KLhuK0sFh{@H*} zEWqD^pQ}29#Ftf=Z&BjlFENX4972}6@Uza^+nq|DfY%p5ustyORT&Prqgc$%az$mi zM8!K@L|@}5e4h*s!522=7)PU2_5hwbZp z{P4m@j0D2@sHjGiSEUJsBdSRF(QMODHo{+#7OCnigLx$(gZAOpNpRbUTNFbQ{d|+g z?_;)Yd0jYsLh4A)sBjpBF{TiQis&1ld$v}$0yw=1A0j?$C_lOiBcuXHu1q5obz+{F z8&NrY(-1Tx7j%hmlWTYE4eU;o9GeyCU}Q*vBLNeWB44Hf$kaznQjqq|S;qGMc8I`l z2J=62w0un!)b|tPam*SwW+TJ?+1yR!R!K;GGt2AsmTwY(Y4=MwFDZJz{e*xX&16m#2N*+VOY$ki0{0_|2HhkyMN*MXf$olm6-h(l0LXxAn+%blK(eKj z!u|d>h@QeC`Vmzi3g!Z>M!Hz=LYtJ+@PV?mhFrhDuDnBQbzI!Im-DAdvgd!1A z${{A0)|57umcEO?Tk!c1jrR;+B|3AWvdyoD2hxdRa!3t+*LrimV4G;8tk`t{6+57= zioo|7IrX%Z4|AaBr(SN{=>S%N)p@vXB#5PQh~TUtUy8J^MapUrRFgfJ`%a`xG9GvW zv{97!UMxEf!@Jue~kqAra$1l&`4sj=S;U% z3EmMD-SKO@DX<-?(!bbMqBb6NPmF0~EN(w|iNP(ztO)RF2_;u zmg9~>dO|3i3NT1t?ai}r-^$Mvp)9tZ;>|W_G&I7QS3@e;$JORy?#Fp>d{tiSc)`X< z1ip)spT*SzF11ROTQ{5_%=|nCPb9i`ydCZ$>KlWI@wecU#^2z!7a`wV4p(dIn{*kD zp33Y`<2L?nI6Ss247JQ7D>ewujxWMhx-AYRZ8i_J#=l}p+(hV8@}x9>8G+|m>aD)_ zyy_h_{sR*9#UtsdM$i$FdHG(^aFK0 zxg(F%wYDoTq)|=OT>Ap^(yYWa7FbX}|Ik{k#o(!={=FTYmq18P($y)5O%fG$B}8hp zTh94wy16vTyW(K?(OMji=&{)_^sqH@k#%BgV!E#aXIQllHOJR6J`B`s)wDidaUihK z*&SM5ug~@~p3$(-zzM5r^4px2fw8Jlo>O_%cpW2;8kf0RLkMW`K*CzHI2OkOaDsUW zI32kLL9dSwafu=eV9hs9BCU^nL=_*n9a|Xa*Q5F|?p`#Q^c!*i z#2th!&*D~w-5yQf=;!r#BJ+MH1ID@|z-EOTDj?zUmO~+dfedUG!@3)7{!+* z{3C?Kk_ltoM$>kMeFZ)O0laD1uL`Vis40}7Od1RlHGK(RqtN+_G4XHGV_+0&cG$J#FIGEx-@)HF)_|N+9=^i@|fG&?@lFY2HUA5eV z!wzu$J_EobEbSj&+R>$NWtfUv1Y>%HW!-um-%jjH1oUn6s#MGiHk(|rd1~zBm-IT(zbCjPni*sXUM_pUN#&ukWkQ#?!>=p>M2^ICbx=B*Yji?@%n-OTDcUxszD z_n`pRQRqEYtg*=Yab_R=l%F!k41;kYaVtdYWy8qwk-JITj7Lt@eFqS-$*)(*E!A z2~yuZC;ECxL1$f;Th3n~Nor)>rOv9&y{~ro-wNxXK%*CTxjLm;z%&+=sdO3)X$)_^ z*oiqO6CIB1PZn)5EcW&&=XSQj2kUcl7_|Y8c#gw*wGDdvQ$OVr+X-@Cb619XGXTEx zbJ;-zEX9^%td&j{;?>_W*ldQ;?U&o|@SN6gwx{tq3_5-ABqPzJpSk9O?k08&Dw8Rw zq7)S%2&zy#3-tF(BW|`^b>GaFHxqRYnkbd71p?dHy98Wmvs8?)2h_=KW9y z9p9XLq1TC;ib`N#*>h3$uKdAk1XN>0GM)t;6s=X>gi}wt2Ayut??}4*D#^0n?0|Z$ zLqRaA4ABxi_n(o6UT72!xwrge@!1cS|3OQM2wU(4pKfA@PSe72z&!Po8&R$_!zv;- zs;%Ne;>c{Hom!p_7TGmR+-|XB@GhbJE1>{8p8X<ZPnC;&je}RW-ec88hVM}%#-@gW&a{LUFt%H>JwqpC!zj=8@bCpunBk z)g9k0y)-sLO7NT?&lu!^yLnLJTCV>1K00|+z#HLRdGs2l^Z@UU!cVv6?Tx-CL$-#B0_B0N9hTec?ZlI~#96!G_U^gU4lK1*duXD=vs+hB zij9VWbS84}>FJaf`^=aJ+|kVRCYNa|wU$$XxR*Phdx86Sn^q~_!J^aRlWqVyhmh=C zWkU9QfLD{#I+Ag~EZ%Nr#LkMj<<$q9E^yqeUJ))!M$zcozXuU z-ghSv;UK3Y53OaddozQRyc_W6>oT4OuU#Z%xM$ z6heOY_PQ-Tf`AZ(!Ii^#B4!q^_Pg1>LVxsVaNjD^4I5xaa)NV$L!wnKVnq3E6{dte z7AgPEkS9z&Q>MsD4ra}AqIi8w!URYI@{L$P9wO{LEGl+N9)m7OB5e=_=-|;oBJb%O zt3y#w>4vMSml1FP_cR=#%T2neO)O^pfS5mw+UC0phDXcgXbl$1j6(2$;Nh0j3PGad z-q;*t{>yJitOI7F$V5OQ^Xwin{EZu*YEZfNCyIWZ&A#4Mi++A1+N1u{w*Xx9MY4MFd|G%WGce{8 zSDlzKn@eH;g@8EE7~M23jy%1|%ZP%BL=C1(A5XFc*YYYL>-uQ3?Gu~_V`xg3g1N;- zYNwR>ytBRHM0?|7s0i_e(o| zdyp2s@Cx3KYs#aAGPd>>=Gcw=SaZ#uQGC(lm1ASfS-7nJ+u|SWHBR#J|1_Y|;L>~d z#MQBEefxuV@Mk+dMY=P_hBTcACt6OIXxS?L(|`d~&{!h{LCcy--s}cT+Qh|*vBlmj zye=$K_{>yMN(}&k9)K(0djB1>VTwN&8mCC>q*i5XpLLyx>))Sn7oPP{UaUq-lKw=q z>{wI?uh;CD7{^<}1hi;otwD5wW!1+92S3D5TOCq2Oa5FYAKw#~&C zwcr(l`Q^xNS!e#8!E~EZ$nP1UJgEj89=HzxvIPE;=8@@m>HzOs_3onH=xW;WC8&%2 zXz+9;GUIxe?p`JD{dM7evEj%mJ$ zP00Tq4(;7v{-H|L<@|)XO1Fj7n5&90)zFW~vXvTxG~w9~Fpd4B3;PWuqj!#Hl9pO5 zK)%g(k&$;NCGw{=_#A$WiTNs}EXN;c1V-Y#Osv1fKaw~ygIR(Lf~qONap0*RDyq$8 zBEpSRJaO?QAASoCG~$IQz}FFCf!0ym-dWw5bDfJ+C4KRuj}1?0UA^QzjvN%{s_(xPUFU_NpbWq?aW0pw0|ZmS5Rg}3ym><-#re1tt3cALkL(sxV= zxYJEO%#ZcPRHM{Ph8qy!JNcK7_SE)d$7G}AnKbWBwA9CzNa`AjRPMdU?9ELS0%e)v zKwI9GGG?K#_Jic7mfQMjTq@Go|GMCX(eyKV&^V;3q);P4x90^7+y3rrS@>*^(ABwz zVJUr<7pEKs|LWz^<%cf*9jp3pr%5fy8wB|%N9r81Q}%#DH2t2OZu4-Mg+tFmr;2R9 z@U1TOubDBvm->zWnT~+*XX9Fq9%8K`2QQp1U29qKO>>)?7h>Mw8i)Mu`Ur{wom}QU z3r3kV6u);z+&?iz(q9-69IrD5_YDQXa0unjVJ{zh|AQu^PzNG5KtA-H;D0z0+ZvLQ zi^#r3Kci5HHMsk`9e;$|P0LC~j%!TMXZ6&$Nc<}h#H=k*hycyKcK|hWitd8X4k7-x zli>f$IRQQ_Uhin-UZjX&mNQBK4=?=aBz1+HT}L>Osm;LWrVBk%mRIKs1K2xY zv|^b*JX?{MOIEtS*+(&{>%PBKd~&@jTB0Y1gH7ZL^`?UoN@ghfk?AZS*P~qSKW+w1 zv^e)^&5FzF?KRm*aQCDOi(^XiU%R92AMh{p>ix`X#i1ASt}c{3Nh_-Bal7zDRvFeh zPlOXpq`2ig(g}F(sz@G1<=vseNODF)yARFb%Y*$dYr;JEzo8xrETWhKS_Z}8zTPlT zg98#hIbC)w`&FI}!hWIMY64GMH z0bjCl*66KpSK4P30b1ZEh`$X!r0FJ}Ok>2#tkz2a%v;fWwJ&I7fAS)b>rGER^Lheh z)7RTo#z;l_=l$wiy>AMtUQV%q{1pwzn^xsr&zO*R`O~oRU9PQQmtRm+#Vi$uM{+_s zhZ0f{&iLTyrIr?ZtD;DgLpCgl9(LbP=@N{9q?*s$zr`?3(`-JB-4K3cdDHaQ3W3uq z0-{A$!dI9gmzM-MECO$kt&}NBQf&Cbt4j>1e8n$_qjWsQ(WJE zaeppLgTbQpvKY;Vl$1%tSrzoZrsI14UN8(m3Hwslmc$<=(RIaZpFx?xZxM;{F z!+*9IOhWMF_kv6=dxt7WS!3K3<)(@t;8Afb-Ej|lrtv)3tzB8|vo~>04?PCTBHXLS z1WaEV5|_FG`BmX2fnu3^?`Teby_K?cRo*=0n3aD*gvN^5_Fl8D&<_$^6^AITMnN`ty|bJaMMuCk9loN_a>+$Kd1elhiVi^!_|Mnda?3qzsx+;#r$ z6jcOSWOlUJ1Eck@bzco2fhe+ZxQiaoH!cQN?U`$jG$hmA^zTbT)qFtfH^nd zo>*TCG^B$AIGE#h4-;rEXCpC}xLZEO?(Goco%Iz3f4U=78`^14KU7vip1%8fkIfb$ zNyl!Gyn(7YQQXs-2N{mZ5d$exL`E0rNZ);J-Rpd}Aqly&looQ@*3nUVbVu z{4)`sW<=mnECz`=QQs8h@^S&P)BBz7PLaDR2L`#Ja5T{GZ3g3cwMp!vx$kI$5}EdP zB0=L+5vjFzDy1tIA6F(qXYkLkyv=e0jgasXh;q0SpTU0d_r204Ws+%w8FQm?okMe|C_!{9 zRV!eDE(DZDB(WHP=#CZ`%HkFKD7Jm9cQl|g`cy0^>(O?mYHiD=JPRw}s~xksA$!6p z0VJ5UcuG{P1byEbLzca2w(o%A~@^wcuFct zx~(4NS;U*NXVTPvlR?X!h@jaHebl0ql9+;-7MaMaPX-we-9afE?$Ib zVs2yv=oF3!DP!!S2hb_$dwPgCq)4UIT&i2iPcPwP7JU>iLO^up)8AQoIEQ!ZTofXj ze#;b%oE)_#wPQ{vXF#Ki9Zn6dL5+j4YSXgcp9dycohvwr?*An}=c)V70)JZ%RL4kGSbZTum^;aF;=0OIK!yySNpi`Sek`W~jLksoNl zs_B~j?!k6$(^j7twe3P4QigW6L&wYa!B_0UsLht_137tnJhuK;`GDLW`hWwx6Eyry z>|$cXBq}fAaQDZL8UUyi5cr=_Aa(yzo&vm}m95i@)qHO|<#whl^iM;;7GT`SHEju@ z@)X!Sy}>&!d{9|hv5VZ~+ayP3#!C;3B6p{yztx@4N)fJDnX~cyT_?@Kghv`c1o|Pd&v(yNkj*KY_v4 z;*QBHtE=)GfKa=RF+W@*3n2*_nDQRm<+8u)LExw>FdU3`QUouiJQw&T+6yN)`v(2( zpzR6pwT_xnmlW$Z+3?8LmJW<0c$ZGcABz*?cV`7k04!6YZ%{V1Rv`(8K_MNO z%<>daZu=Jh`am7Nq=jpbRrqV<2ko9TIeZjlRqD$F)p*>tp4=7288&d8R7J7#gB@58@@Mjgkk_p~g^ zD9EH`XS|mq{(edoll^v-$EO|3*Q;w3X1@p<2GO8h)IsIE=)VL|eKFrH`S9NRSLA7v z?(Y8dLJGTFM2SZWXhKb!{@BO+yZz(xQqJehSPxRN<3Rk^^OxxgZ5DS2eI&cg_=#g}B>;eeKZ)JUF}MfNa1ac3v@(T;(0=^7dA&>~GG1 z&U4F!D6Wj=yV*;5+#Wox=r%Qa(2t(4z(?W0bI2^;3h0xC!6j0#$bF z@p-I-elAuq?<`o4q!NHDs+s-nXPc?mEf0vX>GhQM%(q~={wQYl4;(iRG_1o@v6);t zV`#^?2}i?poYj-}Q~p3NPP>IeB;;#rQoEo{R11ew2YCFB$#s3GR$+~o*~1x(@S|C* zQKK0Q#R?e=724I9Ckr*9k#|3fP2YansMd0P){!WI<1%dFIGF=R``ipgp5xbCB%#k9 z3?l+}zlx3i#a8H)Qv$=%@Shn9#o7tzdlMP3r00%1-!Ps&@qNG?)|-6lA5wT3d!qOE z?^J72Ri3L%hfVkiQ|vMi!Bw@F6q)fh-KvLvq5~59cOA$@7R)M#V$-db0l`%%^Yest zkohb8cb{r8u3w~LNK$d%#BH?blCh;uVJIaPWCh4Llv4lBQo+ziV@gs4njBUMNlD#nj=f*w^Hymh5Rm^onKI}w&`C7@ zLqQqJ@T=b;9eAjKS22$BTZlMq0bUGI{a1JO(?1zO&_fFyKQ~6SWK{=a2U4m;FMk6nb^&cTi4~$1gUp^TTk^QnrO%o5$_VKObpP6EB(;d z+rT0*xVuN3<)!jJI)XvJU*WexD4?TK-aig3>h2h1-wXpzGQf!Mksh4vOuuql zX&uxpdLJ}4oXls02ugvL!{q;gYZRh#5cejqNSidshuC|RZ?k6zD>7Kr1w+fuozx3o z3H%fhFi>9;_`meRZcw(r_Ah3PQ3$8W?9sFM(`z`d1>(uP_Cm ztCbUd)`_&@l9LhDEwa54^bg3m{p2#9(FB2*5W3x3PWu~83suaFM*FqV?}KIKS0}nB z@2lit-`y7PO>Gt#S5-GJNZ_D}STzlBU$mi) zf&?t;>VJndmJ=*9{O(=bMdFiVGMG74^v3>;#kgt}41GuS@|VPUZD-sWr^OmKEG_}% zRgbyXeC&Rsb`pueXfwFxTZ~a><8<7OIfLK5<8W}+Er*K7cgiBhf6|MgRPNwFc~v?@ z1#Au>aorXrmzci}XC}jXke^q)q<(#Kzi^E`-EAKHrt2>o$Z>CR==I5{jvNVTU*>BP z%wjDjZx#hK8WhLvSB2?^VhZzdcB`o7T}oVqmjnlt4&y^$ z!Vo?nf||arqDBE*HlVk+vxVX7az0DsK{SVB1S+2}z}!ytBmqgbxzZGQHA2$u+?9E1 zg#mmr7)|neQ$xbVHl;7h`!bOrNMHAV8-Ou*m~6u2cF6@$8gjk{B-mVAY5=Q0lqgCS zv%?Topp%C4bh96h=b#Zz`rQ+0Z!8g3F^eki-BI83pJc|*`D5KDzSmw;PyfG;mpnI{ zW5|HxV<%e+?7RPSUJBty*S2hZ;3`Yg=~7Njv8G%a4~ik$dITO=WTn=&@vzuEhXcs1 zm;}4A12$^Zed;v+M%ggr-}3)X?kMvza>TO@ht#By@{m*_pyEu0I){JzNGZwE5ysX_<^1W@klWBh6psYV=Y$9Vy(3A=HyD+ zcIT&JyJ%qAr{3^ju@u)2g)cxgcKPz(1&1sc6x+Soj?7J{6S~ZN?lZ>nS;yZJ$Jh39 zC1?0R_D%f|sYgbCnzyfGHR{$2Na8Khes6`oW1bW^+7yOA^PpFCo`db|*Esun3a?MZ zt4YQqH&=i6g46+vRu>9t5_;f`V{a=+^3H0QTta*a%5u25q`W06Ejx`^TsKD{s7P?) z&&y39HFgAqnM+G68bJ>w@9!vgUO93rzK_76!pvA-5v^8$M}(H{AV{WCokd3pth<2z zP9adH`_H2yLSV7fOmK5^6(+VO+TyLC7HhOoy(%xY%A-!C+@CSt^E&)kW1m}A5_Ilw zv*}1&Q(gWHd3tQtZL?0^g&d*OkX+GuP zuTr{gUVkUkuDlIw`(olM3^iGc!UG}+hf^bK&58K%@UtF1oO}F){(Fjz@+Xe5(zO!W^C}Nt-)e9&a(6oOYC|pP_z^B5?ri!gM`=#l(XsDM&=|WM@j&#oS<} z5TjkKZ?XblXPbSwX;lgn2R{>1YWRwJ&t5~2;aQAeheJIzP*~r)%N<`pl9hA;qY8F^ z4vVeY3Vs7jhZ5@~$JU40Piumz#A?L=?NKshDY}8F!I2FD;^S6cN?bGAKp&RM7h60I z&S$#Sla#AE7ulhEIMI>W%|!L^HJhgul&M@1N`v*&Y~k`6e}%J@j3eQ53Nu&w= z5!c_h@lfhK$Fzyxx2+)|2UQ9r(9WNjOw%n~_pv{zlGEWb8PfJMJFI%4?@LOUs4OB! z4Y;_;LweEi_@~*NZJQ|`PGlseNK&>@S*k(^cpgW3ta>6PMfk*JmiQ)otN7Bv^Sdo{ zMJVBSZcB;$&B5i(4MuS~A2tqf#KWK$r#vpWuv!X!oWUxQ*`b5@-Q zTk?YAP^dxX`HpyE%9T`^m*q3tsW<4M)Rc(OGGMN@`Ssf>dg=`=p_?u}#!8H& z5F$Ayybwqs2ZD0PNlN`a6B9vRjB>!z{q5J-T>HspK^LaxBn%F@96u5wx^zG+&6wp8 z%Xttj8m1vy_gtnZ(Nx=JPFwBBsa7wHQ=};eSL)?(@##d?^Y`H~6P~FiP)@o6V%7j# z{PyZU_@qDHRZs*%28OB)?q9;svtyS^P%3IOa7iWWP4m)*>eepdos08VPnZE|V;$J-+e)HytU=YP?tujd1^gu|WS9(deb| zWk5>vPa7EPlEzS$(g5>cIiE~qK!HFylNvf*pgrV#SA=Pex4; z>ac_Z{0GFiAiz^WU%J-?%xMMiC`bJIo#kUB;J*I4{&Xg6?l901zUy`pQ|m5G;=94T zVvQWwz$6+anf8@@DzRprSZgY9jzQ`*KY3dk-`)1Cf{EL`SYdgzy{WKi{QK@lA3wp) z?ZGzJ+~JyCW{(CC`@;su>+2l*SfR9+7JuY>hCI@09#}k@Thd@0{3*8S*~?Ee)E^EAE(*U>2+}P_8E6GPH5JfkMEdwpuiIbE zp%)1iFOv)Tfh`Pi%5Si;)NI$@-8{i3)=nAX;mEXSvNS+G6y&6xApHVy zZ{jRgBan7^NhOT0`IeEqt^H;X3@MsP`|ziCh}MpHA<$m#24ZBSlVydRbEdl-%#uyX z&mYc1NpLu+qRFBix}>`Xnp0HC))#sUva@o)xl808=g*Hm)%)h1?EymuK9hKeW!iL^#vphua)9MsBR%!Dcxf_l{dlG2)Q&E{&&;ZXN>z{ z6NVu0%c^SY(+b?eK=72^7MksK?;;^rFoh~eD*d`;EUR7of)!tNof2+A*x4_j>Vrj}{H>I2oHH8LxSs_t~v z-ud9hu_7iRDdSn?u%vAy(&%K&Y&tBwoAhD<7|GV(h=BeVVP_Q;R}igfw2?IK!Citw zaCi3vcL)&N-QC^YgKMzh?iL8{5ZvA84)`S1cvyj3@{ZzZOBCTJ)=j5<*2C5tB+pd-Nqe~Z~*jLN+Fq<{IPaRyTOjYukWmYyV_ zW+Z3y1WPm*(s{?~q1xHy#ws~J33)BE6yPNtUO4yN zJXD)fS!H|$j%&$)p^H+wxSxxzk&lu1D9FC>2{Eo$f7A>C083bMh6Ob(6cBAs_E7_- zZ8|!&N}8xmbXI0D!2Jg@w8NG#Fx+%a9(0(r?=ei0v)|s4N#r2paehXQ7tFzWq~(I^ zoA*TNe;CcyAc)`!`6iG5yEXo_4l+Y@_2TiT5X=Dc#P3-thOsY!pB35ifTs9{OOJn; zRQ$8SO;EV`LMQ)UCcPK{X|;7xmdot8?v+HVOF(8(&m6;MQi}n4^Lnf|o-Cl`vU|X7 zI$Me@ndlPxW3{9dM|AZ8lP(Mj_DVTBi^3y+G7H&f{bjEcpRgGRoO7m@gHkx8Sm3%L zx>)ZiIH-^zkr5&P>khGn#bg)PWGWq6Pfw=Z(|#S$^D*T?hsqfFk=%t2J#kHUJ5PWV zT;ztv^MqN3uP?P@gt>_@lCL$Y3jf-NG4YP^fWd&acAbPwFi3KhRWG-+7~P6mkC3)* zLnbrDL#^bGYN@;K?MtLFu$>%js47(Wk)5@Lr8@eXZr@qux&Btpbr7Lz1I?D+inq-4UH{eQWKfg4&}#>gZsIf!)By!G`Fhy^JjjnE@XDVWQlFq%$LA2u0^1~ z23)h)an;2e56(E49q{YMv#Hxy=?fy`-=@7#N-ie~bbCyqozmEt^+dns+rsEc z50jSN&qI&!aU0@Ci!a_|TTCFhr>6&3@s-woxVt{kb*l-t!<^j3Mn7^1`XfnZGF+Kx zb?wX^lH zh;Lu2TGr^V9SUeWnLyD{`HjWFL91l2E70!Y`0>+G%Wub@46{Eo{3~WWnG4$>oA@@o z317{AYTXk)(Z~5;GpUhYzI%OEOL+RF=s?XKw>U<^GTbdh8kH2$Z+$~~$&|7yx?SH^ zbX+tAW0)DPLYa?h5?t?p;Me9+c>m!*yZ*xJKnFO460PWGZoJ z>TC4iZ%vaFVU6gtVcmoSop8{TcVz1ib_Z($nlimp=pbh1gI$KKxg8OfA>20`WVvS?PM-#WP#V!}z43?IB&pgGg^_ELL15`i+DdkOX;x?lgn&h;$>~U1<89!f7 z$pe;Wcov_y`??oFwYKH(un| zTW%QCdA2!;!0f5Y<+oIKRzB{CnAXQn#W23cq}pytnGw)6fM}CaEA~3nX*v40tzX3g zRUt`ekv&~#ezX42#-B{{sOoK*<3)1s+?|^z{N@vVB)rP0L; zzv-bLhAm}~PqTpUwwWa*I^*HzjrDTB{J8PD(^m5K<)H?~t?k9RWE;4#+hr{)X z^Xn<(Q~Un3CQmmz(t6EP5O-E4V(I^x404ICFBnVJoXNNMXnZDP==`2Wq(Ado<(PPr zwk*i&vr5uIc18ds)cThu`*g`08X`9%MfJ*Ip-85lS-v6Y(6 z-tt@gf7qtr)c$fE5WtKg4-7(xpk?dLvmSR?e6u$=Qf|BR{5Q>F7r7+Xq;AWU+YnM>X zAQdBst#2bh3}h=sD(Vg2M$jt?P@_aXQ3disK?gEhE|aVZEaR~N1HJpkaokEqy`!6{ z*7GbjLV(r&WzNho&++&8!IP%}8STi-B=oIe;C12lqC48e5o z6smxlRlPZVu1qEfoUxf#4FCAFUfe~%T6^ab#2EaYLT&deL7OAfPE9T*CC=~#4>(bl zr#B>LYjlDu;z7}B0hPatUFT3&ILO({p3wKiI^^c%GI74O)_yG3exFgh>fXj1d)O|z zf6(%ewKDp>DkKc?2WUtvRt-XZK2s`win6X~3gqCM>NYUTLvw1Z5NAljQd`QpUyADsLlq&*VqIT?qfJPP9G{ zTv?@US70eRH+t|PFp%&>wT1M{6WPJ4p_WcsVQes1`&)q-#4EWvk0l=^+^~?xgRZ3< zeG-EE4Wr%9pZ?KR&>cyj0*RSr`18+7bJAe&;v#qN6g9ur*YEy-gHkssE#c2s{j49_ zxTXiNDl zu}J+Kb|{)L0$)+4-<#~D)s16~+)_Udr%wX5n5NqNw{PQ0xXB)j12G$>THDQ}(7L5D zITs_!X!0dNTMwUXjef#1Y{{|TY(&NPorsWp<*i8LE{ zGf*mS-{4+jtdhOY=;~Q?K z?ULyvB*J$Y-R&yTpJW?AV@U66GIRG2u$hq)hMMNLWgWOrZ}zmHU4K$|aX{X1Iutuz zR?@vQiX%<*njo+lhE8WQ>lrQnZFjEW$p_CAoMv|i*vu1gd34sa(JH9ag>sRDXD-Kd z4i?$*c|Idagi7E|R||jidKKsKnkOM#=9G(!Uu)Q$-X;SG5{-UXWQUF#7V$TaU(Lx+ z)|hpIt}d_U`c_utRwknW!{}jiX$#TqC!;sF7~&~i;o!K4Uew7PFhSqC)i%=+cT^O4 zco$jfh{IAO!2a>zK*a4arE_DR{eUU@k;BG8FQR@=CSN6)jz(nRTL`!e^7kVjUv}az0Hh*>Y+#)o-xI$$X4v|*5 zW|dNeJ)GZ^9;*_eo>|N*eMYPr+6>_rlamNxWu-uehBJI9y&g176g!}xOXOzYQip}c zq^{Xv0_tmP0472C~Ig*9? zi?;>dd0<@HUk7J7U*m)uy*OXn5F|RgD~`p!mEExNFQdlm+mu{y*W5at7}1$5UDAr_ zo+$QvXWm)AT<`&8aiI98uLZ(^%TgF(3w%GR`LMW5&;vn07`uC1>h#k>BNM|;7SajQ zOo_E+d|+^2SY7E<)#8S@0toqZ&)6k2v=pw*`!^yEIcQ7ITznu?_)d4`y;l^qss5wH z4Wqm_C+F?j_(O?>hm(!mYx0xzKGorL;TMmaM>=Q;m$4}4#H+1sBRm|eA=5?GGu)?M$hbbkILAQ(@?-)20wIFlye$nkevUuY*C zpb@o88NG`aK9S)_$K}FhivvqDHvTu=Tk4Z*u18z==O>3+6==Xw&-jFqWiwrQgTS z9skX_(l`;!A!*i^gftZLTM@QzCa1qi-XqIXM9n<+Q6jD2#ArpAlQK`kz_CE>}5^beyVOiRRG*ah!!^{h9gKlHzw}D!k zhoVPqD>u}mREjMa*Sp8Z2IfwnZXBbPcz)#m|`7o$M*5-#k&{!A>enL zSA5dG<8Yp&BFib3DrBUWAHGWOc$|zrg!2&R+7hArM;;%Xxt7%6*fyHWa^><|fJ@yd z44;O~GrMAF?yn=I0Ds1x@f9)1Ol4lmHp|!(70g?ots9ts_T`|oGwkc|^s}<(aqwPw zXODIfQZzF(z0=-56FMi-{b%}ZryhS)ueIrph76u+rxrA6mB=_qW=nn6O3 z6ZJ}s#R(7Eat>?UtECQ@zF>8x{=#V2d8|0Zgume=m5d>nbD{LQy3 zqY*r0M11&h7Wi~RN&|yiEr%_8d=vUp+USCk1Q=WKF*yQ(*Evr?f{FPhAi`}uy+Q#zZJ}js&O^1U z{>`%w{6|j95cV=J6C$Vte@Cn^KEyK`y?Pj`iL~go{7|5u9mcYwoM#{$Pmy65fQSR5 zp)^jdr0Fc4TCy~Te)Ng+W5VyMjZnb!}uoR#GL|iT< z35WoVqhGEl!6XjWpU3evv0r(22bviIX9`U{RCsP|G7$oKLB?KF^ov}di6?D8`Qsk_ zVkwuzXcmqTScWJ?mX`!z)i8?}w||SKVz!BlTFn2zgxl2Tyq~b{=J09H=FN z=zcw4AcWt)qY=V|GJ1xwrP>ddkJ7eRlNf2^~6OB$Oe#yB&v}`!;gFulYBHo+At92Zy`(eYL$ph!B z0FKE+=+Suq_&pe4o#raOOAOmJ3GfpuxtB3HKeXn6Ws^EmkeRBE+Q%T?0rv;iBX{rD zPyx|0dQy|xa?jSf)fjI-WNMsayH0;}DB3RMu9>R?4jwdq${%sarjN#wu7pjD(_8ag zgorF&cJqci?Jai#hdy1UHY)$AsO#H+#nYSk9{KX(Cq+nWzf^d$V0pn4?=0B-#u8^J z1P8wHRdmBviI_{ar$W#}d5;9(sDKW4>-RqnBk@~BT#pBkx}|;d%71FE=)>=~IrA?k zC5123Al`}X0>p@vB+$35a~88h_hmQt0)= z-=LohzfFt|C(sr%yFKG_-Na@~q4JwNFdHVl>|G(!pTBsNf#7fF>3TWx1A=)C-@CK9a(ta?usmf5`xR2P+zCw#*#F6dclO+W(uR#WKIR)mo7SxhSVErw6rWwCYJyYcfEc8jSKkGYoR4<5mHi4bwth+3)d55yb=4WyZ4s-+6i0kBuI zk7WT08&2qk-@aNek_iD4i^-kwy-Y5zEB23{zeAu<<3H5pCv{Mm^KM5v-&VNfV8`{W z*UKR_7b?I#d2VG^Zy5M4Dg$gvC}8LyO!IobP$n65uKWwqr$09RWo$UXu04wg81W32 zAh*^fDUGdx@LWg3%ZPdS$QLwx*OL;QE*U2uzBsyRDeH!wC4Abz7gStKcwb+AJ1DEd z3n(Q~2=4ANepmp*+})kuS9dMcB1N)RCCSv5^BYkSE*(`nhuV_GAWjbvjEc);*BZIX zX_FZPkW$2qIqA$6^Lh~uS$eG<&Ol5lsd{pbt?64Rfe2cY2qm|Ta#hBtEBUwLy!A1N zEOXxIdqz1W7Vo=_Pu#kmHQT2WoFzQ;zq#V>tR03tgWLkwuCRCqpt?=5f6+W zMRNJWuXabHkXBqa0p_Ak8(}c zA+-~&dbRaXUeMB%=})q-cgwAlpf4p~nhN7Ka-e0AG$R z;Kc8U%YN4NFNB!|PNb6W-MhxWux>@Ck$BgZ`Kj+m%&6N-DcHeTB%ThH=aeV zBWBNXX#;A(aG{_u&OfvjKgM!n`r%0}@9sn8`>CaQN*GB84A;4*) ze=66=pk*tHmVMFoeN{7b=CBM&o6rOK&(?hmPm5}+DhJ_PY)1n`?Do?#U>jaqGcl%+ zA`!E5m9}$r4OOXZ!Etp(9H2exfkrqxJ3|eyw2<96&v7(MKtc+>A=Y|wW}JE+AMbEI z8=suarr+n>&+`1vRkSN$+t3-V%XZW}Yqc5+{0eD3(nSK)W`_S1AOG`g#(DjdAOCyU zMFF2WSIDbU3@FH=OdvkvEr#hd$=QpY@`h<}Out5y3U>AN;ndiju8W@Vx}Y}AL-ha`k#uM8tlw6?AzoiT z#}b5hz$s~9K!S)#AEf1coUdKena1kK@yBYlmozFSyCW>J`D|zTwRAgU#ExSj2$?`I zu+8~<@4P=S%n7`#M?Zxi{E<#8-KH-L@%Pj&?vr!Cya)zaox}ODbYJPmY`x$>B|>mB zO`koO?g)7Nlkqw1aS0GzjWIV6+>v%i)A0bTZuePVeTU9tf}Q>JNSq)T{ebK41grZI zV|C6=bJ_StLkEi^WJG5&s7z>GGLuq?dMU zWTFEkUpydgiWp2bt9n4{Y44@1DBX<5BgF)BrI1%E1L7nd(DrXf+vdj#8m{nviW>@y zi|0qjM1ihTQ0c%|t8)#AJ9;!A>+U&bZ^FD)ejd4;>zpgOi>$d;YiDk$fwN9b;$Z0n za+v8sORB5JUhnqAm+oto7uKOJ;OFWM-+)`~rhMg{r{QFBn4Uwgc*dX9)IJKilW^P( z!Fl$HAsW9dK8S)cLOY)BB%Xxy?djn{5CDFK*vJYkBs(O#JxWG@omhu2qCPO%m2s{b z@BwCXn9X8$u@21dhMbwz|8u5LDt{Gt;b5BYe_~(PaES^Bz`_s=CrSnTpt#`RTyqkr zbKvw0gozlPVfR)^Wo%q32~&AsJElVPtsAwt=HcDhWJhFtw(J&K|M#N_2Mr0bN8Tme zD{B_IqZi(8u=(rQj&`lVSA%TWlVF<0WlARzMHJlA7ixGgjF!gi&gyw1r5N|i?P9ws ztuS;t&yX+#hk!A>12@S|8W_$s%8Lv{)R+3lhvn>90PYwRegEYxlIkpQXMJ&edI#aH zN4!~x`KDU&^v6N^`Xm2lJK{1?PGr1%eH({R9Mw_|O`W?}B~ZO4*%P3L*`lyK=~jlgV-=ZG#WhR6)wxML=sP z1y`TGBFp|o7QRH^%H!OV&(iMEBUr#A?dj2IH$plSpzPaaQ-F{U&!sIw>o}dvHy(!n z^u%VuJcw_2DDUWs;<`JgkDC4Kez4L#vexHV;e^{kCCVPwtY&R6nHS|z{z@Aqcju{N zh|7H|qs3*Y_WRB^xy;WWblaSTtF!R9Bm**bQ~7bm+i}gMLtM(qN%DGOZ7>RIMPTrF zoQ}dyf8A|$*RkOWc!29ok%E7Hau?*vQ|i$HxT%N*_r!ZIh`+zRhiwl;(uK!Z19tUq z^cqc2%5X8jX$SuDv2Tn1tRHd&y4YJ#Qam5(85li>s=e`W$BlOWT=K z6I(BD`;_=2H%ZHkX_sWMu=t01%5HJ@X+bWIJ7Wtkn^&F=$?lTSJ-%*5l8@el;kwsq zgm=vE)EdW!`Z*t>lP}%wSp8YssIsFkGJD5^w)crci0q0$FS{Bnlfj6R^?HECrtW-fB4&tjHVku z|4^00F=UQLg$5@COdRoV9BMmy<>1*{5T=MV{8@6oIgZgv25x#AFi6W zdH=KiKc|T=hF2A^j({=&iD&}wVE5BImr0mL#d3JqwXZ~F56Y4?#$WA*$&it2 z!9F&_S30quG@*9B&{m*=l5h)S|qnu*a_U_nx~V6FiiX!8d>mW?Mg_E=sH>5cRwdt*?fd1 z__aQ_SyP`uC*kYc1{UCd(E3lK_J0WDAOFc4aDazC(s7Bx|KyhJb=1&!9wXgn`-gr` zW%9$A86bBDQ;~4=;C^4bV}s4O9*v&@0UHT1?h+xxIE#)CxK#4FgVGk~0zTo6>b5|` z(T2ITJUqA9UnzvA?k{Dq6-(Q3Jf|Yjcm@kp>K#%~V8<6cx_)X~#)xO-;7byjzm{R1 zvKgDukg!lFGpxCNuRlaux+>^x&dvjn#w7B;O_X0;-oXSvk{UDOoA48$5uj5zvhw*x zYGeL-J;W#Am5mby{9IcmCg#|P$^H43a!D2bMosvSJfFY+3Fw2)?y^r69n)#WkBn?4 z+PvAzT=Y#sXS5y45|?EL5+jXIB@A@xWl;gJj**slBuM>Ko(MSbL}A7h*y!O77^q6j zhm>KPyTh2J`ZuMxuWz(B<_mR%O%mrlZ^mZKCjC+-BS|@=Q0|aLH!OKyt1>j&JO~Sr z3AXwtH&8xC#pOY?aHE?HN4N_zh~D(SgJM}Bs54So9K0=+(u9}9T` zM}I0pYmE#61f(Mg?yzh(nupmZn3CHa?**&n5FprB*yoxZ&p|?YW23OGm%xpu7Iq;S z3(``_)T*ggHK&riCa^y^-QD)O;Yx{cjalpDE$yyv;g=R%Y zyM5Pr$Hmn5i0Phule|XIdd#_%;rUaDPu;F#@pDM$uNEH_HOYAtmOuEVbIMOfx6_o?d z1(ewTp(%R@j>#0jM*BFbzBf|q!j;jY(LJky5N|ngJhX-HD$9lQ(Qo1Jt6*{1XAS*j zl)I*~nf7A>KD`Dk7FD=BZyrw#p1tm*rTAPpygyX~;Y3JEgQ@|@fUyvb^+iB6G((}D zkwr6XM?RD0IRk&w7kfwVK_Qfkan>45|WYVe}tTrO7sC_#_i)# zH?fYmy;{y4Hbpu)wV>dEPLJx`IEBM~j`9Sw+CIJ4MEw6x`Zp#Ali|6CNZtWp%%%_w zqQv;@df9qa5%Wk?VdAq^p9dV-+llHG8o+9KL1o0 zY{W4EWmxfCyVVWt4>&IO1GBAx%B3!!i{uXB5@&+_{hN95GzKo^CgBkf1{Ev*)X&^e zQIC5AN)fS<**utT0ixXjA&@q{n~Izlvc0Hn$|siF0hCRSQy!!DOSYD`O@!*z@PYYX zvG&{B&XrnS2+;k$I+hDnK=H$ol$jYqV4aF31_PhVn}$6aH!)u%YbzZ*VUiZZDI;tA z6A6D}2Wfd0LcyE=CgtLOerE-FgVlt~ZJQt@`eSru`fT5((SUL5v2`4asMgKFZ~PTt z0_SFHN28MiN|x(WfIs|&f5%)u z84+6N`pYdV5lhUJgRqT9@;4}Jj9svQA9X|3TuIC6bP@HL17)B?bYp9)QwALh9Zaz) zRO?R~D0iTcgWSl_ffFIsUE555MqnN)x-tY1AgYJc0o(wQavBBoAwsbLTfa{DwTaz) zzDjZZ%S*WX9d;&p;dG}cZ_+3A08-gEucb$x-Kj(@SfFqpjxIi3>5eh3U!Nq}ncd}s z!S8u5MkfgE%M?!K^B-sWGGO_e014j5|1v?0sJ|h_ZM~i}(HK|<=Nie(>h*OXv{hNEYaQYU}K#cpEMhvax?`*N}_+g_a-zm)w}rK4%oShWF3_ z)BCX9Jonq034iu^lG0M{veoRNo#veK3b6KLZ{*9_hx3wa>H$;J?|)bOe;Yn8f_EK`hp$iRBXvfqG zd)611P9lf11I&(-UL0yQEA@nlW-opL!B-CE#fJ_127P}B7hCwX8pVwq=WN8RVvRIv zJ$AlUt~EyAYc^Z(KB3@7<#o?7AB<=)<@;x5ewc+V5lk~Cy9j%K;3m0HHd2B zUTVP2?cWr+VGH*d^%U}kcR9E%(4|?g2$&4)Wv4wZ$PIU-nZ6uQsT`Ugx{XhG{Aj`- z%8f3|+U^pc0p{0T!J8|6D#l?xzrkFh-07DGVjA|Zt9c7^W)XlE(%N;*-1Gp^# zL+(GQ&g9|jQ8asGZ}vPhDbJ}#169f#G%Gi-M@Um>@SN(5U|YLl!}*|+#HRE_sAOyy z_o*3Pz1L>izgX(DzM|gu>rg2Y2Y^|r1G5@l_()=*?D=?XnG*F@aV(}A4NWW47U0zH zP{dAVIKudq@KEkChx*ongAoz2dPP}miO1+j`V3B99;cSg%LO$Me=X z5>rZb`5m(;UR><)S}mbP1Fi2%wlD_)x0WG*PAV*n%jqMM<kp6e!PWFX1ar<3E0p2Dc)E(HM^yE!b!RnnxvlNU!XG4E3f9jRl4_oeNrkGWD z;v2rOvC~benZ`HsIf^~v0Pg9~Ca5bIfyKg|Zi#N9zsl26c(}qjEcFSIBkcvg`3Zj2 zg@aSJJ*@1jyev=%1{W~0EQMb-(GejOZBR$_lo&RluN>Bvu0v^D_eVi+kyxy$@k2|p=KX$u& z_MUDDC(hyKimD~IkwJdeoAmx!iWIAxL^5Oj3``G9x;TuEr<=iQXi08?r-4k@=|Xka zmS38~{ZkQ!O5PahLtoarOE_Qn*RqB6pppvnwUQBW*(&ils&FHID?@X=%)ACxp*iLu z7~OGpzj`Ct-3vLc3QVKzyWWe=wUMTAm*D`eqrj7;hKP5$PoxQ}2-so9Xt?>t;m(Rc ze%S;l7cdNEQ2+B=E9#3~q7Mk$ACJ_I=z%30g-R>a*q|6Kqmx1Sh^%C~j|W4~2t)wxcd4l&`e zDovsXfSqz@3AXqB4rB*?4lj3T{)P~hsXmdln-krfEyG)4-wmc8K(;ux;26btMJ|$0 zpn0~`DUs)YE2t(sBRGs?`xR>ZI%|l#SOeYH@e5s=}6)B)kV1+v7c3}`X z`UPlj{jJ*8$=#Yc)<=7mIocY_MZ11sAnJTbcO2#`X-e&4Mx{WVDN}`mfh*Z;-M1!- zEq5Ch$^rk46TUUcyJdnT0L}mpwgEL?fb|pN3w$I154`q{L&3cEzbt7@*q;hrel58% z`x3MjHv|`3LXJQG&H`uFa^*76(|61mnwXHCQed$TKi-z8f?$2&PzlZ2 z=C&bacgfNe6gPQck{>-*qby0z(@GxJY>%l zz2`blNPC{gP$j^S{T!k6fE;RQtu|Ip8?f%Z3(#Z9!?GZOPi)Enx znEsH#B>(|TwA~$$-lG4~6dOwZ(taxfdI+16$U(N6Hq*RJ@PnazlqY?9@HpB!7MHMx z<9P6NgwogC-=SUZkaAdA*`-?Ol)DSPWhqr6CF95FZ38CXS+ArGi=on0;pR6G@##f z*O6zW+DVL9F|8kPcIJwYPX_EZ`|%pB7eJ7-(Iv?7?9S)uGePG8ez+Y~%2tudq2Si(h*`jBr=f=CMy&y`J1=_lk_1!x#7&zu91} z#r}tCDGzIKQ4o_Spj4sG*avKf0M!>&ZMv7zTMSsj^}s>-|0wrGWPuSHF`8FQ0;?uL zl%2ZCQoqWhHPRNad1RRyi7#n~FT%6H-(P*ftmaQ<#loN}uVir`hVZXQK=oh!Gy&jn zaQN?`KKic7!8&2t@1hjxTz#k6#OM-m4U z`PgoDsyo0cOo0b3%l%HmKHGGYl;?s#@`D)9l2)PfQ+vC-6h<5)=1&JyGu#WuSXZM0q;@r+f1^`;0S zZZlp#zLZk6-JL{hUgOwnP>y~P9;szoZwXxsjVbtA_1(_C7Ih)j=u*~BXe(h@Rk#;a z2XNbvcGpn%_wu@7(LMQ4#Yh4>DuO-$D7%lBJA4S0V!yDWs{e?H-ZI@HhTVn)jRHDjIajAya|9|=6d450De<+pvV z?J%zW^MXFlmR$Dx^#s~qy$bG@OB4Da|9A<5=1c&n@}xk>9fPgZXf2sG*}jJDhL{=yQjT zFe@5MU9OsrjVM zRJ(i@T$-@s0s(dNxAMHip1>>c7NsDk)#m34XPvDivH+Q+taE8k20)=1B!&9tKtRLrQ$ou66YT!44_e-*+0p;~vG z?|W+(G)c8zxx<@e#mU+Vs4Jb2e=J!#0{a}W^*nj}Pb&nTIgQ$f>Yr-9n^crW2ccuh z3Td)OXi#8)WXP{uhagjTttnZ_pYnKH2qqjHWF$S<@!-M2Sd+M=6mMR-lQ=WecR3d}i4qhuB2hH&;SG5!|3YvyVt-1ju z-U$K}uI`8%Q;OBFdeqG}S7VYlrf3%{_POG*%&*WEY>KlnbYnCtySgNj01>LgQ$vz- zs4Fdlygakvyj~D3&WwTsw!?O({YdK4PPYOQMR zJO^=`C~^hcdb^Wi#A8X}S;fdKJy7)H+m}V5=lcAdzj-YS2t2441FDnnvJN+&&Wn6{oyoU%HdTW+vu*N|Aw%SUh{ae zq4Hh(HJ1t#EI`tFuTB@3vH{+lJ|gfglD+{j6rGhe*%G@t4qi!aqQTfhoD2N&?w z~>4PYZ1Ua5Or&qrWsm2K39yLf*R^<6l3hUmp zYJ?XvK!?uJuEuc`qgkl7l2>){?#Eu6oNh}iPZ?RP24qQ*wCatGr}o_Lpk?{~)k^nRne0gxnr zwK7%v77FODvU93vAFGQ*l?@67wSw0^p2rmC9vDm0*I4iEVqBCZzp^>J5qLV$^f=NS z2*|F}iG&r3D}^{)HQ7M&)3NmrFg)hEui#ZieoPTj(OQ#v9v{``(X}C?N08*CQcIDD zm0u~d@a|6`2}yE1A|SbtkO-8^;-e2?aJ;Y}JQB`JAZSua$#; zet2^^UGYuobp$&uoI9jts^Zj;8EI3{sWZZ6IuP~i6&!SurS}?`)h~EgPKiw_jL_y;h-?kg@#dO8I8cSSKmkr z8)H+Ihjm{D*|a_Ix8%bk`3LSrY!5y0M=}UX%GyjJys_^Rp^`7?U^C9Zl_% z6gOqUTctC!#-tDddxit`FvpTQmEB(ty-|Vonz+(MswtSGA>)fy?nvj)jVdqqQuj>I zAC_ZDA%Ybhfa)Ye!0cmzNbu~zTq|2|WN_eBEYNO4^b|LS0l5K83z==b%9vGdk*)I` z`ZG@ikU8=XccR_Zyhov-IKvFSHC-`Zeyt{}mpR@+Nhi>6aDVzx~)5sY@~ouLl@^ zEj$fP4;~0S^OQB2=cN(%`Oa4qXd9tvD>u2?0pO$u&1;hffGt2e0*qN+DFO)qz!#fP z#_y11jjwYbnp_~a-+y0UIGuj& zS0E0sSrSoh=uy(q0$yx+{hI%wi1+~#ME5s5mmlEEuJ0BzGay@qsrD5}1rk6821#@U zfw~`@ZJrIXP5YHD_*?$F-<$bdkpOEj z$gdp^m;QiKOi5hGFXg7>mk#wqUdUmcM0J$S57j>?6XiuBiKAuHKU8GcD-U7^lT{HP z3*$9xl~^c`)GzjdrT-d7ov0Tjx&C3c!r#!J%cngxAP61?^G2k-I;;tg1OD=@y$0#V zCg$S)TG&lPVD5(&`sa!ip$WPHL5(ue-YXN?M*id!{%R^tJKhcoM#C1Flq;Q zXazO^;!&pz%xVe-2AiOf2cCms44Dt|sSo#f2xYCQAw=?PZnnLoE>AE0#6-{$GKX>H z-Ko`TK9;Le9;=aH=_}feiW!GJk4W7ob8!$RipY$>EKF|yO3v?`tCeV1Kovr;5c7*V zgCu6*{9SSv;ER~}qm%dNJ!^S(9vA;cjC*2>!qG&FFR-2e7cEU7C z861l?fxx;7Kr1Ezl{)p`kstPnxM4~U?A)PPu@KnSvg87^lW|kG1zlWl7USwqpRU!3 z^venzRhPeLkj7$k5uvaoS=*>Tm+egJD8iF%KM$Uhi?29HPr*Lv@$<>O5bHQ9f>azt zgHeDo*Z-@F4^j--NL3i<-%gMFvxLp@XHqJ&6%l)4F~e>n)?&@U%0dkawq1A2zyi`z z+pOqf%#SX)ZF6%r8!&_2%meU_f04P!$PcrRB|`hpW{>x!}j>C@e!)nUg`5<8Hk70 zqPy@GB`T^>!Mc%xoP3`4c20q$hX8)qIRMcF{N*SJm;E9ETxgPn`AjDy{Mn&=NHsd? zuXDW~OKpZp{YqRMDiGI4bS3IC8n#oXr!8Zo%%e1}X)cv!QNvJ*Q}U0R(2*R}v5zkQ zUxd9?P+VQuF8JZrxVyVI1PksKJV!PZQzSw)M_kDDs23l%Azg4(+IxuLTyL$h0-67<8gIA1A(fbWEhj%BEdb%S> zg5Plsm5?n>I)61A_wyPxtM&*)$6amPMRF)8RTByQyif`WBiE9qW&+t`?7?C)>S$4j zQ*i#>M0iuGtNC0Qg}$&jif-I^2xG~2%jppZeNph+jOb$n==VYsA5)jkJAd>~cl2Wm zg}!`{JX@Oznglr&R*b*nG*;a`m9doIFyvyD$M!pORqZFCW~|+~>iB#71B zqTR$==wRxh`Sf}Txl`ZFKsCEMokOn-bb#*g z*~TsF^J^O2ezo`&-BjnT#mVtmhum$Dmsssn@HzCL*j-=XTk zk7OW4l(-_l3$vAaCmF|)W4gwhAM(~mgax)rEuA(gNw&A+0tolys4$h^a=uqbUY^Vo z6J(i;M8rVUiPPb3UgDFl()Q*--x=8K8Msxa%@E2KhN44Bv?J6m_;Cu01<&mK={vi+ za0m#Z91QrP>~qLo#JOA(STALfi1`(SKxE?>`Q)&*;yNn}2N6MPQ~b}smBsEw1?zRo zCV9Ro$s`eW!YgPfkM6{`RR#ZwJ-3@U_b0e47%meo|K&%u?m)%%c-|29zy@>lmDiA1 zBf54eqzN=;12O`&0;sYV25;ZBKARhM?u&@9U#ru7u zIX|5F=vC@+PETI5mMW)9KOOTiJ@{?d>yD*$Kef=-PhPR^jHaT9V4NF!y(CtqC$)OL z#7sZ+g=5q;Hip?q+7`bO-@jJCd#qeuv+38F6)$XSySll_0J-7=&nx#5wYt?G&YP z>6u%a5wO93P||R4aM(_Ce^)@z^(KFI=8ICQ?C=A(?de+A*n2=__k6p~EHWP?CGm1s z;z}sqlPew|GF|_2c(7Ps;uR8KU3%3XiAwtyc>-{Nwo*WV`he5j_+Nt%v+oRx9*7Ub9^Fxx!OWGnG8Y zW85%LbDpY93Rx2==aH})iHCxi@Ru78qX5k;Y`$c#)%_8UYppX8$~<9lzl;gkdni7) ze1e|A266Bx{*!RlOA-v79)v%sA>#R4jZ<)!DO)HNiYP#XG2PAJS!|b1uqY%( zoWSujF#zMz;`T{2>T@djO5jK|C!edu@2lKJo;N6TWjg~m25t4e7FhhXC(Jd8DL)KC z&_5|Mn6MRhf>z6B@r`&|agCCKLvD!=w?{W%KvhIG^gN(tSzn|LtgFry)ujDpUX_a` zjhftsVBkhr4p+DZ)sqvozxn<>udkW5)dT^&pk54=TMT`l4ByObgXZ9>czk`5xWC(( z{^o0lhc<@UPFSZtAFBjiS!_M??%?t$P!;znuqr17I~hhI5ziU-iBWs>3DFl_hVha~ zLmbH???AXGRExO9N#~I*;Mb*4R`f%XOMzR&nK*0>Pvt$DtH4xy>#csH+Gs5)okk73 z0xy*#hUScU1lG2u)MkF};LEuQ=Jw`~HA;8x7)D0jgiG%;oIUm-mFzLaAGRpIM>3s7t%u2jv zPUO<@()Uu}Qv6)&VDR2M+Ws57EST!`Pd*5L1WKFSgYinVGm-c9-#aNRw8$*7)+2?5 zg%urGrarp9E-`)nQpsl8?O(j`cT$!+kWm15^byhVI+zOZd;%E+)`AR>&(UliKCt zzx1C>zKN=D^k~V)k@P;^eCxrrT+V+`udu2Sc*;Iq@2NEkpX7Gio7f3hc;gV|*X8@n z%wOzo_ws8vky@{&Z!fc4z2KtzisH4 z_U?aY)WlCi5K!3uy_T6067Hnn|8<{kZla>1YKRZ6YomfI@cUQFI z7ptn~8Of0$krg3m(Un?VhE|-{E?DqH30hLz`eMbAcGxZN1492whZ%LDkEdK=0z$-b z&_D2=fv{nw%_y=0j`E7e9s>z(Yz6PnS7&8)U?zI$(BJ0g-_wtJA;&NHNMIw`=#XhL!R8=%42+(-hd_)eauC;xxEH>1&v;i~Ul zD86JOg<$d?T$hL1=qG1G*j)u+Zuub2rsA2F4XRNB#ffB5edvL|s<^5MO7&OBFGB zQLj*4^L)yF&CCTE=DbniU+;fah-c@f&B#dI49d(%1t9dFqi6Twan?FI>Jd6{Uxm*b zlGo=Kple?;hNSG`RLw}@Dzz~^&JTn5H=gS`rSdd+>1OV%^a(5jP|*}~arCP7=I7it z>R|`z0`yHQA+SY!v!wdNaM4v9yfm`d%-VrJ3V7hvz&rRzb>k=~$i#%n+c%|NbJvQe z{b$xgqr_ZtQH#~z@4#M3r(3fgmiLI=px3`t+2Zoo6XYk5+vOQ~NOw!|BgO+a>y5KG zGB$P0yrW@}#UL0}>2$IUbHCbqE~^?I$*q+JbH$1!b2DuO^5;v81Tf2zqL4IC{E8m` z?Mi3y4H3hh`6Ka9iYj2hHJgsAveo3IwbGEGA|;qa`k;p|!{?x}f+kY&98My1CN2Q+ z{0?Xxr1lp|k%>HZJa~fS43# zw(2tOc9R+GbV$vJ+=f8{RQ`5Z1cPGOWouC$@o_B^R2o8QN=Tg=(kLczqP_~l{>U*=g$|%d?~iSI4VDJ zh$kWnStpt2hkA;1JR;_a-mbyMyf2A~yRYV>zq+)$FE=k*YWb=2RG{u7i}k zm{mr20K$1^%vO&5!}M4|<^bqt0sYvhLkb=KG!?kL$?f*XCw5xZ{viWODCp_CCnMrA zj&S{`@?(5ji!6yS>&$M1X5}FLws*|M09TkDML=yl;ySg#ava#Z#H2Wwt?_?4=rhji z#ZNLld>no> zxVHX&u&=(f&O0p(gc0#^sIw@$Ua<<_OrJ-zAq<hiPrpW|sk{ASHMfRhF1;c$ne&Jla|O;sOWKAnc_ub$ ze<^(QZ_~*~;#Ww&|2df~5dt!r+!__|sR{Bg8*u&&w9y510FTl(Fix=om^ARvDScA< zRre%3L(|_=V*CFi00O5alK>DkZb53udU08j_<52P*_MtB)m%3DIqZ6KWz6aay=8uz zi@LF3V)aYWUA4UvbCTJlb6IMLZnwb+%R0DRa1@QfyY+kLI}5uMG%qx!r22)}xJIkG zk3S@@!B47+8p<3Wx>MF?x?OK^PegsjH4635VKkO4piBnK2JKb`uQx_`q``yN$>wPw z=^5MO!@qHjfCV9glVDJpKp_t~eyUVKJ&sI*%8i(F=%G4!(QlhUCIWE3o2@6~R~VNg z8y#^DyeZRvAuv$@j$4;SD!xU@i)&B$tpn2Y->nvlcQUM1c^^RROxwdSP2oB#cL5Ia zR3zZU96O9%+9*KcL$Q)C84JV%3mNiODP|5K7=X)UhBS&mf0J2d3XQOpVgY8Ho?l3E z7A3~Fp6fsw`a9;@eU+P`t3U`_uT^A)-mQ%0>OhAOm{$7waF=+z6s_kIq2T)cJB$dM z-lt7r9%n1sU*v{_^eBze$t9uaRo8`OuaC3^7hMAPrshaRlii&M;PQ>qK3;OVDbmQ|X1ccdsjR~gmQK-nLcDdB! z5GEkF##ce3-u9V#0;n)iZk=-g`RMO77T1QY{95_ALR}!ySQCmY(oMYcrO>88*edJs zHe3aG?1RdI$NnE`Hyxv!@&S*JBPao|_@1%=Xx^Bf0r1fdfXn|G=Kkqow^ISQ+ywaJ z{SJ0M$WDvb403z+U)T8Y$1g2u$7wAwqb$tvsZT>-&ha(GjN@};ajjgq#H$cEo{$lU z;<3f3%iO&XK}kL+C5>hwJ-$i2drdKWrXZE7Of8R$RqIP|d8SfsZAz{I$2*5K!WcuX zC+`ar2yTkAE4~#frV^B~avpXAprY=Nw8Oa)5EzFHGMFP3caEV3!G~kSs^gOyvI|Jl z*}dF16w_BA-#29sj#0t0;e85e2R%@jNq&q${44fguCmZL(vw8QU&wmWFjyFasK~!9 z1>#YMQ!tkxLo-SNXcM$3^fz3p2U0po9n9RDWNRpjNEUAmt3L3ck`rMMw9ARrL$uzh z9v2|+Jw#gE{LuJ?_u!&|{EI3LR{}H=d@dHMS=rb^GK|iZka2eHDu4W8lVqxg-S_$+ z8V=!M>+$rls71g0xI4hF0k9E50|OqT+Nt)}@*Zv^U%SPoo80iXNAsv^xUh29VI2ZH zyp|9W>zm0a)-EV-wKI#gKXnXifHY5=9t+dWL@+Bttl2rXWBsRTo?kg{umT>hn=J~$m<1f!n89ELmEWRW%T1~!(LsG zI->QvlUOk0#rdrj#4Tca98JC}mBg?rmeGgl%h|c~O;r&pcM6Ie#-9A9bQ@q<@&p{a zm~C!5vL~xwjsUG6Gdl4Il7s}c3l|qE`k7=hAY_`PPg@`!yu2^g2_ay4KZVUW_}vQ5 zG>uDfg*8bGipJV$H0ZV4=ceRqHx;lwbc+$L2`0-W4XrCjic~4~Gg&>f+9$eAJm8hm z2y@l`mEVJUo8M_&BEe`;cKxVsy4Bmzl4}@t5wjY273vnIQDFFGanDHNw7hhrK!SK( z-NB4FYaf zUgc7QwBzFuTbZje?eaB8W(mPOra3tsN&@bw_AOb2!H`m}Ugh5#x{CqDjc zvvZKFctdle9BhTD*#wH*Hbz(7i|EHruD|kmBfVHuIm09pmon|yz=pSQ#%m;<4%5h? z%G~bnf6NP@kt7csk(Tx^SHjSY-U%3q?%71shk1|1gfa2?vHJ0z!w`}bv!}3shsxEY zOoZ2Bg9|DfF;-|~17?*&o|$4E!sfA!*?7r1{>}5VaP!kF3L$z-HOzwHseqXr122!nEsLX2yMYpAs^KNib~U z%b64jmXBM(HV{KV{XGBXIa%VU9Vb$j%245gmp}$CbPqWG!O#s!;FMCnr-H-_y zK46$8NHht-&Sz4;d+??Gh>rb5d6P+Y$P7R7?ws)A@;bP-oZMg4_wJDdhhzhKWFU=0 zWkQn9mZ^{d#5rP)KvYIUM>`}V5xy_+k2{ll-Wo4))uT*m{0E|eD5rbgI_QfJ=KBTc=rkS zIKsP=j)}8t+@6m{XoyMW|M~FZKp@b{27Fampo2yS1JH*Z{uLiN%FQsoUm*cD@b$Nl z$1cZ2?%T-?^PltM`c3X^ObJIL`JinVi!Zq#Uqcs8#{m&z?d-|mK7J1;J!&^*uf8f5 z&NJv#Yi~SHt6l);?{8G7?;F{k8V{aE=YTlM8LBontKjlpT#qrphj^0BQ*COk`ZpD~ z0mXVK)O@MVR#t$6DxFegc=yNHd0U;UG?lwU7LnA~!TU=u<$H>>I*lXRO}cKCu~V9Z zxt0f3FKBP{W6~{%S>L+9qol$uyro6(0h27|*bmEn)J*#0Mwry1TK8$3HylqjH&$`Zcz#B0@{~?_mT{_2;dbYLZpL zOTbLXhs7@NX;sLD($O7wrGQ@9 zo8i(XcDd%}zTvo41S@kJ-pgg}DuJqnD1OOLir3MIQ7UmY^C9sC|fE^G!;jX0r{vvrC?Bx znq$bSCw0Qd*eVa}jlI@q@tPiD@V*&24|+c#{mb1l=O$~Q{?BIb5uW-T4g$}X#1-bE zqs?@4I^^bZUM_R1Ip4E7)v5xa3@;mZXN70H5YW1sLXCuxATSWLycmp}y;XCxkJS-4 zzcuaT*vPVB5$M)_c%g!}QGWlydlJZ>8cqrSL1AO@wAfUOroW?-MDH!(>z*dCbi4z0 z*vA-QE1G}BL@6P0`+$7-s3?La*;xc5*$du>iskUzua=KN_8OsvbHPgWvtLcfKwAp| zb{zGbVjzl*O)krs$gr?N>HC@e=~71EmJS(bM>cycgA?km##TGs5653=-#i;iSnMiB z(|yMoGX00IM5#$l3unZ~+%#!Hh9*RE- z&lhViQn+>6UuYrTeGwwX#kC*Q|4GW`uviCYKVKD%fX+b3g99lP_!b+bADPa+YkpPH zdvrfl>+GybCL!yu{>l&9fC*)o)_ypl|XkjB+E@T;cEfDmb=&uJoXb5zX*d& ziMd|T8f;#pq@c(akXKKV#SXNX@ExM{WH@=jx7`tl4lLPk;8419@V|c?51xj8Fke5I zUwqa^I(qnuE-+phKG*QseC|kBU!;qbD6Teku;i!t^%vi}W_hAnmi-X(>KTjCLJfy} zO;Cs5 z$jE123TSnsmUJfuv=e-AG=(;i_nx`1!wTb@drM>goQiTAJW~|nh#0g!#^^^?KvN8q z9HtoYkI?)Ro&meQ(*NQxUv)>$tQ`YLUd$?KMj+HZ`Q)J#h%{9)(~lLxAMY@UBX&aL zC*YfX6kszwk-Yzd3D_w4wleV1zYK5mMlfcj|0K*98+h>_!3i&a{z(&FibbTmRW?7x|q*C?Axe!Lc4$G%ceqzzgs@p)GA zjeQ$$pu{ez7wtxXs18yQqr0xPf^@~6_TET=eQ^m-LxV;p62X>i8xEtLD#1sic=ZFw z&X36QgOl{(lQ|EM21ITMuY!P^XTy^3$T_S!(z)(iB^{wAa#ecxs?vF`KU zK>Z6UDbwufkM-~-(;(0Te#KeQKTPepA!(DbY~G#Fa*?L>8Cg~=Akw}^bhsu;ZN!ZG zM2UC(^Xa|Z)gvYIf?x>oA3gy)4POTaPcgsPhL&3k$g$+&47FPh@ZX*mCIKO-%fS)2 zkpnjP>hfi>P%5GaPWD4!u|s*Q_hcq&$rv5`HjUtL&?Uf+izjUDrpLb!=yf96J81#ov$Q9#Z|A5anKJu@`UlJmEnU{ zz_a|jI?vyp6hfY49oUrp`Si?nKzyI`#GN$24Y%_9+(13B_)g=2|d*R$Q90ub5W za{(1$`>QY-C_FJL8;=zvbt>dPgmAyHY(9KstfRzu+(Vo;M|w~B6uLUg738A$Mcg*D zx6RI0|KYZIKy6pTDkyX6-&HyP!3!DB5j4Ln8((C|=Omx6#Xrm;p^=r9tz$;u{2G6N zDw0%T;%M08B-ZS(#L+A#Q54^~j?7y_;+HB^CKNeROGT+LQ^?SPhBB$==J{s$t^jG6=G`wDpcBbdfNa(P+@q$_#;M_t%@KnkOoO zlE&|5TUVlsLbYf&r@4vHjtq;_gz&{CAExH<3g}2t@1g($y+A+#l_5&`@Gjh6h?yO8 z?s5xi`OQRs_Olzr=~X8;$~L&cK6V2ZAuZI>%_HxDCABL_EH3Wz%^UDrho86zlKeqq zP+XKmD`(v%+6yWanV{T+p9uJITb=vXYITocwiA0Nu#f@^>xfm#yjc|FNf8)5#4M@! zA2gA5S!`f$x6YCZacs4>O?jk0QVL-l4GBC|A16S;^;PcYZma7f?Vd&J<2L4rL@AJx zcGr6J(X9APn!jiJ>7%XrcZC}q!Nzatc(L-kKkDa7U2N3f4Nz6Z52I9WO@}CZH}+6a zopL8CJPtgBeDLT&Qm{VAW z4w|Llb~)RCdU&iD84VZwOYQ*tWOT|SH2sWUC&#eUbAbi&HSd2zFdwv%Hm{R6E0(Op zYXUZul0+#)@fSqRZa(-{nN)i9+-?=)o`CbmIcg^PHq&}+kCCr zl|ba-(Zi%r$`EAgwS zpZ$PO5XYP@oPdi{pE8}JrtPl)mzuK=)w{gIc1H1A6#61(J7Kp!nU77K37q+5K}6ur zzQ$!lQjVg@1uDx#(Sh`VhvyfPt;*J@K;5%X&A2wdR!p4a8|XexyDzI91<*H3pn#t| zv5Z|8qr?*wwS~C*F@Uq{4G=|n%Kj}`6*DtU88dUh`J(-t{DwB98!!cleipDFDHgoQ z;dcxkdUsHwl#1M`=5g-$$q!++S`Q-}eOm*RJflC>Mj<-F@--9%3`s$Ol53SJN0Ytz zX4YF3B7}b}c0y&F5c$YPW388^VJ;fQ6$S*pxHy+5>93U^+t$ai^beq6LAP)X6 zoGeB_4l+cLC8?L@0Pq!G3r2}U2#B56hX0XsFAv55HAh}vySly8X7APdLUD*SVbnIL z@{N8&qtequXvN^i?>}l}G4JbenC)oFwRWT=RuL9LgfupzhK!}>aM3?o?)V3iD!>?d;RMwD!h3T#vx zj`~rx zy#&2n41tulH!onLLu;~6Q^@$$%abCNPYZn$R};ew&B2t3m`XAOU}+TG26oGzaSr+t zZzMdcNJEF!^S9;>TfEONn(hp*2o^jO`m@i!x_DS48|6}kV*Cy(i-5hnP@nCV?mr$7 znsocd?@gX;&8)o$wTM$>(xZc|NY+?Mvf=aYTM?63Y*6}<8J}=_5ij&N9%D{9Kj2Y7 zGJ>VDsrkJ|ywzX~WBF;P!IE%r+{*2$x2<_Nu@!bdHRb>)!_DIa2rt=+n-PjwLmnQ!`B+stM6 zu7o-}gR?R>y<0n2EN%&UOS;0(txR#}OS+`}WS^Zr5bfS9b`9co^pKrU9|Ui`RWKjB z>t@kzM+D^XgGO$+TPv}bF%tPr7T6;`BO*X-;>;L^N6%&@a=bQl*#z z%TiV~Hv5aEB3{)1ObhVBG!_$9Gc+++>%UM0ppBfpOt{XfJ7TH?@Tzt{F|Hz+m??SK z=qClxYO|;&B=Cf%$tAv7I7?Vr-x|w;e{%ie0l}tt2xmWEDNP=+w}-=cEY9+#U&4h7 zRXf_|%p+$wA@SUuv6q5yOEE~RNgh$n&Ks16jmhKZ4n^mkA_s^%P%gSF7NI8)0Z8`ik4b3dA=(fH$arI zcpm0tOD}LqdNd10-L3=sso&=rs>F} zFWo8sfv?i?K`u!lcr6Ex8sDsNtMpr_n7NE_+hbBW>H}ZUYYW=l<2^25@0S#23xtA5 zhbN8YuR{9wr#n!zyoEzV(RHBtK6iM^SIY8wV6dQ_5jO5m1=xIuQ`C|n8n$OLZwe^g z+#827;!#r$m;QhX&wY{eKz0SlNW2D-6_=hwAIto_C<$6=9Klr{W|Cnc)jBS9ncEK8 zNHXKlZ{-~WX~Q4L1NF5q;%@&taUSDxkWh3&A{Gk!{JH4(&V^OA^cbioV4{~PbxKA+|l z5*!LTl>yE*1Qcj2;Wyn%x*?O;ybe!#*GJt!eQv2fwR);1OLp$B`I7xu@EBGbiK}eQ zEe+>E!wJVAR8+9TdUw23|IP7=L8BT?h$s<>q{GS(T~?vfZ;=qx4|=o%0xn#dns0G9 z30M>4hF4e<)C0(de9LA{8sqaF-rGqLLOC-117fvdg#_>L70RiFng_j&{CJS1N zrjZJsskTczrY|!cPZw6Y;lx zZ(V>wF=$))IZ55pcg(}kA#Bw`6Ai#wjr8x2JUY~?GClc3ZNK0hWL$OXYIdpOyahCGO5B~0x5DyGX)5H zO9BSHC&UTduBO)@^Ol;o-qh9Fc~zMngR-wY11F_ER0&xK9xm5EBssDL3DVgzpe=Xr z)Hn0|)25VMAR(Cte1KX~g9ioUV8-7#LB>Nlr-GS9<}&ZaO@(fR$Eya2dje=+hPMBW z0ZX9-cZ!CE+#8wO;Rnl`Zo~(2^-#%A;@ID>{7@xoroH2OVD$0{3J^t)eO1}7`dzXD zR}AXeyr}T6YpM&DssGygET;zY4sd5dZ#U=@@et!s8G`;VdRa+#q|Thxde0MD>OtmC z-9_r`7tV+YuA)p}N*nI&!+eM05C7j2(#YAP`X7zu56uQ|Q3_2usLz+Ho-H39X=KE8 zYL{_e2#Q&DXh0QfsPgAO+(7wJy4hQ_{rlfP-aQz$@=HF-cA^h0*kL-OOIf}r@er=R zB)wu^0EJBK`n=&Vb4FG88}pVo;r0;+oGag9w6w9g5eW(>GB-O!*w^~PVq|N&l43ji z;T_4d!awfsVGm#8HEuuMIB9Y+Vc5bzzfZV=Zn?TAL1lK&81YkU?7j8hkk91njNpiD zz(yste_#j9PTT;uxUTn$77Ao=x#6H@t0D(tbXbJXIIslWT@Vj+dPky2W1FHyA1^NS zz|L20y{~o!>p7S6UpbabsiK>KmR=tB0mz+Cha{#w9cK27zT(h3b@WGz3(0u0_w@nC zh^uQ0SiBu7Fe!c?E&}r`8ZlBuba$MXCC+8pKTunEklc>eRZm9=>Pb>LR9~XKnC78T zIX2FYGF`AKZ{x4swh=}zEvJ zw&*UY0yIdjJ0nr>_in|Ky`9oX$=pGKvo(gqv3gZQqp=ITerxb)?1p$gZZ=z4m;LgI zL)q+t^_Hh_vw&UG55vXeMtKb>`^ca>fO``@Tpi3hRixG>qTl|B(=!GT`WKhf*?19n zo-VUyysc;d^cEUck(X@L;=ImfB7eM?u)nXk&1lAq(oA0eAHnWhd=&Uk@D=xQ$^!lZx}~ONH|Ip5-jh2h2ZyYWE{fK06NEay!T4OIMDIao);qYgDu`UX_GV2}L z@#O8%vouklEBpTELT9I&KPFb<&#>6vGg~uP8o4=mVL$n#&o?%(z3*YHCfy9`5iQ;? z+f+42$56M!en^15xzP$1{662JCzZX~#ZSRknI&$`Q&JP5~oVXi24vieCQ20-o zlF}#i{Q*j6NnA~6JM0;91#k$OCDx7rVTtU=oy8&;dUUw;m!n3GMmGTkn$}63(crzG13A>Dz!hK3H$NKHQe*?!<(d4dvH z;Lf1e@R#x$g8wg$z9Um|vB%~^+g~fR%8n>tRZ!fs@>;js&)dt8ayt$XX{S=CM0ZmL7A*nB#tU5kJU03V4ho8MB$K68?M(P(l-Zt!-T_o`BuY`BS+p8@1tib}lK; z)XHMoUA8Ee)1YX76X5zgoL2dl&%>yk5vDmhYKHebvTut;Il-!G?hrKXG8!Qs!rWsI#hugmlP=%Q?Na;2PB-FDvsHabA+DTt z#88q*5DcuEf{4X|Br;oVN^DOruyvMPA{6kzKT+^DGM0E^b9ISN$WPv(Kq3~9n#20; z-CF(shT7t<*r>aaFPOIeh*0$vNKK%YnApk{a-mbRnaITrm>g^>5cA8Bdz^lmEm&5| z6B!Ip8cv`j7GXQE6aDlSwHD!A$<%f^%`zQLWYFg3CX0UIf3FG*K`&1%AHJaW_4R91$_qDs z(nSE2-XBj%pp~4af?kY9DanPSm51c#QW3>^OXZy?~5ZOlP(|+ ztJY+zNnc#31wny%r*BE=FTn^-+@-d(%V{t=sma#PVZr%PvbPiEL5N{8BgEbi_r{83 z$>7`yXE>clDyoku8v&)B>u^@!n|3gCMm^%5?uS`?aM}sb{L3le5IfNHn8@QfLva2J z^}lclxDZ(4J;NaiLG6H1#7`3Jw$8h)25O zm^8Kkh#3U>0Wm}FSvGBM7B#)F5gw(=k&WxNoARl1Y!PLsiyb{&s0AJgk1P){97-rE zqfn&suY4^4A2o_PC@sf3R`?nD<&X3u8|>ial-F%p!)o-ioWFAotZj2-bAF%VBNtjI zsF`}(PD2v@R!KERA-#B5r#O(C5%G7#$1F*CjXch8p6d?H&aekVTA52rTO!%|)4WYH73TyS$$RAT z=`|2I&VHUcBsaA;%HboHe^TluN%!dfPn_Pd4)O;k)aWl2&$w4rQ-n*P?Ikm`+and( zXOyI(XEq&GLR6@wZdz@S)XD9!>UNRU4Od7bB=*g&D*!#tC@%e*;Jy5RnKMP$k+1TvBBqHfZEG?H& zO3s_HO!nwJKP=eG?*$;&3km40j7?#TDfYkD0$vKynzgn>Ah^}+C=3ngEd8Rvdi8gK z*oMn=IKAVR7cydYV@0!N0*_GCAtuVAn$ja74?2!ze?)<)@srXpYS8?UEDWLP&&wNx zyltnekr(W1>RR7?=oN4EsY7u(v43qr(dT1DHcD!xG zlCAE~1*P|6Rvf_z{in{F@84_nXC_*p799-P0{qqyD#hXq7gjtZ3|56aqD=Tw$o2dw zUO=2UD`F}JOLk*dUb^AX7Q5u-!Ga{R#? zw&8G@g_!%L!Yk5I(U2~Z+yA>`@8jJR^d;<{G8*=@A64+L(0sI zZ~LOZ2KT4{7j8WV#vKPCmcX2}s2|qP_))cd+se#Vl7^Owf9fJJ7}$vOI;jC` zL!D$PS z*e%v^q66{Jvgp)fzYD|E=%zNfq@cthf@;Xe1Nk^#0h_^FY~VJuM+SjNht#$o3m*Kk zb2sejq@P{agxYg2ig0+6@=>w9h&B6iM{yJZGN!*v>>6@whO+v0nHXE`Y8YB#?D8t9 zExKr^*+`rS#U~K?dme~hM38{;Xb-!pso!7RBtIu*RfyqZ&MgZ&!DCTWluYVfu$olb z)y|?w4$Z_m!&iB)lWAtys1p6`t$JYvu}HE#89m#|6$a?`wEv^d_n~+*MK>TDqSQl0 z6{1C|-TQXkELTfQyz|c#3BbvNZ-_YHPi*$m)?(B->Fx1 zii?24uQKY?-V>`dL6kn+znY|AgR2IQUJ1btancU87H4=844hQ~8eMaUtNQhrwM44J zt6FeRH{IdhBv+qtvJppcqPINY%{ZI$pyU<{#qq6gi*eCKqTIe;^?H>I>Z46;CO-Jl z_9KC?CMWk)9t~Orq$54|@FXM9C~u0)MG&Bf7>`G&>|MyvmHhriUGizLGi@s`qo;aQ4lgc*>kXk3083dVW(Ry?%p{Za647xENcRXP*Nbn zL!)@`L^!%D7b?b{i0z{zU4hIraU>`}#KOnhdfUq@G_{n`!GR)q2B-^7cTTW>o&$jR zG->DPdYF|tlAaBI%q~YPr}5*n%WC4jd4DeWDQ!tVL)Y^Rj8v$!RMxu8eg2&9UJ(r2 zzBi|g5$?i2m3dI0?T;m_C@lAz#AX~m?K`nKg&aRm3iTZ2E$bvPPDCHW|rgXBP1|j)_m!bl6}V;jvqGxB8WYg>0kpMP&<0)#bN! z7tRiZ9HRhvkN^NFZ+JtN94vKhM&pd^q2z<)pwZxo>9E>NS)W+IL*jdTk~hVDx07k= zo!71Kjrr@L)l}wC02<@3!;vX<6+)^h@!e}SmO{q^8IRe>=J&xs@noWur8c$4y{^HS zTL7_Fp!=Fc&m*bLgz=BMWXmKz8-bgfsSf@Aaf2sEx9?#MP{yE}52anxZAv&m+1}4! zS`Lm}83xUYFQG^nb;L6I`Xrxc*`X%ubJC+0J_EO3B75JP^aCq@y(7f!pSG1`twp?f zvNkm8Dh|dF8ORw&=|%laelmfo?3mal(*T=L zgGVz5$C3Kcd|g8ugm|gHGm^LxJ2BFaRk)ql*lFnSeg-3R7Z?ry?(oC$3q+?na%Q;U zju`fv%f%%45IwK5aq=Rd-{B8`vHcUfYmHPqAIR4BPB_yN)zf(yG8iF*2*09-94|z6ZdqW@8fKNg||HoEklI; zu4xVV+{P$l-IAxg6GLL_-p8Rxp=mG?A2U6TV`tEl@!Tzt^SnX#g`BYsUm}McI2shm zbC>Oz+u8fV|`90>1aY&=*YhX;2_=KQldc z_e5rM%HW;aniXWAX)bxo?F~6VOd_}P0$qd)l1-et)9glaP#P`oFk(%c!W^H*8nB zhR&h8q(QntN~J_XIuwu^x;utu2np$sQV9j=7`j`!hVD+O{qz64?^=6rzOfdI#p1(# z-*a8(c^sGBQfG+myK8xL0nFYb7wWU&@B0SDDRP=7hQPBt@m6)_Bu$7-bn&oFM?4EWYEPle@oe+dW5%W zEX6#X2;LQnH?L+oNrrW>4ytEi^!mx(o@i|#PmXjH{O;O9o|W(5A>K6bj&zjHxF=Nb zt#hCTH$>j1`e~`Jz?mV%G3K&1*|kvC!)a%!C@}?8@k;MU=iw}Qy~{SCqqJWVTCq_@t!l_dp8}-)OVrBfTsOv4+h)Kh6 z&nn&4kixR$Tvu()%Ltedg{T|5x^ZLt8wn5R3UqP|99pP(NKP!G{5t~ivGbDTte5@w zx0&(?_srk)tXG7~Ey=K8+}n=@$J*hTH9EmT*m$MtOTyREdBREWD??DuKITc6Po3@< zygA&fo^qa&{v;JOy}QV4XEikQ7p_qj zGo(xpj!#30R%l-ae56hZk{87$=jnju%La$AQ|gkKzlKO|olpIdns3 z8q%@$Dkb~9FC%LRNf0{#|EyuHSPkFUU3Wh`m$7zbwc^kGyD0F&}!JMgqu|rrXn| z8-`ei$W?sH!EwH{$VmrzG+z+8vI()1c7DScT>-Y#?rS*%*t|Y>CPUppI?FqYwNzU? zM58j^2=}phP&$hy$!AZgr@LqN~lyHp#J~=m2-(S!W zs(b&-gMP@ZI%xFH&?0{EqejH(L^6CZnb=N`cQ>x^IX0p--4g$r9V-V54>DT_S)4P( z7tt72vL7OCzT2c3ovD`}r9C~KE3^}>vql|p;)(+nu3!O}h$0tT9G=3#qgs7cAV}QJ zhHWcP&X4CTT3epcJ92;HW0cXHpxNygcTvAJ5MH)86aZ1ImX0M(ZW}QU1-3cBX8RGuXTUPbJ z2LvAf`kbaTR`d?~2~63a3e|j^C>(y6IjqO(?4A|+FK~F(%k3t2Wr280F4{#5?#*hd zBMJ>UQ_5$F*>oeLNb6R5FFh3^R1dcb3AFUHxkEaxEi4#e!B?5HJ~Wh@JP9>Q#0NjV zce}el`%6I4X-07fnxUR!2tjtt3nkXd6bM=Fio7+hAyh{tyMl#sTB112P>qYN)8L|V z3>&<(WNvATq3rKS!rqF`G~BDMXi6e*@jZB8Bg1?*T-SX8p_CgCc{olxc;?foeqe3e z2Oai*DMKotU!P}CDD5?Eda?fp?d}t)V!#>Cm;vM4@oBG=S$=64HkixE#oRde__W5< zbn$Qk9S5g4B=}L(z^Bl9zxCtYMQ49>@Xt3{lQX#Bu;pHh%h-7KL<#QL5#g$;n&3if z`k#8o@uzILOz@_QV>-)+tP1we61a=h_GTZPWTUA`$GqmHsYwH0G>itK3+T5uZ6Y@l z>+L-7T0392%j%pmm70a;9oelhgnq^1u5MJFTcrslkP%%5oG*eeb?AOYDBS61tqULVGk__?&0C zF(yXDDPONmT4mEZtS#X=rAS%A+q8<+vur@k>P4@B9v@!Oqj3!hg0F@g%(U~iq_kx+3eIyxib_lgs zk#akuR!imV?|F?(n6i=49s=N^KuTJ?kF4JH@X748@t9EtX}v4^j1!06<0^5B=i6p^ zbv@U#Vo^Y|527Di_l8Tt{U}Tx?L5yUv=QihPzs0fm^RUd<7|e1yD{Xz9iB)A(tzHA z5FR9v5FA}TOhT(t?OK89m-g~Q3cwb7_NL5-sFV>!CMx#t-tR^oq@cz(nn6J!^Ti$L z$T-YCw3*PC+B0RmwPpTO&VTq--83>ff%ba~h1HVbk>|z@KxLMuoO9U-L)o-~xN9d# zFLchynI!vc-jC(Wu@9s%R-&C*VXhm2ikiL83e585*@30sm+9xBIW%^8`r}#D^J*GE ze37yz{B?l?+eklOjiz5PE9XIBG0xg$}N56T^e5|sN0MEWjM zbE%Zd{!De3M`dJ>CFB-+owPP5yPvZb(Dy|Q6BxR$hwZ<$9+GdI$~j0}wXIQV6k1Lf zazJ;K^oo5)CCt$5h2@+;rCF*Oz-9ECXy!FPwd zA!=omL~RID#?({DX&jX1xYXNH;v||f`(t*SLi*$P`X}5IKJVzSf)V~{NOg=K&Mq-X z)?W8lp4ey*E-t;p5>bEMdtP!)fj1!be5+FbXP4yTo1Kw3V*OJ~UoMJ7404gr?a3(J z6nv68L<+q}9KjOM#?{^oOBgGC_RXWw>hqB_SDwhxV??n+u%8%Yb(TZY|NJ>yR^Zu| zR8F)1sOqk&#`5Dx|E{Xbom5VXZ^Cxlef&Z~j>UbEDkiQvnkO)0b4&lX9%5ra`MeQ< zO_$0`3%n+AcR0PH+l<$a=jsgei0RnI15|+tVvqYK5crLWkKn$%X;XPcVyP!(ofU{j0Su`=TI5>K!i+&#KhpQtT65=`@+hvP={u~W zR5HGI)FJ1iy!0M{5*yVsaPbR6>W6nUGS2>_u;5t!&Bgp*IAJ{8;lqMZ5O3bMBd)E2 zLQ!>gw|EP%Hd*6~8KU?^orh51M_Z+Q9tj0t!8NZlEFu?M@cDU{E#MPh+0$h(Bp110 z((O0^FFfeEC*A5E;4Y;QL1&P&h4Fl*6L&v~1je?Af$XLonJSrPDeBog4&s{mj)e_W z5fKrcAG)L^*TY>)I|B7hg?zL}N&TjDhaAzqO#_yQn=_jkb|xkK(wJA)*XwDXGS3-a zVREtOze;gH#;df@Sc4}zX5HLQUoqBmE5d?TySsmU<}X!#cXLx51Z~Q36#!c1*npu1 z{&j)B{`Le+^%Ro^K<#}r1&m*?g^rsA!P#dxilR%#X>-sGNqAB)3fW$FJg!>%jc;t zJVf^e%@zH_%Wq%GVA7va0uxXPr;gJR$VjMXMrJVjm#QgP6n)I2DS~n;7c2=VAwV_l zwptGv{D5WluIxQhuvHXSG8!sqkxindaO@erp0Pi;;iQZh-W1r z=rp;6-tf0(Jyo`-QF>bXiV!b{GB#UUvAafS>2*+UF8TYKPaIoLAfRE}%;K5b+@*PX zmq4EhUyaXuhW|Y$1s}hl6O3KTkfg&KL50zXIDMGBxtuZWy4NwwL#Cn-i1fa@x_nE$ zT>GrEkxaglY`5A&O-^#rI0S*bX$8w6>^?a$QvhIuG`HvEVawfE(yZ9GR>KV>uh$Gx zo-3n&Uui}w;Wh4z!qJ25t-Z@45qI4c2UNL3%M_j#x$F0}5(h8c_SW2u8olv7b6bf< zE1?upj^DjJZaX_w035kL>u!I$7cl|%8 zeK9W$kL^2k1-}t&Dk<)xHxv{P-X6DWvSvH|HO1{^X1FaLtGBKPj*e zg~9UKCQwn^jj_@cqg**Op0Ri@|Fk5h+GEdfE@ZtV%v#3(Fi6&0u=)H3ciS+*#OyA| ze`l^lWZvB-;SXUZ1R&C?KQ1=xd-63Hz|+>+lL4H*D8E>>r|g1<17v?ze{sPe%#~j= zlG%spFQS4`v?U+=Z`~-AtX5&X?4>ly@4BnUh{P|C<#V0K$ zF-06IVcw;#alteSEBj@_IFG}Hj)h4qTE|onc@g1z+|P=@0#PSPH4?Omo=;g@Zh3x1 z<8{Bm(TVm)ztRU2rZbxtg6^LEcU)ZVSqO4XY|6eA zxOk<8%XBMsgHevzndTi`&XKW;QQ2BeMFpPb3s)*b8G=-kJ=Z;bNZgu?k|J%+PE!lj ziMb3Y+@HHfFP4hm9L9lym8@QGcQp_T6uBxu-lHH-deOh*G`%T4dC6(2fr{b9B-Bm} zMs9|QWlOlAQo%UJPz>ZB5}96o+8EBD^>!^%nAY^P!UC}C@>>@pDrwpwFR)1M5vRdy zp%c~)vlsGN^RO-m^-AY zX%KPL(Cu}%7nM~ak4m{=^m))U&^vB_+tZ>yC1PhmT&mTMIx?!|*XqGvK1nIrsJyRi zDDa5chj-4OMy=FM4!71oXC1H{&{`Jmw92}*tk|h!xmF=|InJL_1GGQodU6kc-A^aa z-qoM)Z~*#{IFlA%=iK)%zFF>^AOQI?5pdi^CR!>n3HhrbG)0ZAOM+ z^JPD}ofzn*^t0{}NTq&SKwpjAZTEZLFRXCKT!WpqjsF$fl28OT%1RX!m>$~X?oBAK zGGOMxc$LLFeB#L$R*(_aa{(aCB%EVm+V~WfCFy3Pr3{_47{X7`_&*Q1!1DiPvVn@j ziq?Ne8*t$KPk?u^Ni0*>dw*YsunUkem}M~5H0RpQ10o8+poI6pbmxq(N-gHpSUNim zF-qT=!)S7!OTJJ;+T|gWRh~|(g!4R%#3s6_#qJZZ&z_!vCBwB%pC$8}J^&ps!`yp{ zX60Z^-WhXyG1FPXd+m8{>bLnl7u;Uw&~>&c89cD#P{asugvKuA`(BbYexZ|%5Ru3m z%q43ST9Zy_MKc~^*ctGSk+ulXHNKxw(7ea8x_KBki7iW|RsT5ib^zHUpnL53n(&Z9 zaI29CU2BRmJ)w7ch?eD+STpIvEU_#*k`{<@R(CQ|KAKAaCPwW`!^qOC5&;sK@>%JN z*7oBl~ z$|qODuJ>2_63u}?C@>gmy4(U^Pmig0gMfIPIJkR?G*w@U-kvYfnAbNJ@@%Oe2M=ZZ zl0V)WIGrZvG44j6`gTo=P(Q#K>DM&!!#~>SZ$~6`T>^mALLiU#TFF|tXM$=whZfJ~ z@(tCMwx~0ryk66F_qq47pQjD)Yr!C_Jtj!~{ysE5TY|wq zk1n<%6+}22gFq=;1_8N1xNr-8CUGF>zgmBeA4rKB`oS>Rux@l}dRX3QaGyeQCQ~INsEi_7shj2Q>;b zPBxx8196ZSni=yMmQ5gs?p*0bF;?Z{2s(aGFq56-1_eZ@R&KP)dV%wuL-td>ZvR>E|hT-8N^B25g zrGBp)#(;tZ7{ohHt=cGD1HFyJ`S1X~VQ}U*oZL42ZO_Dl(aj@!IM!~zU>|$H^9He9 z*!(C8F{=jI%r3vj(Gv9MhiEz8zx7S}1ponJmiMS7lRts)(}8|i(KQqbms@lKE<#Ek z+vVn4FHc{oFKBa7E2c^$GyxR6Dci-^w#nc8#DE$-@JNe1Cl8$Aj9DoPymXrC{omqe zBM9WZzXNFrSHD-9fx})xsV0+ClYuDO#R0j@(Ws^S4iTpm^^|n#T82^ePtkaa!Fxb5 z_75x(pA0et^SV3{3#S5`!m`Jsdt97W?6g*|a$t zH8UCTq5DI#UlsV(d-RYbZ3AdcH^Q`XZ3q@?u|U-NM`?BO{M@UmQX;y^u)TwUyvMlV z3VuqwM;8t{c9PeFqlh=fjve~5>;*hBS*g6v{1Ua#SYZs&*a>)3^x%3y2*ke6rFOC> z#g1@0yR6KUDc#c+L%tv%ba$u)e#sl}V3le-1Qui$u-EsCEy|unYRQyJcxj3a7#H`f zFE;f7aWjUxX>;^!+Oa6>ec?1Qb&MhGy1F;;iosU9QK)p$PWu2l#{=f z7eotK)i-=&NFAXGI}me~tMrspvBBJWsG%0I%t5RTW7Io8VO`Nmu}Fb+`hcTs(R|ep z|hr`X^fIccai?g$TyLS(80pVA?=r6t}Tv%x)NlgN4*V2klapn4L-p^@!qXMNcS751e9hoh`oCkn1C3lQ!3FJQVc5O`iMH+>V6~A^21352bNe?|OCQP-)(x z(QRqUefCk;cxf5}Qc#YQ%aNQz?3J$Xn-S#BtbW8Nx5n^_S#hIT(CPf1_@~N$(B)vh zmOS&feP`|X2E$~ewBJxd2 z3!Sa=sa4AwU7x!B1_&X5B4A56z_>Q+J3*{9hr(n`JuYbYWH090SHD?qR{+R4s!k+i ztE|vq7irB|Ui<-#HP*c@|6v$heM*e!CAO20!#H-DQ$Mi$+I3xrzm268K}xw;>>o!W z<<#v;bm)XQ=^1pRltrf7g?Iay8_k;#zbX-d&$B2%_D+r|kEKoL|IBs}wwW4M|S-ma?jeU2$+hbtL3(gr8ObH#J#c_Kvx@C1E z8?|Kx`+Mo-YsL8NgC4=;acGg|L1y3(jH}G4zG$%f{HjX<78!iTgt;c>4*u?VMQ?5$)>6eo^nq@>%>C*E1PnipE9(*$$u28%qGn?+)(UgW!RbHMCrNYi3BSQuJ&qe@;jJOpw|orsmEzs z`c=k?))w=1hD#(0uyrnFo7Y!2VFi2I1Id@Y{H;$10x)@zE}B92djvq=*0%tLY46jmFx*BpjRtQ`>p4r zFf-0L)nUqF#`46r$Z|IK?8%!$+O_$T#iS;%q4$!dM*!6}Bjv*y9YjYQmB`xP ziN~6vhd(TT%FI)3vdu!V#dfGw_Poosdwd>|l{K=u`l{CxMV#>JMR!G?!c6==0xa5; zWcb1$@sh-g_AIQps({Pa_H#dxGKGJTJ|)hE&?IJ7`7fX=9xldaO9-1!&WoiB?Mb9? zr9yFc(De*kJ=|J0-I)tpW9m%>^8yq8rb`q{e#9LLnG5}CIZ}0?FDigh9GHtE6I&i* zTiDhOYkf0bXDxw>f##fp=~;*a@?qnT5RA2;4$Y)myztT5#`bJM@%`F|x_q$|?H-}> zQ=MnGiR{%8TdQekD24KY6N&4HEJFjPMSZ02;7cURvt=eN9s=IN*Vs8P-ueLJKTH&K z+>d$xU^Q2H`FF$YM+&CNg7Oo0&a@c3$@QLMiDKT|qN+}eo_1JdeVOnLo;~CGsSiVj;pqS;6@~Kmc8Ht-jEHon7=<(u;i(t1$j^xkQ z)zjx3@kX#=6p;hv5)y$j>I!O#xUJz#_@6)Fqrol$Fet|6ht)CFwfnb`+oV5APTXWO z1Q7q?!4)!IVI@v0mMi1LrCNnVp_nqf7(%x1a~V1hp$Q+<(XXr^ub+WMjfmtTKG{Ak z!5BUYyRFR?o|6QYn6OPewgE6m)qm;huB&g-;zi_bGT-CGi}F^k=&;f*249~V{w%;_ zt#;VtY^_9!Qb2#F5wXw5m~dfVb@qC;7>I5Iq?IR~|36e!l|Nmh-=BLJH^rZkj>wNcn9*1cchi1RX_uQz7}im}c91 zGNJFOSls&`s-laaCrXMK8KMuA6cc*aK2f^qJJ20FPJ}_3K9wU5%5I0@Xzk1HKxs&FimDrMP{xkHMRFGc5i%cSDrZ&Oi)=ED9OCI z;1L+FjS&og<)R$gNXlQOM|^QKLE+z2r#M>ihCff^`Nh#R^-`-H*R-K!SKbwc%$mf- z{y0%MP9H?|UzxHe>ipvvu@yuq|9+0o&d=_^_&r+F_EyJo_-(bTx})Oga14#>nb|@@ zc$KAz>Oqz%HKEM3;<7!*>fUQj*$_Hp%p-K{?v1Yey2T4ezMbrsEuyCA*udjE7!O;Y ze%w#%h_EpRH_UVFTHT7oQ=yz62MTc-RFWE0afnNErJUvXeL_{p~Si0OL>H zr(yF9(Not0*NEtU*I=ir5e^0kmo|xnho&&AVrw;4L zJ7dfkt#*{r$CSlN2_MVGTMV9wzfg-2c1Ip7*QLC&*qIU~F#dvSVRWrYZET_`ITL;U zD~L!&W{y0*7lU){pcShW$Ve<2Wp`VNqmz4Y#2Xq5C%Ea2W+eBMp+<_3QSO7XvSXYm(Bib*aQpzI6fI_xc1rRhIzTW#k0cP%k+W84vd~=XJpwIt3^pwdtb*ZDx&L^=k7fS@oL+1) zbW(BsaO8c84^*6HkaC`tY(4B9Xi}*;C4Fl9)gNxY{Z8icN$EcZY7#XJv2?IpdT7fM z0P(l^z7o>%NBaSOvPUwHzCHcTUphbX#jFkoca{u=!T`G52Pl)U{KXv(5ChxJ)&$TE zHf`X~eg|f@Ho+r@JZxZr*ERyE`2(4afkB`{#&P-<-ltM^YJsemPuiPidFvSp=vpfr zzMT5+Kge~XZx8^VBKH5`J7Txt-x{ZWZu=R!IU;^<- z1=gC`+t)}$r;R|=w4<;7wLe#umfQ4Fn16s&Ttx$o48r2$VIVB&+zc*zf{71eCQ+?US9LGRpfXp^BMZ1C0jgH^f)D3Wxx=6J>xe+7mihqt7KMdQiFz;!&2xxlyK4CkysmT&3-lFy1StB&xx#5we9`#)xy4g#* zky+zA^?X+kU$y<*=gP$2N57Q?RJS`=2(9QtMcM3x6B#D49q~xc7tv`QJ@`ZoI(MuX zq(~Jdx?h&)?^F~djL#8~tY^z7S22vKK;)3o1@I;^`%?TG0v^Qcz08O#u2WzTb8@+e z0$?%y_v&Xle+|XF@G!LJ1(tx7?2?+CjSe^J$`q~~+o@-jWoOOK7&}et54yG{aJ9!GX6Irc7MAux$tcwU#j+E2__OV+slZA|$3|xl%1nwz~`k!%C5dVnT zXQ(UV4#-aR880pouV!|_5QzA;3_>MYLxf;c*=rVleDQsu2JPC?f`S=VZ9)n@?oZcH z3ivZtsfPB9(})iPd*f?f1@UWo;})OKcbb{=>Q!>2wS;+^Y30yRY-*h^lvb7G z`2@|^q7e)Ba zZHa6|1MsJYKTULvt~pKgHCq_j?fB5B7D<8sHyW@C2gx7z?rIv{4qukQf|=*h(N#)U z6W>7haooJ5WTE!I2aZGWS+01O`|JaOPV+xK!T)P8;N$&tz@>|88~G{pI_k+gVD6t2 z%J1`LG9qbuv~#sa*P>vdz$f7c)`GC&s{QCZJLBV9R$Lez#l9X$-uRU6P4-vbFPHB_ zFeb(GL%uCOI_g+;R1>`;$+_YUB}rZD&HgM>{+j~&ZLn@_^PVGJcQ(OToBJQbFp1(h z2MqCc`yu#|r;o2u&0&Z8`)a1OR8I_`G}52dQ_k#?#2@-&&bC)H-3tx@Kol=y?fD41 zwd;G^YR{3Z(#JkBec9^6CGS2-B@l=_FTKNU=H^;WHNUd<7WCVNsA@C{_ue$i^*KVq zlE0#HarIZNLe`i$9n`gGzxHKUSZX zXva0eL8&KyKVtA8JdN%)N%3+`;+(LXVtjD)t!aYZtSQUhS1(&$hcN>6FNM^`TG;eF z@^7>r`aOTY+;3^cd0y`|>ObrUHPo3PhQ5N?)v>~U2(B&^p50ea?}y6TIWKNyN)Kit z?4Tervec?-*C76P=sJ7+GEJQmx&K!y}AE)~%8 zJ!kUv4Uoinm3OEY^PkUCHd?MNzo~K}y2R=`sXn{=rBZ|cJI+^^l?O-PJ56!>W5bOT z6u6B5UCDIA|GYnYSoAoh?b{5^25p0jqXmpkr8q_Cu{gaXmkc1B?s)4I zJQaXW(w9cFIrv#NKcoTHv(ksI@d6)34kIZcvE!$xOJqh!I5wltIX*yF6mP?NgRUl^ zFFmi2$3UHU{;Dvrx5H+MUgFD4e$ zlRQ_C%H=R3x;zi+U&75nKa+)-fJo?8dKZXyLqlL3Z`uEOQid{+6ItHE^oz+Cg8R7k zN^?^96~qmc9l*$m3_{#9<4Ghb(k#ud@iZ0KRZ9t;uKXo!s+2ZAeXjQLM?G3@8U^%F zpNo93U_(eK;OqVqjld>M^wJBb-c(Se4Jw?~1>r1MP99Z1}x&}g9HmwTdQXYQHHEmWEg5@=xH(ZGS1bfQGvh1J;G zH7mX66chrpQEkq6Sypp%{dgnsR}hz~P-2G|cb~$XGhxjeT5<-HXor?>#EX~ee2oBt zmolc;?H#>B4p+KBGgbk)p6taUb!1K&hQ!D1uH{?rDo=Bh1H%-2iGZQ-zPW~~PufTu z!{yNBxum%Lk%|fkslX1+s$7HMBK0ck(T6h|z8xB{B5VfP-x?LHqc2-O0w#$reIkNIYA5Sl1uSgMaN|J$CS@5>9+ zxl-vE{b=`3h0==&b%MY}W?x{c3tU}aIyt{u@sCm7+9xc35(~+ald$Kx5H9~d1ad_M;Wxv60zfzk3 z=rS4~o{_9Mj3!zFlRO66wp-j@UL&O@Jcq=N!SFU>d{6%4Zb8_V^rqE~^N3Ld=srtQ z0>yp6tz(Pgc2S4H!R0eA3OFFR;%yMc3|S+GCy}iN`v0EO4Gbu|`tQK=JIOG)okO$i zi&Qd)uV4C{EiiV*_@Q{V#%@)Fm%<+6sKt}{cOv4Frs?_N%cmoLO_hEtp6|5AF~l0mf0=|^!|NRe$7KBlT@xuBY)*ZrUlR|lUL zST3B_H@vrJLlW@YYnGW>K>^3-d&7{($dK5z41GX;(pL46NZm0VT7Jr`mTD1L&Oj@k zHRZaf8R?4eYu`XrKaqR{&Q7)r%CTkPX!w-68!oXtkls&aSRB?isywrqR{B?eYH}60 zU%0H3i`f3A+22W|3zw?WMMB=zo%+~khRDH>+opq$qvpx}fx;MC59dGg_c_`nJ_A(+ zNI-eSx&tQ;V=UVLOzvcLDqZx4UG>VWC7#@kin^GwpEX2PXT7qVUAq4HnD$_kID$>q zBc5Iy=J{9fK?;W0pO`@dKPo-E?33Nx#&Ok@`0=1D8;V9fF#|vN#p`V6l77)8cy6W1 zpdbPu-HrelY%&VFj`kJT?k)GKLdgi?s*s#IBrHi9Aiu@}I5#NtiB3H^bzAGLMm zVn?uL37`3d6$wvzChj@OM0jT=WWr$nHxxQfiiBj#@4KbHI6ITmSqQPeUNZNpXNwK) zjO!!P7x{&X?yvXE*l=66q&Q=&%o(#$2ur?KDfnL3O*#K)7=?fRj!X3CcY>pr;m$nh z*q`03l?fL~7eos7Etl5dm^i#VmW{q&2#AP6!UuKN{yy{qt(9|x>w%aH5u!U9Uh277 zhv>&VC}Y0-dh_>Ut8V!ZApj%oDLqZD3fRZXKh!6!27eQAgg0_8RJ(MtavA=j1&rWb z(e6~$fE)^W!zPZ^OdF zPZt*498|2VSUTOjyhO|OD&v9KwPjB%c(%cnO~w>hUe2II^?YqhHkK%zXu-u zs~T9px*M@MyWFj+$x;6F|MOR};@ZV#;|wr-QpY>E=NI`s)EBkW&;S-t93G65!Z|Yo zWUaFo3UVYP2-bK9?jss&(WZKM_dEM0F+okfy~BKwdb!G(7jsik$jP;-nDGMlMT`Msa(p9$aPR(wr;`YH8 zK8)Pjs&p5^-M7&jl+Ck3!)EPHcMz5@dHLcNtoOx4`?SqYyn zj7}g)%OIf@v8*)Qd;bfY@p2ZPl_Bw2MI;i6&*`!6z#9hFX3cbFeqLkuzGR8#9yF36>Dw|) zSDU<9c>y!QOg7Ws`G0=E>)>+^G;MLsbrqEKzmv#`+_cP})oVNP<0LeBmb2DW5HpLWbikpEmh=I)t6O0mSOxX^_0zrcxtm&TivP_u&Sc~wG7hyQJh{2jf6|sv z!Wd+LW7(mSFW%CYc$Vm?ciAB5Wpztn)>jD+gNZI=MO4&o*@>h7`=w4IS0#Z&szpf9 zb!BpXCv%)ZqYt?pc<^pnZgb7qzRSuGw6^fv9vW%R^%h^ioE4u=Z%@d6fH#7l}?M%N|S2J;4>chajpK>9`NC%;&Db zE=2;0ZRh&a`0IUwvbh4-jr4H5){iA1cq9k})vPlk2;n?{cNI$|hBnLpl#R$odbhgu z0u4pt=q2gbqcm9lHfarq&A^pioOW%+w_3aDKnwv;@0=ONPH|u*Wl=K5TOa?nna-8* z(GbwMvUt0aA^Lf-M7|ntZ2dNLOemMrDCsqok~i`=3Kas&e-s)JS@i|n(g1CW(a}ot$;gi~#Dk_3M;lJ%xpum7>08wL5IH46R}VkhUBHiQ zhJYomXxoRIPQ6Z#h)tT=n3k2h*uGlyN0UN$v-JAr@<@PTOoy%yjzO6aBH!YDtz-B? z$rb}kxj+&Vav}*Wdk{J+GVW>b0AgprY>4hKhQFnSuQ`S)!rcW9ix1~3Qjm*1-i>un zmU4Es151Kfj?ox)1;dTiM2~u>D}(m){rTM|2sVcIyRKAk$x;@BS_2l;7d6z@o$MzU z=1X`?6d;&#==`U@%yw#P8F|rBX6N+VCl*PNf`h4P7o%Ub|M11CC!w2}2R=U+(?7Ym zP>iP*yJ;cr&M%?z#lXN26&FAIGT-g3HvPtbu!?`WM1$^N?iU7-p!I8Fp2vtXi@+qe zdD5BWAFqz~dAtWt%$`Q)fM|1G)&p71XGj8k&ZYEITdeaTv(0G9Vohy%AE+hMu^+Hl zHA`7ci1k-jsQjV!^V+05{SzeJF{JRR#5lsna)Eg6=RF&tg@b<15Oe-46H{!$Z~lb8 ze~L0rll3N&e$^~5#e#y#Hu}vzq6-R&B`{n|Ruwga?7bV=P=X`e`e6KT@`8yX zCk@YqC4~}5*?Xa@{boZ~`N(9ttl#nF2o>Cp#;NdgTNT~>7%kS4Au{~9{P;-(cRN^X zxsuzrL`TxSndVJl#yMF>OQfI-EdxdoJXTbt!{?6&*DzNNbUg6v3wb~s8X%<8_nsLD zL6KkyU?$Or>J%}4K1ltpw0Zmocvwr9AT-lLcJmztyN*6Qu&xV$PkzZq$naXkCa9*S z^;?Y%&R}8Wj<-Z%3-noyeJt1%81$Ki*uD6~Av8c-l<0&IRgY+Xu}Pgndqj&cI8d?(U(W&h_>R+~o*TR02K!;-QFWbH!iK+G+L zYL=sUpbRGsDBxJqN=TysoheOx4>g85IRvOF-Z!nUSu))yeicwb9sR| z<=#-p2dE4l@AIfbSHG%&XtwD$ZoNkh(xSEbAPam{NCMixzN{GoqF#n}(oO%_5w%@N zOJ+~r$KgH6BHZxs>gwM?zhVTZ?U#EJ&OQ8yG#-Z-6d-&gx~Wy~2H>5ukoLU672!H9 zPOsNDLC*reulx*E2pg_| zP@+Ij8!hx5;U9;;IBTH!`ugG#U{Y_4WM^t@4`n24Z1*R#88^6WuD#$UzI&UQn@gvZ zKszi&)t4z324W5Y>wN1(N8*vxfHIEe;D~{H-edt1)fTglMcs&?@G@a21{sM!RI%7= zf(4tL`40zmnr{RRi1f`?l36yJ&1!ex^dT6ni&;tBnFV2WRK*FOLe}ldofE=;QN23- zyRkX}SSYBEtcBF%U z@|(khp+7oOLc6oB$ZRHCxv9vbRJ^Xx6LMO&s(^-WUtzBaTsri{U9+ys#lbS#3{x?} zS@8|?TWL}}aM%}Lwro(xLm`7`-3!b+^0c0w-R>&$atx2rbETW|iTc`w+&I_iv}b4> zNz)7(k+RInx;-s|mVEy66dp&LYcn_lz4Tr$cU=uKZS&oL5=wSkq-CNOfGuNM%yPvU z#8MiwwsLXpkNb)6M_bJcX#*T z?(QM;<(%$+^_uC6x!|I>sH(N<+xwNrn3h@7L8BY_#_(LeZM<0hcb4%-dvf`-Rtb;C z@aN>jao2n+Q;8pc+_z}?PQZYTE*zl?8bHt4?Jf-Gv~ON61U{{;(rTYV;^8r_6hc6H zb5>A2%Wlj0tr%Cb^=j3=zTTuse}->o^)>g=Z z3rU!UsFp(jn2nJre+0fec~V4K4Y9jc!G!B<`jUQDYvTu(`Jq+l*cj zN~e_!J0(Eo@(s|K9G(gY+#Jr$e*9=t61U)xe#4>QiJfiIGsnoV^&YO7ltq0>kpCI| z@GC0+53Ikt;061&kdbde>SMiNzvugbJ^kt?KXK?@IkfQh86*#jq5L(Fh(%(><$hH? zxQvB$I#&|b0LeHiWN1KMzz9E14UUSDCGbF7ewVj942lee@l77;oD?0<)duH7$^t0J z$T1{(IFFSOlmhtFs=CQB)aLq1{sd2V8tXXX7J0pTpinO{DQ_Mh_eeqmc}l^j?Laf| zeC-Yw9wI^6XyP~4)ctM!l#U%C^c$o7lBe|58!XIgmG_|IIW*P_$9G~sr*)qYVo&ld zk2Ul2acACVv0ppQY`{Uk#9EcH#$f!%ffg#v0+Bs?^5?33Oo>a)czvQOhwn()h$2_qfFUy`6f7btm<&{h9=QTH)n(gE zDNbI_!1J$KOt1@Wlr8y18l=J^5I1w4m_r=fpDC}F^|SeD*aTyazz=L*mm#7ug&k&J zSe0wTd;1OoHeFWqX{s6q)iy3I+y3;EN2qzndMl;$_U0oAlX>J6;7WaWxh$+Rn=SM; z*sp1nIB6(vDnjpu*URCtDFvFh_JriqC6@8ceQmf=d^Op%l5Y9v;s^_Ld>JPiJb}$@ zv~FL6LGl8Z(SZZbZo9~9c4vmXV>xd^O=_DK60)2#2(0jd+Xa=9lG_p^G7{#`pXQh* zwB8DMF5_QgvsSu0?UA$9dLRdhlqI=z5Cn7*P<-zMNbqbNFeT0jH&8^x0@@Si0%wH) zMxZZfm5-N<|4)}xV$o>L#S#$bk2e(GP)Y<^zBAr%qB{@JZ)fWCU3iMHHD3vHXKHYL z@hO8HDM2F4ZR*|Ku+SKyYSGPX|1QVS)BtR*wj50YZ$|oH6~mC5Ob}vKbzOW?-sjef z;o&Nr(e_BPkxg|+v;9m^>%Mtf5x*NpRpAW1zwP1EgYUA#vTFYye541?8IZuVqysF>9Ej zKJJ5e!Vk`Z&**yfHj$a=7R8Hurt-E6Wzka+Nlgy|;2nAusg5-d^|X^b&3-5nL9A}+ z)aWb$GT`Tv9L^8rk7v9WgdhZgWY=;p4mSfSgI_jfckM-Di^D^zYP@{M$cO1+ykV@r zNT*BDV@Y^@1{7g&se7|`bdJv_;8sQ zDtcE`^s7GYd@3_&#A04_>bvGWsrtM}#G>DxVndozrW?~gs$KI155M}$+m8a>rq6=- zH8v=Q+_tY?Uf#{!Jz8Ihf4s|$M+a-oS};@^hEw!PiYUv=KcM82Ag)o*0~h z+A_YS(|fYIGuDkP;ATQX^$;W3cU~Q_Bux}-PON7(+a`N??fmJ5+w=fa zlGD6F6h}8L!==kaH6Ehkc7cGWOi_swgo=C3^ot($!8snaOVZR5j@jc)e|S$MIyETE zYIj;Xjs@OQL!*BWGpzq#vXn-nfgNJPFu~|hB8L14*!g>|xxp34jAD4;A zY#ERG$DpFog80Hl>Hu2e zd@p4!El{&VRms@0;5^BQC*!O|gfwa`8iZPgQSU|}xk$Sp8!y={ty@ANo#L!OWs!TG z4-Jcl%=IevE(jDvGem(`B2U};F3I%C=k}LG*nwTCT?iwWaYV|O76l&`63^^#2ntoPF zhjClKzNe6uZTcAmp`TyjRRVg)*-4aCT*1|xtdkZ7p3_7ogBc|jYwO{KMTp_}_a%}C z63!ekN+DLF(HFdMEa8XG2H{oyL=?RT7)@m45UhH)T10X1=igx_7%v3ve+99Uex+5r z4dHe(=U80pMkpBuU*o!4Y_sjQ~9@1OQ7g|AedH9;k~Lg0E#n9ZXJ(A(Zrd{lQu{#Uc_|7!mEj3 zS9VJ3iF7K!MEtxOc%GOYhsq3#grW%8qdNY)Y+j!cu66uH0tlUZVan5+^fUok zAzjRLm4+t9NZp`zVj9g zEJbMGOVmPXCV$8bNjO8=kPnF@ym9pEth>9Rx}i|qX}-__kqpHW91w}<%1U;{RJL(o z`NGHsAk+16aTpiUe#k;o&vm3Q_%thySKIx~c~{qaqa-})jtD|zrN}(RKHNyixj9>} zp#$A)@RHf zngr|gl{*27OP1qkh^U>(_$i$LaYrQSd#c1FGODLxYVD*0ct$cSsRNVwQ&ooU4ubdZ zDOs?=e;5&Ap%L=<%vbr$I+KthWV$5CKtlFqn7WvKqJ%@lQgCRlBh4lwlL6<`UABO{ za!LX-&Q=alSgTAE?@Y*DauhJ=XfY(NNGaDZP;0bZB{~zTlU}`7E_2+d4o+Xm_oLVL zJRWM8My@}ZH}7m_CijHH4RKcZw3Y<14YI{$i)@hdCLan0hUHnS@on=U&|Q#cASM6X z>I&0zmA@g$8Ykj|8k)q+Fq1sW%}yW$TLRUDQvT8!^PR+&7Uqm9{I52G;@{+IRLm4l z2A=o7C*M_OXT{Tdl4a9mCr;h`yz<@XsSh?mG}JlN4Y5Nt)Zyxa@n-zlSZfy#MW?k$ zA>?m+Pz70G0P_P*7(KL>`oN*^NT3J?HY~uLr#b96ZK3-{_J<2#3&ufGvoYC9u4dfi zv3qF~s*UwyzYq^U<_H?hd@V;arA_J{DiTNk?SuSn5~4R82>O;$n>2en2;zE4=rBu^5;~T%2z{q%ZH1~zul{pz-RBJvizm7 zpqLEJpC@^O4;Du%w$N*;Wx~4kw7&2-ElbM?H`Lq+qws6e$_kqEE87Sl;Tk(?z_(n6 z?MU(eP^Y;;dxNiroT6Hse?b}J20_B z-^crZVL&1N)kAIhtpQJQGRE|e%usF~#&8!rD|!)fGr{(!d^m4D!Z4H5e6{cQ0e{`N z=yXgEupSfz!k5&L(>_eTeLWi~V>Wvw<-EFO9;qxbstiF{Nx>Bn^6m}fq4>h0+|N50V4DBf9X7FIM zyX0J6KqE3ZtdB$d{CE6kDJXO}G65|l3<=F9@dpEWf&Fl~!BNUL3t|HiA!xTxAUSn) zsN~Zd-BCtRbizn6Q^-3P54MmG#0{6e*toNAMrK5+H9Kf1=$q?=B(l2TOLsh1E-3w) zI~Mf<#dl*LtB_jJNw$$I8_$;GNMF#+T5Z3aI2IbdcnK7st$LdLSvb>ebU@5l?=SQ; z`JHmMb_1z%yzwae-G=8zz$%;7QlIzpQUJd+WO9EcKB-#oTT_|{n1R06s9{46Iqt(c zY7l=QfbU$JP{4}QS`-=}Cr_=8jxzstgGiC#F=<8kFsKXv9>bBpe0Vru(r;jafq~&t zL4=3Dva!woIk~>R?(28$h}p}MfW(KHnm(l1SctdJeLhPuLGJ`0CErgA4}z`@50DJg;2HY<|w4QbU^k*T~VN9m@q zsz(B^{YJ^v8645&Dxmz)(?E5kz(ht*OU20uRybWEt2I|P*)X5W^IobdCVo+-ZK4kj zEok2C?vg?78fNYpnTaQ@MFDYYkl_H2$5d`QFmT$7U|C~c^CI2gHVmyOULI09fk$Q~ zp2QhWH9Oio4hP>*AIMP$w{SEBx{hJ<23#CByDXS86!NJHqSu zeWT;$07KKIYi9*}->NHR^F?i&zV>XuA`Pe$D)t}w(Oj$swug@fyj-~m)u={-dMJ^N zP$fmab0cDu0dPu)EYoN&b3tZBc=$p1_E5$5!?`?O6x^Z7MimJeqy(8oG-xuw3M*Sp za(==Vnh;Y4Q?y8nL-KU;1!zh%iUU`p8_VDQ;O<@I%+2BArVCz<8MdNp^V1Zq%Dfm@`eL^p5_zns5mM(&7-2fP*2R6Z!x?B zf*1AJ(AUj7$o25VeD*u|rk&`AwxsaToqO&ttEjanr97WhZ?7I4MeaX~l+u&Thnq~{ z$|(eUMC;oQogjtD3yBlpS||R( z1-?~OlY69hA^#z^Ge+gn+cRNvwq{tB{abP^z#Z?s5F%yV8s?V)z9Hj0;X)(-?_1DU zZ@4Rai;%GjG;M%$@YVu+pFdQRVHfN_rcVLU1<-L4E9w(7ERB;&B8G>AjU)Z4 z?-F;pJ1;Dv?AM(%r0MGwg+uPL55s4_3K^ZQ_Ikc2P0a3mcRlJUvV1z`edE>kIf^^S z6j!SqqAV-jY=XH{cjaDwO*;FSghGI|vah5a!JXjr>L-(ph&)vhk-Jg2GIBrYfbLED2V8#Qsml(oG zyEE-G86qb^#k-xE7{Ud1qJxU{{nY|r3;=VK!+qcPT}gnbidj?9Y$Xm?>BYd__Y2v-i7 zLnc^DkwNit0GlKT5dz?r6!DEPp(0dHA!WSY0ue^&aHQ6x>4j(UlqtFJ4#s0g>g9U8 z_G?WE!SGnV@xU!*f;68T2iY9@?sl;3T?0ky>t|w?3(qNn9S&PMIWCHyHYD9WriJn8 z({owOb2XoK(SgIJGvpbW3?$V=8-!l!jc37dtPRyJ{9$0mCdOIFS6Fj4+pRLbNG+#Y z2#ryB_>@qM)Gz`KRk#+B%&EcHT=yekt%HUUqTfBS2DbGFe}sDYtK)^-deR`Js-Ke;5v2BpQha z7Hc2se=GS$HT~q_%jy}hV#@Fzd70&jnfDqw=t@bFo0(4&7Ðee>^M?pR)WpWZtl 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

    uudHOEosX9wVI3IBQuN05Bg>Wrq|F8wV97< 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�JlQdU`^AwjRq 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 + + + +### Pro Micro Shields + ![Labelled Pro Micro pins](../assets/pro-micro/pro-micro-pins-labelled.jpg) ZMK uses the blue color coded pin names to generate devicetree node references. For example, to refer to the node `0` in the devicetree files, use `&pro_micro 0`. + + + + +### BlackPill Shields + +![Labelled BlackPill pins](../assets/blackpill/blackpill-pins-labelled.png) + +ZMK uses the blue color coded pin names to generate devicetree node references. For example, to refer to the node `17` in the devicetree files, use `&blackpill 17`. + + + + Date: Sat, 10 Dec 2022 22:21:54 -0600 Subject: [PATCH 0565/1130] fix(boards): Add nRF5340 DK metadata file (#1579) --- .../nrf5340dk_nrf5340_cpuapp.zmk.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml diff --git a/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml b/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml new file mode 100644 index 00000000000..c8472428a72 --- /dev/null +++ b/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: nrf5340dk_nrf5340_cpuapp +name: Nordic nRF3840 DK +type: board +arch: arm +outputs: + - usb + - ble +url: https://www.nordicsemi.com/Products/Development-hardware/nrf5340-dk +exposes: [arduino_uno] From 617136b45eac0d2b4cb2bd4f24c8412faacbefba Mon Sep 17 00:00:00 2001 From: JW2586 <70282382+JW2586@users.noreply.github.com> Date: Sun, 11 Dec 2022 04:51:41 +0000 Subject: [PATCH 0566/1130] feat(shields): Added Waterfowl shield --- .../shields/waterfowl/Kconfig.defconfig | 47 ++++++++ app/boards/shields/waterfowl/Kconfig.shield | 9 ++ app/boards/shields/waterfowl/waterfowl.conf | 6 + app/boards/shields/waterfowl/waterfowl.dtsi | 85 +++++++++++++ app/boards/shields/waterfowl/waterfowl.keymap | 112 ++++++++++++++++++ .../shields/waterfowl/waterfowl.zmk.yml | 14 +++ .../shields/waterfowl/waterfowl_left.conf | 2 + .../shields/waterfowl/waterfowl_left.overlay | 21 ++++ .../shields/waterfowl/waterfowl_right.conf | 2 + .../shields/waterfowl/waterfowl_right.overlay | 26 ++++ 10 files changed, 324 insertions(+) create mode 100644 app/boards/shields/waterfowl/Kconfig.defconfig create mode 100644 app/boards/shields/waterfowl/Kconfig.shield create mode 100644 app/boards/shields/waterfowl/waterfowl.conf create mode 100644 app/boards/shields/waterfowl/waterfowl.dtsi create mode 100644 app/boards/shields/waterfowl/waterfowl.keymap create mode 100644 app/boards/shields/waterfowl/waterfowl.zmk.yml create mode 100644 app/boards/shields/waterfowl/waterfowl_left.conf create mode 100644 app/boards/shields/waterfowl/waterfowl_left.overlay create mode 100644 app/boards/shields/waterfowl/waterfowl_right.conf create mode 100644 app/boards/shields/waterfowl/waterfowl_right.overlay diff --git a/app/boards/shields/waterfowl/Kconfig.defconfig b/app/boards/shields/waterfowl/Kconfig.defconfig new file mode 100644 index 00000000000..897184f66c7 --- /dev/null +++ b/app/boards/shields/waterfowl/Kconfig.defconfig @@ -0,0 +1,47 @@ + +if SHIELD_WATERFOWL_LEFT + +config ZMK_KEYBOARD_NAME + default "Waterfowl" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif + +if SHIELD_WATERFOWL_LEFT || SHIELD_WATERFOWL_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/waterfowl/Kconfig.shield b/app/boards/shields/waterfowl/Kconfig.shield new file mode 100644 index 00000000000..a321b73dd05 --- /dev/null +++ b/app/boards/shields/waterfowl/Kconfig.shield @@ -0,0 +1,9 @@ +#Copyright (c) 2022 The ZMK Contributors +#SPDX-License-Identifier: MIT + + +config SHIELD_WATERFOWL_LEFT + def_bool $(shields_list_contains,waterfowl_left) + +config SHIELD_WATERFOWL_RIGHT + def_bool $(shields_list_contains,waterfowl_right) diff --git a/app/boards/shields/waterfowl/waterfowl.conf b/app/boards/shields/waterfowl/waterfowl.conf new file mode 100644 index 00000000000..449e0b1fe26 --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl.conf @@ -0,0 +1,6 @@ +# Uncomment these two line to add support for encoders to your firmware +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Waterfowl OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi new file mode 100644 index 00000000000..c21dcf07d92 --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | +// | MX10 | MX9 | MX8 | MX7 | MX6 | | MX6 | MX7 | MX8 | MX9 | MX10 | +// | MX15 | MX14 | MX13 | MX12 | MX11 | | MX11 | MX12 | MX13 | MX14 | MX15 | +// | MX20 | MX19 | MX18 | MX17 | MX16 | | MX16 | MX17 | MX18 | MX19 | MX20 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + left_encoder: encoder_left { //roller + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; + + right_encoder: encoder_right { //Standard encoder on left half + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; + + // TODO: RGB node(s) +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/waterfowl/waterfowl.keymap b/app/boards/shields/waterfowl/waterfowl.keymap new file mode 100644 index 00000000000..9a1dabacdbc --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl.keymap @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +/* QWERTY + * + * ,----------------------------------. ,----------------------------------. + * | Q | W | E | R | T | | Y | U | I | O | P | + * |------+------+------+------+------| |------+------+------+------+------| + * | A | S | D | F | G | | H | J | K | L | ; | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | Z | X | C | V | B | | 2 | | 3 | | N | M | , | . | / | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &mt LGUI A &mt LALT S &mt LCTRL D &mt LSHFT F &kp G &kp H &mt LSHFT J &mt LCTRL K &mt LALT L &mt LGUI SEMI + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; + + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; + + navnum_layer { +/* NAVNUM + * + * ,----------------------------------. ,----------------------------------. + * | | PgUp | UP | PgDn | | | / | 7 | 8 | 9 | - | + * |------+------+------+------+------| |------+------+------+------+------| + * | Home | Left | Down | Right| End | | = | 4 | 5 | 6 | + | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | | | INS | | | | 2 | | 3 | | 0 | 1 | 2 | 3 | * | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | MO(3)| | ESC | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ + bindings = < + &trans &kp PG_UP &kp UP &kp PG_DN &trans &kp FSLH &kp N7 &kp N8 &kp N9 &kp MINUS + &kp HOME &kp LEFT &kp DOWN &kp RIGHT &kp END &kp EQUAL &kp N4 &kp N5 &kp N6 &kp PLUS + &trans &trans &kp INS &trans &trans &kp N0 &kp N1 &kp N2 &kp N3 &kp ASTERISK + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; + + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; + + symbol_layer { +/* SYM + * + * ,----------------------------------. ,----------------------------------. + * | % | @ | [ | ] | \ | | | | ^ | | | + * |------+------+------+------+------| |------+------+------+------+------| + * | # | ! | ( | ) | | | | _ | ' | " | ~ | ` | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | $ | | { | } | & | | 2 | | 3 | | | | | | | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ + bindings = < + &kp PRCNT &kp AT &kp LBKT &kp RBKT &kp NON_US_BSLH &trans &trans &kp CARET &trans &trans + &kp HASH &kp EXCL &kp LPAR &kp RPAR &kp PIPE &kp UNDER &kp APOS &kp DOUBLE_QUOTES &kp TILDE &kp GRAVE + &kp DLLR &trans &kp LBRC &kp RBRC &kp AMPS &trans &trans &trans &trans &trans + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; + + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; + + function_layer { +/* FUNC + * + * ,----------------------------------. ,----------------------------------. + * | | | BTCLR| | Reset| | Reset| F7 | F8 | F9 | F11 | + * |------+------+------+------+------| |------+------+------+------+------| + * | BT0 | BT1 | BT2 | BT3 | BT4 | | | F4 | F5 | F6 | F12 | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | | | | | | | 2 | | 3 | | F10 | F1 | F2 | F3 | F13 | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ + bindings = < + &trans &trans &bt BT_CLR &trans &reset &reset &kp F7 &kp F8 &kp F9 &kp F11 + &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &kp F4 &kp F5 &kp F6 &kp F12 + &trans &trans &trans &trans &trans &kp F10 &kp F1 &kp F2 &kp F3 &kp F13 + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; + + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; + + }; +}; \ No newline at end of file diff --git a/app/boards/shields/waterfowl/waterfowl.zmk.yml b/app/boards/shields/waterfowl/waterfowl.zmk.yml new file mode 100644 index 00000000000..3cd4868686d --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: waterfowl +name: Waterfowl +type: shield +url: https://waterfowl.bio.link/ +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder +siblings: + - waterfowl_left + - waterfowl_right diff --git a/app/boards/shields/waterfowl/waterfowl_left.conf b/app/boards/shields/waterfowl/waterfowl_left.conf new file mode 100644 index 00000000000..2f561d0de35 --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl_left.conf @@ -0,0 +1,2 @@ +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y \ No newline at end of file diff --git a/app/boards/shields/waterfowl/waterfowl_left.overlay b/app/boards/shields/waterfowl/waterfowl_left.overlay new file mode 100644 index 00000000000..031936eaae5 --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl_left.overlay @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "waterfowl.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/waterfowl/waterfowl_right.conf b/app/boards/shields/waterfowl/waterfowl_right.conf new file mode 100644 index 00000000000..2f561d0de35 --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl_right.conf @@ -0,0 +1,2 @@ +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y \ No newline at end of file diff --git a/app/boards/shields/waterfowl/waterfowl_right.overlay b/app/boards/shields/waterfowl/waterfowl_right.overlay new file mode 100644 index 00000000000..cff0d53cc5f --- /dev/null +++ b/app/boards/shields/waterfowl/waterfowl_right.overlay @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "waterfowl.dtsi" + +&default_transform { + col-offset = <5>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; +}; + + +&right_encoder { + status = "okay"; +}; From f03e29ca135fb41644cbae40b9233ba7adce4153 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 11 Dec 2022 10:25:09 -0500 Subject: [PATCH 0567/1130] fix(config): Fix split wired detection in setup.sh. --- docs/src/templates/setup.sh.mustache | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index a8a2da22d6c..3184aab2502 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -136,12 +136,13 @@ if [ "$keyboard_shield" == "y" ]; then continue fi + board_index=$(( $REPLY-1 )) + if [ -n "${!keyboard_sibling_first}" ] && [ "${boards_usb_only[$board_index]}" = "y" ] ; then echo "Wired split is not yet supported by ZMK." exit 1 fi - board_index=$(( $REPLY-1 )) board=${board_ids[$board_index]} board_title=${options[$board_index]} boards=( "${board}" ) From 1425d0f2d9b81c630d8daabef35e3c8489ebb295 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 13 Dec 2022 21:08:54 -0500 Subject: [PATCH 0568/1130] fix(shields): Fix col-offset for splitkb.com corne Same column offset for both transforms, since we use the same pins for both, just apply a different transform. Fixes: 1570 --- .../splitkb_aurora_corne/splitkb_aurora_corne_right.overlay | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay index b4c4b438dee..34330400308 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay @@ -40,7 +40,7 @@ }; &default_transform { - col-offset = <5>; + col-offset = <6>; }; &five_column_transform { From 408b87ae7b9a5d3bf1040e0e228c4750c4c4e0ca Mon Sep 17 00:00:00 2001 From: Petrus Claviger Date: Wed, 14 Dec 2022 15:51:46 +0100 Subject: [PATCH 0569/1130] fix(docs): Grammatical fixes (#1587) Co-authored-by: Dom H --- docs/docs/behaviors/bluetooth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index d21f38325c5..7c77c4ad2b7 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -75,7 +75,7 @@ The bluetooth behavior completes an bluetooth action given on press. ZMK support bluetooth “profiles” which allows connection to multiple devices (5 by default). Each profile stores the bluetooth MAC address of a peer, which can be empty if a profile has not been paired with a device yet. Upon switching to a profile, ZMK does the following: -- If a profile has not been paired with a peer yet, ZMK automatically advertise itself as connectable. You can discover you keyboard from bluetooth scanning on your laptop / tablet. If you try to connect, it will trigger the _pairing_ procedure. After pairing, the bluetooth MAC address of the peer device will be stored in the current profile. Pairing also negotiate a random key for secure communication between the device and the keyboard. +- If a profile has not been paired with a peer yet, ZMK automatically advertises itself as connectable. You can discover your keyboard from bluetooth scanning on your laptop / tablet. If you try to connect, it will trigger the _pairing_ procedure. After pairing, the bluetooth MAC address of the peer device will be stored in the current profile. Pairing also negotiates a random key for secure communication between the device and the keyboard. - If a profile has been paired but the peer is not connected yet, ZMK will also advertise itself as connectable. In the future, the behavior might change to _direct advertising_ which only target the peer with the stored bluetooth MAC address. In this state, if the peer is powered on and moved within the distance of bluetooth signal coverage, it should automatically connect to the keyboard. - If a profile has been paired and is currently connected, ZMK will not advertise it as connectable. From 4faf6eba97d91e8d9ec5fdbfb7b3a637228cc32d Mon Sep 17 00:00:00 2001 From: hyx0329 Date: Wed, 14 Dec 2022 17:02:04 +0800 Subject: [PATCH 0570/1130] feat(boards): Add battery sensor for Makerdiary M60 keyboard Signed-off-by: hyx0329 --- app/boards/arm/nrf52840_m2/nrf52840_m2.dts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts index 5ea852e965c..dc22c40b566 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts @@ -16,6 +16,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; }; leds { @@ -34,6 +35,14 @@ }; }; + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 0>; + output-ohms = <1000000>; + full-ohms = <(1000000 + 1000000)>; + }; + }; &adc { From 984b16e03bfbaf74c61061fc6489aee5b861c1f8 Mon Sep 17 00:00:00 2001 From: Jerome Olivier <33301870+jeromeOlivier@users.noreply.github.com> Date: Fri, 16 Dec 2022 11:52:26 -0500 Subject: [PATCH 0571/1130] feat(boards): Add preonic_rev3 board. --- app/boards/arm/preonic/CMakeLists.txt | 4 + app/boards/arm/preonic/Kconfig.board | 8 + app/boards/arm/preonic/Kconfig.defconfig | 17 +++ app/boards/arm/preonic/board.cmake | 7 + app/boards/arm/preonic/preonic_rev3.dts | 139 ++++++++++++++++++ app/boards/arm/preonic/preonic_rev3.keymap | 65 ++++++++ app/boards/arm/preonic/preonic_rev3.yaml | 19 +++ app/boards/arm/preonic/preonic_rev3.zmk.yml | 10 ++ app/boards/arm/preonic/preonic_rev3_defconfig | 15 ++ 9 files changed, 284 insertions(+) create mode 100644 app/boards/arm/preonic/CMakeLists.txt create mode 100644 app/boards/arm/preonic/Kconfig.board create mode 100644 app/boards/arm/preonic/Kconfig.defconfig create mode 100644 app/boards/arm/preonic/board.cmake create mode 100644 app/boards/arm/preonic/preonic_rev3.dts create mode 100644 app/boards/arm/preonic/preonic_rev3.keymap create mode 100644 app/boards/arm/preonic/preonic_rev3.yaml create mode 100644 app/boards/arm/preonic/preonic_rev3.zmk.yml create mode 100644 app/boards/arm/preonic/preonic_rev3_defconfig diff --git a/app/boards/arm/preonic/CMakeLists.txt b/app/boards/arm/preonic/CMakeLists.txt new file mode 100644 index 00000000000..91bd098807e --- /dev/null +++ b/app/boards/arm/preonic/CMakeLists.txt @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +list(APPEND EXTRA_DTC_FLAGS "-qq") + diff --git a/app/boards/arm/preonic/Kconfig.board b/app/boards/arm/preonic/Kconfig.board new file mode 100644 index 00000000000..a930b90f264 --- /dev/null +++ b/app/boards/arm/preonic/Kconfig.board @@ -0,0 +1,8 @@ +# Preonic V3 board configuration + +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_PREONIC_REV3 + bool "Preonic V3 Keyboard" + depends on SOC_STM32F303XC diff --git a/app/boards/arm/preonic/Kconfig.defconfig b/app/boards/arm/preonic/Kconfig.defconfig new file mode 100644 index 00000000000..186c88bc5e3 --- /dev/null +++ b/app/boards/arm/preonic/Kconfig.defconfig @@ -0,0 +1,17 @@ +# Preonic keyboard configuration + +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_PREONIC_REV3 + +config ZMK_KEYBOARD_NAME + default "Preonic V3" + +config ZMK_USB + default y + +config ZMK_KSCAN_MATRIX_POLLING + default y + +endif # BOARD_PREONIC_REV3 diff --git a/app/boards/arm/preonic/board.cmake b/app/boards/arm/preonic/board.cmake new file mode 100644 index 00000000000..772796da6f0 --- /dev/null +++ b/app/boards/arm/preonic/board.cmake @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F303VC" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/app/boards/arm/preonic/preonic_rev3.dts b/app/boards/arm/preonic/preonic_rev3.dts new file mode 100644 index 00000000000..c19b131926b --- /dev/null +++ b/app/boards/arm/preonic/preonic_rev3.dts @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include +#include + + +/ { + model = "Preonic PCD, rev3"; + compatible = "preonic,rev3", "st,stm32f303"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,matrix_transform = &layout_grid_transform; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + row-gpios + = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpiob 11 GPIO_ACTIVE_HIGH> + , <&gpiob 10 GPIO_ACTIVE_HIGH> + , <&gpiob 2 GPIO_ACTIVE_HIGH> + , <&gpiob 1 GPIO_ACTIVE_HIGH> + , <&gpioa 7 GPIO_ACTIVE_HIGH> + , <&gpiob 0 GPIO_ACTIVE_HIGH> + ; + }; + + layout_grid_transform: + keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <10>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,4) RC(7,5) + RC(8,0) RC(8,1) RC(8,2) RC(9,3) RC(9,4) RC(9,5) RC(9,0) RC(9,1) RC(9,2) RC(8,3) RC(8,4) RC(8,5) + >; + }; + + layout_mit_transform: + keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <10>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,4) RC(7,5) + RC(8,0) RC(8,1) RC(8,2) RC(9,3) RC(9,4) RC(9,0) RC(9,1) RC(9,2) RC(8,3) RC(8,4) RC(8,5) + >; + }; + + layout_2x2u_transform: + keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <10>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,4) RC(7,5) + RC(8,0) RC(8,1) RC(8,2) RC(9,3) RC(9,5) RC(9,1) RC(9,2) RC(8,3) RC(8,4) RC(8,5) + >; + }; +}; + +&usb { + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; + status = "okay"; +cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + +&clk_hse { + status = "okay"; + clock-frequency = ; +}; + +&pll { + prediv = <1>; + mul = <9>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <2>; + apb2-prescaler = <1>; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; +}; diff --git a/app/boards/arm/preonic/preonic_rev3.keymap b/app/boards/arm/preonic/preonic_rev3.keymap new file mode 100644 index 00000000000..350fe6de917 --- /dev/null +++ b/app/boards/arm/preonic/preonic_rev3.keymap @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 + +/ { + chosen { zmk,matrix_transform = &layout_grid_transform; }; + keymap { + compatible = "zmk,keymap"; + default_layer { + // ------------------------------------------------------------------------------------------------- + // | GRAV | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | DEL | + // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | + // | | LGUI | LALT | LCTL | LOWER | SPACE | SPACE | RAISE | LEFT | DOWN | UP | RIGHT | + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET + &none &kp LCTRL &kp LALT &kp LGUI &mo LOWER &kp SPACE &kp SPACE &mo RAISE &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + }; + lower { + // ------------------------------------------------------------------------------------------ + // | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BSPC | + // | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL | + // | DEL | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | | + // | | F7 | F8 | F9 | F10 | F11 | F12 | | LCTL | HOME | END | | + // | LALT | | | | | | | | NEXT | VOL- | VOL+ | PLAY | + bindings = < + &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp BSPC + &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp PLUS &kp LEFT_BRACKET &kp RIGHT_BRACKET &kp PIPE + &none &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &none &kp LCTRL &kp HOME &kp END &none + &kp LALT &none &none &none &trans &none &none &none &kp C_NEXT &kp C_VOL_UP &kp C_VOL_UP &kp C_PLAY + >; + }; + raise { + // ------------------------------------------------------------------------------------------- + // | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC | + // | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL | + // | DEL | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + // | | F7 | F8 | F9 | F10 | F11 | F12 | # | \ | PGUP | PGDN | | + // | | | | | | SHIFT | | | NEXT | VOL- | VOL+ | PLAY | + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp KP_EQUAL &kp LEFT_BRACKET &kp RIGHT_BRACKET &kp BSLH + &none &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &none + &none &none &none &none &none &kp LSHIFT &none &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY + >; + }; + }; +}; diff --git a/app/boards/arm/preonic/preonic_rev3.yaml b/app/boards/arm/preonic/preonic_rev3.yaml new file mode 100644 index 00000000000..679e1464eea --- /dev/null +++ b/app/boards/arm/preonic/preonic_rev3.yaml @@ -0,0 +1,19 @@ +identifier: preonic_rev3 +name: PREONICREV3 +type: keyboard +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 40 +supported: + - gpio + - i2c + - counter + - spi + - usb_device + - lsm303dlhc + - nvs + - can + - kscan \ No newline at end of file diff --git a/app/boards/arm/preonic/preonic_rev3.zmk.yml b/app/boards/arm/preonic/preonic_rev3.zmk.yml new file mode 100644 index 00000000000..bd9d95794da --- /dev/null +++ b/app/boards/arm/preonic/preonic_rev3.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: preonic_rev3 +name: Preonic Rev3 +type: board +arch: arm +features: + - keys +outputs: + - usb +url: https://olkb.com/collections/preonic diff --git a/app/boards/arm/preonic/preonic_rev3_defconfig b/app/boards/arm/preonic/preonic_rev3_defconfig new file mode 100644 index 00000000000..ab19d10f6f8 --- /dev/null +++ b/app/boards/arm/preonic/preonic_rev3_defconfig @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_STM32F3X=y +CONFIG_SOC_STM32F303XC=y +# 72MHz system clock +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 + +# enable pinctrl +CONFIG_PINCTRL=y + +# enable GPIO +CONFIG_GPIO=y + +# clock configuration +CONFIG_CLOCK_CONTROL=y From 4a3e783f3212e584e86494db2af8e30f362ecace Mon Sep 17 00:00:00 2001 From: Darryldh Date: Fri, 16 Dec 2022 11:57:25 -0500 Subject: [PATCH 0572/1130] feat(boards): Add Corne-ish zen v2 Co-authored-by: Pete Johanson --- app/boards/arm/corneish_zen/CMakeLists.txt | 60 ++++++++ app/boards/arm/corneish_zen/Kconfig.board | 12 ++ app/boards/arm/corneish_zen/Kconfig.defconfig | 81 ++++++++++ app/boards/arm/corneish_zen/board.cmake | 5 + app/boards/arm/corneish_zen/corneish_zen.dtsi | 126 ++++++++++++++++ .../arm/corneish_zen/corneish_zen.keymap | 67 +++++++++ app/boards/arm/corneish_zen/corneish_zen.yaml | 20 +++ .../arm/corneish_zen/corneish_zen_v2.yaml | 20 +++ .../arm/corneish_zen/corneish_zen_v2.zmk.yml | 15 ++ .../arm/corneish_zen/corneish_zen_v2_left.dts | 78 ++++++++++ .../corneish_zen_v2_left_defconfig | 91 ++++++++++++ .../corneish_zen/corneish_zen_v2_right.dts | 86 +++++++++++ .../corneish_zen_v2_right_defconfig | 83 +++++++++++ .../arm/corneish_zen/custom_status_screen.c | 85 +++++++++++ .../arm/corneish_zen/custom_status_screen.h | 12 ++ .../arm/corneish_zen/widgets/battery_status.c | 97 ++++++++++++ .../arm/corneish_zen/widgets/battery_status.h | 20 +++ .../corneish_zen/widgets/icons/CMakeLists.txt | 4 + .../widgets/icons/USB_connected.c | 41 ++++++ .../arm/corneish_zen/widgets/icons/batt_0.c | 43 ++++++ .../corneish_zen/widgets/icons/batt_0_chg.c | 43 ++++++ .../arm/corneish_zen/widgets/icons/batt_100.c | 43 ++++++ .../corneish_zen/widgets/icons/batt_100_chg.c | 43 ++++++ .../arm/corneish_zen/widgets/icons/batt_25.c | 43 ++++++ .../corneish_zen/widgets/icons/batt_25_chg.c | 43 ++++++ .../arm/corneish_zen/widgets/icons/batt_5.c | 43 ++++++ .../arm/corneish_zen/widgets/icons/batt_50.c | 43 ++++++ .../corneish_zen/widgets/icons/batt_50_chg.c | 43 ++++++ .../corneish_zen/widgets/icons/batt_5_chg.c | 43 ++++++ .../arm/corneish_zen/widgets/icons/batt_75.c | 43 ++++++ .../corneish_zen/widgets/icons/batt_75_chg.c | 43 ++++++ .../widgets/icons/bluetooth_advertising.c | 42 ++++++ .../widgets/icons/bluetooth_advertising_1.c | 47 ++++++ .../widgets/icons/bluetooth_advertising_2.c | 47 ++++++ .../widgets/icons/bluetooth_advertising_3.c | 47 ++++++ .../widgets/icons/bluetooth_advertising_4.c | 47 ++++++ .../widgets/icons/bluetooth_advertising_5.c | 47 ++++++ .../widgets/icons/bluetooth_connected_1.c | 47 ++++++ .../widgets/icons/bluetooth_connected_2.c | 47 ++++++ .../widgets/icons/bluetooth_connected_3.c | 47 ++++++ .../widgets/icons/bluetooth_connected_4.c | 47 ++++++ .../widgets/icons/bluetooth_connected_5.c | 47 ++++++ .../widgets/icons/bluetooth_connected_right.c | 49 +++++++ .../icons/bluetooth_disconnected_right.c | 49 +++++++ .../arm/corneish_zen/widgets/icons/layers.c | 44 ++++++ .../arm/corneish_zen/widgets/icons/layers2.c | 40 +++++ .../arm/corneish_zen/widgets/icons/zenlogo.c | 58 ++++++++ .../arm/corneish_zen/widgets/layer_status.c | 67 +++++++++ .../arm/corneish_zen/widgets/layer_status.h | 19 +++ .../arm/corneish_zen/widgets/output_status.c | 138 ++++++++++++++++++ .../arm/corneish_zen/widgets/output_status.h | 19 +++ .../corneish_zen/widgets/peripheral_status.c | 61 ++++++++ .../corneish_zen/widgets/peripheral_status.h | 20 +++ app/package-lock.json | 17 ++- app/src/display/Kconfig | 1 - app/src/display/main.c | 8 +- 56 files changed, 2611 insertions(+), 10 deletions(-) create mode 100644 app/boards/arm/corneish_zen/CMakeLists.txt create mode 100644 app/boards/arm/corneish_zen/Kconfig.board create mode 100644 app/boards/arm/corneish_zen/Kconfig.defconfig create mode 100644 app/boards/arm/corneish_zen/board.cmake create mode 100644 app/boards/arm/corneish_zen/corneish_zen.dtsi create mode 100644 app/boards/arm/corneish_zen/corneish_zen.keymap create mode 100644 app/boards/arm/corneish_zen/corneish_zen.yaml create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v2.yaml create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v2.zmk.yml create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v2_left.dts create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v2_right.dts create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig create mode 100644 app/boards/arm/corneish_zen/custom_status_screen.c create mode 100644 app/boards/arm/corneish_zen/custom_status_screen.h create mode 100644 app/boards/arm/corneish_zen/widgets/battery_status.c create mode 100644 app/boards/arm/corneish_zen/widgets/battery_status.h create mode 100644 app/boards/arm/corneish_zen/widgets/icons/CMakeLists.txt create mode 100644 app/boards/arm/corneish_zen/widgets/icons/USB_connected.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_0.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_0_chg.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_100.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_100_chg.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_25.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_25_chg.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_5.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_50.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_50_chg.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_5_chg.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_75.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/batt_75_chg.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_1.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_2.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_3.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_4.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_5.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_1.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_2.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_3.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_4.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_5.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_right.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/bluetooth_disconnected_right.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/layers.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/layers2.c create mode 100644 app/boards/arm/corneish_zen/widgets/icons/zenlogo.c create mode 100644 app/boards/arm/corneish_zen/widgets/layer_status.c create mode 100644 app/boards/arm/corneish_zen/widgets/layer_status.h create mode 100644 app/boards/arm/corneish_zen/widgets/output_status.c create mode 100644 app/boards/arm/corneish_zen/widgets/output_status.h create mode 100644 app/boards/arm/corneish_zen/widgets/peripheral_status.c create mode 100644 app/boards/arm/corneish_zen/widgets/peripheral_status.h diff --git a/app/boards/arm/corneish_zen/CMakeLists.txt b/app/boards/arm/corneish_zen/CMakeLists.txt new file mode 100644 index 00000000000..0982057792a --- /dev/null +++ b/app/boards/arm/corneish_zen/CMakeLists.txt @@ -0,0 +1,60 @@ +if(CONFIG_ZMK_DISPLAY) + target_sources_ifdef(CONFIG_CUSTOM_WIDGET_BATTERY_STATUS app PRIVATE widgets/battery_status.c) + target_sources_ifdef(CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS app PRIVATE widgets/output_status.c) + target_sources_ifdef(CONFIG_CUSTOM_WIDGET_LAYER_STATUS app PRIVATE widgets/layer_status.c) + target_sources_ifdef(CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS app PRIVATE widgets/peripheral_status.c) + + add_subdirectory_ifdef(CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM widgets/icons) +endif() + +zephyr_library() + +if(CONFIG_ZMK_DISPLAY) + if(CONFIG_CUSTOM_WIDGET_BATTERY_STATUS) + zephyr_library_sources(widgets/icons/batt_100.c) + zephyr_library_sources(widgets/icons/batt_100_chg.c) + zephyr_library_sources(widgets/icons/batt_75.c) + zephyr_library_sources(widgets/icons/batt_75_chg.c) + zephyr_library_sources(widgets/icons/batt_50.c) + zephyr_library_sources(widgets/icons/batt_50_chg.c) + zephyr_library_sources(widgets/icons/batt_25.c) + zephyr_library_sources(widgets/icons/batt_25_chg.c) + zephyr_library_sources(widgets/icons/batt_5.c) + zephyr_library_sources(widgets/icons/batt_5_chg.c) + zephyr_library_sources(widgets/icons/batt_0.c) + zephyr_library_sources(widgets/icons/batt_0_chg.c) + endif() + if(CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS) + zephyr_library_sources(widgets/icons/bluetooth_advertising.c) + zephyr_library_sources(widgets/icons/bluetooth_connected_right.c) + zephyr_library_sources(widgets/icons/bluetooth_disconnected_right.c) + endif() + if(CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS) + zephyr_library_sources(widgets/icons/USB_connected.c) + zephyr_library_sources(widgets/icons/bluetooth_connected_1.c) + zephyr_library_sources(widgets/icons/bluetooth_connected_2.c) + zephyr_library_sources(widgets/icons/bluetooth_connected_3.c) + zephyr_library_sources(widgets/icons/bluetooth_connected_4.c) + zephyr_library_sources(widgets/icons/bluetooth_connected_5.c) + zephyr_library_sources(widgets/icons/bluetooth_advertising_1.c) + zephyr_library_sources(widgets/icons/bluetooth_advertising_2.c) + zephyr_library_sources(widgets/icons/bluetooth_advertising_3.c) + zephyr_library_sources(widgets/icons/bluetooth_advertising_4.c) + zephyr_library_sources(widgets/icons/bluetooth_advertising_5.c) + zephyr_library_sources(widgets/icons/bluetooth_disconnected_right.c) + endif() + if(CONFIG_CUSTOM_WIDGET_LAYER_STATUS) + zephyr_library_sources(widgets/icons/layers.c) + zephyr_library_sources(widgets/icons/layers2.c) + endif() + if(CONFIG_BOARD_CORNEISH_ZEN_V2_RIGHT) + zephyr_library_sources(widgets/icons/zenlogo.c) + endif() +endif() + +zephyr_library_include_directories(${ZEPHYR_LVGL_MODULE_DIR}) +zephyr_library_include_directories(${ZEPHYR_BASE}/lib/gui/lvgl/) +zephyr_library_sources_ifdef(CONFIG_ZMK_DISPLAY custom_status_screen.c) +zephyr_library_sources(${ZEPHYR_BASE}/misc/empty_file.c) +zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/Kconfig.board b/app/boards/arm/corneish_zen/Kconfig.board new file mode 100644 index 00000000000..33baa11072e --- /dev/null +++ b/app/boards/arm/corneish_zen/Kconfig.board @@ -0,0 +1,12 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# + +config BOARD_CORNEISH_ZEN_V2_LEFT + bool "corneish zen left v2" + depends on SOC_NRF52840_QIAA + +config BOARD_CORNEISH_ZEN_V2_RIGHT + bool "corneish zen right v2" + depends on SOC_NRF52840_QIAA \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig new file mode 100644 index 00000000000..a88cc5ca06f --- /dev/null +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -0,0 +1,81 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# + +if BOARD_CORNEISH_ZEN_V2_LEFT + +config ZMK_KEYBOARD_NAME + default "Corne-ish Zen" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # BOARD_CORNEISH_ZEN_V2_LEFT + + +if BOARD_CORNEISH_ZEN_V2_LEFT || BOARD_CORNEISH_ZEN_V2_RIGHT + +config BOARD + default "corneish_zen" + +config ZMK_SPLIT + default y + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config ZMK_DISPLAY + select LVGL_USE_CONT + select LVGL_FONT_MONTSERRAT_26 + select LVGL_FONT_MONTSERRAT_20 + select LVGL_FONT_MONTSERRAT_16 + select LVGL_USE_LABEL + select LVGL_USE_IMG + +choice ZMK_DISPLAY_STATUS_SCREEN + default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM +endchoice + +if ZMK_DISPLAY + +config SPI + default y + +config IL0323 + default y + +config ZMK_DISPLAY_BLANK_ON_IDLE + default n + +endif # ZMK_DISPLAY + +menuconfig CUSTOM_WIDGET_BATTERY_STATUS + bool "custom battery status widget" + +menuconfig CUSTOM_WIDGET_OUTPUT_STATUS + bool "custom output status widget" + +menuconfig CUSTOM_WIDGET_LAYER_STATUS + bool "custom layer status widget" + +menuconfig CUSTOM_WIDGET_PERIPHERAL_STATUS + bool "custom peripheral status widget" + +endif # BOARD_CORNEISH_ZEN_V2_LEFT || BOARD_CORNEISH_ZEN_V2_RIGHT diff --git a/app/boards/arm/corneish_zen/board.cmake b/app/boards/arm/corneish_zen/board.cmake new file mode 100644 index 00000000000..fa847d50595 --- /dev/null +++ b/app/boards/arm/corneish_zen/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi new file mode 100644 index 00000000000..f203c9f8b1c --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -0,0 +1,126 @@ +/* +* +* Copyright (c) 2021 Darryl deHaan +* SPDX-License-Identifier: MIT +* +*/ + +/dts-v1/; +#include + +#include + +/ { + model = "corneish_zen_v2"; + compatible = "corneish_zen_v2"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,display = &epd; + zmk,battery = &vbatt; + zephyr,console = &cdc_acm_uart; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; + + // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | + // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | + // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | + // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; + + // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | + // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | + // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | + // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < + RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) + RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) + RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + +}; + + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/corneish_zen.keymap b/app/boards/arm/corneish_zen/corneish_zen.keymap new file mode 100644 index 00000000000..72d0b8f1bfb --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen.keymap @@ -0,0 +1,67 @@ +/* +* +* Copyright (c) 2021 Darryl deHaan +* SPDX-License-Identifier: MIT +* +*/ + +#include +#include +#include + +/ { + chosen { + zmk,matrix_transform = &default_transform; + //zmk,matrix_transform = &five_column_transform; + }; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + label = "QWERTY"; +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | ESC | +// | GUI | LWR | SPC | | ENT | RSE | ALT | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ESC + &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT + >; + }; + lower_layer { + label = "NUMBER"; +// ----------------------------------------------------------------------------------------- +// | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | +// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | +// | SHFT | | | | | | | | | | | | | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans + &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; + + raise_layer { + label = "SYMBOL"; +// ----------------------------------------------------------------------------------------- +// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | +// | CTRL | | | | | | | - | = | [ | ] | \ | ` | +// | SHFT | | | | | | | _ | + | { | } | "|" | ~ | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC + &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE + &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/corneish_zen.yaml b/app/boards/arm/corneish_zen/corneish_zen.yaml new file mode 100644 index 00000000000..7975b262af1 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen.yaml @@ -0,0 +1,20 @@ +identifier: corne-ish_zen_v2 +name: Corne-ish Zen v2 +url: https://lowprokb.ca/collections/keyboards/products/corne-ish-zen +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 40 +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog + - gpio + - i2c + - spi diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2.yaml b/app/boards/arm/corneish_zen/corneish_zen_v2.yaml new file mode 100644 index 00000000000..46a213d9c60 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v2.yaml @@ -0,0 +1,20 @@ +identifier: corneish_zen_v2 +name: Corne-ish Zen v2 +type: keyboard +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio + - i2c + - counter + - spi + - usb_device + - lsm303dlhc + - nvs + - can + - kscan + - ble + - adc diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2.zmk.yml b/app/boards/arm/corneish_zen/corneish_zen_v2.zmk.yml new file mode 100644 index 00000000000..37c1cef4828 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v2.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: corneish_zen_v2 +name: Corneish Zen v2 +url: https://lowprokb.ca/collections/keyboards/products/corne-ish-zen +type: board +arch: arm +features: + - keys + - display +outputs: + - usb + - ble +siblings: + - corneish_zen_v2_left + - corneish_zen_v2_right diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts new file mode 100644 index 00000000000..2d8f0a81416 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -0,0 +1,78 @@ +/* +* +* Copyright (c) 2021 Darryl deHaan +* SPDX-License-Identifier: MIT +* +*/ + +#include "corneish_zen.dtsi" + +/{ + chosen { + zephyr,display = &epd; + zmk,battery = &vbatt; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 0>; + output-ohms = <1960000>; + full-ohms = <(1960000 + 810000)>; + }; + +}; + +&spi0 { + status = "okay"; + compatible = "nordic,nrf-spim"; + sck-pin = <27>; + mosi-pin = <8>; + miso-pin = <22>; + cs-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; + + epd: il0323@0 { + compatible = "gooddisplay,il0323"; + reg = <0>; + label = "DISPLAY"; + width = <80>; + height = <128>; + spi-max-frequency = <4000000>; + dc-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + busy-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + pwr = [03 00 26 26]; + cdi = <0xd2>; + tcon = <0x22>; + }; +}; \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig new file mode 100644 index 00000000000..eb1e552a40a --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -0,0 +1,91 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_CORNEISH_ZEN_V2_LEFT=y +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SLEEP=y +CONFIG_ZMK_DISPLAY=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable SPI +CONFIG_SPI=y +CONFIG_SPI_NRFX=y + +# Enable writing to flash +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y + +# enable display drivers +CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_SSD1306=n +CONFIG_IL0323=y +CONFIG_LVGL_BITS_PER_PIXEL=1 +CONFIG_LVGL_COLOR_DEPTH_1=y +CONFIG_LVGL_DPI=145 +CONFIG_LVGL_VDB_SIZE=100 +CONFIG_LVGL_USE_THEME_MONO=y +CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_RED=n +CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_RED=n +CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_BLACK=y +CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_WHITE=y +CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_16=y +CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y + +# custom status screens +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=n +CONFIG_CUSTOM_WIDGET_BATTERY_STATUS=y +CONFIG_ZMK_WIDGET_BATTERY_STATUS=n +CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS=y +CONFIG_ZMK_WIDGET_OUTPUT_STATUS=n +CONFIG_CUSTOM_WIDGET_LAYER_STATUS=y +CONFIG_ZMK_WIDGET_LAYER_STATUS=n + +# Turn on logging, and set ZMK logging to debug output +#CONFIG_LOG=y +#CONFIG_ZMK_USB_LOGGING=y +#CONFIG_ZMK_LOG_LEVEL_DBG=y +#CONFIG_LOG_BUFFER_SIZE=65536 +#CONFIG_LOG_STRDUP_BUF_COUNT=160 +#CONFIG_I2C_LOG_LEVEL_DBG=y +#CONFIG_SPI_LOG_LEVEL_DBG=y +#CONFIG_DISPLAY_LOG_LEVEL_DBG=y +#CONFIG_LVGL_LOG_LEVEL_DBG=y +#CONFIG_LVGL_USE_DEBUG=y +#CONFIG_SENSOR_LOG_LEVEL_DBG=y + +# Turn on USB CDC ACM device +CONFIG_USB_DEVICE_STACK=y +CONFIG_USB_CDC_ACM=y +CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 + +# Enable serial console +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_UART_LINE_CTRL=y + +# Enable USB UART +CONFIG_UART_CONSOLE=y + + diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts new file mode 100644 index 00000000000..097872f5cab --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -0,0 +1,86 @@ +/* +* +* Copyright (c) 2021 Darryl deHaan +* SPDX-License-Identifier: MIT +* +*/ + +#include "corneish_zen.dtsi" + +/{ + chosen { + zephyr,display = &epd; + zmk,battery = &vbatt; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&gpio0 19 GPIO_ACTIVE_HIGH> + , <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + ; + + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 0>; + output-ohms = <1960000>; + full-ohms = <(1960000 + 810000)>; + }; +}; + +&default_transform { + col-offset = <6>; +}; +&five_column_transform { + col-offset = <6>; +}; + +&spi0 { + status = "okay"; + compatible = "nordic,nrf-spim"; + sck-pin = <20>; + mosi-pin = <24>; + miso-pin = <27>; + cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; + + epd: il0323@0 { + compatible = "gooddisplay,il0323"; + reg = <0>; + label = "DISPLAY"; + width = <80>; + height = <128>; + spi-max-frequency = <4000000>; + dc-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; + busy-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + pwr = [03 00 26 26]; + //softstart = [17 17 17 17]; + cdi = <0xd2>; + tcon = <0x22>; + }; +}; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig new file mode 100644 index 00000000000..46b40dee46a --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -0,0 +1,83 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_CORNEISH_ZEN_V2_RIGHT=y +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SLEEP=y +CONFIG_ZMK_DISPLAY=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable SPI +CONFIG_SPI=y +CONFIG_SPI_NRFX=y + +# Enable writing to flash +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y + +# enable display drivers +CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_SSD1306=n +CONFIG_IL0323=y +CONFIG_LVGL_BITS_PER_PIXEL=1 +CONFIG_LVGL_COLOR_DEPTH_1=y +CONFIG_LVGL_DPI=145 +CONFIG_LVGL_VDB_SIZE=100 +CONFIG_LVGL_USE_THEME_MONO=y +CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_RED=n +CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_RED=n +CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_BLACK=y +CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_WHITE=y +CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_16=y +CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y + +# custom status screens +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=n +CONFIG_CUSTOM_WIDGET_BATTERY_STATUS=y +CONFIG_ZMK_WIDGET_BATTERY_STATUS=n +CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS=y +CONFIG_ZMK_WIDGET_PERIPHERAL_STATUS=n + +# Turn on logging, and set ZMK logging to debug output +#CONFIG_LOG=y +#CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 +#CONFIG_ZMK_USB_LOGGING=y +#CONFIG_ZMK_LOG_LEVEL_DBG=y +#CONFIG_LOG_BUFFER_SIZE=20000 +#CONFIG_LOG_STRDUP_BUF_COUNT=60 +#CONFIG_I2C_LOG_LEVEL_DBG=y +#CONFIG_SPI_LOG_LEVEL_DBG=y +#CONFIG_DISPLAY_LOG_LEVEL_DBG=y +#CONFIG_LVGL_LOG_LEVEL_DBG=y +#CONFIG_LVGL_USE_DEBUG=y +#CONFIG_SENSOR_LOG_LEVEL_DBG=y + +# Enable serial console +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_UART_LINE_CTRL=y + +# Enable USB UART +CONFIG_UART_CONSOLE=y diff --git a/app/boards/arm/corneish_zen/custom_status_screen.c b/app/boards/arm/corneish_zen/custom_status_screen.c new file mode 100644 index 00000000000..7842925e390 --- /dev/null +++ b/app/boards/arm/corneish_zen/custom_status_screen.c @@ -0,0 +1,85 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include "widgets/battery_status.h" +#include "widgets/peripheral_status.h" +#include "widgets/output_status.h" +#include "widgets/layer_status.h" +#include "custom_status_screen.h" + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +LV_IMG_DECLARE(zenlogo); +LV_IMG_DECLARE(layers2); + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_BATTERY_STATUS) +static struct zmk_widget_battery_status battery_status_widget; +#endif + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS) +static struct zmk_widget_output_status output_status_widget; +#endif + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS) +static struct zmk_widget_peripheral_status peripheral_status_widget; +#endif + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_LAYER_STATUS) +static struct zmk_widget_layer_status layer_status_widget; +#endif + +lv_obj_t *zmk_display_status_screen() { + + lv_obj_t *screen; + screen = lv_obj_create(NULL, NULL); + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_BATTERY_STATUS) + zmk_widget_battery_status_init(&battery_status_widget, screen); + lv_obj_align(zmk_widget_battery_status_obj(&battery_status_widget), NULL, LV_ALIGN_IN_TOP_MID, + 0, 2); +#endif + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS) + zmk_widget_output_status_init(&output_status_widget, screen); + lv_obj_align(zmk_widget_output_status_obj(&output_status_widget), NULL, LV_ALIGN_IN_TOP_MID, 0, + 41); +#endif + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS) + zmk_widget_peripheral_status_init(&peripheral_status_widget, screen); + lv_obj_align(zmk_widget_peripheral_status_obj(&peripheral_status_widget), NULL, + LV_ALIGN_IN_TOP_MID, 0, 41); +#endif + +#if IS_ENABLED(CONFIG_CUSTOM_WIDGET_LAYER_STATUS) + zmk_widget_layer_status_init(&layer_status_widget, screen); + lv_obj_set_style_local_text_font(zmk_widget_layer_status_obj(&layer_status_widget), + LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, + lv_theme_get_font_small()); + lv_obj_align(zmk_widget_layer_status_obj(&layer_status_widget), NULL, LV_ALIGN_IN_BOTTOM_MID, 0, + -5); + + lv_obj_t *LayersHeading; + LayersHeading = lv_img_create(screen, NULL); + lv_obj_align(LayersHeading, NULL, LV_ALIGN_IN_BOTTOM_MID, 8, 5); + lv_img_set_src(LayersHeading, &layers2); +#endif + +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + lv_obj_t *zenlogo_icon; + zenlogo_icon = lv_img_create(screen, NULL); + lv_img_set_src(zenlogo_icon, &zenlogo); + lv_obj_align(zenlogo_icon, NULL, LV_ALIGN_IN_BOTTOM_MID, 2, -5); +#endif + + // lv_task_handler(); + lv_refr_now(NULL); + // display_blanking_off(display_dev); + + return screen; +} diff --git a/app/boards/arm/corneish_zen/custom_status_screen.h b/app/boards/arm/corneish_zen/custom_status_screen.h new file mode 100644 index 00000000000..8da1510de05 --- /dev/null +++ b/app/boards/arm/corneish_zen/custom_status_screen.h @@ -0,0 +1,12 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include + +lv_obj_t *zmk_display_status_screen(); \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.c b/app/boards/arm/corneish_zen/widgets/battery_status.c new file mode 100644 index 00000000000..7dfd51e8356 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/battery_status.c @@ -0,0 +1,97 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include "battery_status.h" +#include +#include +#include +#include +#include + +static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); + +struct battery_status_state { + uint8_t level; +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + bool usb_present; +#endif +}; + +LV_IMG_DECLARE(batt_100); +LV_IMG_DECLARE(batt_100_chg); +LV_IMG_DECLARE(batt_75); +LV_IMG_DECLARE(batt_75_chg); +LV_IMG_DECLARE(batt_50); +LV_IMG_DECLARE(batt_50_chg); +LV_IMG_DECLARE(batt_25); +LV_IMG_DECLARE(batt_25_chg); +LV_IMG_DECLARE(batt_5); +LV_IMG_DECLARE(batt_5_chg); +LV_IMG_DECLARE(batt_0); +LV_IMG_DECLARE(batt_0_chg); + +static void set_battery_symbol(lv_obj_t *icon, struct battery_status_state state) { + uint8_t level = state.level; + +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + if (level > 95) { + lv_img_set_src(icon, state.usb_present ? &batt_100_chg : &batt_100); + } else if (level > 74) { + lv_img_set_src(icon, state.usb_present ? &batt_75_chg : &batt_75); + } else if (level > 49) { + lv_img_set_src(icon, state.usb_present ? &batt_50_chg : &batt_50); + } else if (level > 24) { + lv_img_set_src(icon, state.usb_present ? &batt_25_chg : &batt_25); + } else if (level > 5) { + lv_img_set_src(icon, state.usb_present ? &batt_5_chg : &batt_5); + } else { + lv_img_set_src(icon, state.usb_present ? &batt_0_chg : &batt_0); + } +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ +} + +void battery_status_update_cb(struct battery_status_state state) { + struct zmk_widget_battery_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_battery_symbol(widget->obj, state); } +} + +static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + return (struct battery_status_state) { + .level = bt_bas_get_battery_level(), +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + .usb_present = zmk_usb_is_powered(), +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + }; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_battery_status, struct battery_status_state, + battery_status_update_cb, battery_status_get_state) + +ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) +ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + +int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent) { + widget->obj = lv_img_create(parent, NULL); + + sys_slist_append(&widgets, &widget->node); + widget_battery_status_init(); + + return 0; +} + +lv_obj_t *zmk_widget_battery_status_obj(struct zmk_widget_battery_status *widget) { + return widget->obj; +} diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.h b/app/boards/arm/corneish_zen/widgets/battery_status.h new file mode 100644 index 00000000000..21a4efb8612 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/battery_status.h @@ -0,0 +1,20 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include + +#include + +struct zmk_widget_battery_status { + sys_snode_t node; + lv_obj_t *obj; +}; + +int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent); +lv_obj_t *zmk_widget_battery_status_obj(struct zmk_widget_battery_status *widget); \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/widgets/icons/CMakeLists.txt b/app/boards/arm/corneish_zen/widgets/icons/CMakeLists.txt new file mode 100644 index 00000000000..eee750bf8c5 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/CMakeLists.txt @@ -0,0 +1,4 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/widgets/icons/USB_connected.c b/app/boards/arm/corneish_zen/widgets/icons/USB_connected.c new file mode 100644 index 00000000000..b3b60422257 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/USB_connected.c @@ -0,0 +1,41 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_USB_CONNECTED +#define LV_ATTRIBUTE_IMG_USB_CONNECTED +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_USB_CONNECTED uint8_t USB_connected_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x3f, + 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, + 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, 0x1e, 0x30, 0x38, 0x07, 0x0f, 0x1c, 0x20, 0x38, + 0x07, 0x0f, 0x1c, 0x47, 0x10, 0xc3, 0x3e, 0x1c, 0x43, 0xf1, 0xc7, 0x7e, 0x3c, 0x60, 0x70, 0x0e, + 0x7e, 0x3c, 0x70, 0x30, 0x0e, 0x7e, 0x38, 0xfc, 0x33, 0xc7, 0xfe, 0x18, 0x8f, 0x23, 0x87, 0x0e, + 0x00, 0xc6, 0x20, 0x07, 0x0f, 0x01, 0xe0, 0x60, 0x0e, 0x0f, 0x87, 0xf0, 0xe0, 0x3e, 0x07, 0xff, + 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xff, + 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t USB_connected = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 164, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = USB_connected_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_0.c b/app/boards/arm/corneish_zen/widgets/icons/batt_0.c new file mode 100644 index 00000000000..a6066b95aac --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_0.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_0 +#define LV_ATTRIBUTE_IMG_BATT_0 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_0 uint8_t + batt_0_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, 0x7f, 0xfd, 0xff, 0x7f, 0xf8, + 0xff, 0xfd, 0xff, 0x7f, 0xfc, 0xff, 0xfd, 0xff, 0x7f, 0xfc, 0xff, 0xfc, 0xfe, 0x7f, 0xfc, + 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, + 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x0f, 0xf0, 0x00, 0x7c, 0x00, 0x0f, + 0xf0, 0x00, 0x7c, 0x00, 0x0f, 0xf0, 0x00, 0x7c, 0x00, 0x0f, 0xf0, 0x00, 0x7c, 0x00, 0x3f, + 0xf0, 0x00, 0x7c, 0x00, 0x3f, 0xf0, 0x00, 0x7c, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0x01, 0xff, 0xfc, 0xff, 0xff, 0x01, 0xff, 0xfc, 0xff, 0xfe, 0x7c, 0xff, 0xfc, + 0x7f, 0xfc, 0xfe, 0x7f, 0xf8, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_0 = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_0_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_0_chg.c b/app/boards/arm/corneish_zen/widgets/icons/batt_0_chg.c new file mode 100644 index 00000000000..368ba288d34 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_0_chg.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_0_CHG +#define LV_ATTRIBUTE_IMG_BATT_0_CHG +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_0_CHG uint8_t + batt_0_chg_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x7f, 0xff, 0xf7, 0xbf, 0xf8, + 0xff, 0xff, 0xef, 0xbf, 0xfc, 0xff, 0xff, 0xdf, 0x7f, 0xfc, 0xff, 0xff, 0xbf, 0x7f, 0xfc, + 0xf0, 0x00, 0x7e, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf0, 0x01, 0xfe, 0x00, 0x3f, + 0xf0, 0x03, 0xfc, 0x00, 0x3f, 0xf0, 0x07, 0xfc, 0x00, 0x0f, 0xf0, 0x0f, 0xff, 0xe0, 0x0f, + 0xf0, 0x1f, 0xff, 0xc0, 0x0f, 0xf0, 0x00, 0x7f, 0x80, 0x0f, 0xf0, 0x00, 0x7f, 0x00, 0x3f, + 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfc, 0x00, 0x3f, 0xf0, 0x01, 0xf8, 0x00, 0x3f, + 0xff, 0xfd, 0xf7, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xff, 0xfb, 0xdf, 0xff, 0xfc, + 0x7f, 0xfb, 0xbf, 0xff, 0xf8, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_0_chg = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_0_chg_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_100.c b/app/boards/arm/corneish_zen/widgets/icons/batt_100.c new file mode 100644 index 00000000000..e6aa27bab2f --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_100.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_100 +#define LV_ATTRIBUTE_IMG_BATT_100 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_100 uint8_t + batt_100_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf3, 0xff, 0xff, 0xff, 0x3f, + 0xf3, 0xff, 0xff, 0xff, 0x3f, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf3, 0xff, 0xff, 0xff, 0x3f, + 0xf3, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_100 = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_100_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_100_chg.c b/app/boards/arm/corneish_zen/widgets/icons/batt_100_chg.c new file mode 100644 index 00000000000..9b2c18d4c8e --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_100_chg.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_100_CHG +#define LV_ATTRIBUTE_IMG_BATT_100_CHG +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_100_CHG uint8_t + batt_100_chg_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x7f, 0xff, 0xf7, 0xbf, 0xf8, + 0xff, 0xff, 0xef, 0xbf, 0xfc, 0xff, 0xff, 0xdf, 0x7f, 0xfc, 0xff, 0xff, 0xbf, 0x7f, 0xfc, + 0xf0, 0x00, 0x7e, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf3, 0xfd, 0xfe, 0xff, 0x3f, + 0xf3, 0xfb, 0xfd, 0xff, 0x3f, 0xf3, 0xf7, 0xfc, 0x07, 0x0f, 0xf3, 0xef, 0xff, 0xef, 0x0f, + 0xf3, 0xdf, 0xff, 0xdf, 0x0f, 0xf3, 0x80, 0x7f, 0xbf, 0x0f, 0xf3, 0xff, 0x7f, 0x7f, 0x3f, + 0xf3, 0xfe, 0xfe, 0xff, 0x3f, 0xf0, 0x00, 0xfc, 0x00, 0x3f, 0xf0, 0x01, 0xf8, 0x00, 0x3f, + 0xff, 0xfd, 0xf7, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xff, 0xfb, 0xdf, 0xff, 0xfc, + 0x7f, 0xfb, 0xbf, 0xff, 0xf8, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_100_chg = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_100_chg_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_25.c b/app/boards/arm/corneish_zen/widgets/icons/batt_25.c new file mode 100644 index 00000000000..2445ef39516 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_25.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_25 +#define LV_ATTRIBUTE_IMG_BATT_25 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_25 uint8_t + batt_25_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf3, 0xfc, 0x00, 0x00, 0x3f, + 0xf3, 0xfc, 0x00, 0x00, 0x3f, 0xf3, 0xfc, 0x00, 0x00, 0x0f, 0xf3, 0xfc, 0x00, 0x00, 0x0f, + 0xf3, 0xfc, 0x00, 0x00, 0x0f, 0xf3, 0xfc, 0x00, 0x00, 0x0f, 0xf3, 0xfc, 0x00, 0x00, 0x3f, + 0xf3, 0xfc, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_25 = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_25_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_25_chg.c b/app/boards/arm/corneish_zen/widgets/icons/batt_25_chg.c new file mode 100644 index 00000000000..37c30812fd1 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_25_chg.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_25_CHG +#define LV_ATTRIBUTE_IMG_BATT_25_CHG +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_25_CHG uint8_t + batt_25_chg_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x7f, 0xff, 0xf7, 0xbf, 0xf8, + 0xff, 0xff, 0xef, 0xbf, 0xfc, 0xff, 0xff, 0xdf, 0x7f, 0xfc, 0xff, 0xff, 0xbf, 0x7f, 0xfc, + 0xf0, 0x00, 0x7e, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf3, 0xf9, 0xfe, 0x00, 0x3f, + 0xf3, 0xfb, 0xfc, 0x00, 0x3f, 0xf3, 0xf7, 0xfc, 0x00, 0x0f, 0xf3, 0xef, 0xff, 0xe0, 0x0f, + 0xf3, 0xdf, 0xff, 0xc0, 0x0f, 0xf3, 0x80, 0x7f, 0x80, 0x0f, 0xf3, 0xf8, 0x7f, 0x00, 0x3f, + 0xf3, 0xf8, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfc, 0x00, 0x3f, 0xf0, 0x01, 0xf8, 0x00, 0x3f, + 0xff, 0xfd, 0xf7, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xff, 0xfb, 0xdf, 0xff, 0xfc, + 0x7f, 0xfb, 0xbf, 0xff, 0xf8, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_25_chg = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_25_chg_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_5.c b/app/boards/arm/corneish_zen/widgets/icons/batt_5.c new file mode 100644 index 00000000000..e9824572f6f --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_5.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_5 +#define LV_ATTRIBUTE_IMG_BATT_5 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_5 uint8_t + batt_5_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf3, 0x00, 0x00, 0x00, 0x3f, + 0xf3, 0x00, 0x00, 0x00, 0x3f, 0xf3, 0x00, 0x00, 0x00, 0x0f, 0xf3, 0x00, 0x00, 0x00, 0x0f, + 0xf3, 0x00, 0x00, 0x00, 0x0f, 0xf3, 0x00, 0x00, 0x00, 0x0f, 0xf3, 0x00, 0x00, 0x00, 0x3f, + 0xf3, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_5 = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_5_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_50.c b/app/boards/arm/corneish_zen/widgets/icons/batt_50.c new file mode 100644 index 00000000000..bbb0af48555 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_50.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_50 +#define LV_ATTRIBUTE_IMG_BATT_50 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_50 uint8_t + batt_50_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf3, 0xff, 0xf0, 0x00, 0x3f, + 0xf3, 0xff, 0xf0, 0x00, 0x3f, 0xf3, 0xff, 0xf0, 0x00, 0x0f, 0xf3, 0xff, 0xf0, 0x00, 0x0f, + 0xf3, 0xff, 0xf0, 0x00, 0x0f, 0xf3, 0xff, 0xf0, 0x00, 0x0f, 0xf3, 0xff, 0xf0, 0x00, 0x3f, + 0xf3, 0xff, 0xf0, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_50 = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_50_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_50_chg.c b/app/boards/arm/corneish_zen/widgets/icons/batt_50_chg.c new file mode 100644 index 00000000000..c2ced92e6ab --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_50_chg.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_50_CHG +#define LV_ATTRIBUTE_IMG_BATT_50_CHG +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_50_CHG uint8_t + batt_50_chg_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x7f, 0xff, 0xf7, 0xbf, 0xf8, + 0xff, 0xff, 0xef, 0xbf, 0xfc, 0xff, 0xff, 0xdf, 0x7f, 0xfc, 0xff, 0xff, 0xbf, 0x7f, 0xfc, + 0xf0, 0x00, 0x7e, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf3, 0xfd, 0xfe, 0x00, 0x3f, + 0xf3, 0xfb, 0xfc, 0x00, 0x3f, 0xf3, 0xf7, 0xfc, 0x00, 0x0f, 0xf3, 0xef, 0xff, 0xe0, 0x0f, + 0xf3, 0xdf, 0xff, 0xc0, 0x0f, 0xf3, 0x80, 0x7f, 0x80, 0x0f, 0xf3, 0xff, 0x7f, 0x00, 0x3f, + 0xf3, 0xfe, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfc, 0x00, 0x3f, 0xf0, 0x01, 0xf8, 0x00, 0x3f, + 0xff, 0xfd, 0xf7, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xff, 0xfb, 0xdf, 0xff, 0xfc, + 0x7f, 0xfb, 0xbf, 0xff, 0xf8, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_50_chg = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_50_chg_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_5_chg.c b/app/boards/arm/corneish_zen/widgets/icons/batt_5_chg.c new file mode 100644 index 00000000000..6a6d9d44604 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_5_chg.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_5_CHG +#define LV_ATTRIBUTE_IMG_BATT_5_CHG +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_5_CHG uint8_t + batt_5_chg_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x7f, 0xff, 0xf7, 0xbf, 0xf8, + 0xff, 0xff, 0xef, 0xbf, 0xfc, 0xff, 0xff, 0xdf, 0x7f, 0xfc, 0xff, 0xff, 0xbf, 0x7f, 0xfc, + 0xf0, 0x00, 0x7e, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf3, 0x01, 0xfe, 0x00, 0x3f, + 0xf3, 0x03, 0xfc, 0x00, 0x3f, 0xf3, 0x07, 0xfc, 0x00, 0x0f, 0xf3, 0x0f, 0xff, 0xe0, 0x0f, + 0xf3, 0x1f, 0xff, 0xc0, 0x0f, 0xf3, 0x00, 0x7f, 0x80, 0x0f, 0xf3, 0x00, 0x7f, 0x00, 0x3f, + 0xf3, 0x00, 0xfe, 0x00, 0x3f, 0xf0, 0x00, 0xfc, 0x00, 0x3f, 0xf0, 0x01, 0xf8, 0x00, 0x3f, + 0xff, 0xfd, 0xf7, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xff, 0xfb, 0xdf, 0xff, 0xfc, + 0x7f, 0xfb, 0xbf, 0xff, 0xf8, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_5_chg = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_5_chg_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_75.c b/app/boards/arm/corneish_zen/widgets/icons/batt_75.c new file mode 100644 index 00000000000..9918386d025 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_75.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_75 +#define LV_ATTRIBUTE_IMG_BATT_75 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_75 uint8_t + batt_75_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf3, 0xff, 0xff, 0xe0, 0x3f, + 0xf3, 0xff, 0xff, 0xe0, 0x3f, 0xf3, 0xff, 0xff, 0xe0, 0x0f, 0xf3, 0xff, 0xff, 0xe0, 0x0f, + 0xf3, 0xff, 0xff, 0xe0, 0x0f, 0xf3, 0xff, 0xff, 0xe0, 0x0f, 0xf3, 0xff, 0xff, 0xe0, 0x3f, + 0xf3, 0xff, 0xff, 0xe0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_75 = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_75_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/batt_75_chg.c b/app/boards/arm/corneish_zen/widgets/icons/batt_75_chg.c new file mode 100644 index 00000000000..422aaabc7b4 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/batt_75_chg.c @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATT_75_CHG +#define LV_ATTRIBUTE_IMG_BATT_75_CHG +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATT_75_CHG uint8_t + batt_75_chg_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x7f, 0xff, 0xf7, 0xbf, 0xf8, + 0xff, 0xff, 0xef, 0xbf, 0xfc, 0xff, 0xff, 0xdf, 0x7f, 0xfc, 0xff, 0xff, 0xbf, 0x7f, 0xfc, + 0xf0, 0x00, 0x7e, 0x00, 0x3f, 0xf0, 0x00, 0xfe, 0x00, 0x3f, 0xf3, 0xfd, 0xfe, 0xe0, 0x3f, + 0xf3, 0xfb, 0xfd, 0xe0, 0x3f, 0xf3, 0xf7, 0xfc, 0x00, 0x0f, 0xf3, 0xef, 0xff, 0xe0, 0x0f, + 0xf3, 0xdf, 0xff, 0xc0, 0x0f, 0xf3, 0x80, 0x7f, 0xa0, 0x0f, 0xf3, 0xff, 0x7f, 0x60, 0x3f, + 0xf3, 0xfe, 0xfe, 0xe0, 0x3f, 0xf0, 0x00, 0xfc, 0x00, 0x3f, 0xf0, 0x01, 0xf8, 0x00, 0x3f, + 0xff, 0xfd, 0xf7, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xff, 0xfb, 0xdf, 0xff, 0xfc, + 0x7f, 0xfb, 0xbf, 0xff, 0xf8, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t batt_75_chg = { + .header.always_zero = 0, + .header.w = 40, + .header.h = 31, + .data_size = 163, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = batt_75_chg_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising.c new file mode 100644 index 00000000000..daeee223a92 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising.c @@ -0,0 +1,42 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING +#define LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING uint8_t + bluetooth_advertising_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, + 0x20, 0x7f, 0x80, 0x00, 0x70, 0x77, 0xc0, 0x00, 0xf8, 0x73, 0xe0, 0xc0, 0x7c, 0x71, + 0xe0, 0xe0, 0x3e, 0x73, 0xc0, 0x70, 0x1f, 0x77, 0x86, 0x30, 0x0f, 0xff, 0x07, 0x30, + 0x07, 0xfe, 0x07, 0x38, 0x03, 0xfc, 0x23, 0x38, 0x01, 0xf8, 0x63, 0x18, 0x01, 0xf8, + 0x63, 0x18, 0x03, 0xfc, 0x23, 0x38, 0x07, 0xfe, 0x07, 0x38, 0x0f, 0xff, 0x07, 0x30, + 0x1f, 0x77, 0x86, 0x70, 0x3e, 0x73, 0xc0, 0x70, 0x7c, 0x71, 0xe0, 0xe0, 0xf8, 0x73, + 0xe0, 0xc0, 0x70, 0x77, 0xc0, 0x00, 0x20, 0x7f, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_advertising = { + .header.always_zero = 0, + .header.w = 29, + .header.h = 35, + .data_size = 148, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_advertising_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_1.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_1.c new file mode 100644 index 00000000000..cf5b8197454 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_1.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_1 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_1 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_1 uint8_t + bluetooth_advertising_1_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x70, 0xf7, 0x80, 0x00, + 0x3f, 0xff, 0xe0, 0xf8, 0xf3, 0xc1, 0xc0, 0x7f, 0xff, 0xe0, 0x7c, 0xf3, 0xe0, 0xc0, 0xff, + 0xff, 0xf0, 0x3e, 0xf7, 0xc0, 0xe0, 0xff, 0x8f, 0xf8, 0x1f, 0xff, 0x84, 0x61, 0xfe, 0x0f, + 0xf8, 0x0f, 0xff, 0x0e, 0x71, 0xfe, 0x0f, 0xf8, 0x07, 0xfe, 0x06, 0x31, 0xff, 0xcf, 0xfc, + 0x03, 0xfc, 0x27, 0x33, 0xff, 0xcf, 0xfc, 0x01, 0xf8, 0x67, 0x33, 0xff, 0xcf, 0xfc, 0x01, + 0xf8, 0x67, 0x33, 0xff, 0xcf, 0xfc, 0x03, 0xfc, 0x27, 0x33, 0xff, 0xcf, 0xfc, 0x07, 0xfe, + 0x06, 0x31, 0xff, 0xcf, 0xfc, 0x0f, 0xff, 0x0e, 0x71, 0xff, 0xcf, 0xf8, 0x1f, 0xff, 0x84, + 0x61, 0xff, 0xcf, 0xf8, 0x3e, 0xf7, 0xc0, 0xe0, 0xff, 0xcf, 0xf8, 0x7c, 0xf3, 0xe1, 0xc0, + 0xff, 0xff, 0xf0, 0xf8, 0xf3, 0xc0, 0xc0, 0x7f, 0xff, 0xe0, 0x70, 0xf7, 0x80, 0x00, 0x3f, + 0xff, 0xe0, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0xfe, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_advertising_1 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_advertising_1_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_2.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_2.c new file mode 100644 index 00000000000..184a5ce856b --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_2.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_2 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_2 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_2 uint8_t + bluetooth_advertising_2_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x60, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xc0, 0xf0, 0xf7, 0xc0, 0x80, + 0x7f, 0xff, 0xe0, 0x78, 0xf3, 0xe1, 0xc0, 0x7f, 0xff, 0xf0, 0x3c, 0xf3, 0xc0, 0xe0, 0xff, + 0x0f, 0xf0, 0x1e, 0xf7, 0x84, 0xe1, 0xfe, 0x07, 0xf8, 0x0f, 0xff, 0x0e, 0x71, 0xfc, 0x63, + 0xf8, 0x07, 0xfe, 0x0e, 0x71, 0xff, 0xf3, 0xfc, 0x03, 0xfc, 0x06, 0x33, 0xff, 0xe3, 0xfc, + 0x01, 0xf8, 0x67, 0x33, 0xff, 0xe7, 0xfc, 0x01, 0xf8, 0xe7, 0x33, 0xff, 0xc7, 0xfc, 0x01, + 0xfc, 0x67, 0x33, 0xff, 0x8f, 0xfc, 0x03, 0xfe, 0x06, 0x33, 0xff, 0x1f, 0xfc, 0x07, 0xff, + 0x0e, 0x71, 0xfe, 0x3f, 0xfc, 0x0f, 0xff, 0x8e, 0x61, 0xfc, 0x03, 0xf8, 0x1e, 0xf7, 0xc0, + 0xe1, 0xfc, 0x03, 0xf8, 0x3c, 0xf3, 0xe0, 0xc0, 0xff, 0xff, 0xf0, 0x78, 0xf3, 0xe1, 0xc0, + 0x7f, 0xff, 0xf0, 0xf0, 0xf7, 0xc0, 0x80, 0x7f, 0xff, 0xe0, 0x60, 0xff, 0x80, 0x00, 0x1f, + 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x03, 0xfc, + 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_advertising_2 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_advertising_2_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_3.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_3.c new file mode 100644 index 00000000000..e9665ff91cb --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_3.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_3 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_3 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_3 uint8_t + bluetooth_advertising_3_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x70, 0xf7, 0x80, 0x00, + 0x3f, 0xff, 0xe0, 0xf8, 0xf3, 0xc1, 0xc0, 0x7f, 0xff, 0xf0, 0x7c, 0xf3, 0xe0, 0xc0, 0xff, + 0x9f, 0xf0, 0x3e, 0xf7, 0xc0, 0xe0, 0xfe, 0x07, 0xf8, 0x1f, 0xff, 0x84, 0x61, 0xfe, 0x03, + 0xf8, 0x0f, 0xff, 0x0e, 0x71, 0xfe, 0xe3, 0xfc, 0x07, 0xfe, 0x06, 0x31, 0xff, 0xe3, 0xfc, + 0x03, 0xfc, 0x27, 0x33, 0xff, 0x87, 0xfc, 0x01, 0xf8, 0x67, 0x33, 0xff, 0x87, 0xfc, 0x01, + 0xf8, 0x67, 0x33, 0xff, 0x83, 0xfc, 0x03, 0xfc, 0x27, 0x33, 0xff, 0xf3, 0xfc, 0x07, 0xfe, + 0x06, 0x31, 0xfe, 0xf3, 0xfc, 0x0f, 0xff, 0x0e, 0x71, 0xfc, 0x63, 0xfc, 0x1f, 0xff, 0x84, + 0x61, 0xfe, 0x03, 0xf8, 0x3e, 0xf7, 0xc0, 0xe0, 0xff, 0x0f, 0xf8, 0x7c, 0xf3, 0xe1, 0xc0, + 0xff, 0xff, 0xf0, 0xf8, 0xf3, 0xc0, 0xc0, 0x7f, 0xff, 0xf0, 0x70, 0xf7, 0x80, 0x00, 0x3f, + 0xff, 0xe0, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0xfe, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_advertising_3 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_advertising_3_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_4.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_4.c new file mode 100644 index 00000000000..d591f17f316 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_4.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_4 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_4 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_4 uint8_t + bluetooth_advertising_4_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x70, 0xf7, 0x80, 0x00, + 0x3f, 0xff, 0xe0, 0xf8, 0xf3, 0xc0, 0xc0, 0x7f, 0xff, 0xe0, 0x7c, 0xf3, 0xe0, 0xc0, 0xff, + 0xff, 0xf0, 0x3e, 0xf7, 0xc0, 0xe0, 0xff, 0xcf, 0xf8, 0x1f, 0xff, 0x84, 0x61, 0xff, 0x8f, + 0xf8, 0x0f, 0xff, 0x0e, 0x71, 0xff, 0x0f, 0xf8, 0x07, 0xfe, 0x06, 0x31, 0xff, 0x0f, 0xfc, + 0x03, 0xfc, 0x27, 0x31, 0xfe, 0x4f, 0xfc, 0x01, 0xf8, 0x67, 0x31, 0xfc, 0x4f, 0xfc, 0x01, + 0xf8, 0x67, 0x33, 0xfc, 0xcf, 0xfc, 0x03, 0xfc, 0x27, 0x31, 0xf8, 0x07, 0xfc, 0x07, 0xfe, + 0x06, 0x31, 0xf8, 0x03, 0xfc, 0x0f, 0xff, 0x0e, 0x71, 0xf8, 0x07, 0xf8, 0x1f, 0xff, 0x84, + 0x61, 0xff, 0xcf, 0xf8, 0x3e, 0xf7, 0xc0, 0xe0, 0xff, 0xcf, 0xf8, 0x7c, 0xf3, 0xe1, 0xc0, + 0xff, 0xff, 0xf0, 0xf8, 0xf3, 0xc0, 0xc0, 0x7f, 0xff, 0xe0, 0x70, 0xf7, 0x80, 0x00, 0x3f, + 0xff, 0xc0, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0xfe, 0x00, 0x00, 0x07, 0xff, + 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_advertising_4 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_advertising_4_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_5.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_5.c new file mode 100644 index 00000000000..88213158197 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_advertising_5.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_5 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_5 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_ADVERTISING_5 uint8_t + bluetooth_advertising_5_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x70, 0xf7, 0x80, 0x00, + 0x3f, 0xff, 0xe0, 0xf8, 0xf3, 0xc0, 0xc0, 0x7f, 0xff, 0xe0, 0x7c, 0xf3, 0xe0, 0xe0, 0xff, + 0xff, 0xf0, 0x3e, 0xf7, 0xc0, 0xe1, 0xfe, 0x07, 0xf8, 0x1f, 0xff, 0x84, 0x61, 0xfe, 0x07, + 0xf8, 0x0f, 0xff, 0x0e, 0x71, 0xfc, 0x7f, 0xf8, 0x07, 0xfe, 0x06, 0x33, 0xfc, 0x7f, 0xfc, + 0x03, 0xfc, 0x27, 0x33, 0xfc, 0x07, 0xfc, 0x01, 0xf8, 0x67, 0x33, 0xfc, 0x03, 0xfc, 0x01, + 0xf8, 0x67, 0x33, 0xff, 0x63, 0xfc, 0x03, 0xfc, 0x27, 0x33, 0xff, 0xf3, 0xfc, 0x07, 0xfe, + 0x06, 0x33, 0xfe, 0xf3, 0xfc, 0x0f, 0xff, 0x0e, 0x71, 0xfc, 0x63, 0xf8, 0x1f, 0xff, 0x84, + 0x61, 0xfe, 0x07, 0xf8, 0x3e, 0xf7, 0xc0, 0xe0, 0xff, 0x0f, 0xf8, 0x7c, 0xf3, 0xe1, 0xc0, + 0xff, 0xff, 0xf0, 0xf8, 0xf3, 0xc0, 0xc0, 0x7f, 0xff, 0xe0, 0x70, 0xf7, 0x80, 0x00, 0x3f, + 0xff, 0xc0, 0x20, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0xfe, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_advertising_5 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_advertising_5_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_1.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_1.c new file mode 100644 index 00000000000..a3cb5a2cd2d --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_1.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_1 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_1 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_1 uint8_t + bluetooth_connected_1_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0xc0, 0x78, 0x77, 0xc0, 0x00, + 0x3f, 0xff, 0xe0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x3e, 0x71, 0xe0, 0x00, 0xff, + 0xff, 0xf0, 0x1f, 0x73, 0xc0, 0x00, 0xff, 0x8f, 0xf8, 0x0f, 0xff, 0x80, 0x01, 0xfe, 0x0f, + 0xf8, 0x87, 0xff, 0x08, 0x01, 0xfe, 0x0f, 0xf8, 0xc3, 0xfe, 0x18, 0x01, 0xff, 0xcf, 0xfc, + 0xe1, 0xfc, 0x38, 0x03, 0xff, 0xcf, 0xfc, 0xf0, 0xf8, 0x78, 0x03, 0xff, 0xcf, 0xfc, 0xf0, + 0xfc, 0x78, 0x03, 0xff, 0xcf, 0xfc, 0xe1, 0xfc, 0x38, 0x03, 0xff, 0xcf, 0xfc, 0xc3, 0xfe, + 0x18, 0x01, 0xff, 0xcf, 0xfc, 0x87, 0xff, 0x08, 0x01, 0xff, 0xcf, 0xf8, 0x0f, 0xff, 0x80, + 0x01, 0xff, 0xcf, 0xf8, 0x1e, 0x73, 0xc0, 0x00, 0xff, 0xcf, 0xf8, 0x3c, 0x71, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x78, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x78, 0x77, 0xc0, 0x00, 0x3f, + 0xff, 0xe0, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_connected_1 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_connected_1_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_2.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_2.c new file mode 100644 index 00000000000..2ce5b939425 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_2.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_2 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_2 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_2 uint8_t + bluetooth_connected_2_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0xc0, 0x78, 0x73, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x7c, 0x71, 0xe0, 0x00, 0x7f, 0xff, 0xf0, 0x3e, 0x73, 0xe0, 0x00, 0xff, + 0x0f, 0xf0, 0x1f, 0x77, 0xc0, 0x01, 0xfe, 0x07, 0xf8, 0x0f, 0xff, 0x80, 0x01, 0xfc, 0x63, + 0xf8, 0x87, 0xff, 0x08, 0x01, 0xff, 0xf3, 0xfc, 0xc3, 0xfe, 0x18, 0x03, 0xff, 0xe3, 0xfc, + 0xe1, 0xfc, 0x38, 0x03, 0xff, 0xe7, 0xfc, 0xf0, 0xf8, 0x78, 0x03, 0xff, 0xc7, 0xfc, 0xe1, + 0xfc, 0x38, 0x03, 0xff, 0x8f, 0xfc, 0xc3, 0xfe, 0x18, 0x03, 0xff, 0x1f, 0xfc, 0x87, 0xff, + 0x08, 0x01, 0xfe, 0x3f, 0xfc, 0x0f, 0xff, 0x80, 0x01, 0xfc, 0x03, 0xf8, 0x1f, 0x77, 0xc0, + 0x01, 0xfc, 0x03, 0xf8, 0x3e, 0x73, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x7c, 0x71, 0xe0, 0x00, + 0x7f, 0xff, 0xf0, 0x78, 0x73, 0xc0, 0x00, 0x7f, 0xff, 0xe0, 0x30, 0x7f, 0x80, 0x00, 0x1f, + 0xff, 0xc0, 0x00, 0x7f, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x03, 0xfc, + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_connected_2 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_connected_2_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_3.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_3.c new file mode 100644 index 00000000000..edac091f618 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_3.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_3 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_3 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_3 uint8_t + bluetooth_connected_3_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0xc0, 0x78, 0x77, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xf0, 0x3e, 0x71, 0xe0, 0x00, 0xff, + 0x9f, 0xf0, 0x1f, 0x73, 0xc0, 0x01, 0xfe, 0x07, 0xf8, 0x0f, 0xff, 0x80, 0x01, 0xfc, 0x03, + 0xf8, 0x87, 0xff, 0x08, 0x01, 0xfe, 0xe3, 0xfc, 0xc3, 0xfe, 0x18, 0x03, 0xff, 0xe3, 0xfc, + 0xe1, 0xfc, 0x38, 0x03, 0xff, 0x87, 0xfc, 0xf0, 0xf8, 0x78, 0x03, 0xff, 0x87, 0xfc, 0xf0, + 0xfc, 0x78, 0x03, 0xff, 0x83, 0xfc, 0xe1, 0xfe, 0x38, 0x03, 0xff, 0xf3, 0xfc, 0xc3, 0xff, + 0x18, 0x03, 0xfe, 0xf3, 0xfc, 0x87, 0xff, 0x88, 0x01, 0xfc, 0x63, 0xf8, 0x0f, 0xf7, 0xc0, + 0x01, 0xfe, 0x03, 0xf8, 0x1f, 0x73, 0xe0, 0x01, 0xff, 0x0f, 0xf8, 0x3e, 0x71, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x78, 0x77, 0xc0, 0x00, 0x3f, + 0xff, 0xe0, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_connected_3 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_connected_3_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_4.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_4.c new file mode 100644 index 00000000000..e79d6cb6d6c --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_4.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_4 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_4 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_4 uint8_t + bluetooth_connected_4_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x07, 0xff, 0x00, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x78, 0x77, 0xc0, 0x00, + 0x3f, 0xff, 0xe0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x3e, 0x71, 0xe0, 0x00, 0xff, + 0xff, 0xf0, 0x1f, 0x73, 0xc0, 0x00, 0xff, 0xcf, 0xf8, 0x0f, 0xff, 0x80, 0x01, 0xff, 0x8f, + 0xf8, 0x87, 0xff, 0x08, 0x01, 0xff, 0x0f, 0xf8, 0xc3, 0xfe, 0x18, 0x01, 0xff, 0x0f, 0xfc, + 0xe1, 0xfc, 0x38, 0x03, 0xfe, 0x4f, 0xfc, 0xf0, 0xf8, 0x78, 0x03, 0xfc, 0x4f, 0xfc, 0xf0, + 0xfc, 0x78, 0x03, 0xfc, 0xcf, 0xfc, 0xe1, 0xfe, 0x38, 0x03, 0xf8, 0xc7, 0xfc, 0xc3, 0xff, + 0x18, 0x01, 0xf8, 0x03, 0xfc, 0x87, 0xff, 0x88, 0x01, 0xf8, 0x03, 0xf8, 0x0f, 0xf7, 0xc0, + 0x01, 0xff, 0xcf, 0xf8, 0x1f, 0x73, 0xe0, 0x00, 0xff, 0xcf, 0xf8, 0x3e, 0x71, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x78, 0x77, 0xc0, 0x00, 0x3f, + 0xff, 0xe0, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_connected_4 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_connected_4_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_5.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_5.c new file mode 100644 index 00000000000..b567aa2dfe0 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_5.c @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_5 +#define LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_5 +#endif +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_5 uint8_t + bluetooth_connected_5_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x0f, 0xff, 0x00, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x78, 0x77, 0xc0, 0x00, + 0x3f, 0xff, 0xe0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x3e, 0x71, 0xe0, 0x00, 0xff, + 0xff, 0xf0, 0x1f, 0x73, 0xc0, 0x01, 0xfe, 0x07, 0xf8, 0x0f, 0xff, 0x80, 0x01, 0xfe, 0x07, + 0xf8, 0x87, 0xff, 0x08, 0x01, 0xfc, 0x7f, 0xf8, 0xc3, 0xfe, 0x18, 0x03, 0xfc, 0x7f, 0xfc, + 0xe1, 0xfc, 0x38, 0x03, 0xfc, 0x07, 0xfc, 0xf0, 0xf8, 0x78, 0x03, 0xfc, 0x03, 0xfc, 0xf0, + 0xfc, 0x78, 0x03, 0xff, 0x63, 0xfc, 0xe1, 0xfe, 0x38, 0x03, 0xff, 0xf3, 0xfc, 0xc3, 0xff, + 0x18, 0x03, 0xfe, 0xf3, 0xfc, 0x87, 0xff, 0x88, 0x01, 0xfc, 0x63, 0xf8, 0x0f, 0xf7, 0xc0, + 0x01, 0xfe, 0x07, 0xf8, 0x1e, 0x73, 0xc0, 0x00, 0xff, 0x0f, 0xf8, 0x3c, 0x71, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x7c, 0x73, 0xe0, 0x00, 0x7f, 0xff, 0xe0, 0x78, 0x77, 0xc0, 0x00, 0x3f, + 0xff, 0xc0, 0x30, 0x7f, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_connected_5 = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 254, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_connected_5_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_right.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_right.c new file mode 100644 index 00000000000..2a28a9039a5 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_connected_right.c @@ -0,0 +1,49 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_RIGHT +#define LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_RIGHT +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BLUETOOTH_CONNECTED_RIGHT + uint8_t bluetooth_connected_right_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x3f, 0x80, + 0x00, 0x0f, 0xfe, 0x00, 0x10, 0x3f, 0xc0, 0x00, 0x3f, 0xff, 0x80, 0x38, 0x3b, 0xe0, 0x00, + 0x7f, 0xff, 0xc0, 0x7c, 0x39, 0xf0, 0x00, 0xff, 0xff, 0xe0, 0x3e, 0x38, 0xf0, 0x01, 0xff, + 0xff, 0xf0, 0x1f, 0x39, 0xe0, 0x01, 0xff, 0xfe, 0x30, 0x0f, 0xbb, 0xc0, 0x03, 0xff, 0xfc, + 0x38, 0x87, 0xff, 0x84, 0x03, 0xff, 0xf8, 0x38, 0xc3, 0xff, 0x0c, 0x07, 0xff, 0xf0, 0x3c, + 0xe1, 0xfe, 0x1c, 0x07, 0xcf, 0xe0, 0x7c, 0xf0, 0xfc, 0x3c, 0x07, 0x87, 0xc0, 0xfc, 0xf0, + 0xfc, 0x3c, 0x07, 0x83, 0x81, 0xfc, 0xe1, 0xfe, 0x1c, 0x07, 0x81, 0x03, 0xfc, 0xc3, 0xff, + 0x0c, 0x07, 0xc0, 0x07, 0xfc, 0x87, 0xff, 0x84, 0x07, 0xe0, 0x0f, 0xfc, 0x0f, 0xbb, 0xc0, + 0x03, 0xf0, 0x1f, 0xf8, 0x1f, 0x39, 0xe0, 0x03, 0xf8, 0x3f, 0xf8, 0x3e, 0x38, 0xf0, 0x01, + 0xfc, 0xff, 0xf0, 0x7c, 0x39, 0xf0, 0x01, 0xff, 0xff, 0xf0, 0x38, 0x3b, 0xe0, 0x00, 0xff, + 0xff, 0xe0, 0x10, 0x3f, 0xc0, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x3f, 0xff, + 0x80, 0x00, 0x3f, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x03, 0xf8, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_connected_right = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 253, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_connected_right_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/bluetooth_disconnected_right.c b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_disconnected_right.c new file mode 100644 index 00000000000..37974d698f6 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/bluetooth_disconnected_right.c @@ -0,0 +1,49 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_DISCONNECTED_RIGHT +#define LV_ATTRIBUTE_IMG_BLUETOOTH_DISCONNECTED_RIGHT +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BLUETOOTH_DISCONNECTED_RIGHT + uint8_t bluetooth_disconnected_right_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x3f, 0x80, + 0x00, 0x0f, 0xfe, 0x00, 0x10, 0x3f, 0xc0, 0x00, 0x3f, 0xff, 0x80, 0x38, 0x3b, 0xe0, 0x00, + 0x7f, 0xff, 0xc0, 0x7c, 0x39, 0xf0, 0x00, 0xff, 0xff, 0xe0, 0x3e, 0x38, 0xf0, 0x01, 0xff, + 0xff, 0xf0, 0x1f, 0x39, 0xe0, 0x01, 0xe3, 0xf8, 0xf0, 0x0f, 0xbb, 0xc0, 0x03, 0xe1, 0xf0, + 0xf8, 0x07, 0xff, 0x80, 0x03, 0xe0, 0xe0, 0xf8, 0x03, 0xff, 0x00, 0x07, 0xf0, 0x01, 0xfc, + 0x01, 0xfe, 0x00, 0x07, 0xf8, 0x03, 0xfc, 0x00, 0xfc, 0x00, 0x07, 0xfc, 0x07, 0xfc, 0x00, + 0xfc, 0x00, 0x07, 0xfc, 0x07, 0xfc, 0x01, 0xfe, 0x00, 0x07, 0xfc, 0x07, 0xfc, 0x03, 0xff, + 0x00, 0x07, 0xf8, 0x03, 0xfc, 0x07, 0xff, 0x80, 0x07, 0xf0, 0x01, 0xfc, 0x0f, 0xbb, 0xc0, + 0x03, 0xe0, 0xe0, 0xf8, 0x1f, 0x39, 0xe0, 0x03, 0xe1, 0xf0, 0xf8, 0x3e, 0x38, 0xf0, 0x01, + 0xe3, 0xf8, 0xf0, 0x7c, 0x39, 0xf0, 0x01, 0xff, 0xff, 0xf0, 0x38, 0x3b, 0xe0, 0x00, 0xff, + 0xff, 0xe0, 0x10, 0x3f, 0xc0, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x3f, 0xff, + 0x80, 0x00, 0x3f, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x03, 0xf8, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t bluetooth_disconnected_right = { + .header.always_zero = 0, + .header.w = 54, + .header.h = 35, + .data_size = 253, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = bluetooth_disconnected_right_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/layers.c b/app/boards/arm/corneish_zen/widgets/icons/layers.c new file mode 100644 index 00000000000..86bc8dfcfe8 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/layers.c @@ -0,0 +1,44 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_LAYERS +#define LV_ATTRIBUTE_IMG_LAYERS +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_LAYERS uint8_t + layers_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x01, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x00, + 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x07, 0x9f, 0xff, 0x3c, 0x00, + 0x1e, 0x07, 0xfc, 0x0f, 0x00, 0x38, 0x01, 0xe0, 0x03, 0x80, 0x30, 0x00, 0x00, 0x01, 0x80, + 0x38, 0x00, 0x00, 0x03, 0x80, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, + 0x01, 0xf0, 0x01, 0xf0, 0x00, 0x07, 0xfc, 0x07, 0xfc, 0x00, 0x1f, 0xff, 0x1f, 0xff, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0x00, + 0x07, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t layers = { + .header.always_zero = 0, + .header.w = 35, + .header.h = 35, + .data_size = 183, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = layers_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/layers2.c b/app/boards/arm/corneish_zen/widgets/icons/layers2.c new file mode 100644 index 00000000000..068b07576ae --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/layers2.c @@ -0,0 +1,40 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_LAYERS2 +#define LV_ATTRIBUTE_IMG_LAYERS2 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_LAYERS2 uint8_t + layers2_map[] = { + 0x00, 0x00, 0x00, 0xff, /*Color of index 0*/ + 0xff, 0xff, 0xff, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x30, 0x0f, 0x18, 0xdf, 0xdf, 0xc0, 0x04, 0x00, + 0x00, 0x80, 0x30, 0x19, 0x98, 0xd8, 0x18, 0xe0, 0x0e, 0x00, 0x00, 0x80, 0x30, 0x30, 0xd8, + 0xd8, 0x18, 0xe0, 0x1f, 0x00, 0x00, 0x80, 0x30, 0x30, 0xcf, 0x9f, 0xd9, 0xc0, 0x04, 0x00, + 0x00, 0x80, 0x30, 0x3f, 0xc7, 0x18, 0x1f, 0x80, 0x04, 0x00, 0x03, 0xe0, 0x30, 0x39, 0xc6, + 0x18, 0x1b, 0x80, 0x04, 0x00, 0x01, 0xc0, 0x3f, 0xb0, 0xc6, 0x1f, 0xd9, 0xc0, 0x04, 0x00, + 0x00, 0x80, 0x3f, 0xb0, 0xc6, 0x1f, 0xd8, 0xe0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t layers2 = { + .header.always_zero = 0, + .header.w = 78, + .header.h = 12, + .data_size = 128, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = layers2_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/icons/zenlogo.c b/app/boards/arm/corneish_zen/widgets/icons/zenlogo.c new file mode 100644 index 00000000000..cc424041645 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/icons/zenlogo.c @@ -0,0 +1,58 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_ZENLOGO +#define LV_ATTRIBUTE_IMG_ZENLOGO +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_ZENLOGO uint8_t + zenlogo_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0xe3, 0xe3, 0x9e, + 0x3e, 0x02, 0x72, 0xe0, 0x00, 0x00, 0x06, 0x36, 0x36, 0x33, 0x63, 0x02, 0x8b, 0x10, 0x00, + 0x00, 0x04, 0x14, 0x14, 0x21, 0x41, 0x02, 0x82, 0x10, 0x00, 0x00, 0x04, 0x04, 0x14, 0x21, + 0x7f, 0x7a, 0x72, 0x10, 0x00, 0x00, 0x04, 0x04, 0x14, 0x21, 0x40, 0x02, 0x0a, 0x10, 0x00, + 0x00, 0x04, 0x14, 0x14, 0x21, 0x41, 0x02, 0x0a, 0x10, 0x00, 0x00, 0x06, 0x36, 0x34, 0x21, + 0x63, 0x02, 0x8a, 0x10, 0x00, 0x00, 0x03, 0xe3, 0xe4, 0x21, 0x3e, 0x02, 0x72, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x03, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xf1, + 0xf8, 0x00, 0x60, 0x0f, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xfb, 0xff, 0xe0, 0xf8, 0x1f, 0x80, + 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xfc, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc1, 0xfc, 0x1f, 0x00, 0x7f, 0xc0, 0x1f, 0xff, 0xff, 0xe0, 0x01, 0xfc, 0x3e, 0x00, + 0x40, 0x1f, 0xff, 0xe0, 0xff, 0xc0, 0x07, 0xfc, 0xfc, 0x00, 0xdf, 0xff, 0x80, 0x01, 0xff, + 0xc0, 0x0f, 0xdc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x8f, 0x1f, 0x9f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xef, 0xff, 0x1f, 0x9f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x8f, + 0xff, 0x3f, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0xfe, 0x3f, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x03, 0xf8, 0x1f, 0x80, 0x7e, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x3e, + 0x00, 0x7e, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x3c, 0x00, 0x7e, 0x0f, 0xc0, 0x00, + 0x00, 0x00, 0x1f, 0xf8, 0x3c, 0x00, 0x78, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xbc, + 0x00, 0x78, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0xf8, 0x0f, 0xc0, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x0f, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, + 0xff, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x0f, 0xff, 0xa0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t zenlogo = { + .header.always_zero = 0, + .header.w = 80, + .header.h = 38, + .data_size = 388, + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .data = zenlogo_map, +}; diff --git a/app/boards/arm/corneish_zen/widgets/layer_status.c b/app/boards/arm/corneish_zen/widgets/layer_status.c new file mode 100644 index 00000000000..a309a787f5e --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/layer_status.c @@ -0,0 +1,67 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include "layer_status.h" +#include +#include +#include +#include + +static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); + +struct layer_status_state { + uint8_t index; + const char *label; +}; + +static void set_layer_symbol(lv_obj_t *label, struct layer_status_state state) { + const char *layer_label = state.label; + uint8_t active_layer_index = state.index; + + if (layer_label == NULL) { + char text[6] = {}; + + sprintf(text, " %i", active_layer_index); + + lv_label_set_text(label, text); + } else { + lv_label_set_text(label, layer_label); + } +} + +static void layer_status_update_cb(struct layer_status_state state) { + struct zmk_widget_layer_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_layer_symbol(widget->obj, state); } +} + +static struct layer_status_state layer_status_get_state(const zmk_event_t *eh) { + uint8_t index = zmk_keymap_highest_layer_active(); + return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_label(index)}; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, layer_status_update_cb, + layer_status_get_state) + +ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); + +int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent) { + widget->obj = lv_label_create(parent, NULL); + + sys_slist_append(&widgets, &widget->node); + + widget_layer_status_init(); + return 0; +} + +lv_obj_t *zmk_widget_layer_status_obj(struct zmk_widget_layer_status *widget) { + return widget->obj; +} \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/widgets/layer_status.h b/app/boards/arm/corneish_zen/widgets/layer_status.h new file mode 100644 index 00000000000..04f32faac01 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/layer_status.h @@ -0,0 +1,19 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include +#include + +struct zmk_widget_layer_status { + sys_snode_t node; + lv_obj_t *obj; +}; + +int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent); +lv_obj_t *zmk_widget_layer_status_obj(struct zmk_widget_layer_status *widget); \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/widgets/output_status.c b/app/boards/arm/corneish_zen/widgets/output_status.c new file mode 100644 index 00000000000..bd69bbb1801 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/output_status.c @@ -0,0 +1,138 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include "output_status.h" +#include +#include +#include +#include +#include +#include +#include + +LV_IMG_DECLARE(bluetooth_advertising); +LV_IMG_DECLARE(bluetooth_connected_right); +LV_IMG_DECLARE(bluetooth_disconnected_right); +LV_IMG_DECLARE(bluetooth_connected_1); +LV_IMG_DECLARE(bluetooth_connected_2); +LV_IMG_DECLARE(bluetooth_connected_3); +LV_IMG_DECLARE(bluetooth_connected_4); +LV_IMG_DECLARE(bluetooth_connected_5); +LV_IMG_DECLARE(bluetooth_advertising_1); +LV_IMG_DECLARE(bluetooth_advertising_2); +LV_IMG_DECLARE(bluetooth_advertising_3); +LV_IMG_DECLARE(bluetooth_advertising_4); +LV_IMG_DECLARE(bluetooth_advertising_5); +LV_IMG_DECLARE(USB_connected); + +static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); + +struct output_status_state { + enum zmk_endpoint selected_endpoint; + bool active_profile_connected; + bool active_profile_bonded; + uint8_t active_profile_index; +}; + +static struct output_status_state get_state(const zmk_event_t *_eh) { + return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), + .active_profile_connected = + zmk_ble_active_profile_is_connected(), + .active_profile_bonded = !zmk_ble_active_profile_is_open(), + .active_profile_index = zmk_ble_active_profile_index()}; + ; +} + +static void set_status_symbol(lv_obj_t *icon, struct output_status_state state) { + switch (state.selected_endpoint) { + case ZMK_ENDPOINT_USB: + lv_img_set_src(icon, &USB_connected); + break; + case ZMK_ENDPOINT_BLE: + if (state.active_profile_bonded) { + if (state.active_profile_connected) { + // sprintf(text, LV_SYMBOL_BLUETOOTH "%i " LV_SYMBOL_OK, active_profile_index); + switch (state.active_profile_index) { + case 0: + lv_img_set_src(icon, &bluetooth_connected_1); + break; + case 1: + lv_img_set_src(icon, &bluetooth_connected_2); + break; + case 2: + lv_img_set_src(icon, &bluetooth_connected_3); + break; + case 3: + lv_img_set_src(icon, &bluetooth_connected_4); + break; + case 4: + lv_img_set_src(icon, &bluetooth_connected_5); + break; + } + } else { + lv_img_set_src(icon, &bluetooth_disconnected_right); + } + } else { + switch (state.active_profile_index) { + case 0: + lv_img_set_src(icon, &bluetooth_advertising_1); + break; + case 1: + lv_img_set_src(icon, &bluetooth_advertising_2); + break; + case 2: + lv_img_set_src(icon, &bluetooth_advertising_3); + break; + case 3: + lv_img_set_src(icon, &bluetooth_advertising_4); + break; + case 4: + lv_img_set_src(icon, &bluetooth_advertising_5); + break; + } + } + break; + } +} + +static void output_status_update_cb(struct output_status_state state) { + struct zmk_widget_output_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_status_symbol(widget->obj, state); } +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, + output_status_update_cb, get_state) +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); + +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) +ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); +#endif +#if defined(CONFIG_ZMK_BLE) +ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); +#endif + +int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent) { + widget->obj = lv_img_create(parent, NULL); + + lv_obj_set_size(widget->obj, 40, 15); + + sys_slist_append(&widgets, &widget->node); + + widget_output_status_init(); + return 0; +} + +lv_obj_t *zmk_widget_output_status_obj(struct zmk_widget_output_status *widget) { + return widget->obj; +} diff --git a/app/boards/arm/corneish_zen/widgets/output_status.h b/app/boards/arm/corneish_zen/widgets/output_status.h new file mode 100644 index 00000000000..c171e2bb892 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/output_status.h @@ -0,0 +1,19 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include +#include + +struct zmk_widget_output_status { + sys_snode_t node; + lv_obj_t *obj; +}; + +int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent); +lv_obj_t *zmk_widget_output_status_obj(struct zmk_widget_output_status *widget); \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/widgets/peripheral_status.c b/app/boards/arm/corneish_zen/widgets/peripheral_status.c new file mode 100644 index 00000000000..e18414be847 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/peripheral_status.c @@ -0,0 +1,61 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include "peripheral_status.h" +#include +#include +#include + +LV_IMG_DECLARE(bluetooth_connected_right); +LV_IMG_DECLARE(bluetooth_disconnected_right); + +static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); + +struct peripheral_status_state { + bool connected; +}; + +static struct peripheral_status_state get_state(const zmk_event_t *_eh) { + return (struct peripheral_status_state){.connected = zmk_split_bt_peripheral_is_connected()}; +} + +static void set_status_symbol(lv_obj_t *icon, struct peripheral_status_state state) { + LOG_DBG("halves connected? %s", state.connected ? "true" : "false"); + + lv_img_set_src(icon, + state.connected ? &bluetooth_connected_right : &bluetooth_disconnected_right); +} + +static void output_status_update_cb(struct peripheral_status_state state) { + struct zmk_widget_peripheral_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_status_symbol(widget->obj, state); } +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_peripheral_status, struct peripheral_status_state, + output_status_update_cb, get_state) +ZMK_SUBSCRIPTION(widget_peripheral_status, zmk_split_peripheral_status_changed); + +int zmk_widget_peripheral_status_init(struct zmk_widget_peripheral_status *widget, + lv_obj_t *parent) { + widget->obj = lv_img_create(parent, NULL); + + sys_slist_append(&widgets, &widget->node); + + widget_peripheral_status_init(); + return 0; +} + +lv_obj_t *zmk_widget_peripheral_status_obj(struct zmk_widget_peripheral_status *widget) { + return widget->obj; +} diff --git a/app/boards/arm/corneish_zen/widgets/peripheral_status.h b/app/boards/arm/corneish_zen/widgets/peripheral_status.h new file mode 100644 index 00000000000..596757636a2 --- /dev/null +++ b/app/boards/arm/corneish_zen/widgets/peripheral_status.h @@ -0,0 +1,20 @@ +/* + * + * Copyright (c) 2021 Darryl deHaan + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include +#include + +struct zmk_widget_peripheral_status { + sys_snode_t node; + lv_obj_t *obj; +}; + +int zmk_widget_peripheral_status_init(struct zmk_widget_peripheral_status *widget, + lv_obj_t *parent); +lv_obj_t *zmk_widget_peripheral_status_obj(struct zmk_widget_peripheral_status *widget); \ No newline at end of file diff --git a/app/package-lock.json b/app/package-lock.json index afd730a51b1..ed8765f35e2 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,27 +9,30 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { - "prettier": "^2.4.0" + "prettier": "^2.7.1" } }, "node_modules/prettier": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", - "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } } }, "dependencies": { "prettier": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", - "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true } } diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index ee9775569a4..a503cc46e35 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -13,7 +13,6 @@ if ZMK_DISPLAY config ZMK_DISPLAY_BLANK_ON_IDLE bool "Blank display on idle" - default y choice LVGL_TXT_ENC default LVGL_TXT_ENC_UTF8 diff --git a/app/src/display/main.c b/app/src/display/main.c index 9de0ad7f2db..8a70cef2413 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -73,6 +73,8 @@ static void start_display_updates() { k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS)); } +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) + static void stop_display_updates() { if (display == NULL) { return; @@ -83,6 +85,8 @@ static void stop_display_updates() { k_timer_stop(&display_timer); } +#endif + int zmk_display_is_initialized() { return initialized; } void initialize_display(struct k_work *work) { @@ -94,6 +98,8 @@ void initialize_display(struct k_work *work) { return; } + initialized = true; + screen = zmk_display_status_screen(); if (screen == NULL) { @@ -104,8 +110,6 @@ void initialize_display(struct k_work *work) { lv_scr_load(screen); start_display_updates(); - - initialized = true; } K_WORK_DEFINE(init_work, initialize_display); From ebb4cb76d364a704aa05a62ef322875d86795585 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 4 Nov 2022 17:02:23 -0700 Subject: [PATCH 0573/1130] fix(boards): Add Zen .conf file for setup script --- app/boards/arm/corneish_zen/corneish_zen.conf | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 app/boards/arm/corneish_zen/corneish_zen.conf diff --git a/app/boards/arm/corneish_zen/corneish_zen.conf b/app/boards/arm/corneish_zen/corneish_zen.conf new file mode 100644 index 00000000000..a2e1fbe63c1 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen.conf @@ -0,0 +1,5 @@ +# Go to sleep after one hour (1*60*60*1000ms) +CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=3600000 + +# Turn on logging, and set ZMK logging to debug output +# CONFIG_ZMK_USB_LOGGING=y From b8fb218a0195974a3df8367670051acf864d395e Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 16 Dec 2022 14:43:47 -0800 Subject: [PATCH 0574/1130] fix(setup): Make keymap/conf fall back to using dirname --- docs/src/templates/setup.ps1.mustache | 35 +++++++++++++++++---------- docs/src/templates/setup.sh.mustache | 24 ++++++++++-------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index 54c5ae82548..a2bf0c58a58 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -209,27 +209,36 @@ Set-Location "$repo_name" Push-Location config -$config_file = "${keyboard}.conf" -$keymap_file = "${keyboard}.keymap" - if ($keyboard_type -eq "shield") { - $config_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${basedir}/${keyboard}.conf" - $keymap_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${basedir}/${keyboard}.keymap" + $url_base = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${basedir}" } else { - $config_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${basedir}/${keyboard}.conf" - $keymap_url = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${basedir}/${keyboard}.keymap" + $url_base = "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${basedir}" } -Write-Host "Downloading config file (${config_url})" +Write-Host "Downloading config file (${url_base}/${keyboard}.conf)" Try { - Invoke-RestMethod -Uri "${config_url}" -OutFile "${config_file}" + Invoke-RestMethod -Uri "${config_url}" -OutFile "${keyboard}.conf" } Catch { - Set-Content -Path $config_file "# Place configuration items here" + Try { + Write-Host "Could not find it, falling back to ${url_base}/${basedir}.conf" + Invoke-RestMethod -Uri "${url_base}/${basedir}.conf" -OutFile "${basedir}.conf" + } Catch { + Set-Content -Path "${keyboard}.conf" "# Put configuration options here" + } } if ($copy_keymap -eq "yes") { - Write-Host "Downloading keymap file (${keymap_url})" - Invoke-RestMethod -Uri "${keymap_url}" -OutFile "${keymap_file}" + Write-Host "Downloading keymap file (${url_base}/${keyboard}.keymap)" + Try { + Invoke-RestMethod -Uri "${url_base}/${keyboard}.keymap" -OutFile "${keyboard}.keymap" + } Catch { + Write-Host "Could not find it, falling back to ${url_base}/${basedir}.keymap" + Try { + Invoke-RestMethod -Uri "${url_base}/${basedir}.keymap" -OutFile "${basedir}.keymap" + } Catch { + Write-Host "Warning: Could not find a keymap file to download!" + } + } } Pop-Location @@ -264,7 +273,7 @@ if ($github_repo -ne "") { Write-Host " git remote rm origin" Write-Host " git remote add origin FIXED_URL" Write-Host " git push --set-upstream origin $(git symbolic-ref --short HEAD)" - Write-Host "Once pushed, your firmware should be availalbe from GitHub Actions at: $actions" + Write-Host "Once pushed, your firmware should be available from GitHub Actions at: $actions" exit 1 } diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index 3184aab2502..4c3868ec45d 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -205,19 +205,23 @@ cd ${repo_name} pushd config if [ "$keyboard_shield" == "y" ]; then - config_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${keyboard_basedir}/${shield}.conf" - - keymap_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${keyboard_basedir}/${shield}.keymap" + url_base="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${keyboard_basedir}" else - config_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${keyboard_basedir}/${board}.conf" - keymap_file="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${keyboard_basedir}/${board}.keymap" + url_base="https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/${keyboard_arch}/${keyboard_basedir}" +fi + +echo "Downloading config file (${url_base}/${keyboard}.conf)" +if ! $download_command "${url_base}/${keyboard}.conf"; then + echo "Could not find it, falling back to ${url_base}/${keyboard_basedir}.conf" + $download_command "${url_base}/${keyboard_basedir}.conf" || echo "# Put configuration options here" > "${keyboard}.conf" fi -echo "Downloading config file (${config_file})" -$download_command "${config_file}" || echo "# Put configuration options here" > "${keyboard}.conf" if [ "$copy_keymap" == "yes" ]; then - echo "Downloading keymap file (${keymap_file})" - $download_command "${keymap_file}" + echo "Downloading keymap file (${url_base}/${keyboard}.keymap)" + if ! $download_command "${url_base}/${keyboard}.keymap"; then + echo "Could not find it, falling back to ${url_base}/${keyboard_basedir}.keymap" + $download_command "${url_base}/${keyboard_basedir}.keymap" || echo "Warning: Could not find a keymap file to download!" + fi fi popd @@ -254,7 +258,7 @@ if [ -n "$github_repo" ]; then echo " git remote rm origin" echo " git remote add origin FIXED_URL" echo " git push --set-upstream origin $(git symbolic-ref --short HEAD)" - echo "Once pushed, your firmware should be availalbe from GitHub Actions at: ${github_repo%.git}/actions" + echo "Once pushed, your firmware should be available from GitHub Actions at: ${github_repo%.git}/actions" exit 1 fi From 781df31ec482039cf1ca75564853126157aa094f Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 17 Dec 2022 15:34:24 -0800 Subject: [PATCH 0575/1130] fix(setup): Fix conf download path in PS script --- docs/src/templates/setup.ps1.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index a2bf0c58a58..f90c74889e1 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -217,7 +217,7 @@ if ($keyboard_type -eq "shield") { Write-Host "Downloading config file (${url_base}/${keyboard}.conf)" Try { - Invoke-RestMethod -Uri "${config_url}" -OutFile "${keyboard}.conf" + Invoke-RestMethod -Uri "${url_base}/${keyboard}.conf" -OutFile "${keyboard}.conf" } Catch { Try { Write-Host "Could not find it, falling back to ${url_base}/${basedir}.conf" From 5cbe572f7df46ea01d9f0d16ac0c120c7ae3d017 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 18 Dec 2022 12:54:58 -0800 Subject: [PATCH 0576/1130] fix(display): Re-default to blank on idle for OLEDs --- app/src/display/Kconfig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index a503cc46e35..c07533588c0 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -6,13 +6,14 @@ menuconfig ZMK_DISPLAY default n select DISPLAY select LVGL - select LVGL_THEMES - select LVGL_THEME_MONO + select LVGL_THEMES + select LVGL_THEME_MONO if ZMK_DISPLAY config ZMK_DISPLAY_BLANK_ON_IDLE bool "Blank display on idle" + default y if SSD1306 choice LVGL_TXT_ENC default LVGL_TXT_ENC_UTF8 From 11ca0098a5920aaa59738af9ccca3dca725d43f7 Mon Sep 17 00:00:00 2001 From: as29 Date: Tue, 20 Dec 2022 15:24:32 -0500 Subject: [PATCH 0577/1130] fix(docs): Disable encoders in dtsi (#1600) --- docs/docs/development/new-shield.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index ea26f6ebd73..2e468fe0b57 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -461,6 +461,7 @@ left_encoder: encoder_left { a-gpios = ; b-gpios = ; resolution = <4>; + status = "disabled"; }; ``` From 3eb06f137bac1f8ae8ccabb3464dd5c1943b784c Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 11 Dec 2022 12:20:56 -0600 Subject: [PATCH 0578/1130] feat: Add global macro timing configs Added ZMK_MACRO_DEFAULT_WAIT_MS and ZMK_MACRO_DEFAULT_TAP_MS to set global defaults for the wait-ms and tap-ms properties of macros. Also reduced the default timings for macros, since it's been reported many times that 100 ms is too slow. --- app/Kconfig | 8 +++++++ .../behaviors/zmk,behavior-macro.yaml | 2 -- app/src/behaviors/behavior_macro.c | 4 ++-- .../timing-override/keycode_events.snapshot | 2 +- docs/docs/config/behaviors.md | 21 ++++++++++++------- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 9902046db3d..358d5d144f0 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -355,6 +355,14 @@ config ZMK_BEHAVIOR_KEY_TOGGLE bool default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BEHAVIOR_KEY_TOGGLE)) +config ZMK_MACRO_DEFAULT_WAIT_MS + int "Default time to wait (in milliseconds) before triggering the next behavior in macros" + default 15 + +config ZMK_MACRO_DEFAULT_TAP_MS + int "Default time to wait (in milliseconds) between the press and release events of a tapped behavior in macros" + default 30 + endmenu menu "Advanced" diff --git a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml index ba5bcb07957..009476855ed 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml @@ -13,9 +13,7 @@ properties: required: true wait-ms: type: int - default: 100 description: The default time to wait (in milliseconds) before triggering the next behavior in the macro bindings list. tap-ms: type: int - default: 100 description: The default time to wait (in milliseconds) between the press and release events on a tapped macro behavior binding \ No newline at end of file diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index a6430a533a4..46fdde3ce41 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -174,8 +174,8 @@ static const struct behavior_driver_api behavior_macro_driver_api = { #define MACRO_INST(n) \ static struct behavior_macro_state behavior_macro_state_##n = {}; \ static struct behavior_macro_config behavior_macro_config_##n = { \ - .default_wait_ms = DT_INST_PROP_OR(n, wait_ms, 100), \ - .default_tap_ms = DT_INST_PROP_OR(n, tap_ms, 100), \ + .default_wait_ms = DT_INST_PROP_OR(n, wait_ms, CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS), \ + .default_tap_ms = DT_INST_PROP_OR(n, tap_ms, CONFIG_ZMK_MACRO_DEFAULT_TAP_MS), \ .count = DT_INST_PROP_LEN(n, bindings), \ .bindings = TRANSFORMED_BEHAVIORS(n)}; \ DEVICE_DT_INST_DEFINE(n, behavior_macro_init, NULL, &behavior_macro_state_##n, \ diff --git a/app/tests/macros/timing-override/keycode_events.snapshot b/app/tests/macros/timing-override/keycode_events.snapshot index 650d6747d4a..0ff45904b25 100644 --- a/app/tests/macros/timing-override/keycode_events.snapshot +++ b/app/tests/macros/timing-override/keycode_events.snapshot @@ -1,6 +1,6 @@ queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -queue_process_next: Processing next queued behavior in 100ms +queue_process_next: Processing next queued behavior in 30ms queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 67f5ce74c21..2ff99d58cbb 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -120,19 +120,26 @@ Creates a custom behavior which triggers a sequence of other behaviors. See the [macro behavior](../behaviors/macros.md) documentation for more details and examples. +### Kconfig + +| Config | Type | Description | Default | +| ---------------------------------- | ---- | -------------------------------------- | ------- | +| `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | int | Default value for `wait-ms` in macros. | 15 | +| `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | int | Default value for `tap-ms` in macros. | 30 | + ### Devicetree Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro.yaml) Applies to: `compatible = "zmk,behavior-macro"` -| Property | Type | Description | Default | -| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ------- | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<0>` | | -| `bindings` | phandle array | List of behaviors to trigger | | -| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | 100 | -| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | 100 | +| Property | Type | Description | Default | +| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------- | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<0>` | | +| `bindings` | phandle array | List of behaviors to trigger | | +| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | +| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | The following macro-specific behaviors can be added at any point in the `bindings` list to change how the macro triggers subsequent behaviors. From 6e99a4869677b809e3f4a77c87705beb0012f24a Mon Sep 17 00:00:00 2001 From: Nick Coutsos Date: Fri, 2 Dec 2022 00:03:13 -0500 Subject: [PATCH 0579/1130] fix(behaviors): Mark sticky key release-after-ms required --- app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml b/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml index c04883c06e0..172f20a2b18 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml @@ -13,6 +13,7 @@ properties: required: true release-after-ms: type: int + required: true quick-release: type: boolean ignore-modifiers: From 58f8c97d3cd37a0da335bed84fc457aa85b17bfe Mon Sep 17 00:00:00 2001 From: Ladislav Benc Date: Wed, 21 Dec 2022 03:49:17 +0100 Subject: [PATCH 0580/1130] feat(shields): Add a Reviung5 shield Co-authored-by: Pete Johanson --- app/boards/shields/reviung5/Kconfig.defconfig | 9 ++++ app/boards/shields/reviung5/Kconfig.shield | 4 ++ app/boards/shields/reviung5/reviung5.conf | 3 ++ app/boards/shields/reviung5/reviung5.keymap | 38 +++++++++++++ app/boards/shields/reviung5/reviung5.overlay | 54 +++++++++++++++++++ app/boards/shields/reviung5/reviung5.zmk.yml | 9 ++++ 6 files changed, 117 insertions(+) create mode 100644 app/boards/shields/reviung5/Kconfig.defconfig create mode 100644 app/boards/shields/reviung5/Kconfig.shield create mode 100644 app/boards/shields/reviung5/reviung5.conf create mode 100644 app/boards/shields/reviung5/reviung5.keymap create mode 100644 app/boards/shields/reviung5/reviung5.overlay create mode 100644 app/boards/shields/reviung5/reviung5.zmk.yml diff --git a/app/boards/shields/reviung5/Kconfig.defconfig b/app/boards/shields/reviung5/Kconfig.defconfig new file mode 100644 index 00000000000..9477db39636 --- /dev/null +++ b/app/boards/shields/reviung5/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_REVIUNG5 + +config ZMK_KEYBOARD_NAME + default "Reviung5" + +endif \ No newline at end of file diff --git a/app/boards/shields/reviung5/Kconfig.shield b/app/boards/shields/reviung5/Kconfig.shield new file mode 100644 index 00000000000..2ecf47b2fde --- /dev/null +++ b/app/boards/shields/reviung5/Kconfig.shield @@ -0,0 +1,4 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT +config SHIELD_REVIUNG5 + def_bool $(shields_list_contains,reviung5) \ No newline at end of file diff --git a/app/boards/shields/reviung5/reviung5.conf b/app/boards/shields/reviung5/reviung5.conf new file mode 100644 index 00000000000..a8b4a868b2c --- /dev/null +++ b/app/boards/shields/reviung5/reviung5.conf @@ -0,0 +1,3 @@ +# Encoder support. Uncomment to enable. +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/reviung5/reviung5.keymap b/app/boards/shields/reviung5/reviung5.keymap new file mode 100644 index 00000000000..936694790cf --- /dev/null +++ b/app/boards/shields/reviung5/reviung5.keymap @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#define BASE 0 +#define BLE 1 + +/ { + keymap { + compatible = "zmk,keymap"; + + base_layer { + label = "BASE"; + bindings = < + // ╭─────────────┬──────────────┬──────────────────┬─────────────┬─────────────╮ + &mo BLE &kp C_PREVIOUS &kp C_PLAY_PAUSE &kp C_NEXT &kp C_MUTE + // ╰─────────────┴──────────────┴──────────────────┴─────────────┴─────────────╯ + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + ble_layer { + label = "BLE"; + bindings = < + // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ + &trans &out OUT_TOG &bt BT_PRV &bt BT_NXT &bt BT_CLR + // ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ + >; + }; + }; +}; diff --git a/app/boards/shields/reviung5/reviung5.overlay b/app/boards/shields/reviung5/reviung5.overlay new file mode 100644 index 00000000000..24b0f582b0e --- /dev/null +++ b/app/boards/shields/reviung5/reviung5.overlay @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <5>; + rows = <1>; + + map = ; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + encoder: encoder { + compatible = "alps,ec11"; + label = "encoder"; + a-gpios = <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/reviung5/reviung5.zmk.yml b/app/boards/shields/reviung5/reviung5.zmk.yml new file mode 100644 index 00000000000..9be3811f934 --- /dev/null +++ b/app/boards/shields/reviung5/reviung5.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: reviung5 +name: REVIUNG5 +type: shield +url: https://github.com/gtips/reviung/tree/master/reviung5 +requires: [pro_micro] +features: + - keys + - encoder From 14324390e8df33df232cca20556b39c0ae4e1c1f Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Thu, 22 Dec 2022 21:42:57 -0500 Subject: [PATCH 0581/1130] fix(boards): replace nRF3840 with nRF5340 --- .../nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml b/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml index c8472428a72..444de996b53 100644 --- a/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml +++ b/app/boards/arm/nrf5340dk_nrf5340_cpuapp/nrf5340dk_nrf5340_cpuapp.zmk.yml @@ -1,6 +1,6 @@ file_format: "1" id: nrf5340dk_nrf5340_cpuapp -name: Nordic nRF3840 DK +name: Nordic nRF5340 DK type: board arch: arm outputs: From 77d60182bf1b4704601ccb9c1207f108cbf08b90 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Aug 2022 14:21:42 -0700 Subject: [PATCH 0582/1130] feat(docs): Recommend USB testing and warn about BT pairing in user setup --- docs/docs/user-setup.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 06c168b3350..3becf5fd4a6 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -193,13 +193,14 @@ To flash the firmware, first put your board into bootloader mode by double click or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass -storage device. Once the flash is complete, the controller should automatically restart, and load your newly flashed firmware. +storage device. Once the flash is complete, the controller should automatically restart, and load your newly flashed firmware. It is +recommended that you test your keyboard works over USB first to rule out hardware issues, before trying to connect to it wirelessly. ## Wirelessly Connecting Your Keyboard -ZMK will automatically advertise itself as connectable if it is not currently connected to a device. You should be able to see your keyboard from the bluetooth scanning view of your laptop or phone / tablet. It is reported by some users that the connections with Android / iOS devices are generally smoother than with laptops, so if you have trouble connecting, you could try to connect from your phone or tablet first to eliminate any potential hardware issues. +ZMK will automatically advertise itself as connectable if it is not currently connected to a device. You should be able to see your keyboard from the bluetooth scanning view of your computer or phone / tablet. It is reported by some users that the connections with Android / iOS devices are generally smoother than with laptops, so if you have trouble connecting, you could try to connect from your phone or tablet first to eliminate any potential hardware issues with bluetooth receivers. -ZMK supports multiple BLE “profiles”, which allows you to connect to and switch among multiple devices. Please refer to the [Bluetooth behavior](behaviors/bluetooth.md) section for detailed explanations on how to use them. +ZMK supports multiple BLE “profiles”, which allows you to connect to and switch among multiple devices. Please refer to the [Bluetooth behavior](behaviors/bluetooth.md) section for detailed explanations on how to use them. If you don't make use of the mentioned behaviors you will have issues pairing your keyboard to other devices. ### Connecting Split Keyboard Halves From 080c47825f9985c6cbddad501a3af1b4e721736b Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Aug 2022 14:22:18 -0700 Subject: [PATCH 0583/1130] feat(docs): Add caution note about split peripheral sides to user setup --- docs/docs/user-setup.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 3becf5fd4a6..961d1079b8a 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -196,6 +196,14 @@ Once this happens, copy the correct UF2 file (e.g. left or right if working on a storage device. Once the flash is complete, the controller should automatically restart, and load your newly flashed firmware. It is recommended that you test your keyboard works over USB first to rule out hardware issues, before trying to connect to it wirelessly. +:::caution Split keyboards + +For split keyboards, only the central half (typically the left side) will send keyboard outputs over USB or advertise to other devices +over bluetooth. Peripheral half will only send keystrokes to the central once they are paired and connected. For this reason it is +recommended to test the left half of a split keyboard first. + +::: + ## Wirelessly Connecting Your Keyboard ZMK will automatically advertise itself as connectable if it is not currently connected to a device. You should be able to see your keyboard from the bluetooth scanning view of your computer or phone / tablet. It is reported by some users that the connections with Android / iOS devices are generally smoother than with laptops, so if you have trouble connecting, you could try to connect from your phone or tablet first to eliminate any potential hardware issues with bluetooth receivers. From d993b0343304c1d7f67837e1d5a42e70bf05a8f2 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Aug 2022 14:53:55 -0700 Subject: [PATCH 0584/1130] feat(docs): Refer to troubleshooting in connecting split halves --- docs/docs/user-setup.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 961d1079b8a..a2e491b8957 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -213,3 +213,11 @@ ZMK supports multiple BLE “profiles”, which allows you to connect to and swi ### Connecting Split Keyboard Halves For split keyboards, after flashing each half individually you can connect them together by resetting them at the same time. Within a few seconds of resetting, both halves should automatically connect to each other. + +:::note + +If you have issues connecting the halves, make sure that both sides are getting powered properly through USB or batteries, then follow the +[recommended troubleshooting procedure](troubleshooting.md#split-keyboard-halves-unable-to-pair). This is typically necessary if you +swapped firmware sides between controllers, like flashing left side firmware to the same controller after flashing the right, or vice versa. + +::: From c23443a086b62833ba0b88dd3a271993d3bc9cea Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 23 Dec 2022 05:02:18 +0000 Subject: [PATCH 0585/1130] feat(docs): Generate new shield interconnect docs. * Add to metadata schema for interconnects. * New conventional location for pinout diagrams/pics. * New component to generate the tabs for the new shield doc section on interconnects. * Add XIAO and arduino uno pinout diagram. Co-authored-by: Cem Aksoylar --- .../arduino_uno/arduino_uno.zmk.yml | 10 +++ .../interconnects/blackpill/blackpill.zmk.yml | 7 ++ .../interconnects/pro_micro/pro_micro.zmk.yml | 7 ++ .../seeed_xiao/seeed_xiao.zmk.yml | 7 ++ .../interconnects/arduino_uno/pinout.png | Bin 0 -> 118303 bytes .../blackpill/pinout.png} | Bin .../assets/interconnects/pro_micro/pinout.png | Bin 0 -> 492581 bytes .../interconnects/seeed_xiao/pinout.png | Bin 0 -> 495415 bytes .../pro-micro/pro-micro-pins-labelled.jpg | Bin 490463 -> 0 bytes .../development/boards-shields-keymaps.md | 2 +- docs/docs/development/new-shield.md | 31 +------- docs/src/components/interconnect-tabs.tsx | 74 ++++++++++++++++++ docs/src/data/interconnects/.gitignore | 1 + .../index.js | 16 ++++ schema/hardware-metadata.schema.json | 22 ++++++ 15 files changed, 149 insertions(+), 28 deletions(-) create mode 100644 docs/docs/assets/interconnects/arduino_uno/pinout.png rename docs/docs/assets/{blackpill/blackpill-pins-labelled.png => interconnects/blackpill/pinout.png} (100%) create mode 100644 docs/docs/assets/interconnects/pro_micro/pinout.png create mode 100644 docs/docs/assets/interconnects/seeed_xiao/pinout.png delete mode 100644 docs/docs/assets/pro-micro/pro-micro-pins-labelled.jpg create mode 100644 docs/src/components/interconnect-tabs.tsx create mode 100644 docs/src/data/interconnects/.gitignore diff --git a/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml b/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml index 8ec164eb23a..d6eb89a3df2 100644 --- a/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml +++ b/app/boards/interconnects/arduino_uno/arduino_uno.zmk.yml @@ -13,3 +13,13 @@ description: | Note: ZMK doesn't support boards with AVR 8-bit processors, such as the ATmega32U4, because Zephyr™ only supports 32-bit and 64-bit platforms. As a result, boards like the original Arduino Uno Rev3 itself are *not* supported by ZMK. +node_labels: + gpio: arduino_header + i2c: arduino_i2c + spi: arduino_spi + uart: arduino_serial + adc: arduino_adc +design_guideline: | + The GPIO pin references for the Uno format are a bit odd. The `&arduino_header` label is used, but the numbering + starts at the `A0` pin and increments as you go counter clockwise around the board. That means the `D6` pin + can be referenced by `&arduino_header 12` in your overlay files. diff --git a/app/boards/interconnects/blackpill/blackpill.zmk.yml b/app/boards/interconnects/blackpill/blackpill.zmk.yml index d3fcdc88fbb..0d91e96c730 100644 --- a/app/boards/interconnects/blackpill/blackpill.zmk.yml +++ b/app/boards/interconnects/blackpill/blackpill.zmk.yml @@ -6,3 +6,10 @@ url: https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1 manufacturer: WeAct Studio description: | The WeAct Studio BlackPill has grown in popularity due to its low price, availability, and utilization of the powerful STM32F4x1CEU6 microcontroller. The BlackPill features more GPIO than most other boards, but also has a comparatively larger footprint as a result. Many clones and variations of the original BlackPill are available on the market as an affordable and more powerful alternative to many popular boards. The official WeAct variations of the WeAct Studio BlackPill are powered by the STM32F411CEU6 and STM32F401CEU6 microcontrollers. +node_labels: + gpio: blackpill + i2c: blackpill_i2c + spi: blackpill_spi + uart: blackpill_serial +design_guideline: | + ZMK uses the blue color coded pin names to generate devicetree node references. For example, to refer to the pin labeled `17` in the diagram, use `&blackpill 17` in the devicetree files. diff --git a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml index 78aa14a10bf..83aa31c75d4 100644 --- a/app/boards/interconnects/pro_micro/pro_micro.zmk.yml +++ b/app/boards/interconnects/pro_micro/pro_micro.zmk.yml @@ -12,3 +12,10 @@ description: | Note: ZMK doesn't support boards with AVR 8-bit processors, such as the ATmega32U4, because Zephyr™ only supports 32-bit and 64-bit platforms. As a result, controllers like the SparkFun Pro Micro and the Elite-C are *not* supported by ZMK. +node_labels: + gpio: pro_micro + i2c: pro_micro_i2c + spi: pro_micro_spi + uart: pro_micro_serial +design_guideline: | + ZMK uses the blue color coded "Arduino" pin names to generate devicetree node references. For example, to refer to the pin labeled `0` in the diagram, use `&pro_micro 0` in the devicetree files. diff --git a/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml b/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml index cb9f6b56c89..48080c7f2f9 100644 --- a/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml +++ b/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml @@ -8,3 +8,10 @@ description: | The Seeed(uino) XIAO is a popular smaller format micro-controller, that has gained popularity as an alterative to the SparkFun Pro Micro. Since its creation, several pin compatible controllers, such as the Seeeduino XIAO BLE, Adafruit QT Py and Adafruit QT Py RP2040, have become available. +node_labels: + gpio: xiao_d + i2c: xiao_i2c + spi: xiao_spi + uart: xiao_serial +design_guideline: | + ZMK uses the "D"-prefixed, green color coded pin names, e.g. `D2`, to generate devicetree node references. For example, to refer to the pin labeled `D0` in the diagram, use `&xiao_d 0` in the devicetree files. diff --git a/docs/docs/assets/interconnects/arduino_uno/pinout.png b/docs/docs/assets/interconnects/arduino_uno/pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..b796070063248fba51053a609c1e73e16584efff GIT binary patch literal 118303 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 literal 0 HcmV?d00001 diff --git a/docs/docs/assets/blackpill/blackpill-pins-labelled.png b/docs/docs/assets/interconnects/blackpill/pinout.png similarity index 100% rename from docs/docs/assets/blackpill/blackpill-pins-labelled.png rename to docs/docs/assets/interconnects/blackpill/pinout.png diff --git a/docs/docs/assets/interconnects/pro_micro/pinout.png b/docs/docs/assets/interconnects/pro_micro/pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..7e548da515416d061b3ee1ee2908280d4a094204 GIT binary patch literal 492581 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

    o%}v_VN+$)tSdSj}^R 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%0A;xo;n=gy`dVyk?opfT51O=sxp5_ow>_PxN6P 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 xt?Vun71*z#umCY=b< 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�$ZRvBVQxGX4oEE!rv|3DSx6cN(Jvz9Ol360DP)lCE< zAt)6o0Nq{(>sUf#=xyCbd(%x&l6Zj+x86#r(`LXcQc#27_9GHV;{=chuYmH(;Q9z* zF)~94jn#&()`-wzTtQ;8T;BtU_1(NC!{i0V!dGNjOxA7^cmV_+f*`NSu^OXNoY3Ge z9)+uZ20#4{EMG-==_qo=GKA^DZNG*2Bj6Qr+7U)aI0JRMqpQjO`};`0xJyM$?6*WDX2R&x&nrPSWneSQ513{K$Xr9{Hy z^u$6StidxG%4A>?aB>Y95{+X)BS`m&Ang0U<2bmki{m(Z-`jJ1&ra&y{|6|QN;r+9 zSt%SFIDP#r`@m=R{@wc3CFst<^ZniC^nT~Rx1YIl+jq_(-ze~XfA2i)d%eo#a!zgm zRIAm!*K^-_a$WZxbH1nFUCyn?WKISPcQH9ivHy8KWZ{$dzW(kVA3rAJ-y8TU;9nl{ zH3F4qGJIphhq!e6caOTCt=uK#yC)k3?z*mfu8r^edov)^L1YEW``oJsYO^PMV$W;$ zZgst`>r$;&5BNFY9{2m*$J+OM6a>M3-_3n(+xH&6H@H`yTDfv1-ENnGfdO3C-5bUc zLgbWsV`H#u*J1nl%9bts-SyYAYi=R)oY7IfeD>MMyNi7p!+Y;m2>rYzOIUf71!nuA z+1JOZOPB6vyVjawu}G~}V|sd;LZN_Cid$~Eg?hb?>$=R&&f<9<<#HLvaS%dq!_W=b zBT#=E`%<2(S6WtLVBI}cwMU;j%ItNySG(nlTR8b&Pd;p)`(ozW876-{2|#6ah51i7 zGW~WjC^+r()AsX3i^U=X0|QJ?Pw!1T+Jk-5nf9a>?FrQui^aX^NpT$S-Ki=Ti*so( zHJZ&PVHh4Voyi!(z`y`IcI;rsjve&%_0iwozc-!9TDzYe&1Q3Ns#ITJA8{PB>0l?k zPYz-6#M4>x)t}(>?H|$d<}alBkVkOmE6!*3f4+{5BPPH085X_qUk^HuC!KT>S(fdW z&a`KK?w-z6E|(b?7+`E{j4fNXFfcH14<7b?)0qG&l?o#xBQ%>$W@ct^J(WMii11_& z9fia?+ZzN-m5WsYsvBXXgRuGH!E-BonYPJ2sx}N9Z z`#wSll+_63fi|SpU~Go44mLAHX@*O_lbOj3AB&P;6GP~v6udH8x5?57$8j*3!50$i zc|<+U%s;&ud)!KjfBOb{HbWYVvJ%s6b6Nlbga&d)LYoe07~%&7G8vIt zOD4c`C7H^|tU=kFNy!?Ui=ZLUCMGs6%D0#_M(Qdul@t<9$0T&DL#YIA-vXGKfHg~r zswJNFnCJ65V162zK z<5~hBj6&{|iiJv}!i>sLA4OLaO>U)aCDtusl888tiOT~h&xg20(e+qbs|FW zGc+ltMf*d9%p&=L_vFNMS+ zy&_t;U{j-fFd&ot>ppsZg)iiNcWPo!4TN zN32tD9HhxGIwMOXvUU^4WRS!;jT!>Lhno`#>_xAMRH1%=he<1JoBvTZXqONqB`K4?nQS;Kw&&3oQMUtb^fyHU#Dea>@H z%=?Z#dF%Vm^`5cD|2rbta{sEFZfxAN_w~Z^%KeT#W7Vtp!NyMlaNWeu`N@{A@Yto# zJEA_9R*y%?Bhc}>msnC=%WKd02>*6fUd!>GD__Kl`Y9|ZAK5Nxab?DvU;OI*uI=6D z-WbE|?Cjn)tyYVzTep&B8MRuT^|9~g8;!<(?GJ@Uqruj#c}B?S=;%G#@9Aq#R=|<; zxd+GUy9xKwiFoHb-+AZ;KmIX%?sJFj=MC3i&-gw&p8qw`Z^#$aqvwwvu+5U^Ea8SX z-2ev0zC6ZB?>OnGcJ%j)LcDtQ5r0-H$s6DJ#`|S1{*dtPgVc-5eF}-)dGqh#Kap3(lulUvSi8x7!`Y@4N=zuVK+BCof=hq>HOOdSMfrX&lqTI0ak_ ziO~egMd<`Xg6mbuqLeI&5JJ$Ef|AKomCOZyMRDN>0R}HI=(%-`9a(_X7MOD)=2RCo zc`XWA3TTiXvXBA!j=YXy`f62LzLPWYkRY`{NFRj7WHBfofkm1;ms=W*8?`Cwz;X9-a!2QID@)xtZskyoKSu5zP2B(l!Z$B33Fy zBP0_J+E}tQBtqgBstlD~dhJO%DJY{zTeEBo9TpaSsxuMVbeLbPppukXZAd+diW0iL zS$4}Ri-QWH*J98K2r7cHZbCP6@Kp)vSyTq5I)GP7u#V2jtm1^p2}@S$qd%CB?TnH3 z4HB$aMWIkfhZZ9=vQok%F_AB^szf@z9WU(1enSN}8N_MI$9cF;ez6*k_E zbUivzOanoEa6a1xebQn;H3@OkfY41a!XRWW_Ggj^lV(UN$4A?o^VF$7pDIGGK;2@x# z=0(_r64Iu)ZiB=Y@J=~#@9#!&XaVl%a>}<{!}P=?uInO&hZ{I3>p{_>HoSn&_?9Db zBC6Huehd3>dKa=>#&H95oZve}wAJ9bgtI${8naZAIA^|c{hV&DT1FPj7?E#+^!NAE zzfbz`-TyvXobLZ&I1vC&wa%VuOREpgR=BS0v25hPi_*K#`TYec zZN}r59XQpu5l!-`oBoj>Z2Tmjd;Co-uOB59|54(J%U{GbyMM}0$G$=*ZSXHwoXOh;RT2!#@o7qXnGg@^H!k4 z6yYkeG)5E#NM|;~y>KFCCUy~&D|kVPG>%ayqyRT4VXbCr^PP-1I**PFE~Y3Xj&RVf zK*xf{e}96?Lre)n@k82V<3_9-McrFXiUPodLHVR3Ei#3`8F6AYw2&0f{vZwe{ z&DCTGgv_Z`(J_9|M;*hi))dy1CM}f7fU%tz<$yM* zB*Dan#PQHcLY5dzAt2HzajS)tiXq>}IEqHEM`FRX0XxHtv;@`IN2Uq2Vgb|XGTlpX zJqMMg#8HnOCdi$PxQE0t>KECjV_I>8qNtE&9zq(lFHwmgb_J3yGIMA)JA~y5^bHdj zXwS5!wW2%z)77P}9~fkq@;{A~tMf#ls#6^Q!R6D`5Mb;8cjyh^7h% zbj(iSv*{&oz}x&QMDun;Z4J^&QfraqsW^F2wU1IRk`$R_{Hj>wce5eu)G*KNkEu=F zLShB3uz7S%d5}biz(rutX@pa)=IMLA7zzb&Q*0FBSf3l)0iH|Bq?^yS=8zSSQHk}VMLm?srnT*ufK`-@sFd_H$a@Wkk&(ZT^!0j~gcI^UeuJ&y-qSeJTLo(mN zE8PFwm#6yoy^s3~$;4fm6YlWABlv$vHUrFiIPACxx?2z5c3XP`KihgO7jOO?j~;z4 zXD@gniz=&dq{q(ACcb~?C%AOSclNe_)oJfP;6~)DPybKWPhZWJ)-7Zv;oVohfN$UN zUp#!#Gg(wwg{K0h!kt_{@hg74{oBMk&p0?(q4Un}X1;Xmza7->;o>6BTl$wrJSTtm zp#Nt5^i}NW+{tY-SM$;9|Blz5@!>;$rZk$*<)3i$I5tki!i7iF?7aE&`P{m7{N-5mV#9|w>=guB{*vXmMmGWhb1HD?|%R67>jsvkaDpXz$*}t}Pol)kaXPV^2C2-!hj*q3}G9 zXv39c|M5D~pZ$)$r6&#&=iG( zWAehoLaiTR9Z-gv8xRJAv^#CQLYb?3nk-IP;u_Le(rY(}O%EYG996*!z!w5vNeEng zslagu9ZxW1L3cB1 z(g#;FV+>Z7ut`RewK1~BqJm2)^>I|hs8;OgX3T_L%2d&A3!Qjqn-E%w)B%Oi(($_V z8k&KnC$f9@ChVPKM2RI4fDb`Nu0XAT1d1gISR6;tl@K_Jb~nYbkP3-wEN)YPf46**WSR1eIa98wi6T+5-X6>L0A`*#7c`28G$s|uub2BWxVVw-{6a%`WoN+ z=tnqj(ICUBL>fA1SAp7qfPFh8W(~XA_3hk$e=(vJIn6+GJ+3&oZ_;z zn5ajA7*`cA(!$6hM6rO_zLly?=OPO}-n;>H*upQAkx`qdHOat0iQWyDF|+MCELygj zC~D;?a7hM1nfmdk(7E%scqcsq$2t5nUTaNf$F0;BEkwCBR2pLoK3SIHCY?!^4FzfI?n?A+=Z2Hsz+ex8#<*D!EVT=CkfX7R2m5)B=QvUI> zXY#v=UjT61%+=gBbM-;{d+yr5XSBLz?|b_a(QI#T;FCB0!$IwKrGHdTMA5DAFAw<| zfBn;kkeP&U-|-Pn8-4^2U;K zW-ZUV;tH;R{Nwq=#*O@aZV;(0PPuCuQTOa&b9iu26ln_Wxgm;=m$s((?#btRdQP3-R_bvQ`tP zdSDi-WXE03pEq)F$Me`_dLA5^vM3YbqyixV%*+hLAqI`KlG>Uzq>nfc|JUCmzU2x! z$DKgYt)SxwqY_e+;#U_Ex3;6R;@*^`LynncOl-fC6{}Wbi&c_1CP*Qa;1-JrVDlXS zr$AW0H)1Dd8QgU{_RNP7EMH4r>S}-jS)5VsCCFNh_@&RL^~tYLS#dg1W^)Y-6v7%3 z36>&(CopM3^Tkgm`|Z^fPgnys%Zsb6BykJ|jU}QT8LBAIZ72#xoH{aW(enhNR=|WA z+qch~=bO=Frk+(8x?L^=&_Ilt-& z@T=Q6>CBTj>D{lR-3Y0qE%^0im>V}EYs1(q#*r2g3lI{&SfZK6#GZ>2TZj`fX&{q? zj=|5Wlu}D0P7#GNc$QA5LzERru=HgTsVpT7Ua8J>n9}pWk6c>qStc38EePCLP*R44 zr9r&7O;@*ZGY`imprJrUCK6Q1L24I2bLriF9p%75^cNWpD#X6TG`e^L75r{QS0_{~ zISZ3C2w{+OH<>6oc-kV6d0}oA;*~0pWh5pcl^~;-N$o;^k%Dr-f?JtK-I->lIZGCm zaB4mo4rwNE2S-56sek+?W+PxIB1(uau3ctxu*XNUVYk! z_|SEKi?NyuZ~wqSorsY~=X3Zc+&dgQzxs(!JR&Co;B{-(u)f*kQ~OYcKvV{i~elU zA=_{M%x2O?PDi%zX$vVYD|0kBoc;e>QIjxp5FM7%DGw&va0?hs^A{H%lm@Wz)4S;Y z$`3l{kYhdI2xDR;utHMwix}NQq?!yxmZlUvMdyU$sC@716t4UYvu8Y-@`{t_B_Vho zPL>iTDNbns;x4I9as7jTcY0xu_Rh^LSTuqv43UO0#zv&B!cScM`Y?pkTyybvIm0bb z+!ZnTx92fmIiyh!N9FrZjh}o6bIs*=D_0|TP7=QKFEQWv5%q!5Tm&zJIGn{ZP^cG4 zn+;m8e-`3~t0}J>#iW)z3ZX%3q{$E#vMiz%?jkD(^aoYQB2bFq>Hw2UvanQVY+waT z&Upm2{yzE#hNzaxq*+S48={m&XBkNt(b%z-@v%GEz4dmI6#O6{=sJ|rghT{j)11YI zxdra8uZJ6NrBW)vWD}wYS?L3jAY=-i1f3;VVbH0jEQ>%w$LWw6jm=^N;DjDpP9ppO zsdLxV7cL!Kx}6@~LJ{dl_}U{i9#tuc1Bvb?2%905PdjchNr_>nhNnU*six#s$kLP) z3wVG;NQ+HUv~V#cMVeYtn-ff!SRjioUZq5DdX_+Iw9!YBN)xy)p@tnAY%HnRkY>Xr81U$KBp8r|VFoh6Ox!_-AzG%$phjdJ%5euF zojep`9fVuJ6A@&F!GU4Q%^Cb!mEp4<#nOR(_K*%*3qtI90Oaq@&hDhSYbQ5+^Sf*u z-%U19AtjStBWt9@IxaTI$hsX?^)KOu?|hS;4|^mF79B@h&){dE z9gU7s-1-9gRgLcS2D+^}L3t3rP(&&Rqcv$961ArB8oLPQFGdD6WTpv(B()i#jK_E{%Zhha&`9MaZ5RIGX_^tMCm_CvQjW8R}UW8R}kb;7px24kekPAt{7k~E%kJ)0n(-7xx57YSKK;SGgMQ9;3ViL!cOLb54iy*jqi41Vb(flV z=rru7ulj4Au(B_IxPhNYGT+5o zjVJ~PW4Y?5-=llSHcksNT1$tKXFePO7zM&9(#W8D(YNXIU1S3O&oB z0Ynk3Tu!Nf5tT)&88~4j^A;?jf3T1Cbc3DKcTg^u@nsp1D68q4zlasf)-bmE6lQL| zj$6O}Eo^HRr&=IOBS<130Ie`YNFVS@5M|J6KwzL$1m6dpVuN|4YnGDWkZ#*SGQ9yE zwh@j(?kVDQ>x2c1b_#@9LaW&%O*4$65t)lCE#;yl(;a5<$%=x3ut3!6QX<30XICM` za}=pI=qRF9@j$s$agfS@qwtMFrwP*WFg8I3E;h-FhC?Ay#v_#}nS##bG~xIJQb{JK zX9$cW^CV^KpJ8p;J5#o9kGaZvDaHANn(_-h&ZM3ew zl8I^=M@R}qMNlkbjAVLx8rKz=EMs=}I15IGS+rn~^;>sS45~;SqfCHJLu4V%qaD_Q z(MZ4%xdS2vNacW&g7QIoI0Zp4wUhXhAHsd@+mK}+H%jmXq*mZ-MH>f$pwE?9K%j7} zCUXktq>Tl9;h~*6shPrwJ3Po5e*LMB@SL}Qh)SuSurq~|Ib=ehx;-dXD3*>V3)>jo zrrT^FjYW#Q;J#4yncf{!7alSdMAG0&ht$MKr$D7pVd6Iz(OtiZ2Q?GeJ&vxps3e*@ zQD;uETI1Bpm}8{tu*iW&7vN_HkXNwAaN9E;icJo}v)^iP#|xjb-+RkH_B95cdOiTE zn6LUfS6xcys!I=PN9nY6tonc7MFt06L_fNa+xmx$<6a9lzvsy6BV6Up6*=EOh0X=1 z#M0UWlhNQi1$?J)pWBv3^Evwy?i-HnZE?W`N9;tnQu39v&*s!0{fJg}V0MJRTCw6D z^so2Iru!KV4(D+mmvGO>%eHTALx=eTc=XRlkEp-VXOD8-tFOammYqM`NzzF0>IY^Q z*#6z^bT{Q&IrUTP3_pDMh{o81^EeOZ7=I0ZUpT>o8xG<`RL^-Nh2u^pTz@0s`WxAB z!IN0@=66#(?qp0H(Yo{}Z2Q;0->YCf?mh9mH;eJA3rI1TIKm1=?1N)6v~nq^0z2=xk{^EaJ3N1AnBcOXF!8E4v1n+3o(}Vr z7uP@>;Y~O3e2p+6I&<&`hv|*a(0kd7DW)w7Z~qA5(SL^c(YFb|@+q=PAHz#m(~jG? z8EBgVHqVc@hSW%m7D#1rgdj^3QrlvhGW}i!F})j6tC5rn6pIyFvn`V5G&%{1GC|lg z6oVdGXCz3{ZDXiHky5!zVR(?fN{O;75xxtVhav%?K!6khgb}zQI3~N~|B)E=?t+}YUM`ko`s&d%^V{lYJnk9q; z%=Q=Yr&5ZAB2s76grSuPN}f+_Lwem7#w(Ex)hVV1N{V!39&Rkj!X6?DX_^Gu32CYc zvxLN?^kNs|J9K@G(kYQAFw{hk3&b7;jFY zv;pDZS}~U`Wuf3hDlv03)Kbd4NZYaCRzX#q@i>=Pu9d;+DD&m?vX!e%I8 zNtHmvDdiu04<=g008z0F6%R3yVUvWVr9N)I_E-Gu^Z&)8 zUhq2n@*thgBn9DPU7t9Ou-Z^^O9;0_qGPl$xNZ$MjEPJ{aoNdOOI~Y2hKWL?s!=Kj z#A7#c>rcMHiN;0Vb{#kw*is(dvlgU=G|Sngj3w;#D3^~7yUXiq2X-QalsNT%(uu>< z#m{{Lw|{W&U)6IS$+G|WJX05bhR$`rJ%BSJC>(z>!xy}gq36B?p$?vu`uf9bw*KDX z)#1c{fb}0bd_>}p9o03t1L4(w-f9UIich=n*wvRxb15GtS_J2XH(b zA$ZC1<@e2=SG_8?=@{UNJn?`|#Fj5^+539*IY;J1_=7$pj~ijv4|ic=!`82FW#!8b zynwy^1NTB)?rwJfU&TXw_{t&3mzICz%iQ*?hoc)av@ib|>z}gjfbII9az2aR`rgBi z^*}>eP)cIm0C#u+28r6b0dw-{NDD+A`U+*bfAIolzxP=dG>4e{@pri+sIltYr=!b) zxD#Skz5|~nZL|_786e#X*0D&PA^kqGh5aO1iW4=kxF{5v&5+8Y;1_65tmnHQ`cKXb zJXUVGk!?c@C_eqqQ7GIj&ke^);@fXP+D5l$;iMdA=4g-wM;6(aJ!2)IYYP6pjaqV zAE?uun4sBg&^J6E&nYl4ILz$K3}G}&5*ud5HnU>&3Or$uwF;T!Nh zLMM&LIvu=HkyM8W=@J-8>_9?C2q{Rs3PFE@^ZvJx zeEPdMewj215jG_&xR~)S&d1&Z6PwYFM~0z$XA}ROee|Dr8jw)%pjRyt_nO#pnZoQe zj~iIPm%n=L8WGDO3^GqAieF zwC__70(zUT;p)$Rm{D0_@a7HBX@grunHaRpNhgRw3WV#E#R=XqE@Xb;$U;~L#ChlC zwj3kOV;<{Rw_kyEZ%2=bU*E(!!f_`v z|CMi||LM;?q~^v_Cm-wgfiz7Cdp*)#k4n7{amhubPdXpRFJZ%6H)3$*a>ifqxAcAd zlbrI%BA5O6i&!gI{m`dTEINc?3#nu-0-abe9a1T>kx(ep%`E!E|4y|)?(pb{R0(9)p;8V( z^?~Vu=R>7N(u-hXg2b2L8bmKZ=m_PxKnj@wojX&=3^2KfjuqHq1*v;v-5DCjr$CW` z!G7AV#q}gZixx4wZ~@2^M>x0zkHB{@nWVg^pW)F_I$;m5*Q1#lQsEHvGGw3-#eSHb z1>?*uG!ABhtWOve6@Jcj@y3>I;_9j$<0#9#g#;oHHIoQmkNvi%uiVZ8sBi z+7xSLl5&72Jftp?dS0%e?0|G~MkLRXlq&f;eVyXdaO)GCnaw7(?n=5}T1&NWxy8ev`(8M$7N~ z-=R1(NPop6*|D2;XO>E(ALjQ#YnHl*ndw+!cYwn5F2eu0nN&*Lfqt+FS=qxM8m1Ww z7Au#P#~;u9+6cLJh+)sqo6U z7O4%!kVjbr2yM_#2Ze-4ffTq&52s$o-*^N1&95PO$NMN$>V!Ru1Eif}q`r&n8a!1*r-qaacV-uVF*J{_e&)+uGBLv={^l)|N>wtO5O=yb zb94^MaZ$=eID$+k7}v#BJ|fLXjKVDliiJT0hRNSt#QJaiKNc4HSU$D^W_RWhG#%#5 zOny1nT5$zPaNK-%B+HJB4CLP82}QUmId(}z9tU$6bU zwJ87Swo5MH{!i`tL&Nzc`1j_)kNcy`Sox`Mq1!Eb>u*H2ny5+@e{?zC{3ELsIsbm9 zK0HzsYjs-Nw_}XK?=?}bOLWZ@#Ft(|DG9>PUv2BCA07SG^@`zgU}@S2DGv$t4V+POT-nIA(sz9+9oj`G80tF4iw6H zA#_j&Ptuv$iD-tHz{4>L!iY48@v;I!0#fFw7Z|V!pfP|n4pv8KtFTy1ED*9w+T6|U zzrCEbr=845wTxS+que6GTJo@sq_2O3xuo^E{|&ca^E2A9#iBqP2s>z5&+~PVdDOwi zxeY?)f4eDJHzhHGf`}*&&*x%W;gU|9_GFiZr=G+M-|??_p++RR2;b$O`~mGS~Y#}cZ`S%#b2ws5*~p`xfy1**45ufKh7hbYdc#p?r_j zk(7O(au6`KWh;xU<%!iY{jDjQCZpt5K_y6|Sy-&`J1Trvb{RVL9J;$_2`iR=`kTLH z;pq=2e#F!Gj|-kl|3HDk;Q@A!hb)ako;5rVZ(=JQuS|LI@o>#A!E@*@!9=r1uTaDr zS%9z+)<~2wXh$Mahw-q<+D@CkUJom$5aqs{(P@s>Pl!Di6+G8t_pTkNg(J)>4-q$7 zgc360V7vfH4BF4XUkJ1@Xl-#E2WfMrCuPWMBFGT2#fCkETZMszs2_X|w>?4p(eF|$ zdSIb9&Fsrc1ua_|;dl zW^gHswr+u~J20YvAVzovumYSAw3D+-X|Q2PmL;TVdd#0^e^-N9bKumb-v=ID$Zh)H ziorAUf4hGLwHOfssf4NeALsL0G$w(%Z3wG4T1%A8|zDe#3d^7C7Dg`RsXNzRh-MQi_H8X;jbnS zUK?>=af%0@Ix;Db`yG=L<3tnVblsHU%P*q;+dm|0?W9*(iTTz=)Pf>W*u@tPGVqzu zn%-Mp#prjwiG1W)Y$!-J&g*B{Bc9IkQyz+29LR;W5P3?6(P*uauD7?iG*9V>nAmtL z*Ie{fuKUHcJbh${lj0Wb%P(i*@7~Aqm;5yrNYf4i2hR&=Y`l}%7d)OtzDMRm)Nznm zms+I=#XjgYpiqU9Pj5QJ&TPj@L8>K=t8p_)reZ=Z2`V)zuA4g%al&l31>`x@)=G@c zRj)IVVUYM?gc@ARCsL2%!ym;XA9FU$L{(mTd5)iSeQz>{9}QXHG`mCt>dOTPMbJ~KQ> zd1fn9Izy={uGIvpz~`$~7QOW?od5VI(d$H9^xYq`>E;^{Wf!G$R)S8LY&PjC2)q&` zF$RGj8=BP`-#hL>1dEokWX%XGm#-!6&XB|zj-x0S3kV@dv>|MVSgR;69HmrtxazCl z=Q}_8F)yoW&P^Jm8Kt`b0Du5VL_t*Sp6XKcB$Z+TTnW|^^&+%%kV=w7U6gVt2W9YF zFd03sNS4Mp-4@0EA@F_l)@{rzUO?%&FDH5IGof0g{^DoC?N<`Ibua=;k7(y4;)_4T zT{=qkj8jmehF_Wwwn-u#l(q<~2|N$_>umH~e$$v?-svZ^;;~O=aMdXkDnq!164uJS z^s<%&(d*D|H!&0A?7s0b#xDIC^~~Y8T7~kKJ7KB=vOwk~pal*Rq?>PgX_Nn6h7FRl z9?9mvcnQPv7SXrp$kK7|3yg*LH;-LJ;z;qVQtm*=KR`;?dyC#Kn7skocjQb?@ib(4 z!0rDGoD%p0P+SC+RnT_|6psNt@t<%P9=M8HDd9ygf>o=IxJKeW<5jOZrYTGZ!nvHw z9o(_EKEfZk_sR0gSE%8GM;C+?_p1N%IPZ_ffdF_z4PG>PV9kj80yWq7?+aNLBc(%s zt%#a80%?rwpNBiO4L<*0bYJ#HR1lD+5jN5c`$d}n_TOx%&1doFKE~k{@_bZ2+7WAhg7yyj=@xcXWaRz`TuiltQ7 z-^R{Ox6pax`&shhR{#dx?Vwx_$iJV_4VMvY8z(zyIdLa~R8y-IASgg5nsXomx|5UW zb^{?y&N$^OY-~wP1jzxXoGDsX8QN+3_wyQx{2CFN`;sV=t?k3p16DOKxQOPCn9O7E8RWQ?S;xxtpZ|rmOBd0c8t0~~ui=h6$M8}?uhpd5Um;C2{qq*G;Dj}-K7Acn z7(D5E!f($qI8a45VuX^UBp6#nS_wiRrB9Nk7@eV%mtTvdg>Zd{9ncM|bkK;L_BE5J zp%J`oW6VDH#RRXtj)8N|h7GqsWgcm-iIpCnkQ5g5lfC{gNV5#zE#ntUq#{OIjc-L> z6m3$XBqf+gSyAn0MgI`%@7To6*S(XZR$=706R53NO>y25ykdbQYLm@0=4RYRwMZxE`_$<2YDpa0q||YYjqYdD@pF^T=8nBKqc0uJn;TK&xpf;Ei=S z$vbe3!~=o1_x*I{nSk|2JAO>qSx^av)2IUHNcgLvuRqB03Jmt`AHJNP)!m=SDLmCCBeA`rr+<8zE zf?{5j+U{XxnMAkoU4dIJF|~D!pIrO{s=W@TQldV(jQadxG|+J!kS?Wa4M!L%0|lg1 zNa5rfYjZh~)(Wf@WTY%KhKU{9DfU%xmM$a>m$CKcTiCi|Cv{(P^HslLVr(m?Jp7@| z?4H89K`vTpGK}M+Gl3@!uIr-$ADK>b;fFs+-LcG@H;-biNNsqC!NK_?nc?<3@1#<$ zaMJ0ga_YICCGZte3S8GkN{LYdDHKAuth9!>+o3hSn-fl0OKqTz77m-P`yHjRHru!C zqPg>1j0{(BS~1-y!}?$lxWRm!aF)0>%uLOte(QE*QiMX0d3`>!tu`Iy;#zP-hAUwE z#5kEu=}wPx;eY%)<1I^lphmCPC5d7}oe+l!o41cMHny31*=5nH6>QqDg>K8Ddok8p zlri~vcpl6ZQzs??VGu%+Wf`s%2rq!dgQAOSHIZ?It@t4PxzxA>zf?g!vV#BX?~+~o z1)LSjAWQM2hn8vHy<5a3!%-ID3AE7&+an{VR#nnLiTnW*TaDjpLbJs&?Kdcb=Z<$;>b?WI-fnm8)Pt0ZC#+xF9OtA7;Ufcm=)aRlF(& zLp{ZZ$f=^lDQPhdvqXFg}T_TE*iR;^0wUF&(DCjsZc zL$?>maq zGoDcy$=%035T^=>?iYkD3 z`U5;#?9oUPsMTT6hgu7|(+rl5;Ce?$ zgvPs)X0uhf%G&}WO>85Iq6!KMSr8Wm1P>YlSv86(9oiLGrSQVwrN9M`^ck`d@lajo ztv~#uOm;Qi#S8`mj;yrK6NEJ+q0G)g!ok z#L_i4vih)#s7*}ZUBC%NT^l4NN<^qQP&!5CERSlp*>(OyI52;drCWA$-cz5-MUQwa zaU`fU8Z0g>6O?AUJw;HGAO%9o%A3FkycAepk=;aqMx>C|;%g98z{D}S-DGiPfoZv! z`mUW6$L2YF&8@VirzwYrP%1-W$R}p-i+d>#T58b*wP?-Bys%8P>Xd^K!?NNhHl`Au z>gv4piI1a}kLa72hDeYq0%cJ`a>OcBZ1B#qP*|@0zrROWT9VoAeBVPZWK%dyF{*^V zYE<4D)MCgBq|U*Y;K4`*!h)$o9Id&lLr@ao1zMCCoxhA|MDkp7;TAM-h$N5661;y(=8NncGHBbuoO~{G3J!TZVWfBhBN@ef< zqBy;vQ5nfS*nJ>Q<1`+Ocwldvxw(qs^x_x8p+j)P4RHPSuxAe}Emb2ScZAtlIP*-n z-~u@ReAv3R>U2CvAd$R`mvIi~oRA~&K;hdd2jY(K^m=6q_Xn%@JV)Y^sG=}EkTVeL zaMmMg4TO-C9&~*Y@Ana;BW&A5xbD;V*Zmmo&;NlaX_1!&(wC&^h$J@5Ui?sIFMcRT ze&ENs>7)Nbbn{I#kIj?Zx{pS&%A{H2Nh^&{Q&tBBE1NcvefN)IANp{ThdhF9vlD>C z*$iV{EGUR1%1So=41AU$;x2-8i>EjKa!!iV$xAABMCXFkU;Et#C0q}83IS1gh`M_ow* zCC;S?C&AQk67ZHlKnjTlLa;dJG0xK;kC3&PeC!!4_L$i;$Hf}) z#(9a|cbK?ta79Lz$jXq=7DUbwcO$&DeEq9mVY73D!r~hdK8jdeUL`n7YoZ`q8lVjf zl*UL^9kvn`T(E^ehms%!PJ&Q@;60&` z2raR~;l0BLffj~Pm*g%-7amoluxNo|O%OnW7=Ui!WQ<25BU!0uS&erRp?!62d5=&M zkkxjGDkz33$yx|PY;exv{rzJ$cXzN&R}`n$bzqN$D|7f-4mXxC@4%iySz8sHXW-Hp z9u~uyx)P%LcEIVJh|{<~@ZjimYYk_dQT;vhnGbYr?o&L0CvYJb@;Cg=143_l43FU@ zyo5;}7;4vp4d<^VLjTJU{&952@~^kYPF<-meSh}B+M^!J8B;S=e?>s)9U>dx*Cb(O)WjfI`pOr`e)*?p`yReKMbs~; z)tjJwWgbwEpgYTO@d)nNL4-_jHf6HgK}NMTHi@WIkW|2XPY8h$j|luczhX^37 zCrF7F5^n;=T7nWtCBX%Tt)yP1pb^KgFrtxrW^4gQkT=^5 zW6f%Ri6~NB{D?f5?vUyF$7fQ2JXQHPvIRQI0|nO-l802dCBC=EJ>rq z%JL!zMHEHI*ie%Z%6X11E)Ye62#Jsy?IoqlajwcAaT5Cd5p$-bE@JYjIlR*JdOecJ z;FebztSm9zZjfaeK1xtZArVMX^*|gBp%qw##vzQXC_-rJtrp}Zt!9^n*wDM>7CMiA zGPzc)4tqpFP!QpbLWLSGTSdiF7@Jcr_2`KqS)`dz5i&0jCT7A|%B)~qO3EX<5vop> z1!O32(%_t6Ttb>Te8@0bQX=p&XF@`mJ5m)<77m+~5Vw)3#ZI&l!ozq7S`n)q1eYOdf^q@A%s8$iMO6odm^DI zm4ILgu_icy5)L5(vJ##}O7PAjM1+$Pha?z<_7TGSN-|h9P)LOI;62hwMBz}vt?w25ammsLHU;d zL*t>3fMyNvD#}G+#~>9#XqrYtJ*IueS+L_Q5MT*}5Qs!2`G^D`Jh{sV-V=F^(*~_0 zq?80;`Cs0R{oP-u8*)N-4w;W>bp(hAvSp}up)1NA!Wzo|-W))9yltvo(NsImlAM>QMdt4AqajMR=IIMOs>>F5eUOS00l zoR!#MX~c#|N$OhBcLixbqwWN&I?z>;PMIOF=z5o_Ru=}V)l7sA71d=OA*{_%*ec=L z3YeHBKe&jqU#7mYLKaIxlrS3Rs5B>R+DeSVON}=$%q;b~#g-l|1VV@nI#ck15EKL` zi$I!=$VM5n6Vv2*UY!rA2wEX08r=A~FLCyFJ(5kAT)@|_xt78NlI0<}iSe;P48RFc zQnNhFi6%5MQVdm{$RwB~0$(CygK5W-r67C+d^=FyoOwQy2 zF5rC5XDeILr%&zO!lRQ1X@GDyP?Q-?Ly-=N_U}RVRtSkfDve`=C{rAs=!`CY{wU=e zUrqkXpT<4m*)(Q1LsG{GDASah@}y~wB*&sjv?9oWR0fHpa2D?iRAKS5hLnzoI)#=< z?QlYp=NY4Syp`+^euK&LABvX}X-n#zb~QRb9ztURCc3Qd*^e0aK*xl9%)~?s8j~mkK5=2sA%YvvLqiY%hcvlj< zMfnaXp17{jwK_-k-hw}`PQBG6(lJWaaAk?e3xqO+JR`A9e5mSB>Pl8uVURvhxDqD> zHY;(?(d{-#+HG7B==T;$k_M?1^pCADbI#esN0x90573Yr@A^m_BodL;kglMv3Z%7! zOp)i7qM@l}O;i|TZHBZZGu#( zqDPdb1m&@+j`pDnjPo%n(v|WS9);Lol7tX&QlM1?GE~8XQQ!sA13I813lfL9tJLzUCw*ZecqjWne|1XY!99R!EV3rgqc z-VJBx(|GXUv}5%*VzeKw|D)56)%P_{_cR{>Xf$W6{r611wdh-?@y$cgAE1OlX^=$* zg(oPD5Cy^*LJ(*?F3+iN-As{Xly80mVfJ?!|JFN@JI=$*ZKhU>aR_Qb;E54-gbkKZ z3Y0CdRD-Vui8C>gHi%%V{s)dC%NhRZZxSy1SE7|ArXKz%N>>unKFxXpNEoNkX+wRM z;ei7v3d$%#76lW{P9^o4u0SpzDZ!bl<0SzU!LISLLy2WfWaDZySf+UEDlWNn)g%BJ zUKGTkQCZOW0C|L-Zt&SS;oyZAFVD_2~@^2qY+AAA}Yzw+f|%d7m?ulzRG>|JK( zrVf`rWIHZWj1P|azIvNo;{o~D5?UIu&K>tunf8%_LJ~$pg7wI{B19UId6JzELp|g| z($D`F#i&PO$4qpar1Ogm1}m5(rrB%~yg;c+T2w2E6dnX9v8Ku-0^U11|Ld-G#CV;w17ivK^{CM4($U9$!N5SpKL*4=^Z(WuGgqV zF{8y*WLlCm6Cw|}&=kemIS&Z}g|`{fNHS$HE}*r+8i9@+q$8X+03=%Bb(4Q-PP6@w z|CGl3K|b;K@1wUmMoPuD^Uk9^GlB51Mqs7^(r0*m_ z)+o)I(iDnygE}cyHB(Slqx;?tkiHGOb|Mb1;1&+xS_X(J$Mw<^Y!&2MTS6w*l$#8> z%`x61yd@|DAqE6qWGL?u!Q*|^nO6ja5cmXybGQ%)CPDhJG0_D9LBI=#3?Adb`T`pw z5FVuz*5_;Kf*KJt=rsdA@2WsavKF}C=Io6YASJ~(tr$-FflmS}!|9xeyF$@}>)-b6 zL0!71IQoeyC**?HLezbrYxCb9r-O*o__oG>YdVuwMBZWol*JfiKx(R70`DR6cqa(X z5r!j_Hbm#1TTxP8_i9EVrS?5Pih9LsP~9$RS)$r)B2!!Iw0aDxqCBh(T52FCP~Lb0 z@o>QK@E*i}eFXQhf2Fy38nbC9<7`A+X4GQ?x(-me4aq{k z&sV1>_|bR%DZ9EeeEA>V$B}%Vv(Gt~dbfqs5ij_~H}IWDmT64Q@$47>0LSJJ^W!gl z6=xkgz`02mRE{e&TG_SP2oJu1EI=x7%{E#o@?npDGKHS7jIXQrbb!znaVu< z#RXiJQ;!=+6~I7TuTg4AT`0T?1i3Ejx|U`E#8TnBX4#FP$jJs{Iy2LlU>Og`1Pp0I zFsmCB*?`S6(=-?M;fE=<=_o`XD+3XZ98jXbW@BvRaE+LxyP4*uGl-31VX%N5rA)Tk z=!qFrI!5V=0#y_16dYZd65>D!BCkMtqEg0nVIekhah=Zdn9cFTh*0x!W+;kJ8 z>=>~EU#3Xyv86$kMU{7eAkM29F<~5LoZ(c0iCT!#Q7T1Uz*i67Lh>C?;w3-wYL2ZO z;_UMthlxu>twGXlVsyZi3NJk~XPiU5F~dz?`4s>5-hZbjHOfe=@OUeUvK$$iDt9Lo z;2foQ#Brt8gfwej3azRG?me+r_(DLVR$U7Oe9fTJvNC|fLfjzaL$nP@)u^1Iy&!mp zNGzg+fWrxm3<{|nr3*ys#*d;_QJhRh$ZG_b6H8G!u4}PI|BFEwBD(}G0uRoXNTG02 z5rn{aP3cpj;PFBcY6j&T)@NuXK_;*sK&`27DOFLL9w^+G>P&}R_4mo_w(q`G)R~GN zT=SOG^rgFl{*6^zUGz(*1BrW!|K_*NX`IGA!(Am-FMC)nDix={A3it}t81MO{=&7S_n1}*_eFG1WhqZ@#zmyeD-6QZVMV6q8Gh^uw@$2 znZVR)kfjKvDk;cxL|8mV@$r8reg9uE5*}eawMLi8b1%k*f@07oDaX{~Ry8`G=TP4S zod$!$Hz8NY_{1QFC9OssnrnLWo;6qb1bkk}r|M`e;Zs9YCyX;P710u=%9l_9M4bg%H?!Oe<-l@)Cikt_1;!5vnr!^Py5`qQC$Fk5w9@EQ@8% z#M~y7(u7bTrKHSPncKPzA99BMMZ)wpy6x%82hBN*kPun2S_k1hZjj+kK+6WB+|!!b zLZnJYgFcf}Tc~yBSRF1P@*$mC9T6(Y(NcPZG6)|~N+6}ggo@2o3Wt!IBuN+zR%tY9 zB(Y&-aS>x;9`zlM0^wB@y5yLTdyb>q|-`krfadf(ke*smr9AYZy8TH(>s< zf8_9$pT%w4ir%`D!wdWA#&yiX2zhW1o63@HbK7WLa4BKsFylhuVu`Z~Q3`_3sYfwH zKw84&6rs~%y!QZdWeI7T;By*{2Gm;{@|hbtgA$Onig)hUW+#+@r6r0{hN&kwmsSCW zj6q}|JV9Cz5#A{>k&;M*umRx;G!kb8$wZgc)m4^0co|n6>2c-mn|aBLU&xL#E?{r( z2;N7CxI^AsfN?=ijiX17(Hmx%rb2p)E(>ClfR~`+s@jpN5~-6WtOD{Vx$I*PT}v7) zqS+)!k1!>pwq>xmzy%L`C~=%HNJr@42~muS8we>e^(uK+35`HeIt!R8_0~hNux3Z=1L=QQap)BZ{S>_KPWwH~agr&1-GtJH>toMj)h>Btk9611+XYd%te#mTH z&}wx6Q+1@3ATJ#nhn5jVaHuG%Xg_HRrU7Y=l^I4Q;A}O6Qh*8(Wh98az#TgRWgpd= zgNYdOCZ%#1VKHUEmmVuU(rdgj=#UYduW}b01QVlVN+b(tY=u~}XLXgE<%nY2cH*6n zB$}8*blYG{e7}c3bO3c=FB7(4%a)x?OO0GO2*VN9NRS$@1j<&FHW^eEoQWp50)hgq zDXhhNf9emXdx?*Xzxj^UpGd2}|BjB;H~+;qQkXt>=!4way9$8m+7_O;?fYm(ol`E` zddnyG|0737dkF;2XrIrMw!h#T*2`VSd#?XI2E_`G-1Iaax8*r^SZ3jJK7H_gTt5E^ z4i9%z`hv-1j`JrU#S^#v4|cTAyW90!Ob_#g!~f1Ti=SsXn`c<`XhvNolQ|wb^PN0q z^Rt<*om}U&e`D2lr*kCkIZg)=r}1rrkB{%Y+1%F)c-g{(!)z`|60{U7_4A4!Ei3AS zl2wvrDI6v!f^{e)N=cN|1eqf8lty8pyPeDz+?YsKFMbs9t{o)b_q|LtHxsw(Y*LcJ za7dAl$d(ql`lhe(<*!}AS&Kt1p501gG{&zSVYTQXLqw<9sRDs~4Bc6X6GnS)#rIZ0 zDLf^uxDNG36(kfT7z5a9=0pPk3qkb0*$6_k=Kc%h4q9F0x!WjizKNQlqC1toN-z!J zeZU0=QW41-LR7(%mJx;VIOmB~gM4{N*4>W6bNvnTeBeW$(@I`+jh`;U8ed(i>UR&crWubHP(~5ew;_-m z7I1y~1!}cA<)~!toHIE8;`8{z=RZYhEjcmTCKOU&Z@HD4b0{xJM=P9j=>;U?Avb>M zYNlsqI5&!EOg52aKy{lmbi}YfpdBSdwI)Fcyp{y1h*cF)TO5gmIvR?CMiirUpfx)O zLbK=UE7*VQHPn5LMpV$*egS7cX2j~B{1xV`S)`1>4Do)A;)Smgi?zpF0Yc-2gQ$i` z$HYaTh%9v@ky??O7ISA`%)_4Y9AX8%<)g@?$;_EeJS9>}v<(zCMP>=JJ1-=eiBWsL zPFn|B^|%TKO$=Hx9vApBM@WUmLM2{XQP_-uB10-iOo9pPqY9NQabZg0(laVcvN!$) z@}i5W|KT4HUHfUm#Ad`=(!Y`h9~{c1l*;3k!xysBTaplDK!qVu(t)JS<-HYd>TaU@ zjOQ?M$)nh@^DJ7;CULEfkp_XnQZN_~Svqo%)theQ$}j&H@$MVBcA-5vbO3S3>l8#kRU;f4< z>Rz_MFMZ~FIo<@~pKg2`fBDR>RquyWz@J|6dj93+x1aFc-#zyxwztkX;k$+LLH_SG zZw6pr|GGO2A}*i*B)|Q|m$Hx^{D$8?eeiw!pR0a}CvX1&-u$?~ztg%driXdgRlm$f z_xufklLxvV+4I*Zp?Th}SMiFAf1PeT{SE6J{RB)r^t5WzJ;muD;xxW3@bNMH@_jV2 z<+!b^2QrXYI(&$F6cNV>D%Ow)L@6rmcvqsU1c|D{4d4P+mAHW*ZZu#z;%mw>c*?Wr ze#g^!_*oax)Dc2d1ez1xpP~9Ip7cECkM8FypTCSR{oB9s#JtJ5%^A$i*U{X(2_jtu z2HhDj4OS2CMh|+ZxI^Iwbd83jQ;pgRTgjxB#hO#@8n3%0VVqa_5W!bo5Ei207)py< zPpZa&2xyt$g24p~p+Ji!smnntbkG!Kf%Z_yKzm1n3%~oxWQoBay@BOD%j~&fhKnD! z87(AJQ!@}|NZNJ!M-D>&2$P)_V@YNl%9lt4 zz5X&|8%URzxna)@eC;cr!>2i&**S`QOg8BAq~|}M&ddz&{Qci18m{uFi5X(&K?Ou) z@R6o2HC9V*R1M;}EzCAN&Ds{y@e0>}`SWzA&LB-wKKG@sQQNVFC`$O)$38}uL=@g3 z#Qd${JNn|NHaMneQ<8!_?ZGzvvomY4uiCs+}v*^-c3 zoP@IQIOlLSLt4w8GN;T^($!V!%^IWL3ag7tT=CT}&|5vq4Fgzw{~^9-dMCT*_dy-f zu|-A+cI*i@$7n;a1%d>rW#x|$EG|e0F+u|hl&({=F*;G~{GP{i$y2|JWUb#ZF|nyS zCxF5LmFEFPO57>@4KfY!&!O}=0CV*-xMcQ;L^9^!@D{FK z_$)41{`0^;@v@74g`J%XPg>56%U|OSpL!On`NGC`n;JXW);x!X>CnrMar4TRjBOtm zEbqVNom_tOKlp3-&Xcy`=^)~s;dBsj8sGA`p{Qmc?rXexrAoejpr}p4Im#?Y z3srRTJhqbk1hTv`uyfAg zy+^9bE!qnZLJ(`i_Dwt4^!=}5&l8`Ql<#{Hyyq`rVFk|E2}&?Jd=!xm zDH}C(Zkecep&nQH70$8ok`n?%<$qAkV(7K}2n&UWI7W^J*jta_Vuh5AYDHb;YUFMV z-Xnw}1Vw5sB2h55c|OfgP5dh{Sa|4&b*JG+-M&nlh&Pyl~RIr=BGNe~EJu*3wm zZ1Hp_hs2+6q4(7AX^Ix2n)=XjRX^veU?+A}N34j!R!+oL#tem`)o63Rtn=efehS); zP_9YoJ+|}=$_x{EVq5aQzkUa3#r#6S76K!$7-p7ItThYJ4A9l^`5@S56avdQgH5wd z-t;?f;UVAocs~8F|Hx$@|0FkDaV1&Vr#>;w6EoN$0mDYbSx=a-9ugloI_Xf6YKbzj6L)`e8PmuQd99?nKm=2sD-g_djtu}V};>^%fgsgL13D1p_62+5%6bJ?%8xc1BsBgP+sfxrui7Xr1W zIwV5n^?(<6nG&89c+<5%LVoSB>Ke=j&~8Fw3!{bIjI%MuNo2ehP%9|QKon60$|{2p z&~b-Q_Q^$);>pj$UVI@z)hTrZ3j;b&d<^vvNXeNx_gsp<{RHlY%gGxpsMi?o-^b|v z|3qW{I$F&sLTDgWf%Fk^NMUN4>qd%C?%d8ZUjNISd(J}u7!P|CWlpdeUJ7caf%8=& zxA%@>b&U1Pc%|sHW_iftp2Zm#Uc^`a?cMY~`voq!_+w$A!>tD;CodNAe$ zBU14R>yGwUZF$;|?$mKQh&YXJdHliZy`wPQ5!_nY@0xjFj;l2>f%Kjtq4Wh(DY7D` zwrLA;afwc*D8?zhg#(mnPF!zcOpGma#)BTd$WTTi2ndysG!m3)vt?!{?PND$JYOZ< zs!$z=vuo;6jp}m}Ad>`VD3pc~42m(%jCry#oY!hG%wh)Cu|G?3dM#mG7Sx+<(y_y5 zj`~y=D@vRzQNf{uMx%(=u3~}UNl}EAC7BG&9~v_^Gt1=SA>3C!!Pcv<<$q2#ncFl$ z!_U#ENxDVOxLiTWCKGx{-mK9}m)ZZpf8`;2NkLCbGV1_Aq71@BfMP|!*2FN|Y7nW2rSU3DKI5TEGI!0@M3-OA z3yk5+&9lt4x<~}A(E?()#8Tl%^a!sNYbh8w5%9JOHoXw20M1B4S|DACsK+?nLduAI zJR)D+k9Qh`z~PXhI-kM2waG4tG6_1W(d^FB-QFimOduZdc*@~`(M?xT_LeJ!CgBLw zNQ}mLhmZx{mry2v2NmIMk8G*O;1#cA`VIe!P7oA$rq+xaK`|OFp@>jXV8_EQz&-pz zbO40MdCAcq{SnIFdn@UC|D2>dK`8>UbkLdNh854}o^UBY`pdsTH|erk3{aUPk^(OT zW38zRg9w5s2qc0a6yq?!BB?9QsDBh;VruPKp74@i=DOMU@RbjLkSCmT0s5*dz!&&> z9hr^SD05*gYLi%Ns{xAp86O$nJqnW>kC^|9w~_DLO>*WrZ2p;Fyhr;BA+Y$Kza+i+ zIsl?AJD7d(Pau;MW%%AZf{UXEZ;r&#|GevU=IT3m)L9xuf{&oEAb#LM27ys%> z+wyb}aq2i7M4ZOAH2!7yjY-tDzsj+9zoXJgzq=5E?o*#j{UHxK;p?v#)jl2w)h4Gj zc|ODihY`9;hQ#4Tff9;B2_kE-cw`755>}d$%b)aJeCNyFL_^m}vjNtYs7MhP0T(Hp z7X+_}>W0#XN?O&G2%#wmpdBIz2E$b%AJ`%r=pa#-T*|^Tp2f@`yd62!rceT1LbKMa z%;9`ljdUkBfJ2DS>qVw;7gQ_@nKEVUsZH& zD*{FEBuX+~nx|QMT-2s?j!vUPY$Sq;|E>kpn@yZ=feJ_=2x~bO-WC`F-epA12?{l+ zs2&AS+YD#!Aj=E#yhLb)8?3U}Ut~Ng2&#ZMVm=S({!xnF3b~e~Xy#^jFu$_MAYDeu z7+-ouKF2D>vK=5w&saju#)u#(q@}JD1tqH%CUQ$0z)QzOr%5`0koW!kTbTtmC7Lrf zH7Jf9!l)S0(=3IOMq=nD1tyZL+K8cv=^a~UD3@vL79Cko=86NmKZSM>2rOSO=uC9k zwS9)PtnL@@9ogEuUk5=MLZu8O1l9)*g^XG-XjhBk3|t~JRRVnds#21T&o1X@*Gd?yqNhcZzmm+BoV_qe!@Y#5Z#Nb5*i3H45!INFA_ zd1a&~1VSZi>Q$~fZ%QD&Lny^H@BMeee|?6FraJTo1H!F0;1}jGait2Tgh2>_RR-@$ zl!rhG3?WQFo}t8mG*i@{_*9w*3Ohz2))b2+6e(IqRid>oPN58J!mB9`?yau9>A8CxL@fT}U$OU%uR7to)}x<5WuU>=&u48l%w?(hH>4 zc&&&DlzEQOf+&u0K_aEV28*>8f~z{|p^~T6#!!q>GB;wn-C^&ZoB7Cp{3owI?;PsO z2PhE4?Jk%M=mKMK`C1SVK#Q<1YQ|LHllE#bbd&JhQL7miq11TZcwH55iEGFLEm9*1C*k7zbpY?~M}VIWh6 zTXRn+BU&cVl^JtMM9q52fuNLQOdYm)!`QT02q~#6Foj_tOKh`&3^`31lbeX6PP04? zNaKiXLF_e>0vTz*U_|AY;X^@Cg2c74^bt}}6rN^nf|YW}G2kKfO03q^9NHvgUec(~ zFyUevEsG{WM;UdeD1$-}A&g*Td*lHk5rJ?hr;#d9&Aqz6m;LEdHdCvd(T^h2^ zXs}AGB)N3pEz(iVG_;$<%Ak~~rfvk3fJ#TC#TXMj(o2G~7y`p|iME>J!l!*dU+FD# z)zzQlp>tc23;U~Fq`VR8> zU*+IierfH~nso5psN-86WTxFKU%&h7K4I(k(urqS%@_E{p1ty@YZ*2EdTKNZ=hk?cWb++p7BGx>*`yo#c!cyn=>llI26BRk)B5P?)l)M!wq+0;u_c-nJF&{PHp84!avmBP__CvZJ!nJOnEc#o8FP0zl1d^umPC4&RPVM~P)3E;@F zNHoQ0$mHWMCTcV(%94Oap(^KT;lbquZ?U18iSXWIltJL}euai|xZXUesNuJth3hX+ z?AuLt^eEG_6U3Y5I5@vb=^bSx822)IM64D)d^YBA5t!U{9xLe{j`b}!ef0*c1dL=n z7*n`_SAu-)@Bus}N(+QwEzboclH8U^4YQ3VMko?lr96sQV3)>>%aj9DD!VHJx-ob? zVt-C$YUjats6`TMm+2TumV1UkXc{zudQ`&!eH9oNDUH(Oyk=aK^qs@YfX@noFLB=C zDlt~15rlF?O&fBrkg_1{9p;gbe+WPD>}Rp}vsd$l4`0U4rlwJYg(#t&JDM#|ZJeOB zBraRTF;F^^Sh3~obEz*J#P8crIgz8hf#4|85hkgjWki|g_`>4RD50xB(3b=kpd6!& zB4~rK4(BXN#K>-pZ!0{K_Ea0x1YUSlaL6bj$N<6NZBAqw*x)GgoTL_2!7xpN8d7V< zsQ0{^>@kl=M0Lu%QfFkZ5JOYzvKwLnXgKJha3T$;?s5ND#uy(9#a;H92y7fv|frJt$DarF3l_Yp? z(Td9P*;#~i6<>bjXk2g(+5}u~E1!wA-g!WRG;6Z3Yi+B+2Z3-ICWiz3Nl5dQJRPt!@5n|YL=+P@6nnEVJm%4a(i3H46eYP& zX_S_FDanc)vLOI6ZV-Gx`at1arHUdg!!)Pfoh2@7T)wixlvbRZTN>W7xHx9!!t>bm ztmp8U^UuY3g9{R+m zapp@)()a!?d%yfehMB_FB~p}3PfyaSH>kI|barkfq&e2YvH1gB_35wiQxi?juh(%| z35^8CLz2nOfF!I8ky0aNgjNQL!upaBWF_#0N60EqBIpt!Vu&KPY~MxZhIrS;n;1im zC?bM%YfjS=Atj!Y!j^dNQA&YnfzI$Y#b<(Ob{Bl;AMp==42@U)6r&_TqywZB_>dt1 zQ;$hkGgg1)^{7w1m!v%h!;&l%h!7B)=Fsg4;>>bnRIvJtXY<5IJc`_oNqvFFRh}H8 zLA_l^maFs*93W5HG}{xjYBiKnIOizxl<~?ck(RWlCP<42G43O+hFB7;BkT3(Om1fT zcRq((KKjp0pM4Ho^L5-rjPg;XGA6*`$wp(^6Zel-#NQ9^_&3{I;ntt{K_C#Hv5OtQ z_BOgtdmfjc(?OmSfEDb@AClw>_VcxvlE@2pqyPdEM{z+EO- zSF;cSf#kb)z3Oi6;m*;DCV1YiSMmN^-U+~OeetE-+PjLEKIF~R&0SCB&yNnUoE-&V zBA#PQ^UPD)|GATwZYeO9(jV6?X)d+2oM!;$bQ&Svy$l1(2?1=~;D2kj&M&wwcD6UNF zq#^Gep+6i`@6OOZa|R_9-g~kvW3aNs(hb+MX}Uvm$2k3Na-@LdvYsR z-Li*|{M|?S>?hvGuqdJDdHgG1#FO9jD@@PL(WrN-i5w9qiUKJ$rLIQVgIHJG637rp zguxQ%4VUTMdJFc*QL?@Jx#@%d&e6|&23r>NeM)@p4xaPFKSUu7XJ2p*+jeZDOaob# zF*()77{$us3Od#xH4-RFhl(0(-+mUYWRBJ*_=%r+J$V`E^$wx?8LHVPX*N;y7KZ9v z5hOvt;@)ey;_6$ueqlf7N0QRTmF-><<3oz`U_%K6e6aY^;-s!R=D{N*2qE#V1X~@u z6ahks)de{Mr@?0yD?GtK;zbp#mV%%ogf<9DgbzrSRJj#pjMN&T7m=YvZ`*|a_rD}< zfPCRg(6uJnXo%9)ERwPkRgXyO6X;fxMtc)}0)(=-Vg#Xvuqo6!TvtfWea81w6Ndh9 z5gj#~5$G6M9-Pb)q2!X-{I*kr0GK3H+nN#Hm&JuEqP@YUH!V{j$=80_;jY%5HP-1iq zltxR%xPJs`TFh)akr1ksqS0v3Xf(*CXF0I@CTiDT!RB4(;-UzfWjIms(?dBXL>(@9 z%#-+=kA9q|<_)_3DC2sQdauA`F^j+Oo77(LeJEi0%U6>8>D%aB@t?4B7F<+OpQ=5t zxmT}wF;E%l3G{6pnk0cd#o2%m8e5h~X+WP4`2S*_c0z1m~PH7EITAMMXNbSnJLEo0YONlth3Y` zAyt#OHOY7|B5Bl_-MJZW1%qLqezuQ^T7%~FGzpgFgNw9lo^6v`7#0CJ?jss)tQ|vM z0+QwZ2WS}RHYSn%BWSx?`JN;ZBFo5!B^?zL`^sO!yFj3Uuw_M&a{?(Oz8vAK#h3Qh?vrO zJc3rIOSyW41N#oMGJUFR_-&Oilu*h4}&j$3V9ca~s%+1|fpR91;9-+T5?+^2P}nWwClMX5d{q=Gfm>@^&(*GxMT5pVGZI`?|;Q3W}Tr&yv>Yi!P?| z#jikG;_5YY;Xy|%c4MZ_dMF|&vb;~M+F0vRNr^TFC`lT#NOkA(BT15Q=6Mg{!1Xt= zwEHF|&bb&_YY>VOMWx4Yy<^LcGuV9brQG_pD|mG72%|B6X@QkreLK_7s%CSvhx(%~ zVeyaO$#2lmx91B2*dB07_N~tR=I*Ug?=BLPm$CV>AC2^9mc+=+z zQjutZ!!nqUDaRSDT8y8VW|(G-1Pl+?ptLNn^k_5<{aTw+CLCK#Sve?~J!68={&}Lw zIqH$1Ha87gF`Pd_A{9YRBVY8Ts~%17bsPS;E1IG0zs*2*20$vA@EM(@hC$zROo7xI9UOrI8+*KUn4l?jMq*-aawFnL zK9ZzWM+^p7SxE}(sDUW@9NoX0O=my+E(3^lXsu~&*~RMqn`oVR0a;O93(7+xB@#hn zW;-j5h|r!!96DUh{uLzzg>VuRz~$L}{`k7`ZZMMWs{q1{M;!Rgp9f&#+241k)YQAG z^MfUbxF>kZjvwUhUwbX79o%7p^?E|}T>T6lyZPDoWH)z;R@CLKPy7I%J@f(o;;R3} z?$xUS7?vyipR0a}kL>wte*N+P%&zXmCv2A=*TYx$AV)`w+qU^;$QFOQ;B*ji8sDz=}wmaNxfyxJ!yiDysHwIO@sbfXE8a^ zss{9fz=c4q7FRE5??Gs!x_d8ctrVNiK8yWVe4g6MAD8&HlGAXtQuNEIV6 z2kiV? z38jM~txVdQlT_q*3({6IMPUS{Lnu4~Tg?o3Q7LVuJxb%zW*VE1kuqT831Trv2xEk3 zQihUqM-lt?4fyI;_c8O(?_hRrg5L5nWt!8`HHaJ7@fhD5kY*lJ*DwlXPSdCv$TOrL zG1Jj3uR1INy;cQbhqyHdbb-K@m1jsTO0Y$avlbmCxP=vt%^zm=tXU)$uj+W)M~WK4 z2t1x3)_hg~yhM3`G58i}i<2H%cF=ha{T|dJ%=Qc5Ex%0frms+c-P>WJLlGd7l{~I3 z1;Q05a+1&_Xh}o{MlzChHlJ}W5t`J4(Gt)YqZl37kEqX4ub-M}L0oT;)h8*(eS$RA zHH^n*78P0IP6yHKl1=ugNlic_jD(^}SV+f%H6^b57GJyPxzVSL!*BZy%AI>{=JSU?#NS-|TU@{VB>)Z#ZsaFE{#gF^Q$NjllaDyA?zc63cB%&sr1rK1 zoK|%5_ql$M`hh%{asOQ*r*RtpO%c3j{xAP{7;Pu0a4wcCnl*6m#BaF zv!ETN%88_aVDL3io6ewKZ&rz+vVm0KRfM-C#c27INBe3?Ol{kl4CYse3x^ajh)QDB zdJsXfsXN0UG#S#sC<~oAWSQX!#5zH!m=F|2(Py$%!~EI1SiJc8aOmJ#Vzs-C&ZPBi zbqt}R=19OOSWC1PLK2)qN`)aHwF1gYB}YmkrI9*8iU^@3!H$r^0UjY89$y)Xsfa+p z+7v_}2sl=(GDISEga{>8H;8I2#BhjEhLV7+3))E+QA$>`K4xkXUusr&f1dAtuIBtF zY$oo^RnFY$3VO7Ju>afEh*fGVZ&$t*7azQbF zh|s$kzjP}hI|6CtLqL`x21mj5(4%=oe=j0Gj3|$xLZBQE2zd%v$odefjy8D@p@DjW zh&9d+z%9aX9~7%pJ@o?00fHf9i(q?|gLCW%$y)OJ_#nDGi1I^X+k@;V!WN(mMtJHi z$N7()q`yN(hOf&{Mwg|Hwx zPzr{VTS+FHgkUK`LB^U;Sy9mIEz_B)yc&AF9((req1WpH(C_!zw{IWI%gdGUz;WpH zdaPt6<;pR1ln@1h3njUfjLQ)X(}d0hnbAbTK6mw?|Hjkxv~6#TmJln-`;m~rCy|j;kmnBagW>S?m`H` zxU?#3r~h*cen_x>*L zr#m{YP*FpdmzUYMZy)`B{|@VO{5^d8`x#DtPp_}HfB*hFtlypO=VaxcY~QDXdo;Z8 z&Ue0(TCK)lFkn0$ljk{c93!PBuPS&BuFW7&LO2_dU~4S zaJW&{`t}mtu{ zgb-v|#`5wqn>KC27{d#n^f>gyH2H89*Y8mY*GCv6!AA(4;$4BBnxPf9D9bTMLFpW^ z*QBF)-v5FBV9(*DjeVtQN)$y*PfyeBb~$?VDC6-M?>){rq9`Is5;~nOkG}4IxG;L7taH zCI%$77$HK56soFs9^-?$6MR2>2a&4@f7BdFt|8p2g-Ls|uj za)i-!@Cp|!GHO=OEUF~@YBES6gg_~QS9P3oDAt~TQX^%IHZ_75Slz;yCLtF%p)s++ zj`rd6qts`%5+z%4!vV_o+4hi~i0iN8gO?rVJ0G=;E$3{;EsU{RQh0@`HL;N)WDd~e z0rI@Z*lK3u1nE2-tB^8)P>3L^ATbmK1i@Rd*;+jV!d1U3p=s74X5$9FVdxM0xS)}> zfD|4V1So|L9%X#xnW7Y4mf&htaJ%N0l8cNc5{d>y0#t$vBbt|-&v4If^n3paX(asp zUl3M~B0IB$A}6RCs#w8f0XwCMY#r5z3BDj7_R+rb3sEK}j8@4<8UOPQuV-+Qj)~TK zjn?NjRGMnF8f95l&((UJ-+03-nMiZ&+Ib5y$LIua3`S}~X(6{ziwHg-oW+k9Da)M6 zc#5C=sh^_JXfPU$HulkKwJ3^W<5}#S+jw>fA+Xk>wLanB_1};E_Pf6+!T6;p9pX^z_{*GU7zvF*j|9pHqt-t4;a~o~H zj%TUYvWv%_@-bXE^=QuOT+Hs(t4~Ol}XiKb}CqvwQU_Zd$p5b0;1Sz}D7niP49Kx8j38rJ0i5y=yj>&si(;_PF-QSNOvh z{qZ-neUc+fn~49#Y9qo0{1$;NN%=QNIEy!RXDejUf3^W)cDe-E!y7LUJ{ z;yB*u4?5?t*52W@bo_M$6&-o~x;@#xl~VlO-~HVwpSyb$M111M z^T;5R`C)@sx_Io^z9}(ESd-qBAeS83M{P*j}e*5D+ zmAc&3aokzEuVe4ty&KD4{NfkyvaFNg&PGP=>^${)y*vE<_-o_N+H`&0tFONLgx~J$ z+B;$U7jutr^#9y8-97h;pS#=JU3Jw}ci66Xbge8dF5YRGCp*T)#YJB8(?5kwYP2S2 zD2g7zjw&v*l(yf)7-UpuK!zy_j8JRI$|c3>GXMG6FEbpc->|Ra+xcX_)$4U0 zci}k{MMh0)L?NqO1+9T9X<0TJ_%y>=3rbN2iwXjgh~n}up%-o<`5!OAnL49lK)2DN z|Hp5q_o^Y?EB*m?o)1M0)Br67h1cly*#*`|;cP`Y5tgFN&sY<$}%g)b%R+_j|VP+Qe|_3S7~J<}8JG_;O4rhNxf=!XQLW&H0oWFR)H5&&!|LmW<*X?vq zaMASRc;u$1t+{K%{{9UcLBw=z3ls4iEBQRR8*|;#m$+#9ad*4yFCF>l3Hv!24*MH6 zmXB}ylb!SRbyikZPP*RuInDEv^Y%`5JsiL8?E}%{e?NY`JGz!`zx~PTcKq@^y(jNc z5OH^sQtnAY)Tt!9+*!x>RLi=nV>rI7J1h5Oov;TACu^T?Ml#U@-3Iq|-=nK8XZWQm zNRH1um(Ek}`^2()isRdMadDB&lV=jw6Uvo&q|d8dWHd^9ymJVdU{%0VV)AO#-W!cX zRH`$fWSpJ+0e4r|N}8s4wKk*XJ(f@@)lj)lmt{^?l;|i%kD>4-&R5)i4XAbl_p5)6 ziwx?yFCzE|n~rGJ8!Z3XU$OAo1~Z@jd$?dLSVQ3*5e};i21%utYCvg}(nNss0V^F& z3cS;lqD00Sx-f*?V{K*DC4_`fQVtez!lR=OLe%hN;0uJTI?bSvpJn-Z^IKp4qr09TjXka}(Kkh}rZbv}Z3y21yY-K_qJ< zT?Ik}Y&O7;M?|Jwy#Pc&X+;^pg@D9R`hbWcq!P5_7zd1pBW#`#tV3!@vp%iPECR_m z9WX40Of$N< z8S(W!1vl@znVEJM-Rw|{r&ydnP<6T+iqaTFkcjDNLXjZ)ihau~%x6QKH0ZSsey|oV zTLc*sDT8m(8ZAnTcpL8tC34 zc6!tO_Pq32#{M-4*YD_D!}kRDD2O=w?6Vn-ModjjZP1O9BtZy4 z9LG#gPqVbNv_Yl0D>{=>iosw&mSs#&PZLGaH_(~Z8)yAQ*6VeqrlvT0^eAbXZtTA( z3RYHDD9e(WnVF5U?ugEGeBGUM)a!LRoeoP&OVrj3e6GFrTDsjX#u!#sR*0gAX0y4` z_!TF+I`)Z)iAq<0FgSsFb9d=X>$IXcjyEoX%uGGc`4}F|uup;l>+p zq}%Octz}_hVdLC1n-xF4D2j~>?DjXpdiyRdEp5<_)^R+YY5n-t>tC&8cc`P)m73oy;C}q_nxV#DGnVv#Gylnn3$Mga&mH`O+yGL)MIsZb%QE3F)=}& z=j`UxapEk*YfdR3x%lFXvDThIXIgKc+tZnv%_dV*Q|#NfkG*^MGBq`|aqPFhF4jjK zTCEnFHf>^cb(OC2&r(cMDEy3ShX~qV_Z50 zhYwK3ZKgYQl5zy`B*6~YbEu2U6{GpD;*T96%QE7)O{=?wVVTn(tl;u$I=eKASV>A- z-RtQnqjUum?KXLll4lkp1*R5}j&t%X$7X9YGg>0NB@%|b%xKL_vbr)rxWH7mLlkM2 zh9gWAVM~it0<8@yK%7LBg+K&q0f^-t<3RJr)-wyB^lxS4nk48{LC}RkrWM~EE=l?%8H){As#KN!sG4^H8 zqOrWh>he5iY&#Pf99Dp|4pnQ@ZASdT@BbdHcIPgiMg4xCm6a7*trp#GmwdF!=-AC@ z8KD#?AxMKHi6hj&Qx1EWq686xmxLe?R^WsrYBy;%yS(Ea?_e+(FflPfv)QEA>ur2) zx7&AFr`zKfm*A84z39^hj=b}CDGuyGn20leY!{#iz`_ta-s+VLdcx$S@O$^HMpa(0xreEH=priTFd-m_nQpVa%F z;?~~P8_QdpC;CA=_pFz11QGwf`!9L^*+2OWDo(dY;d0(~`Oj{A{_b6`I;jJ9{cOuG zzWg;OoZH*Cz4xA#m6eTk`u#rp_wUDAOQ%!am&b44>-A1p|IX0s_1M3EKL9&+?D&TD z*UMV(@ZX&>*KvPcn{W?J~s3gcbLZy%u7@trcJ&4b8i0gPEP$A&FBWY~rRWJD= zY7<*ddEbM12F5TcQ&C-L@`)KD2=JNsJCaZMIRji9MZ&``-G<< zrQz5`7qar7@1wRnkL|RvJ||n~5r}ZYqe@4V#1x{W91j`FlFd;d^=+=drOxFa`xk_^ z_#oIcJH?J|nq#Yb2r8f=g%y=tYT`AGW~D?j9;LLVCaS>&UlK)4>g|AEl$6;*Lj*(`uqbWFg~HS#SnWZc5llf@I-Jj_#|lOZm9K;r1lO+=t{(ar zlCw7B2}l&JojY)6??lfZW-vcbTK36ZKq-l%L=ho{XLa%D-3lVw?e+;B`*d+1dSVVG zByLT`N?MB%lDxM}==Et9DL6~0*APL2D~M_l(hJ7p5tEaXOioU2lzIElr;1DC`!9%a z!vRO%@w))D9`_{jeY?r`edDlFacKX>^6>I6V3!vWQB3;)yg)<0@h2aNe@rvt%uOeE zO1^!Y-&c@QenVTY?<;v0-1KMntlaND>y>-M<6u1z>C@p>Akv4Q#j`}Ru85}5v>SD+dX5-qotPrKeC{^^%7dcpG< z{rhE<|L<)~F5XJKWivzpiYn<^DTVL_QpAYJ;EED2a$?z}Sni{j$B6&<5XIxqqqfZx zTv<_?q-14ro+NUl!wfxa(VUn@loib&5C~b|RK>^OsP%@steeS(%~YY95W4g091 z#mcCXQpMC6^ajS~>`tY$R({Su`m+Skcl z#vm`L`GjU8VS3uId$`It%^9Xm3MaryN>j~Ln@o^8!=|YwX|GR6JgN-UwTwoP5XE3S zO?2-Va^V>6@=vqUnWfm?BWXt914S`H#ciBWcm%%8&_NQEM?^7ep5ZKg?jtnz9VNWy z&#+M)miATGRM(K$8fBSN`YLcCfI#DPiSrIsL_k)}+(b|=3C53jD)E_H$@(cHUBi1A z4UZ8=nl759-3KTRUxmMZAH^e{$(BX~U*{G6ypKDSf-ww1>O=ub-w%gn0n}v9y?5&JH+x5;BdA;`D!L6 zOGo&kM5_C~tMIV<-oI`G`Mz86X_Z6J|MX?_KYiIs$LTzu&_wa)hh zbKeDrJ`AJ%r@rl_b5CJ&)5C8p>G6CNB=y&mxAAcN6*%6M75AfrcJ({QN_yHcj z^?R7B?;uhMOX(4=IQCzBbkDn4$>#xRnl8Wk9sh7rBfG|qsx43B)Nwk9IE~W)+-S(c z-@mK+AS81y`In3!EKF0F?Ynh(e1x1PV zjT*>zA7*R5VPwGV3ngnYkh>_G}#MoNUme#}+#|~b@ zwDLr{&R|d{SiuG7?WCK;6cf8xU0$Im1yQq0S(X%3ufT|He57Dk2LdI7eemQWdeL%w}RlfNYIcW~6`^w2RlIcNJ-xli3_muTk%I$g?q~ zlsFlx_Rca?(=%LIq-@PmpPDAa;}wXgM9@NNO;+?V#|lK;pBmIkk-T|MBD(AvwCa~QLRQjspGswE6Jxm_*b<4`XfB)%+2&0IlV`JC*9q* zz^Dh2!FW%e=Y%*y2TLeRWJ4o_u3W3VB&x^s_AfAg@z2u!|9*uSNhnKN#-ItT*qj;( zX>ddfMk5M`OaFiN-aG!XyRP$pe%d+b)^C~b%y(KQy(fgw zyFict0ugaVWS1riyP~p+sLQS{u8O#d{A434iwKKS1eGQbI)sn_2`P{^$)rrC&$r%k z%BTJQ_}rN!rcFW`Ft2&s$K3C|=bn4+DffQfpZBXc=B6|3B^R-@^QV|T;z;V%8j}^c z7|6Qo*s$pc_HMfbbJF7vDR9nvN4>a}*80_zJPS?510iuc`T-n$sOi~cG!gEDXh2Bx?A(LC&G!{sUJO_L#eMjgLh!s} zUd?;1_#X!!yT22vZ;PjFdLh>?T}g*Nw2;18bk5ssTV<1Y8%Vca)73@?epIE?!T zibL0(?f=l9zO`s{Paw;X+lue|lW9!y9j$+8?5EY@1I^XbFNB2j#V!rL)Y7R)x0 z-4|cT__Sxxo|<8KxQ~pS5Cl!W1{H?{*C2IvkMHZ8V{ps0%pH9!P8%}kXoN<@2A#D) z1ipXicPNHq=BgDSrdiC@RrJaLNBYtUtqv?~gZVa)C%VV_V-O#BFL`i`-}nyl{tQh$ zMibFln{^vEam(g)xbN;vx(@;bh0_9+_3%{*l_1ku;&jh$KrIiEs$jJPv}cKo5eU2s z*f3;zZjQRPNF~XOoYBexf{KnT2mzv0TonS{LCIt1H?laap%HkYaAJfGZ6XRAJflHF zF2N~9v;iR{LFd?L7!GP~x$X*@Bab0iO&PlsnZh@goHPMm)zHo*K}ZymR=2=44q*(4 zWJjHu91%QG3QS&*5;Yt_h;-P6Axe*y4(BS!4Yh#aELz`clN~}p3WY!;tVKmJvFH_~ z?2L$!8k8nink>(ts_{Nj>40h%wDV+p7;S^rnk-ky2(^f0QPOE?(1LPg$x!GJ$#hP) z-=o`F!77P!3d$ja%pyh3rcE1(F;II)Z_PZdR)<0wYUME@hjGB=4!yb;iWWV+9<3E2 z(b!$-T*1(yk zfKXJU6`Ya?6ft-jU(+22*6qHDt1tX2Pdwt~Xq{mN2t2|%##2W#*Ii|}<0^`^$56C8 zcX_Sa@sMg^D{9RaWb7mTm`X@8+YmFD>rS(9*;iY7zzbN5*a+yCfI?4L{?o%oS2(?0c)2xCxpvR{9;leYQc zhPlVV`mc zv3m^fea>ZkdfR*W%ng6f)r;RI#M}Sc3nVA6c^p4^v?_rliow(s>|!x)2<0WBu>s=fhV;zS3iP^JwwB3CW>Wf!vV znoHSo##2!kv^Mw{(Z-ypvJc4jtiCKi4CcmzrzgvYr^H*Yi8 zdjntl?7#7xT+m+{;8h07!*rkgEB}mt>{AFPqkX}bK<6MjX+Y+NP#D;_8S$RKp*>!u ze*K>kXV+j6m)4*Yj7Mz`lcrhzqaOtd*6k4OYTDx_ONcBXJE`>30mY;}OiyGRMd zKp>(ORMi3^Gj#h?NFk^P`(eBj-Cs+H6RK2<^ous#=`HxMN*zly9fAUEfzKr^CE2~a zz;div`u+{X_8Qh@9f%S|q?a|!^}BS|9gA=|QYZ@T@xhU|JIPnRYEVki;K_VMD23FT z5G-}skmos_{uH&d7#+!6hMb7_QJSV{2qI!6m}u}SQkWJlM9QY3$P1*-(D+FKks|{W zYgs{v7Oy1H1(Ym+KvpD+Sld{drlD~bQxx>_R_abTkB|b{$_apNEQK~GlAW(@A|_^J zS%xH1)fIUbDT)^L_!cbF7(8-j8r4WTy%sY^Y(&_GGHNoVFeXO|Ly0704%N~q9}z`{ zj}1b$iJcBgq~O6wL`p?_W}cOOyV!ff4%*XGtXa1Sftut935XLqmjDRZU}?5(h3U0) z@;s$*6A+}XpCnNRRZvX4PytIUYl@>c)0&x0p@X$Ys2YzU#sE^_wL%6(pl)b!nM>%$etzXry)!0I*W z?{)3XeC}rl)V^dYUvrnQTif2mr+;RVkzJvGH_HLM<`Msk|8U|P$W%c~ckXmupL_9u z(vO(R?tER3o_{8fo_{9RH*6nV%Tl!m8ycpIwH!Tl8o4@jk+_zcbB=p0=N$K12F)_N zMmMlh?JmU9LA3e#N953L<`{>S}gpU$e)o7v7LD7Voyww2#pZV7h zFuiBUqp}jLhs;2e!OR*s|Le4Gd?A(ADCS`8EL2ON*QCyZ4R9gn&6;>(zy z?{Vfy$FcXi%ZV$K@ULDA`Wh1*s20H`yT{Drs0cm=3S)>;rjW0gX7juSNrsGNa?z0< ztt0|LP@pAPABo7MDF~k68cbm*Omf+g1ay(p$_*}fn$i&w6m3PQN{kN4MsOwI(O6}X zLE?xsZem{;16h{QE;5>?NptxVw=P}e7@?BJLZ*BWWi-}CAUUWRAybxzOd{>9-6D8J zuEDk-$T62#v){0Wo6hF@-T{ zwmt-8zYW)30T+A``J`vkS#m{x1=aXH{_3le}_x5)K9>vfFEIA;1Z;Iw;O_E6Bvrs-v8 z-mBMiwxoS_7(W;u=9k4`9L9aesTo{$2t~x6zxnfn_t(GX-ghAmyw`(`ywfIBP>v(Q z$n?W+B}jp4(o89;z;**>$B-l2*YT}SzMsea+^9Tc9Lwg!L0eiRyI3Vd*&b20=-i4tv`>k_euC^0faWI*&RjrLJG zfm90Q7|8I|7>C9AF0%BrCA{zzFJsHpJQj$fU98@)#F5NW*EQ|dCbFWRat=gt$C4yV zT|^`=GD3jh0#&palVPixeyh!fP3sxiF`1OuQOURtWbGb=hzQBGDaWCVKpR7=FqDdZ5J^ZKh!lB_ zvyLYCgX!!5xzUK2Le=WJ!Ye^*V)3k$!YP3&BuZ zOM9{3x{zXAVdrKE{W)B4WYZ7zmi+MJa1n7BKeBjI z4*xj3`(=jT{T9QEF91NVS;y=-FTKz2^ySQ+S9HywT#%hL}mtICLu}IQ#WI>%wTkZw-yl;K|6fa zQ1p5jnRD&spW!`!cP>9Wy@q3Mxt{U3q}}U+$-tL@hgJb<7Ic8CuY$INkSC`l-2*Qm zD}e^;2)#AXYXM#InGS9hq^$_Plc-y=fGDW3;L~8&Qqv4pQ`oeWh+3g?NwH>%{pWoP z^O|EQ`Ymutz~_9O;wC~Q3V|XLgd|vr)CwOp>$aSLxqcVQl_*hx=z)~vCIAi*151m` zsAhoo1?4(S;2M-v#LyswLTiZ<0@YODA`U}sUDA|_h;=0h&tPm>T^=$$+s3HWQ83XlDxs+? zYx<5>X7FBPvW!t(5kg4rO;QkC3ZQGXTDTYx_SPixc9s);NZCJ=EE_2$m9u2VAhpD~ z=3uVPlxbmNhH#Fcy2vo3KRw5VSA3g2^#U8#Z^9Q2-&nr$&GXr@3Sz1S(qTo!+Y%WC zQdKmSq&;^GgfaDSC(${41Y>fdG!P@+2E0htx)4z^5^1rxXxMV>38*!F+{GhuUlYt2 zCHpWbN-dhhuN)15A!h^aw2MRX%<449?;oV|WMfBWfAl6Ct$@ujb$-=Cuy z46v#}C`GUqlq1H9;1ZQ7#6Y16q>Koafgex_g$x;;sSXCs!q-2+6`y$zr>nJezI!#q zfKVNTa;Xy-EmRJ=Q<$}zP!Di$=voDDnStM5y8YuqO7!$BcJHo3T$8}ug&_K_AP+e3 z35mQ5eaTy9(l-7uAe)9W{wHkxzqi*&9LB9!f7W3N)BTCVMZ{tJ$l`GY9Hrq#ch}1- ze&Rz1@2`K|8}Cyq{3xB?>%qqKnmP9F+d;@W$h=LO9u25q@R>t6hxFhZ4Kku`xrx&| z8~N4+=W#)(c=9>FL8mjr;&7R|TxM#fkIn_rM@l=!h>RFR;*k4D6c!&NiW=&iUO)X{ zUv=T9c-LRNm7i?Q@${8d?CJnBwGJ{5_!M9z05=9*f^4PYz^0UI@(juVqK4do&r=a0 zfS7|BBS$@=Tc!#Qp=t;Uqy-ttgajk-xg*vdnu3@IOrvR3K+*!^FhrWF#`_VYl|_`y zi9+FA4Fqyykh+D|64%s3p~yP(N6{NYcW z&Rj>Zb6N15SN|H%e8SNPIVLl(y1bkAa3j;54%WK~H$TmEyATeh-3lSdg}?}nATSya za6w|)GuYr0Rj3+(b7&1BDl`FtrE0*mx+y_9I)rz)dQ1ob-Jb%XsjHe8GY|pmYO-Pq zlTG95RYE9{CIwMu(oi)OE;@>$AnT?R+%*kxGN>HY75(tqM!|LK973+A_`n4S0@l@Lv z2{@*;V#Non6m(h{VOSD_$4WtP5g8n1H6}_>N+*h#NJ3$-h)h%Z$nr`?e|3R+?`3#5 zM3@$;)(A6MwDEZ7z?fuj8zaI6ybee$A%GqW9G0xNj$&m8{uM94e*7C`Yu8iy5;M06 z_ncS2r{6=~ou(Zc)bx5*Zn_q`G9a|Ocm%QNP%DcH8Y>3i3e4Ucc*VMt_}7nqh;p>d zGhg|7ivAQfM9R@JQV2AOvW65mWgrS%aQLW*&Z052Rg1je#``6CAWqj5`#R{Sz4o3*(!2%oCQ)M~YdEx^+Qh06~u4wM4k9g!IJ0H;ZJ>tLp2^;?N zZz1yHF2&T(y=O+y!w$#424)@sH-GHD*}wiMqO&ErFdY_A-@iCqL>$JCG+xqyx2@du z^GE!TKV##sy&05F1Fie`9uEZugQX;zREnyq=!+cUFy#!uL{KS_-s(1qYybd&07*na zR58|)m_@o*@8oeuZ|1vSyNECD`b{45qSrCI=~QBO7FU;eXNl3GP#{BcmWkjejzA#E zI@9DxM&q4)^TU75=lL}7Xi-w5r65E=D)OvAX9YfZ+F4|3{S3|Z+d&&f<7G11nBka3TN7`- znHR0w#M6&|Jats;m~xErJ|nxtY!DbFh|&<9!)b}u1-2Yxvc!QCLSW29#B41p%ZN(i zf~075nd-DySQ(QmgYb?h6if;b@4@?&b0LHwpUw%+f{zH5oS0%rT7akm!5fr`D6Ofj z#7KjeDIMK8PY?heWfXZ#xgIe_nr0GAXFV!2iJw0y5?UrpbSD8>mSKZuc`!gv=s-TE z&zNOdvXyOWyjIj+(F_++g=Vp~Z0`4X%ewXSiX5S*XdiJTMmWej_?vgIR1VqHD?mWu zBg;dDL{Tl=h*3w=ZBOBh!-e#C^cJE=o1`5QF`#upmP!0zm7R+>(Kw5;8cCNRa_Si9 z#Yq}lNc1foK?I-Dzu!C+zIJnE|JsNVj&h(CERZPmgDs5Z<&dm0}t zDmDm}VfSsLxZ!H#h7A}2(k>xK7R3ruM4SZOwCV0z=4Bh#^5IW>j*nh-6;FQ6FSGIF zr=fdmurUx^MO9Vcl4Wlu15FgPgd+C)=os;Sh2d4-=IT$qkJ0sec=X({OkMFUSlorn zW{|D|Yaus?R*?#LLvrI<+=JV2#QmCZdslel6fA|i)<-;0&@*?=^FOPVw&{lzbB{~6 zJzs_0U;go>IQ372_0Kq*1MxuNa1n7BKhk({7d~6wwKhUXd6z#Thk`S*^d1idnu)+L zgn%KYMg*GZ9STL%V4WlLks`}bttqS;VYcn!%%j$FwY-VX|HW@`)K5I06CQUq{rRIY z9I)mK*hKs$50QW;NR7r4SNC!4cfZQVKm6CM>}Yu9+RdE0e-~ljZbWAm(N$Yl7_>$Nv9%9%ZLbel*FrM2+ZL95Gs#08Xc2pm|THr5&K|5B z{hv6l9wC&&mmWnK&KWpItJ|4S zj{*)R19*Xq5v>HZ6qum!p+SgLeE48N%cN%r5|C*hdW(=671B8rr65xoSym7y)Q%Wq z%D8Bn+lK(&Wr(FCgbW!h zlp0Pwll;q{Vfjt3Cjakm!xyu(Z`umWH>2h^G9Kkc%~sw32h=QS*HJpFhUuzw%k8PJbj@j(ary zO~=w{^(fi}PJpwK!O}A0!A^GExQ#2m`dM~uyOFbI*Yo(PNPhFpgwYaldKRhM;B1=7 z%~~Kbh)vr0F7e2dVz~!+Py$>lIl{;>1e1ciTt9`#2?IJ{jX|)Aj{z?o)G~E5lt+mS z88ty$qJ_pwf{Pg4LK%Yxny`ZDc)s+$&vDcCRW@%t4mm%^*Dtw@uYBd}9Dm{o{QS?o zgyW7o4kH={W2grEx#IHeT=~7rcv4m-&VOB_jYbs$(L{7zVe*_x=d3oCU;{fA7FbuV z(C$nlWW%^FSlqWtC~icDh?DJ52wNz*h`RfUkCRLY>hN_xE>f&J7% zG1F?%9yr{ZBj|qYqsYBG$lm*R#Cm~RNxGdi$gD&(b<)jf4;rNMh;fbT8*bUVi>t4{ zk-5!1rn10jIO2o<_>X+)D_`M+6OQ90FZp?nJMK6_J!G_RAEVU~O&Ejn1ep;-O&$U& z%p_fa^59c(6$MDGuw{ub8dL#3gSd=Dllee&F=>8AHG1vw)SvtSKoo>EvxsXhr2G#bgQB1~;t1T_EV{G^Kf-4@D&%+sl^;{=tT}UfmQ&W8$mJJY z#YLb02H6oC*>Liyw2wH7_Vjv!P!LAA(U9Tpn;37q8nqQvy)ljnLh2Hm95Km&;jqDYP}b+XQM4NQ34 zDAIr}L;Obh7}t%kOkbU8d?X+NRYNBcHSHK6Eq2pHmEAC_61 zkxa>qM&v9Emf5sn1GeAh?SJ|weDGgBlQIv05B=jm@PGclH}lxXJc)ezXjZpwWzY3D zP)zp`OASpGk$HiO7TIV5J`FgX#Y;=(6{BiQ_ZjElk3I&!dO2=d({0VOW7iT+OV+R7 zjFw5X9eqPk5@#(&XDKWxrVfCX8s{BuT%wAcD$_(Vq=*!Cg_MH4l@X%_Tj3E9LaM)v zCl{9JTx$Hp23roOn}+GBF4kHi5}8TrvZQICHAq^^z4u*MN94@4qEA{oMIz#@de#elL7g+xdN zE<$brg^MLt=4d2T0hGnthVG{0u`6TjCEtaqS!lPxW)N#4HKCHI&J3NC`XD@7D5#rs z8K9w#DA^#C#79Nt8j6Me9~>{lAvh9DyyE0}I|*`gG) zc@Mc*!{VjTR79B(=H^gML#zi_Au-i{R0+|C)HIZUgAfPU@sPF?c=g~ai=W$u$K>$# zl?RXBbXF_5F#WKIs1M^X9u7EML>$JC1%7fev-EpQKX^w%kqU^Pe28bOtgW#jB}R9q z)MPNOP+HHIHF}giV6ap_b%6bG5 z;{~JD0imTh`48U0V0ABU>u1m>9ZMMOV)K^Mm_Pa`2K$#GHb|8$V@JbeA0~|gA(9J_ zPl?S!8KN?&sUsC4db(QSyub?y!BLeX@^*`?HH8e3-jt!EVDIh~s%TI;;zhEUXaPIaw`nDj>ANqEZNB;HhP>0#3+zxgwY5WkUkJY3Py}dQzH>g zgpM4->p3Ky(efDT2Fe<|Bj6B3gqBF>i9SG-Xeo)VN%pmnY@+i5 z+zPVa$9iz>9GN}%_H%0$ymc0Cami)xfucD5Y$pZDJ=}934&yK$jyQbT9LA3gezKiH z;r@K((DEbh3}f- znStqpiOGhwT7}hs(Uv)#gUZt~)X7Q7HGoe!4ta*An}pAqlG1k_3L=vv!BJEz2&Xc%^gpIZ+`1yF8btoY@X|J`cJ=-$3N>Q_?x%93A14% zzHuPCL|k%>vW`$FeC-fUkZZ%z(thUlF5ub$a*YlGscN#e1`k=gO_3MWbqy+|j)xFH zGNBDMq){q~GNcW<(9F&CQCJ51_OVa}y8S6^RpWic28jxQ0)%3DSYcXSq?D9HPj9-5h=S!63q=p51zM$(TWU?O)uOIzthFE{d6t2c)ZXC% zQxpX2h)RM|I2Vu-@;t{mmpCS?v@w%I9%Do+j}(S+^oUlA=H2fn zKXNnqd_RrZMY85aT7uL#FDZmzxVp@0+py*6&3x@cU*uiy{Qz}+$76f`*T2DMKlVYM z_p%qWI$C7s@(|a_5h7AVgA>qlnwSOfiE1a6MxznJ;e|>^CN@A0LKCAThB|fIG|6pD z0T#UTM5U5;N0}sEww6dFgo$%mhzJ2v2oMS(B+gf<8Q>EIt&llhNa94J7f!)-x+MxU^-poXfMOvyD3CYkRw#o#1N84e%+wZ zX^`U%4C)&oo6MZnX~tFNDP1~mCWHM0zpTkd6{*1_rzC^`H%#JbX(nBTBn(F6lMaJQ zf6FlGMod;0Cdt%FrXqvM45*OFohdDpmJ3X5UL(;3LI?;U2r{N3DCi`#RS_K&4o5^1 z+X`&NJC7z}{SX)1%uKC8RZINWpE`?wJ^zY3-KR}sdHt{c2G2hEcpmxbzoVqZmVAo2 zXi+OSA`1grA!~=oz#|As5)de@@S{kzvIjM_iSdfT4m^2lmTGk`D^;L3Kc5ENI;DYY zV-PM7Lr4xsE`W#_1i3L(?-85$YNdCDvMuF%RkYoe^+? zNw=SS7<~`_upl@X?|{{-VdW|q-jKxA@j(#HKUgT%LHB5wIvM&WL3`7!^HzuPz~J!i zJ&Yeqyttcg->Tq(8ouAab_XkyiSsF$x)!HqDM;?2$bq;gK8s8e_6IHM-59hTgK}*MQJF37D&6v#>Y^Sd@FFJB9?crYb zHUgm&9VKXmt16<_Xpzx0C8+fAs?~;e>AdFdQYgCp)Ou7PzB#KDwJW3m)$jPKn6qV?yYD+6Ki4K$H>|Y%)-R;uqw6VShQuaiQ zf_A4%6yQQbOJ;ZlOsGmJG*93gPc(vnz~~I$Sfo;DA*r1OZODU136LQWT`Dk4t4PO& zKoBC)WJJVUm*_!4;GIM3j5V`sXf;bv4{7R%UYjGWp>`8JM&2dN&w&tRF%ngdw=SKs zzDdQS6J!ypI-*AVd2Ls4V`=!)QN_sJwcX6s%MHIgw}ziwH%-q(^3{@k;~JrI3JoqZ zs5GSyA{DJdCJL396iWe-uCEx0UJ{WAq0?wZ3b2VTB#cHGaqD@nCYMHp=p0CK@VriG z-!2s>6KbD~5f#CUkX){WAc#0gX>U*>M~hU9Mjwd^q|Wit5(&s6CpHz)S`db4Ym`#> z5R>I?YJs366B?lg5tA-LDJUbtJET$%c>!@4_Z{UP*zs?$>%510OCESsd(&O ziKyBm1em&Eg)wV4737&jE{+Ip3g-e{A5lt8av2=X`IHK+BzaaO9YG9um1g;gA@S~o zz(I#XX(l=EWhFOVS;2qaZNq$moclqe(~Paxt%#1n~4lLn>Hrx|fTAE2OxKvoo#<1x!iOZd_v zvWyU2(&mH=AI6|0F-Wuw$XEcHr~)2?QWAj!uZZ~!qFa#eLWl!O-bDL~Izs}%);RCeevuLBQ&9;S&NoOE2}axIuZg$}9CpNK8B@+Y}k*zkOco=Xu593~= zUW9G$zx{yv#}T{EOSiel!!a+1eDcw^m6%ArA%%r2pkaIDOmhL!8i@g1vR-_CQe~zy?oa8v@{L3YkkzPZsAa z!Y3MruSytIh^8inK;t~<7Q~9{mlt@)-Z5pkXJhoOmF4$$?%>;Q#NOq-(9{?)Ch82W z1Sqy-1WYG}D8rvB3^c0P#XuQWwoQy&UDcmgtVobULooTWngFw=< zAV4a-P0mNQb}6rekg^;?Knp>ZB{6m{@3ym(iM4=e%T)>r<%z%#$FC?MJ(zz5Hf=)@%NCV_4Q5nZL%P`K7dBGJc zo_FqEp^W!@Y_F{v{_y4{ZYgVWESW9wT9B(G;7d(3A5Qloklp z!pDgTfR3OuqRA$wd^mWH2k#Lf+32R7A&5dwj041^8xhbt6^+v5$Vmr4`gDy1=LwpW z(5@nZh(MA9+STasDk_!)<*4ltD-y{sgp}T`VwMUUArd9)fOV_9O?R+y>Aq2jc8e@K zTtxh^Vek3ytzS7@K-?DlFG~Al@A(h)mi%bpa3|t0eys7sOlOkqf@mv*NP`_RPb?*J zGIJT7rzX(K6sT;{5s*x5WzuYG3=r!iru1oM8E4U65RFEN05W37V?ZH}Jc>B?7|dW5 zw%-7IZUIq3Ybw154Ion|gWC-DVNyg)_}3xaX5eyw_T(nq?0D<)0#F&sq(N^W;-W~! z4N1r?r9l~w^8xP$2xG7!qLrT1HG#pxD(_mXxXFe?+P45#jV)i^U-G|B+=9s@J9plU zEC)EFQ9)n@)V3rS88U!%7NNmfi;NLTqKqgMs+MFf;Eb8L1__MOG);3*SKzEA#)$}d z;(XNU_L16PM-{bq^jg#SYD6c~2wfnwB2*>Ax*}+ZjfJuzDorbIC)$-zNI=QRRIfmU z$V$_IR%Aw_M4(WbVUrTP6#*eU?QRx&=*z_a)d0 zAtX^KLJY`>_}WWNGy-i6W^#CynTWa#1dDDQT1<*;0zMPi;19Z%AtHhUVUj2{ROk8g*= zIE)7w_av-d46xWF7pH$5K0Jlhz1ejvZNEMRhDi(Fpn@cNPmp6|$dF1;!rt_)gL2WD z2s9Op27n^C5~(wEe+p(hlZ=LlmjdAfrqzLZ1pBtb>I&5{$H3#Bjj1ct4OhX9SEa#H z;h<5VTzA|Q96%D6P08tSFF|^(>1h0MKv5DgFyE>gaDPbXjh?SMzke` zQN)-Lg`uM*LmOzUC07xXYm9S@Mqo-Bib&cI7F0vEsw4La!th^Y(V zMMMPyS)^QEMU|e`>@>f%Z;3B25AOA`{p*`|p*GI(-`g4O;eN(e6N-=m591iJ9BFI3 z2ivS-)D*%iq8TBC0Xirf30Q*h$(_uPA@)%*&=eq|12LgLkrKw8inOA_2Sbo0Q7d9K zB>I3fJwz+VT8nNx+C^NRrEAn^avPAwL1ztgdo(gIC~H>hno>!0OVd^b(^*c}ek18 zR4iU&fUE!VaQER*u z9qTxnqdA$AIf;|l#3uCNLwl#Vy18!_uQxh)+X{TPeE3+r8l%xBM>=R3GjUF;5CK$E zQ0tmZWq33yj*`EAuE58{9;!x&U{O;oQEoxj+G$ZD1 z;8?pv|FWwf`#x@d3)M+yqBd{FeCO+Fx=;-QV6d8W7v6yJU?-FjIT2QeNpTaK z^o{PDMDd6Ld=2d`!UlvNp`swlB2lV@1E~oXJPkr=f|oRnB~uZp8tNdxSw6LV-#mRs zjpLK6HJ4v<3GaB!Bk3!{ifiNJ6q$~+W!LelGmhp2 z*`abCRRw|>BC{d|+Nmy0tmtHGD4Q`#L`2p}1#cD+nZwHhRgbaz7BEwNSSzWlM>H*D zOQr5fvrIR2Q^=+{H?{R=Q2Vs#*tHM-~% zLK2lvT27GnNu3A_MI_b%zqm>>s>wPJZdSxT|KNnpeRPy=KkQ+1*T3)f1;jUYe3I*z zF9%?*wUMW7{u#R2)V*G>3yv?{{9$&FZX^;pvVRg!KjLQ(>9zaIoqTiWr}^Ig3s|i7 zFl?6TX4A|T^E_hhQ+fP`=Q7vYaLC)z_?oZX^3Pnn=ZowdZo`I#*b+xbf;8p*dL9@hT)<26UZhRj5FG~CDxK}-h2kA!;hew(ZBKEL{f8*ackNdaR zxOejJB5wT#c{b1Hc|4DK4qFl&z~{$5c-Y)!4ZLdK!y{}CILLP%Hw`l~ak@Qf7DvnU^c|<0 z4hXgH39Bos^p4%Y%H>zE)(s%G$&ACrj36SylvE**i9U_kLx1-kMuSCiAILI=7}xla z(J4B3sgOpaClr+!BaS%H5qM;#&{|X1C0U*`KQ~8H4)6#>l$b0Dto=lD(kVI!A+Sw@ z$qaQpBt}oBBXKft46(&9FADnx5ygZMe89BkEjAIQ|cO(3(&Z{McBE>&Qne%fAfE)d;XOCX$mOre}$* zoNo^Hv*UzEv-a_iW6O!BFu!pV{Z5xWYojNwXco_SFknWB>3|*K$Pf_`7_~{&FYpzWmL6_J;QpxpNBXXKwg=l+Zl?*k9roPyYj^^SQg- zj*Itvi9f#Z73?c-xx;f`yXBwx+sl8KXB_c!{N5A)@eZGH-}n~(?t8xnz)h=H^2CkL z1JXY09}nxE@&Fx}9|IgNA|3=RvdH^+|Lq3(4>Zo3{Chl)=jFVdS$@1N2|hoDH{VY` zN}gNS_0Sg*f@lPy+fICFK$(<6i|XLw2ss`gPdx)CLGIX1+_xQ-w;8P8z*n*y@x-Tb z)Z?DOaVMNXL7tdJ037hI7iqwMoZzvKdnWtO-od5cy@2R#^X{i!DqOQ~LS;a(Xnw)%+ThrvD$lKUq3KGpJ0Np-uut;boqT*OX)=N|= zQ6p3&3xPT)oJfh*jS#3p;~Pug7+x@6@U>CH$a;#R;8Bk{gRR$XWB2Yoci5wwHf?0* z&RquwoF^Z5Jgpr1D4Lc11hGmJr?5>!MB#$~+aQN~nD1xo|J=VYI=0XHBRAq`(O5y* z)T{%#tvrRZ#efeHtu<08O7AenkQ+^~4MnS!oQ<>q5wSo~w1~nnSSkt8G1JS*j3S7@ zC}j93iMAoS8kM&u-u^jNodnOChUw{oc9yemunbwU0ENJGzsq=3(s&0Lj8rtXLa0EH zis?M%e@LS!Yl{>bty8$6mf%r{kSJM%Bn%EfQ4|D03dWNX7d&1&vUZNKOVkm>RF~QZ z+<46T?i9_!jV%1u%aOK3k4y5UlI2=ZwA!?v@J#Am*HK=zhiM{Nr^BOW`fT65k8xd7 zv|1c@+%a5w>E(Agu1|czTX5FYjglNvG0&$KSJQ;}NW!{bI@@L;TCR#JLSbrx*@rSa|E7vHqE7 zkwenyoOuSF7r&HUfAI%Q|Ly-}_K0bmDG)BEP&wt0UX!Z=*3EI<>Jr~n9oGKmU+1hR zJd2sBH4p_MHdMC8+lmn6B$P2S)oau5oeC$MO7*lCuCg5O_)D;jv?)NSH& z9>%B_6VLy)7}^zXEg%v#b=%72e0|5i^7JEKe8}rws`m1U>;Go57J0BBSgjY}E{ce2 z7BAtAUwsZM^{pMk^_`>G+&!L-nPR!#%hsh!8M{?{bbS1}cX9FVFYxD2KaUOFqwaK_ zSM0lhH+}Va*a@|6zI`NTta}=n%(-QF9aro-A0HiG-u@9@b=vQ9)YK`5{28w~7p6`* z?Aml+akz+hfN?(Ob1vup;48Y1xM=e4SNIj4!jEUUeRY#M5cfBJZz+kdA1Z3o!ooh9 z@tF2hkGwyV0p(Fzrb-PpH4^S z)Z-yeIIJMK#srU^*j%CwK?Jmr%+GA(?6ZE3M?UuHeEQ?>=MO&q34VFYxSi0NiR+D#(AeY_6%)Nlhy!A9JFyZClTf@IscK4A zki98XdzP^0I<)H3G#(igeFV>Hw|My@PiAz&>AdLqXLI`Lr}3Ph{<%985mHLteeR#} zt#5soZ(MK@#~*hLk2>>FT=n^XBT9h|0^u}KX>uiKBD9od&HNgc`T^r=mWGaeyg=5P z#y5&q4n+aOYDnAnF_ZKoWeg$;Om2``;+#vJ10g|8X8#*UQ52MoWi%Sl@3ue$j46_H z5&<#kVrZ?Cm1T4OzuxIru>W|lc@m}W177eDV5tyG8U$$`@}LbT)K|x7>y|) zn#lCjF?{EvU#5Tk6{u^z$N1*`tU3A^bh|^=pCaCPCD!EZ-+dEt#~$Li0^^vH9Zu-2 z;}`$a&oMJU&l4VdCNpc+^4KSxb%*QadCxhESN`HJ^5K8@5MTN7m)S5i%Y4(&Tis6X zJdKMe>2X1zF`yi=F0pwFRS5>tW4uAhELostlCWucE0QtG#`2w z8-ikK-#+XgzmxUPJPYkTt{UQmK&Z&te2Uha{)pWc_}f2a&55VsTO-6+PzOUl%V5Ja zU)r^w8=mnjp8t!lXMS#;##Rhg7LY<>okOdPsC6hpHrUxV%DGh zXuk6gf5pBVui^1ecodyWzm2v5Ym&2*P#Q4;vND~pwMWqqbf9sTLOrl_rV!KQ%mYnd zIuv|#1WN(_Xy)NxNNjum-9LZkx~FsL-mek~eB!#lxmQKRC$E3^WZ*7%+=jEcXxC@% zcKMyd8~F7vJ%h1Z1>pGUGkL?K-^uA~pM1OJYG3iin?A_7m%fofv&b#Ot-R@LKgD~_ zzJ%;f&a-!1{Q83h#7j?l6TkF`KSax0vrG1uyZGm8-^oX>{YzT<-U}DEy&q0~!~J5q95*-ms3Vr}|v`q{r~oSN$eas-Rxo&%Sye zMb-yZqoX4TiHH&>1YSl67Nc{5l8nY9G6eIzb-emzZ{!QdJ%T^|^Z(6jXE$?-SB!@@ zW4aqLxrcg?G!mIfnG-QWoP6yZNV%SvHsMndM4qP*IiWxa7!HzakuYc(h|wn(nN~0H z)?L5}gHejSD5zp23Q4Zp)OCf8H7x-rtzXL%UjHgiIQ3NQp1s)m&IO~Vo_sWqd-Q3% z_LpAD&h5L{x??|9CcSuG6o@cH2!~LTY`jW;^C?`YJA5@?p*L!{c6pg|bdK^h(igNc zOIvm@tu9UkGMTPGi6l&%tAtVr?{Ti7tSz}TDHzULru#j5U4@hqqZPIF5DlIY%L7aB z5h)V2D{mDHONaMh@{Fb)qLe@=fzA!yL+$G1h7=q@f)a|sr~(u%qi|6Ygh3cVVH8>` zmX-%7S)g>vcd%X(A_V;8lQ^s|2|=KyUaPyc?QpZ_T#zw{O@w{zkLRs2|}!COhjZE8V5FmSf>EJ zFe0K*0&**pwx_MZ)yQ?55TE*2MnCg1S{pXv{fMa}k7Un({55X=-~SEss$XU1xi3KD z3F9%k(;>=~5mJr@bUQuP{mvhI;q7}J~E$kTuAEqw1|@8SIKT*Ol!c?RuE zuEE$*Iz9$ePe9#)u_XB9E|!ZHbvdHQAJ`(|&kjNV;Kw8O{NHy_-?WY5=;PV&`roVb3_qc8!{J}27qvoH<5xo=cv50uvw|?P;egS zvBCRiL7!^bsi{T1Tv{Q);cu2tJ^sLP}_)rW`KPY4>>66Q51zw=>@TC%?xV)@oBMtK2*r4aq&RXwkKFet59@{f<60Iab8fgTD0;E+cY@mCZ8=M(~>L%gvp7l;6zEe zw8GL###3JXYrOhx=dv^&QdSkY@+>aw<@et322Q$Zg{S8&+C57X9In=AAy6_vCqwC+ z@wh^W9!*&xrM!KR8gTKYR}y5K?%FPGHAiK?&FXL&*~`gg2WcymDsXa$4qfQXFw7mr zzP)H|aAis58;pu**9HTz-(bJ@9R~mW_hhesGcg#t65Q*4iEFlA%BC0n0@G1ajmMxO zUTX3PQ7No2G{Y5o-6_ILU(WK!KfoNIMHi-fe0gO*3+KFmSHAXl5ClfUMRKW;dB%8k zhzfyjzem&5%`wjM{s)f@YP7{__sq_?)k^OhHvja4~Ts7`gil% zGv0cSuldH#Pq25q9e|%c?sZ(g@9qN@F5UYzzPtC!08Hg;dCQYOa;F8vZE-~Jc;4`+ zck;h3d>H^AzwWPj`KfQd-RpJ@Z#a1W_?a{BP(a)k_oaZi?Y=xLvcC8D@fb-y$ao*` zJEQ{Q+P}P(OWtq^m;TnJ?D@)`Ls;`2vG0O?T=u({@zv*lmCrxv^L+8?U*v*cxPYyH zwUuV+j-%&`xQO@hzK41jJ!tsw-TW{$yLWQ+OU~lzpMEmC&;1itzW8ZImwc1KgbjDQCqpMpKx2V3y3IDqKy*{nKk6C46BCdrX zP{%-N-J~m#({FWYbuyySWUW-m${0{mW4$8AoXoU|wxMO9SAYzT#tVXvv`kK`-KN)V zlSzX`LG%;_bXuB~)iDbTOBez@6KN}0x26kt+TCf4X^}}!FBc3}mhfIBHzh!Xcrf?E zd7DD^oW+ejW8a{4j*cGFF%UgH-9Z3dJoBAt=KAxr8%M7#X%&Xx$Al2kK_j%ri$G3` zYPdqRyvh-qw{Z0F$1s27F%-oe2NS#Z?4xU16rE|h5&Eq*QMYNF#l{-1EKXZ=%wRkK zQ_v$PbY{Rc*mj$2O&`(jLA3-n5|MP*t%EBr$2AR7XN;>=rl#gN{@f2Rb^57{>rvVV z?H;4czQdkZp3U&WuTvBS$|wSnsM@rqdI(#Qw;VT=CD)yNIxqR9{|eDFTwOwFg%1Jc zq1*41WdYOJX zEFiMYM=|%3SF_>uzstH;{VM&ZJsVlHaf|!!@Y>&BO56BwLvV+l2l13m=P;G0micFH z_wXkv)ozo&HwaG_I_#aoj!l_2XE%G-?@y(yz4O>^|GUG_uP4$$MGEhBd?M8R(01o z5WXC9&CfrJ>bk3d^rJF!_Bogho3VR#vHJDTQ(k=qVKiXdufH6xi!`I_nWk2D+kT!1>?2n6hj!>q;aAG1x>o(IuvrGgWj6 z-V>!F&vPJRCn0kt*JuQ`3Fus6jKXKr1n&vn(eHL?ni}T?QhTZ6-o*Og0h6hM@%LWLNRIrF+vq1 zr5~rksS*fPFsfnDl+>|BYr2gVin>WUmIF!EDYe=%9#%N-5mGT|R_SK~XF;}l?AUe{ z{l23t8;b4>&At_`x%48;IHIQ72;IZ8O3Wq3H)!Xv-m-RP4K8Zl`sUx|HNX069CzF) zy<_LaMSZt+w9#7+P0S8$6-q&s!iPqF&-FA$qU&#tJpZRPsc{T$IY zh@!=jfAE*gz4RB8w(2(UOb+3Yu?UcwVU&I zeBy4k5jU@1!^L~P2&68CmiIhVym-&8ga4-=@gEL(+oX^@al=pXFV`jQ=#>i>@q~@f zJ^1{w)2E|^#z)6hi{IkB8$ZCakNS@f*gowZ`GBnYM;3>Ri2D(XEFQ9m`o{lvG5zdwIQFkUg3NAJNXHP^{)ca3&)@zz z#K6wCzvV8Ahy(BSU>6bH-V_V_78nhOh#(L`0TCq&tS&K10|Gi-Zk(T@`-JDSe!~{5 zwTS3w5QwHmwFmgA_td~fYQ4W{r^k#VO zbI#$dmw$!JcFb_b?wV2XbaXz+eyCDNoHd|pSRR6|fCAc`^qc}#BaC*!3ecMc-NuO; zp9?D2M|w?5#pEv<3k1squ|o79L!0Otgdb7oErK^FJtStS@$spD`6q0-OdO7|_Kqh= zbPd}t`UYmxdanA~H<{Y7g{h54uu|95!J}k{5G=~2Fg>dyl{EBJMzc~fRTx^W4tmkx zN{5S%%yh{NIA0=|B1Vt*agtn}XiTQa5mDovPmWJgBBMyIMNJwQA{BxhQ$&LI_!x09 z5=62l4WwlVHOgo}(uAZtktmky3ZpbxcZwJzwY7w(Xi&JuGPVtQ-a#N~f=AR2L?p{I z{G{O0MiZUK2nAA6H6=nwR8+K#POmM;SRv3tVswU$f#3tNu|ynRdAiz=d4Z4`lc$<7 zI!Dz+ya)^i3-tOuHXL;V<7&j9n8NRFwFC_o>IiuRUn0k2vP=`mQ5M2Y+lZ|k zF}()L6|fB<)3oy%^G9#SzWbjrMGr9^KvUxs=%|s(Py?c+7`7zSPkbsliaPoH;;_kf zw>8hV>Y7b2c_l|4dmKL0kZEFNscc27m?6szp&YP$(^f)vhJ1RCnYF2i^xo4{B`Zsd z7}3z4-AHXbq8u@*1{7HrtumT=z?#h`u$|gq~wS zE?THd=(gCsX%p+td}7iu*JDJM5kep4pB z4*M6EP@y4f6*vS^1yqz6W2ozzwQDx=%%{JIi(JkqD=@Yu8U;$H%mpW>N zIvGC85TQc(F+wPm4b0C@@qhpM3q1Yom-2#F{tAQD;T`trP1|?!yqCX%XFcZy{LE{A z6Uv%nw;X}+B}7XMOLziG7DVA8mqe2@E*l1eA>El-W@e^wzQ!1JYavz#h!G(ZEh;(L zCRZhEEx|gRb2vOP2=HmUuY_cMaX}=~KlqU+2T(u^g;ihS*>zb;n z@DYU0u}FeTg<%K*m1QVp@Bxg;@j!?Xv?53WQBYe;)ik(}=vOF-BVcWVmJ*{RNboUI zmSdcA6rW?2K;F&LaH9z&LU*+Q$ zUd)zbk0FfHw&W<{{vobdM=&J}7a*UfnpsaBmQcb`HZ>~u2$8{HKd2n7Iz(%U)AN|` zUy6F?A0vRO)x$~%A>yS2XX!*(Eeg8--#c0VjA!6{1=i6BLCY&TVvN&*o2KVD<7v+T zB=yJ=Do+y}B1AHyV6=~gZP!q2If*r!kEYx09lTz(*0j4lrsme8T62u|>>`uU>P(|i zG{I9yK|>%!*l@}dsAsw?9=SQ4H+6|`8iY)FF3o6!l7{R7>O%bE@NS+I0@drY>5YHD zX-?iE%&(YU87rd3!8e!-RsY?seA0f`^)tmDP{lpj6Y>d?<4>sfe&8& zzxjnvAI}G``ZLD%-lf&wpZoMM4i^#k8}_j0kcHGcKfM#XlsJiJzWq#!jp++|`^UE9 z%6lf|?fk^fgZCf#=Z{4FJHD!rf-~NB2F3cc-u)NuC%8NQs9wZH?BTv?F@6}Z{cd(; zvuhGqBNh2w%svUF$Tv;CKw}`()m^S{`$NE`tViQCP^(LDWlC@kN$g6n$sU!0h0M}F z{fTUx+JLiT&=MKJw0r10!>;VXbY{tm&fUIWQM8zzS;Njfd%#*$krQJ80yYAnCPsMl zBOk>rYkF*-n<5K!3a>I<&@CA3rCeNQ-|xN^`JNA<-uc&v_kNmvZ+a{Hdq=bQ%%5lV zogYH|#kKGsG2QF%wzvQGou0qz=4N@}3!lrDb;q%JW{T@BzJNW0RYI@? zB?u;`B?PkD16M$F7%b9cjHM?-gVsscqcwzvFfI{A20Di=M_~T;orF()m@bfIJwjAK z%5Ny^G3(FzNw&P^b>vYXnvirhK)t#E`<;LH!(H8iKR?JyPFyiTBngg zXox*w_J zgvJ#-)wXNzbeYgJl-H%6akg;_s&m(^)4O}G2MTU5A}_l5!7?jXe-}cP>{NZSQPo)& zI(?RVZHnVhOH>o@a6#a`Lz|4SvKMdKC~XeuJ+;oqRsU^pPFV6`gj@>aHDJ_IK~%xqZb<%dqOxOgf@L6>XI4 zpoN8|Cd=FS90Zmy3H}Wtpmj#4o3pgMz{2V>-ChS}RB~tnI^8a}z+1HlHQNVD2ah(xU>$=J}!bG&mjlL}3Sh%g$hH6lco zmzN2_G1V!ciIlzs?TPgOSqIwFGsx(u>l&FC%xv7uw=cbp<xNGb1y}yI|_k2-7f#*xBd&Gy}P+_b%|=n4Ln!FTIr}7hv;MhKl_GknK*OW+CVe$g0Goo-%WVF{G zkJg7KbXH2!UNg_~&g+rNAaX+x5PU<`j4{U0TX!@g?TBk^T9dUNm@dQ( zhcNN-?{y3J7Q>6bna;y@m);Ye_MmL@gN1tG-oNIVTV6s-C-%c#39JtYs^{BB@`Me~ zJ*4&4w;8}Id1${Sw}lqBzUJSj${#>4o90iR_6h#@sUPQjBa_+_)sS4YR#2xs2FqOjDMG!I;XfvUYAQopawy`DcI6Ff+JOndnSZh!~N& zjZhjw#N;iatWjFiP@$xymaw|8zzGpfn_b6Xb(Pn={+H0^j@QJ@bf16ue}BcZp73a# z%GunV;TLC*f@c}6SKXcd{B=^+(JscCl#q%!2W zP6bAUAS9W|2?(rDE=Gw)1RjC)Avrh+up!a}k0TNzgbnHq_qHYPC>G5S^#j z?hqq1jYWvGUPr_c3BrIj_=z2`M}b!8A}7j}IRIc}DmHy|7^BFP#6^z{mZ%cdt*XXo ztv?)l>2#JrLx~@@DGhQCxY#;_qGNnNZY*Rvrw5Hc#TOF#|DX5xTQ{zbv zPvho+Nq@Wa&}9wx8RPG#e1XaP z^{JoW`tjlSN_qJxYaZ;KK7T6z1#KOo9+Km!TQ&| zk!B^|~}o1(_kx z1|#uWql5?7;G)B>UrRg7(@e7nI0Bi})GPZ@z56Dt@2{C-WpNodT0u*N5G1~Q@IYW@ z%{;c1Q%i|74RK*Vt3UrDI?sMS5r?d6ioA<922r$dO-bDh(Pf3tGL)@{Iy*FOQQnQSZ2H`Eyk(`WVK#81c_5Ww@y~8EB zs&nt(4wX8dJW(^6(I^KL0D%y}$Ot5m0h0`vY=doVF2*)EC$PEpb;JSNTx`H#12*=D z2_gzE8G%4KYjQYePV8J^hwqQ-b2Os~8VN~5n0KD@Om|oHuHCzKRjswxde_^>3`!9& z=L(bpTNL0tUgTt1hk9*p=<&-)aEF8QF3^=74F zlMWS9r;u0Zw3cu(#tTQkv%uWke)2&N=>&N{15=EOSwC>qTyI&9*pjY5>K*gX9sDeNgkU2t1 z0k>QSm?VPCBBVgOQV>v5FXz7PLA_3O?K&2J{`K_#{X>Kj(rSe;N~qK;MAZtFN{xK~ z9+rOQX~_S04~j#3_!S0pUBhmeKW{K{|9=`bWFLKGhT|&I79Piuz&+Xjuhb5VM z>@j1U@oQ%swNHQd`M+cGJCiHbVt|!#n3$L#Ns@#1Up{Zk=Xbdld{Gn(1_So*-_P2$ zYiTx{D;H6vQlZo7uz&x4rlzK-)oS$n{grLTl*H0%wam+(o10^CaglZF*0FBgI_Br+ zSB`yOV=0bff*_z$snGBDv9?_Geu}W ztuKF$?l->#K;tRT;FQ1n_hZV*ef!(rURFLD&Wi)bCkO%tg8_M-lO)N?_?~pqNlZ;m zv9z>AdLP|_U@#yILnbCB7#SI1dU~3Ezh9=iSW6g&#Bph$ zJ@d(r#TF?tsZkUe$}0LE>anER9K|FdMVL?@bTFL-!i%0t;st}j09_fuEiI6L^aJQ; zJP$Fo8ece^Hl<#{&DSGF#t7H1L-tbowjhxa@l&6Hz3Eyo!%9R-Vf7Lkg_NFDIizvq zUJy$~F9MM^2&#fXcahz*U9|M4imF^NTp8SO^nxBZ-R`;lamM zyiCExNEc&#L95rrJB`a*2$2&ig)`;-BMM=3D#FT$xH7^Z-ATK>A1THWDnNQcq!mhQ zigZ9OJi?dfBOIm*300D?U6B(70oIo!T4M}KlmeGHaL$&+b&SQB()mcVCeLyN9;Gc> zfwhJ}DMBSMwyYKAa@>zB?=?*VnCJ;==T?i z!h}i~kUIo$wHo6Sqs)%Bpm!Ut*o}xB^;0I+M1K7?(7jQ&G5H>`^P-xsXsxhb#Rn6isQ1{mB~na zL}6lbuOZ19xISY27LrB-=JrC6LlNPrVd5@OAQ4FK2yzYe2zp(-)FiSfc}S?z0dX0D zlhiLdmC9E?gBhzbj>e9R(jSQlyOu1p6o3D}ai9Ghl}DY64HLW%QPpu|5@KwMa|YpZ zq?2StM%>T&#ou^y>9F1Rex~&bQC}%lp7$i7D2npFTB-2A-||{AtqFU5GMhpY(do=l zi8L+kC)2>CgX}i5I;5h;4p( z&kV2pmA9-suMQl4W6VKgez<#iQ4}lhm&fY9?++ZOAP83Oy~|_2j4Rczu!+Y!;Bh%? z{IP6qp3BzOO$RAh&kv^gf4e>cz!TR$hq3tB<(t>l?_H?e)4d1h-7!Zo0JbjOyz=_g z(F>0GdqN1FvFYWkub;~6KX)k}$JW-3+`0H&PJ00DEaQ&(>-eje{KX+-AIEW-Iy$r? zm!H)^5KybtR_x3;j#suVpVKIc%9PaNV5jfEbAI5y%g?Kpe*_^Y(DZR!Z@K4;)<+>u`8bPQ;hKR2o<%!A~6Y|1uU977p6BjKk%--M5Vc z+q!SN_x)_yxI9uDhx`7Kj(Z>uToKs1b?ae|z5KiUlRbj_&)w{9>oWJXvhu)&7j8I6 z6Jp~_Hm(@{+uy(as7^%K40-AopUM|5`vTp2y6nGZKc6`L6P*4lr!(`p8D_s!*3@48 zjMZH7@0XyWqvy}=s_tUvbvqBc?Px0_M>|hTOG`)Ge&F0V;+P(=?@c$|bkMft?MIp~ zE8lXom*-}AbR8*jYvpfNa7 zzYhF-Zf@?VZ65A7&dtpsgdls?Gw@0vWLTzC*$k{jcqn8>AgjotB)0}K#=8tr`Zum!amtQ%z20}55Q1kv z;O1~Df-FGz7Sn-6WPxx2 z5{EE?bdVBhM?rzJf*?u=V@1*H;0sfh?X?bJ`vkHeGX`%Q(wBN5;K>Vvu^zl7lDbT7 zstBTffiVSANAz<;nzpIeBfPDZ91uJ@icn!fx3$RRs)@34lriWiL`#o$il~|(w8mLU z(i}lYqpaR?63kvlwy(eh34}F_br=azpwL=jO-8@JK&2i*0GbrS0xv2MdPqGwPzW?p zy~4u$JbU*~Q>`bgo0?#0ap{n2X{1qytf03r&#t8ovlAX)6$G}5=`B!QKSn)NFqc76 zgHS`3BYl8MC6WqWIY?AFk#&F^EK;b5z-tI83HKhH%kfDAKf8_KkKYV&j42$gK?fxi z(iWIxg5I-UM0@Wx)-CPFjju+TI)MyPK}=tFNqmg8VEb+M+<7ORBdly5Xe=xn2ZO=A zX-NIyqL*@lZjqC97io@6k$FRAauNxM9KsqtPH@trX6A9iqJ7AXH-;x4XX5e4{QYn4 z`_#(o2lBlGzw_wTKR#6DhMn!(ACwcZ+ud8q^1!h_+&N#~XK``yu=_2a(=0oD`08-; z;lO>(VN$G@w;#CQk>=8Uzkj&C9r*gb?Hnr}loN3zqx?WT7(&#sw0mItN8A5_v~_>K z;lQ>I+wRH7*53B_Z!gQg02_bm;9|s$(;JLlILhL87Fqb#0_{87G)_CR;$wAVmCLWY zoEv}RM(+N{yD3@)H~;Rv-uy*>dl9F;{?udZ*aIu+e7|FMUqkef!~;FHPzv1~K?K1e z0!DlP`fbQKVd6!vI&Qz`puXN`YzwDIgeS{V90D-I^6nNy3~5d{IRQFE+Z5+KXicO_ zlB*`65{GpAhu$FX@A^rS3Z9%S?-S`hITlH2n0nDC9T=iifHP>NDKdc@2x2^j0Mnks zfBCaSPd<-@Q!l0BAoKy=JNkQfQS0Z}ZFkY#w}+8t6RAUtvlKUe2bEW#>Yy)yIwEW1 zjl)|>WNYNHLF6fk)}-E`3rU7X)HFeT1k|0ZTfgD3Zhu}FT+w4N=rB1lK_mr5)<;l^ zvmqd(MW{oB3Cfb22m)0@YfUOFs^4LDm*mW|*Q1!m4Pw?sFs)#aTIxv+S+7t{A{J(5 z@B*TGjZkUYGQkN$;3bpI3eE9xgwjNDOd}daMUo&F^s5%~oKQzpLq)&cK?_Y-tCb~F zwIqrn(!wz4_i5G|__E{<+6lZCfQ3R}r6-CsfsYy30iwvU^$0I=qN)a+pbC%o7K9=Q zqLO>-ay%NhF#tOt5E2oDW%`k-fN)3zA{1masV`elWpIHF6NSdN3pN^wNx@k&FMVMa5e zOqGIcI>NXGLhsAc%WGDHP7tD?nKp58L~nMU^cVk#i5LAOoqKMl^P9g+ln=*4? z(O?Xrn^+y8CFn3hRAcJ(`bu>7z*Wy62+&$H7z_?tS%lI!7#kf08Bi1h(2}SzN}>~z zdWG(tx8VkTf+7Q#BP#1qVv_J>3u4qWYAzArtHNW^l)`C-KYX&#kxF68uo z|15g+;PlOK%{m&FJcYY|?nNwq{KNPxW%h&r%=$OK^{7qXclCEADtN${m-oqJWi?v} zv0|78L9nty-S78lG#cc2PMW4ij6@uG%p^(JU)=qm$#_pc`DOgW4R4`v8CP$653fA? zcln=t%G9Ql>Zfzzsvmp6Z9aPS)A;O;_XF_h?f-hr&cGcD*KylInMyVmujc%zr#z_N zG?A=bc`e0*Q&`{2y)|ANjRw75@1SdGc}_=Bw33>+e17hWTCGO6Tc+&YcfLS*Zi678 z-!BUsz`>475CkMia!5*45CjxOv69hnERl#fj#t{Y)*jTi1Fzu+g9qhAY}vAfUa!aa z`1ne?Q5?qzA&8=giHQm3=jZ8myT_Eyq?Dr5>5!%=6B84JVR%S7)AHafpU6t3!ua?& z)6>%o27{I3=XuWJ;vz*+FgZE7($Q;tec*r}S#K|Lbs(p%h5RThj40tQy# zWrpr7(iTwlIeKKA&ic)`M?H$hMHeAmigA{R8uG%6nLq79#M%+mh7DM6u+jk$B20$L z)_`4rxXQSTS+Y5%rx~agK{^65#rg!N!G)F}4_N9gu#j3N#@DcK_bi1uG^bb!L0qp= zUALNr>uyAPOI?R#X@O2GuHp#AB+j-&ZBL>$elmf36=zu6_FzD~YrCpQ?ka}2-)eBsE zmdvFDx=dS(GJ#A&ie3T2Vns|G)k%A^fF#zVq-Kr~iLnu3&_t*T&bF~(lR!$mSR&6e z=-oiC^BEF05UzbPdVQ6_u35yyNlY|5m_bU?RETDUa4QmEQG>E-St$iwfDT{`H^-P*h&^+Z#7O%Jp_ujuE>@;b2I;@(K5QHc^#(BJyRCUH*{rO)~so%c=-fp*9 zTwJ7HuQM_-Le_7SF77JJ?uLq>sFD{26%;a0G5s!KuMc^KZSO%X0o5w#gkJ9W$AA1M z+U*vdPKVLaQEIgsOG`^D?;DNA{r2g;cSM> zK=)f;IpTh60>Rtg{&q%3M;RFzIqH}nXm5NkSk7BNaID+yHVdXBi;FAgzuj)LbLUQsF*KVc zFXX_vv9z>w(Edlm($W$;ca|9;8#Zh>WdG&1mJR-6X>%D5*W82$=|sHkZEt(XI`G4Q zpXR5r_p>B0f9?EAC8gz(uJ^^ppW4U`Z@B>+?D)VA&i%u4kLUo*d|`&Kzx3;*`%)0F z>6M$<@Zt^J`PX-{@00sTr&F$d&9&_Q@7-MT!AsE9BcE!iByWE6n~(P}KIHhXqwvLB zU-%Svz53bsA}3h2mQ&vOA?lC46oBTFFK6lVpJe-+f0klqFRjmioV$Pad7SpIpDX~O zKwiH^n2vzo{LSBdM1Nnqvw-b+gw|xnfGhiEY=92H)oRFg554;ydi_4N+8Am`!j}kq zwayhk{y0WAJo*72duHbjbh<#Lv5IssK>L(}052^zH_R+dQ#Teb2Bkqe4~0mH5fo{M zBpGAy=HI2&YcVASMP4AaCeKnvCL84Mco)K3nsFW7@8OcTOe2y8V^Z>569x@P7ZF-h z=?Vs61(Wy6(wk&B1kweVETgUp{HjT0Dq=7K#p1<^-aGj0{$!cwHki218CJ1WLf#DM!#a4Iw3!HGL?c2H4%7MRYsp z)2_f0qBVrHDAHXhpCPm*kzrYdNf<00l(bkU(7k|AfuN5~E%jgx`JkW>f|{x#L>E&m zQiy`kSMa7F6b|PdwkUZu!o;PcDMPBllDl>}Z*o!p8C&>Ce1PY@#)6Wo(@5qkD^R?m2K{58~D2#RAOD;FAhM zG>Fn3IhsN?iBuiz0E{G#n)K{|Py_P|;5<|`qHF0nNqsgY%@>JlO=KfR_A{2YZe#H1 zXH&0)7&}0^0N1Dx&Ce1oZl>LuFC$()C-Dla1TwCXM1s!TPAc^?@Avv_G#UpP_W9C2 zg0Tq#9bnQWdYQ-h0$uc2n%Pd6XQ*xgaSi1ZSPPlO3DCl!wPI{+jIptM4e|TFf1o%$ zc;uW2*E>3iJKl6})IOg+@`K~dNU>?{;Y0WL9rK6mcSw22ST7&TTn_t=tuW*vxN7sy zaLvwAM`QW_P$gWk>6H(vy$e_U7>{1{G`>CaS&Ykh%a@+X+n@M9oH}~`VfXLki~P|y zUcoK%Wf|Tz)y=&0%tLvMfAF=J(2T};^*Mh)BRc$iyL#JuxpVQlm3AIXD$|+RthgK@s_o;n+`PpB_<&Jo5%o9HJgq8i)T)u|A zpWMr}KYK0d-jux`-^*8?_Z6P}$tNGg!MJb#f0SU_E$;cHpT-wCGO2RLe|(X6^TDZK zBbQytS)ce8w>{?xZhJV;blo2S1}$z zy*^5wcbVCCH>VnlVt_NANJOYT+i3$%*9p=kCeAp6N#_~lU4+mCg{F{(LEd7tQ73eg ztZ0E$Sg9BQ{_dNJou(%pp{c;ssxn1Jx4`7|yAxPDk9Q!Iz!W*5b;xLhonn;z-7d3x zcJkK$_3PYl$2JCogUdUvU%QH>*$%sA7nqFU_I{t6D>cTN4W1bXj7{IcKsdY*6q!U< zC4txU+kG6C`dAZZBqFtR7j`heZ{jKtxVuVfDsOiL<)!U4q+9!3XnE~ zN=UO>BOF`B$M!67&xTV7wZs-(CP$|jsaM!>n0dQx?|!CR3rw^NZoT}+c*;NgE%NG* zVSnytP*%YB6h&PlZ{Cfs*Rf7e*c?d+{VsCVS{R>#z1#4S!*nFEu3%;cEI#@%1e?yF zeb)}!!2m`l=!c^;&pU_S?YB{Ey^F<@E%|BZGy1|8QAJXCjZ_+kqhb{6UB;drcVRDj z5=j_iQU~5*okLHZM%dZKV6bthD{^ee`(1Ed!eA37AJESWA{{cwCE5OI(xq9Ng@w5` zCDnF?eEkQ<8r_b%dfI9wRPHR<=>&XEvItSa?9tRdgK>!|yx=IAlCdEtZ8ynEQN z?#c)6L|nM)sjR7PI!JB$sVBYgeoL$#4R3zzyZHIfKA!n>AN%{ecdwcrlM( zdnN1Zr=n%Z-tJcZ=k9;x%X|KNW&hV-@MjMy{dnD#57k-u(ZUHQ;vv8$HXYT8aK^Fo zL-!JwuX*Ycy2|JKv_ z+!H=WZ+nmFPfxS`U$?XA6^CCz+4NA7B7Oic|KA_LE|rA*)xYrOLmY@@gsazb((nE` z_q_Ib<@Y}N!S5?4qP^6n7-R$$O(uq`>aqf|Km;0-wg?PV_RW*-ypw3txmcMp@D?cr z&KTnQdIs~ip`yp2^!+~}t+lkaT~BSift3}6NfBD1d_X{fMX)e4&HVPec)AostqfDG z!c-MLbv4mXy_R@l4W=l_2OYeQ2(82hnnA3n<({4`mD>8gj~9Y0tkM9)SHDQ~wQnOv zE7-*u=2ea6L<3z(U}lEEW;C3qLmgL0jL#^nCpH>0Sz%#nilDEl+>>$1;~&S;(xFvu zp7_Mak~_`*ZkJZyvVQ$Zi1SY6U*7gMo{)sBQXvB)aM~gWa5g~O46h3|ZaRZNDAKG$ zjHKVsnOj`s`Wtt#&a~NhiXv>DgE;AYyi72zzzGmZ1!oGxpnyQ*gHeQ*NS|Xffm9Jj z)R5sM&JNJ2!umd{u#g1!VV`riWrQ?OO2HUvM`{-(ioQ|Kd0~l?P4Ir zDp2WwZZ=Qeb!@wPfw*}JD(X?$u!*MF3@*V-P#)ySCMHfk4VPvRE4+&cWR4XACn8im zV#n@XRPdX;SIcp3>dmD^wqTgB~3?({Da9*N980_9dy0pON`3|H7 zNU+%wDiwGyQOO8l^ziT(&VQHyBHW zA1IPlFmW-=-G6o3Lm-6U%FVCl-8cQt%4f%_P<ra&Z3kXsnc-9psdOpuHm@p##wPj~l?Bvns5aTfi;k_d$j126^%QCRNy+80^X z%V@L~@xDMy0jh?WUn2O6KO+16KY>b>0*6M@3j!2^u-hZACd6TgLlC(dLX=`Q`4>My z^rn|HxoS1DU4y2F&D->M-A14!NnAxH4Qk#K=NXG_18EA%p@l^QrlMK2OCS|0PT(*+ zrl>Z?n}6f?S(xuosX!1)Cc}g+CvPC1n<2KIwn%{(>kNfVkp$$6vn0+TgDN5@SelzB z32H=@3S*n6m>(F@J35?k-XyYFR$Fq;5ekX*fd*qbDNxqng+frr z1_9lE$ZcQ$3U}Xr6X)&Q!-xndUieZ*Hm)TgX5b)mIVR5miSiB|2r?@$zCx@+tSh%U zXK+s8RE%>ep^7oWAVSUJe|!}2@egA*uI39O_=0|sQ_~tZ-b5o2&XQ&sk&nowMW9KOh`?5azeTe4Ji_?M5s5tOlXZ6^gF1PUmuli3A|$;iU?Qor z{rY{3q#5y!JrF677S;3MB_eguOvqiI!JtQyJhaZlrboc~s6Og3q<7u|&eHnA)r>#; zrw+T{(&s+D^1AluCmh#4KTvFb`JqlksA2>XkE0SCSxofGO|RkuxBhQZ+vCi!i#dDZ z$j`&dQ0ZDA4-%KVFV@yJ^Doc1flq9GH&<_a54SIT3+E4h5(^|}jz5;CZG0)u-ts#1 zQB0?&PI>V5LjH^LE0GC$dF52ruOb)`a54{=FmdWtW{Vrg0xWRN=%sNZ2iX9 z*|~jzI2q@)um1%OSB&C6|MP$7%}g`3X#=5zZl}xa^gasf2&xHgDWDJ`I9KM5d&$P} z)y!Y_9scMgPop+5#nS9N#o_`3RYjQvypVVu&=57oH-uEjst6GvT!In~=TqcR!CIlp z;sHYsSSql#z-9(1CE5jer&&w|dzT7!&F*4zYliOrJ{x}a^-N5x!&m`IP@ybYD`lBp zqyaZ{oD_lr$c-mZqTJ>@dRc7DL(8YkeER>RfA#07KWYQr>I5HJ`U~QIk9s{MH(iVs zn1Ls$h8PuKYoqk@f@04uCK^>VmedTeHiy(u9T}w-Ma=HnL%-8OCN)$sUy}M$O@wD` zs*b9})Kth!*YoK52ottnR>=~YC<-yvkdTmA#Mn-og{3x?xIyX%+*g%j$Y%wi^ zOd@2xjuQf(8VXfVNRKw<*lQV4$N=FjN(c(6%7O&_J_Bi}lOUDCGl1@Zb4DYs{_Mxu za>1oE$5)ef=D`cRvP4mcRi{#^E|Mn!8#_ACWE=1EZ%V=Tc+DEvlo0wrgI{#A$Oo5Q~?y?A$K4E0s+sj!hb$+f#YMw z#PeUy{C~U$fPH`ac1EA^+(R^f@_l>Q_cwn$d?%QA;VTc@*7K`npTFM_jlt=!hdci6 z-p{5g>-qHaJ7ji1Gdi-JFj-m0Cw_8)UeTfv9o?Szne*Pt3r>F{p^8cL(dUDfnrCl$ z9naqKIy(6h`+D1GWpjA%8Hp!ZQ$6_srA=M5>Zx3`>ZueqXIJM=7SkCDmopMivZ;9v zk&2J{{mIHYKK;B71KXn+9{f8`e|vBnfSQ|Mr8Nhyyjo?=PZ}FWtL6nmBSC_Gtb8LB>fM77jB+m9y@xdNup+ z?`G^LUUWpl^!|VShn3g$$36L|$9klZw!3te=2^dK6Xbn}4KC{<<4MXGOp5G7;Uv|8 z$A96YOm9Ae^&8F`R!Orc8;}WP7723c?RcQNOa97G1q?;z2O{)69PMc zdv>7r?SSuo6@UJd@H2af(|JUi!?xXU{-aAp;F;aXXo_)Juzzk3GLeX`CND-&i6E@j zAy$MaRyoUDZ-D6aFsn{u%T+(do5GMwFL)GLzt2~`{)$7&?!DysSMki}UPZS*ptWN= z^|1=Q+1av0B_8V_cO8--B2El=xA6pzpqOYoO} z#Nu!N2`<#AYp+8F65HO7udX79G-h!Y6NXfJDW)Z34kP7%!jJ3EIN z87J6#H{ng!v2fNJswU#)8`jai>n084fPUTU4z)9OW zcrUO)NF;Kk5zKCHF?#CxT)cV{qH_yDuZNK%G@=B?1Yr_`SE!CBR0>tofI;ow&tkui zn%IESnlQDfa6k|T%`U~3$si3SyP$6;_ALq!vhcH6qJx~=e877YKdv>9( z{RZw?SK*QhDgz-sg>>X;hLRSQIpSs&s~s{ms5oH|D=LKt?NQD%kX4i&FqH?Ky=$7U z{MQG#@@IdUdToqudx1!JjB^MjFu?>`H3?-wRxDwQUW=WS8L3+B~HnrMAPt1Ht?dVQK z_xf*P=4KB1%)9cM^?7zs1OXvwTzc6-PD0}eKSpxqc?@p5k-=>@a_7sR$@*XaV=8B! zhs#phU;Zq+-ui2p`7#}O)ob2Byy@_jeO~hL>EeCQn7S0&cOA@+h;`+#9E1BJP$47g z{#BxZqdFuAU~o?v>Y5Po6sLK9_Sj`iFEHoE^dqhjAjtu6hx>|MYjTOY?NT`g!hp)w5aq z#^0fO-bILE8R2wmDMGaWJ%0;;YK$=TvY$KZu^wq?t&q-A2v0CDpzFxhXFz`+P%V{b zWgis@n3-j*HQaIa`x$@PZ&9h%>G!fyQ$k64nL?SI2njNw+Sr1{mnAEKVvtgJPhbc5 zP-3$JrG_=8Rh>}4u7z2)-tjG7=_{yKmzIZmZjma4%s>!8zX#0`^!`QI`*{$h(lSW| z6Ah4xWN{7_7R!A@0cW2L*1%GyjG~OKM&<)1M^`g{=k@3~qiDD3$bx!poN!oKM$|`` z3?vM?m<_8r{l}icxuat=N2|>5n^`Hpdmv6b=Uld&au$^!gi9XB_M7kEjxT+KTGYVz zEY{_W*_dXd3R<$zA27FPJEK8`lj9mfS1_hap)^?pxz*%_B6pHPLY*-XIR=SD;sB`y zfs~$3P+(VEK$O8}7<8*~uwazNj!E{sl3!0WsIc5ENf)9QKyJZW( zs?D^1^L2z{>tKEt=IrzF3p3c=^QbGYp!22A5st1!kJV{??Q6(qy@2A*n^CPUV$B$X z+ixJ=vKc$jjOqlRdG?NJ=05dlYPBk3W24AaAiP2-iM4_tQ=CkVtCXZzSY#Ba1QCNs zqtXKHB~}X7C!pr{;CA(pogShdQt<`4n-ln$sFR_T#zzj>SJ;jPQ!qfHnro0ErEoPw zVM>Cx03|x))^gDW=X3J8k78O;=0bB|f zr{K45WiY>Ef2<1I?$C?oOisLrtf0Du5VL_t)6D%16Zz)1%_E=A=s3BoZpxtjd< z-$-%xImnYYf#~6^z-fh#6@2(#seJBZ^cy2|86fxWAb-qrXuR=Fh)RtZ$j6$9U>?*Y zEOoeGO7oE~{(pRP{dyjE#fyj=RkBV>5C}}(MRSCmy2Tvkco_;;vU-brW56?Xslo>-RHGc?A@$2gi^2QN+Z><(Qqo_lDz;gz>|PD>*#1 zfBU~~UwOUZr;g2uh$bRdKYcX-E_3Ys@V%t34KLb2I9^(;GoPQ~%g_EY^ViPf?7aq2 z=dKRd{nB;Z@#l8{5R3$D`MJZdt{kb~KMc6!2*DRUI>wfN_z-d!qHlfvFfFWd;0NKs?`J&D75i3V}un7sa*SeqiXqSNkTm4+yQq7Q1gN?IL(u}K(P2V*Cd zHUEu*ehM?&K^0I>%IYczSegdchqw;SCUko!(POffplt*di5|4*v|1F&7*r!@wV~Yy z@6ojyOLyE(nzr%YbNd~49adbY5=FRvkELFhx!uz=!WcE)Bv)WEGjny{S?(t(b)j{ zOT>c~VbMdH0Tr7Qnm$#LQ4s~gOSE$|Dj8>t1dNFYb>7K@ANwEjxBe2f^%KZuop5ZD z*kx2l)>AoS3yr&PW%T@uXslUH(rZ&cc@y=bOa08v#3M1)-hh!a&O&z$B1w=F4W?=d zr-gM^)yEhK6j5OaL{8)f#CAaJEi%tYT+T_=h%L%67J$Z6k0a{BlNdoGN{CHCxa}r_ zw1aEZSV~j6X->-&bOr+!tYIcypxyJ#Az1W=R7a#*q0$~%yG6J(OTRrs-tMAhh|dIC zc-Eb?jzDQzy(OaPP_N#5Ppi}8)|+o2&r>#^^;lM~+JNu{KFE=slp@WDq7h_JLlA%v zSg&z~$0Cs~r0`3iQV1-{ONv?@owsm*`=>B7hfk`YBoUfGC&;^Z!EN6rzWo-|O}C+U zY$N-hf2X~;K$Wr(QXDoA1CV)6&!niiF3+kqxar^jl5c$Ky#&Nm8zc0L#R!Fy0flr7 zL`If(G5sZM+N0Z9Vkz%}g~*iRZ+V{4wFS}WIMpa*`zPPSonQMh7tZd7?|vH_CxFBW z4TNat%gRiJ!w5;H9$v=Rn-0%)Mo5Vsc_4Wvg5WSIr50W#_ zWAop9fX#pZ@5u1*t3gNV zFMB_}7ZC`8W`ONmZ2tfy&6?)Y|GJcT>d>6Qi@BIp{P30}cx((OYuJ9MdOVFwFXNog z-^AX(dMgW`{0Oew#+w4OIJdHoYK}5?)r(mBhTkGwyZ(sBIa!y-dZgi{LdA8)DiJ~z zkS@W}G^#!Zu7~gC_&}qbq`(tc!RY=Dr+xEVe8cWf>I%0hj_@&a%=rxd2~*c&G?m*z*5gcS!n_&{}|{+49ac2V$&AxG+bW_7S>* zPg}IR)6`ErAGzif2sC>CPAEL%%^JzrD78w$>1Q0C2efw8IHMcJ34E35eLePW-GMP( zVkZ#NB0`N1W!WzrNP%jOqP&N!0A-+v35_IF5*vr8MBoa8l>%WER+fB@+!WX}M~4y@ zc`!M-5QIL)35VOdm7rOHs=^lXbxCNyGoHfYIfv6Hj2}OGm7Y8UDQ}Z)SO-Z+oQC?I|D5MAB3?>K=l?2f(zz+oh9Z;))bqEz9!U{zwNhVhTg1!3+3K^oMLGu~i$$tmgLr`Y^^iVkZc~7#CLXwm|6^FC(l_2%$hoq%%k#pr+1%rQI;F1U|$M zIt1%ClU(x=^4;6<@B1&JFrn=&UP{#27r-~REHq+(_FMc&+^#*B?WAZ+MRJi3Rg9?x$0Fj~!k5YZC7X&^; zHCItrf_!Nk*MIcgwC=o_C+7*#Ew_M8@qxxWk1QM(h3uyYr6E*UDbdY`H;-ph!5@sm z?=2p>?fmcTec%lq2GNF1Y3`)0o^<}HM;-)LO<*m1{>m$1`ZG$g7`P{v^JHcqch8Jz%?B6<@%KF3SMZTOL z{*nYQs=}YN4!y$`Y_umRK?5PDczEK{#k4_pL=1S>!~2*WZ0ktb!` zRC}-mXa%W+UQV=nEt88Gt=0lsgIb)Wcm20ettCt?CSKT2F+0cfh~mP_ew-SPHDe8= zl!v4=?cTPVi_T8zXN!z9#<*$wF6O^`C(+uqs8);-5|vAoun-9-1ekPKp36f)nWE)W z1Oi2bQx*u(1Q_j+zQ8#{5QIoP)>u3Sp)^UL2yhs!Q9*>&0%t5?7*HU~m3Q02QL42Q zC?ad|fden`%^E7#L}^YTN6~{El_V5&(fulJbPU;FBya(SvMnV7oX|u;l`J*{xxw24 zsWL)hBByXkigzhqdb~7%M>>zQ4yQpXg9KEj$%CAboT3m!g{G)P81G0#$iP}cT`e8M zu~FjsD5BfO$PAk~MpX<}Vr78sW#nOj3nZaac;m3zp@R@@L8cBVp{ir_`~tn5GlZ22 ziEVM$%{Lx$y+|o(MuJM9Fs*rZ-Fy>qqLF=%u{lOn353D<3~MBc9BBhG4BBT1CvhS} zcDtZzuts6`PU8V@Ev(x>xbsfZ-+2T5U;jTe#zyeolU4+5y90C5S}-A2THL~RqPuP) zIPGNcg8q$PA`%sp7l^z76*0&L)b>yF($yRI?B_qgf8TX2kG|@sS$p2&sZ~et9@4CX z4ns@<#v6j9f{HatYqSgy!Xb(d)3<+v+yDDtNEZ7%kr;LTEg%C-qVUEdq{P|*N`OzA z!>A#6ZwTbWZ$V#Cft&J&mt+l~>Wvjq(PP2$t7YGQ&@go=G|z&q?>mv+w2X<1%PLGK zNYoE4gg;zN{{$X1zQR}dJMLWq$mTPI7KF_Qo-}VWOVKLOReeOoX=feXySnuE^sxhr zu4*bLRj8d(JE{TvdS1_^{Ajr2KRbJPZp1@@M}_dNW8gw-{^lN9tWcs!?^e;JdT&mm||QWljQ z8l`{`29T7Z1_iU*Zs+!Ieu|r}xrQl`^SExon!C3mYpW2ok|2z-(CgFfq_{|-`WCTq zBVkfSPwy>Ps%2C<5viptN7OIVmmH7@L1S+6<>gjwisKO;r=E+w)m)dBZiIYw_WK7@kE5FJw{p>5q3rlBliG0s3 zY`x`XuG_PVpPN}=O?Mg<*9e>eCBbMYOsSvd92CCnpBvzFfg>m*5e`ftampiIhD9Jn zfKrycu$U}GskkI>haTY-9*`)62yla(Ad+|~$W0ez%lkl5BA=X)mRS6Qq?mX-S+Sb#)v$i|IOYqEZ#Ni!PZw8uQ2|NEaG=J((F z$A_F>pBk*oxb_QIbM5D@q0ye@`7?V7X79p?8jc)qRjKGM3ltSZt%}S#46>Z0(I7Sj z)JCBeQ|#VJPiTTzQB@;QsgmDyBlBw~2w(gL;;^9d`OhF`_Ji=W27PcIIcQT%ZYKQG zzeV{R^RD+Hzy3dn#u%dLmggf12?|dXq_FOEZVfZOop%^J{cKKo{FSUe<3ef^V+a+Z zghl{(Kdir%Ggz2q?)K~1_pMLSy5|l~uT8OWrUTozW9wsBlOYC+1eMY9+&BgG7>K}k zU?FAyvtPo}RnO+M(;qmI^?|~9_^rjm^CON2E=%B#MnQfbR%Ci07|g()Pd<22x*v3` zxx5sTJD~&d@Zdxw;vvSRT*_VCwL-Fv#vgpLyowZR>gcOLQb`(TG-#Z0?8LXrx%@}Q zfdKfGCcJ9)@R||d3)Haf;{_oEMoN6kJT2Mqc+BzW6J@hf5$BXnfTI5{xS&C|ZFI zz!e}eFal(RR|R+rM0inP1BZ$dWabb~Vx7l`00C&7Ac6pLgF_IQ46gwXUIYY@!joc! zMXCs|2jqQE64Wpn0-KSugx(9Xrm>X@&J~El5fufw7N9kmh0w(y3|2X`kr)%8l*G6J zLPR*xL!b~oD5E0YBXtd}!8rpiCq^Pdfh`1y1raEG65#RyWCdolT<(jd2Wb$6Lg<)K zIv8oNREcTtpQd6vB#l+vt*Q(jdmjF@&7?MA@usiP*tv@*oOA}webX#;X2?ZEq&2C^ z5QRV>u$?&yw~5#M?%S#0Sh(prcFZo&YIP5}UZj-F&hKDi?PeZ##q;RQ@8mo0|29S| z!Xm^4S*fuiBBV2=wuMx9Ul3S~= zOmJqi$!&Mt#of36F*lA(uM-b%_U0Mv-$k+a4uZv;_3ruF6 zAGF&Pp(XbcEepb+g3Sg5aTT%@Oa&?eH`hg~DnYG|c03}GqBPn^<-;G5xIa9<3cuR? z!FM2_G@iG-3O2tC`g@>#JG5?t?l#EghqtI762wzb+XT%sp>YOO)`2`>f{uWkoatoY@y`OkZW`( zK!BEI=Zx)^=}21Rok1Cmuhc0l=za5y>xA)<3jI5FF>}*R%qEKcO5uVU&T0mxk1zu& zPI6{_HBYQp7@0S){T|F<9w$f00#L0EMJ&S(oDL(RR5Cd4bb^H$#L^-$0XaD)jL|;D_Y_WdF;bxO z5D``>be|v(DP)F@Yvg&3ECNC+@d}Jc0E^XaqzjPRfp35}cyd%Ik-mzt4lfI|)|jk7 zOpc)zx`4yP0YM&s^B5iAwI*Gdqu!n)6bauLTT9~&Z{oBI9!s@SK|8}z`Vy}H^40v` z_rHsu+^~U@7Aq_*?xjc#HV9CKz(tNg3Htp-cHZ!5^3DSLzI6k8_v~lx)>{ubx6V1< z^*g`JrBA<%lg~YuTfT8EK?I>SSOG>>p^*4QB9tJ=Bwk4Rc?+B;sE?o$SvtR7;bMU( zmN3o{dt1&$89|yNLr1cCBXMI2stI&k2j}jgs69!Ts=XMbnW1Ll=;4GccN^=%({1*Mp(H{&*>k5~IjAjw5Dgh%ZqGmPh zT!8&^IF)1TV~AW+=`UcErXWT68uT3m7MEm5F@lT}$PBs75aJQ?A}DVIZytej!^3kV z9tr%x=nrNJ)BQnesBJ9&);|4s_vQqCSa8CLco-m&yn#3HUfz4yvaiPrmvcF<;1$Rp z!J=GG8$J|%ckz3VNGM7N;%UeEK_h}P1%)CJ=s7zQIkqHt(G~K3>ST^Y@n`}~+c16Z)kv*RiCh`JeFYSR8U$MDkulv zgn$8QL55{CASgO&%9JwVB8fiT)$dQDoM56}kRYrh0Zbt9!eSLjAqfz88DfP; z*buLBR3LChm%?~H$2*H0i1ItN1i5<$L6+hZMQA)CFqnZwM==8;^7&oVWrG{fKZmhj z|7|WfhpMUYvf3@B7iB%+cg6xT`P3clAR>Go(=1WlpKXx+pVEOcP0 zR~8}20_ZM5uSc!~cBF>NEG8e6Q6=k8g#)SxCBP4`UZQ$ks782QMRaGO+oo`je8%$? z6?k+6f6;p6(wius7x;6^7i&j-kYQYJFD?keT zQlEaMC~M0vro+gAq@n`65g6~GNJ;Y!K~y2I1^5Awlz-YnQItlykYF7I!&_CFl~D>E zm7IyfmJtsD5S2WIYyeRo1~EY`K)Haqxdqlc$y<`s$bvo}ot@_c9Go*DfH#e;!#hV% zF=#!8mJv!8#Iw^Bi#>edQPlu&;50B8Dm*(NV8uoCzD!SAj;=V1^bTY|8GunGheAmZ zk{|?KiSS8SMsaM2G7_O3LWK~<;C(6V<{bu!_XWffD>Xuaat6L}6D|qLR7fH4Mj#cK zP~r)vODI=)l zJo<^xXKv@+eCm_e@H`O{${tq6AR#k3YVQsn*BIq->(9W4A*pegqQF|qZ?Nx>Yvv3R zUNkaBF?tGB2WIIkB8=%7kWDLv22DB$I5mpsgJ#-+Q zMhK1c3amq0QAVw-MJk2V8l44rrAq%dw>Xz$DCc_Q4TX+C1_)oEL`W(;UMr$OhM(R> zZvZW4C>9)rZlErDJkbRgVE69A-*p#q&rX8=E?nr*IYdY*t5=gnp0F?oRnS)+5vBxI zp^30Tj5HYx6u3453$h9_KyiF>dL|XTeGGOR__yxEm*VvNYAGc5{jLLX0w?hOh!dC1 z!;DM0l(RUC_wl~tlHPPN7xQvn&KM_35g0P)ld`_gpv3_qI?@WvzKnAPBK1* z>a@!WMoCPSHtm5#g?-%qKIyts309vB`*wpUYts|BAs50AqY#vlh@s#YP&y9YfFHhh z0`NnJA}W`lEuacU;woKf$UFNHxksg8sULA4SisJ-Q5uBoBV>2m%BTH~Yur$`4Ke6NQT zF^gxM%;agOP?(%Z3wC_xi%f1fliKJ+nc|fid{l7OxtH)i*L;!L$6UzRH@-r&digO;k!NbEjJQh^D#zS`!S=V=r|&oO-xe410T%W;rGPt9F8GG*~cPv<^;Pe14jNtqTHfacc2zU<y$nU~Itu%#nm zhm93EG6>76NBs=qVVV{Wlt2i7Z=YqU{;Z^;J~;(TEnKUO*Agi~_@Z=>v_{1dD)T5E zBZ?HX$Ey&TTAVD9GA>Kx8i!gYeHRv46nG^OB0>fMcu+z@pz(OH4k;w41YtA4A%d{f z?;ypS9BV96O1v;wr|_bTVn`q0hmRBCEl7zD6#|V96iP|RB~Ca*7?U}HJ86RE$QW8G zx)^@#XRqQ{fAe2>(o24td}#r^z+q|B6XK+SkEe)3O=rnMVhK`-3@YT-Vzk6(DTICS ziX3zAbT|NAQ{Y^T2?AWKP`wOIh>azoFxa%uz-qL$xFAL=5T?Ke3g-d_Gt(qa4^!p@ z#`JN{<5VfwRyy()BLOW-pSMy4N$FU4j}jq)%aIrgE73wD1?0LwD2s3jCW?uCpTYEg zTGSXk=5fTY_<2Sj_jpDncpQSVdYZwL+X59TCZZ~C^ido*ySvYQ9{p#%kX;}B2BzfT>6V?dE+R2m^v0#rSLK!Q?b z`hoEX1-bMjMwOX2u_b7AS!|_ru6QxgD}IL2&6{aTk3fR+q$UGraKa;;CvXa*JcaN? zP9U^mY|SWY^%w}quegHgXZ!?v|KkJbuYQ)Pg=yqy4OKJ{HbC_E)3IaJ>Z6EWtF%v4 zK&7JT8AH)+ql-ndv9(0a31n74(Jfc*u^@bD2|70{`RYN7A%U4P8X)8czU3gL-*g3eDj%`FG_WEford zh$2*2!S*_69Bz=~o0CMD1C`-@j<-?iFy2s| z)NfB|3N3w(vI@C=^8OL)og z?$QH;F|cP3+YNl;RGHWgcb-DQWOQQ*B+9PCEgVX4{;b02MM_ngl3WMt{zJp&ZGFkbx0RMirT7- zGH3;&3L*!el>~4>X|yX*3h4QQq4FGr3ZEN<2N~${cPL*9=$Uk=h2cxR3un+?;)}dI zf9NvR$yneBSf$a{mE~tOC4WSgPK$Tt`nB>N=R7Jn zVCA_CC#*zNoRbKlkjjCz2v;g8qYJz-W#0s)qvKS`0SSG{-*C3HjGcf$mD~{F!8oM1 zIFl2OjKZyVv9R-Y)~!ATlP&P%E1r$Za@q^Ku{gqH0)TBde1))Q84r4RUj;PI<`khX zHB6L-PJz<8T$_pDiK_z*i7TBf%aG$^r z2Y!`bWe&ZnFTWhF zyb@L&zl@U;PQ(fPNaF`Nok_JEZ{~2btnEsU08UVfD%jHKca$Y7wWUmLa-{>{!eL2R$@NHO@ zQ+2*1Kf7TBB=467x3HywjwsWNmZKzy(kZZj5XdMfk8etqXOt?*;BJ`7Jxq&1Q08mM z08xmt9S_nC^(a)i0F*#$zr?Npk@=zapTIeb2ql&R;X|})fbNy5-@Yi*y=;mi0Hts^ zloP06n4)5b{cyun90WpolnC(NMaXLRyp7F&BMoTZ`y!pbN~kkH%tHLm{Phj?<_pwViv z5LmR=80)bX!ayR0L&>}hOobZh1loJX0(FQJu_re~C~Q*{1hdy#v!C;APic2 zoG_89&n$gjS(JP+C^hqZ({hPnc)V@2Aqw5fHjIYHjm%Oi5 z@0}yZ8HGQ=iFl~6gB|<oy7XYMhdsQSSMz)P9vj(syt{KK78c-r?>pE5cqs6h z&y;@`UkopQIgCB>+}H09C*p@Fv~vPK7`Q)T^@4+iysYB%Z{6=tVzm>cqA@}tlK_IC zTuB!e7@&d*?BBW(Fn*T6 z^eB1?6~t(fm8<#6Q`Lf=vEIq1$q+$c+OiWE!)BLSrL5aSZSBQT5e=+I-OMu}v|t1zW9wRWHe;Nvp-;g=I; z3UKi-D&ZNbvO$(ZI6NOh3=QjI=*+m1t00HDM8-p2AdJW90x1=s@IrwqbqjE1+7Q~} zeIFA_!a|pt6RteAPl_@vsT#r{FP$cDA<#H1y70s3jvkJeDATHJJ}j>*z)7sj5keq+ zFyx*TLkCFR>%8gGS#qubBtnK5<sgxDKoB|o( ztSF;$LVyUdtvP!0vjky)i0dS}EL-d?MAi{Tqeu~uRx*+$K~aqee4p0cJ!W407S_D+ zEsRB)JR9JBh7QVTU@AN!s8Y)^*tM0kHOut;BKguhy`_14o}q*wtcEnkS5sfJnQ&q) zm33<|l^V`FM8Au5hQYuRYsKnw&SCl=-_Oi%ypf5!{~v))@%uxlR>6b_>|qJ&k0c(- z>P&lV`FBlv?`J=1)tPp%gWutIexTBqjs*h-{0_gvTY2mEmm~3&ufX3u%oRGn`OWh0 z^{E2C*nBa_WXyZ#OvbB9ttE*bZOlB4Jz;W zhq7`^B?26D=9m$yk?;HPFT-`Z89nT2HcJ3!HK~Ajyk9sxahAlSCB?JokL&3sisW zXPJyGwo*YB1r(Y*&@?IuVvv_w4~c+&MyH$NY>pNRQ%$H<$5F;XI#0R6A3_|LWnPyn zH>n{B)Yx)`U%Jv5c4A002Wpj46}#InzgJ|O{Ouj=$PV@(Pf0@Vdh{u!!7hg>Qqm6% zaaVp8g^;#}PK*SKGIgr(LxQ&lYGtJ<@5_`YJxqHtu5?6@C4a^FVHK%iN{%RV?=2c7 zieY+8S1y6S*3t5z*uHfzBf;*0<2Q#!XUy5QC8q*W|{u@KXL6f zABWK~#HKT;jEoUB>d0E1#0vWD-I(dUxIMcty^Qmo{Zg72J(~J3vN~ zWL?7AE7!8_C)T0jgHKpO!awuR$8Ug_;T*j8y$_vzd#t$pa(KlnR#IReZX6#c;^7MI zEaNzac8-P<)tQbjKHLA{5}TWwok4krFS>-=Z>9FGcf!uyP+1MdUOIi~{>^`~=KM1t zOUax?N`cT-loALW?N5D_tsnh67J>@ZORr$;f~PV$+JI_}I85-iAT=39k&!LTvv5Pt}cydt)N&IqEn@T?uQ|X1IgGrD7Sl4 z8tp=Y$(j1bc4mu%qY;m9#C+|srMZ|*Ir>z7MQ`O;7>{BS&7IrDW;j*ruzmYuL@ zs4U(u$0Z0L&xV_-fGwjk-b0|uJ{E=rGPKq-k{a`&;Fg*FO#2)wE#vV<&X}yQ!CF{o zGjA-;8vvKIZi61vv?)2c%Jc{oqW50@M^(?R@{BzMg#@YS+t1A zZ2`m6?TvvjLTQclAtDTsSqBJkQb8!Gg$h&^9CV90ybFn>rZ>Gv_f5Y|<0U^sGX&!e zy@4eMM8AhJP+;*hd+FSI9mOaAjmoVzA!iopzVLss>d*d!hLjYY{dgsj#JH$NMFBgu zv;RHs;M;e8o57jqu;EG1V)E3pnW{Ia)S7_A`ynsG!yxO>o!`sC*4x z&)~G5`X%J1(-FdxTSJiz2pmwY(`hXrU;i4KTdzm1*$hkbOuytcq))k=lee7th~C?- z?w?SsemHQf9EjPk%<}msetzYBvM%8#cK!rHKJeVHeV^IKw_o>ddfUrTQnV`Kxzo=* zrtjYImv?Z(uit>n4^Qr|om%6P4_?C9g$LVu>sWVuITFsnJKpi|*|@-e?%Kt>@41KX zE-tcI6r547bHf!^lp8O;7~b%PN5qkMldR~Ya#NB$<2q6}e0#v| z|9B^Ne(mF|f90E5fBxgB)W=Frgm75vOC1B}OCwcD27?~L8=_i+{d;$F{bxVQ^n3r3 zCp_lyoc6lkh0SM>;&6j5p|iM36OClse|&`Gw||C_&8rc{qnyII0@)Ztj*Oyb_Lqif zC4yd;tlc4t5(?8Nsa6RZs|mVY=+2gguM*{-lSAWoxDqA&y^g}Np)Q8$NXte$fcJ!7 z+DdVsJKry^8{uzGU&jj37|OIGVechS8#~M+8?LkqHRNfSVJ^G|U*^xF0?5W{Bz(#F@Z&=V!3-U?VyFW#tW+ek(vewq&g8Hy;~*$` z1jr#@WQDiFP(W}P8EB3&2m=P~9P%DXEJ#MD$`ZIrmd7(K(vGE1h}IcmFu+ZnhRFBh zmwL!RAf=?h#^u@*4@*i*pg2pmEvoE1prky4e8nbJ6= zkVZo+5k-m+AsG-TL$y`~BOz3z-2&kU%o$Jqd+%iRWltp$7Gn)kgcQ=Eyh3=16c#HK znsQhc+HJaD`x4nwi}5S3V!YA7^t%*-Qlu}A38wcE-uzv@@VS3xdUkQIicO31`B71N82KzqtUgGJ!oO$v^G+yuups@i9JjO#6Q8b>HHif4b+O&z|zRr?C36)yI6iY(C?=Z~89V-?#ms&yUrKxcRL& zbMx=sT)vU8>atbTPpy;9X3TzhmUOzzNejnAo_^iascx(u^!=;2>iAV{`j>xsSR)XB zc=OHt-pw~3^w}?;b{cf?;tb9mM4 z_a1?`FBI@ElgBT$Y0vh1kev?khH>JZH~`d7K*Q}3a*dV(`w@@tGX|9|%0JKnOYy#If%vfC-Q&&-`(=^fMo#YzMVmKZgP z5_=1YMw4h_VoWSCCYC5_5;ZZ{VuHrrK#2mPfFQlYG^XBq?rFQM^7~_-DVHe>Fn3VD zzvuOWIp^$k_g-u5_I%d!JfF`109oEarv)a^7(5z*@?ey}J3-ND6U8AxIDiaF&ilLX zzLm>A@@`gbx{oKn`L9uDzla>5-Jp=3N@akqh4Fv-Fn#~^K9U6suz7%_i_3Gw@KSJ4>HDC1yxUN>1w1bK}NaSDoTa!EH4XP!=CuUdr^RX{TJU7>ImHBOCXCOHqoAm4)8D;%~3YeH8|Dh!du)(J+*NquVKg zN+=<-yMdY$rLwl@6~K#Lij^*f<|quP9BK&!gLJlRBAwpatN)JiE~6qdED>IGu+$M@ z6>oEdE6SLV4iTn{vI2|6YmY=Dx&v4C4cy4LJw)HMIary z@I-_ZLLy|2AO>p?E=L3k86`-k%1D#W$vIr#Kg4|TzdMY;2@e8@#OD6nW58mFNB(o;i{Kj#g=bv0btQ{7xAQTK55oI z0s=nI=MVox&+$U}H4_t@ap|S(8Jjt(UguZmoKx0c?P-T$A^q?q&L4)*&VKEZOQ6v> zY@wZ9L&k9t7af+=rGv3g@=5OIZeGDFkUTno>d~?fHx503fO4N7Zj=hxkA|tNL)w|4 zVus6AXXRjKlGZV&Qa%5*C17Z$2&wV9Lf|30?mBMy^k2idFW~Vn_+z|)qCG>7LgMLa zjX)rK=@Esu;3ZyolD>Yl^W;SrQ{;#!Sb_?Hfe;bQj~2_GM~}mjdewY_o+h7GH@<#o-_-ovYr;yA$BOM}FgHST`F+3?KJc z%n@raE<-t63XU0z)CwbHkI~2in!;K<1=7oM#W#$wnIjMm?+O$d-V~Tht&A)*8U&#t z*BYG`rO=rQ@!bw4FVlLQR~W4k))L4v0%Xyk1H89LS!!cg+d^xN^@hS5B2_X;Sv*46 zvas5R5cX93MM;puqNO#-+yPlKFD)K$1XQr>g|)7$;kKEcM@eDX}YPcXMPUzz0O$ zkUNXO;Zj4;uL*pB7YUhZ<6A9UpfKdPTo7tS7e^S?2`28R@ehB_CHLORvQK@7GoErb z-g}zOCb9GwRVsxmCGgH-u~_2?l)^Yi-GdRHuD58D(`q#sm_JJY%iqYo3zu-u&n_YO z-_KJIW8$@sCkp~>r-7!z!nJFee*N1~|M)Ic7?z|BhrvE{5cLnX(`Nf;|CwyVeZ(t| zVBsJA#X;{s-@cWJuYZZojlU${z6BXZ1fz=?IO|yqJpH-Ics2#!kGn7^OSSCZbo(@) zKIlT~E#KWjF;%ubUSm1G|m+RL)hue-(JBt*&v(KcB+l za~E@Q?PACduD`dv|F&J3q-#I7b{2pD&=t)YUpRyBtoaVvSjLubZ(-)H8TyXw+tsF^ z;M08i@CwpRPR=QS$gSly*IY9TKqw)&==9U~1`ts8<=A8AG`0WmfQXAOnsWeg!2GbQ zuP*y=7(zQx0*H_E@kb?n=|FY~m(ZZWn|bs9GeF{Ntp_inp1JZerhoKp();ehOi!Vz zHIk!GVCXq7rgrLqS6*(+%VRtmtWBNC9c3Q46L?Iquo7D7CR#4Z2zoiE>3+I)`u&N{JC*yr<-7@f1Z-Ml_@&pwvKU znVfm^7V~=-e30*waK)!D&1xknHz6{kn5#qhW z=52(x<=-kn6jU(n8Juvq`T)2PZ*!bXQ65ApF(F_LO2|kqBg3khNPR)euKO5jwQ45cn7;yF|7{Au1FmM;VQ*3JPC9?og4$$q3uZkxC;f z6$<4DGmkS48)>ADk%7XsJA0jD2ZSiBEUA%&Gf3+Qq{eHBwIIAkT7i?AG;I)SL$x*t zser&i-$?2FH@0DBrV(d9mSo-#Z4W{S;;@4EkQPmp_e4rDAtc3(H;{-7y z=g|4@FB0V$Ei?DY3g7QMcnVYFr3@UnPmFoF)&X(_#5r+Qb`&sntMf+?Q^aZT=gB9HQ z;XA>@*6(kf1tNBi`>=wD&(Ce-YTZ(@%{zE1pMo>6fVtFCujv5RO8H=pv<)3u0n| zGy>IvARsO(2xiE%$6E>0DNcclHGZZ^;R{rtp|BY5%Nk|va4kdbB}(a%1W7<7LtIhN z@OGbS#&LU+?&fK95P=k!UeR(O!CSX$|HfOiP(2ZCTNboZYDbu?ASA|Xi7X0?1RK>5 z^0wIHxqVL=Iu(?~%0GRI#^NuWKp$jOa?Ai-&c&kRC&Y+m4; zLK=q;4F-iwixTK~Nudo+TT(18D-c3sRY}$A1>|N1UzlDAi9mQm5!axRB9)|2ZDc#6 zF)@yC1(nei*jk9__qb*gTGLovvM{M4qYH%2l@SlEDXc+RTMFkX1tDk|lUa+`29XME zoKd(gK8O)*NvI`8mm+*&YXTWna4Ig#Ke}CvP?$U~#SE=SHD}1`WlEUrW`s%+iM`LV z2gZwnzQC0_dp<*YRo+8R|LQ~I9zOk_~U*cmK_{=R{M8#bbVlyQj7?nQf!??Qc-L?oH^vA=36V?M|Ei#mmWG_ZFr$UQg)e zR@xb*jyBDG}2c`LZ zqw00uf8stan!^y1Pdz|&AJl5eBq*HwZ_`+jF3pKfwuCa7q{0asIh>k@D znnDyPLRvevuyy0lIO0z}Svp|t29Yimi>&~(B2gh&=(d{(ljE>Bp@>9C5QeBAB+D{H zw;)%ZP?d$(xqza`ShQdz$DMs1w|@0w41V23W}n`fUYq0geMSv>mq`{ zL7otKgCzwOqf>TA8mOYob6PyIri6rJ!;s@mWgLmk{VW)(eF3SYy%EI?i{n ztqxjigp_#7sERELk~ra}Mr)t*xol{Nib+d$QWcXV5nezj6(%pE1V(sdPfNjjgOCy4 zTgWpU5^4e7Whh_Z;~IetkYRw;U4p2etWqPg8M(-aqAGZg%bKPBg9^afGUZAncp=LN zw8=|)(P|$ml-N$E%yUl?oQ_K^yP|+VB1DV}AjXk-g;FtiLp`og6a_xfC^QyFHLT!p z6vp6#fIy0pB34Pdu_uv=Oc<&y!_3HX%pbpvA{B&R`~uZ<2D)1TfvP4{i13BL))bKe zTeQl;=OCf*h5(Cno}zGsCdJeQQrB^v92tX`J+*6-mK3wPgC;~NM<7B9EDnQ_l1dzr zE6`4nbPa_|VL($C8f^@@5cn)*WhL3?dER6^r`BVHl6WghfFM0mhu|er2Br2z6~dw? zvR4gYphDsL@RRr9It`+rkF-~utx*^}c@WWl-(TTwxQhO_y%&-6(QP;JvdfxhJey7b z{#7==;yi|Lxr3!^jzkELGy<^LK+(DVX3~ic+ZHY0NzeK{0E%{pnwMlE!04RVg~XK_ z2uHU$jV(%0Y=tM35~Vd^6eDDUC~{KcDZE1a3=fz_i#)Ed^we|N()|{VYk$n(ibX_E ze-2)TIMc<8D(3M|go&+XdfXh^M;iOzHu;^4+3?N_Fq2~d^q=)?X0G@VK0mm;nAQ!~ zviZY*3xFP)$B|$BKGi+wYHhc}eSi2;rZ4>#c6x%1?|L&weD0h3?BfT1L%B&VFD?EATX8J8U%5b?e5&FSv{=(_93_W<;P5Pac`GYHi|pxf_#Z_YAt<`zWEacJiu z=ZEd=(;S6%CYe0wBI=zX!=2XM+-3X!Z9gdXgZ8F2m!5Gc+4k~5T3b_N(YcEV2SR3U zpW*&*-j7Qi8@{vwfHS^$#$NmQB%kD1j{U7>ZMy0J@0s;~{<>WNV&2Q&!1DKf0YoOB2?4PBV-R)~E{?DLYIv^GKzRtV?`rxgyOpwu+b8b$eAU^OI^VsQA9c?du% z0!&$(;5;`!fUyV4+TZ0~kuN_2)jx<@zXfJ?khlWyC|^L|2vJo-p-YA$6PK(~Iw%X4 zRR|&n6M|35-&_nu3tSZ{8L>*BD1B1u^ME$Y*iv6X^jMOlDcO$_1(_)es|(j_(;JtT zfGL@fyn`g%&AcRmC?PhcWJ^*4#wLiS#t@5#p?{!M_BI^|HK-UGDSmPr&UR2EtEq+> zq@ZdICYz!4SAWNvr~D47hvw3y^u7BnFgjGSO$Bku3RQC@m8^9@uOe0Sgza3ZNf8SH zL7gZJAO(h!-C7x;hg6qE-Kqv{ASrb}A`zCkXn}+vArKBk21S520$isoMi&AdNT^m> zQFPFvM^d$i{VL0Ne5Jo+`s#GbLW-nPmbwk_=8NY-}>?Q_vndXcOsMfk~HyDT)9QdW0EKCqe;H{^#v9r%M4`uuh z+l-mhjGJ$5-po&S?3nf2n~yw_69)zkZU>iK0_UGUCxXm#cT3E1Xa^o7jFcZ#eT5iiyICKL|ps2Yj**N)o)nMX`eU^sdv{nG;VG1<0t=^d?IJVmo~8K z)vH+Ww7tjsc|Omd@F$0S9)4Zy*8S8%bnm>CnVa7rhD2j-ph@!}8%*;?19Yj#W6%gPkyg&sJMR$fu z{|IYNd=eY(-@(!wZzfuQFKYF%D3MXPjG;A0v-ORC#kvo@hsvm$qq{^z=& z6K-k(W+(;Yuo4rNPfYBcplBnV7Sm1DAiFzF%IB8W{l554ncPtu&80f#y3u zh{!A>U;G@w__|V9Z)OK--YC^$Pb9+=2&f(R7@UrfowV#jH}6s0_86voPqQK|dVTKE z@zP^&^1eJb3D8m{c=7^lTq=a;J?)KZ0eMi4-I`J*It!rc!Bon5q*<~}i5N_&?oHuA zcc=xLP>8brWDmQsnL?*10Z!6aYF9MdC8(&>N_MTR13>~K%OKKZohEK_5?mW6D|pu> z@BvA+Mw%LOCy6qLOJLv?ufq2wZ2H!hsE@8>{*skMv7^&$5o*ceQ;)=3OOd5WQ3~eC zs0ugVMEawP=_HyHPkAf?N1A11P9wA=Q4z7!w6@+y(+7+!SxxYO=hm$IH7`h8O`>W- z)GMqvMHBBdLN;*>Gqmy)wr{wZeEYq`Kl?G!+2>LSh4;1;;C3D{hXjsaZXIBw5U6?| zqi^_AM&I=I1E!Sj%S>aM=^uRufaIv-8Tg%N@3Wn%_c8p!KVbW(KMZ)LFZ({DtM+!1 zzufxGEV6FUIH-25b*){Q4a;7dmbC!^~bo@3^SKsigymNABL~}9cwPFQi+jK zjLs{FA}4P&2rOj;AxLn-!+(C7)(`&^{g3}az1l~!J53-YN`jX)l!WHQ7HR_vkm|sX zgCGbQ7#w11d>efgP)QA&7X;p6q{2IoN3#6L6S?!+AF=iBbu7Qep z=;g0uV(nuQS~1i&LLNwBtw2TiKv9V*1OnO;ie{JlfAW0>zWLwu_t&BNWbkQEm%sx8 zSEOa%or5UCWo@KPdZKYXWosRl8U!L|Y{w5_?Cx1(lRR$6gY)%ccBvDvko#ZN@Z>zhk@vP^u?VA_Vf7MT^En9-0oMv42VgBfk8691S6tH!4l>Rrripr@^ zfcY=QOl-wDo3gafhhrB zSVd%QAS*#YSnUyCX{>Fc9Hr_u00UTBu z)MdB#=xcY|SpR%D>)H5rj;Ides{#IwUm>>KkLa5Z$E?8()Da><;ON|WHGbZy575>1* z)VhCwQ*N7j*r_oyKf7#~NMrx+oO{5weP^E40};@=_DXo|TlQ-6)i%7fzr?w}Np`TT zOzXe6o}I;F53GCWJF1VtQwN#4eu~L!C--7PI+SMGyYE+Be{dI7C1pB~Hy&3wWH9@_ zIN0$&BD>>`IotKW-g6IkHfKlAKX}qf^aT%*HSLZ&euF^79EWz`5$1=@L1^cD96V@x zBNH zE03gk&##bI{Ty@VGf_!|H6Gh(QI8V(PdK^UVTl7udQ#_mLeL(BCH9g^En@gN&u7EQ zCo}aA|H!hfH^S&3##?;u(N5!>p)eWN6v!|{2#53`fz}w;#(R(R6}$i`3Z|RWd!K8m zO17YEhQfNhQphsSf|8QNIqKCKJmsluIN~^3?|T=Ew_QUT_d&Luz(zO;qL5^Hi;99= zDWa(iXBD=R;4DOWPA*a+>FA>I!lBwJL@|D9f-p$w_$q;rgw6XfBEd_6GbuW(K;Ff6 zT0L>GGRoq0N!RMFBM_wub>SR7$T0Vhy5JBiLy&PHs$9Y=@!o{hN4Eyxus5YFR*g!a@9B0GaCELrMs zA-FKY+X5-U8IRKv-w4S~Mx-=8H+UiF3WwCC&WKYHGK^7^+rfg98ffFa!`To`ipV@( zSe(!VO5?pJZy0bE?Il(f6uH6+g-j}F>nXwz-EHi16@98PN%zj%@Og?gUBV#5r5Vb3 z=**CBxq)h9kWO0Q#&#g5$B=N579~DM#iFp;B0vgR0@vHr#(V`I_TVLn9Q{khPjbQHVzqM^(C$Tj^#6 zgNs)^D1g}Wey!98Y0vB+it3~;M)WiQZIKc6^;78^C0{TCTh@_n-%8)AH5lix))MFd z70wOC>$-zjczGnb_1)WU-1WI~>`4b~TRCQT&V0J=o&)yz$iu^Ud)RHm7t8eL>dNXq zNm-V?bQx3Emlg2qzp$PY-#a&T2CmrsGJPN**q80;*LdsU(KtU3SkOLH)+&mMN2_ijYmcl7>O0;HDA zJ98dezqb|BGBodL?sMhf5-#C<&PN|6w%@~P`^)6D-QBs9GCnYOU%cu_8kdy-v2**) z`vnnmmoe6P8yIJn>Db;Qi&fL ze_yE0b}51g;S^*ULiPZN^B4`%TZ**z zBGR@LN>d3c3Mjf=#>Qv%8dD+#)@7KWkC+a*2=O5#MC2ZP)}h^L62_7hix;r*wQpkM ztIwfdd2~?4PEA0f5S1D-_w1M&!{rt)9QAsD92g->19E045X=}!s3XEcVq_O*Gn{gC zi-0h$&%IO%bPMTQ|ViZOW?X>tl_P|-qyAft8nR@}>{ z=<}A`N7&8`K~iDxiD$Bf_Yy2#z{v10zSSmDF%E$j1~Ivv^tRhk_uNnWzS|M+`BSn_ zUQD!j3F+;>#9sFU`UXd_X`84LVTuAPHL3_`Pi>^Io7i7|uX*S-Yl%zJWh^$(} zx(v}wajhvN0yS7e1{I2_Hm1?SsSZJ{PE;Sl`4n#jd9{Lfn!tAHPEM1VHd@q>-jMqi zv8kYkVyM-znI#eMz_UF$J&n8J=M;e=3MAP~8&Mm;_Vpud2f3-iOllC3C#qL5zQE-k z9cB#b0II{KXkk>QJNX@($^Q1uM1TKT!r>wC5gp;tK%_mnmlUE*nQL2%NF5<5xoM+h zfK-C)?t5r%8Y5qN1S?lAqpCDkh2+lB7X$=>r`>E4^e-U@9@?{72LVzA2%8f`5m`4S z6rQ5+1WppvhUoNHh|q`)_hMJC*`=uz1PaOAEWO`wkeUGx*RqZG?fM*y95~t@ELhkR zb+qJLHXg9gzl|Vb;+hGXca^@yvfp2}&o;|nvYZ>=aU(d`@TCo$@SYPM5y;!0?MVb< zvj=~(+O*e3f{Gs{3axeP=47}3cJIB6=eu*IC2-+sr#-xRpQAp`jpsOrp`AmPA9e^s zJDWLp(DX>z4{T@mO{FUbK7I8g>$?C;|4;u-9Khu=#F^Q%=VtX?I&VlMz>HNC~Djg|0rl z!uqh%M{{zfOvh0X&H>gD>e3lscFJQJTyP=j=l+TKo?D5II0h)NUV?Xoc(PDoL`2vv z(87ZT;RMQSqzWmNCvpyxb}*HYp;J#Mf5r<5F8LoSgM$bef`_!*Aq*74mx5t7&8QAl zOKpWfgH|XV;jMxJL$UszvR+}&@d!cI=@R$V=m<+7CBBo9wa4%yBM?`J+AZ?T;uA~% ziKkGUc_zcx-axC~$JFD`BA6IM|LO|t$UMyRUV=FC1Z-Z={@;t4f8R~imR2e3Aa(Dt z&1q&jU8WW-L=KIB)5y%wnO8?mb*bEQ3xlhVEp;WP#?U&#W=))`qshUCc&pLX2uF_V zr1)x#7f^8lB63(XeM?43$Hr+0PZD`-p%C2;Itn=Q+0VgwLATQa4aVohE=EjDA-3Gh zK;Hn(ZX5N|H;^q@z?ScSoxZ1^OMKe~s)NJmfnj_eBUFG97Q17NiPcAA|M1UH^*UC^ z$hbm`2h&F6hU|`eNiO|5b>BpVb=t#Kn$P<^Of#kOi~l3)WXzoL6zns94;AEOKl&l^ zC*P%B(Z~fyg2<71m+36TocBsN>Ii&i8muC6p3HaQ=RaWZmV40s!$f+lWSrW=a-pa$ zUV`@muQj?qMdcpp1b9a_P^TgS$PK87DDglWuPAFfS~D=vkFN~UoVlN%*(AF22HLNB zCizFcK(y)z!gd$uJ$Q@r1%V83SwS#743#=&W(F@os0v+Y;NIJ*EMCd#m%fnE(KVQM zhia{k(*aSa=(Hxtono+7a!F55Pct<&#o*u|0|Nuh%*-$~HATH%XJBApR-|HjdYWdV zLx1du1{WZW#ac(CB}xfgQpJWT0sS0VF}{1DQPt`PY%8Qh_4Q+?C$Y_${kFS4gBKrUm#3$v*|@O;B+Hg9V_=U( z&ONv7Jb%U*mMvSx(1Wl??mYK93+Z=W1N&>o3V1LaxU--d$|CB0S!GFuc~6|j*iXl3 zuWK{@vvKB~dFYi^Rb>wl(K!eZ(JkBP+J5{Y4;waaU~q7dzP{Z)(4O~@lycVn(`vO2 zct7oRUMD6F`8?#-@{tGl(&w*O!D$bZUDQuZAYiX&#m?{hyN({r9u|oBmw)*ek|d$o zY|`m;$g+$mijY#$Y&LoR`t_XpaCUqUcBt~h?)=6#_{I%4%<8)_hHkgZ`1m+|eSIjU z@ZPg}^=ewJ7D5Pyhld#(8>8FpmYnKBFm~z~JpJH~`$*Xjf`Q%R>}={B@L2KaZXlA4 z?|<3nlRy3>^RAzVF}vf-JLh3!WP~J{U2N-InTim{G2Z)90a(f&D@d0eJ9e;W(IWc$ z`8T8&Ppvum3%24f7>Y88O-@o}c6rdYgqF^d;3W}<(MO> zi!weldG7NtpSg(elK({Yg)p%hbHu5rKl}@7%h#YnRbJPHqgtsIjtP%{x2~4->zVdBEuX+s&!-!^4kPAOF-!u%mDd`C!*i`76|Vpdh#o9@BSzr$iICt?Rz#;IsX+54Gmx= zOg;UD*z12z@SpzzcmE2s!>B>h_kWDOGtZ#rJVpwfcQ_$YK;yYDq4Uolr0>Qncjd(I zX_1zo48r6HO9>u=0PtWTid4z`6<8Z=zF05EVI6i|t z|5@Jzp(qNBG1O{RKKTB(lX$2^bvh=+ z3IVPl2tuS%h|xj#{x!6=Z)I@l3aqu{&Z4E@o$q`n)>^97D(!ZA*D>n#I(eS&dKO!2 zcRjm=5Ex_7TF?4-=k|4P|1gZq9f)w9-31r&K|sXLXT1fm23HiwefShtY~Ic*|MVTZ z-dB6hzcFUkobT&dUKGWy?>pz}f#3I>ryvM+J$rY~{Z5PHm^4iZ!;rkUT3xHvXti2Y zDixe_q-l!yd@l^Pzj-o_jsLwn`f}OR_D>1BXT8GuFRq^x5V7Y1YP#*f^*F^$foYX} zsxGhYvyCr2?|kPwcU_M==k0-WzNa7az`2j(xF?z^kW%h?R|i2rtybegYY*C)w$5?; z%nTkl;Q&tiMeEnIWe=Y~3Bg|#pBicHjrvO*h>%YYz6;uRVVsA3tz(V_#z&A0I~u!Pmap&x@XY z7TV<)B?&}9fJ5VHOHiXnqK`QNU*y>80J7Bt1Qt!81SU(l>K9k<0%dz1YtMP!*ES&p zFL}W;@f3LPODzS!q3Fn*erJ#>!XzPK79tQRqbL*z9pQ3^`PxNPWI^_v7vYBHBfLcg z5$z3INWOJ3YHBmZlBINB^m1yo3L0?pSD=K3pa!VYVMdnUcTT;JN?J!nN%yJ(C_12H zaFRx`_q||(kh)SBmt(xA`t|Q1zVdJAHOIsE{+lSDru+K8K*bfDx9F&kd~lSoQo}v% zsZ=CHBO{onJf&1cb{T~!$W+Mu;rYzG_6_*UzK_^(583gjGxffYGcj2gqgG)uNEa6lLT}Pyeh{l3b49lG>TG)Lqwu_jIf^A zDMY04zD~E>K{$b|CIqe^cLwDJBCbHP2sdPjUj9nrFd;8GC~p}K>dY*d58(hT7%KDl zrrI>;pG5mT|H$y@0`elo6$YU+$~&acX>HHBru--N+0r!C(~(6QF-6b@M=C2@AwcSXP$w>(9OF*L?9i;mCD#dql=h$ z?+4iNp7&#aa?4)lx?w!%LFiMEE3hF%7U;sx)QGTF*5(Y_l5)0HK;J@Gz5*ZBDQ>=* zqOlGs0z`d~(0B0l1ZAqYdu~ID7%d{KS0sVP(jXKu6aVmTRCR>({d@+ z$0bEFj!GsdqCvo81q4zPNkMMRu6^!wVt0OTHk=9wHwg)U{ThTwf*J96}W7~7iA2=U-&dHvi_cvd_E{7JF1t5T3{mA!7cWJfC zg|3|obO65L5%c!%pKSZ#wpolw`NY9d4Q{%46Q_RsR8)9qQ-~_dcBj|2)*X1^ZcjSc z+M4|U(#Guh-8pajn)5w>+jH*sbjoSQEcBr^V*+b z#zy)i~h@k#vtZ67i(xq36#l zSBZrvDLIP*$Z=XDb0A4T`jYxoXb5GgVURht{peSFjpxMUk3$IXS|Kt=B$Uba$-?MS&tNk?1;zW&Y1ui;63Es7T~~Zd?*l6jhc6WBbI{BnU5nFU(MvJ z-pI)OMcAx~^#Y;_%E>at%t2AK2!n{)+0US1I)p#D5_!x3$gs@YmL5#eyB2gWG9kbh zQ1qUUUY07xM@`ZmT1sp@A`#@xF2!X(B|P;sl7V3a4l^^(^sjE9^0+flLZAXodg_yj z@4A*?>qg==$CBy*x=@4`=Fg+~v}aQZV^qCPcK>GVnNMYCbO|QU2!$f31gKv0p?v1K z9(z>DZqqzw3EgL(kF8Y6ZHBatz)K?KAa7Aq6>|XJW7U` zAVO!Yy&@1h|J8c8KE*?cMC^<>&*}3r+)W94FyeH(7KwyJ#s}6Xcwi)9=h*g~bATjC zcCBU$A!e;|M^S`xj!vgTUtb@2o|C5Oej^ck9y3W2j4}8<9K(I}D~clW`*Juyz+lf* zrj!2hB$9;*2eLapatG7DnkJvj+4|kBEcx9fhxEJ+o;8!P z@9z296BqPMr|*p(_ZI5dFQ_#KrCc3xZG^>psnn&gMQ<%BDESgt+ z{T#?nIN=10F|*Q{cFxZO)0t|u8pFfGY}l}Y_3PI&JUqPDi*?U*CV+aq&gkeUjYfmX z$w{94v?t-3Gsw7)sBZvUbb7R>p2!Qj)c{X|>W<@VMi38TO@ji7a+V+tdFm6_a^L;q zv(lM%ruKC@9s2wGXT8Y6FeHj17K|>Skd9aefI|y`H5oDt2!nw2H($xU|NT##cE=>@ zH75{zfsq2~1m0L;2|GqtF}C6qhE}gG)3Su40MzI_R9etk_cMyq-%2vjM_P2L>V%>@ zgT3~rxTW*(g+*JBx1eev-Wc*m8(*!ExB%-5ibxRzF|wOdm<(C#Bj3l0%O5=VS$Gd& zRuIKi#?E>ccYXB3RI4-0%v(bL3tz^(zG1BCB7%_63tG2biMiny6ugCs@V#szjgui# z3Iq--1jRjfk$v_9ME7l_5l4gz7Xc0>W3(;>(u8mr?+8Rd5CxdDK{c+EKI;Wc+@$#BgUNA) zhp2{-9*ICWPj<`CkYD*X^1H{#pL#9>Qe(0%A_k#60IH zh-$kYtoa%8>E8`kX3D*2bYXH$^BWZ5!~d>HrGo_54@pUZ{koO4L8 zO?a3f;(hOX-+>#v_~=FQ_B?|8?4{ri9MNF{mu+uwdj=Hl1M{`Ua&?m`Hb zy#2k*JMXnj{oosPZ@&rCm_mjT;i9F~);^K`C!fRE7yfk@h!m87}Vv0tA?-PG8?V((xv~+k)DBY%lA@;!%2t-+ks&NERIZ(2w1iraQA0 zgC)od5E3T}@CxrUIy*KpxadeKzq*2a^CmI@A&N|T6c%9(mB*gKf|EZ@Qjc*(j`fa2 zIPzv2am`gU7W83%=Q+fbtHlV=V_R`|-%7+%489Z%Gag?H5#AGbb9^l%o9QCFK`D(F zA>J9BNST(&KH>h8jyw`0K?)B=ljx|U82G>k2$Gn=q#u)LOxh$c0#}omZTF+UcL`}< z8yzP&1k#t!rBG_R9_*(-jJx97_`7Z;^a&;axnP)3c(hk|<*`EGe(*JlpL~bHWypCW zgs*uQVrU+=+oqOONoxV(_PcPaGQ#N=R*IgEM1(LFk49(^xh)mFrNRdi6HnvEHp902 zkqR9Z&p2nv+`sN#H|L&9Fb6+Pq=0qaz z$#Rbz+l-soN?<3*7AzzgU4|D0I;qeqy4ZjC8{9X(gbF00NNEd&@CxMur0Sv;EywNH zM!Izav2#?BWL6=f!``!=N|cbbH=(UW_UeG7s*rEIkM{d6Kuu4Q z>5zf9{xiX2PQxojj^muCJZZ0U?SaPT4GfC1=-w%T?^*~#Y#yK|8sxSBl_P~j8;LX) zFDyZ&4=)42pdE;)z{hoLGegD&fl=tFN*@ z^NvKO*P+`r z#C?6lqQJJssC0o=hit`B#2(O!bp3j0OydUzDT3McmAC& zdq+#03<-1$Rr*p!A@Sy(oU@RJmSoG{gZ28U> zis^z|-+${q7gX>2?0roAvRrf>J$sb?WA|Rh*&H5oa%4$bYU~%gcZ9i&^iXKf3NZP97X&?eH+`S}lIKZTIym;Su?|J8kIk zkB3KazwXcGhMj5U%7X$Ck7j-tD-T@`&oIO6;K1WOl99 zO+J;QB1L6sxsTCvM!EN2@7)C=4kRBx%mEa>f6FaevYgR<2n+4B?%lhuyZDF)U!^&m z*6p;Zr~p+RLG~4;qii#*?};Zb7{zYdO41mj)!0OB-V$;ofq=|rh-e5`G%%fMbY-Rls}v&wqfNKOYgqrBGKT#950k9EEr2xQ5Cd zBCaE(CvXC16)yHDU*X2_edo3&MfrmD+EL_^N+3xVEkX!^vVuG-N*dBy1%Y7ZL+_xz z{Vwt|UraVI#GtXH3PPQbHyUJr@h7++evx>|N}{2K6gnhy6;dUzt{@kdP-vPz|2gip zFQ>j@J}wSn-TgGT7gYZK6X+;L;h+LGsgMw32Q=Pg2;=Z71Yxn>BZWZ60nQb884xH9 zfgp}5q>V;dfLYZD;Ryqes6@mQ<5&#Es-@Vhg->&2RiRNh72!mac*z><^>>n9@e`tB zPQ(a-3j%yn#rX&$3dBi|#rD-ou|Em+`Ws09`yvKUJ{h-T0x2a?sE`;88f6W_YeW$s zR~~_gYZTo!I*JLTB)jPv^0%Ik8k-kG%zstTb)gaS{26B$ZKY$OSsM#vCnJR*TYf-n#Z zMeaiaVQ@Moa3J%PXu8Qva}1vho)FIwG+Knm15hpPk)yQ2J=^dd5 zGgwD=HT^cAJ-!Z(JcU%1l(-_u5weeHU>W(2+cAB^=kLnQXrkG_Hg-Cv^MCx`Ucc|utb*Nakq>6kNW|zlqip@|R$S)T_&*z2 z^ZMCyHgW9)>Gs(t*W1!B>4W>$0Xd!156=WIUVP9^&s(vA?ODd#eziNT)_Bi( zS6#&o&v*v^cJIBj0LHTxE#l}y0Zt!6A0LX%4Tw1A7`Xbu)tev9{4kC=bPnN4Rvr*U z%oY1Vb$OMe-g4A_w>NIz9i8YqX8#xA%0pQc@mpriYpwtwSh(bXD^!n$3F|Q45LIL1 z{sA)QP{tu~DB*EOtfq6ysnpkRW_rurv`3G@I#n{v2nn))WRz~}eyU*wsULhb$vaPL zY&~HmB&rW$kT@L9X9OM)l5FcbOlyLX@eR1a5!~r#l6Xl+ShR#NsG#uV-40d+C?U~F z3hEzWW07rI#WX&!;d2vM^XFKsc0!NJTg)FnNJQ zNg(%cjrW=zKuYNxDJ8vX@!Z~DPTaeD;O&h5VK}#XijF7SrJ#UOr8K|Qctf1;r zNIXn2@nY@FOU5-kYuSfO#18lpK) z5LHl7Lgor8c#Hv6iIL4FGSOI9pi+wvjzAX}84_k4nt(g{1nM4aAhA->`o-m#H@}pM zQs`wzfo$T)2~vyCbL>P$2K0LvHwLB*aivZXRH?04hW+`q*#El{bL?rv!XvC95MoyP z0KgAt3};o#C|V)P6hN(Ysa;aoQW;xYL}3t_Lj)S9HJOwMpJ7!=qwC}lt~tZj$DBg` z#AhJlK4fzYV;n)H4nxD}+5lDtI2{lsF?#t@l+WIF}{zimQWF%&moa{A~9-x&F8_AGJQu zmA#(Vb0t^KQg7~T?y%!0rQcFNsy?e0;lXVAdCS@Q-I6|j{TJ5H0ukPMe*DBAF zLn^L3Yv^;b*P{t>K4?EaC9*iBsF{u67Kb^ZW-r*5Nkk0dEk#pvYPz&XU^Fp%qz9UsR#{^ylF}{!aA0cjAtk zB%HT~*7P_@eGp?al!~FYkgTQK=0g zi!M9vyPiHRNv^+xnYB+KSg{i83L-CXIx1;!wIWHXWigis5kUICU&ep%y~HORLB8o; zXwRT4LwFqRFa9g?OP{5(awS5>rGqRTOq%DwzIX*5D8b5#W7})B?0ZNRLI7EOA01Wej--pL;}R2#QiYL2!y~pfzy(~K(QmA&B*o3 zMhBMl;dG61fwVwMiO3vYD~iG)k@zS?$qKSaOLcf@Q98l48~Ct_-M)_QX-~&}^j}yO z$7MPh5+ekGheCLCkGs#}Q3!I^#dlHysVSr-$C4~u&h)v@XWsX}PHpvk#@5})@{@mu zT=n%*T0Kr!WdAb4Y@GJCn@C2EB8c`c6lsf;ES*Hx7T~2t<__rv-Wl>Jq2k(1Y`cwt zZWn%W2ljE#BAB-bYg4>R@G`&!3euFKF-FjTXz4sx&au8}{qav>XL9}YrQgP-={^gl zz4uIf-+f6#_44Svg*~V9@4&+JZ}l%P)I(RGkMJ< zu5i25rG*rPLm}zbgA6l?GP?0VTl2;>)Q_rj(_h`h#Ls8zFbFMJ_>6^|`2G_aIB{UV z<2|hQtY;lGhyeKHV;;lJjRwEiLu2AA8)vg*E~`{{=E8*sz0U*oZH{biZi#~on>?EN zVTUrbb2JAAB##FB!PE^?%-mXPG%R`kf&c!&`v041{Sqc0<|3N+o=xxDStlZxci!s` z*uMYJ)hQjkWnJ3MN$S;p0#_hsnuu1D&`S#8P(H`3Sb=DHMmB9`+a1?1I<$yx-!QJ* z1|5J;34#zEEFsIr5ZO2?7(|5?ge;v(Ych&%1D7{RYD3ttkAx0NDO}+QvE(X7Dn;|2 zo0*=R=A`Z8*v%7k|MGVkK%z_+FKbxo=>FSnMDR^d6x+PCJC~1Vwo+4a<;B z&Hw;_07*naR1PC8+xJ25+OH*rawOhC6jC@#^L>9!@}rAUQG{0>bNb^kOHV<3=OTud zt-|IWpEuAd1mcoe3114qRUEpR(xFW(BfQsy+F&a&w%J7$8A5>R&M<$;QpP^`ai)Ix z6J)I)v2-OvCq0%(IE*WZbd2mY5K@)&tvG}iIA0*G1(Rc~NA*yNR{4OATOY(#`%oLU5d89|44N5yl%S&u z0fJm>TziU2r%Tvh$6EufacFl5B`Be>i6&pa5!cO#pAf&{5i!}vq z$6ffwIP$osqOuI~3?l?ylxcs}xJLV~pQ5J6so!xAjCGhf_iU0lM0RG#DhaWaSZOJ| zC9{S@Ez}$ccwrU3+J5Bw+UNdm>vxIcE_?AZ7M!&Jp#@?8L#t`fRn7CZJddJLpsRWp zfY@oz-}3xJ(&q(FUBJ_?dOF>$U0Ul}6pey-UQBIujc{=PeO}CB&f~npJHZPUz}mG3 zm4yQkNXeJaID?aa@B?PdzA5-$w|ezn>HQDc)~+r4Hb*u`@r{EI?K~>^VTU-hvzYw@ zl1GF6z^F$0xHp5$wH3bxHRN5pL4q+`StfE$|qW#z>P`&(0>WddKzF--HM?V>(6&_0{ zB&jh7DF~8Ltk1Egi)(EI=W#MX>(V(9m0?6wN16;(DWeF5ci6&FP5MaN+gN|&tsjfN>Ck-;USUl2uyz?M}lGMO^lodz>Hq=P3@wV7Si7PxzSizXtJ2o{>351Gz zE53s6*cNJ6T}~8gTvS6^NAdm3(BY2>`{!Y$1|^X)fGk5Qi!+uu2x&VAJ@}+X#Tp9R z1ww>N(MA*bHtwDq5T`vJqAH@@WaOli@h6{5;K2(|?h1U`rdsKv>kER*FGmf`FV(lR z2xJb{A!J#sjIf{;2!#k@v@~FI1O;e|&=#jWrHY3nh#^WML>MBo90CQC1v1YtJzqe3 zV5ZB=qGe6f^67oEhItRM;kRz2l8j6eQt5(xt;BF!40`^%b$>u+F0I_`SFIUg%5lWEF4lOvo* z2qnuh(jE9PGhy{yjtv!q6ik~un#X>gUel@G+Ehenha5GK3 z(kO2+RzNU}3j4}5wLHUSWtyIiB6JW_5TOT_qIRlv3yqf!q1A@w-FBk?muXbP%(YoPU%=ql|4&M_H^m)egkG`|V z15wg<=2^&S_p0`yxBd-{pZoxs{-)c9_z)M~O?b9Ejef`e?h?cKr`TIU`P{%s#7WO0hMzF4p7Hvp#|hxM0#i>jSr*^T#O*5AqW>)y)zq=rx1Wf3O|b^X;;?zjy-e=&aj zIKmqUCAKD^I|VKP)c`37qL^UGlJY5)XGjZ92{dH^uW_zS@$dpC0g;2!s6qlBFEn0( z$0NPq2V)(k&EBD@(?Uh9*(`2X)eoSq22}TuopHr`tH-+?IjKv5?U1{u7pNd#~6ymm@7!+G!nDP37+{d3SqByOqk-b` zA7bDB8crYSkCiu5cF_3OUlsR8*mD65`jt9l3M> zk>wP5i&~|hZGZS@bnm#0k?U@!NFug|Axj?rJktIl%*+f<3v>`5oTad$RMSQw5QJe^ zQjKQ?$-*PZrG!o!oX1FqavoJ5KzF9u@yoAL?WDw4`~-H)(0J#cFgVnY&1TR-kV}tu z8rltP(oYo6jjqEI4QD0r<9%qfdFQy}1y9_s#)F-i=I&QMXV!14KJ^ubpZoi}zSmBE zEX&__AsgO#0eHub&t1rl&t16JzC;wW>Yp!~RY$R>ot2b*{cW&!^KRb7yJpo#{I*y? zz`J?(qt}6p?&t1Hjg~`DIr~TRm7t9GG)1EeW zNfe9U7weRwuY&{sBYWGvhL068T2VRIDPc^3NyCXa;u0NBNTu&4d>+@Esm z`)+0Y7vp4;8Ln`2w|3d|)lK~9%pY;r$I5lL+Ugpoed4r-)$iX1d;ESDS-iD0F8e;4 z|LI-a{=75z)d|B~w=(3$(-v{>8(*{wKvYhA3`bx56ZGJN--M5U6bkOVf-q1-6a=jn zNR7VkdOE@&f`r2Pay53M3v??L$l9#C>AWR9*0AyfTG#L zzV9#4N`TggY6wvTp+<#4Ss&3`WyE?s9ihqN9ovWiqRr#TR-+W)@&>C6A}jDBLS!261>WbV zsE)ktSD1V6M0l{7Bmc^02$BG#gvD!!sDX|VB&awc3nN0C;a>N2((A7%S*vtJ6h%Z) zjVP)SXmDd&F@JRd(HFiqiMHykL4B;cly~2bwTu|zLxS@r}N&+f}T0cr8 z(3!#LkYHHCAH9**C0|DhhfZqPZbme38Dd}|-7kFs_si>uetsSN-*=HW+|0E0NCLbl zL5xjPmaJM$|wR{cG;IXwzU)-wi9mK2=j(ZpyCTqAo5bx zSqK5u81Rtgct9p0WEt2pjY$cC_uzy_iJgkbu2gJxl)`QJ-H!FnbB^GS&fY6;i4;6` z=?L)9+QgvG@ddhYst*Upu@fr{j-i#qcTF!?FiH7FEN8f|F?-~RH1RK}G zz!0Pz2rE!{UI}&tFOQ>OVpzb!@dC-9JRpY$HvM^f|uOK!4@G@KKj&)v*NsaUtgR z8xcwo-EjxW!eNR|3uOdaC@28w(B6XckO`t=Pontt=P=j&1pn?2q2?_>?AU=DU5s!A z;{U!5U-~kYxQdJ-PO;TeG2G2&Xu6}5p_Rm&@_Gl*l+ia8Dx`H-lj5aBcu>xQ@d&T6 zCPk?-6--m$>ouxW=)CqkTA%$g)u%rnmqhddjkRm34b4OJ4I-387n*SK5-JN9puGog z$nhk;z!4Fi{X(`p^E)j1$#+>*JcV(ixVt&S;>SLdTHi7{u8ZkpC7rHRgic|!q;Lgs zZomg+ik%b)?+EKd1QayaUj?^cLw%}2<+{7!XFq5BjOXG0=uONMkT=_SSs~OR;`STS z|NWn+-+SJn){WiE<|+8QL3sDn-rG*Te#;>_M&A>j%CXck1V`%!3A@Q%qE%S0xsC~edGUZ zFvDqgzfJ-2Yzg?EvU@13jDcU&Jw zTyO-dU$+{m4;*OvB%fr6xeawa+V-^;e6X?aZQgsbb$63(-iXgKR9`>wsv~EK6djDc zqaS|nQOK8_xc@%1F=Xi&l`Wg8ef7WLwmV_bDEYs96Z)#Cv_&Byjw)>1GDiIVzhU6k ztKli9F?q~l)Db5VtavPHXgPt0)H_7pMq3ZE=a*}Z?K$XSs43C{mrWtIZeZ(uS5xVv zjNY{szWzPNj$B3h(f?%O{6+YzP3|m}q(*8i(c9jDyzM%u$30+B)-+(U(m@P$8JS2^ zC@c<#tX9hJrdQt}6<(B&EFomchO_e#<^j>;CPy~2u@!BH2holcbJxTZe%|z8YYSBulgn-BG z7)M41uQc8(gm4I%l;9#Q9ngH+4!oVlhb36@Iwn*#RDY$^LXde$$J-S+-$A;NG8ajg zV|BJn;}RB#%lV8Xqz%vm^;i%QxC|yc5DTc*%5*6$ zVB=Jp`k>&yN!p~7T?Qs-%fmM+BwAyTx# z4bpklAEKZ4dxSvYEp#)iaLA;_)c6+cJKxEoo3DaXk03w!WX6_`pjVy3(CAUf{$X$- z-Z`Ah!5J(bV+Bzhqr5@N7$FNflN&MXZ^qnz9Yb3Rxb8;y)h$e({w)08{R6e(I1N{^K{rLc<~gu&D^qWK6Xr2bXWp{8C*SzT>A5Siez^9+D!hH*(eB0E+L!qA^<-3xra27&-&?4_sS1@ z!IC9>?U4Y0v(JWCy=u;fdL>u#Np^##Y$AJD><0igv%A<2banQMxc8ps-Ay_hJGjgd z^as?BtP{^axFzumxPUX6`%u@fgS~ES|Fsd1)J_WFGl!P>@StsS^Ev_%P_%atY`c&8 z7yk>!wnB3pUiEg`=e-(fEXt$^Aqj#iJH|J{CqB#k>o0?032RSfdesW_%A*j&s|bSu zOcddSL?RJhqP0eNi^$p(ttPF>jkI>$MKaZ7exn0dUIjn@Kc*l5T++Y)D5LWhVe$^b zSg2G`C_10{4AH0l3bpLW5;Q1Z0*Ac!ul6Mva1wk0i1K$O!I_@3+UYCHwN_?yk)|UIz{pFnb zZVAMYcwHb+7y~-0l-eR)3j?Fj*$AC!7+3;n0a9XwMLUBFH8KkzmiVlL5E6?(2?>S4 zM^Q;vt3at3DI>@`X2=KT;h{D z!W3XaTwEYc%9+<~;b)Vx)7gf!Wa3H3f_FGPLOF!9W!hQ+RCO=<;VFeWWcghf&;j0h zyfa8$E6+_f193mJGxF{XJoOxc$?fEKUQaYI4{|}SAs|H9CT8n;%+Zg<{pkltPCXTi zr|7g%DnP{v6EjnYfBHLy{`V`WV~>N!oj_}8AKfKK;^r?RuFj`g9mXaJUJ68RN<1hn zsmTaiJ4mN@V7A`L!1{IQ%`EKNCZ7JgxW9cL1M}u#(is9gKCIA{0ev5SCtUn_ zSbY+$7d@BG@nJu5`iMuv&Pw3@gJqEO{{{OrpXL|*VxP*^ziyV0 za5|?SJ{^chVh?d4{Snz5FO=`g4iAWM4nF?zgAVO%?sRzW6<2W6^fXckj_K>;3#XsX z3Hy;Ne^6Vy7T)~k!-mX0$LIE0Wc}-6XLB~MV(tOeuZ!K0!>h&~nP$YkOaY&p2S+~| zMb*H}mUUPa;TmHE+is)p3txd|6Lb~szmxPmpCWqVQ!zHj<`xlJr0!!XFYq7xM;83o zXJP&lIC(iNolmx47&AJ8uPwn=syHbTrc5)+O@Zw;QPU0T(_;kfHtNo;aK(3+Nn?sX z`zze@Ud~V)k{3;+QFyJ0gP7K3KO+2-mk=JYx&#fL(t$?ett}%8(nC>z@#R}vN-#wU z5=75=lax+!F3OZ1XM4Q-lz>5&g~sK7qWAXKN&*5W8(~khP;JS{YWc8x-tr4GbjR(U9b+6gK(gnIGf_7MYIwK8f9c76(u#5@eopi zMXh>c>;Xh$Aq;W(G%^qv0yG7vJ_?Z$SkD&97kY5Cgrta zeaSRcSdaoIBqGlcf#8g5*71w!*&t$mpxFMT<9guL_O2m-xQzBVk3)dSkTS$0N+JLu zO1h;8oRg)Pp)EBs2)mF+5C_<8_akJ892zd`S3*}_Pr7$KYXuV%bbUZLWT!><8((1H-!7z(E#1S1V6L@R~rOX(#T3vV2Td9)g+pn zB;LLW#tOJ?Gwj$%r#{To%l?4)*)OH9UV-im)@gF>sYg}Z=1r*cp9zVC+9I0gy@>qe zCosJH@X&xe4QD{@2ki?Uburhtl3Z2v4s(^8GwqYizs^ABVWsB+-W3sD9~7&}>6Bf-PgPd^N52 zevEkDe7q2lwb4jSl+f{l;#=Qg;~p;o3R?HlbsSj7!XMqlwg-rgom@}& z)tPHbCsjBol5(Y67CrEyOW@!Xgi)E^Vt_CM7lX`7r(anRRY(#jI$%3VU-Ll|akb5&$_570M_J4vYg8mB;L4rIVcq$YdFr3G3xKOxtBU+XFDM zgFGnvqA2&Db)jA>pZ~_<0i!HI5%#ERb$Lu@%4mcL!1Pu^#U7_~CzWj=%Kh|;wDDot zUdQEmk(B@QIX;nyjsy>JJolU zD#4*?LlNQ=U1pM52f9J~BM*+ioMg{u&0q`6bx48RpM}r3*`v5aB_K64-W%GGf%6fSDHDKi%t( zfsy5G{?I3xzhXH#ptCMS0bwb#h~F`Wc=zjJ)0WcG_=wXlJK692arX zuT@0iY|iEtyyE{k0I}09?ZDqmJ@SZz0^ai|0|1!re+8}{9gF(f5D=8(2-!fP^9Hbd0gqOaQ7ktoo?x* zCe_lppV>y|^FJp!W+edL%W~z;Q)VMI8`wX8Ey0X~#%3^$o--Mi!T>^)tG9&#>~19| zCrS_jB`^?*U1Bl5=sClFcP)hTWqZ*}W%8mNzg8s>@PN0}F1wBP1Bz>(HW>5c#~oif z!ueR4UgX0v(vg|cxtF?h%zd|X#!L&sLCAN4p-SmQhB06uSHM&`Ht%|4t(5(hs;oUI zk}~RGZLiiND*G;Wu5|ly+&h7S5a2Vg0k}>HZdBA8qha?1i5?C!km*vOE>{paK$p(A zYL>@Oe7SEMlzmdV7tP5^=Q*fC(e6b|G}y3ojAaCQ)~h?Q{D1A8cX(7)`uIO{r)4tf zfdoRRp%(=dEP#M?P=r;n{7`W%>?-QISl3lqvF+EgD!VpxR}mWsNE4-_ARD| zNJ4rteeV7Jag#}gOp-}5$pkzfA08*SoO{ZhGv_^TLt{|26^ab{@N%bPt*R|StF}2b z1h=&et?Vi{SCc>rQ5V#*n)DFKpq^7g%Y`@%IAm3mVUSeqP=#QLOI@f_uC;JER853V zQu|%164eVBbs&R{h2BDhS<+BCs0-*N+?nS$1ISd>QQ6Uf(P2T8{X#0;QDlVbf=eJxpyjj$I=1rqa zY80l6&52sj0&%$@GZT&;g(FAc@Hm@q6-tsEwlzc%!J{J`$H2V0L8iOqiQ5O5cjn=9#5VZrS#U#QFF<}Vu6d&-PSzS=GdJS|n?Ec3-1}UaM6FCq*t7tW@oQTvCc;4gsAG zxyXWKFyO|C)&(*SBy=9fZcsOik!4l53JF1SJ8;+>7-AFD#b05Ls(?|nND3%Yc}%Q| z2uzZq?(E|Rb1aHMgUe<^Z&NdO<8Z2dY0#+}2+6I=is6wc20e0V0ovFo)eI-+oVwVS zH0tiX$)HC1ayZb~To6(bMi*2KPr2WQMuTE^;MVJrWTz^U>h##0RzehYfvtp?(YRgM zEf(}zeR%>uHC(4hSTvY$yWO}PHndKc>gNz)M$+k_qzJdhgf>J6ZWlJYg^;KSbvNB< zM==?}s%n!o0D1$8q(u{AzzMirE+n@Ty+#73;(7k_yAJWf-lJY)F9EKHZpRTFk2@rk zP+Yk3v(c6n;ns$r3pIn)ih_(L#DrZ|(4*k67DB(P(b!ATZ`*>D*c!Xbj4nin#+Hww zk3g%{;&M9Gb{iy52xGU~jU-7(S`%(rK{lxoz;q55w&G%>urQQc??)fj3Ww2v-YDU) zxF9kN!?|>vD;I;}Myu1Q8ROk9^&OEkxV2g|Mm-pG>Z>N{)FgefQm#~Tq6;&li|d9p zIs#)v818M`uqSmx?{=gAbuCI_H|$0Ya@#hb(@>UQjH&%4MD+-s`ACKfz9?-v6Q`TZ zY9hIdB@cu^(3}KEh^XKqRPFd8pL`auASmWdS8xS)a_2=Kg{i(QDTS}gs)v8AiB3AW z#T=X{Otq1JG6h9(VzCzzX15_LR&YwV-3pQd8m9%Ftr$m99!>>J<_H{mJ#t70dSfI+ zw?@|Lps)Z%u_DPXv@wY&4m-AzLJT@BXeHckH(E5v4mTRT4!29fYAYlpF9Vmui7q+; zt<8zkQGmuAg0{ecCOitcO&l6GXo@Y^+%7bFJ;+WJw;P>Sr)HDZX^|uer_+hc;Xs2O zw@X3M=v5_z%Z8#T=p{W`$%rC5khFRvodK=hh|A?rv;WFY6pf4?HI}|cqd~9NqG+@n zJDJ9)S%0tAe{0@)nf^Vx;c~k$=ndHHHZ(2>kBUOkYbh%!!ezA}%QEN;EBsXZxVK_o{m`lpATW#2FHr4gSMI#x*(4a$a)S>8gDCSUb+i_T}xMT;0@^HU0 zAnCQB(;&$@6xohWcH^*FQ4|Hm<;382qLh~4wwK}3n=nXPLgPB1m?F`b47hYUWQQHx z#c1SE6uS#TLJ3RgiqX_G$>!>VQ-PB%_{|P`>~PEp*=qhjziFq19(ovPg#Je8tgBRj z3Iu}s6I>ypf{RGCQybZ2^Bvzci;2@%#xjwK7j+(pK=7*#ezwCQ2c)~8sC=tBQiAq6 zH52vK#vtW^s0R**4Y%yZ?X)9lbr=jL+_D=K!S$5-c zI#D#>C@Dr8YR2v;Lvbl+wGy)8M3E&-q2btVrRa?&^g08jb_Y7Nm_iKX=VW5k>(Ces zIGt`HqgtWY>#;eU7<3YOg}K;VE@H!@u{-U!Ty7%F;gncPkR=TvdLveg1&v0F$zY(g zv;;|SAk1v0q_h}~MuWki$7XXPOA01q2yWSpR?-t{Fk-c<+mu$T1;y#Y92SAqV!>v! z5E>E5oWDQE`yYH*t>4nK(us_S!0K|KlXSRb7a@8R5us+BZa3#j3elv!WmHw)7dDC@ zf}k|gjf9kRhk%51hm>@8cY~ygba!{Rba!`mcOBp^e*gFVaPQYUhGTF%`|P#%UTelP z=X~bcG^Vz^K_VhwLUqf5xLXe}AqDx3j>z9*qThiR!x}-G3}0iQ`gT$Y+lYw zK;+b{!-Px!foeP^C$Ij73#WL!JCEH@S}2&$ziC}i3EO4?tgJo^ z8QdwJuC$IldsKsnf9qu#Uqj2?84oKKe%Y&oS5M4ZeE4e{DJNC$@{3%2%QxXevUF&d zu9C-!gKI{H9yKks$oMWiBd*PN3AuL^?L+ApnA;g+;$U?`5G6)UFv*Jv->=#iAliyE z#p|H|!!7udBj+=ZcQo?62#T#u|V^h!ZYt^v|$b*M?IT z<873dpYr&6*@8{IhJV7)-Ue*8AKjyyHk z+QF`O%RXb`z=p$o)iIMfP*(Xbj3bVaGlz)X>v|*UOo#cmR>|I7@`AzB-sM_-i?5-5 z{w2nc2t$Ug*GQuzBW(YY;jfWX_K_hw!4zL@1ZOfQ?|o%(9glLX5}N6Bc@67}2piP# zWu?VKTw3~?ix3ZQpx$l=SG9mxmZQI)in_liyN)qVQn-g@s9Us9xwv;=;DT$q_&Yli zAy07IDD)vZEVR!mv``U?pEnW#!N4<~C{!f|P(ahotu34D!#UHQo=761!-BU^eshvV z^?O4G-H}8iJE>mB4u^+xmEc!nH5LmxPJRN!C>qufzK%=y*S;(7`}+F+M!UEfm{zMF zw?0FQDU!ou->i7G;<6SX7#J8#u_!|O2oRqllL&*Khb9ntLF624OMDlOwkrnc5gn&q z5A_=@N=uh+@19h`DwC(6Y7Xj1^vMvV;c^9TJ4sm`Lokg>%k!%K{8{`xFN&# zj*dbC?H2cX+_i7SDDbbZ1mRJ^<7F6t`N8L~PMbdi?Q(F9roP0hW{b%99RFH89(?~d z@G8px2EIG294T8knu?G~;o+QBLVx{Ad&9DJ;pOZ9?=RPahzbZ0k&%t&t4!KT5{Tg? z6WNAx#iL4ZgkLURP38~pBVY|wO#Pdyt84YfM6OJ((MU>LNeVIi<>6e^-bAhncS=f% zw26sHSs^7j1q(wk_~p;Xg<7i~(`r`&u=l{CO%K7#=)o@^j9G9?^^^;vj}~gdV}L2N z{zCGj8-OUP(R ztKFa>vq)z7yp8rrC|E#vQ<48on4la6*k7(2++krd9*?s%xIN=nx30+2seD7_dOflj zA7`h~!O9^*|8D_9*4K5lJg%lppHQG=c&`-y@9&G0X-Zq}KXr9=fv0|v5ENsK@*`3d zczRMGTOGluWK`7DXIv?9abn-TA-wS;nN`AgjROQ)ULFkx2S=+1?1=EP+X4(6(mO{? zAgXCyWGw$JsqXXBBVUKZvh4t!pf?JX&S&hpt(flx1PpX^2H?>Dy&OD=Ah@a`n4Ihc z%|?;TAKhU%U^dfW8TGouOw+Y6zy1Jw5`u63yE%9}ikB5jqe6f~Ce+^@O`kfP2U{lq zffYn2IbF5p_?$RYr$Jx3fr^T1zSIy6#77yO>A%_iIr^U@`yvFHYDbidi;IK1a{lod z8$4HmV^htI*o#O+|L=A%vT|}NOs5J=d#+r08JaKUU#82a>2h3R_v+rXN2OT(tEs8! z|3rcg_rDoNOc@`S=X-`+m^Sv{h6m178rf}xv%hH!@%_*n&c56WRIxCg4igLO;%+DP z!G07A9^6&P>CYEw;sH;%G0c5ZRI`hSh`9032gZJXk{Zl(mF)QV`0h+;>WGt3n=hXd0ngK>%p;>$LsI(jfWM6 zg^{c6`Zvc*lJQL0>gSx^DZFk>UQh0UNCddQj4bA>ep)Qlu#v{rg9o{P1b)#Wf4Z(iFS zqr$)b)Se`M+SsLA?#vhD?>}0uC(7k`C>Df75F8eEnIs`DzE;wByk6czSg71hQ`+R) zrw^^O)*b+6FtdBd<9;s}2o0R~Sf(hm$#|BbRqmK^mS&@4_0z#bZsdvqIXSuWJhBcj zeZbCPbJ~(meU^TG`dryE!5eN zC9+!~_1ZN!9(~i-*RS?kTU$#pv*$`4G0Vuz6c-bN>Rd!0tQRFl`HOB&EkX?c!QrTc zfY((qo>4Dw#&V{?;h;eC268dtHmq&ag&9ISFjYcLN2fGjV^IhdBAu&%M8Jh{djICW z<^HdnhDK45YPn$jUQS}uz1e8mmyj-9lSz&{Qf6ia98TM;5rRIgW>;!TnUr_8%&=Je z;De&;)&AB+GcGv#Cq8~of5fu)MsbjLh#xGt?>B!6LE=0gLSEO?*5}8_1cKSo(O_hv*mhlsa{Vm)n-~QTbRR1oG|~ut~R?%jZS5WShBzi)j!=IsDV8= zfjC|q7920uN5K)fe@+`IDAT^FW-gl8b3U%$@n^11`vO$)=T3?nQnIwl(IVJeCZ5Rv zq0#9C$&r;exIWiqhtNl0H5`TXwJ%p3r(Mp@g;ndL@=;Tt{`%F7_6_85Qb9&eS$X^J z;c{=H>8u+MsfD`r? zFS4KJ@o=3o;@G&f!^*y7kNz?WRD67V)BS#7ik%G4*=x4M_ueYn9#aD=>$(P=!Kje4 zNUuwXX8A7@s(^rirt^Lpp3{FY7?_w!+@)j2b=wJM&T9c!@W4JfUch2~{_*2S(`h@R zhTRY=UuFd+Cg#~c806D_no?O+RqVt4kop}SXx^8_N_fEovT#ZpolanuyAPHh0Wvqnb~j<-q9{0yddZGir2FT>(Cbqst`drIaFZlH=A#k z^%m=FULJr0Kf-hd;FcVj)Ztid&pu2Q4b($JM0)6wx^;vW$hibK5TRUH?6|yUeY#&* z%4E67vFvuj3lNoWKGwEyrz{uT2 z>hoZe%SG9o`CtlfB0vT(`_gyd3)4Y%8%8Fbe^Bbxrd z5HL+DUf{-UY#4#6>vn};f^8DnftCUHWUBERAcQyXaXW!H28V~gcZ`C?LM<;ZA535k z1$N2ta8~Y!;IBcvw%22HGPjd1@K2JGn>mS=y62mHK!kF;ZytbEP%Ty_B_$1xjO;OI zV{a(YJwDrp)b9YP2e5^Cb_xxip35JF1O>c*1jF%UdFWzw&z9=eIb|5A0=Y5oXBTD+t5uu@ovlsNh0kWCTLgh)P zfd>-Io%q3)2)1SVk~t;|kdvAk4t*?Q>_EW8UgwtWlv)k&;kT!2JirywWmv&tVZHJ5 zY4d}-0J3o!=>_ql`(AU4VTk#)&9XM?&!2Yw=R28Y=Z*K5uDo2y!xtq%0RdoR(7U_4 z6eo|_vL7##{}!F%byf>_#+?1dsNcU|@KoB{7c}UN>++G25mnX+8;E7OdU49djJ6jq z(0fh*nWk+sGBTX^vSXW)%E`#cnh*c_^@01Se>iS5<9VJpE4>>G8k5!4)#XVAK+}6* zt9{K{r(CsnXvo64-mo$rps4fH4&;eeuV=$O?zWRC;2|%7#k&BGy3FxNouS7-TM@nk z69WU|w#gFMkjkU9c;+AgHXklW@{vJYd3ky1J*_mz8?Bh^MlN3Gh45O+ z2N);lG?h}V7lj6L>F5ZWFdpc@Qnnjb+B`qrR2mG#s3#ZDSaaa>-0x;;^_-udznH%` zb}Oy2#J)Va%-g4jlf)wzB{J&0E7v4xqvnCpJ^Rki&e0YRH_N)UHizTW_}aJil{nyWU$%FoXS zGVc!%Cd!8o+suEW80@(S$V4Ob?=SaW6~_MW{$7vI0A#92`hsSWS#aN5HJ!a_g`6X{ zKHbv*`)>#w^`gs8GV5{_xJ95z?*tZVEL_gIu=bW3*_n-oJC7VMz!Oy3Y;^0e7tc}A z(QWnqCiC9!IPJpHJ_XNIrrU)8Jd+=}_^v${$Oi(GN=`w6hKc!AU!Ocy(-8+4ZHs?W z_^*8hblDQ)d0d#HC}k*UXhMN=uW-Au3<(LLqNOD#Bl80&uS%T`XrWq+$wCbs_}TXK zcdPfa4|KrH4X3)%*U&COf06hCLWeK!!Nsj9cFS7m|@wy56TPP9UDoJa`BmWXw&Vh28hm4M5Bwbbj8#_RDw`z7onUIkd> zv&a3Vw<#9n>mcuP693I@;VVoK-wDMrzkOZ(+3`^I{`v?pZ|tilrJD$)G)A=bFE(dPyp?> zCKAZ{q;aC!$vAW_lA*8={pTiEBe;)GH-l6w^xy6bCtq;!TP^b-5%InI_a1Dg36`rc z`V0u2TN3^A$@5dBLasDyqncDZa9nY0773KNVQo6Ap$sjj3u}tRD7TSuZl6%?A_Ybv z@IqgF(vW~{i34B(m~vL2na@u*tvqL)=urAbMnF991>XO-f3ZTenN}+;FWy)G333PQ zI-%PkW8_;wAr6;w{bKPfG<0;2dBd3))*4ey1|Wa9BS!lAr(>c-uS{!}|NKD%8~e_- zcyNPw^v2(YHF1bmwJhzc{s1OCJsWsVFmuGaRM2fFe}Qv>m4z|@F0@*!(Q=7vq#8iU zEBsb~2zh#*&tqFB)w@B^5)EWvEX;#jM%E%5@z^vlhwe&A-u@{C~m0gn6& zv=!DZ800nr?*~OgfH!3XzO+pgEVgGYaD$Nr+@z!#(`KUKxLa@0!ES&czUFdqaiP_y zL-A&_m_J>#8<|oUad&T;VLfSiux#E>{PjyfUjC2vObwWgFE>88q~j|_5`Tn&u>)?< z5I|zc2GO(5$#Qd%W}~t{2!i&%cx;m~-UI`XYW&t1yr14z^Q{lDDwx6k{(j(Ezh;h2 zx)v`SQSkEL;L4M?GA|Dv1hV$_Rq(u2DDXU!Mto>s^@!ow z{)@w3(jOo=yAphn;Q#XZ8DtXiC6@gEd$9%znz=3CX1BFoR51y^Bz!9RH@VES7M5I> zuED|HbsW2sZ(Xl^U%?2>*e@+&)LECuHsi0sn`HeKLh8cU*d!%vgh~^Yd5zkMDoV*U z7OM452daSrk^qZ42Yct1z6<|1+lLM=sf!rS8Ppnf$%x6329t>^usYvC?LqH;Qj6&u z8v4l3p9(S#v>y;bYF{lT5i<9O9K_o2@85qUCH0Mq!&a}g3@6tle)v*>cwQs8rbWez zG%acU!PgwwaVP<)5B{F&bG2XDF$yb`Zjcr>1NW-DPT~9O*|j=!rX|_kz)>&AENE{R9G{rz z>+d)H@Nz_)l!V0R`e*?iK;^^z+nn3a`gDGWMD&&~2gy1k{rvM$#<*vz&-#AA(bD-5 z(Sqx|5z*10g0#JBe&1FS{(J~x6lA_zZ-$mz=)x)7!+i}D@Hm#OkB)}JNquQw{CqW& zT~RqmNZGMI(D@dB_gl(|85m9fY=K*4NpP6p{9A%PRJBvNbC&g^5Kcc!&R9YW^HYrm zM>V{y`s`@W`+$fE;w)JE=q_CnPR{tEq9PrYY-uz!wB6}qJg^B^TS-U=E26X~)Z7YO zBL!XT?b)acMI4&1COTAw#;GTxJHxaWUEmqTt-@>aDxEDQb#>ekz6V-FEc$njO7zAr zSRFvky~%uqvch#NA5>B{b8i`b%mg^E(E|_$>rCe9%)It~Z@#L)hnWy$C>WX2SQjey z+6yvb?ma2vm+O*;D2}Xo>|68Yu;B929vJDx3>IVu5^=OydIk7Xe<|*+U~;aMH6~Oi6@3fDFPY#43b7;wI*8ZUZkC+1 z%L?Tw=Q-`R2Tc^;B7Vrj4MyA*Wy|YjI-G;~fT-bWB3oGD4NI$w%A|XkfQS>%d)Ve1 zAn|tjHkVeG73CWuq3hQ`2=8izfFw%8KJXm){GJfs$`vJyfTSdR4SK9%zw9f?C#)oQ zA`GXp#*KCXo5B{-68YffPgF|Il_<*$uNZad(Af*DzWscs67af_E&2tE@mvft*J+gK zsBC4lZP}LFZhZq@ADiFPy{u4yCLEoV?^fW-3uQ7DosyUVnZA{WD)QMIS#_j~*KwLz zSwAR@zG`dFTgKX#=e#ayo9KCi=-(Wo@vellH!reoVtFAF$gqN#!f)wPL{3#Tc*u~9 zkFUjr$o=wTuR7Y{cCG60CZ{!rfuK;;l*|XB*KSBv4LNEDm%6WL%U?Gd?FX6HX7)1S z7T25wXbRxl3)bM3Fv2!cSf4cCoP&T1wh~d!khPQ0tiKzLw{_ z_WDBxGtH!@ImI%qKPFZj)bH9uL`TZ_*<}3;t?;q%iu`QP_MUAa$KoJ&w7|&cY$atfZRY~);I`F**N~IYYq#)331BtD^krB}t0|1nE zmz%jkEYE3EJ?I8T^$!SOZH^QM3Vo(j-QgHCIG&0yTb3I<$?S+P9dL`y>*pF5&&85J zNTB{N#+0+v!y(X!Z}?x{%;}V!X1u+DqQF4yJk1f@fO++x1dg^(yM{rv3jjh5ZQ2fg_Gx^>9+mP&(hd8zY` zO8Qj{M%9S$iGJQ)>|6kFeaFM@u&?NvTI(2PfD_s!2qwer=6GwfFY3!~Ibv+>vTNva zvsd#N_Zq7PxmVcrr(JB~KQ~&&V85W#Z zUF1c`*^ZSf{pwUgi*TVQEdSzeiD2$yJF`zZ%V6-hf7Fb zE@kF#`qi{4x;UA;zY=v>;+br7wn~(y+K0o-y#uX_UrVa*j~^m&B<`%AC&JA6!*@#V zp^G;yxPDm;Y|mM+Pv1d+1UaWYn_WiY9bdSYeDr%JbVu@5=nC>cKuxP5x&M>%b6&q( zmBankI(%m&nS19ak1deuR6+kC!wrC$b+-DWXOE_q6l$$jhK*7^xXLa^p;iW+=!gfK&j$jJ&M(0{DFHakI0tIid6VL-NUaBYGPty2q}p0bzDi z%{Q@6ivK2v3_e>3ztiT4@>j-#+!@@}Kqpzk=6?UNRFdJ1h#8Nuq=I0BOi)XMn z@ec=8oah^Zf+m(VsJpQ^lL=pCtnZk6$)TS}Q$o3^qs zhN^C=VB}Pdj5j^i7^?Rz|JB^_@C{t+>?2KZgvijH69nuD9FOpn8)S%j2O}T#&PqF3 zYsR|m5wSxTi#$5a|7{7r{G&H@T+2Zt#q>@d{w$r~C-RXPjRN=OpE0{*<0omtWsW~q zGEFOaj=j>=bW&e{o@Zu$_P87qeMxnJTLiI%hU;FomO4~WM;pkR-R|Y4n$pp5b0@w` z&elMz+r9x?;vRq&zNxLv7VGI=9QA-1NwZ;R>wK)Z9}DzOP<>eZmLaIUNEzgmSk;4 z83}hHo|)W&)o@>%rsW1ly2S!+DIO|TPfQZN{;D53r77Ko`*v=YPOJgTzq%R=HM?!e zC3cG?gpD3{HNgf9c}PFZT1_Kov#JBt`x8{@K1PS%&ZcYB^I@h6JCDAB<7jKUnH^17;XS=L$9^k|fruMM+th8kz7G7~aZUkQ3!=JcA zQ3pKS-Tt#PAJRagYHEHUaqZFiaA@uz^~ z>94rBUCvsk6RrOWLjxcVxZfoUe225nykHL!g))41`x~U>z6V^D=1*0xE{CbfrJnb5`dptJF?G6VXT1MgP0GEPLxmtEUIo2_3nvk=Mq1Js!EYz#f{>hjJ29J0puU@j{ z#q{M7>5vBh*g*P?f|>#x@9#EeQ)4rUMN;oS^78T$Z%HPw{PcQ$SOF=y0SRv??9Vz- zm4-v-kYunt-|jSQ_yEL95%mTISeTQh3nZbycV}qCP#{;~a@q#xa!_0g^7&;m(mDz? z6QM;0Q%Ko{bF*%OSJOvxeEurOW+xv7psK=IPtTi=`W_sK3D(0sc?3+epAi_|qHpPT;ZBFSSbSrZCvru#77LVTckZvRAk9xa zQQ4oHQ__poU&$WYmS-+HwPE26!1@xdtqI3GuoexJEFIO^(nLMIh90BnL}ms(pJ_Io-Ihy(?&-t%@+;pu8V#%Cn2`N3x06` zsSe||ZNyj-Ge@#vS6LW|NMdmFJJhd%Z&a#{O>GXpEZ8()pE!jZB|>asSt^I5p?(!B zYXrcCf9lYb4=W@_&W<=aME>BQk%*Q%(Fd}RsJ|+-oY!DSb^t7VaFB6!=3r!GG-heL zNiG0+aUpYaS`w0QiOnA@xMq`7ULeoP@m*He=-KF`*$pPzy_nxLeV zQ7+77Sf;DxwnRs3|Lb_PKf@@UJ3sQukiqToJfLi6f%77{pwGlh&y74;ICp{DWjOVO zW-T<#idl8a1M{FnJt%{UDy01q4e0t2s)knYZ%`al-dh%2?Kfk) zc}3=FqBGtiruSHOMax7F3aIiQa6Xh*41Al`s-Heskx?+M@pD?&XYe6-hBUJpWlbxO zap_0jQ|JL0Zq4_}GvDN0BN0x|oDcsI`vta63x(Yu-zu|m?*qFH5uNbZ}7 zlSnv@q;0ocUeFgSfyj(=Kl($k=Y)JakhfEM&d;TtUIelQAIdh>bT(CnR95(iPh2w( zxd^bv+*GJK0-o2cYEmY*wE0b zRrOkP4#&+^z4{@E(@5NHf8_9JCV{t^bZ&y?kB5rm_TWQl=56^{%){05EEoZiP|^m4u!S96UM8kLAlLCb zDQVEGv{_k?;Qs2M#|H+E!|@Q?Y0*YBd`8o8&Hyl}yg|N~LaN|c6%=nl!uHMg8go!^ zvpZho1dJb0;)6V_Jm+ZA9sI+ytn<<9i8up@8wLfC(*QGsiiU;^J?6qz-lWB>Oa*D_3$?q^(^@_#-quUYSNNf>NXIywK7d$Ws`AF zGB^f(p9+u|++y^1P_S4VDd7#J%e{^-*c5)7-Iu-j_$MgyU)wfg;vB0T)>pVto*53r zq^zdY_Ia9V-GOV(<@{2a@`{UZNRUUUotoqhi(-51XbYzL@3wb$F{yKpy~l5ELMvzc zau^e59l<8)MSL5W2+B4znVo3g#-R(_IKl&}$(d*q3j5Iy%Yut@N#DS7{;a4ciWc!2+acf_Kg zW-15*$w5SQ;S0%-m6fgM-ZQH;0ab>Sk*DKv*y84ZmXGzGnu5F$6Rm`FdTU(IA7pnF zWY={&GevJV%qZ{n1gJ|sRV>H5Q=XLcrq5_Ts5Msh?mSX5S&$pe-))KEsO=&vi4Zx+jakQ6lAVgzPRMW208t8+P1?6I2X_3`XKmN|p1C^X0rjLE(~&kk32vW9 zeI^4p&o&pfP%?H6skVKqN&8E0GP3s%`HH1({Yb}K|EfKDHE;P!eEV;@fBzQg4vn>JT`_Cqd#Z#X)}mU3U3@IWm`^CUij=!HO8&kH{=o$~3QDli^L4fTP@bz~35rU~Qqm&S zCzB7j`@{tQJg+f+dKu)5*d{ZcmsLlUVwl2@{82#M%oY-SY;U>h^JuPzI zJRA9gCUERI{0V#DD0M)7V3vE~CUT=sMtZ%b;q4Ljx73}7&-=M@lHXD~XP5N$Zglyx zP_Cw=JSpQBi?3GHqL-MyQ&^I?fft(wIlR|fZSo1bH^G>Ba;AgXc~4$s7MGin*lpgf zCjZFGbAK-k5N+41S(T%WacPoVE839I~u<89n zpMKTa@6MsPuZu)P-IE7s_Qju8(19lOIZ3x`raZLqoPOeJt@gG|Ey^15lOc)kpkAm< zE~?#rQ(^_vS-#LCUts~$5I0@rw*Ix@$qM!;)eT0IX6jqJCs*_Y!{D_`>AIsGB;qHA zm68;1cyhz|k7FKJ`p2Is5}sKdi!RvQ4p)Ee4r>_eB$`(kyn3qBUyt9_gQ9;5>`lJH zGITAuxI2jHQUaW8ZJ9u@pbMbHJ3O{9wMs)5(jnl^%0bnUfduAL^$WWKLUEWx-mvovkeou3w02iE6p8S&3XL9^wbuRX{f;12v=JWNv1+Yx8ds5^n*a z7x3}y0i9@?@9unnVGraEK`c6$$R1g{;+Y7P)Wv-x!SqFyDvhL9E1p_BikKAjrEq=T zS}dGUxKHZtOmkf=tTV? zf9#LoOC-9nr<`m1xM?40Cr80?*GRp=f7n$Nbge^A@4Y8NWhPvWAJO2FZb#k@TPQ3n zn2OPe6cPB)SDhcAu+v7+J30Nhm>o)bxWkW8_z=Mxu_kfbMH?k zRj<3tC99{{L)drM!R^2j=C@NbWS<4-X!)*db}phVDA_W|pBJ_nK1f_-A3Q!i^izp+ z1irtRuZM18G5|DCW$u;rd9z|Q?guaCg-R1EM$rk2UWBIWD>c6Fi9LrV7I7{f_-pCa ziBXlSUd=W*&;a~) z#gsV@K7o+^S+&uT4g}=sfUUrDHK_o3Jn_2GsC2)xmC>yckD_oHYD_cbdV@@Oc=tVb zf)Q}zTAuFBN)Nak_Jv1Mcwed3+h(g=pT{#BF`3VPhFW&NkTM)8!9bDt_RSf%D^B;@ z&t}s_B($_)pvNEuhuLs)mJ;~8_tezXVfdUC!%)~h_@UkFtrVnCjVknN+fyAu@!HF; zM8wxiw_xn~&?BI&DvZJ_%i7qx5-)RR^SqDE z`#E8a|J@D9Mv%IS{JMo>wGBV~MLqj{>5g_Ug}h;LDLVm5?n`VV4Xbch(7}vRNQU*H zh0?F7T^5b{)o%>1GN6;ydR8Oh-2Mb+x&K`^2vJN>58?ejMdH-doGI#^7t+JnJh@ew zyt6T)It6D$&=s)X;cPYNSR!4wY)8A|7;|&YJ1j-RRdIS+IIHnq+rB{`3lX`szhLqX zYWE{q?IpylvT8^hKO&I(VJ0Xn?A>&UCSo4a1R(DgI!cL)ZyoEZs>ZDtz!f(Sx8uqL z#8;U=%UG4Pe(JY7H1~<>;TOx@C~iI5$5K-@?VE>Oqd83EI%Gw74T@d54EfV!)K$bb z{J0p3fz~)qkb)Ju#BE7lD3<%3b{s#O&`4QT!pOM1v_XRv86*Sy*;S4XCHi*T$nf>wqiI% zBmOiRn6P)*-J=L0-ts*A9otdOzcG&uy(W=8W$FT$hrHWDY>DCQE0@ypY9u-w$YyeHdJgt^2ybtcBWKY#>7QfO55`tKv=@L6KnQd)HE`dhctIa0Uw|h z+d5Tvfk$zEy4&%nxdD_RqlfDwZ&SYP;x1%BA7wJ=$7m(pg`F%d{(Z|JJUNliRiEYG zda^RIa&xki@9|LQ)`Rp%xp;l=@!{2#+38x^7gp2PB1&(sTwCm}mfHmp1`e1j7SnO_ zrWi5`tO8ndBrzAq(_z-OqSU02rZJJG2!w>phWJr;J+BMJ_>&4`=oFPgwucRMOM{CY zTRJSF(OdbErlB6UuZ4)V-6&ZtowHAkhVq^xi%I6a=`{$@jcgw8i*BtM4f6LpQTe%2 z%IH}crh!zW*txuey2j`368)r7GTi>D4|Bs^RPS@QGQH{{rvqN`J+tyv8`1NYwGc+B zR;6!j5M8c>KL5y>ywNM7W3L1^PtfzQ=EF50&LD31^wi4i^}OQZwW82ev0-Vc8QmH5 zkV@Yw*sCk7l~@DlzdNAt#~R}W^3{$< z^RRitbIqy4yyl2(a~&VcLaH)NU+4; z>WrqTV_g^~N0_PC8hSXgiAsFyEmIYvy@|?$KPs3qZfdVWiVW?b5}!4QCmK##>yr2+ zCG$x#zTJUK242mJ@xXp@J{{&lK>?6&l%hr~hK3Bhe(%pZdC8;6>m4>H{&W8l*)rW_ zvRvx&7hlCmfCjt=6<8mFxtmSCUu%;)xw|)ltz1X*W|fcZor(zz^|TJ63%{0_rr*&F z>*nr5iWOr@>khCM=)GjJ^-Ky24?M9*AB6w3Dm3Tr%A)@EP*keQx7fF=^)`DA1-n@zJrSA0cned8?SC_u< z?1|YR-`(-{W9p82BASc&D4a$#3bsN{NDXWjzPPFFm-WgKz76X;_gT{-ktPreHoG1ca67+;_@MTCQjq@l6J)6US#*`w(9EBM+0}ok9_QrmNk7fWVxX zlW6)+-4|*#u82bhaMz%5MBCFLdF1Wha!`eb=_%~NnNSM;2dQL}kL2W8T6Xe)GZ*_) zP6<$r;yLXofMY)6;eEWkb|9(f*h_`#Lj!#PhZE{yl?GB|h@WK}HzQz4<%mw}?n;$V!ph~F&+XG?k* zTn{EQ^JiYgF4EK42IC~^{1ny=#YdOHvf&Y($5dN7 zf33{5ly1YM5;8(}zYua?9#g_b(7u&tpTUe)#p%~>x%VSc_--*iph6~TjC{5^cx4B2`Xs6mT09@KNKalL@xT1S5W zE~T&~i?wJ1ug$2ptTOf#n%HOQ`wyA1@BHyHOo+z(2G&arj2rO^K2{(KFF^aW=@^eE zCrc%=xtLpIW@i3Zb$n-{I^~~lijgaz`}y_f>S8{G!#PjQ0?=>qv~OI}_$g#$di!j& zi6w-N=|kfn(KAD|2a(dTd@4-=#+#P;zauJ%kU{FvP6`4j17-FLm7NM>JHE!q*fryQ zsK>NxJMZ9eK}WjBtOTZf=cK%mj$gmTZZSKk?hFtkE~EY)FN)l*riT}(Oa)8a*Rh3D zA$O%cJsAr6Qr%46?`LFXb#Aa6S#wZP zQLTa+m^oncf|{;MXz%OgP;)Qa8^z{rh?o=T9BbdQO`q6{V=+N1Z7reTl#-OZyyXNo zakx+l^ow1>qXH&7ah3b~hojmR*XX5!evwOy+NExb+PkNeq{y0AW+MsR8QCvsM=TWv z5?!%EWp{pE;ml9$=@#D&W8KnA2ZjwrV(B>y;)}PQkjOm595&{wegIR*RIq9z(Gvlr zEG#i2(&a|$H}Balx$GG~#nUdQRxHyF=< zOKc~yB@XF`h3BlCR+Ysgl^(N9mWUNnhD)msz({Pa&`EiQCXKOI?xfK=8qZem)2Vv1J{;{hw`nzqBA>d*v?>cZdvxAhxyx_N ze}ESh5=xW|o(1%ho^5t=a({rsmk;1}-O&n+jYa^Wyi4~C@(VV^JI2U#rxr!dM1NW_D$0~*SDTB3FysU4H!{rwfNgf z#_@`&q1VN)#ovl#bl5ApH#-qATp)bKLy^21M?m)`6CdeJi>gc!lXI7y|krz*2``UB8J*X$n*`uXlIne)O6 zxDTIb>k1Q4l^k5(fc9rSU}ats2P8s)D5$7kY;4L!5kU{xAYebgv>$`+$jgJ7NYE7G zjJBo}$5ap6Jr{Xbn^7x4**QY#?FU8l`ucjv<%Eob)(&z@d&?Wd=YU}8Prg;%ojG+aAkqe>E3!K zD+20Jc)fy7Kj^48{-c2k8aviOivj3A$oyX$8{k%5_Zot#I_TJN-mf$oA(YAbBOs@8 zec*~ZO@MI2vO8UP@6UW+0Y7~#{}>jLQsd$u9Q=t7h5dcxcKn{tcVTvn*zZ63EBmqx zxPP&n9umCevDL%N=xFv5`7Sjlq~%@l!wvp|fi#8Rex@S@H)kkgh~N1rtP$~X!KYWd zIu41U$!`*#E>^KC_1~6}ZcV}|Te0aIDLJyyKqXJ2!gtzBAPaQGI9>=o{NA&)%!`>$Vrqo4`K40SgkDCC_#--L!;-YT*9b8|VY z_jx>&4KSr9@$}hw+@F4NsmcLGV=d|B_cqMYBPf5N8-aH0FFWlKVX`#Hs zE(b&0@vQM`Cko~J-BMmb-oavxys8ZE#3X&@Q@N+p@1D7br-Su4X0lT|?QmgOX=@^5 z|I&W<)I!t#zqf5+w+cBzkRiK<9PU7B$+V}Vn`GI8^(t~do8^4v`0xKkqG<+h>^ z5O)N+_j*D7kXP3V)DBu!oRGvFJ0<=oAE`qOMnD!@c0DKt>#iiaPtGsdQ8=96;*Jo* zpnc4!mjJv7=tnV}%#(xCiWpzh&Ojrqpff%o^7>LNuS*3N-A4~0}9d|YvD;WG!@2fO!OTTxMz;UIMJbFREvHwA-g z>-sk^rZKy~SxAuzV-OYoJx^@c|Kw<0gc~avSaecht){sv*|PG{EGBx9Xv*63hxiYF zN~Hve&Bu)6@x69?e+T7}YJ!DRC&|c^SFar*dT%C2>gTbP$e61U5&yXnLXkJm*9eS) zC-ml00eCI}G`^mIUIsu20PUh2fJc+PaswJot_VqVLHFWI7jw72xDuz!IXP(7$(wp7 z@F(lv{6sg>)dCn6PFk5O-qAv({j8RS9(ZbO+;wo8rn+F8xHv$Hg^`@#K1{spG+-Q$*$WLGyXz()9t8Hf0*mVFSqYB&-Pu zU|);rsNJK^pXhvclrM4)@&KcSDhw2oaROkAfu9U3hnlUP%{vXi)c}687^u(y)IrWx z!z8$M2R1@zbUb=#`umKH&FyGj`FbbspFY#wyYG0k5afyUiMC%PLt1TS8yk!<+&@bD z``35WAtayjaQ7XC+x%1ql$6664GPjs-yD?oAHhhe(=qS&itJ(u1?D~C>)7vN3tp8= zX#a_5KBuWr1TEaw4L>NMhUPFkI=p}kL1cUG>(TPro-bE)-qK@7YQ9|@iFh=j) zob7qfd)9f+yUtqY)A?ZeaN9F$8QXpB>-ztGw+j$~xu!V1-FBNb8m7=T8pWv>_M)D? zx4!H=qtY0PdFcH0ptHo3vxjjdkABy6<+Vp;Lis+d3978l?aze9FpZx1<@k*}^*~^E z_BI--&X_)IJWbv$7ChnTB2>%#T2iYJ%423NB8|`$Kb4DV@F1gY1JDl;2v`VXHbFEm zXQo~jM4k?Rd_Dz$SI^pwEe{Ylf42gxeIVGg7RHkn6-7FSR)h!N*WB3Nc#<}k={ne5 z)=|7Nbl-8@Q;!l_SNRl{p_>~&W;?hWWK@`K+9}9Z_5@B|0~d%=F)?dmP(DI^aXZ;7 zZcc`EL=u7=37U_)FG#X+uAYUR-`VG`(*H zcDX~6K5E5BJL7qzuMF$Mp09{Kjn~eU4-O4oT+JJPy9h?;Z+<0#x#Dx)s}?HY_~DSl zt=X;D3W%>-AQ#G!A#32i{c@TUr_?*X$MCJgDOmO72xJ z7aTQ*^L>7q{2|;t-l9-wBida=3PS^qLRX=$aoc56?Of4!I%kK{H=qmhaRE{pG`*Jm z72|7K!yY6Ib_dGA+}~h>=6ZBsob6}(Nf3qR)88Ul-$YIYKO6SZ_A$Z2W!H>Ktax=O ziFyWm#<2TdN}gVYs{J*8mK2`VUvhqUePHv&TzmCW&J`TavuY@JU6-6JH<=vy3%2xr zzh|%O-KBzpzG=WmlGp5l8j{P^iKbp_LPfS(;Q5YIgFbJR_jh-@wx7zrl$iV#g{nQ> z*^gPYeTGVY$|h!{7BpG&&Pp`QNfTy3%fISaLd1O@zsrTtnI`CFJ%TrG8Tyoq2 z_w{msL;ytu&`VqgoN+^g@Kpq?Ukn>IUAp;b4KwDy9haQ-i&-&%cLpJxW@K{YK$z~~ z9Wg1}0o(b&URT9yJfM)1_I0P_hh99Qgpb_gLV2SIrR!u~X|i-E$?1}qw`>s=y*8Iw zu!FQO+Z=@J!@kqFc#Ubdw;rt2WNF^ry3Bn&H>uedd`U(*bO(F7%-P0u%VOWmx@Kjc zUP!sWe{PSMIM{ej8H=AFmSEK3wkp{7xZvjz>0fOnUUAuxRx*Er9Vif5;R|14n;gj; zhPLeAq9#PQnLBiU%b0fdC^JnKS0?e}e5ZJ^8j;?8yuv%CL@z--O`s{!>qS1VNhCGP zPqvasw9Xb8>(M1WA$Eih4s#zjXG-Ip&Q(&E_^3maQHndtYpQxmeT`V!h;`0|EjMZ6 zS&Yl;Z}!yM_WikkR$fB<4{5}wrYnSxuq{&qY@?B&{l5#OJ_4(}mxt9&Jns9JMEE#Y z-hf-TZe0mN=;6qlK*h22$)FE3SbC~P3$L#LW5@AP6IS2Et>@E|m4dvq>)Xu7#nwO6 zT7dAQ3k=*9ZEcIY>{~xkW%&Zo=IzD7s0n}a$%+_O-q;ul#yJmag>~|j^0GnuEsRbe z0+1oHmW1 zUhl*_G*icTC~K_lMf2(0Lt|-2nen}NhDa9z3lRj&01XF;f@4aJFRZ}E(%@18+(65k zzav0S-g;RH&|3|M6E;`+n)N5j1Bodq>nA?&`|>eYStEJH;_(JTl+ZG~r6`|E}aJxy#5lc5}1>oDvk ze~`C#vQ+RJzwhj-T9`w}#F8Y7EDm)1-Buid_MP-4!H-&Iox)yW8f5UFtRegKH_EeQ ztufQT+J9^W__$e~zpL`bQMAVi6KFYFisy*nP5gM?K=VF|3pB`vX1B_X^QM$QMG5)y z_@r1>Qo21Vx_wqGd7WeyBEz~CzVaPzZy}mv^90^>!1274PR~S;wj@5nX~kiokxn9- zW2P=m$^^Bimf(Jv4JO(2^={J5XVs1VhpWmf-kz=BpIcEe%3GoM(cHt zwZhdJ=|pC7A}pM^Ee9B{__fvmLOKI2;`PbuNHF%={?3*TN{0kdPxo*)XMpx~<;cf+ z1csJerL_R#``6C|NP5yV$TTzdlz;j>@<~h@4_sONHfgsAaPf9q{=ESyk{$46RHXxQ z<MmoY z3UZ7&5!(jXG83~#oD$hKq*&Iy0L!Yh+qcScFI`o_iD(YA82wL>IWdt{r#et**0QGN0^K6ch@Ww+STY)zW8- zqkl9%pb%6Tm;Jn-53mYCN=0cY2-(?{eeX$CVzWsN^( zFAoK-tQP4yfoQZPt5QmL{Z?bowCk+?n$tsiyk!4AUeui|5myT#{)U-Yy3&YN`d29B z107-kJ%)}$@1x~k$u<$KFgH2AzeLe(h|$h>KSOMl0(>2>Ne+t7DzRRQiuiomD&Z1W z_jE}p*vx=9>thd#BO17~8KRf=Mr)0!^U4_#!tPXjZvVP=A-ey#|0e@gR*CD$8#&o3 zgXCZ_88ue+N7Gfku}vAnCEmrFf~t#l;<{;yCF|7&D8-=4%(%S|ricBJIc-j5Lpw{Z zMS{)>Mr2oeV#daWY_On+ji}gkmw}VT{hXri@<^9x1NAbT#pxO1a{n1hbF(>NO!eS7 zBz^qzT47VuMr`35YRp;PSV8sBUk7E<5p}o28|%~zEk~nWlp7Vd;)J-{i#$!F8M>BD zLFgjEdVBl}kZs_34&RhLSOR~`rXW34tXDgjZC3IEuoFPQ#HXp}fM?M^a_`p*RSHpT z!z;!|92`a)6IH{dJ$-$LA4Hu2!gsh{AhJ94BkmCm(2^KfgX) z;X>*V&u3m<;2%4o+Bho2h9#AJLi4#FU(^TQ(c$6)wh^zdp*Jh2P)gP+Cy@Pjw0A!9 zxu{v2Y11^k%J*`i{Ntk$#04#%S?YEX+Khqbs8o!$(*E|hq)okz(7JGZ$8IMul6}Kr zIYokw(yze6pi&(dzdDzwV^x}(M%_X?9$ZWNE=~~1SgGv2<@n=;>eMFfq`v0G1tPtu z<|ai)*=gNlGp)$`opIi`Ioka*5m2VoBAfH{2;YKU(;sSafaY_;UNk;c0tZTVbH#Zh&s!BeP-JpLx^DS^hCQC#MY=iFJ^csEt3=XV|?9YkMa z@{-=WNeV%^9~2H(&q+dgc)p(Cg3FBvwj1^1)cgoGfn>-vj3m<0FgA-YDdBr&3nim? zIIU~H$PsS+BQAF!A4#KnBo48>noH%ixB?zji&G`7OG1T&Rq;Ke*R>}rj+|Q0eD2l* z4fSwz?L+cO8afbj0w>{Y;$dijoMk1jpkl&pTOz?}CB94?l<-xk?4s}pqGpfecR z3UAlV>>}^I9J5hWfwr|Qzr#z{(mkp7Miv*~cmb5D1BFXWQ!qR<-aGEq;>9R6l20&w zWC{%$Fn>$8xln4p~ zesEp)DOJp@?OSNwEM*K?-9^=R@T11siPkgBvc*eA(!-*-ZQz}k`_ub@KW8u}1ns2^ z1OmXvwL!It;~)xF%NfFp{=1V@~!meV+z?YyYjJ0(}?m6#IC z-lQS{357dLGjAn~l$SfOy&wcxmrefQ=Yxb!KAj=Q&e?dvJSue(EUhglPgN5nb;LEb zIjLe|W9cX_t7_%seYB?>49%FD}jKALAi7hS-BBAJy$nvq?UNV|ve z>_%oHM17A`Oz9=_D6Sjh^_G7s9C*oy!txXIv4(by;AIR!_S*w=Q9J;yqpq=kFuUril#%i&N4mH)-mQKX6f9ZDSgT^bm*K+2Qw;_S!* z=)?e!cFPmuRP>bXCEI^fq=d#0nx6e_lKoqnQc3auYGk<-W6G*X8q4^y0)aqSkTP0G zQzN7q+{Doge1pKaVX((Mu*WbSH5f0PhZoK(_=uYu&dtp%!GQBG3lR3ER_1R1z5vGm yj|KLZ!`)y3`+vOy(h6bbgfv3D{U2*!Ja8EAKh_+zBf`KMh`fxFbg87F?|%S`3nq#H literal 0 HcmV?d00001 diff --git a/docs/docs/assets/interconnects/seeed_xiao/pinout.png b/docs/docs/assets/interconnects/seeed_xiao/pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..74a1005335a7a01a36fd611a318ad69afacab9d5 GIT binary patch literal 495415 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 z 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

    j?PE6oU6*SKejimJVuO^b#Wm}W?T@Jz}FXo)3 z+^>Icci&ZZH?&;`Y29tL;n4+d^ycV0tJ&zhbgPa-g^R6@M_n}h$T zimi)Vvq-q6OMj2&*8%7PCW(AZ%IQywDP4i9J(Lv7OFTi}8eBV)t;+p$2X{sC9g-jF zxBFBaCotOkm4Z^f6~hkKrT>YMV}MEohQXHO7i#h$l~V=c7peuf;s0ezB`;JmCWoV5 zAMB4995gr2L@j-u4&W)9+??ZZwyj=cNfiSi)T5moCt@MC+GMh0a!HohM4&M6ub+4v z;Ed+x=DaltcxT2z=$qJK?_DeYCu^;#GFCl%>$9lYX&SPSMmyeTMW7|u) z-`L0!j}hDG23%!wHw=8KHlqIq!7l1z*_A^;KK%1}|74MU2xzAJ^27UEkJ zGq~wcJS~J;b@SZ1N`mabg}|V14m$LpkyVO&uLWkt57quQVo>>H%U)!JJX+~T{J2;L z2S^rMrF|Eyk0JZx58q$HA=+p7>E9GVJ(M??>;1y+6AoiZ`LJ;_&&P< z*}gLEm$}S)h$_~!AqiH`%P&W!>-(-%xoq8@CbdRKrKR$}gta4*xE=7LvCPG25cVn& z(tRP)44Dlb+_RsJx4e;|Ms{XZbOssNOcwh=Exxs-{f$osA(rNF3HfxeOe=e^djjZJ zgTN45A;cnof41LsUuWJ`^-IMU#QJa#zR=WLGC5VH5jUVR;O*sIS(?wiC&^2;>(kZN zCYm#$SUgj`B1}Sp2y*ciPzY9~*072|AZp3!cO&jY-2&b@63=%dr%by7FY2DkCHzx-8Frk3!@g^Y z1$t=6urXAeV^SQLmwhWA6^yU5pTJlmW>OcJ`_)rwD7815_uC|M$b5F5681;JjpAu@ z5!?4a11{!0w(v^o=btz0;cDH~N;mvP{g66MgtBhaW`K|$reQw?oH4^DJ97j7mKLrQ zR-s(s_owyJWqy*0#CdVds2|m^MnO|iRKcg`X_k0H1zWM`cgDti%@5Hp&R*m;wFV^V zuU{0G*w*67iLl_ z_kR-%BMeH$ZvKJ~QX+iJ?)u1@Dw{nislF%LG*0TY$K@7heVsmOR~&}oX=orwy_EGO zB_s>#(H_KyuZ?w5E=nab+Iq$xs*7$}+j=rI^R2x(`%Y853Eo(vu^ zg_=L!9V!~N*My$6Nuefz%LY5V?@dU}ZXBSuu)x2)8#-D(AW#rUSzhKH-eWsOqm|{w z0wJ^8U;3uVbwst$mH(&cvPQzUwCY2QKhBXrP%(T0#3uQCjjrU2N;zp&+;c3|+yML! z{8=o}nr|y9YEB)PP{LvzwF2IUleXtah#smL{s9o-jws;yqv@pP1grE{0&h@ngKV=Auf z;-BLucgv;DeaZ7wqC&CN&B5~d3e`vE1owtrncUzsy>yf9fREPvR2b3NK`d_KJTiCP z*)LC0CXR?2#Bv_KS)CR%;@t8%)NGu){j*WK<+#7+QytJW5L^#Ta=te{U0Y5> zaUi|T2H}bK+vqpjd1;^#*Y6|vsYkS#TWq*2AdCdEX8E8VnUs0NA{SW|lEtS@22)RZ zjDR&wQBRf$1U|JcPc<@cjmIVznZz*AgWlqUn*4u(l4n&pM1!g(ts2O8N~m$d7%Q$} zy31J2W3OCdH4ZT)mG?0yBB!FFes5j}KD-FB&~_yQuY8i^mb1Y~!p8<-^k5O-DXKriNh7DC42JaDCd9>@ zy>LXofVm$Y6ER`&5@I=knV8N&X?X7@I4qgJ~hy(&m_2(q2{= z#?Mtlg4n;~f^osp8o?bP0$IwpK}p=LoY2S8g_I(ADp)b*@(MLIj`^Wj@^h!VPRFZm zov*v*GWcFbX@8TGkZf)fTAO;b&!-qR0=ZD5PJcfU7`Vuxn)mciMAos`V|cxxfX}Cl zl2ev5dTcg%8HJwj0$+oE2PsX8P8G%D$TCq_{=t1>Koi+xqPXvkxhK1Cz)fo!$CuBXxfutVQ2;6TfSh zrv5^+3rov?07)lsHc+Npk*wqGwS23_e{3s2Zh6)`0LfiYF#Oo2_#@!H1u@a)ZbKFC z;6u%5t3BfrPKYgY_{)br3n$AkVnfw4Y z`^Bm_6{VAVbb{QwgNwLNrqJWb)4WD%O+)Rl7|R>>mv0a)REE;nQ7rr~$%977lre(H z!Pa`%W4baRCZ+79xkPIMm)HLTA3@;0gQe9%cN1VM%Lc#z2oc*isI*+dPYB25o0;Q_`MKxKm_5|nKVr;DJmAg)}#ucCF(^)M2#^JaX_2?hivWOa)1&o_ z0RWIT)71AF5T9a!qd=ps8_=M^di3PFn-KP)!+8(w{I7TkqDR4)&!6s z7z!ezfP@Hupa?WT@MKG12I8L?dEaSj0|F{Qy%fq9RwBrXHKq&<6GMOi6k?ZP;xgky zNLN7=pz2bvbh(aqhPYgx@Obyw?ovUL`~d0T>3{%{YfpI&-U9+^3c*>UAO=7MzHK$p_xJeM;h_i5=XpT_F~-GWkxHkC$Sm3%2gbJ0d8XV8e_67%d#vvf|X_2QD8e={8SF_P(baJu!PxknLvu3 zQ+~2a((QgM2}R?%t*o~?r(MT@TJCRhLg-X?R+*#s0JoN}bjQ}c@}tnQuBFh)o_5U1zyBZp_J6xr zED-T%IyMYLnUhqr?4!qreQLTnM13D0)fcbg@`eu8ANb5}GO@tXPDZ zGfl=|vQ&%AN~ei}m?1`wM8ZyMvgsr2LBJRSO~E&%wEzJWGcrpw#6%QBV=`4u4i4__ zSOOLh0IgK;PMhp!n>-VjgDCo-j8>$aM2#v<=?o$uDhdd&Mnr1+=>lEbz5O$FL|_Je>(Till#}u0GOkSyGuzur)@eZhDsE z5I+V6VA0wd9iu41w?`jogFm+CaDUt%@38UCN&vb@s;#>Nbq!FZFnFg;(YW9tuCBG#N-={lgCc`M%pww% zQh>w|>t>PXIe?JTE7cCweh*|wdiKY2kzR>M(|Mug2}^;dT7ma4fPv+9mfKLvLvLgL z%fhG;B&4J;G5{}ACXFlr0Z@{H5Vz+IP#8gDyPgKYbf-}| z5oxO^D9G*VgNzVSI90tEP1{dtp+&$5i~xd4fJg(fr-+KgJ7W|eNYkJ)0udkp1OP@z z5SzE<0Nf^?EJ|zU5QUAhT8B@3?8%F#^8LHl0T#v*0%>b{y%I1qi#bZ9DE)rlxv*F) z=JPosHo;dp* z3@Br@3Lz{O3-3b|0RsY2*hgXSpfI^oDg#6007Rp4(F5p zHO2bf#)reOFG`NOgU(ESFxh`dV`I*ra%q)_4&r2YdgjUbk|qYQvzY!Of$ zaA;Lm^q!0Yk(qsrM5GK7QH;#Yz?@0}Dc4FHx7Lmq^$Rb&5Cl%1JkbPyaCCHL`_#tT znuv@>qo!##Ha236Yinzol+{`y1B4fr8N{0~2yssrF=3W8w z`4M3Y)s1&n0syP%XA!|9p%?`s zM`2M5hG_MK^&x;Q)C^L1doS$$Ufi{GFSai!h84gJuD*9U@gNX(0dY&EVt}@e+d;Si zH5dU%E3-mG)oyy(MnnYFwKcnVtlK>U5m;CzDoOzXfTF}LdrLR~0Z!fL@!Zerd6T9NbpENLWl^;fC6w0 z2$3}qM1utv6lLJz&k+CP61F6*4CV2CBBX##%0JV^qh;qg35G(8y-}!J9MLlDMj${& zjDVopb52Xl4=4R}L;_@BYTF1xgbIWphL)xaKq~S72n4_jU@(Oh1tJ(+&>*NYU^}~;xfAYN-qZ?a;-p55%h3Ggs;2r^B4AF=A zJf1zV?PEytk&X8NSU0||bzb)7Rqb4GeuLq`>8!bP=ivK4eEIs7oBh$o+Hka}>lmYi z$RHXC6~riYT~9%bqS!W>Bm_qqwP}mK)7ivm8zN|J^Rm~tFsp0O_Fa!WbpAj58@{UQ zYU=B1eSLj3_4EjZgC<4m#cE{IGoEW&Oj*#W$2z1s2 z**`cM4f?@VuBmLE0ci=5qYsOPg)o~>_V@Sab>$+X(uf#?V-zoe6j^ICs~Hdlecgai zzw8;Cj}P}CHoZY!8hPN6b48JjMx!FjQcmc-FN#cSEgXBjLPQpeg|)Uk1-k(olO90#F97 z$rCy;20#H+3K?Q(YwZL&aY7g%6+u8i0EjWY9uwdU6fP_NOvl(7Sy@Wjwm7xb7~s^G zZJXlv=rBv_83VS<9xl5F$B-dhi3*mre?-s<0RR?r01d*bm-kHG)GjXzAZ+1D?F#WD zz@hu&{&+`@cUS_j3VKEfnD8j90PEVDUT+-XwY%YS&pq?j-MdYMh>F27V#2-P62+dv zv9@CW8v&?rp6E0B!i zZ7RSO3hObcKqBXP?tCpGy}X!Brv1!(^8N4qrT3mctBi2~=yQY26^kJ>3AtO8s)4;* zlUHAU{TsW7S3~dw8YE4e0WdNGhyox=^oHa91|9FcEy1)%bV@<3APMmDI}0GEn`9}O zzq~?-Yykjp1v$FHl(_f09{(vnp}drMmYtR&BKCT{Ub(fk{_vv@et5$^sFZ+sNyr!k z@E)vT?+KIz1(OJS)5*)PWukso8i2G7VDQV#2APxq3JE405EDowW@G^ZQ6Lro0pkkl zMkp1TgisU!3wZ!Q(E=(W2>`ZzgTP1;2?PlQ1yn29p#Z48bwN@CTnL#+5Xy}$xOfHt zu~ZzqRvCam<3K5e8dF_NC^gLz(sl*U$_(kcg3U7@7&VEaMN@0Vy-^YB2|>tpHYkcg zW3{2Sr*Cjyq?bx5uyOF2m>+-AWE;-<0$E_@Ge$WBO*~kk=u=Y z2(b)JPZ3#bNvYl-n~oO@>cY8GzxvtF+`0bdm%nh(%qI%OBa`5;SDxA4vRWBUnXxGZ zBqF7eIYv%t6a!*{^#j1on>Vv8OX)#^%>X63Mhk*Z#NQP04~N5)6=F*#wgOr z%+Y&5O#)i$gZ(|D?e^yI#9(V{z1&zI7$c)zR+O1lHp{XsGXS8qB~%ijg>{YA27>{x zG)>d*m$}t0`o`C!k&I3=uw!D7D!6I2P(}l!_JEGAQMUMLr%e$6@EnxU%t16U3i$xD z05^7bzxmzkFTOn4+3(rRY6}F67=qVno&<^rfe=tk1Zq(^Ntg>95ddf=0FG_DoKnxU zof`p|m;_7&5^#zlrnRdr*4YRGP#F*a!=QLc)Jv;TrzDX&^9Urz?}>?kD93LW09F_g zlz^!?&xVeGk zxgT8q>Nii7qlJ%@mV%$|e;vJ=0fGV)P>gDs^(FEdL4>yV!R^-+lL}4*0U@r?PzVJ` z6aWKyKt|Sr6hR5Lc>-XF2oZJKGYO~`XQt9=7ZF-nN+M!JxYjteHGJgPJ_B0=r4bOh z@nkK;0HC1d%23B+Q;9;;R-%Z25e<+;&nnUNJZr71$zkm$&E#&F?;D96#MKJ`>Gz5} zGa)##7(twKu30oqGbnq}yMu#0t#z+osJ<4W0XXY5TkE`wK-YK5vr;(+9oAR=HR*UuF(pu$pIj_WdUSOz2N8xB+qP& zo>4dkn-{{&XlC=K*U#(F^Kx zuq@cOaD1(`*4}&XT_OYAzI{6dm$0l)cltl+iM6(_>jWHXnkK1#rl>u=nC|Mt8Avtw zuC(9rWjhzJ)%YG(@_`Qj)8TwNJK@e_Ybi)7$^0wD-zir~74#04ljMn#H37#qBJXfD z9qy>}oozj#S0qOP?vV`YLhx0I)pU^Q@VcV=YM)^>>*yZSDM|pRv{MlvB4uq;hsHVY zRns&et?p;LQ$+85x?!Ai&N=V3h;%}(9YU!rb0Tt8y;v+FV^e$Yt3^|P{ZGI3!sur-xL&F$lHO1)5vK;pNVKEgc2IYVS zy^D*uun?`W3a~8t+RPwmt8)bzvOr`_wkWcqD3GXj4iqS&x|*-`i!&#;bBia}dkqkmq4jg){|E=wr^Xelep_cKCD0LrMFyg0(}``>>4#Mi$5nScMU6d!oh z82zJMVZ{6RpZnvTKHgagfB-NhksE-B$e@S-s1~jiygcRq+aLVVE0bobN260GtJxwn zjnV=b0a*}H6oBGooJ~T+I$<^tnJ6-Hl#ZMV1hTBzL(AoD+X4)LDeQ}gAVh*n2w4#V zqXGg11p<*22u4K!U^oSlIwDY;HY9EVFGJ)M;VqjIt?COp4jKUn15&Nj+{2NR|K{s| zS{iuZ7vEQ+PX4k08i0`^p}W5S((^BU@!HM{tdB5PaGBwM-V0HJgQW}M*+hgFfc|z z0c=1(10t&~uV8|RJ{6x(2nCctIvytJlFyc|CMXEoz5boO!+IC{yc1!pb2^0au2&j4{8)OCJq*~N3z3@UouFR;&as*aNxDbL8&^NB} z-fL~GhJ)Sl;oUvw++wzfF&3FUbLw}h3<|iJj^BFi#V0@X;e5C` zoy`fd$=sD?KSVTTZ|=e5eb6wTxLY@Fzw+jdqqz$z7YI3pYCb#Iy?g%DMrjM+h$LN6 zysO01((lYUmu1;vUN=qSy`N5}d0y-t9w?=J45TQ%IfOve#;-|nKg+Vzujs`1Q!ttW z-w;Ad57HOxltVjY&ME<>i3CrTvZh_ryQem`$|xdwBM9+qzuOxgFs8d zgX(ZcL=;zqL{}}kU)w|gD9hP2-$%P8(yQ^BO5QmoAmB8-+9&_PzJ6t{oGZ zcrZD*{>3l9`s&Le1f5w$Mi=>Xu^5hq8|(eOJ8u+)tgmOKrp2T_8t+f0o`oih>AarW zl7gGYFzNL$@2Si{W=w7it!P*ojfb5?^PAyu==Dvd0` zHzI6uWAiLT1?G^B2wz2WxL$z0%C5P1A%Bd}x#sfxtfWdIO{L z7)29S_1qfT+S-WG&yL0eU7&zyD0+EWmSw+ZP3aw$mW`s0Hnc5bR3oVEo!J8ZIwC#1yLk~ zf`Y^lq?Huy%HfQFnp+_PModtR)PhKfM4%SkP68%PTgb7UV#o zSrS2sgk@PKPitOVDHlPoc@TjRz-RzqGK1~W{=v>aeg1p@!%w}hG&YJTq!>{l5lYRI zH?O{Md*{`x^pMf4nrLeXTN#Cx6D=)+lv~;OuGj&BF=?{H61&o={RqSsF@i0m1+e9+ zrq8yz2-2zj#5Sy_h;0+LyKItz3QE{WNnG2+pkAeVv_n8p0bv3$M-kCVS&Lgn-QIn% zhie~t_v3@CU=9)@P$WaXc7_>tr@KFV{fsJmAi}_k83lpmr+7TRVcMi6El32wj1mzL zIjtxtObLwIUFozeA&{i&m{2{0$QqeI0uoaM075_!g+aB66R|)!GQY z(u?`n#}ESVA5CpBSnumA

    MVl_QC@oa^&2;C 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

    P0e|P#no3X|HJ=gvOV0h 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%0D@RdDvbN6 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%0A^x)-JUaHCoE_| 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 z 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

    -A*d}}yJKXn#nj^?Qc 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

    #7( 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�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YUTjGtM{ty!nKgRwq-ouim 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≶?EJ>wO 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�`3f&?T=_v(0=$}(rBxvQDM>X=kWyi_PcJx6eO zTU#N5w`AFf%2vdcCGJckrD98*;ED;Wxwp|=26J`wS|KhLsuOuzKC_(lsi8Q^7uT!GXY9UOrY8+*KUn4qb2PGVy2 zaAV>pK9QuIB8Ee(tRaPU)I^j64)5E|!iA5&UjgEH%S3z2E>`#5L3_ug71PC`7v;Q}K34p2Z`=Qgi zrruwhzg>igv!Q2g{|~(Lt8XB)!&3%WuLo4mr|0vO&ENNsx1k;N`0elf2%kIf5&rv4 z|B2nJH?Ii^EBx_I{}0#h`2hdrssEE*y(><%5*&BJS7#BUqlGy^0e6nh2@&V$9G!mS zco6R{{*U+L`pW>!yy&Iq-qgcZ*ICODl_l@@nXC>7N+Oyaa291^O7H5xWz%G^b0^bN z?OLH91TF*`jkw;Ry$7L@>Va+6S}7JT+{wNhK2Kxi0A}`lv<$dVYwu+-A#JpnzvM!0 zzu{lFvMG`M31zp7dBT+_U_4$TQZYd*HuV}Tz4PrXy}DxN&X2>Et+o4;6E*y64Yx$F zj^HH$g;Z-0u~iNK8m-~F3Z=0wN1!oU6ST(q9D>D)60`*oP+FiGO$Y)Z#{^q}v*h`N zs>+c<(x8Pj4T5vD$3rGZ4iL>wBfLQ7ON33AB4b53x)-aaSvtH*bY%zO3s8nIvb1(? z<>+F;k#F3{RaZ~5gwi9hwPnDI8fh!*QyGsov)E#SlmQ!05sP_3m>@)p zDpXuNj@Y+%$XC9ymralP4(8^k=r1o*Wd&W`fVhdBOz{07S?)2ZhH)Twnr6d5kt6+> zO2e{YfTV#gj>siE)dwN&Kc5(5^P!EtVKr&?$`=Pj~rxf=NuA?S1H~OkfMPw z0*@z%wLB{TUZOm}1biE`#YvB>y6B>SK_40s=DbVcZU2$}9bYDW<2zxhOBo=NH9W4Z z1j3al3X;$wXh}p4MlzNuo6o6s-hh|?x{I!!eh5TvQ+ zFdmy*RAh;}T|}!#KHaAwH35w<63RMYA)5@>khmUN`fBmWt(6Dg{#L5P2M|ev^ZxVi zKd3hUNbB2Uf72=0@tM8T&`qw{{-bM(ji3*qJ~(t9z>8V^foaJEk-mk z%0hP@S><>Fu}%;wCIm%U4w!B?Fz5*H3OY#-QAt+w0cK_zUujl%f1c+*PxGj!Z6@x{*O|Gq74&!s zV~5}ia3!)D)q;S{!S)f-5uC$>7%f`3%wb0(uoKGhfJr$f6oT@|0Yd*y{L;4w`60;a zJOt!9Vt5!_A3Z*T7~F*@4kD_fs1T?oLqd@O7V-gv`k+nGM`$2T5V6MjA-F{t?S*oc z`lMb$HAFCid=YHF&fpw7Lb4Y8KDirR-Hq}iV%vxOFv6Cg3`Tg;w&PJxndX^S!OCQX zLBEC*4*f+AAJ|WKxzU8n@3>8&KwEkdxA zp(JMwsH`mM_m}Bzs&h5;`+fH8*+aiyyLb!+1NQFS%kuJa4Looh_4|ER@``HZC^|}r zg207}LP{ppn5Jn#cZ%F-Xru_~YdJJdknIjKP4QZtwCuB?!C=5$ciqL;C)FdePUgGs z;K+Ob0D#S}`(@&7=bv?1x1T|i`~5yQ-E$}Gu2*ebf8?8gbi%z4-C3g-DPeftuAg|=$3_UjQ@1{!_dNSw`IRUC zDXFeqjtV#7ZC`xl3C}i7cjJ0J!1_$+Sawg;bT2-6hFI0Lc<=A`dpgy)LhTy5yu8fb zy?Yr92KPIT{eJ&G-}9-y>GkLK?b~2x-p*|lpIqtOT<1T!-;96NT5EXxo=Y_unYz<4}nX=#atg#{Xo#zy}_ z2pfGqRa>N#R8_q~RaHeC#~5R%s_KL`mSsr@0b@)JLuqPX_;tSbdcBQFbi;Ih_tgNtg>sGdI-OAF^(nj6u z{d3N3w8I!fnx;%96P$AtMFB58yF^6&Pk)qRPmQ0~`Ofd5aq(pj=)JeS?QK+5wJ|S_ z=Z`UlEXyd%l18Jk!Qb=FJCC`!Ir{xRd48hH!1}x>iUJ`7d7iVpyv)MF0>&6#{LHJ- zQ?nGKRotLoYoL9EK@xm~&>7y9=$TEl<2F?_!6>MlBlenXe1s2w2!yo$O&E| zBZJRZ(S@(IyIxThB`S_Ur-W=or_-YU&i~4>UyRuFFYkk0m%xOzL#wNknJJI=1-Wg~ zz|@Cj?-AZ&Ei{@9d{yDS!ix!2>CwJH&;=zGkxD=n2$v9o!kRaf={4A{;>nMF(u(Pv^cb8&)no~~6$89*pR z5VepPN&A!oE8$wCPV^Mf(v6>k9`!QJ-g9=`!`4<;V=I?VdXHgJ4YxBf@+}36-*wm zGn&YzsAf#?CBou9c+Hhn;ukI2MWu}U;e6% z{pxuBTWe3?`N`Ju^*w%_f5+cn|9w24*7tem+y?L0={f2R?BXeB+=t6%u3~5R3U;sF zd_sWrQg)bs+Ft{SJbl{>nNH?;q(}(Cb9TIpZS9MA-9J2yfM@sWP290^0~b#{9)PXw zdjg{mjJ|~r{){XoyZc|?xV~tu%zM)`yl4$3MHi53jo{9zU1jINmr9I_I#~o^mc7KaZexM_!+|C#zd2 z#b5lzUpz8G#C6wQw{dV5LY(k-LsDE`KH=VmmiHvSX!kDT__FR@?!EuFez-hU87F)H zRP`QD$7=+3@7{gVx{ntij{pC9-|yYuGil5H_2YDWU#Gk7x@+V53t#xc{g!nyI-O?Z zbmP?T_fL8M__=X9o~}Q8^UXJ(aPM?;?}YbXdUgxi;Xl5|+&%vjKlgy&yXmHzPRZ9( z&6UN)#rs`cPxj91U-w#M(x5%PiL&ey?6~%2mJ%0gcLkiKG6or?49PKNi4kfoSh=EH zUFNf&`x2u`cAvWL{k`7%UYe#{ec45nWllqDL@Dc71+9TPXjwL!_$W`W9)(5-hr@%n*lI!uwE{K-Rf`W25DFdo=&D(3 zhlPR31ks34Y93RRBua6_IqZ0V=}r^(x*Sk;d7zB;u+Lx(>o4grF&6Y)~j2p-qhSf)Em% zEiuxgl%TRXS(eqvKQ53qXYg83WFw4_nBFD~Ijr7^Sl!3!(x+%oT}=Pr64QebTQA-B!N!5nvBMCzNKI77J0JmzO4`UlpDc=5-nNP9V`IF`0fkc%6(qhY@Z|^{ zcc@H?Fb?U42ycR$v?vQ! zV|{`00V`sRuE&a@rSv7Smc$~W@mp_%XS}eE>o6W$T682~=`aTy(Rb5Bv~;b5+H-b7GqQh zNJX8bLEFK8(1uz^vtDSwFV ze1P>wzxCeQ8V9`a!q@zpSl2I~y_zR3eD_**ZP+*X#)c3v+t|WXJkLsTgu+d@b?J*- zK6~{8F8hmzK5;@lC!>S@8z<%c$;N#BnU$55lRmdTrbSWQ?>BO?XYVbD9)JJ%=T0@3 z?*0DB+IIZ)*?yB}B}6=spp>%-h&q#Cm(v}5&$O)j>%;M7ovz%I9m4*t=w$qPB!Y?l zt$FZZ>mJ{9J)R{Au19b(cZT3cu~yHvhF1z24fP*f9?ZX+EO<9tmcRlAExDVa=01UIY$i$fr7 zHkp~7VrgmrhBbI~WffzhIzPc$0x(hBMHvRQwb?0rRU#y`TRk>!y_oqp;PYEi(^HHO z9->*yasCAnU)xi1=iWQn)ajvHT^jKWi%0g?hwi4LG6oSOVs@5LCWwJz@A3*q@)1rN z^x6SGSc{i!f{clj!FN*15rk@tY0iMu2v=dB{gW&nox}X|$B0r#vm*#YLlrX28puEh zf*=Lb2ZXB-CV@~vX%TPB?rEvXoSEhDenZM^{+bPdPh$*PYqBgmL9@7i zIGF17h(jPKjV&u8A<-tG3ZAN%;Cz9%0ZLa}_^2RM2xk#OPz8SwD5bA4Sp6H7$1 z*+lmjv9k*g+j{BqoPBE$uAOImFH_(9f(KouSzS7*C1Jg9$MYQ6@JLwKVy_=ejWHV< z>d9n6r_-S(85w|a2zY%jWoh37>~y%d`s(dI*#j@Lg(DZ_}rUXtrnxv=%n*yeQb>}OePb|8dBKtf{QVR zMx${bm#B3Qm35DX2V#jxl4PT7=iCWxJN_Gf#Ds_oFT9ZPc+AYq%!a#Bk|YQrh~t>q z*;$sBmNr~z?$4b`DaCL&B+qkZXJ?6`=sxaD>&#gn$TUrvnVI46;lpHEwo!jsmaMF- zP*oM1Hf`D{>s0Pc$G6=%N1CQ|yIq!+mT0Uc@VVudTj=$A7-LvjSs{udTCLUw^J|~% zy6;m{Q#G#saCn02%>#93T6Zgo<9K5d9N)(EXO4Gg^4=52F*7qW8=7rn47cBYJH1{H zYc0o)9orb2R;%`pFUxXcg5CQ=Sm*E3($a?8(aGGI*88{K{xnTD+>?r;*w9p^X}abH z(`9val`P9n>(1o8XJ%%G0|yRp;J^WW;h_y2A?*0%9EeSU^qF! zooU^*Z!($C?RHPt$f79PSU}DC0^|cojddBKD2b95Rgu$`5w2W9piu&}3v2la94u_1 z`J|^}{@-82uCAb7@;XGSDJCPP8!eXJ`G*XD7Mh=ZH*))BL?&SzRXFd7w1Kc@QL$hv zPYAUJ9TZ+9C_h4k1fNWitsX`_JD(kzX}m?*+l7O4bU z8&rTeiKt48ZfL5~)$pysF*CafXFa3ggig0bVFyfiXPIOr%l!c+ifOmogy2ZD!M8Qp zO1+5f3|+;D{IPSa`*S-SZSvY+~OreFMngz4W#+X{;S6(L0gw!~EvkOr+&yi~Q8 z-Bmao?Z;k)eC$(Mefu=CfA%iK);U_rGZ|JmEJBLfV=gGX5d;f5ggQvU3q+{*5UmoV zlaMM%%{vv@iT9G8&gwL^m@J1^8ENc{y_;tYkup;^Lo9m z!|%x{?>ckqN++J?>Dzvg&+Pkamh;2B?Mts@F*^Xj3od;1zp1k9Tm73iuD7->yq5*# zl^a6D$9KPv7hd?9`=B`8n@U&k_UnIk*YBE45kMIf^ zwU9~?Y)KFjyrWS$Qe#+r)D9*W?V{P-1p99$?KH{9V;ml3G(HG|iU^S)SPu~pX~3ei zp%4nwh+wr3MNTj!RpoF1xIjn0J|~S8jE~iMCA1*8L5*9q6QM51Ej=S&z z^pS%Mj~pSZ1{5x!l*Cb?h>*gwx_I~j2@#!6=Y)fOwzwBPHIEV!w}xURt;GmQ(O)L? z2eirzoF$|UM9|<$qDF-Dg2`me^z<~-)6*Me-uw5N(v|VUCq%f>ki+l#om%;F^)o5< z?xxs#U$s(sVBf~|==y)fE-xaYn9fsAu8DtgD`LmOjt9i^hl-?>_u=(=UCDFcj`y5h zxzFGEDn7ICuK_mxMykR0?RfdaGA6(N`Ipd*XL#l1zfLDU`MkMy&!2L~%Jl$jZtmQ0 zW!jiC^WVi2=bz12j(i&HOWu6l^LX3SKf*;*k30E3Rj%-xU--WiwctN%sgee%7HuX;QSD1lm!#(NR4J}3{KS1 z43dJ-+5}+;txM3q^m>}3MT%GaM{JZ5CIdQYoA`CFVEm#NGXD6dsQ&!zOfP_Is1ya|~R8?)!91JRymS~?+xSU~8(eMeaX2R^OVfSd2 zNmek*T9i(Jl~ks-RGVCoIm5zCi>yB&Bpy|TdM=|8Bt$XTZVTN%iad4{cl~v&bmu6~ z>yxx1@PV=%qv8%uC_DmR<>(*@$|ItfwVdHB{mZp9_Z}wv)qAi}3QK$IIn^^Hwn0@D zRK6Bm2q4fnUE#b#l@XBFmYWEwCBftg*AVa6NjvJ#cyyFF()7?Q?cPs$@Fx6i zdnupry=-YV@l}D;F{RB(q+pAi;_JJ2BcF8*NwW>*gy3s8p=8rmCVRe4wy>SXy)spw zRyi^m;>%^yWG8q_2=#amiV11xksUoqTsXw?65w#QMETkhlV@XmSs~R!e^hu}{P3-d z#olk>vpR-gaNVaET=%K_eP`dV-Gjn+*|pcxyyD77w9RKj^Ur_-{~N~p&O(Tre-@jY zJ5I<1{jBqT^1@8JLJyPj+Je1L1V|6g3a<+*HYUxbzs2S>a4$T$Cpe?IWP zHlBaob<UAL8g_KR@-Ut9aJ-AK|H6e}MUPJCRCQ$_{bE(SPI< zd;XM_;s^jO)8j4Q@z*C!WY^qY^YR>>6C%#hIXXMd)p*3QzkKi7$y_r3il6zmZm)Nq zY&5QssdR%NYRF53KzNVB;3J6~74!}sWqIE%%x>BRWrg*Qs?5lRrL9w{Yz5PJ;2Xze zGDhWndY4>5S!Bc>keaf}X$8UIL;E;z^DR7ERs@@qMC}?wf3=UNR^*nsN983nDxd|A zc?{zBf17w^1>X33$VP{1utMDI(3qQM(<^?I{m*$igIBzOWVj4bua1KDwoVkMG*xhD zBJv~ws}L%qEF;vmO|1U?hncy&i+p2)U>$gi2mxmU85JRDtgAhuRPYEw9qVB$uKk1G zmw!KIg6Kre|Y zr*^Tryh2$CqE?Tpswk<;v)&*??K)OjN1QYWmBo9AqZW10x}hv{yelC0wc7~_sbaw6 zg+he{S1N?7GjaPYP-YczWbjTPq(Ez33koLSti?+Z1`;9h&g0hNZ=7?WBJxmyb2Qf= zRS|2*Y$iqo$k*J;j1&-qcJUhYt|H3{a$6wM25GNLkxwv{#K}nEt+FOkVo4bbj?e6C(*#McWuOffZZOAR!BmXr+(7`ylzvH`93BRY)w9 z1=eUp>2R54wii)-^^2?=d>*~?&Zig@m?*&pPt=-Y^Vah?y8Ek`M?LugC7g54QY_y| zW8sP#VaqwRj+kUQNv8+HWsdH?nJw1Av1LdMI*#giqjF4a9ZO}-!x7@P<6%5~sNQr9 zG~v%8Xh2Bx^z0+v=Ch^kKMc41!C7=u2%fw1mAvofU)}iML!F`eczW8_AK;Fa>&fhh zkL`XhAKU%jlUrVd;dwlfcJUDkS51&IVY&<)zWxhLF8?ml?iBseF(P8T7nJb~Dva>9MC#~% z>$TQ0y!#GjckIGyLu4(b(1=i?qXr1iEjNCJWHezmUj;&~#T*RKt3&MCqT?G)SlSKq zDG=B09t%4WAACQtw@iNV?Zlla%3^{hpre$zEnB&J+Z^_WgLT{o9=yV8fr{F=JcC>i z>8SSUp5Bb=kB};1&;-(H0uuxRXFZi4(VLy6C@Q3q#7WF}bqPUEQzm#1K`L(Zp4Kqq zN%LD+9u-guoKRRXM*Eb2qVkUMuq2jXl_FFgAtheNRKYMB7To>Kn<>xViLW$SXpuw; zS60N-3h=yuG?sWFQAirC1Y25!F(7I<>d3?h?+8+0;)FV*hQ$j}54$h~>Cn<*Z4R-a z5a4Zv*7v|CJzTtLS$aoVI#OBWD0 zR?~S}+b<#NSd!9G-FX}1NlsIU`diW(Aq~OT`9d5P=@l|@;46r`*rmN>Tep+`%+E0s zB+lg|N)bXG#NX915?6x>%*~+YX5jIcfl%b*RjiT-6u~=6SJ0Yx<__=W8(;V*u0HQ& zXdO`r5I96-nRItB+Zr%Ba2v^{og``Vl;3JK8IdpDiJIAt3>~DKkPAsvm4papTRoP( z_K%c@zQxS36|f!>1u}*p09jjb!ovfSVFbLW34c3&=*y0`Zs*F|2ZZwUxfJ&Q=9^et zQyyLNH=iYa^y3i5piaWq7d7iPf4kA_Rj_ak9R5G|{4Y{T4gP>9HSJTr``jI`;4g0d zZE`o}(&;Dj=-E@FJ*B!XM<7o~{I=@!`bXULd)2<|>|j z{*Up33txSo%-kD7$u%_(&(S#{;vAi$6R0a;`2plcx=(VsGk|qHzOF}_j4?>*(P9l= z)s^5ftY`u`%A`;Q`;BaW?9)*gv^Ka9(8i#uDaz3zQELjRPwggA6&d5D z{Y-7yMo2oi$rzME2#2+SR-7_Cx`*pN@xOUaEa z&@qT+eITIJI{ZO!S%N{~H!(7yaAW;O`QORtlMRRT!!p2CUNVLOw zOPn@qT=~32DMg7Rasi z5KK2`t3>=y$U9G!{GM%_guP-PrhhK;WE1M%qid7ly2qYKeWuaTBUQE=Kx;y zn78ucOWr`F5*oUB(y~7J!$UGRrW>8StS8Jrizm!Ki^`SkAKt-AeuT=G^pZ{N=w42& z9(a(rmYNq__-bBo;j0;zeGZNHuv#n!ZF zqX->aY^kxu1T)=3M1fFL$VAaplB%-UkP)g9LP@e|8&V{ArIA4p>=+R|PK@!gAczhg zhjLJPkE0HXt|k+1y#8y<&$oH}qb}s=H*X@Wt|k9!H=v_2!GdbwZ4LJrnHUwo1y5oO zLCQMGSE#jlt^!Gf3|Wn$BOO{v1Ol%>OQ>8RAnTX{@9?(7B!xZNu>?xH245IFQ52CT5oKA{y8Jb?E}g^}q3Re5S?32) zMpIP*s1ekRkaaE(SqEuHX#?*Rv4*MvUQV!O%_dA^ToH})C z=&I^@W+o!2IHM@U;TpYau4{?r8n3w~nrPIecr}XnSV+6j~OuEq2bFpgMffqy80k#KQ9iaQ%bFD=_`=2Z*On z{Qnkx%8IjeEt_w9mzDAd{F-XXDmh; z&x+ai@D|HH2hgbOfXWUY)@xq2@)Y1HkIH9X@+&O)XMSFf8C_Ji*>3HEh~3()2dyW2 z_{hTm5hs54Kc4&f;1B)yBYv&Nx~kET+`wWkD5uMXKWNYj)0LG{OidVP+|el)4?oF` zZ+Ioo{_Y>8US6S@?GSRN9xgNMHraaM7%TfODwLNnFEk71F&eTR!+2CgnXv;DStS;! z!}|)S9JjpfHN5M(>-mYL3B&vDph=EeX>f}Y@}_F|*qzi?;2C=h=+QtkgSso?@I?UU z;OS3+yY9pM?`z&+LZgJj4&(j8AnQ88CzRLh%Gi75-mdu>8{fl zEXLKO9Klw26ljf6Lt-2w1e9o;_9zcXVq0(>bYA7%AJo zOH;;U&$LN&jUc9&3rL?0a6S!LP^t*2GeTWe#1QFnI+xB4P&tc|5~|j=4aq15y~VRJ zhG-O~));HC8q&HTDNrwu`mB?ptr#w^VfQZc!1hsceV|Oex`4|y**1{Dw1GWq`%%8| z-vvSCh&2v97-3vpz$HCHhdw7nWh6i=L)2&)P|7&DSud{xnIoFv@%e(HHcSX(7e)`-mp>cA1Ii?5+! zfkx;)`ff&D#u^9nz*E;0_k7?3yz}>eov;0;KZ_YF=JPpL8@w{4reUEq=o(cm;l>Ii zp`sMfvRXro%okIfF7&Oo2{`YmtmDiF-pD83@LHZJ4(_-g(IX@%)F=a05eF?goE;ES zg7AgQ82X9j2L}<7Gq?StuR^+q2nkdF)%3I9XL{3(Oh5SEax(1Q&+51T<462j zk9A2CiISNt@58R{2Wdex2{0*x6I@E*fZTFu({tvAcktl~p7kC7g28Z!+58OICWeir z)k0_&Xzx(24@nA%wwvR*FMtkOfu+5$Gyuj_dq%`<(4irxQK4?> z8br|&AeCk}(9-Q}m#}HAQLVvLntJatr?0ya_d}OaPX-W+fG?)D#7$&Dl)@lnrO82~ zts#kJ|3z2f?l_K#3yf+&ErHflE&~xInT_>LOt(WyHJj^O%-7c$uB;#?Q0vT+E1_g2 z&dB1<36`}{_^Qx{lme{5AZV=_*OswMOn0`KC!w(sVu#TN$sI}=tkoE$FkJ&th&b91 zi>6cwAud2AcIJWY%_%FZL!2oS1t*c&0=g!!cM=(RM@kmwJ+rnU=Um*Iv?9k6KsOi+ zh>}s^e3JRlS4hew`=`&c(OT2QfOigUH8FPQa&4B~04E+5BiW46dCFvEjrZU30Zz1M zxZvPnQXNTM;D5aDJsjNzwLAbF2}(#|ffj`}4PB!du3ZLsPCGq@#7Giwu0pf}5mLw` zRjhSEFj^1>tgkyRy8J54-U;!8Gpf{*-5jGQ(1VhkGvZ8fKr;!fAxp3G(JcYcduojiEg9rJ&H@yKrp77=W_(zyb*64P22&O|BLk=`YOa9GZ~`_H-M%`fMvW*?)QZUf0EGeVhICV>*5i7;Nq?K_P50tbigGw_l< z@QWLt{(Gf0c4d`t^7zAiCWU(lLG(kFKI_1zH2NX*B`?`i-s2OY{0cn%-@xtv_or(l zcI$i{eBLgFX%|H7)^0tFdUg$$Shzbr^nKR<{59vlTz=$VKcZ3iCAPfQV_hqI*Eo6V zDA|wD)sV70nlagtd_={FPLMhaS}^zD!&66xxbeN$@!s6<+;9I0Mx#BfPd8~7n=J2{ zU@L_rVG-syI!k9VngO_oL+F~8lxEDf)-k$5lp)3z$W+du?Eq^vv1<`!@S_7%qf4p$ z0K}2I0WQo?t1B#wqd9t%L(g30ncJuMcVF{V)<%kBn~HD#CqKs5f7zudJ;yuP-h6=J z^bjkf5h2B%n_pJCW6tN&Zk1A0O5v16k(teRh*{%?dk8rds!+27F=8z!F<3I>K+}O6 zj7x&DL{y5zc23S2J6Q&0X`2=i4=NL4i?5e)euda>lk)=YN)V;jj;3pf5~=GNKQ0G& z>^h`xDrarOWOzOtQc|Lc9nlo9aTZ7{RYOvOwrLm+$LPtJos*FqE5sRyiP2=0J3e$X zuXyo~^0bRDXIOV^udmavpC3H9k4s01=Du|@kriv$N|~S)qk$(+7f4P7t;kW(IkITx zhz4V9p@^v>6o!EEmPHaaw>*>WGqfi^LW)zA8(>d7)83yaw%S}81rvW8Yf<3JQK zN0JyM1}u)D8Bk4zq_n|(Z+aECzwJ7%oa|%oZMVW~ljH{&X+RV*ouN#E0313<<11`T z$QQU%c)<{E={{2*@r(~0`+~mig+KSJT=36+3RTq)DW-nG@QHWryYh!%&(q-E*FQ4* z*T0K3x~RA??TV;(LBwwD*2Avv8No}pKFdYq|M(9a`mq;-v8B;^gs<^<)XvUE5ltFH z(=<#}1u`u;1JDa9H9AG+RwG^*-*${=UwVX_-gN`lAOA_7^&LOL>ft9N<5gn2AjN=4 zz+gb<;w&SOdPgA8_|Xa#n%Vpq?|bd<@Rxt~X1;aLUcPa58crU=4c5R9flcUU6c#we zg0>rg&Lv%238(-&9k`z4-}TNg0}ag_k_GF~u0ux+EqJkDJy68YK`Kz0ZqebR;44G7 zSTL&uqZ~*?lqSVMy)?lMYw#1unVceC0!CY`R%8LRq4G7>*QA^ndSUtC9=bd31M8U0 zH}MQ{(>d#*Mee2A9GO)UW?_TXtZ+sl+95F#t;X7#u$be#Kew9i zTrXk{0pmSlG%;)H!ItqxZhp%62Wu8ro#&rt6s6vfc)cOqO`b{(~&l70NC%yzpY2icpP6_a0?q zG3D@54GQWcY)%atLv!YCoVk?oaGB^LF_+&<3LpvVigrjz#@ZV1HECy?W9#?O#efMG z&6unzTFER)pT?F8eai}{oJtya5|mWXH6R{QnTW#?;Lrigt)Ha%^`Axk>MIzU0VzXs z!5R!#ND?s8p^PV-x|8~@+t3$WfK#Bu26`4SY@wA9HP~**`1mH@cW584{qw)%b+_Ki zbARZEIdtt;W0&?4B$H!9(=-r^Wv|znP80)WkjVrqLP}dqZ~Xwbz3~s3-Eo31S-YI& zTW*B)<3zs)9UBM%Du)`>1;9Is8`t^?;sqBzstLCbRsVV!Hu6L3Bfelw(4Gh9`9E(^ z-qRDc)}CE%C;kc^c*oygiqqt3IQVtDIS{)bVz+kd5!82%;Vp}Y)5FulW|P zdiFOlIdCbCv(|i>P>A1DS;!=^wpaqPeTq-q^jG}%*ZvM$M>~FC-w~dC`Z)R21E|p| zYG@!dMJO!=$UrE3a;+(W1e+j(qTz6{pH%pAA0-fGMZD^!z#dYXLX)u0Vx@?NsSLOQ zG8x0hHhQNBRdc&ZRSoFOjGP9fC=8MY6S?pG&*ie`eg)%Xamy>xXmc?I_zJxT2qT9>BX8I7}+7$YEfZOJG?=*T4IO_`D`j|RjT5e3c;mzF5q9QTYIq0yZk5O{CEf&Yb4{58ln8 zL#J3fav?!);M$JGFhZNzx3Uj%SA6_2h!#|pF;&gC{+#EVzU-N}C+%nN)4qreeK`@Z4pdD?Sd$et^o$#CTWwOa*A z#o|^pUPTfuYV$reZoieg-~UF|KlX9<4J^+bO|UoL1e-g^@;+?nCoa}woQ0@BS+WuI z)|?eJOWEs!k(wY@PgewXct86)^7bR>L-`sM-$Hh001BWNkl{^__2F`Kiy~qAR|H$>GZx4VI{fHBmtf!p_Df^POWHz57mX`Kz~Z{LZ_1-s(Y~ zvn*8i-b{SMj~y{XJZ9#T7W!u``Ee=QOw6d>W4li~-4!gd%oQ0F74YUfUr?bGF|axVk*nYPznY zX&RIUV@d`EL9?{9MCLTDGVB=)816*k-U}JO{&nb+NAa)t1Ef7eYc%80UbJ7Jy0++M zYyu0~B-FgcOdR*0JkD)*+|AmNC6;|=Hl6Y6SG|h2zw@13b=4Jo&-Z*US6p!gxt%gQ zb&A>cj4sc?B(nBMZmDv{!GfxFT9Yrwu)T@RGN`|g~=5O zMU&>#$6B7bvdWY8Ud_$#y_Fl@`q%gi4{^b@PiA=GB@9;%l9hoxBhIEwAGnA4owpH> zpJv}^z*p55QLWz(ci&8I=H%ruS`;cwVfjK>ws7ny7@xxDj=oX|i4ci;1Syk|5g9BW#aslHr>(DIdMB^q0isyPW2iuiy zpo78%F%-v_wpeGzt~8Tc6(nX-Pam=U<1DCoZ>N)?ZEzvexdA$c{)(vjDMvzWoF*?# zuxUuw>`*U_$T(!@6oFNu(=2OGrz+0uY;yR53kZ`Tzy52#%B%nE%_Z{yc+IQ+nE&#B zy_he3)>lxiT*~(Cw{zl-yQo(tsEv-U5p-1(C7?S?CY6RW29gf=WSBK`#$WgCq)RU& zZQo2>v5W@?IC^}8Xf+299>MA&+LqLjjV6YGv%Z8SNtpmxZHXxo=L<|-(RhpC(MqV> z2CWsS8~m_d;@~eeC&4IrH3#}L(I#5lf1Nq$h?45l_4*XG$aDXN4lNN z&go-ZB-fJHkMnO{`n&w+|MIea!UL~*^{aWs@BJ1}y7o#I^G&o?Woi>V!9}D=fFMi} zJStispp+s?#)ODLqqKo2PzAscWkJvt77a}X6G)+BeE3Sj)|~L6n_zhrhC>J*q(x}S zjmC`jFuG;}Dq)p@wkxLr7FxmR4rMe+3{C8)&zz>3&iK-$J$&iv1)N+&PQLejY=(Dn z+E^GmvKB@`u`(EQkuj`ROX&3$);|nggJ@4)Tf=l6((VwH#x$e~Ny+c+u=Nlx4pM}6TBt~|WCS3^TOTw*CyBSe8GFs;XVYRIrkw$$iVILGiOtG5#JDol(FP@nu{Fe`NJ>MFG>aM4aDX2yqqDHI>=+q1 z`M?&9IE)pN^6Xg}aq)OB+nYN~yF@)GSpk(ctQ=WoHs4@tJ0Sy&ND+BQi8Nh{@eZpE zl_`m@ITt6UrdyO83}YcCyfzr;$r5_KMnaiB8^U{1*Rs8{P19_V#+jvhm4+Rd&S}+v zvG?TZCe>(_?rBfLeDnr};}OlU!sv`Xd%R==w!&0XBxn}*KEM^<^ld!*`+tO`w82du zxq;vM?cY8JAOJpj`zQIufBVb4^^Jed>VZo*dEzMQ%ocfA;ag2K8D$LtQ$iREw+)m= zp}`0e^7$`-oI!zg7HNy20jm7nL{p{?bxl=OMWfV}zbREr3am9qmSRgQiKsFn3XMfM zi;5YYGLlO$q8LkyMs*E#{RG<9?DrM>tt;nu<@)nE7oE}O9NG>REu=^$q7anT=$Md{ zK{QrtBzDEV7K%-DRYTlDPbP!}aaf`KV{bpV&%m#&!u_$h?0umqPTw^uL2^fSyP@6M ztz8hYTf6nyfW(Cs{^Qoe%a3@ldb%$ZrpI#vakg|2{Aj}RSW_=qSZL50m83`ul8{n{ z7)xXCDNTLXlxAOha1(G+Y*?FZ*v>c`ShE$Fs@#XRI4Q*rNF~Ri@>s@2_#C@lD4hzw zR`p*ik_u=!TUpMDz6Ne~et_qE z!`JY;FZpTQ1&2so1U*KG#WgBKa&1U$L`6kq9UB{`Svz@#ILuI4Y*uK~;)fOz_~DSc zs%hI6Oi3NjIfJIB4Rw8&N}&u{hpjDZYZDBCol~bc(`3ezWkS=Ek`S^cWs5VgcX`bA z`U%d=Iws2_tPx^T)O8KYusLmTgE3lb7SqJi$`~bz&8-0S62>a5DF?T-G?}fuO;ST#zsp4gYZ6*H z=8{l@0p0JvlIr3kR0k%dXII6V7ahpj5|gG@is|+y+e61immc9=ueqMze#IZrwx79g z-}COj<}I&(H81?W?__(n&aurYaa5s{P>Ulf7(|Qs45?7G2X#Kj2RYldUlfO0}oKEimYcC zu}IFvBfsr1*wW<0vrT;m_Y&4rzDhuI4$C7?fR)g z>;XX4PZ&)3zs~(M;w+Hplc|j^AcKAdRO#Z*RPI#nmwT`wg2YVD8Ko3iO94UI7NM;X zY&Jw9f<}f0f{ zP#SJq(!i~AsF;zQi^EaOpah4aa*l?I5Mce(v^3zsqrD~POct>961qQzx91B!aoe5X zEPiPjWi3X5_lDySoF;Y&x3WZ~3?f2Rk2tkG<@DARUyTqFCP%Dxv@wuV!dnZePp-C_ z5IS^Kp+!?`du}QLMW`*JP%0D2SnDuGk#nYPTdKO|;OGF&B4Khx#-Ma0Dod?~Bm`|B zgdN(gb=EFgCLdTMFvlv5Q594Pl0wHsj=~~muDbk5y!FrC$Pc{c<(%4B@SgiNAAH}2 zz|a5qkMp*d{v1?GJon&UR)};aK+u>bfKzBUEaytj<k3o^ow1n$;BC?MAOVqx?g6qAKq*AZzE=uzE~4~ub=GKONI3%;qfI%F^a3T8-0E}3 zpYkB0$x86ikw|EXpDIZ{3m(pXI)z9=iGr>nw=GIEAq1RrkL&lH zQ*f0lx9=YBUduk;$`R&AVf!}Nx)r8(6>+tszdN6?-VftTVfk8^Tm!?y=hv-vYZpZ9 z)^0s&^_}B#yRm`yw(vI{+!tZ1UpQaZWoq$cUxMTwj~s~4Rn=s~^70bL@3;eXe1m<< z157f+W{wdBl|qZ5B&(f$kb`9UCO?BtW#v@4zIj)rnU~^h1GaDG1xzTQBlc4Uq<3I) z#d0-wC8+A`B;s61RlmY{_Ev0r`XyUcZo0pnea`;r>17eBf3BPpMrAOA(yRrFM}7)q zQ=zLGn~GJcNU=9{cF0Z(OPhh`k2ODY)17QJ4~-s=Hkk{%IY-`m9}{Ewj*Is(oSx)l zr%<-gQL;6}ra`R5Do@ufz?6^IYVtfTsbOjoXD4~rBV;!O@yiSFpB8jFA47@9J7+-OEdxw?rn89dBNG(vZCqxv( z(HKz>bH_k?k^y?EQVGpdq%I*&kx@A7NnJo2gH@U~2C$AQCyWA}GZG8HaD%$+8!}m` zLX%NK3bD|Glp@85wVu7Jdl_^a&`#-E!S1Wj!O_NEk5P@u2i8C-ya-|{Qi$b{OE{BL8$-3!OB%^GI$q3vdF+wAz^wY_}f{uP#-P;Dk8=_Bm__n2`$DLQkG(QTSg!l z-A@UP1tmonVGJw;l_J`h#~ncI)+4XQ2{`%}aQwQz`=7NrS#GCqIRCo~o)3p#2!jK= z$HFd%*sa}ql$K|v@Dx-Jz%YAY_x2oB9Oyx&y`up_g;4H{c zss{`CJiSTxKtuY5O81!ueM5@w8$GMh#*#Wgd4s7dViU+!g=!iwj@Yy?KEP=d@4NGE zZk&I1rDg~G;T;d~(j$ktbYf9wwppJ}k>seXF3wjbplgdthL93C!L$jbz_lG)%-MIi zrt%uSJ|o9vV$6(_V2tT=86q*Jk_v4!m9LAAKr+dcRemHF-n~*JiD(iUOGu$4lbfAKRCN-8VjfIUk=%NbwSEar1IH#SI%fbyO!v1oI$C*?U9jbx40 z87(zn5tB(cjL|3}B!g6YP~(Pb2Tn^%TtChb%Lg_VTz~4byC*Di<~Qy=#UUMej`eJ* zh;lVPLa>hdEZUaRSmzvx5sakXeJW$@r~qKeh>64iwRQzWoSVWyLP$b6rn3eqZcmB= zOwIxbrOY|7t+ht1M*}&u#FWZ*(Sl9|RDvg_4sC>N3@L%=gf*rB6Js#~1VQC8Wz1Tm zw2)%Jcvq$@(9_M%zI<;J8%;4mh=LvrQMKQ_P&@&vU57hg`RNVy-^V(BUAe722QK@5 zs8)B6jYqTe?k3o+-FjkHj+wSwV3eS%0W=MHv4c*fG0;h)rMFu-E1XOj!uGKsKK{%=juPv~>O0-pj9`1I+6 z^fad&&ad2_1r-WHPIRFo12L44x#IK`h%um2p<$$E0ka0xwMfo%F@YU`G~BUyhTl9n zXOTa*G5YOI;1`b_;rocwfZWqpD`l zXwXw&B1UPfwJ0T2wJ%OXAr&AY#pS9}U~@uZCd384wkXMTvmM%Qj#7eBf+OR|=u~nc zL}|Jh(ONU8iXMZMh*E%FN`;Q5wZ>P~IRU%Ynr1P@DvPbhh%(HMogpp)-a(Q`Qkq=* zax6(lwk0VV?SQHzDifJ|kBbqX6t`?8{__J{EaY?V+fOtd|L)!m?q9T21bkSKtfDeS zz+V8a23@8&)|%4Dt9~M;Y=8WMu?l4dBW?0g#|3$lr{VM6EK zuu-Z|vd&t!>Q9*tcCq~I3~D&Q`&|(6M5~kUfg68x7eIV!oxY)Llaue+-4>5#?M@+f|vk?Bl&SR2DGjcGj4c=Gmw24#O4Jr#t<-*JFbuL}gAp%-kw&sSN_yFA{MFU~H!JDG1QOckw z?o(-T@kdnr`^zt*Ien6L zHm75Yk=oOXpqoM&O9^EZ0>qRsHbcmTpq~?MY)Ilt^DPt_Pyi#4l|mU^K!mesEOZ^Z zrw-=cT);Y4rUhL?N(%@LN@+wHvSf5GzE0XAPGN(?_4^2)VK4w(FY0!X1GbA;)q`v@ z$tyxm=UmHBg5qpgWf57IQ!tkEHx-a*>Mw`8wF@G4Yqvh%`dq^5^$hD>adCRp^ovtiy|lWYjr;B>fnhp8a+s`P9M17vVWcsOvsPewhg;v#dJrFUF8*)q- z<7rceu@PJiX#je&aK^2|Bt_5;kE4!4AmD>yCugpYnzw9zeuncAc*W^$_Fn0D!Qrd9 z_(@Nr`>VIph8=u0qN8P~_8=lS-_pu}+-!l-M6Vf4hQttP^MaK%_RqENRaoCK47gn&rx{-6q`FF~|+gbcW6fyEGza zXhOio2CF?17Szrl;t}N-S{t&;V^PEm zNm;N(H-MBWL{fsu4!p3~+{P>tgVhy&>eL4B*xdQN_wDc8dmM9Ujh`QShSSr`gC*Cw z1Rly9e1#4zDM9GAab_8n4B}=e<$w_;2$?{3skoD+ImiSfnXU#U5mZlqq9lw*BMiil zvLovSVhz$vk(AMH2{ot)Az-_NjY6z^IY*tP3K{JpjP}BKiB4yB7A@Ot%fe{vz%n#7 zE52gvD%je>o;igLEiDN>*^65wlFDdF=v*T#%0hw+fTp}vzZaT>5?JK+as8fqG%a3_ zrgD3GbN+XKS1ev7!)^a*clz*f>iBgKw&0o{+XWK4AmRyFk;qYwavQgCE4OkNcX5U@ zq(_)wu%G>0%B5V(wOqqB9Of`~ch^2>-PS!ai`Tm&ymSlRviRb$cy-QVU4@P?aISYw zYET(WSJT=SZ#)T$ky-KAuM8w9?4f3c$^o-HK(DT_8EfvJFW7XE+47hz@5(CVJYePv z>Tbq?khwf;F!{)>;Qxkr;3Ar9o{2ef1ouDQU6u=#1KQpSb^truMR$=LxCEi6jOboi zoqKR2UHL{&U7>hLhSb7vj0zc*W*AY3t_!6~MbMTUAkm?WB_~bS1-uco>1eZp730LuwTv z1uTMKh^9i}2qH||7UMm6z93>zm1nkSX>yAl4uC+88H-{OI!s-YdksM4EE8>rX$r(L z>GDHbJ0NZ;LQ2?};qVc(KTsx4#z5#W#+NBo(}By3JI#IDbKZLN)FaxrO^CeuBcJ34 zpMEJ<=@Cs#m?o3m6z%I0XlKTB(lGLSS#)!Z5|kem!0QF&BT3hoc1}2T2DdzceVQgD zR5w5mOqrfYV0z{>$7gelvG_D+&w>3ow?bO%fHP!OVRb_7bV$`;lp(tzN@Y}9Fpvox zI>NMR_+$*+8zNzKmBEuQfqe(4CSz>wm~EUupE*sw`%Vs2o+~eV3X^t9b@~j}~|%;>k69?S`T$Sc_f;6CGgD0-%*z`_9?pUo4aLwwM z^3_MagNr6tKj`Dy)bQ$C|4(+h4W4!I8~E}=FXZ$MWt&~`gS&mvE{J%7)Co@T7yJd+ z@#xMPPxk+A;QTkp^LaimIsiBNw6XKMrc6tZK##vISljVJW(| zb`1p}8w!ubJh0NHcOXZz}C&TurKa_4Dl`!#gmnw+=3=&yqeId6HFdB!E9%pDrLMk zsCi4uo>4s_X@hna+f!6TgoyMyf`s-4Yb|ZNz*iLq*4F42J0uiJG|m@+b?P-Iqk4o= ziqLg9?`Yd8A_;E==^OW)i`duLij*UhNd=44yAK(<6j4UuoI_!;N|TkwRlc_%RVXEh z5~|uVsA{IuMX?LD6iZn%LV%`eakdx2iz+%@Nk|5xHH+ztGpE+sYsXkSC6Z80X5d;X zWmp)^*gNWW!8{o3WSMkejp1Sod-@cF)3CIk&}?J!l!Y=ZuS~dq{d33BKiK|GK%<46 z1KJkRyHZjnVZI`(j8TygB5FK>)iInt1H%DeiPeC7Y@K6Ix|Zt2|BUf_K8(Nq|HUq? z5XF^A%Jc+jRv!D5``-692KNP? z0M0-$zk2m$>{;Ky-FqiwOHv)i3Y`dkG=%9Ks$QGaE#UMiM0d3FDYN+*{OHhQ_PzGz zIsD?rWBXlt{i57nvZo|wKauL>dp@1QwAq~EXW#wpe2RB3|Mla)$;-d#L&Yli^Qf2I z^pm{)_W$&0zx(5V_z5mty7IGvhu^>X#k}RNS0X$(h4jsL{XZCG`IgK7DgWzJe~Fc9 z?X$j*51x2Czx@6eacXh@XZ-D5_x~xsck|EkbtNQYJ^%n907*naR2P0XzwqU+`i#$b zYJNX|@X=oY;GXS|@#TkJcy1ywxf1q&!0852 z91uYTn|W?}pocT>v!|NY@cvP!58ZUrG-xYHc>0gtXIIs#wO6gGdVcG9p5M>-9anf@+=ou$+=wZha6IGc-0PN(i7nQ?*sNm_(IF+e0 zx3d11*YSlfe}%)0;>Cl9(75M%x@wf#;25&B;CfV?ma0mR$n)xbmN8#wS~2-lY)$h& zMeag}DX7w%9MBlRcV=+Kd{ME_A#7HuQX)qvPv{)EQy5VxS{Fi~VvQ|I27-Wdmc;z1 zSI{dhaU65}@yBxSeH+-ZV|ypvv!-BZD5e%h zOm&Jj&XuY7*9%!vsi5iYY{;?OYT7oHps2R^!qGr3{p&QWcuB&MV2YLpAyZcv~oe5 z)To_!D*5*NNbekH2v1nAbNuiCTXsy+&vW7=;m|`5Vg34B_PDMmo%jqUC#SjZ{`(iM z?IBAR5r+X~7~;ze<6M=hlo&`MC@n(NuwsTpjgT6T6{cc4Rvz7&VCwLrsD1KttXRH^ zxieoz8i$ClUxFW9hBu0CcbMsmKF-opPa~Sg%l^1yslV)%Z2zkdGW2(U&&aAFOb{cC zuSDgPL0V0uVi+6czV<9XRdp8s(VuYIiKjC>xCp$!`GTy>v1NvHa$c0tGuW&#&^!tb zJBsYN=dj`DSM$SfUe4N~A&we-D)NTgQALW;384$;#q~ViwOtnz~``7Jj_--#KN~ z%l5nN*=&L<@BiERR^$R8Xy?=L2q5C_nVWdm56@yQe<(t@w0;mP8|$bCgS7Gq?wwsv z-?XvbaK(L>a^sGxx%iZ;Sk^dbuWjBsc^w!2@CB6fsdY%WnO>upK;LOk^B7{@4f^Ek9?A~=}8dr1hs3qmP@$gw|4#;=KsBoxAAQLd&2Fz ziYfx}>$X3gt%|RITd7Uc(~}haKDEIn(ZFyekR?+@`tOR$%@$r=uh86G;m0z<={=FACYz;6jlE!m{Yyj^iGe8d0NN|LpBFdwGrI-eP}g6QCOr?3?MkYmhjrA9zpN0 zV|dBgXL8IjM|0MTU%m&3kW%v5OFquee)da#a@`HAJM<8aKkj(${O-5$QlOnc7>!q& zNC^rLiP9`uvWVFMM__VhyN0MgO_&T}3q=w^978wjQnLdD^Xf+`2oPQnL;+Guj4@T@ zKuA#YtN(=|j$_iIq}S^(&`3Zyf*`J#lW>UnD2CR$qEbzBbd=1iVH>oJQ93|5k1rjq zew!dr6!VuOj3mZ5j43eABDBKGiaOW%>iXxo!Q_S@4oHnBi4=Lypk>AWBz>iy5r?u0 zKzU!S-iu0=JDAs47#teFr=ITYePoAdf*5?@85%r0 zI^n<|e&ZdKLB!OKP57nOf-Da)K#bjNK5D4X291W6O z_+fUGz~B7^i=J{cHt8Yyg4_iRgdr>&;``gDc;I=bbM_nG&XUn36lF$dZW<{hr7>s~ z;E^XQv40PBX1! z8QbCpmEVJ*fKq}<0rIk1j4m=6x*@VhTOgJYhuhT%qoUN_t8bsgWa4PUl6_pIk}#u?A#u4{kEjo2*Xwv$X@sP`4vl(~vG;z6DPbwDybRqK!Dtvjz{nU^ zZk?v}vX}CPw_J$u5}S7EXFZgwz;+NtC?8iPtrnga4V^d-(#>|&8f$kQHibYMZm$M>WD!S;KM z|NSS)H*Fw3cpb~${@%xYp7u|!VeW_jL3Zz*n7LVG7!j^Mn8pbwG4g_!p_&6g)t6xj z7Y;pf-)-smqZd*ysjcQ|OHb$LJFemv<5#n-yMg76LmvJ8=IlZg;`k+}vZ{I5qk@Q! z{p^hk0OA=-&*Y=e{l;$2{!WWj%nJ^AJ;yA5HgEmziFAq?Hns2IvO6x~4afZX!+^;K z?rr@NfYr^zdCRdEAsYs*WBH^Y-IE~V2?HQL#ixFw z=}Y@#S8)|{%<&H1@!tkWe69QFMbw>NTu1A>-ypr~R?O@SG7JfpET{2|XS3+sSE7f8 zAMx0mi|QP|4c4a7(NP|p*g=|uA_3u%qDn1sCMSsN2vZ=bC@STWC2Uwc!u`*AHfO%> zJw#~AULPd_!e{_gjPfO^^+@5-+EbQ!rCKXPoOLLvkP-^1NxL)DYfVl+=?v=c3Hj_t z|C9?BEo03@%3N=nMqEdst77V2S^t6eyx7B=8F1Jb9inJzLTo9-$~wYGH&%k{L%7 z349Es6MGNjiSzf)=3;z~mjD;jak_+%Sn1#yy)L?LBSV2qjnZ6TqS zgw7#?2+tfwq@=TR%+7^8`wj2l4IjIN*?yNa%ZQX^W_p4@z2E{4-!#W5Q9`X*QaFRj zHChOibWjgbI-=jt5TZ$uW=JV_7g7UmTz>~n)@UqlP*bC1<_Jf(!FC~?YRJvbzilA2cZyK^)K207up|H;oo!;QbZ zjprP5INbO%Tr)sf52eLM5u)Egwpz$Aq!eXUe0>1zJN-vbVVe8lRcw6ETPPmfSUE4F zOCA%5=-qN754`J5q<5^}yCeB8pJnFXFXt(jU$t9A;+XJ>TO+ac+xxfQ*@wJ|pYON| z@O37zRyp0aK$xIfDK87kD8^+yr1i`$9^#H? z{0`50?YoH3q`eNMH29!KA~f0ygw_N)WH4^h&?9f{QR(+;^Q zIqB)AaQ2^E$Y-;R*0O^b^qy=d=e%#N=6zcA8@Qmf3zaS>hy_r$DtBZ?HSnioFM)QD!B1Zjj2O0Fl{ z%SvR=l$gGyZws`J(B2Z%1Mrrnt|Nd3mL>HeMhBKqD-6w=B#8r@?cq9g=3?wzYu2Gnh(&t!JVswf2A@n;C z#59R;^Vwa&my$KI)}2* z7#JW70|FV)Y>uGf2DNyQMtukd>J=sKe8Ij$l6gy_LejZ57SFNgz6G^rHMfr>u;y@N zw}&$V+z`qZNUfleAcRDsh{FR%Su|<)T|{kWr`d49>$vCDXD$GU$7-#szr~&Bp1c4c z!j%UxdfppY_V)KN_WD0&;JIfY;~HjWYL8?8Y_{s-6K=86?7tqwvsawUU{r<7zw^N7 zFs^*mW4?axX8;(9m-6ftFMibhzj6O(7e2r8@OM!U2KK9Or>%JfOX~*#Fq@C_iyc?* zzOb_kpxD;E|A39>_N%HfebSzcMEq9mTCUx%6sE~*C%NfQZd&+z)8(6Z(dHK+_A>!9 z-Insx*Zh=;?@#P?`{v6xbMt#|=4qEcje}l&&>j(qb*%d@UnB9e?2&aKY})7USDa3E z-<=CDmEkkbC0MqSa(p}OAAgthu3K@v4jcaDwdh5Q8T{Qd_S)7)Q=RKKEl5|I6d?qI zLj&}NL!4H~Fu^I0&Lf-zDf%eqVEHm`J8T(GJLhc-iim!>jIh*Xh{=06HN9I&9*C5OhXLhiiX&BWap2Vp1eA-j!9#iB1Wc5rc69XDwbTq9_79 z<-EvT5NR}mvT*1~5(Ekx4&kiDS;Ii1K~dxwE0Eff6%H*8)+w~CRUjnLl)|BeB-A0+ zDx9oTvAt1vFKJ~NLWfADnC*0lwIU2diXuZvfk2R^P*_h8N`z4K3WxWQc~5Hlm2;{D zLdEoQ=oBfrPe_JpXrai9s*Yu+Qgx+TUDEGn7;6zy(J9&tgaT87Oqy)na3=!;hBPgR z8^aWnbKJfD27>hfy}`yMgEUS&o2AQEQuN*O7wM5>UqJ4?Me%=6DWmy2%s0XJ_Q=GYxMJ!h%w zXkPmvt3=|;0CWzmF6a!1p;oW9DWL74w+-fi<_PE-M&#H?keLCb)g;PS{GvWa(87s1 zyanlMcvB#3k333nHbChvKCA*C-~9SlDAN|c+oLS^oFLv5Y`Nhl1S^(u=Z}8M;Ih>W zE?>o5o|8L^l69ObQKk~pE43$+0ZkQB%%u#*0ZCFv&jgs%V7ws=8iWBDn<5y*dyBPx zUb(tTV+!I3;WgISit$NGq!$%yQBgUDNQEFGh&|3)toIo2aiXFobyWM{a#WxJN#Uxx z6N#dgX9P+UHU{zDlb0pVD+&~*DCw64QB+4DDV#;*281V!LhL-?(t*YsOCS_TMOLH; zAyHnD1iCsl?NbVY7Lq`Rl-}X2!xtqUgH@J>4hXG4NKFt`n9&C2bwH9 z=rH-p9>lA)8HLxdu)cz!XI742@agrDU(E6zKgHER#W zx*S4{&q}f~BZ-FzqX3t7Xl=R|*BB-m8fAEK1tP7r6j{pL>(aSo- zVFRr~ioC<3m4`8Q{4?43vl|&+yAJNX1603?1~Sj8R;FZGhKdeMKF@>Zk?SB#YnJ=p zdLH13)~sdq2R_Nr>1T7}x(1&82N9e9`~qCouN=}(f05zmzhtlbsicNleehnleJ`#0 z`a}|>Yv1+Q_CNcOH}U1WKLPNl1=dv*!XuEJv-Zu8+V*&F3p3dc0EVL_EN>kAnEH0u z$nguG?`!RzZq^KkIeYD!x#GS{0r>FsujBsKExhiiKcyBle(huWB#3xy_GCKKuhG81 z7xrsEn_D)2Wpj0dJf--2Q>vf2IEZXSLh+Q47(!>dJ-BtN!%j-2eoDkdjsJ{}_641?svtU5_{B zah>ZxS+CnBO*@2fj7*vpHKob$&LaXazJxr5M#7F2D;PWOq^gcN?<2wx=Nw_&BnsVjF2wGI#Qen10%+6gGgF z7NHhEotPXMCLl|285W0gpb61Bs%kLmAvO#VE<@QqLMT+}STZum-~ZdyoO0$XIp_Sh z(P?-07}HH#w()}3zK+w+I)|6O<(-h`tX;hdVN>uW-pyihC>i60g-GIqh<;ko>2zrf zk1#wugt0k6pdJEZxdZPJvPz4pm~1OnrLrt>rNJ13!Q!0&Tdn*n5g=uy9bv7-7>jXb zMMdhXajnvzEMAC;Rck(HxF`zpJSWRCtOubZN+ixyz|c8|3PY3%unvMC!UE2F&VwxX zUBHz;xea6Yj52N9vXxU`@&;b``akB1>u+TB+Cy;tsxJ`=Kh?#=W4IuN?leS8$cC4a zyIGVlq(zR3EJB3PnF1A|RUKcJ_@N~Px35Qi`XdM+OPZ7toby;|z?9TIwBwk@|MzK@ zKJR%Ln?Y$Pgdnksy69uHVAIej$3FLYfF$pgxXe;GgK(ZOP|%xXdc)nss}E<<%7bY% znhW=<)|y(Q$>8WxR5D6`d^@3pq&|d3Q8-I11qBZ0VcC%uPKyRd+(vTg%!<1AMt%53d$oa9n=ZU-GJNt>f}LKTf~w{MN?wNqZ7R{Mu}s@%=8O z-uA6+l(SV%;&Goij(BS6h+LJE%k*s;V*t9GZZ zpTe0vU#d571LKVUm%S!i_A!*j_Ibe?sfZq7^+_m2v|{zn&;%~e9@n`Jl;ypC<*4N; zn6y%Gc2%(}uB_-$iJ1;d297z2<%7#GWgoOedI)MwbQDs~jT6*Ih~oM_&lkrDL&J;M zHa-qziHakB0RLVfyg z5dZWoCNI2*spi4VocapdpZ*f+uP!CJA3cUB!bWBlLytfo4LwHF!U(j5yHPHx+skAH_aY7tu zq<0iWj&p`UNfISVf{-ZCG~$FtoS+dX50TRI+8vTSFY(sTN1!xinj`d7NWS%#W*KK6~;Q*jgIi57d@ZVV~4VGc#!*UypHis8|O-#61X5D5dzt0f{DQ!0!m~M(wCMH4O&-q zJz9e+aQze!hoB=^y^7%PK8^e4ztRB0u!-{usPr4sywB3pevj2}dMl9^h{9EMHbCB< zhN%`0ikSK{pUH~lt13_#3cPg0QJtZI#fYLyYi5$+ryNI8+jn#zs?~@VFJpGwHUy5^ zz!-rO^otx{0(p{r#ngImh~w^hlxDcBwbs|7gV8H!VErcCBI9)vnrj8NIT~F+2Cr zx9(qG%GN`XgW$2#S=Dx_pV)cs-M2Tm^!I+s$;;1K_--cK!KF99oBwg;8ZNuzqhzN4 zTN%?QLBx~xYq4+h?fu?&XDU-T8nX0^rK~=$a#T&nu=R>ZPju`**q?WD1&xFE9?p|W zQd?bHh(_4V{>uIS&t`LOA1|n(`7|zP$u``x*L_@3klt6tjKk%tQT4{-I@f_R)9De# z4Q!{y++Du}msNDCwxUthVFT&|w3;>Ibw^jJCe~n_z*>V2LfqU0HmIR=uwUoYS~E1d zjET(~(KZJeQA&pt9$`J+I~FZk&FZ6%VRLN&BV+mk&;t5hI+AvP7{K|Vi1zla-29K1 z^85kCa1zkA)k->|K*cqbtfNHWzrm)-==Y7L8^d6{w1# z38*(3BuTAWc~0{xC8f+4q6p48N>kA3bm(@wNYp~q!di>)0xdPAcl7eCiufpr5DpV92vz7FJH;e z*WX90*Cz}^OxZ?a5f1u6#z3Ray89mBzOP+PvSbaVfH%DSl_<4mA#lCX;Qze)f6|-S z!N&G1+13YmzJ|rpkQD||Z=lmznCexE)ZP);401)CK|u{GB&m!WXaJd zAP6u;iZmHP6eD$r7Y5>x+R}Asy?=$yN@;3~meAUEKT-vVD8LDDwje9|1VKP^>|lD@ z;1`d8HI*8?0K6yAnlL#qQHTfjW8vlDbqkN#DZKHg)jX^^~& zA%n;40$^tOyIbDJ8~@{Y?r+`t8z0jrLBx~xt2=X;{nmrXXL7cGdpiKDUbYIUB?rCg zpgjP_zAPN6Qg6KVbne-ED9;v__FYxVQ*CvPpt1KG`zo%&@L!XXU|)n9gU@^D;rQT3 z-n-XSrR|^kFs@sT;o?`n`Ej4?Kv|$GCY++*!4+)?bfqke3K|I8qu*;2*P4%Q)hMaq!zR6{aiS=|d4X^qt2EAJgkj8z)ysIW)xrdId~QL5 zoz3a|`6pR&`m->uB+Wa>(qQ^2QCTq3Y!FFLne{2s6xZpKm2DP}E~b9TKaqa?b9BQ1 z(@U##CNhNgNL@oH4bBrp30~$XttrS*vLu(#o}T6~4@ZxT(P_7N)7#&S4)(k!hKC0D z`age$(@#7Bqas!|hI!-28qOy|PH&|UZO{hktCdmX`?ye1I*$mU7KJ3CMk~+Ia1*IO zN=>aEBUL~Y=?Y+Ya6%FW5e`9VD;A?FjR-7)(z=SlNkHj5g|iqu-h*=vDJ5xHkd_6x zH6%%bQUY%*%~~Drp(sj(sM;8HZMAvc(xsgD%xBSz8mM~0|MQOb zqtu?SwpOb}7=dZjn6sK!uRe&g;}AdDC6yu0m1GKt9h4OXap5#N3b8?o)1E+tcq_n_ z_*75?3R{*~EkIhRH%Nje-T!qyvtPIr)9c`CLs&1cD!_Gf%G^~EwWJOL%Fka)a`A^C zonUV1Aq*~A1vt_&MUhpoL zMAtcO^(z)u@~_=`X(Ke&RX5>|t9Fo0WczGm+4CPNlD_%9H}5r7>5dQIfoWHc@!B`9{k8S~zltq= z>$?b7R^Y95)fL?R>N6?lnK``oZ2!z(umB$kss#5+L0}>BJyLDhvH3yTd7H6=j^dkN z`w#MLPmdtf0SB!bV`OBM?%XUcEAU(IWn$ya%oZ(#3=p=&8!9Fv=};mfYxgl}B?9JL ziBe$85}e12f;{igYzz@cHCi(hxUwLgkN!C4aHhbyl3E-Q#1T;xRg|dCR*t;2#Bofm zR>Rt=kXp`16r|K(`~usQwN=zWI*-kZsvf~wj425MP2n=YA%q|dHE|puH3UJWK8^KQ zJ6|_Zmej%o9YmPY;>rpxo2)=shj5m(-K9M@2d=7lP}1XUfv2D-`jlyxBJE?nSzv6^ zp+f2miW;4{7EZ=^;plf}n3|fPNP9>pDEc{=66HbRvCbh>^}ACS(o&B8#0<0d-^um| zH<6YpnGG}ML$D>d_ZK=i-^5725=X(a7-n@yWG zF*7r>2kTg?)ncY!(4E;qrBLn$}Z9g7s zx7%#oxRD>v9M~d*a(WWmnyK#VWh?3Y;yN~5a6Z30b_wf`Tgq*x9>pyu9>h&Y4sp-x z&Y^qLqo*U^^cX-ytJUI`TW;Z&TW(pnPJ7$7dGls&yX`jCuV2s1%*=kZ`@jPaAP39G zH7*aOG*t!GyV}3qTM@%35%9vbZ`|)T>%ri{=bZ)CkHsd_2NymMMUSrDDum!!E6(9> ze($IJ?`M9Vny%8Ja@*&k8{Y7^=ZqewRuym|9}-;7Yn9wv@s;y7Mlr;t)IIyy?X+g)gD=kW_6H>E0ul3n_4j3G@^rlzJC7#LXCXYJax zbh}-I5G-1>h{?%G(llMj9iBXX5`J(0#%|+fRiq(a9y9jbv4!u~ymAe6D(i8oWa4tg`22W ztI_Fnn3$MgY;251qd~vlU)W|$RajcDS9$qUQ&Y^&&az^~3RbLG!SwX>Lk`!&oTWI9 z34(xHtwz7!$J%Pulh-`55Ro1jE7_8 z%2__;EY@Cf`F`c(UUbn#74y;jyx4Vof*>GGQ;MP>Ns@)}UA1ZzV`F2qS}n4N=@#s~ zPx8D{j?J=+nVA`uE?r6x1iazA-$w-zNucpzh>RLwXXXoY0jV+05jGZ41|g9%WVTW> zRlQe#u${S1TJyloUO=pjK!D=d?Z>^G$uxNCc$>BNZ-H9t7L`06}+Qm$aL)mt8(rLyPt-)!D$PL~Z5Efa6cwZuA zh7$u|3bX}_XWT(!*(&Ordqk~q{`#*!!YQY|h`G7lqqI>RS8P`%C-D)bi7C8>q#$*D z#L7cS1_oei8w3TE5uOGn?gAwef%J}`(9n#a*TqXsBFm}{2~`0QmlHTi^MrNOesUFN zq|PEVc4(OXP)yjhyz6Il88=cidv*`K|m?1nh?AP zQ$U~zf*2(PU;LNLxaHfwLyI!-|lEIfO6j{Q!1fqEwg^Yq6&E=MkU28RqD!-lzA zcT=#QPIvIbEnfrRIV)exNWA~@%`2J@EmUsp-jDNczoQrc8(Oz5d|o$v+@oIn99OBM^M2&ccXbd1G#ZTs zKQoTwg>5^pX%t0ON@`i|F(-DtUv}=h^F6F}<(}_4m!c?I@L8*cA@hiHY1erK5XbSt zyxrTml~R21i(mZBfQTRc=tm1HwmS>(cK*MBMrUSr+qQ7S?j_&t;ce{N*2CL<_;)*< z%SUQsZ^u8JR-jOU{4We%}|j+;YoqWAI4*+V%UXsi{YONbc3b@KDN}K-Q6ERooiL81HhFv3RYkg6yKrPp|*k0w~+p{rd22 zLI}=1IN_;vJ(8f_Ji*o`|lgOZwj*Dw`(!4-@`mYcl`Vif}H#A;z z0i`sAI;ObwF3bh5B06|A_Tn$02L}l992Y^fco8PBU?T_|xG9{9AP*3J4(kmva7czo z%`7UYk;NX_P0{HXjo7p8&O7=0kNq`w-hMwj#&_3QvCc8E{Q=6^9`Vo+&Kh*Lhl#6| zdnqJJfN&w!^(d_*QZ=I50Nq|nJ~fFL7$sARAQTj-p*gUa#ft|q(HLXP7E>RrQS?)0 zw@*-(vm~_yr2~u;WW62+O&o`8+d9t3qD2gkjNp8UktMCkY$>0z=8fNLCt6=g*^6e!i zNFZ!rtiwo%0)^HJYjXPi8EVZ40?=d-mUvNv&_m|YfkL2(nl)yor`a~KgL*Sz#n>pV z**#a)h6b9Dm-J?)+0yDTIqLCsL162c-VF7XBQ!$=Q#m9J2sPvd(g&zaBB|k(gG5ym zSqI2;mQqCoUPDM#aPPsn0-p@vCm$gA$b}Hcn9?zqc2GhgZHY-n>79KZ?QIXRqBVhA zv=n8U1TsVgF@4=7@iEqd?YG%_&pmV=VP$hyXJMyvkfsl%A@%1Mz108D-h0Mdc2sBH z{|Y;ue9lcBZwIv!$^isIfI%QEVOd}>0)qjA2{tdhj6DVqj6G(+W{k%f+t|F=*ualq z0|N*N5E2YR1PK8OjasR5-@dnRIQg8Ns_Ol4I;wBC)G`8$dwsd*o>RN3cJ10#Yt?$z zdaR(Ar6j#3)!HP9%SrN-NCF}Szk~}TtaPZkMXWGr=X2Mcqc!+|5__PHZub~)+QXEZ z1ATjVAM@Jy1T!#=89W$cB&O7&S+5uS27(hrEYJ;2;Q{uQk+eg>>z`|rM< z@+D6@X0nZ}I(F1y&*ArW_?SO@JPsd|!#^KuynrJV&%+G}fL-PuHi#!arm=b6#@F!I z-+v2-GgyEAp$}l(sJ-WJ`i&E+Z#-H>J(!}I%#oM@KV19{XOBPSQD6U^y{y{^>3~2FNHIu8im4L= z;$cn@3$Qs_X|hCMhk_7Cjz`{Ez}<2q!86Wf>D0?8Sn!>PbC$u(E=q$Gv+V(Td-qVQ zR*~8#w}$Ml@1fEH6fF!SP(~yjTyAkj5||Qcm?P4dNNZx3qccf@MwB#Oxd!TfRsi~^SC=5PXnatU8)Ix@nF9M4H6ss*ZJV+f@Q!jMW(M+Fiu z6%2|7(iC3@6n({@(?tu7Un-4KrfNwL1jJd+a4?`+s^CT`chFYgv;Yib0wWzkpz&PD z&mCDD9J&7(enD`|e#(u0U;+>1&W$(tI$= zP!tCA=n%>=5Xp!fQ8}E_kR;^wgdkBPLN*_q5tR${?!Om19N=XM*c4G%jcWKXGlOy|o_0rhAPzt6 zJg_dEh$rHJ$N6!U!(bkTvoGZIkKKr_9|_;|SFWaV>Cf@t8?L2!-6wHL%>2jyku`69 z*KwwlH^-}yE&n{dOn5AmwAexJ`hG=es*EuYSXQ_no%Ixk-F9B$n45dgll{lkyi z7`Sig4(?qVLCG573eKPWxyN)*vpQU(g4C^x-%JEvMROt8nN4!f1=5!DQ2cek< zp3lRjR4UQy^_HD42cE6xc?<@l1P2c{Ts+SsilU<+QJ&|KW!XVQ!=v#;gkgBFZez?5 zeLMUe{;?Smn>KBt-|sUvHg*th6ow%}2!bGBe0-e6#YK9(-lKvuDW&LkyTozK`1m-! z?;izcIxsi~9%P|VU~FuR+1Xi!!{Nd9(=?^oY?5Ue6B82$>pB*k>F~ZAV<;2~RI61M z7Z>*jDk?T_-b}4l!}C0v%_hF@Q!14X4*s1Jcj9>D2XKG~qPU^R*d=2}{XYHDX`0^~ zS+(0gyq$C3b?zf5zyh!4Aw7vrj)Z1xe)ncnq}cFl8y-;s7UO~oF1+A~iFjaq7Z(=~ z!j6`MGaWd^KH#b?6bc97NlB6%JgF)a3WQ-uwOXa!ZZjMXj|*qA)-pCW#-2TU*t2I3 z^?IE~qj3<<DXo28{Cij4-=rTgcC585B4pTvUNe^Rd`uG=OZ#uUN^ zs8K$D>j1yRvo5=stuw77;7kXgeS^V(YPEXAM&|oIK@d={j}cgj7Zyfy-wKS&QBsmS zNx!*|qRglbJ%&c$WP|VSLSA?Yi>FHAB_Li)$cbjEk@utZ(pAk5+$)rPwe&wvxTO z=gIP;F~w2{!g7(~>J=>AaTn4V%GxK1GjwFI1&c2xu%{pnoU*?w5&}#$WXe^qL~WUGs?XwTxH0FDK3Aqpi!XqYwpaN-5!DfursuW5C`mx{xANmODVXpiGr+4L2gFqIUC1tu)!kgWK zL{Zzg8ft5xI|Ern;^mk@7cWUkeM7D!ej4KIKDcOq%z!4(n@C?HwE_YV3Y-Psp@yTZ zWg{x+46MN7p;}9%E6$;K_4BA&LG_d~Xk%)Qg*}gBMhbb@dhJcEJj#GL zT&7<0W}4T1a)cPT{Ts(Dx6%{5=RNPCUawQD)s8#nhwB^vK3m8hHP)R@ho$)@yZ-xQ ztFsa`c-op5aP!WOvlP$rp4(o{!f+HDdCjKRKSuAys}C9xU)cIVp1xlBllUA$6&YdGf$n^B|QRNTRbwJ^NG<81SbMrA95$}HYyE!R` zhTi^OK_gp@GoOto}SHH*uuf7JCrFc`TIOXp?LHS9S0Z@I$6|`=;p6zdaE!o@* z?VGOS!PmZ!(>{Fth=l1F^7gmC{l|KLo$eB*?+{v(86Hj=Oqw&dG)p-*I58Y4 zw2P35m=Hl0cZs3~!?*rE?S7j{Dag_csWoX5Q=6!e{?!K%&QJ}@=s_PFg(Db|%*peZ zG}ZWC1>z<`YYIKV&@Ygu{ZZ;o5-b8~J@O=>tTNox1hVbng%SVjPydqs;OHzOzLt!S zO;XG)X)nbuR0vnCqb?P3cOOex7b#ObQ9uScM#MN>BFS@dQW7Ch0#;30yvk_^DJiTR zKn5ki?7k7v>!MG)5`&M{;L|3HccEN@(1u9*qby7!$IwMdgRuhL_wW@62AJ4T_EwS( zGcqA4sUkx3$g?Jy$naeOmuL9GVx7fgqqrK8ha*E%`V@sBwVlztN!2JAT?jNiJev^9 z5EWq3jXrFf6P_C@CtV9+Wjy$zs1KQ{gjPig)MTxHMS`ItCu5|*mS zN{AdJw6<JnFP9QIg;4?-mWTpDcVQ=m@|lmU zBvvX%DE4V|@qhtJNO0qW?%`Po%CN*W7%}M#M=uQpOl#AN!75=0HF- zjDo0_lfs$;6Hl99{{PO?-_~d0)&(XmJ33Rr-Y@RumTPXorj~G3$WuS@)Pv<#Ua^vy z>u0#_wYL$^#LQeb!#7^|4W4oRGmePCczFN+GfCcQ^U#}Kj>}SHROF0*{TkuMBcWfl z%dg@IU$~unpZ`?S-P`H>-!HNFsSh*$%dh;YxsN~vbd%O7`JQ+|4N|-c36&ldlMcQA)FFyJ?5XTAm!hMuaJ)6wQQQ)`=aR|!g zI%(QtZrg*Lni~{DZ0-m|fZDU24q$Z|FK#h@#u-dl$1v?7gvQG>namlcZR(XWzLg|d z8>GTW#Sm~0-a}|LeQELY0!&VgATqiQdCH(Sjxmck3sMR4EX6k#8PwP*>g?moAz2llyQ?%y0?3!O`Rz=YmlX%1Hge!=hb=M1k-Dfg{0l0z`A*U*i2X$qr74z#lkpNc;v!DE|J2boJAN#syw7g zpx{$2mhc->e11=hho(=#*AkQUn5a)uD;LQHGTk}*i0}CBc z3JQf06eu4;nv)F%kIVXXVE{MBkKg*}jZcmEJWNhHv+KBJRki-8`~1@+tFL_!Ji7z3dz8;&oqs63?1`F;89ni%b=!@m0v; za4+BA_cgw_?Vo8Tql}0puf`u-`f);i^t|5Hy`P(Q-oXvqKE&nIFXbt#u3}C3RJ8P& z>22k65B@#3?D@>W@^8H0e?KPp@#?Ei>ar(|h@X&bV8d~Z2%B4We&SHz^3Bh>`Pd3> zKR?3oc(@Ufwo|_K@^4{Niz+HE|Jvo0Pdzfv|EjB2@!Z>=%U7QI75dxz%zkN>?H}IG zhF5MlX8->)$>L`|ifN4k@>l%kTaPjz4xUP{SjF1k|5F}%-3v$8efHx&RYpXo)gc=u zcm+)&`Uj5RKxPO}lgDkm9143EiFe*lu;Cnxj2SwElmeUQgyl617w<&{PekcQ-XV=K zw730$(pUu}3y3^MXoYef9vKF~(%dYI+aKV$QV_Hg@?sGti}1x82ww6!!ts^lSw=eS z;&gy-B*xPWLq#cd^v#H=ZQuqtAxQip6+qnjHG*$`7f~-@nsY3w64mhvx)8zK9G*$2 zSVxyKHk0HoAv2CJ*W?ogmL@0h2AaY{370@|jXT!(3psLEvGHhc*dLXRO;6LbfzYDJ%jg82Y>C>Ad_cO#Sz_gA)X;E>q!%V9y{adXnDH8-i|! zwPA!Rgh(OC;zfK>Cf63->e2TctEAwrZ+?^J&pnUv+DaT9GAob{2v-u4(cAqUybVu( zRD^RT&&fL5ptgZQyM^ydv>#!eMENk>y@$B9#Ky%g#2H91NedMVoRg@ih95jW@eAia z&I-BoeZo^tC%%6($?hHGoi@5sUEa{zv-7ZZfAvqS&nGI;6pUX23*R~MYlRS8wei(_ z@b2F`_}!yrs6LjgD6Zpgp8XBp_VugT(fJ|9W!$*qqujXT*jazpluzS-UiwKk)z4e@ z_sdrQBKJ4%V3_x~ZtDlQZtL<)+fpcg^ZY;I>1$qa!u=kzPLx5C<2RRT1a^>G|CH z!dpkzeSF6;jfgWj^Jnt8D3*^q8~*UlgP%(mKKZzH9L{o@&CMLQtsl4ez9zGdXtIi! zSUDm5`XmqKPKx`2H*eU{|>OQ}>>k`KBV3@*N*+f{CdW%=dCMeN5V6u;@j*f_d5My&P86)vXoAX50BE2HQ%V;eu5_u(pLV?D{Nfw7W@qJy+IClbB9c5dx z*5V6^ae_=3q$iOgK)Z}w>}Q7-;PMP*a-2{I${5e1H}JXlTi@WpEq8P7-aXWWNA}{E zQCqhPkC35-#HQqF3P_Z*XitzBLGB8K+Q-<@Z`S5mtFS7>+8AGjiPRq!feJB3@MHAO7wmJn`a-+4=d;AANwZ(8H-Vx>%()T%t4IB#;?#RD%V9-26@G zFA-H&BLhp8Ta>OKO@CzIDIZb^+93xyerjn3KDC#=l&Xcqwh3zyT1X5E;W7qUN=a+% zSQU*#SVNp71TG+z27xAy0z6ZsWv!JIamWK3q-cGdY zT>S9Z9*Hy=ko0yVy)tQ*j@ZN<1W5XU$9Pm``w#X~ixa{fdmvCC4XW?JNknX+8j;!o z!(pE&`q3H_8-5JhNAbKT65qcWtfBqY8yLIhCCip;edW4Cd&0#}{fYMZL}lYEjy58E z6(W#0ECuh_WTIDX_%%NI!~aEW`kdLggtNwvy&o3#GhGYh5#(|YmsO>W{L|0h$rrYM zkQ=srh%HOEW8INEu|RU>*pqn9x|eayrq`p7!*czqvwxp+CNASs_x}~&o&5^2ITD7d zgvV1>UB$0H;T@bgwtTj#Kt)KQu+C8MD$9=HNjYgm{KVu8j?cqzIF#wU_nt?zGCFSg zEq}I!*7sYaODTK5u$MJ2SaWExyYo=$!m%eGAA)i?55;h1_?Y|uA62RnmX_mTIV^v5 z-aJ0fy=fmBZ`~L_Zd*TYvC?AGKK((Nps*682ht)i*tCl@A-0krTRkRcb}{?CTUhtZ z7lR)_79*vHN^{ELB*Q`-+nJ>oFX9DbctH^%HP#yPxJTCC2ibsNd^I{6!$?J0Wthy7 z_1ferpinNeFuQ|qf9*!Dv5rdICW}gV$^)mMQAK^?pU5K*^E>Y*P^0C?Qvu$totXdq zHvH%OBFR%OM>|IfSmon?{Y&`oeFv=Ags7Dm&+cQfC(uCvi6$#ahzwEepud0?f@-P2 zQZ9%yg)W5nY0B1be~X>lmk6UVUiZe|WVvJ%|MqX6qdzyx#^Mzt zY|A4PK3F@#jyuV^u@x-d@jd?VSDr&@e3I7uB3W~Zp(>*CC7h5r?NJdW#-@FWjUqyL z2pge<#kv@|pTSz8M#%&ATfkC*F&QSwky4_qhqIbyESPC!?3&-j#`YY&eFLUn`$opc zSCbn7N>E^wvR29wyhsCfzu}}1WI&obJS9fIS%*GAHs+x1V&=Z|e;C|w6Xo-!=@rNM zMC;E82Yt$ApEU208$mvFL`9!md6-h2L7I{6*~NIJh{h1-LySow&MDUFl!AcyU3(aG zyU3`7$`(gK{jny%(U>fw3Lz!sGuLxmT&^*02BR!lLK6f&dC|wmCln#3+hM8Ip%7Mx z-HFu|mB>06fG7JM@kwJhDIb|ZG zQaFat8*+9%;D#HoW77qfQ5{=B++74GaLNz_K1Q8Nq1YsD-B0Y-(Ls$MEFz`C?uW-^ zojqtW{HZ6mhB z0G@ys72)6dkKYY}MiNB)-eY09ac1xyCsLa`&DWFv;8yhX*$_r} zW(W`MK=0iF-@g@i{?l=DGlcOXB2Ho3ZaDwq5hL*2Ze%dYn9SI>um>4QL{F1ubyOtq zi)9EEK8h)8Sm+NC{XY5BX>7Xsnf#XTbJ+#wkqicW<6EyhD(&8{yy$A4_kyeG4TiLL zY^U5P(4U_lrKrSVETpze*yf%YUI$uSrs5t+lr8Mfq*QlKf~a!baLiiCz$Tp&VZQ4xeSdZGn? z{)aUG`yXR{jk@g)q$e?*eYoNjUZBaF^W?ryp&yg?TcpJrey2lM3xfVW#B7YHdYJhI z^4b{Q%!BxM-@(!oR#MCZUNOCz_RK7ETfUF>LyYgC2vH)((=eM3`C8l~8b6iu+>o`~ zx;Q5=o=+fBWG_4S^qp;1sIs@RdT9G?1hA?V~vu zpvI?BTI0tCfkNJHqO6xm3@zN(^l%!l8WADB>?)~AtN1j+J#p_@528v~m&0qgI zyLaxOch7e@{afFp5mYd1S7G~(!P0ho3MgX`6bP)rg(-62zz+~93 z`!@C$uEs_MR02XeGHFTU1SJhBv4qtkMq6Z@qr!+`s3>F(v_o0PP!>^U$Yknq)~;E; z@#&9p)ocF?Ka%&MvkbC23RmGPXN!B9owQ*J=gCbU%krytkBb-CmNoWW_Iz&Tv#5YYs5=ZRZQkd9ujL#gzm56t|P((#Rm z-VbgkUzj`MJ7-7ltV@$4JO~I$<+96~%9&3L0k0_jZ zE;fnj+;Stk-t{}=iz7Jl)N9^MxM9;V`})%=lb1o~fg|H1LS0xk#^5MpPWjZ-#G`7b z8k~6iWZAD#_AmI6+^45}HrCDt&OUKtOGgCy$OGJ!SB%E)q?|M&e!_#Oxq>VBGDk-^ z?fTR%%y6{mO}}{hQPns7%hP=C&ELc2j+rmakhW6%nh!wj+(U4atsmUV^tIE+448iK z{SO{mWS%j(Y?&*#0{t^O4bJl6&Si{<#?{xd`@O%1X)V&d^(G$pwQE@Qmfxdz?nQ|G zX@ujgBNC#0A9~+N0jboO{M9!cx2+%hyweJ44ViFw!yI%Ox#A2M>;;M==24m4146$ zD>(g`KhHV!2Gx3z#l3R})9)TGr=5Kcn@)KG1^U_BX$Y{Dog8yZ;_kyN6iWV7TQ@!c7}7 zLrq;rxWqBj&@6oMOO#4Q8jU(K76_*hN@9$_OBCxVakY|UOHJxP!3!7$8Wm?~Coxj6 zCIYp%2fM3}?Di35pMuNKy%f)d1lhRVlrDoWcet-TYwT> zQe(L2g7aB_&UsAMYkcAQ8;LZ++21aYMt%Kh zmQ!8{S^KfYNBn1$@k>Tyc2fR*B2Ny%k4COy`OyCDAKre*IC#mUGa`cVfECYOG1~YN z%g#?83i_J9b{c9nKX+>;1ruc-o_{kE(fh~PK=c0s79e>Sbx{u-1V_PA|JLW79(;`p>szy zR7mG&CvDQK$6(mOnFN=|m~?<20NOH4GQ2ngsY#Lq-}ea%6}oB6>NThGx|jVn6F>M4 z#>7ai=yrM-r6KSj8-Ut>N?NQzV*(nhp|N(9^FLQGh+%F!s0_-{D7y**TC-pW5SF1@ zg~cAG3}Krw)J2RZ|A4qYnIx^D|{+`&1=mir!9mRzS01lU2J zR=>x>?pZ2+h#ISsDljHRX(*4Cpb$V1(Wup!s@GAW#=3-@E|O%FO~@rk6BA?^Q9i&o zU7|r3dOafJ@UxU4cNDBar8(XpMh#+gGK4{kaM;Gr`pA4p!KC>4fTBn!hz#K*+FB}w zgfnU$4H2NuU623y&yl|CO_bJ*BdcZn#sr~FDAv|cIAar)2Y*QY{EMipTtU?DP+q@* za@M1K=0?I=NU=YpcE%IXy&Mrm$ngr3rHIq~GE?OSHBS*_Ii5%f+>p==37tWv36V`% zTMXEwavC0J9OW>eEF4iTs00yVp5br18!zr+Duhh9V(Jd*p)_ChpVgwrHh2Fc9P;^0zci=$VY5 zK1MO{*?#?pxc{5CaN+zu`2Ke>VFXC5(14G&Zj_lRv*bdOsK+$jGVbw)^uuAKU;uY=1o^5(+9GOAjqarL#VdhOfP-3LSXPLpdoHT9IHy-6;jZ&#j*4@X@rj+YzNe7Fp zxakIR&m%+QJBRfYy>3joQAegDmSt23c#vmcQw}g~lL~MJ2=_ArXJ+)b-`gMbDWSat zt@+W)wE&_~#a~(=jt2-`z{PDky;;hqo{wC43V0g5Zzp7qv1*B^QKwXhIQ@*}jrN@7AE6$xyX zW28VBg^{Cpjx^6OafsGvK0g4KjX+)ud7KSu8)Rc#7)JN*d zmo)$YAOJ~3K~(J0QXyPUm>9C8Nl>1|>WFfGmb6?(%q$|K9)uoZsfiRCX;Sns#g%Gg zJ2s<~hc!7eu^@{0K}6PRVnYvwWpZ(j$;nAv(nAUlBStTk6$8Z6Duu(sFZte?9IJM1B}PjhMc)9cBVYnd9a(wLeiF`6x({v^4vgjV4BA=WS8 zOoq}SP6imE5JG{FNSh;_hnhSCTDxIr@SKkucJbD1B)a)iq`SA{{^ipIeniI^oRp}u zE`WQ_K-dh`%h2H}!X~JGMutO6ff6~=YBKF1lwgo_DQr)8>FPCn`Xhf!GS}g$FMTzQ za)mfc$sg4y6VdC-9t)s!mZ>g0!`bAAI(MwC}%%XQUCq=FMPY zoTqWtAv23XAqO!+Y48>g}9L`FsY zRci^>pYo{kO4k#2O`n@JBG^u-aPy_NTM2igJYe3=h7^MYPfn4fPPgil_ zcQ^C>eQ#yu3tq?ibDm0A3=yJ8Hyxm}5tFkJ0U2(@5G@2k1e8iscz%c=X5qm*`0A%V z2upK3`^uM5zy3P7=|=SW4d{MMchEv71}!{NQzqQ70e0_&qy@%y@NrTSn4 z$Rrp6(t_`gJP>I#@|$W0CIhV?me5ZLR;*&8nb2-8p*5)HJpCWsj%v5aOCjOXKC<}* zW^0NIFMl>AEGruoq?AWNns#s7%|&O$43Z|bN`t$%?_%-$_Y#t5S2Vgv$3fK_I6!iz_)9nxi3o8x&t5{JnRjvS#hk*Dym|EFvm-CoXL#)XRHAs~s0hMS{FU2P%%LGBD z$qE6vvqZvYXbiqCjts*_ov>U-^g84+!6cTt3c*N>^f3K|)X%V<#J38UTa317&qo`O zu|-NK>JYuSM1SWTexX2Q+B|U2T}QnyQc9|Upx`O;_9DCPxtlQ3$blm_DY+`*i5%+^ zOfFHRNaK-^qg{fq5-Sp9uLr6GD-~vD76&+EVD&Wq&ijdf@68N;_fM!aYB=YJ3j(&? zN4|Cy7#t+f!nzF z>X)J`_@(gm9<3$Bjs8L#@rH2p}k#(8f@@=+!=AVd~1D-~R`oU(9 z9(km2xj{&YF+-F97ghIr4Z*n_Pd@${^pyp;JAHhEtN~QHa*$N?(a4L6qrUw|lgZ1V z`UKeeFDKzm2W0$`Q5L3?LDWBD!__V4(?2PXS-!zH_!|x#0VInFLJR!riG$`%V#wMV zx~PxIIBkuk_dt)qo&jcP&_zvQZGqA$rQ<5VZ{&?!#(xfT{I&DT$42}pOrr4$e%2P7j>gN*rYTiEiQFLL+IH!~?xp4`h=`QTP$X$nyq z1qh=I^au31F*Z=BfkCWWhaVNuvooWUY8i}-h}bYnM>H70mnixeQ0f^q@5uZ4|#P=YKO;t4~fBE8C&Jg!wvM@p#iIs-PDq;&&t(afEflsYl2c;@& z#;a6=8mB$+Dg1x`_DTNWU4L}6_b$#cHsQ9f-oR~NxtU65o)^u{;LSfkE=pKZoKYi2 zcbTCmAWB7K(q)*WM3o9*on+g4l!cAXB z%gCoZFv&D`mJe&;QTfo5xFb*Jb|i?{=1|x@+(0>}z*O zAPbNL(JQT(YhL1hw^K@rCc$Py48i6IFIYsgBr z?(}l|_Fd}UTFyD&ZT|S4PH55-S|r_B`qQs^rE~kFutZ?8NCx^ zPvbisLa+!M$gQQ(0<@;~kc9$-!>fRH66Xv`Nn98sL{1Px1PT#NVnt#^>K^+s@uk1K5vLWI%?PGW87m@32A8req#{O(@q&;~ z;)R5)2TdQA8tQxsHCVvu5`+UkAUka<`P@A9ul)jYszZ14DNq(TBEm}|HEQZ8?D7sq z&pr#eb|c-VoP{h(Y~`UliLxFc10KyF8oE30<@Cw5Y@M3o);sUyo45TAUz=XbhLcXm z%udr;cNAGZ0pkJHaDnlj?bw~SW0o3@E@n7S&%if!!O99Y^E6SSr6n^Rd_Be#U8pN? z9q0(c-T_i|F}(?NI5h8PQlzGRMn3Y4#KABSZ=QPW0|-dX^U0UNiLZpw4p_Mj`nSU1 z9;g@Ex2VTS73-mQ0!(d%$t}>?4Dv{qdjv#0*6LC&rBDB11LzJ{oyU1x$`i|yU`qzS zIg_Sb-^=>VnRMTWtGesflM6|#m#7z$euhS)GXVm$Ob6%uAgv>5O$-j@G_f;*^`Lhx zutt}xneH&UeLHhs|2p%fVvkY;(<6Az*o_cwOeaXTPHg1+Cpt_oIJoyN+<1W?r>PC7 z{wlVR=xz=}2hKyGC}kk@9pj!x+eO04I*P79>Q=1M`1aFUB^M?!0;RwKIs>1<>MEEB zx(l&MjKpAXT5Za^X|*W}$Sh|@0#eb8E&cHT=_A>Mq|%PgY?sCDxANf+{KWy?nd*h@ zeD))Mh8PVw?P+Im$^}p3zHN6=1&8+#yP8T@nJCnAjAd!4Cn06p`R9eh5)U zOh+S40rePsL}i*7BhFfa()hYY1c9yvF)N4yw2%n5N-QM7MS|bw>J-UEK@(g`oX&Fc zN-}=(X_&=1#PSjahK2^073f$Ihl-#FI4RIghRC{DJ;F2@R@UgEN7FP&YskDLDsZ9% zJYKILgF)&5aT1~<(x5Vlj9r`$L}}4l<7$goH;Y;v00CDROk*HKoHj(QsTTJ#v9gy; zlw3D^6q9dw6Q`d2bh@1mIyjcASMZh3f094_%MbA4V~^#Sr4GwWJF%6+8-ucfkOzzs zj7Cdr`|77@Ru|dz#jmn+#~$|Ha?3*}-68OScm5L3e9lE2f99EdAIv} zH7tGYi;U{PXgsExP=qpLrq0>WF-)tRp4YH#5%%mQs0KeVi)b{R(IQT1EEOvDU=+Z3 zLRlllG_ok6b~L_5h;Yc>)1-j6Ov9Pkfi)6`qJCrMvAM$Z9nYl33WuDgAY6qs5bPhogyd|n+|LWBcCrc!PeD?~S(sP3Da)K|DwQDJHqCz_h zv709Bdsks;9#_?PA@QLL!J?^&clj{>+rNW`tXl4?#Q}bAVfE90&6mHBku^DAy>f_&L&WrnTy)%V%+3!O4K3Z=K;}~5 zwK71HR;_{u=|Bl^4PFS8%0NbHKqg8e z0Yi!Kff8^=5QWDpkV0Y*M4915MEH!T8k7+Pr&BOqY>2@l$0GequSDK|AEvH|r6O|? zVH|Gk(Rsm`oMvG=6LONToplDYZ+i!4pY&vctFfyKIGMAi*X0KTxVbuEeTIgd{hV}|md!#g2)sTxk$%Kjt zs-i<24k!mhraFQtp%YuTc0DYv!tyYg5Yz?+%P<_$D1o2up=yt7#)(z(0c8WwMJNGr zjE@pE96&cG>Mmk14}%qKIP@FOmvrE%IlQ-j=+>JqDw7M-V?{)Lq>j`P5b-z%5|?oq zr*O)C8i~VIPb3Y*!vTq7G`y$(-D@PClBE@@4cB8O%Sl_V4n zWg=cjkb=g0V$|fSL&$~@O0+0Ij0wGxQEagDi^OIp0fU#CBJ1E)Ac_dJqHb0x!jNqJ zG3ee5_yJmVag~Q45W#{J#N`pAj!oY3OI6DpNIJ?8oxsHiwxViQF?k2$EyOWUrknO) zZEDhm1Rub(Z&g*DSPGpd&4l%d@elxc(kawq$VV_PFg=3`hP`_iIXXz*TAoU6MqD+& zz+bWd&V&HoG`pD?0;c28dKN8nl(ZD{yRl0{qK&Ao0RjXKjN63g02m&Cs4=GXqcI8WI7cl7>P_5E7Gt?&QQWODvAhP);IrK&T9|0%ABXVj=|b6MzQ3C(S+Y|J#LIt_r=D~s{rTPG zlT$>QQ#B24xyE!Fp8EYSW$(6c@~KaJj+cmnOb+p~0135gP&@DA{K*;4KY9x>%cxwy zS&R3cx3lXZzcX7X`O)cF?954Y1GszdW;h%|rjiZ-O)+vr4YmnTX2c-yVT{g7kOk~B z8_*Hsa=fy5-2%v<5ke!Q0w2&`B-YA%q*6$&(X}BemGE!l38BG}uJt@Rtj<9iM6@W8 zQHe;@ihNuXci+Qs4E^A+ivg=AQRiMje)ie;o!g0b-ih3?4KvzK$RfId97$*6M(RA0 zS%*-Tk&1|{!gz%y$D0D_Y8WdBD+oNuE=Yso@a*)gQ}Da9aKD2O4Ia4_rg}yM_WCUXL35Hb0t?Emi4CdIFDEHDrPxiNdT$&|G+x<=m7qDcwqb21J&_5 zxiG!tQIuM$Rfd!z1x%sRBs^Fk67l#-B9);TJ95@+9=+B(c|{);Y4siCPl^$l)rB-~0yRs;hAK-9X_Klhd;lU5B+Dgp))gQE>%7 zx069jJmBY6P#T0BA>@!um58E- z#$n1C%Gn%Z%bKW=v>E&8DVYe8_QgqBln@X?w(e8y_ePc0fnr1`gOH%C#jOm8O9Sd& zK^_D~@AEMa#NZGy0udi0K}Z@I$RcEoPqwoijdtyMkTKcmk|yOQD1=Cw2CXE)RYaS> zR|w+U&VoXr5z!Km=&~RvgK8pD8Da=+@LB>0A&QoX38)|uLJ&nD=yd%VtqD>M61^0dFpILY8R(dmQ(~4K+h`HtTGoQi#{@gz^|Fm90 zN-2al1XUqrMr|F_o7Ta~0EUZ+@e?YMWHG>a1ijgm{u~3*J3=6t261?(FEmZl zFdS95?e|d4EznRC2SfBXzDDu6k1^BVgPWN_7dgf^(Bx3+gQ z51|k5X#QxOR-Arm3hr_6l^VWO!|fL4{DZ%82UD9BoMzyh9L~z&1Pw+U`CR6en>K&*s@YnI|84p^kuvCr-^W%NuzkbIkDxK50wI>!Gd@d05@GCo5ih^p(ITRPanAz{Y5WQgo#l8>J*pB8~m!=2m z>E|*3AAT6W{T`~ldsw*TE6A(pj#36{O2hWMjK{g4@2%mt2 zZ|}@DNRuVkqfre-yQW0|B@iM$c+4`TKP#!2ShpUQ`-J`qQA?x*5p4oUTBC{_RY#OA z5Visxi7G=@o**q!7Re&l1=K##xAjPCiAo|wjx+`$C?UaUA`yH*3JI!2_!MKsrVP4WnG-lS zB7{g#DX=X8d5@ETmI?EAx*$owB1V+RFrh)>uwJ5tMha-OMJSI5B`z<>2#gh)V;+|wM9##>aTSethVGf&}LukOK*yoAy7U(WWcK8m{YM%LW& zbtWb=M7M;dgHtZ8B*r|kezZED&>)RQX!EFeyE6h#HR<;9-jUC+?{!_ynSNYpY!<{e&)yvcLYQ{acTn_xQxqqC9h-$JGhP8xRqPEhkICH0smcY z>#t`$CvXB=*~%8Su$j&1BQNbi)zgbdDL^=wH`c1AGnqlhpe9N%5|m2o2QDHMG%`{; zl{Rk*kLeFs>Q}5@^5f)}zJ{3-Ph?6)1QJ4|ay0};5D^g~CMcYWSP{vCKxoD6rWw@6 zSrE`%atXVi`$BepIqYBs zZI`HLk0PI1i>xi!L7Lp-LB!MvhR|BRM$n=aFq7B_8Pk7-Y)ALuLExcs$YmN=8c8NJ z8L%^~Jmh>vpjYOIppxT~5@~I!aR?)!4q!UTg-7UgEYYRMb1EGNK24Ur&m#(%n2m)+uoVJN5Ruq|0HGB~g%=W~J;GXK)OgjdEj0nzZJCZ> z!DNZOh!QVBWjYMh%~A0kgW;9lSz$Jjyx~g>qHP6hx8FCYedXw zgn?Gl;05R)h|wW)g;*J|(66+u(KhNQaO~R4-?n-EZP#M-*!f>S( zAxmPghzLcNQJ9iO2{O0DVEd5eW1o!u^|!F@2cAi{)h@f*gCA36o+4%lmElBcYNJvp z(n?O0Abd^ZR#8Z_6ktk@I^#*O^|!fy`_HoN_uj$A>;IW@T>x*8y&lCl#yS5~3y!775zZU2_a9&w;JlP`T8ArRjd#9A{;E>k=+Ccp~G0u9pDhkn6O+ zK5C#ErzSreLoLA+e0}&(QOt~zY2`>~P>;YhZKAeHEQ3}cx*!^ebrOJ!wrN))1?WXf zn>+`ZA~p^YK^mQ&hl(jc&sA*}Mof7Z!J(rh+9thz=(Oq-J;Jw{8Gv&mWGo0eBZ?YC zAi6a1jvb9x8tp@}pVcJ&h)kd*hBUucF%m*VnQxgqCpzH)MkNG^5DKXRc#jAvNf~X4 z&ZT1$B%l*i(tu@C`PLDZ@l*ShXmv)3jfLBr>HW{cmf4@2Fj} z({1`FBT-WwV!ed4K;X#|!!<`@J%46r&wiwrNoWF=vKfqQaA=lA}A4VPTPWCTQDFj_?l zffgE6hLIxKJo|{$5fvgbN@P}0(-4A0yNGMr^)FM>o1CHhvRANr(GRnH{pT3{?pxV3 ztWj%bzzV|jETY#%-1AK+y7(ZmgOww1wvW?#GjC=GJ07#gZ?SxgkMSkG#JhR-qyK>C z=HL^bfUCcYZInHG((U?hS&P5;VtC&3V8h|tI5`3$j?@#n9?R=Yy2x?fgA2H7_<$>s z@Bw@hSL;rPY`M?wg%zroy@rX`{5+f2Oao92`=A6;DxxuTbvI{X;M(sev|v2{pyAs?%gBcPCw$dbEWb1Zv-#Raan8ey4X#@y@6sq7; z(;rBdmD;BU*@pxGLe^TsO14!GodBOeV86Pp$rPe2QiJcaWTzTp5&#G^lHs;%`Q(THnhT3bCi{IBjYmg~^AYbMGZHBRN;Zj@$}}6A8sVd+E;NNMz}2{-i)%(u1v(lS)oB7413D-g z0kw)`S^Enk)9RfIf^45YMG3qM2&owhht`o0EzyDUhFA!)qGE8%o$NmE1x){^|H7t| zj)oW+3|EobkjsJ)9nL6>$_RiaQmFI`8f9XDB7zP%sDL*D7Ye9Gh-QQz3v#2GnaP>C zMyZ=*X_ue&4{8P_KF97|0 z%ZiRJ5qVne0AMtRZMRWXHMa3I;|1z^i0t&}t`6vB6Nn3*g)V#aM1d*<#^+Scm@pn9 zRAf4v#JuSjx%aqZSoxhda7?cPy&f0mF>Z(*DwHYEqE6F%73pfh(0Ljk$d((1^yscz z1NkJ3`{3#X2%>?k196ZTh<&2!c7rJ?XLh(%&QVtim8MkrcVBGRU^LES*sz8*rfjkRsTOh{S<+3pg# z2#rO!NYEB36`+Vhfl9drgtRt<_QW{CWs=P5lsOU7W5?2_wWMwa<0gTo=)q_L9&KaG z?&$V>iL_Sbo7P@eK#=&*AcR0h(`rv_3xL#v;7up66oLgLLS{G>(T#1zqIH1UICS zBg#&Wr~s*nE)YzY;5xWP=+NwkXN0ODHlNm%YL8+5%arBV;K$g!Sg`w)y zl*YRUj0@!z45Kg=9;D+6Jw1wi4CkoM3^qUx`yp{Q}yTBy|6^HyufgI zf!Ne2A;`KJlWR6IvFSvzwMWs}d=#$JBgB9h4e-G+9(xL{*m%Yn?Ede6$=uuD$l7oI zAB?Vudot*D!DR^i0R`%Zvc8w@OgntKeXe@&Yfm(Hru(>$ck<51)cVrF)R-~v64zV&Ou=&+!0O0VXE7j z$B)J9(%cR#k{||5-f|tC_y4!#9Mj2DGq$>yIk6G>Cm&|!wBwUw(`bwll4vr7)F>IC zYG}6I#`Y`!h+Q}SFF5LKR*yXj-I*d*HIatq{yq4)J*++DIF5emMQqq`H07};!%3$B zlE#iu*3l?UnRl>6?z;M)=>FPIv##*?P6uf%SWROzlbsSVZc^4mDPUByI;aS~K?{ZJ zmh`%7P%c2V&`$U>D2inBy3e^uwIWdG(}Z7!)C>pF3eACDC#7N!M(O8l&G9$h$9?tw z2=b&dviOhR;}(sQ>yF($f9>E05^J49U~ zR{OvRR2#D{TKic^vN)|RI15?vKoFmh5#a@dI)T*CYCpyT3IU~pMicEQ=|*IkSeEG9 zRjoXoH#bg9k<393SRN}Zf^{>q+%j6=U%MGwU-}bFoqRH}US!8j*K+-*zrY!tS$?>i zqj%1;6a!R)6p|+*+Ij*JAtc5_Wk8J_(Fmk5oco2_xu@R0Q93%;eEG>oqqB%~4!kA` znOHY$vSpP5GDD0KXFBMK9&&y!-g}r@Pfu3qTtvZW*kGe4>jla>Ck|Gaf702koOM2G z>Qjw8gV7RV@BMTe=*%c|_h^i(Sibu{_P+K%aqKVtEL|WD7pRoMD}}ZW zk#)#xOPrf$_s1{ihR=N*W@Zs5Y^5_jOEx)y>`hR5!D!`v-0q!(9ouoknkT>LCzv|- zLOL6cgR%n=YUglnh!&cxEa@*V;okguCU3r;?D%7$@-V2Fd&!Gg_`Zud{mJJZ^7prS zeVsk+?s)$l4DKEvjbzggZDPZ-zWct)4IQ`t{_PCz9x!pr1gF34^n(Wn zyT;u6SNF1X;}YYYV`MHVHocRrSJ>R%`8iY!L^~k6_ZE5|_!HQ6KXf*N z-O1_*27masY&vTT)D?B`NGTAyi&6qXVC7R+arae!#G>iYedZ<1p8agr%}heKN0F68 zZ>e03wKetP0z2=!n?2Wkn*Kk1lH;}J+}FR0^4Twfyr2$}SgoKDP?l(+x%JbZW#a9x zW8JL6Ig4uLuC6yrM;1uePuc_B12<+kT7@POP)IH4Os`9tfO?^wQ0vq@YXx>+5S>a5 zdTc3)Zxv%}lm0!r)U*o;u3`Ok_cCwyXCp3{EV%aRr>3dA*rz3EzsDzMBxDZFuoZB( ztb>wmenkqF!@2bJu}xfW^gsc5o8u8%je{aF5TTu7yK#CRQ!`+j)YR*JgZX_T;t0V2 z4(}Z@roH%dEUne*z6;#s$uc+BDTuFf$;2wt?c=w;w9!3isT=oMOU2YE+t{AZkgj}f z()kG*)IJcFx5?t8bY6^srf&bKo4`Zew4s119iw$DQlqtIvh1;t3BED6huyKkOV66( zIJT_oaIE*RxWa<-gy=BN6I?`hG~QWsBanr{)eS)^Wbi~K@I;>brET0e+J9QGRx7@F z&T$AVGI+GeX}pE@<&MrlmZP-B#|)8W$a)np1gRjC^fCpi3jqdpFEM1~QZwAW#NbWu zVDc5OVJZU`9mBDw0mNvCa$xbqxt*-uaufCwAEI;1*O7Be3|{_=Ybq`TV zBn2Vw(NVyC_p;}Iyq_EIxRLSJGdT7Kp3k~dp2YfzNjkkLKoVoC%ZM zx$n~-hFibLvFARQQ-ACikSCmm5Rt|^Y(2&VpgX~8e-Zh*pJM9nuOK&_2+IrXe#K8w zJ?mnQKY8mReQ*2Z=tyGqBT)ydftbH$o`3xQe|)ep-(2#-Z7)Q~fBWv&uB&%(<7;nZ zcyFST@(npZvinC4>Su3%-|c+$ZC@oc2Nw7DPU-QC4?lz1bN27`HnaKgY9vB{_rL#< z>v4g<-M*bayX!8#ytKrUwQQM~;H#Hh@?a1AhBq7%AaUqH#G#;e_SIpab`FS{SUi#w z@hAWgzxF-;Q2On|3?$}uZ>O{lD;tXWyXn67k6~^%OlTH&&a?2YKj7r&{1CMrp&FOO zp2Y-G1men=`#|ppU%W=(nN@W_c7%dgqWICB^i&0i0H_BlkC}f zKVSLGRqVdveSF{3F5uMH{yLnvg^EBJ56FTibf(Zq?)k_^Dc|uLrcd06a1j+0Az0+( zEOL4VJ+~({rkxyy1L~Dk>b%6d5oNcFncRpO3}7&y8eb*SEy%X{Rr}t}9s~;e8gB-7U|RN~*>?^`X>}^* z={z>e37}A>glaoPN!>aowE}7-(|rV=j!DF%`G{*;fZ$rdX4@Qy)~QI=3CQdNXR^I7 z7r-PP0kYMLJfK^l4G?UZfvFkBnPI%rKr^H)1m(>7WPz(>dOX*sTJ?;`(7Hy9$AtB# zBAPwKmtp&{)CMeJ)2T^oOei(VWme!g@_U< zJYFa?>9j1atT4FtU#OS+ta;uGSTi|^8x6366w+4|nBBX`ZvHa=^w~dW_xvJHdGq@? zed|*QQ6fZOIP9a)$oBfS&QS`5$nqq9C$O@*#Lll@$F7fEL9u%$TaQ1N$(LP<+4P79 zL>Y+Ry!mF{b@R>peeIV{J(c&KbI$&Z#ATN~jzGi{gxYxsX5yM7iPeX>ZfoGO`F}qH zaUe$GgX<38YSWH;??SGwQXIR6V%yD>@BIVVyF|TrH@koGO>Fx4UnGbcH6DXB#H@=E z;J@&%-2SQmL4V^~w!Y$5n3+mK>$(}CD~mH4M?@n~5u6glAh4q$d68kVX{1S>_jlg; z4gTf5@8ZPmcXQzz-hsOKWi$Z8K2}CLooU7%_WsxRF!?|KGv$U2_{Ja^6PgCG<`_(8 z5DwK^6qBpd0BOa}rV}kddaXA|-U!O%l3hZT^A_30%nb|6?o2)~01I zDli%H@2+`>1?ZLMZsC|>u@tUmE58Vlb*-0N^3_#L6#@`*QQR7WlX!CrP?Muw$G9D^-Q%I1`^OQIx#gx z2kK!0HcccVAj=WfK^~KhY|#Q28`@^S1r5XmmW)nJkIo3fC5?t_8IkcQ0hLTb?H>ec zL8N4D(F)*2yJDqN&>Yr*YM@twnPIeZJJs^8R{vcPLrq84cygi`;h8{WU7~Lg!6r^f zX9zb&d4b0hbwr{OV@oJ>GKO*$XvyEqjrh4c9-3Oc`t*|su_g+SGDYf8oJ|hBK$A-Z zIa)-rD5;{L9^+&LW3|0nU~0*64MkT<7y=Z%f$#;k7DmGs`vjESAFzP>AmAUJm<$>hZYhWJYl%n z#?*;K5DDF?NjyOatk|aui6{vs@3Lp^e(w8+4`ILZFPuDxY<%^bk>7t2LvPWeF+vxp zQnBm$FS6$KFQ=TEVD~G3p5fEJkCRS6>yQA5Ut2nK>r3CME-KTY=z0QtI{3qN@wv*$iI2z4XJwLg9>JOB4i0FHX$QT)JFKd|3@7z|f(t=!CM6BB&-InPP@t3y0UKQxQ;hk)Aof7aDkL%)B>sGSF%GJz|& z;*hK^9ZdZZf5e^K$)#M1MDj$c_w>K_00Po|zNeoOun$M6dPFr^q2t!1sj~{OvdCcT zIdot7ngkez6+&vF?qDL+H{Ha|m%js^|6-o;;$I*Nu)`G^6q3kTYXkz>u1DDDAxff% zl#^5F5NYffXB$MGamuM@F!P)LKUZJzJAC53Z|9PgWwMw3G);F3HSXhv13KLv<*Q%K z;>Z7-jiUzH&60B}0>88i?;AR%ixe?6*fZ7& zj%hU}N`Vg+zdArTPweC=aoFUkxoRixK|qWV`S<^d5BtN2HBWjP?v#^pp+*It0>_+3 zYK0TBbu{vT#(Gc0BBM+b-z>-10V4u2SQItUSzM==n1y~HlPMal(Una>XDTC(N4O@f z^@ON!S|hy2$ix77G-yMN9w}2chW7)s*7)eK(UGgndGDus+Vm6F1h62#!~c)W`k zrEnoI5y6SbIC`{e7!3MMuiwbjPyQ@-Z91B7{_EA4zq^u&te`mW8Pvw$M}0IMHl24K z%RloL)PH#=D$9~-!y%}5AB6tFkA}?s>F-nDcQ?fer?BbuZ#(GwZ{~Kf@W1|w(N}Mz zncIoXa?HlfOkeaorho8-$YOsBzJDCUj7(|SkM+8o%MV&ez4IS-VwckQp8ejlx#6d8 zpxRln{iEAC_m9s-mk-}IHcJiH{^+$3p?6Y`vw#0=Ha~weAL)Gr>VrGpTYmeN2R2F1 z``~%|0SExy(OmEs7x3|uKTbVgv-4v+S-E3{$x|mE_#TVpaxOo#fpm+Dk0^j>yyvHG zxM4p4p@iUy^Ur@MfPi!?r=R|auJ#`q5OKv7k2rvM*!{5UuTRHt2&kQX0OI|;|FEnt zJuIH$YWnnf18;c30Ev$dzO#sW<(kj2{MnCD-F*jcc?s3+QEoYt*%!Q=-Z>9HdHHIS z9^-JhHjNhdq&;vi@G1#C2ZM&;Yv0D^$qw~sfY2GzWEdf6ZoP}!|K_(bFMTCX`k_lx zHrAleSPOEICektlM1V|6oB$Ui$)hD=txb%E3>Z=d!oW4GTeq2)yzck-2TDGF`5*Eh zOiuR0uVP$IVuq`X!U{9%XQ+SmeXPFY=b0%Y0Z@5CP#QhzGt@bq-UO-?5auB(>556J zdPox{(2F~$Kl?#!r;Ackm_kzzN63(-jC7cAq*q98a=%mi8(hNA&KLZ{m!dWVVuB_(|YY8;SR0+z!p#|cT+ zSiFFkDS}XB`3zw^##jB6&a4Wgh}5oXb1ov$dAx63lcGl=kd>t#4k)`B0fWr~T6Zw9 zAjmPfA7DiX>l&2P$gaRf3r#@fk|1;Zpg}5)=yb3ukkygk0zTJBT_BAj3`YleZ-xwo zm&qDg1c&qiBQ;S=yay3A(hGvrR8^l$JG#9Ys05e*lWSA+-`|Z}Sw>v^G|F|e3?m33 zD6$SQLS1t*L!xyEnI+>Z5i!{WVtFt2BY(#=H{ZgE zZ+|!EJnIK>z9J4AlnmGiUMsZq$VT9eMubQYNnb=dK{0AW7qx;wPLXBQgB46xa@vK@ z=MFJq`%Twy%wPTiQ^%c1zHvQOrSR1VRdflLynxYP|0Q`-GjNamvce}v-+6_p|9`IL z-nYJ%=KgzA^RjlsL4%0hm%oqufA?)f`_K=Ag}=Rm{Df0D>5o55_snzl?<!+1iYa7jNX)A3c^k-ggIX)v@EM9US*#-@*AvfSEL$_RFWS^(|Xb z`M*u6-Yhrl{CHv*rp}n+s2@7&fZt~(4adLgcy52s?GRztCwJ`!BKAG+Lkc3Ud}NuA z-?`-$ZtnN@``TN#Zsoi+YaafX-uTAHFo?M3nn!$v=|KBo7k#@!)74kQDW@C~jl>mP zaZmu_d*OaC_qjQCd~64+cdXJZHRzsZ`pjvLefhDhIq#tt*7aP^6t}{c4%aP+wNrVHCN$JKZCQLcPT{0V9>`DIi+{#sHh`|TvN&dB8ccv zBFEuTA=1<}m3Nrjpq*hQSaK&wPl^nxm+~2t>fD3~eh$ji8{wR5_>t7(-z@2v(?dBzg(U6+uBLG;w7W z8!gIcupSp<(kSad7&w|JQA#HhBmue12-eb%{(x!5#c+}Fj%BpTK?+pMr z=Kne8)OxpGCAD_RT8zBN*eu3iuvrb*Kp=sDu?NDQOo9VUAma>>fEkA*kOh(u2tQ!J z*$l%HVz3PknAJAkk%ev9+AOuCUhi7Bs?IWhRClXeYPDor4FmH#&!b28-m0!T=Tz0H z@B3Ze7n|k?;bBxk)#?Ofx`E5}R0)YdI87c^px#9)Nv_(+c1nG06k&5pL+db=0MX;H z%_g)aFTG|HGlI8P}Ez>^WFF*r{nx&jlWe2YgS1+tgvlf&P>N6-eU%+Bn&;GfTj=b$6zNp) z3|SBB1R|0+VUcN0tRzts718usKa>N~u!J7lkIZtED}hc)O~#-f(`nRc{`kApp8X=E zUqzb+22D?`hh6*k)4Kc;mYuPh>OX#q_>|2!)5Zpc;<>LvY?@=f@g?s0*1u7E)9-Q4 zh0g_N=p+e#;Nj&VZQH_gf*`Kod9o;mw+<&HHBk@@m^24#5mOT0(i4bG&~7*J$`R|H z{5&3<7-l>@K;_@RLjLC8#;f(yZBNqfwCP#7mh8<}FtO(j0=u}1)gxx%B5FM`#-2ZU zCu3iHYzEr?zxp8i{^EU82Ck%b{&R`eZz3Nbp?S;q&?5&(cRtAduXzEdfAe<2RdbEx z_fNo+!(U$3rhB;Og!LfO@s#1~iWI=rzrGsjN!DGujtBnoff;~tJP;A|2E1b86;p%{ zJSLmQP4Nn^xManG`!0L#vI0a<6oa37#i?_)CnVg%J#1y`;!pI!gNy1c-&U`4_4e&^ ze%sp9!~0J^ec?a6<(8svi^N*GxFBMYLpxC9hyBSB0OHhYl@D#*`U?r|e4p>1Pzuw? z_eZ$niaTb$@BZiAkBa@EwX?;KFZ(g0KO8;!UcT`l_kZ+$*1mQvPyO^$kMacEzzu9- z)31Du#I4<9>p-OY_j2D$&qI$M1Rz|uk>2NBf~xh>eQ-MyH+&VBb{YTjH2`e**cXoN zxzWYBe%^v~s@99k9Y(ZJrW}DP3a>K(d7iRj*?LZY!KG~b z;$PGEmw&?GsuieH&ICUv&pY&bB_^Kn48pH{4&S$s#e_~{=z@yyx(Xdw{73_pB40o9 z2z`M}5{!|BpmHE_X_v4T<9k(%6A0}v+TfL|Sl7X{I(VLkkP=4`RWW%^9L3yIZ_PWO zYx?^s>2ASJsv_bz#0dzbLT5#kKnsVQ(o%3vBV>qk2C@{3go=-|Daz%zsDf{NWZ+}G z1V8K{Ema6jN+wdmunf*&(`KRnpnNc%O>TCSl2iRpBTJoh-pdQqWe zm*?P1gov;{L|9U%P$~kasYWI8JjcZz3J-&&9F(wFa;Tf{=IjScLl*0K2N#ZfMggDsB%n+5SI%~MGn>&B zr$1x$#?1)fkXjTV(pPl0-%EF_!+{mcc-D)59e}*uq2eT|@X=mIWCNm71%xGOPGa%` z6dU0Pq(pfhK^P%qjL0*(+L1ej=TaP?>n*aV#OiY{VSn;9>bHHHzI7`IpZ^k^46r)E zi8A`>&xEnzB0X*q+ehmQm=IsTmfctWSM>Nu;hBE!#WcS6EnIeDc`>cKZe!m^{}rr9UlIj*D!hG*D#Y~?0N6o+4PyO&fCYUe@VGXZsMjB-goc6?VVvl zTJ!2P0Q5h(pUS2Rtp{5ixZwcZLtUb!3%~3hD}Vr)ynAxybMILT=aThqJ-ofOqjk*j z|6D-Cb=NKG;eYq`+sS4DdS3`Wf8KcnN}X8W7AX^FaY4i)hjt!ye%K<1cE%Y$;Uenk zkl_qs-j{IjKM$S|`$2nen;Xx&k@R4(kXANUSaHb;g5H3}_6Co9^$~2>viq9d0G#)Q z^Nz+-{4J+(+OITg(+?MT&+PhxH_rfwC6~RGwO4%{G3%a5?%&4tU%vn|ImY;xuVKk= zzJc2L&sp$XKW`8rvG~f7jn~nQ3GBwFQeC$m$Z>K|tBG)By zSwT-)8N?4t_)H0>$vv_#vUkYf7d!i zwssS$rw_GjKQs;z+Z=ExmqTrkuDp;jFzbIH%0f-EA04^?mvk~Miuw^Kv zL@I{7ut}*d0ou?og}#EAVo8#^U_Xi#q`D}q&h6AbQ{(a^pbI7>XCV#_GcQRXjES@^ z*pifhkuk!F5yZ*?=;$ly4^#y8E^hn))^t#V8z=`JNI}_XblRZxM}NY`3!g{V zL38zLYVW@ShWZP(DL*P$p(?hZk~J2Xsz?=6!gjXMq=Xo{W~)_?Rfa{vT@ic6gGH=pO8XKX}| zk1%;-k=7cWvU$#a-%g6Y{xS;EJ;XyNyzj0r6n06pB4X*Ymd^aX_BCtS_JM6U?b!1# zd)WN;&5PFG*29OvK(uV(mukE`Mks+Zj?SLW;~xKGZdxyD#?9CE?c+O#4$b-P?VC5V zwf6)Ic5b)alEZ{5I?KK>-6ceuu(zOBx;FZeduSjO&ac5})bPGQ+|md)GW-{<%FRc+gjQ45jW zzm3LsuP+v0yl zNSAtsBFItRqBDT58C?*<8(TO zD6bcQVtW3&oua7Nx6sZCBT$OspH0Avxw~<+)e->uH{XJO<696>iO$}Ah=ap4Ms^ZT zbfGbdy6tA-pWTP@a_Ao_jCd)EVsKU97EDqc&Derv$)ix_W(p9f;lkL}0n`r^B5t9C z#zgVIszR1e3BM&%>fE&gpmZ|`GC)9kN&{m`8M+8ZWQCEP+ky&KdEgpQPidZgKKcbO zft$ZU?I$;*275vDK<2^tFwHGz(!BD+h}1Cnh0oxR?kt4$8i!CzhA5x5l@y0BpmO?? zv0jMmbc;SD*%Za?6vLF8(yZv_Q+=MI<7JAy$+_a%#6U|G;K>OvQK1l?O=)kGbIAN+ z>_!(V(Wwt*2f9?uBh7+sN<^Rwb#HP9UWbbB5eQM#pUi4^H@ncu3xE^X3hjz!y8soX zO2Mv`cEFEea1DeWX{U)D9|zmU$`Z~d_|7LTSLk*%nU#d8#m3P4y5GXpV)lOR8mdF< zS-NUHVPxqvTLhkDmg(l%K-iB&*tFnd&v$yMD&Ai z6TaXQa-nd}6aw7VAr_Iq@t;}?y0cN$8bfb=7el}O?gdjy=e6tVlT3c=>r?Cb8T3By z;`t-G)fxl8@n1Oj$&Ubz$(z2x&?%ee?dvaNk#(K=i5c%ZTQivrYhJZxPFBR)OA8P& z4Kx-LM5Kof14O^Na8bXI0>8&68_&oa`QsY@<7)f%E!v^AwY>YTyXO2h6h*x6j58j6 zAJ?9ICGW)p5sMt!dCd7?ixk>9$iWjXq<%c?2lZ`r4qSg=27nw1AOLz!@8Rr^p3N<< zEBf=m#~+v%MBKtH9OU4ytRUUqW27?GZ@zKn^S~=!dlZ0}+4k~F+5O(%!?qeUZoUy` zE#epqU&lJvVzyE#LWU7uRzl<%S-p;LC?W`cj1>+(`$<~Ye-`i0{y(ba8qH)9Ur3Y$ zCo3ok&9VJddY2*9!pnj02lV#!GckIAS_xEK!DKnUvuLSs*5Qz>-Mp3iZ~GR*5AI~` zj(hPooJOt$I!!6XKK+-yp0RVEg76gmwLvmp5_t+#i1QVtu!Jw5Eg^3vJo24y(EHVY zrKhI~)`Uju#5)^kdoyLV1~~sD+pSSHanoCJ~J*-o?sQYZ!a+%Q*1WYw7vncd4vdg&Ut_)T^O?_xBhY zT8=zDNkmhd;-7mF*|Mc5m*N|PwU*pU0%dR*=vb`p z~t zAz}oU&i%LGhW8*mhb6+K9l}5ml_ZR1_~W}lDr{Iqwp&C|nW0x+#*$ZFN}e0a-8N0n zqoe}bHbK|-;>!v~m66sWRk5accl>~z*ZwuV|KpR$xXNUG4C5?O5MqU;QZCUt^e~+? zWZ9aPMN$4j&uieLyk1(9qlA?*d1mlX5Gb_v@H!2G!6Cxs8_9PcqVw%95i?V*@ZsB5Tucw!@@0)ncsWFWo+%zN7*z>$g7TmXX{&S~51hj7ZKD_CQ zqxSh?8{W}V;M`xPcA~6IyS}iC>0+@X>mF*S*62H@kBK`b7{6`&C?=$nYBaYGKd)Z( z_$I1~i*z2R9X7W}Up}VsKd$z(pDo&ZLDS=5KR9sXfy3T`*RDMZK+N_W-2QvFqZ^uoHy*@UH*dYgbzJu=TV!27 zMm=D<^RNLKZ9KM!lJGpLPd%UdP1j*NEz(^(jtX-h?_7)7d@C_|7i_`M6iyrqVNvZagb{9HjKJ^Gabr-USUO}o_F%{NBiF4%Scmmv+7pKe zO#_=7(yqk@V1p26a-;;S9oCb$dO)UALgnEyjT3@ISfp3zj93*Sg9tT#5DZx90d1VK zSQFsUMWhZV3|4sf%ELKFR@Yz+o|71rlV=Ji6f!R18Al!jcu9R;FZx7%oaFxda9J0l z69PZLc2ksf&}oqEzl(Cck4`tojvPWxjv#%7AR={wa;OP>uMi&GyoLP!N63fwP+Gnc zt9)G6#7=>3VI4*(B9Wt=rN@P|lqGeVKq-vPKvi(vHazkm*~T+a{e$F2leU_KVSvLU z3dt3m|4cucc}q?ZzR(uu9iPh$#&~lc$8W9!j+#vSov?e<$g|VQQyr zL|cn72H*2h!QxQ7?mPj<%j3zdPwu<>u*2oFvle#9Y&o1W-`%-m!9H*He$amU1r4YT!wi&JM{b34nqbNu^!wq4_lgI~n;Il`fRvRW(8kE;1S zZ(xAS*R6YOeZ1(RUlI_ph@l-g3Hf0sIkcnEC#(nYc-aq{4<1IOwI>|g6CgdwlJl1^ zeBCg*rD^VH&g(h2fg8A-%klUnO!hoZJ60yINe<^u%4lKkzUY+A)Nd*PVrTok#{?1P z7csyfLg_9ZIVSQk(nlJN5(bN;)J(}rOEF6<<(?wipiXI(*Vc>hD zWVCVAm|`g~Hbwh2B06Luzy%N!k~wf`hjyn)5J}dpT*jU^{Wg2va1lMq z;rV6E#2Ca1QK}#_$DxT4Y-Vu6Qmy*P-a*o?Pey|rK|@OdFC@q%S|(VNVwEMyeS)Y& z;#-p3qH;?jErE475rN3@bAtt}blBV=g8&&u=qy3%j9h9|xE$Y4X+1cMy=;P-Gh{Br zbQ<_^iN0r^&wf6Lzj7Ia0|U5Ln@~kq1Wstg_(8h&ZAa~Rg!aSR5g&LL>EB*UxN;TU z?LWcX{!MCqLzr%xuoR;693wqc?$e&wLv9?t^e|44N?oMcIEPY_O79BNas^{kM6-)+ zO&}4dz6#PWkx#VI^%hoj@GDiqYCqO>aYm4pOE~M{n}lS1l2o_xLp2?khrHk~Z3iN-w6?gD@TB-a3u0Mud*AT1LAZn>oB7rO)%B zJWz-hhDExQJG77VkKa!CKmUsqn^c({TLtUQbg$gHL2`}n@2-E89btityn-CFJWK2rGzli`OUY0@PSjy!kx zR^nIs>GYHc@esQo!fe<$qp9Tk3d!QQ-tS5mcX>?rJbc*UGPrQG-CwqRO4QMi?ccLt zpMMoW#MrH4G#@Bzi#5NwW`4)ytJiY(d+r7cyRX^JnIAawae=&JMiyof!I<>;Z&uTt z+DC$lenAvkJ9jS1VgKQwhZxNc=SoZ9V^4b0W1IIy>f_>Aj*A%DIcfP}Co#0Mj}r$? zkC*+xbPhjMUTNXWSKVBl0W9@<>&FZ~?qeToSsq zjYBJk%p_VD9RI>EArS>j5Mb`O6@TA@|#Aay;R{17QWq zc}NwID@SN8y4yjQ0{YK+8rchf1OJA9qtw@jkO4U8CLID_AzUFCX1Xcm{&JzM;CtXH zlo#TRf?iF&Ye!M9Fnc^gkaiNHT7`}<_)_9JDQSBIH#i7UiLl)wOARhI^lUww{QUD7 zxa}@l)fy8|e=h#m2;QCF!wfD#zwFhB&1Yh=oc8~|mZcBhLuGZD-1Jd(4%3{Z(MgzC zu^iby2-ZWUn$D6cY9gVu9wHLQLAkswy5CxBzE7ymE*o!*;s3a)c95 zvOXfT7(8mLhUkurQWuUmbeLQrk`7+zv-#qeV4Wc8w7>)HG9nux#wHN^AELL`OEYPs zUh`JcWy{$AjW1Js{v|~B?WWu}fY&>K%OZsG(ZXO3jWD+137FscZ>VY&<3-4*M1%v~ zMr4}wXAcqI_+_fDi3+N;2g)>G_Uq_om(q{_ldzN0IPXHti+&yDXQbb{9{HXBpjz^f z%Ql0^kXgcH8lW$IJ)F7;*O>&P2(2S^3H<1r^!;=PUe5rbH&QT8&1#uYlvl38If3&$ zyq+#9b4V+|S<>DrCE-J+L4|~|E21NcqPC;efZiTlsgGvk5&UM8@cz4K|JIAhKKgmW zQ#KK_6RdOK4A$lN(#NJb{=fi~s^~@oCqbwZiPiAXc1kPPv*9(r!O+k~bh|^jQpI{c zVW8-=#>lLquTpSHPfkuUF)=}3Umv}_y)+sPCMG7RR;%>(_Rfh^OioVHtas>%EMea= zq&6612|bBY0vnexK^YUa2ygs4<{1~_g#kw9Gqk_EckiC}*pH<(8V$zB$N8QdEDGos zspX@G9gV6|J&re9qG~;u$#G1xam@YhNa0l{*yYK|N%rh10Lhv)Yv`TjF>w7j}`?){QckmJ#ieoDq2biJkZHvLE=phsW93+gaF)K6Ds}q@%}n`~2;<|CS|p zEJ5qT@#X1x7#tiVj^`HJT3e(dL{Wruu22A$a*7os;n1N&tXQ#vo}L~WjbcGAl}a?5 zO%5G8#L}fpsZ=U-I-QwqT5Gh{l*?rRMn^}Pn3!PY%9X5KxstJ|htyh&ol0Xf#?17? z_kBvG5}i&5V+?7U!sYV|5yht-2AuWpT+hq9B8C}j2} zIG@O)U>Xt<;UqHlU@Ag@$crLhsSqLuDT&n4Z&cxV_@#cZ8A6swJt%+qOPDWz5^?@Z zNZ;@_bh(1pX`_t9=mvvvAB^lryx|H4-+Be<*eK?wKP6l?L}|-rs-lR`j9>CH^rt>Y zaKmR&wE)KUp*Nj_`kgH9k)L$rn<6-(OQ(xvZ#TcNBEB z7<>xDpaEoCx8i;93J4w|yx?`%_x~jh$o~CW+B^19y8LzY_xEBXOg#TLFn9b2|FeG& z58er$MXNr#ANp%*=buN#I`St|3zQJK#aej# z6>q0Ld2~9S=M`yQ#u$`R7-NXzm^{zXT2rZ%`S6F{P3)i)R_W+2MhLJuz8@f!LJal6 zH*TeMaG1W;>oCTUS%W79S6+D~#u&=wGVOMI<{Z^(l`P9<)?#DK%-SV{Kx>WXd2{}s z-oEqQAA!Ne0}-}!xZpw_2SiM-^#;IbY@Q?Mu_?Z{?;x*#*L!B(SF`6|YdvSq=UdD3 zJfHbKJy%D5pFK~$@6W8g({n%bevcx$-7Y~8kWG23E0qeZR*O=pgteA#w~P2+Q(>@U z&6Bq5`PakImz$n*Y)aVK^$NSbuxn93#B2v@_rSvSIC&#Sw~9WM*Ououo^!{QS6(@D zKTglvk#j!VjyZDfqbQmZ%@jx}XWrGm?^CH%_?R&#Y)l(#+1_a2fHM~`+CR5z7yD<~ z1WE}0$BESZ9_zfu@cPRxE1ZtA#yeU+m$P7e5!zW@shxMUIcf!_k(YhBo7EITM#> zm~t<&)dU0v4_^s%+U18ozGViK%|6%cd7f{Z5Q0~~;zc-eoO6Yi0$@>eWJZtGNEM>v zfFKPJ2$WXj3WOJ8GmHMx=P1dX^d+yv_Af;^gYrY#yY~}+?ON2tKJrzo>AdnXDwPr* zV3)2#2@m{AVKj>=mL|V4Qxu2`3tC4-LHDYB$UERgU?uhZ=x0Iu0ac~YHbXl{`O9BN z{L4S!Z9D_6`&YtjlH@Iah>A*BXYj%rS>F&rse*mZvnfdk2M5s?URbCi+mu}Aq$*(P zz)~7-dMoaxZy*lsAU)%0OkDLh^e_W`*ICphuO!!9%3ee>Z{ll5PpO7H?*cmY z2})P}0H>BR_MX3B@ci?zXp$@eLVRh_wou0IA6miK2e0PP2R?-P&QFiJ)^+W`>w}tt zOo0g?G(ZB=sS!b?sLkm!1?6ljhuU&jyABst$?v_FyuK4Dd_=X6z;$rd7^TbD9rqzc zgeO9bQ^dZ9p-vzo#{TsEsPZ7yH@pq!Wf+qXsv5E~fGhPO03jV#=2-0`rNo&OlctCu zq*0%rX=b+3I&B;z$zc|**vDfa%A6*?4#}-T+~Rd)A=kX!SS7pLde+zm;#nZ7_B`6M>%_Dk8Spx zA2}bh=VbQhW6c*ZW6;i?`xyg!svp^`beC4EaCA*O=m1>ZA(kB5J~?pxfjNvw+1QCu z4eq^mFX#NtIjG>|rVy3Zl;+q>3))n(=wK@wj{!*QbLV$@-sYS0*}u)6`}wZ<^ga_4 z6N~~wCt&mb)2?0ox4Z6Qc1wu>En?G?J>uGf*9sxupg{^$x43W z{{)vi_I+g^4}Iz(HoSSm5eBeh|8@J>@rlC)Vl#Pz^R@LS?;6c#i2gj=iJaRXT*~s_ z{qOAms}B^{f{^^+eww%a06lVGt~aS%2))m@K6^{s40O?bx+jNU-<{lygWjh$C#JLig`JKmfl$K)ba5>~t>!Xu}it(xAwEI^RX@`gfSu-KO>AM8y zJc+n>0D(m}Mwz_xE=o^54@PY_8HjLYTCwAQ?T0(H$wKRTu z7PT$Uq%1;O!VxKn6do2!m^Z2Q^vpyerah|D9#PNpNRniZXK~s%=4@{9u9v}KO4t(- zr<-vS35kpr)+abJk}y5C*>esM$MK9eTL>}7%N>Rx)>=B94z*g1EX(M2yT^<~%syuv z$7ro_vkb%e`W1#D*~1wuIk8lxv;OQX;^pyzWB=Jlf5zmUlVsx=!~ZeNs+X@isn@OV ziG7Ein758ExbMN64$gc&W>n;%!}B#882G+F6Y2MTAEneBuu!YjXt&#Qo~7w~It;_2 zj&F*YZkI6(oxs@Mb=O@Sn01bS*|Ucgam+`~K6}o7|1mtwj#g`K6ymhg9@o6?76K(D z#+aFi)%3kPpCf%yLBz(58)>)O3=9n5`##-nw@7iA;;0t4+%m=Ee)8JM&JPn(^2D>w zn$ve<45dR-_7^M{3wr!)gw-?{{nV6U$2m&gV%FN{7z2t5j#~<&>U_XeK zMx6HFPn(Ha-1e5+c;Mp?F!;1VWGG4YCyf4J^r$f4LVU|&P;mA+XU|!DN~ID50|ShW zjm`0D9GT8E?ZuuB1C~mqne?PIO=mn+rBaC~isi z?W3=+kN*DtnRF)S+?;;Y>-CvbslL8G(lq7a1+K-4cl|NWS`Pf(hjBV5*?ten_Iu_& z9Q{iuopCmen~S1(RqI*s`kr~_nP{!&q%%#=&ynd&l}d$yfdO{!-p#IEyBHW4IO@eZ zJDmxjTCFlPG(^2#XMB8|3!d{VY_oxkYJ|03Ox~HIJ#~amkd%EKF)A6wniN0k!{|CW z5@ij36!7e4p3B3JjLu1CnojNObUO6(^vrpY1wlXsN4@b(A}7#NAg#b@LnPtQ&?$_pJDdIu8;Z0nVaWkCv;@`7>FoRg z`P1G(+*_lYCzQRIJZWHV`!06%5?pTZjKdjFl>nzTS-p)bmx!&8aXERY@cjsxbjfv! ztklTn@woh#m%bS1AV_n|!|c>DcoxAjc3_YP91Nd*6?+ANe12-uKtU%U9!M zMux)l^kN(1lpeSX8&&DFnpJ4DX%`pNbc5)2o62#s2;@xs9 z&UCRmPDPj(B0UduhRq#>6@+w11j0JfpZ);(FaJRH;0W2XFQHd@=rln@Ae4iwL*D8j z$~C+&BoGSSX|S|5$mMT(BR3oYA~J2r?z|DDHI5AF6gu}nT14c~d+$f?xgXi?0*yG!d7)QA ziu8PN4$+7RZsm%F4JJUs0W7phBnTxnU>9yQm~=bC;8PWPqR zY$AkUatdg!TD6Mp-gZ9D$LIH?H*@xVb>EC#vgHr99JfDtGw1f-xqSwJoNN%W^unb@ z4Tpn$|Gp2?HS-osJLlN_&$|y_n-?yh_jp%6?Mk*jZR<>i#If@K=i7GV+*@mpszutf zXAix%+ydYF)^W%7xpU9ulACWPpJg9^^#1$VT&?ofjfb;J{{F$a6y&d7vxd#J$49BV z>7_5_V;5a?Qt!>j3?i<&>Z*lzxZ(;pf<5V2?H83Frj{(>J@0wXNtwjUxD0a~ex8%b zesIPgpMkTE?H}Hb%N_N5>eTO<8|Ds|g!G-=$AKFPZ@S-e>=%zzl6SxR-TbPx|GjTv zul}lce~=}YzKMx%euZTFJ?Q!bG6)G)tfq4AGwHeDB1S&{i5U=aJcf@eue|c-I=u#W1 zYvV;R7J+odx)ex{#DV$bN3h@fciaQp2waTzK`t905Dw2NoN^c;u;2U=`FFlfZd2rv zL4r5F7ty~2leDSCWx5p~vHbz;DJj8Z3nRspjzoyi28W06KxC#+^p*ZGcExJa>%W3{!%HxtgS-6>c;b0z9049FpxTqTZiaX7-LzkR0et4mgj==} zI!Bs0G0hYi<@j3Rg=Mm!psMt+NGEYF!;=nAII=x^X{MUNQh>}H z21uPH_9|3uOgb`(=vxWSp|dvKtc@RfNag4@MhFI19QXOG)oODL`)>0fs?vuuImUKK z5=~UA5s4hr8ljW`tq$qBQ;8hlDZ0CML46X}+ee;f^!NAADf&I~`=f2A`il!9{K3OD zhxwrc3)>;h#!Ssyxa!y>BU?hn`W5R>XwFX>7?Sd+xjxppruSL1=CF5hV?b!bx`^hFVg5KbyjW-+&S#j|S_J4gp`DD(v z4{e**q5AMYKFq{V3a9JP3x?=9?Pw=oOw3je|7~w??=g#q=i4^l+|S;pR;zKw8D~JX zdO{%L1lh3vLF9=&U@&0Z@--<_Vsb@zyLd2Ev`RsU{1!()<@c(KHSFL4e9$}&BmOOa)zKb?(`M;{~NvBOo`Ka$`-X@B-%f)JLFO{TQcPJ^a9JCxbG*2UwIDzI zUOFX#`1rrEa%c@nw@n^1X-FFG^CXh0zu<1-b3}^17zpFinO<% zK5ghK2)vlAUMKy--^X761)^2!3Hz6mdjWwh(NzLtb24EFgh%s7Kf=E0GOFvAVxs_d zK0@EkO8d_feJ=+^5+ z0cP1l2uI*ML@6X18^xf>Pg#vgTexn9EGs+|R)tv6BwDo*bI1L3zxN%&EnCq-V0|AK zm$5EHiyU#*Q!uqkA@(Q1+;JD(fBhVNPkbWw&=^um!ayO>XgrkB2UVu>G$gv_t35f|MzV#3?z-otxA(tRDL_(3d0AFaV z7vWowS(k9KNuxP}iwAIOm>`PDjV8+|gbuv`=Pd2|1Y*-!422akn;@MfaG?9Dc!@`k z@oA6lgw1EuRRtxk@H2$05%#VjJG32L8^8-rT)jCowx{tl{*(Va+AjJ0VY_6SE%HQ+{Gp4682*o8Y--u_Z+qDImbr5_cH0=;gL5yg zGlkh~Q_H@u@0*nsB3Sm^Wpk)qPk-O(41aSNryciQbsu>>XTw`IP+n7}d#KCqYj(5k zsv;Xh#fq~&eAY3?{c~w6SDx^$m#$mK!8GNacOFiw)y{G04}ZvAFMJ{Y@X$kZ0LF_~ ztl$YJ1DrmJKK|lC#Fi~^%kkBlf06lNY&m%b;d<6D2qG4X{h++I%&AwLdd%(h?T4ci zwJo&;`~Uy9`CIeW?-gFH<*OF-Q2ipBFc$4JVL2k|=_R!mr7aSR5)Qj*1D&(ap}K1y zllvc}J+uX5RlzVLB*+}%A(GZ3l!Fq|JH9u`Sx0MR7eOf?toEUiSS;41_zn<~ba*Ga zHTHkld+#{S%KGmAeU(%0HZwc3y|YVM1c89CsF-MoD;is3At4qtfkz*rPol;o8bd7P zr->;_G$!VW5dxaWBm~8-C`Awiq*rOXY@ONJnYr63SNZ*M-Mg^Nf}rfKu;(0m7j)Br3s4fhkHP8i%Ej;X_K`k;?J4 z_UyEVNPsFbN<7Lc5}9BlO@a$i9SJ)2Xi>)_nflwaNw4@8a`|FJZG?Ihx)8;>!PN95 z#mzfpZ^l_@l8l)@urK^hNz>ESx!tSL@%btsgJZ!3s%x_8S)TK@79~>O>ARq z(V{SGHL4>#Nb4~;w3m1x@Og=h6QU@zwH3l5y}(L?G!ADCB628G;H|+68D?lWO}!M@ zp%`HjWFK57L%RY;lLByLL{4K$O)@q{IX*#Q95pS7@K~X7^(LY{L6p={NsZi<)bSVt zs-7a-ZDdVjU5UypLO3E_Vq{F5_h2VHj#PMrHAF(}mOcRR%^AbVjSxjE zMMweET8G&sr45s@wMCQ$kvl}Baaxm0iSRjAg*LiQj^f%gY<|u!QM}+3L^_0Qk7JA@ zs<&Wt4BZ^T$_S?;;#!Jcu?*#NyfLBclLxbK8Ab^fOm64)O?S|n8YdZ zLLnofvQ1~xjkK0MXIGx~+Yw^v`x@y1ZxFtu%sbSaC9}bx6?wr>Qm6moSK&YTKJ>kJ;SQT5o_8>vsR?SWIT)Lx zR0_>SdiUGvd^~rZeU1DYB$`; z%-ZJ@tvm?pN)j({ItguXwW3yQgkmlcBY^C`FT{WB!=%qXgkrbwFkhVmYlIz;D|Mo_eM4-?Ja0(GA zqO42)&{oh6Aq3Hi)fC>*|NFnged=SR&pMoPdPxX(H{cr$ zY_Cg}dxUo=ZHY%0Qfduxgl^W!geUb8)*6a$Tu3t))K?vhuhl5~7S}1UNdj^^x<7%! z({lx_;TAi7{ZuC2dj@l9(8gBIy-q$apxq3e1_us^dV}6Z74GmISJx*BU z@N(jOg6@`^sm(o%D0%Ebk+#gpvq^Mw0bW{U;gDY7ouNo-)LobDTW)8h--jRGi9O+E zMDrG7ZH8Ahyo_*>f-Iw)9w!=pYTJ1pw3p|bwx0Jwb|%+Peful8EZbwjwD+Fv|MP`i zUk|_Vl>N5my~!z@!dLjpuCFJ4Fu@=*kX3J8^`w5+(pN1d9*rp`3ns6f#FcK>bZH?4 z@n}r8`3Z)ZM2K!YnuFhVFs;K{-2DEV*?#rza~OmcEIMToN1byNBS(!q=K1bZUiPvl zEFu6t^_=H$%k(rqe8h~2FRtIcOXl)=otG|J^wg|vZ|SG~8QR&O`C(6GXlD(NFG%)B z_k$fb?qKG&Fr#7VtC#*<>wmg3EMf9zbfS6h+3=C~?t042JME00`d<5-yid11NvknT zL*Xbjiyf{wsvL{W^6mXhb=h+``o46i08Jz;4`5|4)B| z5hTj=@v@1Pj{ZNLOWcyU-+T*_m@+SL|Nbe|=RZYj!2(RAsEuz&ee)9fC%+uN`9Fvc z{T~|3j{CY|k1BJ70Mnmg{?cWPf9#X&xbFMN<}hN}L5v=KJc)1^SCZ%y*_%d4723Dr z5MJPXiL@3>fwdkrP$gbPP^*JXplgs)U`1$ODZB$AF|{UT?$AzSwLt-@-Nu*<<%iK8 z%0?Y9_?b4-nV@{h>mZ6LMS-og=qy}`z4}syS1e(A(}P&=7?mj|YcqfG0yh8YpRw(~ z{~vB7C8@>O)*M`82=(A5qU$bWj+wzHHFQ!ZLQrUp>+Yc5>k|*R@YXe zO;bFu9@o!F)0o2MG+zBW#^=pp@|)kFlqvG{r!jK$F;H|7aRVz#MxwIAi^VLifz_#Wri#zGVju;wJ@iiL4NTUS+QY)JMOxU-r`lX7OY~Xy&Y{c zY9t7qBGP4uY!b8MUToY#*2mCM9U&#&TdXN@+wR6sPauzY5h~B2$T33TMM(Q=q)oba zUxu2Rpmpa@V7$l7%hyp$V`OiJyj~-f5-TmGx8&CFR1a#71iZEZ|JmI;kH=_qF2g7P zI@9011Uoaurca*3()WIN*6SuN{124ytWb6{B-3sPU8k{*fkt? z`RkXn;N%4eEr^GoTup;+XkNAHRg}{ux}kRoh@HH8)2pA7H7|J40$zO8i|KFf)49Jx zIbD*@OKGld63=<;H7{War*Yc8-QWcaVC~u`l!XHjNy&xJeJ;m*;~UJFJ-6ULWA*A; z>HSZdwQIxLo>n5_NrZOxOMci>9NJmJV+)e~(fz=C&yDZBahJ+}bPL!gv;LLvY3el%bBz0S1?-PvBW}>8H135sJ0O63#{qmI$OYboQ%*q7$>4WhDcgS zlcVY(icoroEgg;85LtH%58QM)i?F2Mznbo`$0LtDf!KR;?}%bc;lST?9nlR};4Zxc zheB^0M|3mv(pBJQ(4q-riz)y1L-5D%fV!ly>Ij@P$iiarNbm8^gNQ;?1Mg8*AQ9MD zBfZAka#u@S;bFTKjGNi9sd-8uR5I}R3i{)lXkK+WNvv^66KNgg*DpoK-z6TNhm{(X zM9K*A9H}hMSkfq_>mc^vYfb9bP})8aBV2|yn#6Z;Ke-Wc-18u5Ai8bl9(@e{m}7`M zc;P8riO;$;>O=H>Np$(;sFC?$`gWdxEWkR148_U_3tE9th$ux%1GYd=g0={4amo{> zcu1lYl3Id@V`N@Hq+qf{7CB~M3uq6_^qE<_oc!ER)B2TPp;mS=#xtiDQT*Wt=p6eT zYG3+C8n@nrz3o;w=2-el)5t9gPktHg=f4Q46kaK!SWx$pj)2~`zDf3hw-XI}++gsZ z5}^a1xc5%9v=n(CO^MV3?;{KzIXaBH`8r&;kFKSdyd;StR=w~QOgwKLH3=gsAbX9^KVMD?M)@(eqz z`S>EDbK{RN6I&nkd=BU2i=3(NT=IwqqGaf#laa~8UhTzy_~%T2{~KTpn?LyxYD_9A=F^m!7Y zoqe7k_7sP9G@5m+<6F!=-+kTvz&p>6-}Pg*emm^j^50tinBhKvb*w}4G>*|e4oAdr z(_@H;yWjkBn#Z2VGDw;B001BWNklh@rVy*F}piWCe1|1K=f2Yee3rm9&^R>pdi=UqR!Cw~)^nqFt*q zyy660QQ}R8kZREHx{X#TO4mU*5ki445vHWBn-tE5HmTl|n+%1-dqKT91VxVrF8?wO zJHzsu9>P3u7gJ~aA@gfZeAW#`oG8={*HFLncJ%xu_y;Bs-ass|O$q%S;381dAO%s9 z5-nXCo>E1QwBVFL6AE~Zb0NjU3!DT*0ZOAv33$BFcm*Dh^n!1U_n0!XLsQ4aie|eV z2CWIO>mS6AZ@@2Ei1y%RLbP}hvX|jyhBPs@DA7?$wEjL+S(2o63hzj6y9Hq~914-m zV6-7I9+yTqB(>ID@=u>j_pqaB9QAy%`Vh+Y@m5j{@|Cr!6V-yz=KktEaPxPOD~`jN z4515z6(}V^OYjcm3G*_9fPNdFfuKO7Eiir5wnmfu^HVf zNW8@hg_!PRADo20_&+Rs;V&ayPFV`HPROzz3zyEL{X3`QzH>3Ge-QHrzm5OmcWEwM zicuxr7qsf(k3xDd#$tq{r8M?MFG4Ii3~~F_I3pKm8T{kN=XiK19b9#94>2IKm*w@*XN3Mg!&L-^9N6cR6wH5Ld0=Jso1& zIKHx@&FKq<5kz<)NhKIx;#?m!lS54*RD{ZaMBuyy0|_a@d8`7gpf-07{SW^&-LZKz zPJRup*24EY=z4?6@eS}#pJpW6f+!rNR;Z*-*VIVQd@pj@2qG^iiw@2DFkAljd+6VJ zJ9DqUgR+*eIgVNSyjPJ8k78zKa9W_F2;nTH6=9k-3V|Swt@`vA8GGfayS{E7b37|PaxM?P?=0|+ZJ#@r zZJ#@LwnHXKS@rjy->r_~k(^u$YkekgHfQqzKCoMT#50A6h_g9+|1Ds26wW#eKJ}?5 z{3CBZ=pg=M{d&H>dGl_^U%6xni)yu>Z#`$7wO2YaJ(9hbgt0TU^91?SbDqPAW4m_= z`r`WajOPzOK%SEPu)P%8c^P{aCO=R217KJ8gGX}N%P-@$kKD$@4=2bcb6n}@Z|<|< zKR585lfJ{<;SH}MMMNRdzybvht5`uZE_34@4gl+Fil?5Y*C zU;hTUZ3Ck>+=jdL+sxd3EiRUrq=9w@p-K`Y)@5Mw&GQ*AxR+Cs5lDs z5d$wH*5mPbB_5tRBOStd@B+L-s~D*?LMjvr=`; z{s`*pU%-y9M*zvj31nwF4B+wxs|+G9@ghOw8t(<(7pSC#y#2?Rd+$Pcu(_l7;%A9! z5l9J34kn=qIz>=Jr8V+6A+|a0j2DyLa7E}^r4y1QAxWAfNs~x}8{dq1|5+sGUr4lY z4Rm(kiWv}tq!KH@s&EtR40k&LDn-m$31SqCgjyZ_liR4@aLq2Sk-G0TLiRx)=_7EC z*cEWicR?t6QKI5NQ*Z0)(FOXY+;d35aUsU`6PuaX%{^*U*d%&%X;{11|tRiFrfn77{*UO z$krcxmPR*c_{v-0np>H8<2z8l`eGC%aUsYeLF@$4hTHK*6F2s*3;tb?F@8r#i5__} z29O{cojpc&{u|%MVPE_Xjbop?2Y0$=_~e)Ktgl?d=*wUCq}TX#WCbhuFdwEy?HToX zU!%r{`7kTk&kaycIw@qkJPAH~{P7$+XAW8jVktR#WQ4ys^2ncW9qZPGwd`f~uC{&> zp`Cq}AGVi5I}2FATGsAXV7)iGA2{pS{PoRj{_19K`M@oY`SWw0Glv&k^a7I6$F^?Q zvX%ub;F-z^DXi4+z@u&_p%jbXbvE1n^<2!3iCI6F9(n`|PCtuzr=5X#0%>n6b$G9R zP8#D&gUx1elhZ_F^WjI=(ER2%5ikCAdOD)ko1xWcGJV<^O#I|-=3ag!qbgxX-l0pz z(815a*M|^UkJ5y+n8JI&A_rc4zti0I9^-s4IvX__QsKuR;{NOY2Q{;UgEnRGU;o3z z;l~pH={d|vQu<{F=^+-5Y};1iE$d<4SP&|{1O=i9Q=Nqn&`5)cmlt?I)?&zWupx~} z34!;6Omn**zAHwUf>@#taq6gf;)S&J#RHBIDXk&k8vVsD;FCVds%H`X>$#XaZbB$Ua_61Y7L8H%Iw&L1 zLO~hCqxKe@hg^_6>uAcad=7K%_wi?c95rtNV%s*{!X*e-BEEMKTyP=vw1G?#e#th% z#BjHJho(DwIa*1)3HN*WKn&406)U85Sd-zUM0ilng7FBiu_i;QkP4hyl^ zG&=usA&nQm8dpmg0;bolr8zneF*FCEB)ZhZOO{e!v;gfrcte4w=1Uw2@w(Tt>7|#j z`1@aFRrx|DjN+d53`>rGDb1nf^jsg)%R@U|sfeAzXi4cx(!zj`LW-Rf2=9nnqePUn zAGiwcxR%zAY3kSC13$Q$iRZow_xo>Wo`9m=#mhRejuCg&+!8u`#&m>l` zf`8>-c@OW|RU`3qW(iC7UkcM6!wYYQ>FFnI|1PQ5x&9?DdFtMO?b@)0eSq+OFFzu# zyz)tfc0Paq{g0U+w*Hl`{Q1H=XPvcImDwbdoW)tYzFz`7VA!i-J>N8d&_2UPcKEKbBk%=sW(&BK)Mm>CO2K5b6;YE04 z2_Zu_oSly_4~RieE*~NoA=4-P|AMRTV_UgR2j<+vxzK3)%As0!9b9FYPaS02gVLuZI*)-^p zuopUqzQjIo2ckBNT(}r?3MLE1^;i%IxEv;XkP2utL%Ng}uzn*2C34v^+{P`qgAYfO zAU58ITD1ta6hH}S13Ej%w%mi05u!dsRBuwYy9f-<<(O`p=I9FKyoD5bn>bbUH~fUC zpCDJR!nqvfZ0IoNJfaN6z(#qblxP=+b59FgKO@^dMbsLm=uQ(Kax8Xo1L~m-L@N&l zuW>~ewCCU}@8SMzcM&;1Qfz(xY9Iz7LTVQl>m|z9ps6A2gKU5+!1O@X!foq%A&TP# zL@6#w5TcLmcF2kddG6<^A9n&J9{HJ1AV2+a#Ij|$C`O7dxHh8!LP7vr77xdNQQ;xSf`q$$c9 zq)ZXAq&K-9^S~{bhpuOIQwi7K1V6r&$rE3O|KLYyjUUoO>o>FG zU2n%c=f%uhzW1AN{MFRnE3*Dsd2IvUJMxVFh~z>p5pfEq?E50>CxUbE z`OiP8j!jPq>(&JUA@@zUm%T3{06zD*C$*6;yX>-A`C-4gbSeM!^9X=->)ZX?=qAFY4?0*r5l_5{4;y>w4|E7Dk$$q+&k zMGdx1tcQR27v|q^DU3;2dn{9{R-z9&3^BHfI2yqu2~J2P65%CUYlOFmyi3_>)0tdP zXWQM>cC?v4-GeKyf~&vB)bn0R_LqOh!g-4^MGs*t)axh|z0ZD@p(ymj$Nj@z2)H4)Dr zsd42AM}Ww%N+SCXA-XU;0@DVx18VrZgQ%;JA|xE95NMG@RKvyzqBKbBac(B0RV688 z8LpWidoC2V3W4xD=TtPp9wgBq%3~q3_{1Q*1g9X1pxb`2o%PEPU>N{NZ-Q9Lg=lB z-V}^1g{%ZAF~Xvq!NnSxN03T<-a`n9MWBR)(%_RMw5wI1REm@d6uoe+NAA;B9xh2(4_r0M&y0K`11?)`a`$w$Q7zg2 z%g+MuaCn4r2xmjuS_w4tAo}46gF0mRS{Tp~-g>+kSS+5h*F~uamDbokvjg$hA7u2uzleI) z5pcq@=`0(fzw}Vt{Kce=`7|11*jf!Q1)?xP4@ygBa^lW5vZ-yD&37^K!2RfrGjQz< z@RKcUfAMeN{^BEy%$tYFW{B|kxK3Y24E@df;7jMh>Z9qr?v?b8d@l13K5FmVTpr%P zW6$*w`-78faL$|%*oThvpNqZhDBph~!a4Zl zC!cU=XJfC&E3deMo2RCbLU8!d5a*wGBF`TA8C?Qv*TOsBxzCi@=lI+ni>!Z9SjRfv z!do~{xU+z_jQ@NyBld&>J~t26#QW#GW;WfARS9l-oM_AK44wZ)XtzN(;Gw(7KJ;ml z7rY2#3v6K#u|?`3b`&N46Mw~mFZ>J4Ukb;pfMxT^7mQ&R&c!#EV(Sf@ln4{jj0#g? z`)$2g2Klm-;LskdT z;0Xpa5^rsYC`b=w3C4#{Z7IQ&K_rNQ@g@gGav?%WkF$fm`~$%tL!oi_R}4P=b@0-A z&w|VDm=%dQak$3SCmaq|LsH^wA8Bh~3y5Q|cCfa5P=q4Dr??noslfKaL}H=Bb556_ z40Hu34QUJC?;=zQJ_+APLX<$+4~4O2kcuT^h)g&?y5YQ|6w1N-s~mJKc+SgmAd+kl zUP6TZkRA-d=uLsH4Ev({5GDA&La2d3Y&eeJB!0BkY!k5Hd!Nj)nS_*oFH^ z5AJ8JVEcCZJ|+L~-!lBdmyltx-7c|;iPD70UWfkwoX^NVol7(GaMTJ|btuK+5&Cm# z_|XNp<{VI=jjS{!rtG0RZIa1J(ybd{yoB2~!nXDFT4U_^oi~yG`foGTszZMU>okS- zw2}sH;|A0lUkWt|&Be4&dmY6w&u47KzG(yQJbZk5|3@TV+kp2BA2?wnANQ2SNTrn<200eG+tJ0{4VbsXE@_28M9yN6Am{yG+pLB3AQiX%E7Chau9EcYkgo9HMCn3GX0C5g31(^qW_igQ$U-fPp; zJs91-4Erc+K?sx*q8Xqb4C^Ew>~Ru=ma#zqIS+M0lm!RIfl9)A_VQq4*97D;L}ubv zxQ1Cbyv_~;OzNPB!devJ_vd|RHN*4YSUg~qB`V`Vt6Cl2)0q&B5D}PxCsaJ*a_($p z8;S6H21VNVIJ{n`;krl$k(~lxlZc)K55IKn9o#sxyN7i_qS^9-H6cRdMOZ^kf{8#{ zD2gEBw1u71ca;j_&~%}U@iiSX$*cq23wu)(;ogW`SiF=t+e50MK}W4DT))yn6vNCk z#gu^yzfOGEYI?2%g(tQi-xwmt)4lz6;v24I&czqNmW?of9xPiFnuG`sS_EO+D?`Mn zy&Yyc@X*v?JqG5kVB^O>#r%~kC;*-JA&H2?m__`yam3kY!iG(QztfWLJKj$AyptIl zTfR@9ZC~&0xkh4N@WDCo(mE9tPd!_=!q>j`)Y-x7)`f1P3-(`a>%J2aJ9&nOb{;7t zKF{ZWp&}CNSjU@r^8qIy9w{XLe8bY&|c7=gtQM(6y(rfAo7qGY+OVf|(u|lW`afAVl!qmL|BG zqepZZvIFmzl!KI{od#t&FoylZwGhsS*NZ_alNaIqwF*MO1K!fS^me+BDz5$2IVs;g z;mBYJ7vmwl$j2elk(*%LOC1bz-w(!^=|DUOik)Jp9*oF11q>7l*b&anyTQ5E!+NC( zwFhM_L>;Uh)OsXg?P8~=+lTYsDHMbNpM#CS^@6xj$>1Cf4{wkd=r9Ah4g=~61&Iq$ z8LvRK!~55K_}w-NYf^d;&B=rD95tZq4k9KRY#a<@nLv>b>P{?(I7BPFgQztqI#wZC zf(qwcPqF_uYyQoBaJWxQp#{%rNh}AsRURV_EfmRd?5ug#%Yc0 z_8}VFt6qk6XaQ~rR5=Kt#DkiZ!M$7(A}C7k>ZnD3Bc&Tbe&zzyQOAH3;kNZVz2Odn zM8D&A;d>Xu*aA@XAiVmWfuI|twfP*9%f6DbxgL;Dz4l-S-j)Q_%)O&id)D5RPwz?8UjI0((o6fh{_#Sc*T!cC zUU4e<+FvDYj9`jBqL-oK8pW1-DZX(rwHtqoQU=l_2nZ*FvFUs;z!?~Ye$cwrI-JOn zsvh3gx#0CSgP$b@J3UBO(m^a(J22GUApJ#z^cf^XI*1f&QU858kDe0o7e^e#2i7bf zh#-#;3fUh__e~^`Qb9O*HxO1KI^fzJWFrNwann6y9Aha_1{?(vy{oW0JZK5$BEY37 z(iRk1K|HoN7=KgSLIB1qqz5ktJ+XFnV3Iy~_OZ|y!^Z-XWkgw++)Yu2y^M8;Ku8<3 zVrv*5N4U-o)YwQ!!`U_wjBP1`_r4Z~PG3cV$PA=A+vx6$@C@oUguv$oHj0q043bnw zWM!Y!2Ls!u4TLr1y&jQ@1_S&;yUtx=F|J{)#S|H;G@;I6sDacGw5PG6hDtS9LzeeQ zM}~qoz0C2o1p4OTKt&Yer9z}JC18y~+LA~}DE+SYKl{4d_|T8<-0j*+z`Wx$ia86g zX`MO-Gr1MjoyMvZU2j0YkH;a>8oBdCc#8fMJo|ZwyhHSZ%aBXwk(&lO)rf2o9}S_D z!jxq=?^y0?VQj5MN{Li8tn;{9=m4e*LpC#mY&P+~btX}BE=3X(C6c0NV7N&mp<~4feSl(FU9G#jW9@VsivZ$;%OlwcJd4i z?d(xAG0AzHw_nnm*0Pp2@up{d7p5o6e|6wLy0hEAJ{BuAoZ8qwU6>yC-n#!@yf5kH zQ#A7o=lf7fto29_qU@ow8H(xclpbo0A&Mx%r72M|40Gn;l!mDtc;81lgBo3mFLJW> z6tPyIB-UCK0#{f>q_IZQ&!$MXKZGet^qj@0tfVYJlhz6;C1qJ+iUL87H6Aab5QH!p-g_b$p=5%01yV&w9iyTIV~Q~S*OhqT zhzPy(g%CuM!VAS+_dmeNzyD{m_V4R||Cbzd*dZ8eh@+S+&kzP$BO~}o(QQv-`aPU; z5XFeJhA=&(v4}Xvc}L_yDoySTJ}(fcAcmX+rHRsn2#Il)C`rOFK%3!(z{wiUIfUzl zXa<^eY?vgjk@tGIJj2@(XG^5>7~>EqaxKtW6MIil6d(mjtp zbP{7*b;wHu5KDz~j?#x(0BbFgR1_Yx(nP~eA{70ZF7@FN3MC*fiEW>vD8fCL*06Yr zeoh?6I3Dx?!MhK7ig;^sT=;ze&hW7hTm_IaP-;N>gv z-V-Mp=Ry~-IF3oi;Y_Vxk(cRMh7$$Jd4twHTu{uE@d8AY2`v z8%XOk7avSgYwY)DUFqR|12^VyLk@S9urnyg+kxCQCHLSBpp@^c0vMf001BWNkl_u4oqNTY;)uZIwdS{&2qw2@Ivv(cd4nL!9a z97kkXiIbjMl46}j$%uNK(9eULvfuCFOGBeMM8DS~%X-v@hWU#>`*S|?Pyak?-!^R8 z!0^xzeN&*N#yCS7)flQbD6M6pJw@chaJ@n}JPP0Ip|!?3M^O~i>-FGyHlc%%QNe)j z_cLUyQBvVbLlh+;U8pozUr=ujq0qEDUC<8YElJb>El8u3?K4wBjMyCSJ!()dA__wx zJaLi?(w;;}Pl+{UX&7k?(JT5W6v@CCHhG5Bie9%%p7rp9icv9050X+2gqlKYMX%Qn zweLD&WX>2;;4p*Bt9=twUpNI9JG$f`h9w)zC)vq`s42Hzke1V|ErGyko7tUEg5Q!(eHLB zik#Na9IUfsGdma>n}?K&e!t7i%mfP-Jfyv4T$NGxCJcyxND0y*je<1N-7VeS-QAsn z(w)*N-5}lF-QChXo9CJL|NiFd%>98A+~=H~YhCMFu{o!Ts>!0@{UJ)7vv8+Lo?G)c zCI#i>%UOQOjhl`_`_iD>M$6&&+Z!nhYo$J3!j4F~M`tP7ASG1_ihK}?@~zn;&E;r8 zv=dn}i((4GT5Tp!+^OE7&YLxlDM~cRv7=E`P~cn^>Vgbv{}UCl)StH0j=uy>4Kn7q zHXfSE81+EfAVk`=nfVh$_LWb*+lY$N?=K~AlaVy+rn@_Fa5FRabae^V@I5@-J2X}2 zQ_!!V&YBHjFLOlxY_Q+0^nAEpj>Na?BU*AhEbX$@&u zrKnK17RX{ewwSLpoH>`5X3Jej)rQy*_OIw!`JTYG9V=hI=J(!-qtIpdfC$lVq%vVh{297*rjyJw^LdYf$MYtP_)Qmh(7)vX#pHw2Kmsuxn<{NmEQ0dE9? ze-tjHzV=>R@Ujvg0MP*A`M0cxOG%>B`wIcI5JM=VjT%3H{M z^Xr@W%vlgiGk6yfmw9a8p$M@E+*}|iC?wSFJ2I`TE!DQVdYp&?QZdgXrg!lEHlIgW z3&K?_R(Q3If`4mTN(+IDj2H|Dk^@cSUiLgP=NGnvg5O2MY(B4#zvQ^H9&%rYH5>H< zXbmh@f|lEUiN090La8RQ4Ne4%STyJVc?aBz`$^*=%}lvA&!Ia-sttb)AG&)pGI%|z z>AW0x)4GuPKjVaFGBh-FHvZGgL5U0cZ^mPPh61iaMejrA>gfe|H#R9L$;|(CveF?s zl&uoL=ZsNUmTcb8daS<(^$eQuwHqD2+^o3M+TtmvIQYnad|RwszLOP9uyE{BJiYO- z`oi5y;BHYP_BxV0ft09V?4($)=r@hXf9I+}ML~z?vK=bSPiH@L$)8*Y|0-iH z`2YKhlc4D|U()PE1f8GZ--U!NgQ{7e!W&QF!+%=y-{BvnJ83%QrfJxUR_*=$c_Y<+q>#Bl4`Vmg z9!d7&FuPYjS%S@~=Zzw+!v8EWV}>;8;P*83I`KCuaP3X2PgYtN$+HS63iRQ#%{$+k zAC^zk<7$~089U!%YW(SidU~Cluy$h$MYPw!a@frdr`Z7UY?EJqm(N?+4N}+rvD+Rn zi=n*kdxOmRw<_c5h--yo7vy`jo#VF2TFQY1)lE=9{JL7cyOW$foqE4~C6R$^m(aeS z5a(6kqvTkn&IDJVPQQyJ@;2yI5eA_ zYOrz*L8ZQ~?(X&V_4cFrD$|(~)tZ~|$jF^V>o%cMB}T)6k8W27hK`zp0|P2xFYd&ovjuh#|Vc5`Css1Dv=KR%X{kwF0xvU_~IV*LJeu0o&l;iyWZ!7g{8 zA~Tb))^f22l-8nxY0Ok3CLu|p)8&ubvWLKDchDJ5{uU4%ytt(mjD){&d%o$|s6-w^ zZ@(kCw7lHCWFNds;L8iK2kqDP1zhZzJ>FSaS&gTy4Oh>0zpQ_)|ZPhXzPM+{k6S@(#Ei5&RFUu!W>4Abz}3_NDr+u0Q{#FL_iT5a`3u?O<&#ylW=;%-(t-8_B)6*Q=K z(m6P9z!-CNq>7!@<>uscomKt*O+rLO6c7-Af`|7bI5>D+MMDE`GEZs~$evQUp5RYj zAu%y%5azRG+f#+|7^gSO&a1X3OKcE9h`2q8^!hkYZ1{M1a0mz`*V?-yX{9tIgoJ<3 z9wFcZ{Z_pmBHI078D0Mw#2i`-uXhHsxtwLrciDlj*S|em*ZcLp#0We}rZ5j%KsEZq zBHP`b>832@TQ1hRxVR|X?e6Rtv5L?nq;T~P4u<>qK+xYTtv84eqWou#q$XFJE0<}E zOJ#5`3oh1JueMU|4rlPJ+BAR9;ASsXQr}L^&L&Q4YimOq>)*Cp-X2V_)Y4YhR!(7n zhlh9Ia5@^}0+ravkHHqE)f5vG^FJa+B;cGY5w6tljcmkau?m5tDfq@>wKV2{yo#Tb_`E3fXEAV{HAGy+YQ~3IL(Ri#Voy|TdiP3oB zQVae1aEGbWt|8U+V&|Q)8DE;obP@W+&aeO&i{-myI$fx!s3@ttR=pF`rPuLDBo2V{ z&4e);O4PjtPQjNFyQTjAP{YA^Y%lMNVU{m6G|Z3biHUt8pFE*`%FAirV|=}psGI$x z+XVxdZW`HO-BBV;jIXRh|>i`yy0z&9+ABAzkmO3&pMG^fwJ!(9WA%hAdaHb z`3r$TqY+YET#Qxi$G&-RFwhbB9-B_bXTHGV?(VMnb|c*5c0G7&dwco(KCB^M_jTtH zz7EF-R&S{Fa$`;Rg;JS@DV@JctpzrV^~zRPC>p52I|^}mvYfI%ng3$BFgzE#HmmJj zT4^tX&z=_f_~=2S+1Rz4;VmsF2n`y}SE!)GrVRGCDvLNiPqk z!@-hU-`pgDDfw%3dwWY~KJ!&iU!M*1C62ye+KkQfp2>J5wS8qJ9f-WwDFcOwM8H<2 zjywe?bjqr!g*7#CczJo%*Vj)qmFb-ndYv@5T~Pulh~lqCh{7MhJ9f6`!2T*AdAzyZ zua6)zjYrd)&pO^uYt`AT^S_Rmk`hJ=i#7A3=l$irQOxIW%s?u7JRH|yU~U2LT*vI} ztkKQkOerob5+1~*bY=prwlGb?=EjC!T^$Q*XaLy9Vd3Gj#nYg@3Y6$(HH|%$WT@}n zz#LC({MB>p?4IMbJe}sQ)Yis)maK_H>pWGcI zBS;MzR#=B+Wo4kzc6N3M`Yqls&#wb7`&)QE2kfZ|&Kpt+iuXkP|Lq(d9=As#7#iMk z-J!w3-__MqHjnMFpSF5Gd3Uw9XD!%qa&fu7Jl#m8R&a50N*=|Yl7dOy=%>i2cJbJs z$ThmqokF*^w(cAS${KVaR-6o621Z6R4H}r3n8H7>+5sGvyg6C!hQMILT5fVS2A%SF zJnubPZkp|~oySA(uz3rlh0!RGSy*5un9+#4mh@du`bS1E-l+cXR(}2nFDEBg^te1e z9#yJd$6&W5T097kfWYM0zh!rHbd=olUb_tYTd*K8J!xende8ON%n{90KuZhP&8jyK zkO-OXHzzJ`Zei_ICNiK)*i0rUpe?&VoEWtGy-nqGohb2^wv?faBPAo7uLcW&p65n1 zx8q6vzYXAZIGT$Bc>F_}w1}G%`0`4S4Y0{go@BqSsREV{o&S7`P>w;O=EkU-G!&4fhRXyAo_ zhJ|GWiynYtG7MTRNd<+Ev~7amZES9`xnF;^-yK1R3RsIo#lYxUYOsHO>-_xO zVx>6=+y?}e8FO?DS-Z>GTDxQ#`?S#&>VH}m---d{``3g9O^OgjL5Mi&Y+U5iIao?I z_m`$%3#m4N6DT>)1G>$lqoZ$udVn~)xiLQ9=yo`m3dLqL${aUwx!X3F} zEF?4(@{$_?Y#x1}R$nDRbv09t+!wnBya-|c;$kX3K0Yw38vrf=C^PtrNWj8sgAip7 z6)Zil(R=G{H$|nSw%6MI1%-v9GcvwwX%T?(q94)GiDLR+Yn;`nJw82QvsmH%ZF73I^!1kkHdddA~fYdfzdpFd8Fa(rQ5yGBI6R{|0TrL8HG3dDXnH(l5Xj z>{Y}&B4+CqNhPKD{&U4*r4RV{h<^bt#O8FdiDQVTRyVR~d>r+D?i@~Gd5N}kyx5T< z|DJ9U0;6wjJ=*AaSmMMAdN>1`M-McqGpg?A&nQzqK>7hKu?94eaG}D#HV|9~)D*tY z<)s70R~3jofkdFErYx{E8y(hxb)*MCX>5G_zk}j(97&XejtE?qA}M0@j~@+Yn420) zDta7S00R9=04kdA6qmO`UCz6`fB(L}uWxOuKjw9Rqx4L7cL$!fy=WQ4V8G!3xb@n{ z`py5~Sb$C0d0}6nXc3q5YO80EJ=o&rw-42(lL+1~yF4$dme_Sx%M%TajW{DbE@wKW z2kuYzj-55%p6qRG3ML(W%7Eg$YGld8<@TsQ0kT2w*E?uLx=*1EB12qIeDb_tcAskj zrp2ypTwY!-=5pQ}%L=0N1)B;;oT#+4;e{G=$XB%okWg_g0uK*Qj6FBN>uS?1goHk0 zV=~1fmVm!VD|_P^B5Hn09VdQ%d70yQIP(LG-Va!yKQDGitDH}@J}Ai&nq=OI4sq$7 ze1J=a0u{dV(S`|co8;8g#BFWqxw*MTNu$k1r%jl)wzk%Q7OJXZga`}_1cSS=y&agA zmZo?!G&(9$r~qD)@gu`S`>_v;ynY!pe+UWyLI8n)2WNDEvtOV5_w}nj`M-T0fI{>? zpZ$M%{(rQOnQujhta#eynX{{lmmkW&fR_)lK*4)?rn>5lv-8zsYgtlQ*qVV_;+ik|rxN(SVTUtz4n%U$EFHf*_=6eZGIX`OpPkfZw_EkEcO~cAT(%F3{?Yo8p zlg{;*;_(FQ$VUyfcVI0Qs;rPu=#4AR?fV;*-e+WdxV+~Uz2a%yy&jYK&MdB(*DfJA(fMt#}(2kh|u|fg2D^*5LmMo$!|&s zapdaw@2$NpeY2ST0=1!`C82Mmr7FY5#pmP@+T!4R*QMWKd>A=H#@sXTzL|Oe0H#E% zB^j)CfY>P6C&b$~DtZa@dwyU82zY2sDQIBS5rk-Sl!)~q9u7IUKPJodf?Tmwl41TY zOeE2L8DCR|4LM`d4pZ7Q?O;F(F5&M`#};eW07;l$@-YPfSh{+8qLY&swt7`~c_Dyl z-Z?+tV5(5Sgl<(5bgA79t@ExeYRnCW^(|BAK~B+nIMl6T$xAWZuEPZ^5|nZR$okE37?xd>Mmr^;PqK_}o5z>N_$ zc6NGzTzI7bq*}`=-vUfjp!{ytyL{ERKAgMK`C}=@NSc2%>fX$8q|&x~tMMD$G2;8O z@y1WoyR0Jb$Q(9DuDq9S?(yL?(N5gbFziNr8=;#|dF8vix?ahQrV%gY{7GQB`Kp!X z-K8yD{dl5Xx`lGUIiFCUHpOWv4{3z+IB6qMR7r=`{^++?krxWnVlAG9apG*je&x0u zr|bea9H5i4V=MyHN{s+U-`d?}wA<=y`-4*9Rz#N&P3 zN+m@lR6IrOY~|+uceX*Ad45S`^X8>y+UAhv;J)K9vkxXi*aDD}pHb1!P7lsA5)wpI zRj~ogjBwwiIu$rDqVH8Fq*f1=%k7?*Rl3q?CzCPYt%8hD%kOUZ)39}7CQ{1pD_tx^ z9P?D#GfIY@W3J;fnN~i?ILg@xG#8E50n7$4fC<^yl5977zRk1GaOL#gtah$^J%=L!C#l@8ZN+cNz&b>a!WOYb>;sXrxpqB*+1?7VMefuX0T z2k`ubY{h?T%Ro<059hr5fi~y3zId^O$T^*RIbQm24v#7GIj0CMhT1O%r@h6BC@`WN zCk&9p?uYEe0%;)#j>Ip0D@{(EQ*roY_g+mg&Ho0dJOBjM!=L^8`uO@jttD5Xf=$@Y+Wpr4ThO~sSv73wQc+d2--nfLmo+!9m*9HJWu@k4x$H;nfGO#)7cB2bn7d^~ z+VsY1J99<(B?p$hn?J$4P`KS9#K#ahYI|LHRmyk@eTl%=TFB0TIaH+sBd zf_}@3>R)d}CooXqv#s5Cb6NY+&K<495|xpmG!_-qSpxHZT+vH>QP{E54%c1!MAtaL zR_Okh?T@Y}DFCISqM~%G!s28p%$C`JE+F7?Q@|Da{pZgwKnkFsqYDWO!@vhZAtNKR zJ05faxOw*PUy)+Vzl#fCaef4R4G{$eEGXa)ppCAs?vnGW=dBXsDH$p0+QGrX88>R- zBH>+rk!SH#<+ce8?8r7+MjmhB#QLtKNclC5B*IO$=O6hP*G~!0u{|8x6q`B}>-nyh z*psuh<7MLLao7IchSNh5{XD)BhcGu$b7}}Y=;}mW-cR&lT`r_{9GpRs?N7dZ&Q4yV zgOCoHlW{Lgy!Jc05@L5Z9HK|~a8E}RoWT*M4Ek63dM1|6#vY`v@*xbJYKS0()s{HT zO1%jvE^%>jQE~B&$GeNAdRqZe*czSgFmwRW3&rk5r?f))hNd`VQ&LO@23+=T&vC-{ zwvUG=PL{Dvb~B&2bLJhr za`ey(&G6*UIzN*te(1f7_QUj`&;h4WdRn?$AlF-mlqri~LN`{$I_1=** z4%yE|jrr-EuF=3i_XUOw9iV@44uKn{3&@5(aKkV=C>q&>87j#C^8Dm_zn@Qi&nqY* zvbniAX(O8=E`KFGRYzqpf=*{ChS#sE*m6^cH@sb19-YM5m*RLDKpeAtcW3x;uAzW~ zPZ<&EX?$TxBRCZ{x4kyq)Sk_pTU0t}gqhAQyzw|6v|3eHp1-&+NIKExRkqN)TKikR zc&t$IBi{0CP5|84jrOPDo`{9mU%&nW%`i-GadibaE$VOaw!lWyazFm&_44Fg0r4jq zSc{Avw`b&-HHFtze}fP)e$%1jJT1#ol6B1|p%@!OrKQ@?CEJW_ZPDGX@wL`_wTNSP zs#nuJHlNOv;uPC|=335K;>@jFxVVTDAKBXbhN)|1Rqastaq~iv(jP+hoUJJ_W3)Cl zR_&Xtuqt-(=0*{dO>GDN(EB*?)iT5(7-kjpz%T2;(34ku;$QZIC%V;_cnf4Ie1nc( zQgDYvbi)QX+Yd#AaiQUOc2R_@-BK$o)3cgR2@O!6X7^<#V4~s6l{8(7DWw>WawBiq zg4cHO_!;wgk8+TL^p)*K&i=KxTQofjwWJFaPw+_im(1(wAL0k@1LHvt7@IJV#B_AO zK-s9IBdE`D;(*id1~hvyH5C_E8W@@?&j%-g77Yyzli4!-G1kLB?5nV9TxHVz@1m^p09IrGB&dLH#QK_X5g{ljjWr= zsm8cqF1}TCD{(?-=;R<(3vAWI4WWfE3Gaw)xr3d&J5YiTq(FM2-Z2WEIi{RtvgBZH zxc@TnP(h!>;at}JS<*^ad}3lk4iyy@NU>LiR9QLT-0Xb1g2(O<0v2V+Tb~-Y%Z)+O3JFj2_68FOt3UjHe7dXj zfNVXTq1J+bU*+;M@zG=A2TY!D{wA**JF;Sxr8g_d8>xnf&ClN6;k$_UuojK~Uo61C zt8GzX7&V=%tHbGdR}S-y4H=UfQ6D&O@9Ui0X^-&=eL6b>f3lo#l93`#6r8}It_Zha zxw>nsk6P2TsMcjIV&PfTT`5bvc$-)x*z<(%_Te|b?)s{HV0*84w_zxy~DZbr~6SNn!tNw`&zB7-}?^{U|F z!T`_TC#qITG$A3uIEE7ia8RPTa>9{#{Q>XL;NamI@Ho7mIVBQk$jX;A{()7It=;Bj zR3!zdg^M0s>t9h>H@oLoSKIT(8M%O-@B4u#784UQ-|EQ$SVAI3#uz_8sPH_w!oot} zf0*MY(&Ve2=R~REZVlzn%`n&Y&UqW2fz%^ZZ40{-i~Ut zn*OKNm{DwOn^Ud!F(sSjxn~8Hwx|u2!vYg`OANe8xw*_sjx9bc~II;!eYkzJI4^E$AyUo-(Nk(hMQ;@(M^| z)Hch!F0D18BB9Sckrs+8p2fRXS$We7(PBhnY9Ae%;k!0+C2J{GC1U{;dxh)n)#h^P z8^%UY6JlNnCi{Q84OX8(^@aJ{2I$%Qm8|reGp}2vlbcWSG<(H&`va9Q?s<*Tv9Sg* zcEC31q{#5-0Iq6DXgD9B$zQqQ&Qo9ub;XUM*InH0X5d1HtgY#AKi}%#UmY5QUx0r5 z_SMa$RHDLny3!)WAaaYemOKthDuqc%4b0&?wCe-w7Kn$%tW zyWbODa*&b~d6qKlY#tG>!er}}p+tq_?l%5h1UV0;Py9uK{%$@?>A;gA<3bysG(@OI zr1_1Ol#)+@rT0w2bn#&wBL+HpH(>AQYs@hroSdAR?+=PMHdjMDZFU3TYH&)Zl~%i+ZCC)W@VWBP3mLd|8MH%{6y2*5H}OOw zEFZLsgCyT;W+*A_FU^b;!^(wj@Bh`>ktuifQcG|RS{+>=Y_-_2eX5$ziKtdfG5mc3 z?Wrk+Me>o! zBBG}{O7B+N;t82N5f0;=>05cWISKP|W%kN{isVQGj#-k0Wch!Y-+Zo{wH*jaEj5l@e-0jRbV1x!7lC9A|#-(%7+J#t#i(G{23+S_+7 zF5-sf?B5%SlcIWfc-T0UXcHp?FK;-<0JvRXIslbJoyR?c$GYmr6jw_#0yiu+{M({M zEfjr55(%#lK!=cQCpWHBtI<_+Vz}|!($B&VeP=bz%?;|46?lBKDIjXSy#33Y%&~|0 zeRZW?HaC6ewq)s~KJYgQ8q^!}hxmiV`JU9>X2n*NFub>>ZF|mkYTQ$(g&N|;y=sad z=!!^O)ft*PoGMPAJ%NkBfgOLgt$8H9%zbXFIh1-ueeS3wiIFyyFG{gR$V$}>J7KkL z==to)!eONkO3ZWCI@YHx zU0=g1%wWlNHK86JPL2ILVQO8hbp4-ToNDL$S6bbrp7GOk=8?1l!!G7(U+hQJM?|R^ z7aT>Y!_3D*$%l$5(9?xo!w{yfBx6by_cMkufJ1>ltbV-<@$R6D;?Bws9KQ9WZpgBF# zlc-QdN2*H_=bXMK{OJW%+J*-A9NZucCj3-1gwwi>JJ{5|-^DJc(m!CYrqXG8yKiCH|y?g$w%hX0F|AzPESPaoOoVnvK zu($8yxqT0zrBA?5oUqBbUO@>ZTmv;zzF0rU^JCBU=J({j%(j88XAddyVuMXolLS3DpU zrQ;p#ugjz~QkdiWoXS!U_uB8uhFKQ}()Z|F#2)mL=J5%IT-%sQ!O@Pjs=^1rAAr51 z0a(fKfuF$yZXszL&T=X$qI`Ui^YilnAH6z)Q`zi?Xl8($sNQBB3NWf)0e`E9-{^EK z4!jZ|s$?6u0_t2=08=jk-T*fM=BcM-jn4Dl0gzRG{8@y+2M7=hxNf&%zQdIm;j?-@ zx|C_P41}UlK%AYQ>vjeqe#FECdR73?TEMkWJ_~5eO5odRk_q{vTVk6e=vShVTpc6& zYn5Cz5~<*aaK&oJNJn=wXXQXz0qny)s_xdWmRY|w-O?}exz~z4o7-yL>V}3#1?}zk zW_-Tu1f$ia{>?PwR5*lr?g%q+N!3K}O66YkV0ntP>s?lNBg{Eks2@vP>OKz^c;!(x zYl+HQe3_i+GOuq>>ec4KbQnAUKAXRzt+LdvOjMQo}`)&PH$ zU%rTbLeI3HGrB)iL>h&Sqw*v<4hlUu=+nk+&SuWBG~>Is#glt|Y%!gIvowG52MOTy zhkG4nO&wERE}^|2S3eox5Ax?1DZrwyekR{li0p5RP5Ux^VyCjGJQJ-gWt)|*i5NLa z&z3)*@~5_)94ARINRpW9Wq!nFHOQ@2?VTDMTLkkua39*)Q`N-mR7(LDX<<$LNhFtb zx~o{3Ij*t)=H)(Bcgb>sV*ZBx`)LF>vY`CJWzS!_)1a5@@Ha-gkPz*v*wm$yQLkqe&=qz-v(HBMIL~Y&poYw0@BzXHb zchM8Zc=M6OUDi-B!$1G)I(ryy#m9_?H`ApGdObY6Cnr+(4wpU*Y>?fur0{_1L ze$QqjJwx!>ciBWD!XmaBCyX|g$o1S@17{(y@^+5>#$1!lZYyMXV8Vnch!90Qw^F>; zoP~wu`eb=9PbvkA!|7|8uqou09b1e0jS=AaH5wg4YwJ`!00;K!5?`pb9DGmPtfM6R z<_rW8Oy){pc64;OoHXoyow)*3=x=~it1TC2)<%_l^YbZ!kw1YrvR2){K9J;1Ly(Y= zATlW?F%c_BJp>1Ql{)xr{mb*iJ2<#C06Boqs$Zveq0!NN0r)#IJ;z=61^NAkt#CAD zd>WS;*t)uN2d)(;kdgTZ1U{q>jO6_tLJ|$+34m@va|no%(Gd%wV@_khP$=5O{*9zz zNuC@_pV8fuO=Uf0e0V@;+3CdmG1SqJykt6K7i%r#)JI&t{MQ#ZF_rw8sN0yUg_lke zq!=$k{NNoV2hF9pXO8>Hr{CbvutgrsUQBzh$h)7L5!Tk3U#8daHY9iN(y-keKI`lC z(h=K1YhpSJ9Ta?OtoYO$?OJl3tXL{M7&R^;x>}wwrMcKRVXyc-hyZ`!*J|(>c&f43 zh;!g-a!aHTsMxz6XQ(XtsJcqt>hFn-{Vh5;oWRInN>q(&e847sRffl{?4bV*50{K( zfrk0RfLd7bmyzL>@QSQB+x*oReVmM!J9e@n;>DlsekM%pPr=!N5+PExIpLO53UA*= z7*l@0#WlaxSy)_D9%tCz+QO1d1#^46SXbwYZ*ku&G&}S>KPWX)rBAi{%T!{+)zgt! zD0gPpV%)^xhx;y$$nVR|b6_N2z=VbUxz{DTL1K!Z90Yu4DyeWIaQLe)I@sbEuxgw`lwr`wvMjrs|2J_!O7L9v*D7 zz9r7HH17AS`C2`Nn_PVdr^|A;r4;>KQW zCUKUn=rCs&i-bY zXum}cJ0pw@46vLKC=VL+dy!xe#@cX!1<&;w&k2H0s;!oj+3a^@6chqdQgDGsHw*Y5 zrfd6wt?=&sdlKN_0ItvqyKQkAje4E42=jv00@|6;bnM!}`=)b1^ z81M9d@bq9!O0%^2!<_K7T%~lU$qrJ-ffu5k#&HNDM)%=p0DDTqXgq?rQhKk3yFJEV z3Zs$eXP}Mix}ksOhikh;N42g#jbyH|A7_^9tjy(0P6$}|e*xGVD|95al-yYPe%ig# z$y6;k7_5%U$(E?}y_%nr@mS;FT|=hFTNd*{pBh(G?E# zC{6n1QyFcpX>QJ`1jT~_^SXLxg?&}Av-WgQB~F-o)}l9ShF3^e2i4wK<@11?m&C2F z$ik?u$09cCV#9n60d9F&N$Q^`5te}}RS7Y%&D=x4We17im|`=fQYy4KA0f86NWt1FY$$lGo?mA^fa8XQRZEh|)g?z}ek56RJK%gZH`B?i{@ zqASEm@t@iyf_-~G-$3f<)yN?(@-E8CbZPryLv4-nz;_n9m_S#w0&$zzV{ z>Ys!2;_8{7_y)=}t?c*(#S}=(Zn$|DUo1OE^8dMS(Hk%&1UbEpNM6#!m2G?ZV&{xJ z>H4zx{R?}svzC2J`6u1O8)Ew+hZE<+$qb{Poc%RlNIr*g`Z8>jn`Y1u?M2*}PnTa2 zadWR28Dj4y-EJpnOGXX@eQ|bX0}+YO(G&84L~^L$^%*z-wsWP$eSfz6Q>j|b#xTq3 z76_R9miiwuOs|$+zbA31DRXsy4|o>0`Bi8rh>87x3vzy|8PI3rSpu*SPA5yI(JdaY zj=R&*GEM~r4RVbLn9-NM$@_K8ygwCpFQ%vXINE8!60Dqf}l-c6_(LM z1W`X^x2m+E>ApFRQ!6$Ub6_$b!2Qcdxvjm8uOI}}kZGf(G2id$f9?&Mr#d9NdmxIL zza}|GHE(fu79L)d=2OT_A_Mk?G!p6s#A z-)jqrc@@TX`Umi{{q`1WlBDxD55!vtsiGwI9z3ihPe9IXW=e$|(6NJ>V9 zZG_9@P$Bp!1w!clXs2%xwY+9KoKUXeQxvcraVqoRek4VP=2R&}q;2Zn#njqd$0sU@ z(Be;O%po{!POcf3m_u(9E}xENKNAi1{suM%I6F9pUQ}Az2=Es^E4ps~w)z!EzI-j2 zqG@bwWESND%7=1ren2D5AoZ~t4S7YoaJ?z6c%x=oEP(T#LSiOYPEKlOCobhmJY$Ez zZY71l;F)8*H>MT;3O+?j#7@@yYYII3g4kSbfo2Oa9~W06+xJK_D|-5s7!oSXpW`eN zxVdTO66xsS!$;KSg|~zXi42Ns9~TIAX}GQis@@xa4zIIH5ZqW3T`aFt{YVH=$sBLo z72E&r?#v!=!oC7F=Ij=%Ap)YGr4YeK-l^ZDybkwN?HjG%&si_m1+lRj?AqJzvCmiH zo%VHFcP*jdQ$zECN}oKXx?#WAFDsKH&AK9f6`box5GRj02TUE-Q1Ac^wG}AQ0C}k}xP+sPHj?f`vKZ zu}Tj!o1czedGyB*gq_h0Ygto=e_LWLP#f#P#e%bp<7lz*47wfA#l(B_Q{|=O0U>Ja zioF;Z|A1Se+5Mc@TC4tVOuqDoMsrMS&E|p(86R5rtIB#%HQ@8q;ql1y?!~`8s`Ak_ zyI`|SwKh2YRd{o$BuW=jR;;>z{X^0Ij)4M>AyxJ@cN7-OBTDF|f$~?wHTTp)2{Sae zm*<6zSm|^-DF zYSZ7$nRXuBMdyTvhf_jROI31D zf4om=-20$wp*Z&Qp1-R&%v4c>m&K?`kR0+al2Oc z?L`kT&*qRL_)ThM%5qQxAD^82N|kxSJAyPBwI9>(jAPJpt?SI#A>U735*Nn;oz0*AOh2mtu1 zRvm)O^Z4rpBq4yX{t6I4+sSzeLI$G}RZNMO3*{;J2jgnN%G(9eY8ZoUAo3JMmri^4 zK0WTuRWM*@@@MIQXe6JN^1ruOI&^XDAe{9zic|+g9AX59Y;5QWxS|^>B_;zu#Wdlc z#7!4h1$j)&1j;MAqzsI&YZJK=h!dEIp;tSSPEIvyYdwIw_HwA6*XNU#E;*SlUg&NP z*BJ5H8J^EbABpSWkCqUJqr8bJfIFs)5tZzyM!LM}=A#tKn*OJ*h7*2T$i!7hXJ{8Q zh)85m+AT!0JHDnf)76WMR}v93ia$8CrPsPraoR8@lXF#ZV+C>XmgA^MGu0?#B=0O) z>y26#TU**M5rO)%p0{Hi!=J1t9Cc@Lju(onp6YJOn6%{*rtmBUipS-WHNuK`bDf`O z6ywV$r)X+5M;gR?CybD%I59Zc-GA8&drLiUdvLNJ)@7$XQeg_+(eL1M*uRu4dD_6+ zRTh<76p{U@@~XfmV2$*GM7AS##9Y<(%1BI=-|lEvOkbT%_#X5u?SAS`t(BpKH;O!d zn!+`+^d&^uy>#cn@i#`3;=;w-k}|(+FYvZl%yp2WADy5!t_ZK+VbrZ?jEC$^f?j^&`7hR{fLnUr0AQ4pq2Eu^5%jdPktzRrfN5 zV11K7?N!#H#*2|cc1;bdf$f)A2*7{zT zBI?Y+lTmsW1-VsPXhWJg{-LZR3x_hTpx6V#FV%FVjV(!p;Y+KmsLH_%$4NbtUuo z!t(q;3EMKCuJ)Jtr$e5eNNT+ElWj{y?RfbSDU@kWV0!0YahpIcm{t0_&R_&iZcppMMF);;&YbqBC6ZK-%> zrl3S9|DgO!=x&E{oZ3MNIBH4+3ejQ$Qbwalclbn-8E=H>pBnu@5Ym|T z_y}`{Jk0)db<9d^p@s?;D0qSe57$xp-5dUe)sJBxM#wmFbB3c?>xv<=-e7mpuMHJ7 zY5bv#@hP&fiYl#%GWt&O;kmYevzHY)Fuz1M1H@wOkT=16lT}eMu}M~o z^i)CJPh?Fl&X9po7TZ6qifRKpcDS|g`1o$8mHA7EAhpuMx@NOcvJ}k`#{(gdkl0LI zqiK~=;0Ufh5StP6kY}ulyhz*f+uo6WZT~if&OysTx_#XT*3{m?8RTqiQjlHgIhpM@ zHz_OmTF3OoB$5vzWAUc*v+kexkl(Ij>;w@D@O2=+D+s@|obfbu4u8h4yNQ#k5oxVK zBmRNuL88vX_e-6_=mc3LIR5rATw{>yJBV?qnsu<8`Dy6yWm(-nI4&%;eRQ;>!!KxH zkkh_13u5Q*E_PEqe5@$`nm994Q%8W%#LnO$rMYU(eBRefX3`AiF+q6Ti8 zG8JR7J%5_T`{j<5_0YzM0n*uWp}H^*#rE;mw#o};dSqYtkir~esmDmLM|ubx_;n%8~6oR-VrNSs+6*I(xCal z{`t|h4Cn3pN||HLBW6p8SHvN{G>&ne6OtE@K1TfdLzONK1`@0J}>%F$-;@ z9-)wU!}+7EpN^VuFY>z&28O(GggZ8i%wMct&)6LW%8%!0CgPi|ZNUKS>H90&0%j{? z+{rK{j0@zY`{VdfBdsLMv`NE>9#S{2rO6UT+ZGDNns|M*$o;o)gu2Urf~4lc6z|H3sU+v{Dh@@$ii@GNb(X+kzy5b^0j0f-NZ4f%I-K? zd&aIofPldA78B%CNDVY)d^xiwPqvjxcf<(+KJ0f|xAYTkM|NTnkME|~RIl8GRCFF;7g5x7H#OG(q)&UFs5au!jd zZNLLFCNT&{wp30uMizZ897%w^RcOWS!F4Qsq6)maWfF?PvVI`BKpa^ajkq#wzs&4u zYREr^zDY+qldrhb@5z(oJAH)ZSUqq)nQYUL?%%#J`DfS1^9Q$F7VS`j)}2Je%+T&> zMI=-pSNP%D16~R-cx~VjGAzaRTe>!?W)jKYxzQZsHylC;c&xwBsg#)ZxPIUl3Y5|z zvZTuo-+g?YW1Su*qaiG2tEIlNECEPKyj<_QZOj#yO+*6*Y!Z>kEs(%jZ9Y39BkXw9 zjMfAN(x;l=2Z9JbvttcQ2_mRV*EFe6-%vij$JoTa(n^MOcF*KkJCWbmwR3@gswV5IBKG-^t45}a_|d;C$|Jl#j4YpS zrj$o73h|(yAoO7hK#{enksGjvi}{kV!hK(FpeFi6hVEF1(-3o4p^&U5zH@qSV^)?` zRv)O8EMf4HH9OI-xm{m7^XcM~>1D@p@JRe=XNuQxuGTSw?7hEoIV6enhX*g@59eT@=1RW>byTW(}Fle~0B5ruGSX@*5x~3+s z?H`W4#d+ZXj%4SunUCnvP0DRLmDck(FPK`z6<;lFiC9*>#tD6jB|eO$u^-B+2zJ_r_V- z+0~f7UESQUkh(Q_JvGiRy_*Hwm7F{X&{GU%Q=fsDh}3SVbOup&K^Kvqc%(tXPkMU# z4+1WnPZgKW_u^)3Nydf->wvg&iMr^RO5yI`*K~gAxAQee54er0 zdayQu1Bp3ugcPIzZqU{aWg5n8k6KnsihFznmBmN9O310C!M0&uwy%O zW9~mQIT8t~GL-P0MkOWnTem$K$(%F;(%)z_MwHa!dfqt5AT`75zOb8t$_W*u=er(K zd)A-F#(s=3k-~}S`NIgZ!Pq2zFM`puS!CX6* zNkkO(>2?a31Se|5BX$co5%=7nRh*0cmg*i`hqG5p4oWtt0cuNd87$YBG$mHJM~_d* zHuHW79&|_Z7wDjI8)_8zYq)A2rZY|HzZbD6`gNHk6F))QQ&F*3=cH3(H#5o(cQyjN z5I)2D&)WxB)Ib<3C@v0Xl6HNCkmxf9OoL)oSO_qsrGq*yDlstx1Omw^M0s zZ0z#7IxcDH6yWQJrAqk8XFZ%c{`S@jmO>>+F{+-i4FxQ+)Y%k4>GKHD~dp zOdPm4pe5lG(!w(y#iQzuGl!3g!b|YRaArOTMN$UFi%$WTd*N~($|s;^{H=|y?W2l5 zA|L6P@3U71M;q(?RyTGNCT2)2x6@D?)D5yx>BbWSsw61py>`&Qb(8FeOMcryHpUEx zWcR0?;2xifhvLp4UOlq5^PQtjbP#{m+xuafw%qVA$zPav>F%H7Fb6G1#kLUj>z^9c z7I`8mPnZg0gp~?DMPL4Ld)Nf=#}v_R8V>kSA-&Jd)|dl$9?^Y`c-swyCdVIwsBayf zQWV$mieZzXnPi00j}&GtM`u~7nozhgpHfnK=;Bz_@h`aOtq{%OvcgKF$v8?}o#y%T zVwo@I+V1Xc%Mapq^O>i&Mk_ioJ6h0XHiO7Jh$jNRhAO{tYq&b+QtQR8*)FExE?xG0 ziSKFBy}(hYT|&MO#O2K?+Z94+1Q=A_Dh7!nHk2S)cBhT-eG_@mnN0^a1k_i+9{cyS z?dFz40m87XwNG9b81feY8ib;v;%x@<)-(d5J@%vc8mL)9imWVh2x;#pQCkjWd|cW~ zhNl@D=YF=h*v$C&yT>Q1;Zeeag0iy9Vn5nd*eTO($ATJO#BoBt&vnLfKQUZvB~g5s z6+kuo_{dv7T3f!y^a^{Xq=f-7-%`xayIes&>RLdDO93aQK<;3yFW$gQeLa|5vXZ;H z$jlZ8Aq`=v(YcgAHZ{U9(hV_rKzwGAKBzw4VAmn&_OWb%(@`tiVfQE zt<%~g2@an_%zTY z;)jTFu(9`!j;g(b>)o*1qCO))S&hL#C?a^XzNil*&nFen*h9O}>O^W*xWW~_y0Q_Z z9k60w@mTJ#rH3!9&&=U>GVBK0M_~WP_{TQ0MxX|YozhW3nMR-41U{XvjP1}-$J^3f z&*~;O3^+MON5^I<7L6&}ZUXgeI7X~ra7SEwu~jTTMkd_(U*myCIiI zXOo2cig=dl^mP0gb1pCjcJU zJ}w&$B)(58Y#Bb|SaB~^$|V$}QvKE-(QpW9A3n7>%407k>Tg( zZ$27TyL|#j63AMH78Dey7=S#~F){@V4@UtPh?7Hc+(%dDL*>^1YnTvS_2gY%dpEaiz$2dO zL~Xn#;{0xc9QmIzy-`&h3vggZ&c|WujC#V%%RIK8)$-eEe$? z_s%X|h?~O|cHy2a3$PCw)?8GW36ad*u*4K`TBR&lKyH}4KJK;eOZ21p+s!GZ!KCZ( ztUN{?c@sMGj>#N$$Lj5x2RpL7ma#DH+JN3XYP!^@CLapUr=X?P&fLa^hKX4l1D?3# z>BR-aLNtfk?FqIqS&}kibVooy;8`SO$ST9TCq@%$u;b0ch{q5xDXdPJJ><#y8D~IB z@cJK3L&l=o!Zh{HzxYoi&s4Y&N#>G71NA@+}V6s zWbB%8S!A4=kV`obP3Dd;_*JOa_X`uD(j0j`{_CnQPKFu`jOvfQ|r}- z)TDAO9=^DODfW%|=kNQT0!>gaqM_Mw zU?$Sb%!^mq*(nd^yzrG~@T-Vf*8!QeRB3(hmm-#JbC`8pEh|LTBz3=6|Ww3b7$ht=hOUrEhm}NIB`SM^k0&6poFI}TD=cXPn-HbsreycysU^(=65?mnG+o%J z=Sn=3lw*Y1HrOgLDsc%RDc!Ci#-|8Rngo3!)M0tqj-$`k^1}C1!@0$Mx3>4rX$RRW zYE0cOX_;tk#LL)9g=2NTpm|%PcWe^MpW3TJ|4EuuAoJ}FF|y-)=2!BuGkW4CJge7v zJTr920xn{TpTh$8E5XWhKT{Nfgeyc_6y4u&O8eRMU}WQAsB%_y#nIPvl(~?Km)NJ@ zdI&hjt09T@bw7%2GRh0dpb68j20OX#QwO4J4x)>1cAF$q|45xJk8r6Whd<#j8J;4z z3OV;hJf^3b9Gw12cK+$}x-9Vc*(=^=|KeD}?9hKuDI=5fxBE7tHbF$oT%!dpkgpW7 zP8>@eU$!OF7QM7Bg$);SFYM{*S>M`%dxTfej#yLI&Do#l7>!uRZfw}dXZ;8hKpTs_ zdabIUpkN8H@R(R8alc&II&DifaeUGrBNo+9N6soaPNVf7P zj`yB#N<}Gqe;LzxC1WAsGx6~_EL#a2aenA+%*%^g6B;`iMHf{GHO$L>IB*or@7m-<~&aTJ?GK7bjEtmu-9P1^nt$^YcR$W)29a z%DJ6-!_xbaE~N=$8@Z*Wp8)=V3Z+QP%xnb+PZPa>Ow@y{6BZY*+wNDgvEkM$ic3nO z(-W4_qYgYjKffQyYiVgoOHcpC$LDO*1QLm_F{aH)0ZmxY~>?o{yFG*ewWAW5l zvGsMq#^63v5_~2@7Qb^ z?43;zm%##MZOd&=wOYn}U&|50$;(-^Uf*t1Z4I?TlRX_$(SaT7 znruXuvAQuicC4jur`-T>0-eAa&s`%UBhWL8arM@oXkarjl@EU!cW9Z^8>1rlNGfHm z^rj9{=Gy2}!@iReZp@%;EQmJw;CotmWWrmL&q;2g-pP9?cobK%%1(||Q&Tgr`{-Ly zgSAV|2SQw0s>Me;2me$+;IkTP584w$YNb~y*J50)T&V~I(LFA%uBw7U#eh#>MMZ$M z1#m{1WoKRFG>adHM5s6iBcE?icCJ=G-v2|Gt@EN&HZbW5NmDcy z`W2bg{@UaTNiUC~;rhSsjAoKK!rfs#cu6>kJLq9c9u)&8HbWEZ-T&iab1ij&h7KjI3}d`E>(uie+`{x~Lf*p=pr2(H+SOxdvBAI?!GU8gaYli>*luV|fA`?}{lN*N|9KC|pS$fZgqAJoIptz5Db<56 z2{$jpE^~bTZftI?7+00Nse2LFmyVOb!$>MDB2ry?P-a<(MrY^euSQJdRI&;Y-ZYhe zxh(n{*zf)99;dP{?5>rze_J3T-uK>2-FMTMrs&F*U0P*jh6qZom-R zE6L1W?@?t0Ex{Xw}-G4Ed8 zXDcU{6-aYZDQ@QdVARxyHXrGKgFMmW}^c?>KZo%%fwe)^z&dYTrv%Oz`s_M4YZ z03uIl44;)r{z~uzQ#vL(j!;k!!Xqn2-)E6YrYLpP`)doY{$6|>%I;z3y5f~`!Uyo# zzko1dSnue^t6%!9zne&sk@QyR0-&GwrDOqTD&6ms@3gcC3S#Bt2+ELT{pf-5QR88d zU%p^vklDV?DkQY4ZT6s}r*AnDYRAe67a9^_k&k|rOC(E##Jtqwi9Z$S^FD-3i3k{P#f3>*h?0XkigTup=M1cgsUENDg zI+Vm=U*%0rSpXEIZcYP4;SptSGuJedZvI1F#C`~ODS{|MEgS~vigIed-~aULO&>wr zlQX^Cd@$P|;{zOW_7-XHq6M=Qo+fm&&J+6g62VLM(y^JTJCM@TL~%w-6kJ>yZLsNo#KCA3&9-vvSe2!_tV*9u)sq_38q*o IZ}RVd03%F@hyVZp diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 4444537e3ae..4644ee793f2 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -34,7 +34,7 @@ in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck ## Pro Micro Compatible Keyboard -![Labelled Pro Micro pins](../assets/pro-micro/pro-micro-pins-labelled.jpg) +![Labelled Pro Micro pins](../assets/interconnects/pro_micro/pinout.png) For keyboards that require a (usually Pro Micro compatible) add-on board to operate, the ZMK integration pieces are places in the _shield_ definition for that keyboard, allowing users to diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 2e468fe0b57..62d71f0328e 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -6,6 +6,9 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import KeymapExampleFile from '../keymap-example-file.md'; +import InterconnectTabs from "@site/src/components/interconnect-tabs"; +import Metadata from "@site/src/data/hardware-metadata.json"; + ## Overview This guide will walk through the steps necessary to add ZMK support for a keyboard the uses a (Pro Micro compatible) addon MCU board to provide the microprocessor. @@ -115,33 +118,7 @@ endif ## Shield Overlays - - - - -### Pro Micro Shields - -![Labelled Pro Micro pins](../assets/pro-micro/pro-micro-pins-labelled.jpg) - -ZMK uses the blue color coded pin names to generate devicetree node references. For example, to refer to the node `0` in the devicetree files, use `&pro_micro 0`. - - - - - -### BlackPill Shields - -![Labelled BlackPill pins](../assets/blackpill/blackpill-pins-labelled.png) - -ZMK uses the blue color coded pin names to generate devicetree node references. For example, to refer to the node `17` in the devicetree files, use `&blackpill 17`. - - - + + + + + + {interconnect.node_labels && ( + <> + The following node labels are available: +

    + + )} + + ); +} + +function mapInterconnectValue(interconnect: Interconnect) { + return { label: `${interconnect.name} Shields`, value: interconnect.id }; +} + +function InterconnectTabs({ items }: InterconnectTabsProps) { + let grouped = Object.values(groupedMetadata(items).interconnects) + .map((i) => i?.interconnect as Interconnect) + .filter((i) => i?.design_guideline) + .sort((a, b) => a.id.localeCompare(b.id)); + + return ( + + {grouped.map(mapInterconnect)} + + ); +} + +export default InterconnectTabs; diff --git a/docs/src/data/interconnects/.gitignore b/docs/src/data/interconnects/.gitignore new file mode 100644 index 00000000000..0a00d70141f --- /dev/null +++ b/docs/src/data/interconnects/.gitignore @@ -0,0 +1 @@ +*/ \ No newline at end of file diff --git a/docs/src/hardware-metadata-collection-plugin/index.js b/docs/src/hardware-metadata-collection-plugin/index.js index 89f057a83a7..f118c0baf5c 100644 --- a/docs/src/hardware-metadata-collection-plugin/index.js +++ b/docs/src/hardware-metadata-collection-plugin/index.js @@ -14,6 +14,22 @@ function generateHardwareMetadataAggregate() { const aggregated = files.flatMap((f) => yaml.loadAll(fs.readFileSync(f, "utf8")) ); + + aggregated + .filter((agg) => agg.type === "interconnect") + .forEach((agg) => { + let baseDir = `src/data/interconnects/${agg.id}`; + if (!fs.existsSync(baseDir)) { + fs.mkdirSync(baseDir); + } + + if (agg.design_guideline) { + fs.writeFileSync( + `${baseDir}/design_guideline.md`, + agg.design_guideline + ); + } + }); fs.writeFileSync( "src/data/hardware-metadata.json", JSON.stringify(aggregated) diff --git a/schema/hardware-metadata.schema.json b/schema/hardware-metadata.schema.json index 49755749282..8ca382c552e 100644 --- a/schema/hardware-metadata.schema.json +++ b/schema/hardware-metadata.schema.json @@ -85,6 +85,21 @@ } } }, + "interconnect_node_labels": { + "title": "InterconnectNodeLabels", + "type": "object", + "additionalProperties": false, + "required": [ + "gpio" + ], + "properties": { + "gpio": { "type": "string" }, + "i2c": { "type": "string" }, + "spi": { "type": "string" }, + "uart": { "type": "string" }, + "adc": { "type": "string" } + } + }, "interconnect": { "title": "Interconnect", "type": "object", @@ -93,6 +108,7 @@ "file_format", "id", "name", + "description", "url", "type" ], @@ -117,6 +133,12 @@ "description": { "type": "string" }, + "node_labels": { + "$ref": "#/$defs/interconnect_node_labels" + }, + "design_guideline": { + "type": "string" + }, "manufacturer": { "type": "string" }, From 5b9b507de3ef6e7a3bcb1ef61fe6d12ba46b8447 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 5 Jan 2023 03:18:27 +0000 Subject: [PATCH 0586/1130] fix(ci): Escape ` from JSON metadata files. --- .github/workflows/build.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92df03c3cb8..c266cf60663 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ on: - ".github/workflows/build.yml" - "app/**" schedule: - - cron: '22 4 * * *' + - cron: "22 4 * * *" jobs: build: @@ -51,7 +51,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v2 with: - node-version: '14.x' + node-version: "14.x" - name: Install @actions/artifact run: npm install @actions/artifact - name: Build and upload artifacts @@ -64,7 +64,7 @@ jobs: const artifactClient = artifact.create(); const execSync = require('child_process').execSync; - + const buildShieldArgs = JSON.parse(`${{ matrix.shieldArgs }}`); let error = false; @@ -118,7 +118,7 @@ jobs: const coreCoverage = `${{ needs.core-coverage.outputs.core-include }}` || "[]"; const boardChanges = `${{ needs.board-changes.outputs.boards-include }}` || "[]"; const nightly = `${{ needs.nightly.outputs.nightly-include }}` || "[]"; - + const combined = [ ...JSON.parse(coreCoverage), ...JSON.parse(boardChanges), @@ -148,14 +148,14 @@ jobs: runs-on: ubuntu-latest needs: get-changed-files outputs: - core-include: ${{ steps.core-list.outputs.result }} + core-include: ${{ steps.core-list.outputs.result }} steps: - name: Checkout uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v2 with: - node-version: '14.x' + node-version: "14.x" - name: Install js-yaml run: npm install js-yaml - uses: actions/github-script@v4 @@ -166,7 +166,7 @@ jobs: const yaml = require('js-yaml'); const coreCoverage = yaml.load(fs.readFileSync('app/core-coverage.yml', 'utf8')); - + let include = coreCoverage.board.flatMap(board => coreCoverage.shield.map(shield => ({ board, shield })) ); @@ -184,7 +184,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v2 with: - node-version: '14.x' + node-version: "14.x" - name: Install js-yaml run: npm install js-yaml - uses: actions/github-script@v4 @@ -269,7 +269,7 @@ jobs: with: script: | const metadata = JSON.parse(`${{ needs.get-grouped-hardware.outputs.organized-metadata }}`); - + let includeOnboard = metadata.onboard.flatMap(b => { if (b.siblings) { return b.siblings.map(board => ({ @@ -311,7 +311,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v2 with: - node-version: '14.x' + node-version: "14.x" - name: Install js-yaml run: npm install js-yaml - name: Aggregate Metadata @@ -329,7 +329,7 @@ jobs: yaml.loadAll(fs.readFileSync(f, "utf8")) ); - return JSON.stringify(aggregated).replace(/\\/g,"\\\\"); + return JSON.stringify(aggregated).replace(/\\/g,"\\\\").replace(/`/g,"\\`"); result-encoding: string - name: Organize Metadata @@ -389,7 +389,7 @@ jobs: - uses: Ana06/get-changed-files@v2.0.0 id: changed-files with: - format: 'json' + format: "json" - uses: actions/github-script@v4 id: board-changes with: From b7b563a4c3c19ddba7b5b300a08c690f149e7d32 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 5 Jan 2023 16:45:00 +0000 Subject: [PATCH 0587/1130] fix(ci): Fix another spot where ` needs escaping. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c266cf60663..6305b7412c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -376,7 +376,7 @@ jobs: }, { onboard: [], interconnects: {} }); - return JSON.stringify(grouped).replace(/\\/g,"\\\\"); + return JSON.stringify(grouped).replace(/\\/g,"\\\\").replace(/`/g,"\\`"); result-encoding: string get-changed-files: if: ${{ github.event_name != 'schedule' }} From a82a0ec4969487a0f15cd417b215360465d746d5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 25 Nov 2022 00:20:53 -0500 Subject: [PATCH 0588/1130] feat(shields): Add splitkb.com Aurora Lily58. --- .../splitkb_aurora_lily58/Kconfig.defconfig | 55 +++++++++++++ .../splitkb_aurora_lily58/Kconfig.shield | 8 ++ .../boards/nice_nano.overlay | 31 ++++++++ .../boards/nice_nano_v2.overlay | 31 ++++++++ .../splitkb_aurora_lily58.conf | 9 +++ .../splitkb_aurora_lily58.dtsi | 78 +++++++++++++++++++ .../splitkb_aurora_lily58.keymap | 70 +++++++++++++++++ .../splitkb_aurora_lily58.zmk.yml | 12 +++ .../splitkb_aurora_lily58_left.overlay | 43 ++++++++++ .../splitkb_aurora_lily58_right.overlay | 45 +++++++++++ 10 files changed, 382 insertions(+) create mode 100644 app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig create mode 100644 app/boards/shields/splitkb_aurora_lily58/Kconfig.shield create mode 100644 app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay create mode 100644 app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.conf create mode 100644 app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi create mode 100644 app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap create mode 100644 app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.zmk.yml create mode 100644 app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay create mode 100644 app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig new file mode 100644 index 00000000000..bbaef0ff214 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig @@ -0,0 +1,55 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SPLITKB_AURORA_LILY58_LEFT + +config ZMK_KEYBOARD_NAME + default "Aurora Lily58" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # SHIELD_SPLITKB_AURORA_LILY58_LEFT + +if SHIELD_SPLITKB_AURORA_LILY58_LEFT || SHIELD_SPLITKB_AURORA_LILY58_RIGHT + +config ZMK_SPLIT + default y + +config ZMK_RGB_UNDERGLOW + select WS2812_STRIP + select SPI + +config ZMK_DISPLAY + +if ZMK_DISPLAY + +config SSD1306 + default y + +config I2C + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif # SHIELD_SPLITKB_AURORA_LILY58_LEFT || SHIELD_SPLITKB_AURORA_LILY58_RIGHT diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield b/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield new file mode 100644 index 00000000000..35f8b2d1eff --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITKB_AURORA_LILY58_LEFT + def_bool $(shields_list_contains,splitkb_aurora_lily58_left) + +config SHIELD_SPLITKB_AURORA_LILY58_RIGHT + def_bool $(shields_list_contains,splitkb_aurora_lily58_right) diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay new file mode 100644 index 00000000000..eb838b24953 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay @@ -0,0 +1,31 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..eb838b24953 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay @@ -0,0 +1,31 @@ +#include + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.conf b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.conf new file mode 100644 index 00000000000..d456100ab74 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.conf @@ -0,0 +1,9 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi new file mode 100644 index 00000000000..08e2ac9ea8e --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) + >; + }; + + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "L_ENCODER"; + resolution = <4>; + status = "disabled"; + + a-gpios = <&pro_micro 5 GPIO_PULL_UP>; + b-gpios = <&pro_micro 4 GPIO_PULL_UP>; + }; + + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "R_ENCODER"; + resolution = <4>; + status = "disabled"; + + a-gpios = <&pro_micro 18 GPIO_PULL_UP>; + b-gpios = <&pro_micro 19 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap new file mode 100644 index 00000000000..376bcf26c65 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp GRAVE +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LALT &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp BSPC &kp RGUI + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp TILDE +&trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | v | ^ | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KP_PLUS &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.zmk.yml b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.zmk.yml new file mode 100644 index 00000000000..47d49a4c927 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.zmk.yml @@ -0,0 +1,12 @@ +file_format: "1" +id: splitkb_aurora_lily58 +name: splitkb.com Aurora Lily58 +type: shield +url: https://splitkb.com/products/aurora-lily58-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys +siblings: + - splitkb_aurora_lily58_left + - splitkb_aurora_lily58_right diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay new file mode 100644 index 00000000000..1fa61286da7 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_lily58.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; +}; + +&left_encoder { + status = "okay"; +}; + + diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay new file mode 100644 index 00000000000..7f281db956f --- /dev/null +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_lily58.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; +}; + +&right_encoder { + status = "okay"; +}; + +&default_transform { + col-offset = <6>; +}; From 82ff6d8e857bf581714f2a2e23af3aa6bf4cf4e2 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 8 Jan 2023 16:21:16 -0600 Subject: [PATCH 0589/1130] docs: update dev env setup guide Renamed the "Basic Setup" page to "Toolchain Setup" to make it clearer that this is for setting up a development environment for local builds. Linked to the relevant Zephyr setup documentation instead of duplicating that information in our guide. This also switches Windows and macOS setup to using the Zephyr SDK, which is much easier to install. Updated the command for installing Zephyr's Python dependencies to be OS specific, as Windows and macOS don't need the --user flag. Updated the IDE integration page with instructions for determining the compiler path that work with the latest version of the Zephyr SDK. --- docs/docs/assets/env-var/env_var.png | Bin 17317 -> 0 bytes docs/docs/assets/env-var/gnuarmemb.png | Bin 7914 -> 0 bytes docs/docs/assets/env-var/new_variable.png | Bin 60899 -> 0 bytes docs/docs/assets/env-var/start_menu.png | Bin 51108 -> 0 bytes docs/docs/assets/env-var/zephyr_toolchain.png | Bin 7282 -> 0 bytes docs/docs/development/ide-integration.md | 81 +--- docs/docs/development/setup.md | 442 +++++------------- 7 files changed, 122 insertions(+), 401 deletions(-) delete mode 100644 docs/docs/assets/env-var/env_var.png delete mode 100644 docs/docs/assets/env-var/gnuarmemb.png delete mode 100644 docs/docs/assets/env-var/new_variable.png delete mode 100644 docs/docs/assets/env-var/start_menu.png delete mode 100644 docs/docs/assets/env-var/zephyr_toolchain.png diff --git a/docs/docs/assets/env-var/env_var.png b/docs/docs/assets/env-var/env_var.png deleted file mode 100644 index 77ebbc5b82a55ad02d4de83a3bcc6e233c4fc3e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17317 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 diff --git a/docs/docs/assets/env-var/gnuarmemb.png b/docs/docs/assets/env-var/gnuarmemb.png deleted file mode 100644 index 42e38ec14bd510665141cc70f5e3d54d434e9ad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7914 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 cbot+4SZ;auyKYQ*HQUCw| diff --git a/docs/docs/assets/env-var/start_menu.png b/docs/docs/assets/env-var/start_menu.png deleted file mode 100644 index fc7d9b5eac705df2d48502f51ae45a05f143ac76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51108 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 diff --git a/docs/docs/development/ide-integration.md b/docs/docs/development/ide-integration.md index 6ca433214eb..bfcd5def4da 100644 --- a/docs/docs/development/ide-integration.md +++ b/docs/docs/development/ide-integration.md @@ -59,87 +59,42 @@ click **Add Configuration**, enter a name, and click **OK**. Change these options: -| Option | Value | -| ------------------------------------- | ---------------------------------------------------- | -| Compiler path | Path to your toolchain's GCC binary (see below) | -| IntelliSense mode | gcc-arm | -| Advanced Settings > Compiler commands | `${workspaceFolder}/app/build/compile_commands.json` | +| Option | Value | +| ------------------------------------- | ------------------------------------------------------ | +| Compiler path | Path to your toolchain's GCC binary (see below) | +| IntelliSense mode | `linux-gcc-arm`, `windows-gcc-arm`, or `macos-gcc-arm` | +| Advanced Settings > Compiler commands | `${workspaceFolder}/app/build/compile_commands.json` | -#### Compiler Path - - - +If you are developing inside a Docker container, set the IntelliSense mode to `linux-gcc-arm` regardless of the host operating system. -Open VS Code's integrated terminal and run the following commands. It will print -your compiler path. - -```sh -source zephyr/zephyr-env.sh -echo ${ZEPHYR_SDK_INSTALL_DIR}/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -``` - -:::note -You will need to update this path any time you switch to a new version of the Zephyr SDK. -::: - - - +#### Compiler Path -Your compiler path is +Open VS Code's integrated terminal and run the following command: ``` -${env:GNUARMEMB_TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc.exe +cmake -P zephyr/cmake/verify-toolchain.cmake ``` -This assumes `GNUARMEMB_TOOLCHAIN_PATH` is set in your system or user environment variables. -If not, you will need to list the full path instead of using the `${env}` placeholder. +This should print something like - - - -Open VS Code's integrated terminal and run the following command. It will print -your compiler path. - -```sh -echo ${GNUARMEMB_TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc ``` - - - - -Your compiler path is - +-- ZEPHYR_TOOLCHAIN_VARIANT: zephyr +-- SDK_VERSION: 0.15.2 +-- ZEPHYR_SDK_INSTALL_DIR : /home/marvin/.local/zephyr-sdk-0.15.2 ``` -/usr/bin/arm-none-eabi-gcc -``` - - - -Open VS Code's integrated terminal and run the following commands. It will print -your compiler path. +Your compiler path is the value of `ZEPHYR_SDK_INSTALL_DIR` plus `/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc`, for example: -```sh -source zephyr/zephyr-env.sh -echo ${ZEPHYR_SDK_INSTALL_DIR}/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc +``` +/home/marvin/.local/zephyr-sdk-0.15.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc ``` -:::note -You will need to update this path any time you switch to a new version of the Zephyr SDK. -::: - - - - -Your compiler path is +If you are building for an platform other than ARM, replace `/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc` with the path to the compiler for the appropriate architecture, for example: ``` -${env:ZEPHYR_SDK_INSTALL_DIR}/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc +/home/marvin/.local/zephyr-sdk-0.15.2/riscv64-zephyr-elf/bin/riscv64-zephyr-elf-gcc ``` - - - #### Compiler Commands Path When building with all default options, the path to the compilation database file diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index bf1bd1221da..8ce5ffdee9a 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -1,6 +1,6 @@ --- -title: Basic Setup -sidebar_label: Basic Setup +title: Toolchain Setup +sidebar_label: Toolchain Setup --- import Tabs from '@theme/Tabs'; @@ -10,245 +10,135 @@ export const OsTabs = (props) => ({props.children}); -## Prerequisites +This guide will show you how to set up a development environment for building ZMK locally. -ZMK requires the following base packages to first be installed: +## Install Dependencies -- Git -- Python 3 -- `pip` -- `wget` -- devicetree compiler -- CMake -- `dfu-util` -- Various build essentials, e.g. gcc, automake, autoconf +Click the operating system you are using. (The VS Code & Docker option can be used on any OS.) - - -On Debian and Ubuntu, we'll use `apt` to install our base dependencies: - -First, if you haven't updated recently, or if this is a new install, -you should update to get the latest package information: - -```sh -sudo apt update -``` + -With the latest package information, you can now install the base dependencies: +This option use the same [Docker image which is used by the GitHub action](https://github.com/zmkfirmware/zmk-docker) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach is also the easiest to set up. No toolchain or dependencies are necessary when using Docker; the container image you'll be using already has the toolchain installed and set up to use. -```sh -sudo apt install -y \ - git \ - wget \ - autoconf \ - automake \ - build-essential \ - bzip2 \ - ccache \ - device-tree-compiler \ - dfu-util \ - g++ \ - gcc \ - libtool \ - make \ - ninja-build \ - cmake \ - python3-dev \ - python3-pip \ - python3-setuptools \ - xz-utils -``` +1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop) for your operating system. +2. Install [Visual Studio Code](https://code.visualstudio.com/) +3. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) -:::note -Recent LTS releases of Debian and Ubuntu may include outdated CMake versions. If the output of `cmake --version` is older than 3.20, upgrade your distribution (e.g., from Ubuntu 20.04 LTS to Ubuntu 22.04 LTS), or else install CMake version 3.20 or newer manually (e.g, from Debian backports or from PyPI with `pip install --user cmake`). +:::info +The docker container already includes `west`. Skip past the following section to [Get Source Code](#get-source-code). ::: - - -On Raspberry OS, we'll use `apt` to install our base dependencies: + + -First, if you haven't updated recently, or if this is a new install, -you should update to get the latest package information: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions under these sections: -```sh -sudo apt update -``` +- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) +- [Install Zephyr SDK](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-zephyr-sdk) -With the latest package information, you can now install the base dependencies: - -```sh -sudo apt install -y \ - git \ - wget \ - autoconf \ - automake \ - build-essential \ - bzip2 \ - ccache \ - device-tree-compiler \ - dfu-util \ - g++ \ - gcc \ - libtool \ - make \ - ninja-build \ - cmake \ - python3-dev \ - python3-pip \ - python3-setuptools \ - xz-utils -``` +Return to this guide once you are finished with each section. - + -On Fedora, we'll use `dnf` to install our base dependencies: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions under these sections: -#### DNF Update +- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) +- [Install Zephyr SDK](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-zephyr-sdk) -First, if you haven't updated recently, or if this is a new install, -you should update to get the latest package information: +Return to this guide once you are finished with each section. -```sh -sudo dnf update -``` +`dfu-util` is required to flash devices that use DFU, but there is currently no maintained package for it on Chocolatey. [QMK Toolbox](https://github.com/qmk/qmk_toolbox) contains a working version of it though. -#### Install Dependencies + + -With the latest package information, you can now install the base dependencies: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions under these sections: -```sh -sudo dnf install -y \ - git \ - wget \ - autoconf \ - automake \ - bzip2 \ - ccache \ - dtc \ - dfu-util \ - g++ \ - gcc \ - libtool \ - make \ - ninja-build \ - cmake \ - python3-devel \ - python3-pip \ - python3-setuptools \ - xz -``` +- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) +- [Install Zephyr SDK](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-zephyr-sdk) - - +Return to this guide once you are finished with each section. -:::note -Use `cmd.exe` with these instructions rather than PowerShell. -::: + + -Chocolatey is recommended and used for the following instructions. You can manually install each of these applications and add them to your `PATH` if you don't want to use Chocolatey. +#### Install Base Dependencies -1. [Install Chocolatey](https://chocolatey.org/install) -2. Open `cmd.exe` as **Administrator** -3. Run the following `choco` commands: - ```shell - choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' - choco install ninja gperf python git - ``` +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions for Ubuntu under these sections: -It is recommended to install `dfu-util` to avoid any later confusion while flashing devices. You can do this by running this command with chocolatey: +- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) -```shell -choco install dfu-util -``` +Return to this guide once you are finished with each section. - - +#### Install Cross-Compile Toolchain -#### Homebrew +Because Raspberry OS runs on the same architecture (but different ABI) as ARM keyboard MCUs, the operating system's installed [cross compilers](https://docs.zephyrproject.org/3.2.0/develop/toolchains/other_x_compilers.html) can be used to target the different ABI. Building for non-ARM MCUs has not been tested. -Homebrew is required to install the system dependencies. If you haven't done so, visit [Homebrew](https://brew.sh/) for instructions. Once installed, use it to install the base dependencies: +First, the cross compiler should be installed: -``` -brew install cmake ninja python3 ccache dtc git wget dfu-util +```sh +sudo apt install gcc-arm-none-eabi ``` - - +Next, we'll configure Zephyr with some [environment variables](https://docs.zephyrproject.org/3.2.0/develop/env_vars.html#env-vars) needed to find the cross compiler. Create a file named `~/.zephyrrc` if it doesn't exist, and add these lines to it: -This setup leverages the same [image which is used by the GitHub action](https://github.com/zmkfirmware/zmk-docker) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach is also the easiest to set up. No toolchain or dependencies are necessary when using Docker; the container image you'll be using already has the toolchain installed and set up to use. +```sh +export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile +export CROSS_COMPILE=/usr/bin/arm-none-eabi- +``` -1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop) for your operating system. -2. Install [VS Code](https://code.visualstudio.com/) -3. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) + + -:::info -The docker container includes `west` and the compilation toolchain. If you're using docker and VS Code, you can skip right to [Source Code](#source-code). -::: +Follow Zephyr's [Install Linux Host Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/installation_linux.html) documentation for Fedora. -## Setup - -### West Installation +### Install West -`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/2.5.0/guides/west/index.html) used to configure and build Zephyr™ applications. +`west` is the [Zephyr® Project's meta-tool](https://docs.zephyrproject.org/3.2.0/develop/west/index.html) used to configure and build Zephyr OS applications. -West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/2.5.0/guides/west/install.html#installing-west) are summarized here: +West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/3.2.0/develop/west/install.html) are summarized here: - + + +Install west: ```sh pip3 install --user -U west ``` - - - -In `cmd.exe` as **Administrator**: +Verify that west is installed: ```sh -pip3 install -U west +west --version ``` -:::note -**For Windows, do not use the `--user` argument** that Linux uses otherwise `west` will be installed in a different location and the below instructions for adding Python `pip` will no longer apply. -::: - -Once `west` is installed, close Command Prompt and open a new session as a **user** for the remainder of the instructions. - - - - -:::danger `pip` user packages -If you haven't done so yet, you may need to add the Python `pip` package directory to your `PATH` otherwise your computer will not be able to find the `west` command. -::: - - - -Run the following commands: +This should print a message like "West version: v0.14.0". If it prints an error instead, make sure `~/.local/bin` is on your `PATH` environment variable. You can add it with these commands: ```sh echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc @@ -256,102 +146,42 @@ source ~/.bashrc ``` - - -1. See the [Environment Variables](#environment-variables) section on how to get to the Environment Variables page. -2. Under "System variables" select the "Path" variable. Click "Edit..." and then "New" to add the directory where your `west.exe` is located. By default this should be `C:\Python##\Scripts` where ## is your Python version number. -3. Close Command Prompt and open a new session for the changes to take effect, or run `refreshenv`. - - - - -### Toolchain Installation - -The toolchain provides the compiler, linker, etc., necessary to build for the target -platform. - - - - -#### Zephyr™ ARM SDK - -To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: - -``` -export ZSDK_VERSION=0.13.2 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" -``` - -The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. - - - + -Because Raspberry OS (Raspbian) runs on the same architecture (but different ABI) as the keyboard MCUs, -the operating system's installed [cross compilers](https://docs.zephyrproject.org/2.5.0/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI. - -First, the cross compiler should be installed: +Install west: ```sh -sudo apt install gcc-arm-none-eabi +pip3 install -U west ``` -Next, we'll configure Zephyr™ with some extra environment variables needed to find the cross compiler by adding the following to `~/.zephyrrc`: +Verify that west is installed: ```sh -export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile -export CROSS_COMPILE=/usr/bin/arm-none-eabi- +west --version ``` - - - -#### Zephyr™ ARM SDK +This should print a message like "West version: v0.14.0". If it prints an error instead, make sure that the Python scripts directory is on your `PATH` environment variable. You can add it by opening a PowerShell window and running the following commands: -To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: - -``` -export ZSDK_VERSION=0.13.2 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" +```powershell +$Scripts = python -c "import sysconfig; print(sysconfig.get_path('scripts'))" +$Path = [Environment]::GetEnvironmentVariable('PATH', 'User') +[Environment]::SetEnvironmentVariable('PATH', "$Path;$Scripts", 'User') +$env:PATH += ";$Scripts" ``` -The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. - - - - -#### GNU ARM Embedded - -Since the Zephyr™ SDK is not available for Windows, we recommending following the [Zephyr documentation](https://docs.zephyrproject.org/2.5.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded) to install a GNU ARM Embedded build. Note the warnings regarding installing the toolchain into a path with spaces, and make sure to follow the steps to add the environment variables which are also summarized with screenshots in the [Environment Variables](#environment-variables) section below. - -#### GNU ARM Embedded +Install west: -Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the GNU ARM Embedded toolchain: - -``` -brew install --cask gcc-arm-embedded +```sh +pip3 install -U west ``` - - -:::note -If you intend to build firmware straight away, make sure to correctly setup the current shell. - -Notes on setting this up can be found in the [Environment Variables](#environment-variables) section. -The transient instructions can be used to setup the current shell, and the automatic instructions can setup any newly made shells automatically. - -The transient instructions must be run to build firmware using the current shell. -::: + -### Source Code +## Get Source Code Next, you'll need to clone the ZMK source repository if you haven't already. Navigate to the folder you would like to place your `zmk` directory in and run the following command: @@ -359,13 +189,13 @@ Next, you'll need to clone the ZMK source repository if you haven't already. Nav git clone https://github.com/zmkfirmware/zmk.git ``` -### Initialize & Update Zephyr Workspace +## Initialize & Update Zephyr Workspace Since ZMK is built as a Zephyr™ application, the next step is to use `west` to initialize and update your workspace. The ZMK Zephyr™ application is in the `app/` source directory: -#### Step into the repository +### Step into the repository @@ -421,19 +251,13 @@ All subsequent steps must be performed from the VS Code terminal _inside_ the co -#### Initialize West +### Initialize the Application ```sh west init -l app/ ``` -:::caution Command Not Found? -If you encounter errors like `command not found: west` then your `PATH` environment variable is likely -missing the Python 3 user packages directory. See the [West Build Command](#west-build-command) -section again for links to how to do this -::: - -#### Update To Fetch Modules +### Update to Fetch Modules ```sh west update @@ -449,103 +273,45 @@ If you're using Docker, you're done with setup! You must restart the container a Once your container is restarted, proceed to [Building and Flashing](development/build-flash.md). ::: -#### Export Zephyr™ Core +### Export Zephyr CMake package + +This allows CMake to load the code needed to build ZMK. ```sh west zephyr-export ``` -#### Install Zephyr Python Dependencies +### Install Zephyr Python Dependencies -```sh -pip3 install --user -r zephyr/scripts/requirements-base.txt -``` - -### Environment Variables +Some additional Python dependencies are listed in Zephyr's `scripts/requirements.txt` file. - - -#### For GNU ARM Embedded on Windows - -On Windows, only two environment variables need to be set for ZMK to build properly: `ZEPHYR_TOOLCHAIN_VARIANT` and `GNUARMEMB_TOOLCHAIN_PATH`. - -1. Open Start Menu and type 'env' to find the 'Edit the system environment variables' option. Open it. - -![Environment variables in Start Menu](../assets/env-var/start_menu.png) - -2. Click 'Environment Variables...'. - -![Environment variables button](../assets/env-var/env_var.png) - -3. Click "New..." under System variables to create a new system variable. - -![Environment variables menu](../assets/env-var/new_variable.png) - -4. Set the variable name to 'ZEPHYR_TOOLCHAIN_VARIANT' and value to 'gnuarmemb'. Click OK to save. - -![Adding Zephyr toolchain variable](../assets/env-var/zephyr_toolchain.png) - -5. Create another variable with variable name 'GNUARMEMB_TOOLCHAIN_PATH' and value set to wherever you installed your toolchain. **Make sure this path does not contain any spaces.** If it does, rename the folder and update here. Click OK to save. - -![Adding GNUARMEMB variable](../assets/env-var/gnuarmemb.png) - -6. Close Command Prompt and reopen, or run `refreshenv` to apply the changes. - - - - - -#### For Zephyr - -By default, the Zephyr™ SDK will create a file named `~/.zephyrrc` with the correct environment variables to build ZMK. -We suggest two main [options](https://docs.zephyrproject.org/2.5.0/guides/env_vars.html#option-3-using-zephyrrc-files) for how to load those settings. - -##### Per Shell - -To load the Zephyr environment properly for just one transient shell, run the following from your ZMK checkout directory: + -``` -source zephyr/zephyr-env.sh -``` - -##### All Shells - -To load the environment variables for your shell every time, -append the existing `~/.zephyrrc` file to your shell's RC file and then start a new shell. - - - - - -``` -cat ~/.zephyrrc >> ~/.bashrc +```sh +pip3 install --user -r zephyr/scripts/requirements.txt ``` + - - -``` -cat ~/.zephyrrc >> ~/.zshrc +```sh +pip3 install -r zephyr/scripts/requirements.txt ``` + - +```sh +pip3 install -r zephyr/scripts/requirements.txt +``` - From fbdb24c6fe56a576e288db3acfd91dd67a6ff192 Mon Sep 17 00:00:00 2001 From: zhiayang Date: Wed, 21 Dec 2022 17:45:01 +0800 Subject: [PATCH 0590/1130] fix(driver): Fix potentially buggy read/write routines for max7318 driver --- app/drivers/gpio/gpio_max7318.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/drivers/gpio/gpio_max7318.c b/app/drivers/gpio/gpio_max7318.c index 3dcc710cd7b..ac9c5341029 100644 --- a/app/drivers/gpio/gpio_max7318.c +++ b/app/drivers/gpio/gpio_max7318.c @@ -72,17 +72,19 @@ struct max7318_drv_data { static int read_registers(const struct device *dev, uint8_t reg, uint16_t *buf) { const struct max7318_config *config = dev->config; - uint16_t data = 0; - int ret = i2c_burst_read_dt(&config->i2c_bus, reg, (uint8_t *)&data, sizeof(data)); + uint8_t data[2] = { 0 }; + int ret = i2c_burst_read_dt(&config->i2c_bus, reg, &data[0], sizeof(data)); if (ret) { - LOG_DBG("i2c_write_read FAIL %d\n", ret); + LOG_DBG("i2c_burst_read FAIL %d\n", ret); return ret; } - *buf = sys_le16_to_cpu(data); + // the first register is data[0], the second one is data[1] + // since we only ever read the PORTA registers here, it's effectively little endian. + *buf = sys_get_le16(data); - LOG_DBG("max7318: read: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, (*buf & 0xFF), (reg + 1), - (*buf >> 8)); + LOG_DBG("max7318: read: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, data[0], (reg + 1), + data[1]); return 0; } @@ -105,9 +107,13 @@ static int write_registers(const struct device *dev, uint8_t reg, uint16_t value LOG_DBG("max7318: write: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, (value & 0xFF), (reg + 1), (value >> 8)); - uint16_t data = sys_cpu_to_le16(value); + uint8_t data[2] = { 0 }; - return i2c_burst_write_dt(&config->i2c_bus, reg, (uint8_t *)&data, sizeof(data)); + // bits 0..7 are port A, 8..15 are port B, so we should write bits 0..7 first + // -- ie. this is little endian also. + sys_put_le16(value, &data[0]); + + return i2c_burst_write_dt(&config->i2c_bus, reg, &data[0], sizeof(data)); } /** From 41830ce19a71ac94a2e620d59c4d0a03ca6d093c Mon Sep 17 00:00:00 2001 From: zhiayang Date: Sun, 8 Jan 2023 16:52:38 +0800 Subject: [PATCH 0591/1130] fix formatting --- app/drivers/gpio/gpio_max7318.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/drivers/gpio/gpio_max7318.c b/app/drivers/gpio/gpio_max7318.c index ac9c5341029..04424b48b09 100644 --- a/app/drivers/gpio/gpio_max7318.c +++ b/app/drivers/gpio/gpio_max7318.c @@ -72,7 +72,7 @@ struct max7318_drv_data { static int read_registers(const struct device *dev, uint8_t reg, uint16_t *buf) { const struct max7318_config *config = dev->config; - uint8_t data[2] = { 0 }; + uint8_t data[2] = {0}; int ret = i2c_burst_read_dt(&config->i2c_bus, reg, &data[0], sizeof(data)); if (ret) { LOG_DBG("i2c_burst_read FAIL %d\n", ret); @@ -83,8 +83,7 @@ static int read_registers(const struct device *dev, uint8_t reg, uint16_t *buf) // since we only ever read the PORTA registers here, it's effectively little endian. *buf = sys_get_le16(data); - LOG_DBG("max7318: read: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, data[0], (reg + 1), - data[1]); + LOG_DBG("max7318: read: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, data[0], (reg + 1), data[1]); return 0; } @@ -107,7 +106,7 @@ static int write_registers(const struct device *dev, uint8_t reg, uint16_t value LOG_DBG("max7318: write: reg[0x%X] = 0x%X, reg[0x%X] = 0x%X", reg, (value & 0xFF), (reg + 1), (value >> 8)); - uint8_t data[2] = { 0 }; + uint8_t data[2] = {0}; // bits 0..7 are port A, 8..15 are port B, so we should write bits 0..7 first // -- ie. this is little endian also. From 2a5e914a777e4569bfbf08921750b928323d155b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Jan 2023 03:40:37 +0000 Subject: [PATCH 0592/1130] chore(deps): bump json5 from 2.2.1 to 2.2.3 in /docs Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 69ee0fc4d9a..c4cad7c0d33 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9158,9 +9158,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, @@ -22650,9 +22650,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "6.1.0", From 9d1070a140942f2e48dfbb811b07d3ad8a71d594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Bol=C3=ADvar?= Date: Wed, 1 Feb 2023 08:17:23 -0800 Subject: [PATCH 0593/1130] chore(build): update west.yml syntax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit West has supported a 'name-blocklist' replacement for 'name-blacklist' since v0.9. Signed-off-by: Martí Bolívar --- app/west.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/west.yml b/app/west.yml index a0c56501faa..b0f05aedb27 100644 --- a/app/west.yml +++ b/app/west.yml @@ -10,8 +10,7 @@ manifest: revision: v3.0.0+zmk-fixes clone-depth: 1 import: - # TODO: Rename once upstream offers option like `exclude` or `denylist` - name-blacklist: + name-blocklist: - ci-tools - hal_altera - hal_cypress From b7d5865e40eeaf7999a73fdaff1d7043babbc73e Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Thu, 2 Feb 2023 17:07:33 +0800 Subject: [PATCH 0594/1130] feat(docs): additional note on bug fixed in macOS v13.1 --- docs/docs/troubleshooting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index a535a4ef145..96f729b9631 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -23,7 +23,7 @@ Variations of the warnings shown below occur when flashing the `.uf2` ### macOS Ventura error -macOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. +macOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. Issue is fixed in macOS version 13.1. ### CMake Error From c065d451cb82e2dceda4efdb2991aeeeef1cdbbf Mon Sep 17 00:00:00 2001 From: Omri Kaplan Date: Wed, 8 Feb 2023 03:29:38 +0200 Subject: [PATCH 0595/1130] fix(shields): Fix keycodes that differ from the default keymap (#1590) - Asterisk in layer 1 was mapped to 8 - Underscore in layer 1 was mapped to minus - Right GUI in layer 0 was mapped to right Alt - Space in layer 1 was mapped to Return - Plus was mapped with KP_PLUS --- app/boards/shields/reviung41/reviung41.keymap | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/boards/shields/reviung41/reviung41.keymap b/app/boards/shields/reviung41/reviung41.keymap index f0450b195b7..d291ca8b403 100644 --- a/app/boards/shields/reviung41/reviung41.keymap +++ b/app/boards/shields/reviung41/reviung41.keymap @@ -23,26 +23,26 @@ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RSHFT RET - &kp LALT &mo 1 &kp SPACE &mo 2 &kp RALT + &kp LALT &mo 1 &kp SPACE &mo 2 &kp RGUI >; }; lower_layer { -// ---------------------------------------------------------------------------------- -// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | DEL | -// | | _ | + | { | } | "|" | | LFT | DWN | UP | RGT | ` | ~ | -// | | ESC | GUI | ALT | CAPS| " | | HOME| END | PGUP| PGDN| PRSC| SHFT(RET) | +// ------------------------------------------------------------------------------------ +// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | DEL | +// | | _ | + | { | } | "|" | | LFT | DWN | UP | RGT | ` | ~ | +// | | ESC | GUI | ALT | CAPS| " | | HOME| END | PGUP| PGDN| PRSC| SHFT(SPACE) | // | | | RET | ADJ | | bindings = < - &trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp N8 &kp LPAR &kp RPAR &kp DEL - &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp GRAVE &kp TILDE - &trans &kp ESC &kp LGUI &kp LALT &kp CLCK &kp DQT &kp HOME &kp END &kp PG_UP &kp PG_DN &kp PSCRN &mt RSHFT RET + &trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL + &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp GRAVE &kp TILDE + &trans &kp ESC &kp LGUI &kp LALT &kp CLCK &kp DQT &kp HOME &kp END &kp PG_UP &kp PG_DN &kp PSCRN &mt RSHFT SPACE &trans &trans &kp RET &mo 3 &trans >; }; raise_layer { -// ----------------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | // | | - | = | [ | ] | \ | | F1 | F2 | F3 | F4 | F5 | F6 | // | | ESC | GUI | ALT | CAPS| " | | F7 | F8 | F9 | F10 | F11 | F12 | From 72624a41fa627b143124f68ac38af72d18722015 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 18 Feb 2023 22:29:03 -0800 Subject: [PATCH 0596/1130] fix(shields): Add missing col-offsets for extra transforms --- app/boards/shields/corne/corne_right.overlay | 4 ++++ app/boards/shields/jian/jian_right.overlay | 8 ++++++++ app/boards/shields/jiran/jiran_right.overlay | 8 ++++++++ app/boards/shields/jorne/jorne_right.overlay | 8 ++++++++ app/boards/shields/kyria/kyria_rev2_right.overlay | 4 ++++ app/boards/shields/kyria/kyria_right.overlay | 4 ++++ 6 files changed, 36 insertions(+) diff --git a/app/boards/shields/corne/corne_right.overlay b/app/boards/shields/corne/corne_right.overlay index 6e79a858d20..1d7ed9ecd7f 100644 --- a/app/boards/shields/corne/corne_right.overlay +++ b/app/boards/shields/corne/corne_right.overlay @@ -10,6 +10,10 @@ col-offset = <6>; }; +&five_column_transform { + col-offset = <6>; +}; + &kscan0 { col-gpios = <&pro_micro 14 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/jian/jian_right.overlay b/app/boards/shields/jian/jian_right.overlay index f3b0da3d2c9..cac83fd3b6c 100644 --- a/app/boards/shields/jian/jian_right.overlay +++ b/app/boards/shields/jian/jian_right.overlay @@ -10,6 +10,14 @@ col-offset = <6>; }; +&crkbd_transform { + col-offset = <6>; +}; + +&five_column_transform { + col-offset = <6>; +}; + &kscan0 { col-gpios = <&pro_micro 16 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/jiran/jiran_right.overlay b/app/boards/shields/jiran/jiran_right.overlay index 75b9fb5af43..c3648797080 100644 --- a/app/boards/shields/jiran/jiran_right.overlay +++ b/app/boards/shields/jiran/jiran_right.overlay @@ -10,6 +10,14 @@ col-offset = <6>; }; +&jian_transform { + col-offset = <6>; +}; + +&crkbd_transform { + col-offset = <6>; +}; + &kscan0 { col-gpios = <&pro_micro 7 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/jorne/jorne_right.overlay b/app/boards/shields/jorne/jorne_right.overlay index 4f138b0be34..698bf9ddbbc 100644 --- a/app/boards/shields/jorne/jorne_right.overlay +++ b/app/boards/shields/jorne/jorne_right.overlay @@ -10,6 +10,14 @@ col-offset = <6>; }; +&crkbd_transform { + col-offset = <6>; +}; + +&five_column_transform { + col-offset = <6>; +}; + &kscan0 { col-gpios = <&pro_micro 14 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/kyria/kyria_rev2_right.overlay b/app/boards/shields/kyria/kyria_rev2_right.overlay index 7476bcba145..08dc59d16d9 100644 --- a/app/boards/shields/kyria/kyria_rev2_right.overlay +++ b/app/boards/shields/kyria/kyria_rev2_right.overlay @@ -10,6 +10,10 @@ col-offset = <8>; }; +&five_column_transform { + col-offset = <7>; +}; + &kscan0 { row-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> diff --git a/app/boards/shields/kyria/kyria_right.overlay b/app/boards/shields/kyria/kyria_right.overlay index eefd76bf6d9..b3b3420eb71 100644 --- a/app/boards/shields/kyria/kyria_right.overlay +++ b/app/boards/shields/kyria/kyria_right.overlay @@ -10,6 +10,10 @@ col-offset = <8>; }; +&five_column_transform { + col-offset = <7>; +}; + &kscan0 { col-gpios = <&pro_micro 10 GPIO_ACTIVE_HIGH> From 5d22d76d726afbe67ba0e8dc908c342641ab8f58 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 18 Feb 2023 22:31:23 -0800 Subject: [PATCH 0597/1130] fix(shields): Fix Kyria five column transforms --- app/boards/shields/kyria/kyria.dtsi | 8 ++++---- app/boards/shields/kyria/kyria_rev2.dtsi | 10 +++++----- app/boards/shields/kyria/kyria_rev2_right.overlay | 2 +- app/boards/shields/kyria/kyria_right.overlay | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/boards/shields/kyria/kyria.dtsi b/app/boards/shields/kyria/kyria.dtsi index 1b0ca9405b8..cffe23b0627 100644 --- a/app/boards/shields/kyria/kyria.dtsi +++ b/app/boards/shields/kyria/kyria.dtsi @@ -36,10 +36,10 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) columns = <14>; rows = <4>; map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) - RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) >; }; }; diff --git a/app/boards/shields/kyria/kyria_rev2.dtsi b/app/boards/shields/kyria/kyria_rev2.dtsi index 7c7d9efef49..b40af365ac8 100644 --- a/app/boards/shields/kyria/kyria_rev2.dtsi +++ b/app/boards/shields/kyria/kyria_rev2.dtsi @@ -36,10 +36,10 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) columns = <14>; rows = <4>; map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) - RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) + RC(3,2) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) >; }; }; @@ -52,4 +52,4 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) &right_encoder { a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; -}; \ No newline at end of file +}; diff --git a/app/boards/shields/kyria/kyria_rev2_right.overlay b/app/boards/shields/kyria/kyria_rev2_right.overlay index 08dc59d16d9..9e29c6f77d8 100644 --- a/app/boards/shields/kyria/kyria_rev2_right.overlay +++ b/app/boards/shields/kyria/kyria_rev2_right.overlay @@ -11,7 +11,7 @@ }; &five_column_transform { - col-offset = <7>; + col-offset = <8>; }; &kscan0 { diff --git a/app/boards/shields/kyria/kyria_right.overlay b/app/boards/shields/kyria/kyria_right.overlay index b3b3420eb71..00ba5b2f3c4 100644 --- a/app/boards/shields/kyria/kyria_right.overlay +++ b/app/boards/shields/kyria/kyria_right.overlay @@ -11,7 +11,7 @@ }; &five_column_transform { - col-offset = <7>; + col-offset = <8>; }; &kscan0 { From 0c0ebda65b6f384b8bd827365cd5d23702bc04b3 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 20 Feb 2023 22:17:12 -0800 Subject: [PATCH 0598/1130] fix(keymap): Fix default Ergodash keymap --- app/boards/shields/ergodash/ergodash.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/ergodash/ergodash.keymap b/app/boards/shields/ergodash/ergodash.keymap index 65cc1178c71..a85c58a64cf 100644 --- a/app/boards/shields/ergodash/ergodash.keymap +++ b/app/boards/shields/ergodash/ergodash.keymap @@ -53,7 +53,7 @@ * .----------------------------------------------------------------------------------------------------------------------. */ /* FIXME boot and reset are not yet locale aware */ bindings = < -&kp F11 &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp &none &kp &none &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F12 +&kp F11 &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &none &none &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F12 &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &trans &bootloader &reset &none &none &none &none &none &none &none &none &none &none &trans From 3eee53676f793fb352d6cabe9e471106b7878fbb Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 20 Feb 2023 22:06:56 -0800 Subject: [PATCH 0599/1130] fix(shields): Fix missing binding in eek keymap --- app/boards/shields/eek/eek.keymap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/eek/eek.keymap b/app/boards/shields/eek/eek.keymap index f54dc013e1f..439c90aadd2 100644 --- a/app/boards/shields/eek/eek.keymap +++ b/app/boards/shields/eek/eek.keymap @@ -48,9 +48,9 @@ bindings = < &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &out OUT_USB &out OUT_BLE &none &kp EQUAL &kp MINUS &kp CAPS &kp F5 &kp F6 &kp F7 &kp F8 &kp LBKT &kp RBKT &none &kp GRAVE &kp BSLH - &kp LSHFT &kp F9 &kp F10 &kp F11 &kp F12 &none &none &none &kp RSHFT + &kp LSHFT &kp F9 &kp F10 &kp F11 &kp F12 &none &none &none &none &kp RSHFT &kp LCTRL &kp LGUI &kp LALT &reset &none &trans >; }; }; -}; \ No newline at end of file +}; From 1d65661efa3e19db59d453df6eb1139fb97df836 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 20 Feb 2023 23:24:11 -0800 Subject: [PATCH 0600/1130] fix(keymap): Fix tidbit keymap --- app/boards/shields/tidbit/tidbit.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/tidbit/tidbit.keymap b/app/boards/shields/tidbit/tidbit.keymap index 646a5db751b..7fa98af2783 100644 --- a/app/boards/shields/tidbit/tidbit.keymap +++ b/app/boards/shields/tidbit/tidbit.keymap @@ -26,7 +26,7 @@ bindings = < &kp KP_NUMLOCK &kp KP_ASTERISK &kp KP_MINUS &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_PLUS - &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &kp &none + &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &none &kp KP_NUMBER_1 &kp KP_NUMBER_2 &kp KP_NUMBER_3 < 1 KP_ENTER &none &kp KP_NUMBER_0 &kp KP_DOT &none >; From 719de801e7b39bf9a7e89e468cc9f46f824146f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Feb 2023 01:29:24 +0000 Subject: [PATCH 0601/1130] chore(deps): bump @sideway/formula from 3.0.0 to 3.0.1 in /docs Bumps [@sideway/formula](https://github.com/sideway/formula) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/sideway/formula/releases) - [Commits](https://github.com/sideway/formula/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: "@sideway/formula" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index c4cad7c0d33..93a980c2838 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -3045,9 +3045,9 @@ } }, "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", @@ -18139,9 +18139,9 @@ } }, "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "@sideway/pinpoint": { "version": "2.0.0", From 5ef6f2f2b7fc059f4992b70752be5f79b1bca129 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 05:50:58 +0000 Subject: [PATCH 0602/1130] chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /docs Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/kornelski/http-cache-semantics/releases) - [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: http-cache-semantics dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 93a980c2838..fbc859e502f 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8281,9 +8281,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-deceiver": { "version": "1.2.7", @@ -22047,9 +22047,9 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-deceiver": { "version": "1.2.7", From 89044079839b156eeb4a3da497d1dab904290f31 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Sat, 28 Jan 2023 17:15:49 -0500 Subject: [PATCH 0603/1130] feat(underglow): use float for HSB to RGB calculation --- app/src/rgb_underglow.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 25d4466eaf9..18614a4e190 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -75,15 +75,15 @@ static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) { } static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) { - double r, g, b; + float r, g, b; uint8_t i = hsb.h / 60; - double v = hsb.b / ((float)BRT_MAX); - double s = hsb.s / ((float)SAT_MAX); - double f = hsb.h / ((float)HUE_MAX) * 6 - i; - double p = v * (1 - s); - double q = v * (1 - f * s); - double t = v * (1 - (1 - f) * s); + float v = hsb.b / ((float)BRT_MAX); + float s = hsb.s / ((float)SAT_MAX); + float f = hsb.h / ((float)HUE_MAX) * 6 - i; + float p = v * (1 - s); + float q = v * (1 - f * s); + float t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: From 6cb42a80607c8bf8a493ac2c781568462aa8ce13 Mon Sep 17 00:00:00 2001 From: Robert U <978080+urob@users.noreply.github.com> Date: Sun, 12 Mar 2023 12:24:00 -0400 Subject: [PATCH 0604/1130] feat(behaviors): On-release option for positional-hold-taps --- .../behaviors/zmk,behavior-hold-tap.yaml | 2 ++ app/src/behaviors/behavior_hold_tap.c | 8 ++++++-- .../on-release-no-trigger/events.patterns | 4 ++++ .../keycode_events.snapshot | 12 ++++++++++++ .../native_posix_64.keymap | 17 +++++++++++++++++ .../on-release-trigger/events.patterns | 4 ++++ .../on-release-trigger/keycode_events.snapshot | 12 ++++++++++++ .../on-release-trigger/native_posix_64.keymap | 17 +++++++++++++++++ .../on-release-no-trigger/events.patterns | 4 ++++ .../keycode_events.snapshot | 12 ++++++++++++ .../native_posix_64.keymap | 17 +++++++++++++++++ .../on-release-trigger/events.patterns | 4 ++++ .../on-release-trigger/keycode_events.snapshot | 12 ++++++++++++ .../on-release-trigger/native_posix_64.keymap | 17 +++++++++++++++++ .../on-release-no-trigger/events.patterns | 4 ++++ .../keycode_events.snapshot | 12 ++++++++++++ .../native_posix_64.keymap | 17 +++++++++++++++++ .../on-release-trigger/events.patterns | 4 ++++ .../on-release-trigger/keycode_events.snapshot | 12 ++++++++++++ .../on-release-trigger/native_posix_64.keymap | 17 +++++++++++++++++ docs/docs/behaviors/hold-tap.md | 3 +++ 21 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/events.patterns create mode 100644 app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap create mode 100644 app/tests/hold-tap/balanced/7-positional/on-release-trigger/events.patterns create mode 100644 app/tests/hold-tap/balanced/7-positional/on-release-trigger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index e4cfaeab5d4..a2affbf2147 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -37,3 +37,5 @@ properties: type: array required: false default: [] + hold-trigger-on-release: + type: boolean diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index f09006ed716..a9e4d642e0e 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -60,6 +60,7 @@ struct behavior_hold_tap_config { bool global_quick_tap; enum flavor flavor; bool retro_tap; + bool hold_trigger_on_release; int32_t hold_trigger_key_positions_len; int32_t hold_trigger_key_positions[]; }; @@ -587,9 +588,11 @@ static int position_state_changed_listener(const zmk_event_t *eh) { } // Store the position of pressed key for positional hold-tap purposes. - if ((ev->state) // i.e. key pressed (not released) + if ((undecided_hold_tap->config->hold_trigger_on_release != + ev->state) // key has been pressed and hold_trigger_on_release is not set, or key + // has been released and hold_trigger_on_release is set && (undecided_hold_tap->position_of_first_other_key_pressed == - -1) // i.e. no other key has been pressed yet + -1) // no other key has been pressed yet ) { undecided_hold_tap->position_of_first_other_key_pressed = ev->position; } @@ -703,6 +706,7 @@ static int behavior_hold_tap_init(const struct device *dev) { .global_quick_tap = DT_INST_PROP(n, global_quick_tap), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ + .hold_trigger_on_release = DT_INST_PROP(n, hold_trigger_on_release), \ .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/events.patterns b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/keycode_events.snapshot new file mode 100644 index 00000000000..24a8b033a55 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/keycode_events.snapshot @@ -0,0 +1,12 @@ +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided hold-interrupt (balanced decision moment other-key-up) +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (balanced decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap new file mode 100644 index 00000000000..942d5ae4cf7 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&ht_bal { hold-trigger-on-release; }; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,1,10) // not trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-trigger/events.patterns b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-trigger/keycode_events.snapshot b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/keycode_events.snapshot new file mode 100644 index 00000000000..fb5587b1c12 --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/keycode_events.snapshot @@ -0,0 +1,12 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (balanced decision moment other-key-up) +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided hold-interrupt (balanced decision moment other-key-up) +kp_pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap new file mode 100644 index 00000000000..677a253432d --- /dev/null +++ b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&ht_bal { hold-trigger-on-release; }; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,0,10) // trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/events.patterns b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot new file mode 100644 index 00000000000..1df24b0c26c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot @@ -0,0 +1,12 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap new file mode 100644 index 00000000000..b48332ffe22 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&ht_hold { hold-trigger-on-release; }; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,1,10) // not trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/events.patterns b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/keycode_events.snapshot new file mode 100644 index 00000000000..e35848cdc52 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/keycode_events.snapshot @@ -0,0 +1,12 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap new file mode 100644 index 00000000000..77398582f80 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&ht_hold { hold-trigger-on-release; }; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,0,10) // trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/events.patterns b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot new file mode 100644 index 00000000000..d72f20d61e0 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/keycode_events.snapshot @@ -0,0 +1,12 @@ +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap new file mode 100644 index 00000000000..504318f7504 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&tp { hold-trigger-on-release; }; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,1,10) // not trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/events.patterns b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/keycode_events.snapshot new file mode 100644 index 00000000000..a330a93c147 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/keycode_events.snapshot @@ -0,0 +1,12 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0D implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap new file mode 100644 index 00000000000..7061eee772f --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap @@ -0,0 +1,17 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&tp { hold-trigger-on-release; }; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,0,10) // trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 793e350dea5..1dfb8e5da3f 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -132,6 +132,9 @@ See the following example, which uses a hold-tap behavior definition, configured - The sequence `(pht_down, W_down, W_up, pht_up)` produces `W`. The normal hold behavior (LEFT_SHIFT) **is NOT** modified into a tap behavior (Q) by positional hold-tap because the first key pressed after the hold-tap key is the `W key`, which is in position 1, which **IS** included in `hold-trigger-key-positions`. - If the `LEFT_SHIFT / Q key` is held by itself for longer than `tapping-term-ms`, a hold behavior is produced. This is because positional hold-tap only modifies the behavior of a hold-tap if another key is pressed before the `tapping-term-ms` period expires. +By default, `hold-trigger-key-positions` are evaluated upon the first _key press_ after +the hold-tap. For homerow mods, this is not always ideal, because it prevents combining multiple modifiers unless they are included in `hold-trigger-key-positions`. To overwrite this behavior, one can set `hold-trigger-on-release`. If set to true, the evaluation of `hold-trigger-key-positions` gets delayed until _key release_. This allows combining multiple modifiers when the next key is _held_, while still deciding the hold-tap in favor of a tap when the next key is _tapped_. + ### Example Use-Cases Date: Wed, 22 Mar 2023 01:42:11 +0100 Subject: [PATCH 0605/1130] fix(boards): Disable CDC by default for CiZ The default configuration for corneish-zen enables a USB CDC endpoint by default. This is most probably a debugging left-over. Disable that endpoint. CONFIG_ZMK_USB_LOGGING depends on it anyway, so it will be enabled again with that config option set. --- .../corneish_zen/corneish_zen_v2_left_defconfig | 16 ---------------- .../corneish_zen/corneish_zen_v2_right_defconfig | 9 --------- 2 files changed, 25 deletions(-) diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig index eb1e552a40a..4e6761476d7 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -73,19 +73,3 @@ CONFIG_ZMK_WIDGET_LAYER_STATUS=n #CONFIG_LVGL_LOG_LEVEL_DBG=y #CONFIG_LVGL_USE_DEBUG=y #CONFIG_SENSOR_LOG_LEVEL_DBG=y - -# Turn on USB CDC ACM device -CONFIG_USB_DEVICE_STACK=y -CONFIG_USB_CDC_ACM=y -CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 - -# Enable serial console -CONFIG_SERIAL=y -CONFIG_CONSOLE=y -CONFIG_UART_INTERRUPT_DRIVEN=y -CONFIG_UART_LINE_CTRL=y - -# Enable USB UART -CONFIG_UART_CONSOLE=y - - diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index 46b40dee46a..02039b8d564 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -72,12 +72,3 @@ CONFIG_ZMK_WIDGET_PERIPHERAL_STATUS=n #CONFIG_LVGL_LOG_LEVEL_DBG=y #CONFIG_LVGL_USE_DEBUG=y #CONFIG_SENSOR_LOG_LEVEL_DBG=y - -# Enable serial console -CONFIG_SERIAL=y -CONFIG_CONSOLE=y -CONFIG_UART_INTERRUPT_DRIVEN=y -CONFIG_UART_LINE_CTRL=y - -# Enable USB UART -CONFIG_UART_CONSOLE=y From cd64c59b39754477533e6dd7ad1055f07de92bb0 Mon Sep 17 00:00:00 2001 From: prdktntwcklr <61001903+prdktntwcklr@users.noreply.github.com> Date: Wed, 8 Mar 2023 01:12:11 +0000 Subject: [PATCH 0606/1130] fix(tests): ignore line endings --- app/run-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/run-test.sh b/app/run-test.sh index 068fdbb439d..94438f34df2 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -33,7 +33,7 @@ if [ $? -gt 0 ]; then fi ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log -diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log +diff -auZ $testcase/keycode_events.snapshot build/$testcase/keycode_events.log if [ $? -gt 0 ]; then if [ -f $testcase/pending ]; then echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log From ae8299edb3d638f1332475b1da0fdf40afa43fe4 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 25 Mar 2023 13:17:16 -0400 Subject: [PATCH 0607/1130] fix(boards): Move the CDC ACM node under the USBD. * Ferris board's CDC ACM node was accidentally nested under the wrong node, causing USB logging builds to fail with cryptic error. --- app/boards/arm/ferris/ferris_rev02.dts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index dbf3f6e21b5..50de9526ef2 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -116,6 +116,10 @@ &usb { status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &clk_hsi { @@ -139,10 +143,6 @@ &rtc { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; }; &flash0 { From 168b32b8288ba36831f262f82bfa166240506676 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 16 Jan 2023 00:40:53 -0500 Subject: [PATCH 0608/1130] refactor: Move to Zephyr 3.2 branch. --- app/west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/west.yml b/app/west.yml index b0f05aedb27..ffa36ca36e9 100644 --- a/app/west.yml +++ b/app/west.yml @@ -7,7 +7,7 @@ manifest: projects: - name: zephyr remote: zmkfirmware - revision: v3.0.0+zmk-fixes + revision: v3.2.0+zmk-fixes clone-depth: 1 import: name-blocklist: From 69a4c3200d8c9c92e3e3c68bbd4969f19df70133 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 17 Jan 2023 23:33:42 -0500 Subject: [PATCH 0609/1130] refactor(display): Updates for LVGL v8.x changes. * LV_ prefix from new LVGL official Kconfig now used. * API changes for themes, container object removal, etc. * Add our own Kconfig and code for theme default small font. * Remove some hardcoded sizes. --- app/boards/arm/corneish_zen/Kconfig.defconfig | 12 +- .../corneish_zen_v2_left_defconfig | 20 ++- .../corneish_zen_v2_right_defconfig | 20 ++- .../arm/corneish_zen/custom_status_screen.c | 38 +++--- .../arm/corneish_zen/widgets/battery_status.c | 9 +- .../arm/corneish_zen/widgets/battery_status.h | 4 +- .../arm/corneish_zen/widgets/layer_status.c | 8 +- .../arm/corneish_zen/widgets/layer_status.h | 4 +- .../arm/corneish_zen/widgets/output_status.c | 10 +- .../arm/corneish_zen/widgets/output_status.h | 4 +- .../corneish_zen/widgets/peripheral_status.c | 8 +- .../corneish_zen/widgets/peripheral_status.h | 4 +- app/boards/shields/corne/Kconfig.defconfig | 10 +- .../shields/elephant42/Kconfig.defconfig | 10 +- app/boards/shields/jorne/Kconfig.defconfig | 10 +- .../shields/knob_goblin/Kconfig.defconfig | 10 +- app/boards/shields/kyria/Kconfig.defconfig | 10 +- app/boards/shields/leeloo/Kconfig.defconfig | 10 +- app/boards/shields/lily58/Kconfig.defconfig | 10 +- app/boards/shields/lotus58/Kconfig.defconfig | 10 +- app/boards/shields/microdox/Kconfig.defconfig | 10 +- app/boards/shields/murphpad/Kconfig.defconfig | 10 +- app/boards/shields/nibble/Kconfig.defconfig | 10 +- .../shields/nice_view/Kconfig.defconfig | 8 +- app/boards/shields/nice_view/nice_view.conf | 4 +- app/boards/shields/snap/Kconfig.defconfig | 10 +- app/boards/shields/sofle/Kconfig.defconfig | 10 +- .../splitkb_aurora_corne/Kconfig.defconfig | 10 +- .../splitkb_aurora_lily58/Kconfig.defconfig | 10 +- .../splitkb_aurora_sweep/Kconfig.defconfig | 10 +- app/boards/shields/tidbit/Kconfig.defconfig | 10 +- .../shields/waterfowl/Kconfig.defconfig | 10 +- app/boards/shields/zodiark/Kconfig.defconfig | 10 +- app/src/display/Kconfig | 119 +++++++++++++++--- app/src/display/main.c | 43 ++++--- app/src/display/status_screen.c | 29 ++--- app/src/display/theme.c | 73 +++++++++++ app/src/display/theme.h | 65 ++++++++++ app/src/display/widgets/Kconfig | 10 +- app/src/display/widgets/battery_status.c | 5 +- app/src/display/widgets/layer_status.c | 4 +- app/src/display/widgets/output_status.c | 4 +- app/src/display/widgets/peripheral_status.c | 4 +- app/src/display/widgets/wpm_status.c | 8 +- 44 files changed, 462 insertions(+), 245 deletions(-) create mode 100644 app/src/display/theme.c create mode 100644 app/src/display/theme.h diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig index a88cc5ca06f..33ce12567e7 100644 --- a/app/boards/arm/corneish_zen/Kconfig.defconfig +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -42,12 +42,12 @@ config USB_DEVICE_STACK endif # USB config ZMK_DISPLAY - select LVGL_USE_CONT - select LVGL_FONT_MONTSERRAT_26 - select LVGL_FONT_MONTSERRAT_20 - select LVGL_FONT_MONTSERRAT_16 - select LVGL_USE_LABEL - select LVGL_USE_IMG + select LV_USE_CONT + select LV_FONT_MONTSERRAT_26 + select LV_FONT_MONTSERRAT_20 + select LV_FONT_MONTSERRAT_16 + select LV_USE_LABEL + select LV_USE_IMG choice ZMK_DISPLAY_STATUS_SCREEN default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig index 4e6761476d7..42e270372fb 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -39,17 +39,15 @@ CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 CONFIG_SSD1306=n CONFIG_IL0323=y -CONFIG_LVGL_BITS_PER_PIXEL=1 -CONFIG_LVGL_COLOR_DEPTH_1=y -CONFIG_LVGL_DPI=145 -CONFIG_LVGL_VDB_SIZE=100 -CONFIG_LVGL_USE_THEME_MONO=y -CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_RED=n -CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_RED=n -CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_BLACK=y -CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_WHITE=y -CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_16=y -CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y +CONFIG_LV_Z_BITS_PER_PIXEL=1 +CONFIG_LV_COLOR_DEPTH_1=y +CONFIG_LV_DPI_DEF=145 +CONFIG_LV_Z_VDB_SIZE=100 +CONFIG_LV_USE_THEME_MONO=y +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16=y +CONFIG_LV_FONT_MONTSERRAT_26=y +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y # custom status screens CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index 02039b8d564..e9b36f2eba4 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -39,17 +39,15 @@ CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 CONFIG_SSD1306=n CONFIG_IL0323=y -CONFIG_LVGL_BITS_PER_PIXEL=1 -CONFIG_LVGL_COLOR_DEPTH_1=y -CONFIG_LVGL_DPI=145 -CONFIG_LVGL_VDB_SIZE=100 -CONFIG_LVGL_USE_THEME_MONO=y -CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_RED=n -CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_RED=n -CONFIG_LVGL_THEME_DEFAULT_COLOR_PRIMARY_BLACK=y -CONFIG_LVGL_THEME_DEFAULT_COLOR_SECONDARY_WHITE=y -CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_16=y -CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y +CONFIG_LV_Z_BITS_PER_PIXEL=1 +CONFIG_LV_COLOR_DEPTH_1=y +CONFIG_LV_DPI_DEF=145 +CONFIG_LV_Z_VDB_SIZE=100 +CONFIG_LV_USE_THEME_MONO=y +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16=y +CONFIG_LV_FONT_MONTSERRAT_26=y +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y # custom status screens CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y diff --git a/app/boards/arm/corneish_zen/custom_status_screen.c b/app/boards/arm/corneish_zen/custom_status_screen.c index 7842925e390..c45a6243b60 100644 --- a/app/boards/arm/corneish_zen/custom_status_screen.c +++ b/app/boards/arm/corneish_zen/custom_status_screen.c @@ -11,7 +11,7 @@ #include "widgets/layer_status.h" #include "custom_status_screen.h" -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); LV_IMG_DECLARE(zenlogo); @@ -36,50 +36,42 @@ static struct zmk_widget_layer_status layer_status_widget; lv_obj_t *zmk_display_status_screen() { lv_obj_t *screen; - screen = lv_obj_create(NULL, NULL); + screen = lv_obj_create(NULL); #if IS_ENABLED(CONFIG_CUSTOM_WIDGET_BATTERY_STATUS) zmk_widget_battery_status_init(&battery_status_widget, screen); - lv_obj_align(zmk_widget_battery_status_obj(&battery_status_widget), NULL, LV_ALIGN_IN_TOP_MID, - 0, 2); + lv_obj_align(zmk_widget_battery_status_obj(&battery_status_widget), LV_ALIGN_TOP_MID, 0, 2); #endif #if IS_ENABLED(CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS) zmk_widget_output_status_init(&output_status_widget, screen); - lv_obj_align(zmk_widget_output_status_obj(&output_status_widget), NULL, LV_ALIGN_IN_TOP_MID, 0, - 41); + lv_obj_align(zmk_widget_output_status_obj(&output_status_widget), LV_ALIGN_TOP_MID, 0, 41); #endif #if IS_ENABLED(CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS) zmk_widget_peripheral_status_init(&peripheral_status_widget, screen); - lv_obj_align(zmk_widget_peripheral_status_obj(&peripheral_status_widget), NULL, - LV_ALIGN_IN_TOP_MID, 0, 41); + lv_obj_align(zmk_widget_peripheral_status_obj(&peripheral_status_widget), LV_ALIGN_TOP_MID, 0, + 41); #endif #if IS_ENABLED(CONFIG_CUSTOM_WIDGET_LAYER_STATUS) - zmk_widget_layer_status_init(&layer_status_widget, screen); - lv_obj_set_style_local_text_font(zmk_widget_layer_status_obj(&layer_status_widget), - LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, - lv_theme_get_font_small()); - lv_obj_align(zmk_widget_layer_status_obj(&layer_status_widget), NULL, LV_ALIGN_IN_BOTTOM_MID, 0, - -5); - lv_obj_t *LayersHeading; - LayersHeading = lv_img_create(screen, NULL); - lv_obj_align(LayersHeading, NULL, LV_ALIGN_IN_BOTTOM_MID, 8, 5); + LayersHeading = lv_img_create(screen); + lv_obj_align(LayersHeading, LV_ALIGN_BOTTOM_MID, 0, -30); lv_img_set_src(LayersHeading, &layers2); + + zmk_widget_layer_status_init(&layer_status_widget, screen); + lv_obj_set_style_text_font(zmk_widget_layer_status_obj(&layer_status_widget), + &lv_font_montserrat_16, LV_PART_MAIN); + lv_obj_align(zmk_widget_layer_status_obj(&layer_status_widget), LV_ALIGN_BOTTOM_MID, 0, -5); #endif #if !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) lv_obj_t *zenlogo_icon; - zenlogo_icon = lv_img_create(screen, NULL); + zenlogo_icon = lv_img_create(screen); lv_img_set_src(zenlogo_icon, &zenlogo); - lv_obj_align(zenlogo_icon, NULL, LV_ALIGN_IN_BOTTOM_MID, 2, -5); + lv_obj_align(zenlogo_icon, LV_ALIGN_BOTTOM_MID, 2, -5); #endif - // lv_task_handler(); - lv_refr_now(NULL); - // display_blanking_off(display_dev); - return screen; } diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.c b/app/boards/arm/corneish_zen/widgets/battery_status.c index 7dfd51e8356..9a2189d1e2f 100644 --- a/app/boards/arm/corneish_zen/widgets/battery_status.c +++ b/app/boards/arm/corneish_zen/widgets/battery_status.c @@ -5,15 +5,14 @@ * */ -#include -#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include "battery_status.h" -#include #include #include #include @@ -84,7 +83,7 @@ ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent) { - widget->obj = lv_img_create(parent, NULL); + widget->obj = lv_img_create(parent); sys_slist_append(&widgets, &widget->node); widget_battery_status_init(); diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.h b/app/boards/arm/corneish_zen/widgets/battery_status.h index 21a4efb8612..d493c582b32 100644 --- a/app/boards/arm/corneish_zen/widgets/battery_status.h +++ b/app/boards/arm/corneish_zen/widgets/battery_status.h @@ -9,7 +9,7 @@ #include -#include +#include struct zmk_widget_battery_status { sys_snode_t node; @@ -17,4 +17,4 @@ struct zmk_widget_battery_status { }; int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent); -lv_obj_t *zmk_widget_battery_status_obj(struct zmk_widget_battery_status *widget); \ No newline at end of file +lv_obj_t *zmk_widget_battery_status_obj(struct zmk_widget_battery_status *widget); diff --git a/app/boards/arm/corneish_zen/widgets/layer_status.c b/app/boards/arm/corneish_zen/widgets/layer_status.c index a309a787f5e..3dc33613441 100644 --- a/app/boards/arm/corneish_zen/widgets/layer_status.c +++ b/app/boards/arm/corneish_zen/widgets/layer_status.c @@ -5,8 +5,8 @@ * */ -#include -#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include @@ -54,7 +54,7 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, laye ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent) { - widget->obj = lv_label_create(parent, NULL); + widget->obj = lv_label_create(parent); sys_slist_append(&widgets, &widget->node); @@ -64,4 +64,4 @@ int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_ lv_obj_t *zmk_widget_layer_status_obj(struct zmk_widget_layer_status *widget) { return widget->obj; -} \ No newline at end of file +} diff --git a/app/boards/arm/corneish_zen/widgets/layer_status.h b/app/boards/arm/corneish_zen/widgets/layer_status.h index 04f32faac01..c03433c56ba 100644 --- a/app/boards/arm/corneish_zen/widgets/layer_status.h +++ b/app/boards/arm/corneish_zen/widgets/layer_status.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include struct zmk_widget_layer_status { sys_snode_t node; @@ -16,4 +16,4 @@ struct zmk_widget_layer_status { }; int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent); -lv_obj_t *zmk_widget_layer_status_obj(struct zmk_widget_layer_status *widget); \ No newline at end of file +lv_obj_t *zmk_widget_layer_status_obj(struct zmk_widget_layer_status *widget); diff --git a/app/boards/arm/corneish_zen/widgets/output_status.c b/app/boards/arm/corneish_zen/widgets/output_status.c index bd69bbb1801..ad0c2b1a8fb 100644 --- a/app/boards/arm/corneish_zen/widgets/output_status.c +++ b/app/boards/arm/corneish_zen/widgets/output_status.c @@ -5,10 +5,10 @@ * */ -#include -#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include @@ -123,9 +123,7 @@ ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); #endif int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent) { - widget->obj = lv_img_create(parent, NULL); - - lv_obj_set_size(widget->obj, 40, 15); + widget->obj = lv_img_create(parent); sys_slist_append(&widgets, &widget->node); diff --git a/app/boards/arm/corneish_zen/widgets/output_status.h b/app/boards/arm/corneish_zen/widgets/output_status.h index c171e2bb892..ba92f893ac3 100644 --- a/app/boards/arm/corneish_zen/widgets/output_status.h +++ b/app/boards/arm/corneish_zen/widgets/output_status.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include struct zmk_widget_output_status { sys_snode_t node; @@ -16,4 +16,4 @@ struct zmk_widget_output_status { }; int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent); -lv_obj_t *zmk_widget_output_status_obj(struct zmk_widget_output_status *widget); \ No newline at end of file +lv_obj_t *zmk_widget_output_status_obj(struct zmk_widget_output_status *widget); diff --git a/app/boards/arm/corneish_zen/widgets/peripheral_status.c b/app/boards/arm/corneish_zen/widgets/peripheral_status.c index e18414be847..39b62fde05a 100644 --- a/app/boards/arm/corneish_zen/widgets/peripheral_status.c +++ b/app/boards/arm/corneish_zen/widgets/peripheral_status.c @@ -5,10 +5,10 @@ * */ -#include -#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include @@ -48,7 +48,7 @@ ZMK_SUBSCRIPTION(widget_peripheral_status, zmk_split_peripheral_status_changed); int zmk_widget_peripheral_status_init(struct zmk_widget_peripheral_status *widget, lv_obj_t *parent) { - widget->obj = lv_img_create(parent, NULL); + widget->obj = lv_img_create(parent); sys_slist_append(&widgets, &widget->node); diff --git a/app/boards/arm/corneish_zen/widgets/peripheral_status.h b/app/boards/arm/corneish_zen/widgets/peripheral_status.h index 596757636a2..82fe2105ea1 100644 --- a/app/boards/arm/corneish_zen/widgets/peripheral_status.h +++ b/app/boards/arm/corneish_zen/widgets/peripheral_status.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include struct zmk_widget_peripheral_status { sys_snode_t node; @@ -17,4 +17,4 @@ struct zmk_widget_peripheral_status { int zmk_widget_peripheral_status_init(struct zmk_widget_peripheral_status *widget, lv_obj_t *parent); -lv_obj_t *zmk_widget_peripheral_status_obj(struct zmk_widget_peripheral_status *widget); \ No newline at end of file +lv_obj_t *zmk_widget_peripheral_status_obj(struct zmk_widget_peripheral_status *widget); diff --git a/app/boards/shields/corne/Kconfig.defconfig b/app/boards/shields/corne/Kconfig.defconfig index 9160555ca31..acf542d74b9 100644 --- a/app/boards/shields/corne/Kconfig.defconfig +++ b/app/boards/shields/corne/Kconfig.defconfig @@ -28,17 +28,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/elephant42/Kconfig.defconfig b/app/boards/shields/elephant42/Kconfig.defconfig index 1e93762cf72..e507f2c62f3 100644 --- a/app/boards/shields/elephant42/Kconfig.defconfig +++ b/app/boards/shields/elephant42/Kconfig.defconfig @@ -31,17 +31,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/jorne/Kconfig.defconfig b/app/boards/shields/jorne/Kconfig.defconfig index 64eb32b8a90..4664debf17a 100644 --- a/app/boards/shields/jorne/Kconfig.defconfig +++ b/app/boards/shields/jorne/Kconfig.defconfig @@ -29,17 +29,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/knob_goblin/Kconfig.defconfig b/app/boards/shields/knob_goblin/Kconfig.defconfig index 300fb4ebfe6..d8d468edb94 100644 --- a/app/boards/shields/knob_goblin/Kconfig.defconfig +++ b/app/boards/shields/knob_goblin/Kconfig.defconfig @@ -21,17 +21,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 0da8a18d6cf..cdb57b6bfa0 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -29,17 +29,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig index a4295d1e10f..36306757e2c 100644 --- a/app/boards/shields/leeloo/Kconfig.defconfig +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -32,17 +32,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/lily58/Kconfig.defconfig b/app/boards/shields/lily58/Kconfig.defconfig index a5e6fbe86ae..97cecce15e3 100644 --- a/app/boards/shields/lily58/Kconfig.defconfig +++ b/app/boards/shields/lily58/Kconfig.defconfig @@ -29,17 +29,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/lotus58/Kconfig.defconfig b/app/boards/shields/lotus58/Kconfig.defconfig index 57ae5ef66e0..56eef359588 100644 --- a/app/boards/shields/lotus58/Kconfig.defconfig +++ b/app/boards/shields/lotus58/Kconfig.defconfig @@ -31,17 +31,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index 7bf40b8bf46..28f8c811d31 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -31,17 +31,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/murphpad/Kconfig.defconfig b/app/boards/shields/murphpad/Kconfig.defconfig index 9f4915649ae..07e71826c90 100644 --- a/app/boards/shields/murphpad/Kconfig.defconfig +++ b/app/boards/shields/murphpad/Kconfig.defconfig @@ -21,17 +21,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/nibble/Kconfig.defconfig b/app/boards/shields/nibble/Kconfig.defconfig index a1683f3a2f3..d5e8cbebe31 100644 --- a/app/boards/shields/nibble/Kconfig.defconfig +++ b/app/boards/shields/nibble/Kconfig.defconfig @@ -25,17 +25,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig index a699a81394e..22c5f6479f1 100644 --- a/app/boards/shields/nice_view/Kconfig.defconfig +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_NICE_VIEW config ZMK_DISPLAY - select LVGL_FONT_MONTSERRAT_26 + select LV_FONT_MONTSERRAT_26 if ZMK_DISPLAY @@ -17,11 +17,11 @@ config LS0XX config ZMK_WIDGET_WPM_STATUS default y if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # ZMK_DISPLAY diff --git a/app/boards/shields/nice_view/nice_view.conf b/app/boards/shields/nice_view/nice_view.conf index 2c1d6c71088..ff57c07c9aa 100644 --- a/app/boards/shields/nice_view/nice_view.conf +++ b/app/boards/shields/nice_view/nice_view.conf @@ -1,5 +1,5 @@ # Enable nice!view CONFIG_ZMK_DISPLAY=y -CONFIG_LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_26=y -CONFIG_LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_26=y +CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26=y +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE=n diff --git a/app/boards/shields/snap/Kconfig.defconfig b/app/boards/shields/snap/Kconfig.defconfig index 24a8e5cc747..fa02421aad5 100644 --- a/app/boards/shields/snap/Kconfig.defconfig +++ b/app/boards/shields/snap/Kconfig.defconfig @@ -31,17 +31,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 69dac3f230f..1c1c5604cfb 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -31,17 +31,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig index 5a1eeb13b6d..29de8d7e1ff 100644 --- a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig @@ -37,17 +37,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig index bbaef0ff214..3c8d5f58931 100644 --- a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig @@ -37,17 +37,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig index 51fbc28c5c8..4a2b897368b 100644 --- a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig @@ -37,17 +37,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/tidbit/Kconfig.defconfig b/app/boards/shields/tidbit/Kconfig.defconfig index 013a0a7c989..e3655a9e379 100644 --- a/app/boards/shields/tidbit/Kconfig.defconfig +++ b/app/boards/shields/tidbit/Kconfig.defconfig @@ -22,17 +22,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/waterfowl/Kconfig.defconfig b/app/boards/shields/waterfowl/Kconfig.defconfig index 897184f66c7..70029f0b816 100644 --- a/app/boards/shields/waterfowl/Kconfig.defconfig +++ b/app/boards/shields/waterfowl/Kconfig.defconfig @@ -29,17 +29,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/zodiark/Kconfig.defconfig b/app/boards/shields/zodiark/Kconfig.defconfig index 76bfcbd441a..77648afdf5d 100644 --- a/app/boards/shields/zodiark/Kconfig.defconfig +++ b/app/boards/shields/zodiark/Kconfig.defconfig @@ -31,17 +31,17 @@ endif # ZMK_DISPLAY if LVGL -config LVGL_VDB_SIZE +config LV_Z_VDB_SIZE default 64 -config LVGL_DPI +config LV_Z_DPI default 148 -config LVGL_BITS_PER_PIXEL +config LV_Z_BITS_PER_PIXEL default 1 -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index c07533588c0..32be2a278f4 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -6,8 +6,9 @@ menuconfig ZMK_DISPLAY default n select DISPLAY select LVGL - select LVGL_THEMES - select LVGL_THEME_MONO + select LV_THEMES + select LV_THEME_MONO + select LV_CONF_MINIMAL if ZMK_DISPLAY @@ -15,17 +16,26 @@ config ZMK_DISPLAY_BLANK_ON_IDLE bool "Blank display on idle" default y if SSD1306 -choice LVGL_TXT_ENC - default LVGL_TXT_ENC_UTF8 +choice LV_TXT_ENC + default LV_TXT_ENC_UTF8 endchoice +config LV_MEM_CUSTOM + default y + +config LV_Z_MEM_POOL_MIN_SIZE + default 32 + +config LV_Z_MEM_POOL_MAX_SIZE + default 8192 + choice ZMK_DISPLAY_STATUS_SCREEN prompt "Default status screen for displays" config ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN bool "Built in status screen" - select LVGL_OBJ_LABEL + select LV_OBJ_LABEL config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM bool "Custom status screen" @@ -57,24 +67,105 @@ endif # ZMK_DISPLAY_WORK_QUEUE_DEDICATED if ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN -config LVGL_FONT_MONTSERRAT_16 +config LV_FONT_MONTSERRAT_16 default y -choice LVGL_THEME_DEFAULT_FONT_NORMAL - default LVGL_THEME_DEFAULT_FONT_NORMAL_MONTSERRAT_16 +choice LV_FONT_DEFAULT + default LV_FONT_DEFAULT_MONTSERRAT_16 endchoice -config LVGL_FONT_MONTSERRAT_12 +config LV_FONT_MONTSERRAT_12 default y - -choice LVGL_THEME_DEFAULT_FONT_SMALL - default LVGL_THEME_DEFAULT_FONT_SMALL_MONTSERRAT_12 - -endchoice endif # ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN +choice ZMK_LV_FONT_DEFAULT_SMALL + prompt "Select theme default small font" + default ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12 + help + Select theme default small font + + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_8 + bool "Montserrat 8" + select LV_FONT_MONTSERRAT_8 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12 + bool "Montserrat 12" + select LV_FONT_MONTSERRAT_12 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_14 + bool "Montserrat 14" + select LV_FONT_MONTSERRAT_14 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16 + bool "Montserrat 16" + select LV_FONT_MONTSERRAT_16 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_18 + bool "Montserrat 18" + select LV_FONT_MONTSERRAT_18 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_20 + bool "Montserrat 20" + select LV_FONT_MONTSERRAT_20 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_22 + bool "Montserrat 22" + select LV_FONT_MONTSERRAT_22 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_24 + bool "Montserrat 24" + select LV_FONT_MONTSERRAT_24 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26 + bool "Montserrat 26" + select LV_FONT_MONTSERRAT_26 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28 + bool "Montserrat 28" + select LV_FONT_MONTSERRAT_28 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_30 + bool "Montserrat 30" + select LV_FONT_MONTSERRAT_30 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_32 + bool "Montserrat 32" + select LV_FONT_MONTSERRAT_32 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_34 + bool "Montserrat 34" + select LV_FONT_MONTSERRAT_34 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_36 + bool "Montserrat 36" + select LV_FONT_MONTSERRAT_36 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_38 + bool "Montserrat 38" + select LV_FONT_MONTSERRAT_38 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_40 + bool "Montserrat 40" + select LV_FONT_MONTSERRAT_40 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_42 + bool "Montserrat 42" + select LV_FONT_MONTSERRAT_42 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_44 + bool "Montserrat 44" + select LV_FONT_MONTSERRAT_44 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_46 + bool "Montserrat 46" + select LV_FONT_MONTSERRAT_46 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_48 + bool "Montserrat 48" + select LV_FONT_MONTSERRAT_48 + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12_SUBPX + bool "Montserrat 12 sub-pixel" + select LV_FONT_MONTSERRAT_12_SUBPX + config ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28_COMPRESSED + bool "Montserrat 28 compressed" + select LV_FONT_MONTSERRAT_28_COMPRESSED + config ZMK_LV_FONT_DEFAULT_SMALL_DEJAVU_16_PERSIAN_HEBREW + bool "Dejavu 16 Persian, Hebrew, Arabic letters" + select LV_FONT_DEJAVU_16_PERSIAN_HEBREW + config ZMK_LV_FONT_DEFAULT_SMALL_SIMSUN_16_CJK + bool "Simsun 16 CJK" + select LV_FONT_SIMSUN_16_CJK + config ZMK_LV_FONT_DEFAULT_SMALL_UNSCII_8 + bool "UNSCII 8 (Perfect monospace font)" + select LV_FONT_UNSCII_8 + config ZMK_LV_FONT_DEFAULT_SMALL_UNSCII_16 + bool "UNSCII 16 (Perfect monospace font)" + select LV_FONT_UNSCII_16 +endchoice + rsource "widgets/Kconfig" endif diff --git a/app/src/display/main.c b/app/src/display/main.c index 8a70cef2413..3fb4e8f63a9 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -15,11 +15,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include "theme.h" + #include #include #include -#define ZMK_DISPLAY_NAME CONFIG_LVGL_DISPLAY_DEV_NAME +#define ZMK_DISPLAY_NAME CONFIG_LV_Z_DISPLAY_DEV_NAME static const struct device *display; static bool initialized = false; @@ -50,16 +52,21 @@ struct k_work_q *zmk_display_work_q() { #endif } -void display_timer_cb() { - lv_tick_inc(TICK_MS); - k_work_submit_to_queue(zmk_display_work_q(), &display_tick_work); -} +void display_timer_cb() { k_work_submit_to_queue(zmk_display_work_q(), &display_tick_work); } -void blank_display_cb(struct k_work *work) { display_blanking_on(display); } +K_TIMER_DEFINE(display_timer, display_timer_cb, NULL); + +void unblank_display_cb(struct k_work *work) { + display_blanking_off(display); + k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS)); +} -void unblank_display_cb(struct k_work *work) { display_blanking_off(display); } +#if IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) -K_TIMER_DEFINE(display_timer, display_timer_cb, NULL); +void blank_display_cb(struct k_work *work) { + k_timer_stop(&display_timer); + display_blanking_on(display); +} K_WORK_DEFINE(blank_display_work, blank_display_cb); K_WORK_DEFINE(unblank_display_work, unblank_display_cb); @@ -69,26 +76,30 @@ static void start_display_updates() { } k_work_submit_to_queue(zmk_display_work_q(), &unblank_display_work); - - k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS)); } -#if IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) - static void stop_display_updates() { if (display == NULL) { return; } k_work_submit_to_queue(zmk_display_work_q(), &blank_display_work); - - k_timer_stop(&display_timer); } #endif int zmk_display_is_initialized() { return initialized; } +static void initialize_theme() { +#if IS_ENABLED(CONFIG_LV_USE_THEME_MONO) + lv_disp_t *disp = lv_disp_get_default(); + lv_theme_t *theme = lv_theme_mono_init(disp, false, CONFIG_LV_FONT_DEFAULT); + theme->font_small = CONFIG_ZMK_LV_FONT_DEFAULT_SMALL; + + disp->theme = theme; +#endif // CONFIG_LV_USE_THEME_MONO +} + void initialize_display(struct k_work *work) { LOG_DBG(""); @@ -100,6 +111,8 @@ void initialize_display(struct k_work *work) { initialized = true; + initialize_theme(); + screen = zmk_display_status_screen(); if (screen == NULL) { @@ -109,7 +122,7 @@ void initialize_display(struct k_work *work) { lv_scr_load(screen); - start_display_updates(); + unblank_display_cb(work); } K_WORK_DEFINE(init_work, initialize_display); diff --git a/app/src/display/status_screen.c b/app/src/display/status_screen.c index 0fe7212d3db..6b58c30122f 100644 --- a/app/src/display/status_screen.c +++ b/app/src/display/status_screen.c @@ -34,42 +34,43 @@ static struct zmk_widget_layer_status layer_status_widget; static struct zmk_widget_wpm_status wpm_status_widget; #endif +lv_style_t global_style; + lv_obj_t *zmk_display_status_screen() { lv_obj_t *screen; - screen = lv_obj_create(NULL, NULL); + lv_style_init(&global_style); + lv_style_set_text_font(&global_style, &lv_font_montserrat_12); + + screen = lv_obj_create(NULL); + lv_obj_add_style(screen, &global_style, LV_PART_MAIN); #if IS_ENABLED(CONFIG_ZMK_WIDGET_BATTERY_STATUS) zmk_widget_battery_status_init(&battery_status_widget, screen); - lv_obj_align(zmk_widget_battery_status_obj(&battery_status_widget), NULL, LV_ALIGN_IN_TOP_RIGHT, - 0, 0); + lv_obj_align(zmk_widget_battery_status_obj(&battery_status_widget), LV_ALIGN_TOP_RIGHT, 0, 0); #endif #if IS_ENABLED(CONFIG_ZMK_WIDGET_OUTPUT_STATUS) zmk_widget_output_status_init(&output_status_widget, screen); - lv_obj_align(zmk_widget_output_status_obj(&output_status_widget), NULL, LV_ALIGN_IN_TOP_LEFT, 0, - 0); + lv_obj_align(zmk_widget_output_status_obj(&output_status_widget), LV_ALIGN_TOP_LEFT, 0, 0); #endif #if IS_ENABLED(CONFIG_ZMK_WIDGET_PERIPHERAL_STATUS) zmk_widget_peripheral_status_init(&peripheral_status_widget, screen); - lv_obj_align(zmk_widget_peripheral_status_obj(&peripheral_status_widget), NULL, - LV_ALIGN_IN_TOP_LEFT, 0, 0); + lv_obj_align(zmk_widget_peripheral_status_obj(&peripheral_status_widget), LV_ALIGN_TOP_LEFT, 0, + 0); #endif #if IS_ENABLED(CONFIG_ZMK_WIDGET_LAYER_STATUS) zmk_widget_layer_status_init(&layer_status_widget, screen); - lv_obj_set_style_local_text_font(zmk_widget_layer_status_obj(&layer_status_widget), - LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, - lv_theme_get_font_small()); - lv_obj_align(zmk_widget_layer_status_obj(&layer_status_widget), NULL, LV_ALIGN_IN_BOTTOM_LEFT, - 0, 0); + lv_obj_set_style_text_font(zmk_widget_layer_status_obj(&layer_status_widget), + lv_theme_get_font_small(screen), LV_PART_MAIN); + lv_obj_align(zmk_widget_layer_status_obj(&layer_status_widget), LV_ALIGN_BOTTOM_LEFT, 0, 0); #endif #if IS_ENABLED(CONFIG_ZMK_WIDGET_WPM_STATUS) zmk_widget_wpm_status_init(&wpm_status_widget, screen); - lv_obj_align(zmk_widget_wpm_status_obj(&wpm_status_widget), NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, - 0); + lv_obj_align(zmk_widget_wpm_status_obj(&wpm_status_widget), LV_ALIGN_BOTTOM_RIGHT, 0, 0); #endif return screen; } diff --git a/app/src/display/theme.c b/app/src/display/theme.c new file mode 100644 index 00000000000..3ad41dac3e9 --- /dev/null +++ b/app/src/display/theme.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#if defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_8) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_8 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_10) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_10 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_12 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_14) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_14 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_16 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_18) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_18 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_20) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_20 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_22) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_22 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_24) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_24 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_26 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_28 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_30) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_30 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_32) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_32 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_34) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_34 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_36) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_36 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_38) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_38 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_40) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_40 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_42) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_42 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_44) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_44 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_46) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_46 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_48) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_48 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12_SUBPX) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_12_subpx +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28_COMPRESSED) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_28_compressed +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_DEJAVU_16_PERSIAN_HEBREW) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_dejavu_16_persian_hebrew +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_SIMSUN_16_CJK) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_simsun_16_cjk +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_UNSCII_8) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_unscii_8 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_UNSCII_16) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_unscii_16 +#endif + +void zmk_display_theme_init(lv_obj_t *obj) { + lv_theme_t *theme = lv_theme_get_from_obj(obj); + + if (theme == NULL) { + return; + } + + theme->font_small = CONFIG_ZMK_LV_FONT_DEFAULT_SMALL; +} \ No newline at end of file diff --git a/app/src/display/theme.h b/app/src/display/theme.h new file mode 100644 index 00000000000..94bf7f39793 --- /dev/null +++ b/app/src/display/theme.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +#if defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_8) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_8 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_10) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_10 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_12 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_14) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_14 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_16 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_18) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_18 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_20) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_20 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_22) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_22 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_24) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_24 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_26 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_28 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_30) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_30 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_32) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_32 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_34) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_34 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_36) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_36 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_38) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_38 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_40) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_40 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_42) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_42 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_44) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_44 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_46) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_46 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_48) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_48 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12_SUBPX) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_12_subpx +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28_COMPRESSED) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_montserrat_28_compressed +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_DEJAVU_16_PERSIAN_HEBREW) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_dejavu_16_persian_hebrew +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_SIMSUN_16_CJK) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_simsun_16_cjk +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_UNSCII_8) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_unscii_8 +#elif defined(CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_UNSCII_16) +#define CONFIG_ZMK_LV_FONT_DEFAULT_SMALL &lv_font_unscii_16 +#endif diff --git a/app/src/display/widgets/Kconfig b/app/src/display/widgets/Kconfig index 847a47abc2b..5ef32d20417 100644 --- a/app/src/display/widgets/Kconfig +++ b/app/src/display/widgets/Kconfig @@ -7,13 +7,13 @@ config ZMK_WIDGET_LAYER_STATUS bool "Widget for highest, active layer using small icons" default y depends on !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL - select LVGL_USE_LABEL + select LV_USE_LABEL config ZMK_WIDGET_BATTERY_STATUS bool "Widget for battery charge information, using small icons" depends on BT default y if BT - select LVGL_USE_LABEL + select LV_USE_LABEL if ZMK_WIDGET_BATTERY_STATUS @@ -26,18 +26,18 @@ config ZMK_WIDGET_OUTPUT_STATUS bool "Widget for keyboard output status icons" depends on BT && (!ZMK_SPLIT_BLE || ZMK_SPLIT_ROLE_CENTRAL) default y if BT && (!ZMK_SPLIT_BLE || ZMK_SPLIT_ROLE_CENTRAL) - select LVGL_USE_LABEL + select LV_USE_LABEL config ZMK_WIDGET_PERIPHERAL_STATUS bool "Widget for split peripheral status icons" depends on BT && ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL default y if BT && ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL - select LVGL_USE_LABEL + select LV_USE_LABEL config ZMK_WIDGET_WPM_STATUS bool "Widget for displaying typed words per minute" depends on !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL - select LVGL_USE_LABEL + select LV_USE_LABEL select ZMK_WPM endmenu diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 71b243d34ed..3480101d8ac 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -55,7 +55,6 @@ static void set_battery_symbol(lv_obj_t *label, struct battery_status_state stat } #endif lv_label_set_text(label, text); - lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); } void battery_status_update_cb(struct battery_status_state state) { @@ -81,9 +80,7 @@ ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ int zmk_widget_battery_status_init(struct zmk_widget_battery_status *widget, lv_obj_t *parent) { - widget->obj = lv_label_create(parent, NULL); - - lv_obj_set_size(widget->obj, 43, 15); + widget->obj = lv_label_create(parent); sys_slist_append(&widgets, &widget->node); diff --git a/app/src/display/widgets/layer_status.c b/app/src/display/widgets/layer_status.c index a4a7be58df7..8dc0061c6a9 100644 --- a/app/src/display/widgets/layer_status.c +++ b/app/src/display/widgets/layer_status.c @@ -54,9 +54,7 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, laye ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); int zmk_widget_layer_status_init(struct zmk_widget_layer_status *widget, lv_obj_t *parent) { - widget->obj = lv_label_create(parent, NULL); - - lv_obj_set_size(widget->obj, 40, 15); + widget->obj = lv_label_create(parent); sys_slist_append(&widgets, &widget->node); diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 8bbe1a7ef29..135770a6446 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -81,9 +81,7 @@ ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); #endif int zmk_widget_output_status_init(struct zmk_widget_output_status *widget, lv_obj_t *parent) { - widget->obj = lv_label_create(parent, NULL); - - lv_obj_set_size(widget->obj, 40, 15); + widget->obj = lv_label_create(parent); sys_slist_append(&widgets, &widget->node); diff --git a/app/src/display/widgets/peripheral_status.c b/app/src/display/widgets/peripheral_status.c index baf48f58440..d0c33f2071f 100644 --- a/app/src/display/widgets/peripheral_status.c +++ b/app/src/display/widgets/peripheral_status.c @@ -45,9 +45,7 @@ ZMK_SUBSCRIPTION(widget_peripheral_status, zmk_split_peripheral_status_changed); int zmk_widget_peripheral_status_init(struct zmk_widget_peripheral_status *widget, lv_obj_t *parent) { - widget->obj = lv_label_create(parent, NULL); - - lv_obj_set_size(widget->obj, 40, 15); + widget->obj = lv_label_create(parent); sys_slist_append(&widgets, &widget->node); diff --git a/app/src/display/widgets/wpm_status.c b/app/src/display/widgets/wpm_status.c index a2c6a2871dc..f3d06d65a39 100644 --- a/app/src/display/widgets/wpm_status.c +++ b/app/src/display/widgets/wpm_status.c @@ -31,7 +31,7 @@ void set_wpm_symbol(lv_obj_t *label, struct wpm_status_state state) { snprintf(text, sizeof(text), "%i", state.wpm); lv_label_set_text(label, text); - lv_obj_align(label, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_align(label, LV_ALIGN_BOTTOM_RIGHT, 0, 0); } void wpm_status_update_cb(struct wpm_status_state state) { @@ -44,10 +44,8 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_wpm_status, struct wpm_status_state, wpm_stat ZMK_SUBSCRIPTION(widget_wpm_status, zmk_wpm_state_changed); int zmk_widget_wpm_status_init(struct zmk_widget_wpm_status *widget, lv_obj_t *parent) { - widget->obj = lv_label_create(parent, NULL); - lv_label_set_align(widget->obj, LV_LABEL_ALIGN_RIGHT); - - lv_obj_set_size(widget->obj, 40, 15); + widget->obj = lv_label_create(parent); + lv_obj_align(widget->obj, LV_ALIGN_RIGHT_MID, 0, 0); sys_slist_append(&widgets, &widget->node); From 243a227ff96e0cc25d4ae362efb30c769b4bc329 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Sep 2022 21:35:40 -0400 Subject: [PATCH 0610/1130] refactor: Move to LISTIFY/DT_FOREACH_PROP_ELEM macros. --- app/drivers/kscan/kscan_gpio_demux.c | 6 +++--- app/drivers/kscan/kscan_gpio_direct.c | 4 ++-- app/drivers/kscan/kscan_gpio_matrix.c | 8 ++++---- app/src/behaviors/behavior_caps_word.c | 4 ++-- app/src/behaviors/behavior_macro.c | 4 ++-- app/src/behaviors/behavior_tap_dance.c | 4 ++-- app/src/conditional_layer.c | 5 ++--- app/src/keymap.c | 8 ++++---- app/src/matrix_transform.c | 4 ++-- app/src/sensors.c | 15 +++++++++------ 10 files changed, 32 insertions(+), 30 deletions(-) diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 6e3d9e79f94..ff2c6c69630 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -28,7 +28,7 @@ struct kscan_gpio_item_config { .label = DT_INST_GPIO_LABEL_BY_IDX(n, prop, idx), \ .pin = DT_INST_GPIO_PIN_BY_IDX(n, prop, idx), \ .flags = DT_INST_GPIO_FLAGS_BY_IDX(n, prop, idx), \ - }, + } // Define row and col cfg #define _KSCAN_GPIO_INPUT_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, input_gpios, idx) @@ -240,8 +240,8 @@ struct kscan_gpio_item_config { }; \ \ static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ - .rows = {UTIL_LISTIFY(INST_MATRIX_INPUTS(n), _KSCAN_GPIO_INPUT_CFG_INIT, n)}, \ - .cols = {UTIL_LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, n)}, \ + .rows = {LISTIFY(INST_MATRIX_INPUTS(n), _KSCAN_GPIO_INPUT_CFG_INIT, (,), n)}, \ + .cols = {LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, (,), n)}, \ }; \ \ DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, NULL, &kscan_gpio_data_##n, \ diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index ee7b13f61a6..1e0576c5f7a 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -41,7 +41,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define INST_INPUTS_LEN(n) DT_INST_PROP_LEN(n, input_gpios) #define KSCAN_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), input_gpios, idx), + GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), input_gpios, idx) struct kscan_direct_irq_callback { const struct device *dev; @@ -327,7 +327,7 @@ static const struct kscan_driver_api kscan_direct_api = { "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ static const struct gpio_dt_spec kscan_direct_inputs_##n[] = { \ - UTIL_LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, n)}; \ + LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (,), n)}; \ \ static struct debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ \ diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 71fcad29d2d..de65fd49f79 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -50,9 +50,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, pollcode, intcode) #define KSCAN_GPIO_ROW_CFG_INIT(idx, inst_idx) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), row_gpios, idx), + GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), row_gpios, idx) #define KSCAN_GPIO_COL_CFG_INIT(idx, inst_idx) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), col_gpios, idx), + GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), col_gpios, idx) enum kscan_diode_direction { KSCAN_ROW2COL, @@ -433,10 +433,10 @@ static const struct kscan_driver_api kscan_matrix_api = { "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ static const struct gpio_dt_spec kscan_matrix_rows_##n[] = { \ - UTIL_LISTIFY(INST_ROWS_LEN(n), KSCAN_GPIO_ROW_CFG_INIT, n)}; \ + LISTIFY(INST_ROWS_LEN(n), KSCAN_GPIO_ROW_CFG_INIT, (,), n)}; \ \ static const struct gpio_dt_spec kscan_matrix_cols_##n[] = { \ - UTIL_LISTIFY(INST_COLS_LEN(n), KSCAN_GPIO_COL_CFG_INIT, n)}; \ + LISTIFY(INST_COLS_LEN(n), KSCAN_GPIO_COL_CFG_INIT, (,), n)}; \ \ static struct debounce_state kscan_matrix_state_##n[INST_MATRIX_LEN(n)]; \ \ diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 3842a31f55b..7a9612b302d 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -168,7 +168,7 @@ static int behavior_caps_word_init(const struct device *dev) { #define PARSE_BREAK(i) \ {.page = ZMK_HID_USAGE_PAGE(i), \ .id = ZMK_HID_USAGE_ID(i), \ - .implicit_modifiers = SELECT_MODS(i)}, + .implicit_modifiers = SELECT_MODS(i)} #define BREAK_ITEM(i, n) PARSE_BREAK(DT_INST_PROP_BY_IDX(n, continue_list, i)) @@ -177,7 +177,7 @@ static int behavior_caps_word_init(const struct device *dev) { static struct behavior_caps_word_config behavior_caps_word_config_##n = { \ .index = n, \ .mods = DT_INST_PROP_OR(n, mods, MOD_LSFT), \ - .continuations = {UTIL_LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, n)}, \ + .continuations = {LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, (,), n)}, \ .continuations_count = DT_INST_PROP_LEN(n, continue_list), \ }; \ DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, NULL, &behavior_caps_word_data_##n, \ diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index 46fdde3ce41..5b215b93a84 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -166,10 +166,10 @@ static const struct behavior_driver_api behavior_macro_driver_api = { .binding_released = on_macro_binding_released, }; -#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, DT_DRV_INST(drv_inst)), +#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, DT_DRV_INST(drv_inst)) #define TRANSFORMED_BEHAVIORS(n) \ - {UTIL_LISTIFY(DT_PROP_LEN(DT_DRV_INST(n), bindings), BINDING_WITH_COMMA, n)}, + {LISTIFY(DT_PROP_LEN(DT_DRV_INST(n), bindings), BINDING_WITH_COMMA, (,), n)}, #define MACRO_INST(n) \ static struct behavior_macro_state behavior_macro_state_##n = {}; \ diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 3bad290159d..6d78cb3e58f 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -237,10 +237,10 @@ static int behavior_tap_dance_init(const struct device *dev) { return 0; } -#define _TRANSFORM_ENTRY(idx, node) ZMK_KEYMAP_EXTRACT_BINDING(idx, node), +#define _TRANSFORM_ENTRY(idx, node) ZMK_KEYMAP_EXTRACT_BINDING(idx, node) #define TRANSFORMED_BINDINGS(node) \ - { UTIL_LISTIFY(DT_INST_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, DT_DRV_INST(node)) } + { LISTIFY(DT_INST_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, (,), DT_DRV_INST(node)) } #define KP_INST(n) \ static struct zmk_behavior_binding \ diff --git a/app/src/conditional_layer.c b/app/src/conditional_layer.c index 1728a7f42fc..572652ff8f2 100644 --- a/app/src/conditional_layer.c +++ b/app/src/conditional_layer.c @@ -33,13 +33,12 @@ struct conditional_layer_cfg { int8_t then_layer; }; -#define IF_LAYER_BIT(i, n) BIT(DT_PROP_BY_IDX(n, if_layers, i)) | +#define IF_LAYER_BIT(node_id, prop, idx) BIT(DT_PROP_BY_IDX(node_id, prop, idx)) | // Evaluates to conditional_layer_cfg struct initializer. #define CONDITIONAL_LAYER_DECL(n) \ { \ - /* TODO: Replace UTIL_LISTIFY with DT_FOREACH_PROP_ELEM after Zepyhr 2.6.0 upgrade. */ \ - .if_layers_state_mask = UTIL_LISTIFY(DT_PROP_LEN(n, if_layers), IF_LAYER_BIT, n) 0, \ + .if_layers_state_mask = DT_FOREACH_PROP_ELEM(n, if_layers, IF_LAYER_BIT) 0, \ .then_layer = DT_PROP(n, then_layer), \ }, diff --git a/app/src/keymap.c b/app/src/keymap.c index e586316f4f4..b00d0fbafbf 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -34,10 +34,10 @@ static uint8_t _zmk_keymap_layer_default = 0; #define ZMK_KEYMAP_NODE DT_DRV_INST(0) #define ZMK_KEYMAP_LAYERS_LEN (DT_INST_FOREACH_CHILD(0, LAYER_CHILD_LEN) 0) -#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst), +#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) #define TRANSFORMED_LAYER(node) \ - {UTIL_LISTIFY(DT_PROP_LEN(node, bindings), BINDING_WITH_COMMA, node)}, + {LISTIFY(DT_PROP_LEN(node, bindings), BINDING_WITH_COMMA, (,), node)}, #if ZMK_KEYMAP_HAS_SENSORS #define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ @@ -47,12 +47,12 @@ static uint8_t _zmk_keymap_layer_default = 0; (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param2), (0), \ (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param2))), \ - }, + } #define SENSOR_LAYER(node) \ COND_CODE_1( \ DT_NODE_HAS_PROP(node, sensor_bindings), \ - ({UTIL_LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, node)}), \ + ({LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, (,), node)}), \ ({})), #endif /* ZMK_KEYMAP_HAS_SENSORS */ diff --git a/app/src/matrix_transform.c b/app/src/matrix_transform.c index 8f54f312309..e7c6e95f2a9 100644 --- a/app/src/matrix_transform.c +++ b/app/src/matrix_transform.c @@ -13,9 +13,9 @@ #define _TRANSFORM_ENTRY(i, _) \ [(KT_ROW(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i)) * ZMK_MATRIX_COLS) + \ - KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i, + KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i -static uint32_t transform[] = {UTIL_LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, 0)}; +static uint32_t transform[] = {LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, (,), 0)}; #endif diff --git a/app/src/sensors.c b/app/src/sensors.c index dd5f4267b38..184061ac381 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -25,12 +25,15 @@ struct sensors_data_item { }; #define _SENSOR_ITEM(node) \ - {.dev = NULL, .trigger = {.type = SENSOR_TRIG_DELTA, .chan = SENSOR_CHAN_ROTATION}}, -#define SENSOR_ITEM(idx, _) \ + { \ + .dev = NULL, .trigger = {.type = SENSOR_TRIG_DELTA, .chan = SENSOR_CHAN_ROTATION } \ + } + +#define SENSOR_ITEM(idx, _node) \ COND_CODE_1(DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_BY_IDX(idx), okay), \ - (_SENSOR_ITEM(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), ()) + (_SENSOR_ITEM(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), ({})) -static struct sensors_data_item sensors[] = {UTIL_LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_ITEM, 0)}; +static struct sensors_data_item sensors[] = {LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_ITEM, (, ), 0)}; static void zmk_sensors_trigger_handler(const struct device *dev, struct sensor_trigger *trigger) { int err; @@ -71,10 +74,10 @@ static int zmk_sensors_init(const struct device *_arg) { int local_index = 0; int absolute_index = 0; - UTIL_LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_INIT, 0) + LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_INIT, (), 0) return 0; } SYS_INIT(zmk_sensors_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); -#endif /* ZMK_KEYMAP_HAS_SENSORS */ \ No newline at end of file +#endif /* ZMK_KEYMAP_HAS_SENSORS */ From d513dc1766edf52a22d78da0e73d5a09670059e9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Sep 2022 21:36:13 -0400 Subject: [PATCH 0611/1130] refactor: Move to new PM API. --- app/src/activity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/activity.c b/app/src/activity.c index 5a1e238539e..029908c0141 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -70,7 +70,7 @@ void activity_work_handler(struct k_work *work) { if (inactive_time > MAX_SLEEP_MS && !is_usb_power_present()) { // Put devices in suspend power mode before sleeping set_state(ZMK_ACTIVITY_SLEEP); - pm_power_state_force(0U, (struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); + pm_state_force(0U, &(struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ if (inactive_time > MAX_IDLE_MS) { From 4f2f9db1d474dc8754780b27243b1a61acbdad42 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Sep 2022 21:36:53 -0400 Subject: [PATCH 0612/1130] refactor(ble): New callback API for pairing complete. --- app/src/ble.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index b10aa20b5f7..4d2e4603dfb 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -528,7 +528,6 @@ static void auth_pairing_complete(struct bt_conn *conn, bool bonded) { static struct bt_conn_auth_cb zmk_ble_auth_cb_display = { .pairing_accept = auth_pairing_accept, - .pairing_complete = auth_pairing_complete, // .passkey_display = auth_passkey_display, #if IS_ENABLED(CONFIG_ZMK_BLE_PASSKEY_ENTRY) @@ -537,6 +536,10 @@ static struct bt_conn_auth_cb zmk_ble_auth_cb_display = { .cancel = auth_cancel, }; +static struct bt_conn_auth_info_cb zmk_ble_auth_info_cb_display = { + .pairing_complete = auth_pairing_complete, +}; + static void zmk_ble_ready(int err) { LOG_DBG("ready? %d", err); if (err) { @@ -589,6 +592,7 @@ static int zmk_ble_init(const struct device *_arg) { bt_conn_cb_register(&conn_callbacks); bt_conn_auth_cb_register(&zmk_ble_auth_cb_display); + bt_conn_auth_info_cb_register(&zmk_ble_auth_info_cb_display); zmk_ble_ready(0); From 35a1c5a3d44b92c050d28c0aca3d1cb9c7e53695 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Sep 2022 21:37:16 -0400 Subject: [PATCH 0613/1130] refactor(behaviors): Rename `reset` behavior. * Upstream now has a node w/ label `reset` on many boards, so renaming our reset behavior node label to `sys_reset`. --- app/boards/arm/bt60/bt60_v1.keymap | 10 +++++----- app/boards/arm/bt60/bt60_v1_hs.keymap | 2 +- app/boards/arm/planck/planck_rev6.keymap | 2 +- app/boards/arm/s40nc/s40nc.keymap | 2 +- app/boards/shields/bfo9000/bfo9000.keymap | 2 +- .../shields/boardsource3x4/boardsource3x4.keymap | 2 +- app/boards/shields/contra/contra.keymap | 2 +- app/boards/shields/cradio/cradio.keymap | 2 +- app/boards/shields/crbn/crbn.keymap | 2 +- app/boards/shields/eek/eek.keymap | 2 +- app/boards/shields/ergodash/ergodash.keymap | 4 ++-- .../shields/eternal_keypad/eternal_keypad.keymap | 4 ++-- .../shields/eternal_keypad/eternal_keypad_lefty.keymap | 4 ++-- app/boards/shields/jian/jian.keymap | 2 +- app/boards/shields/jiran/jiran.keymap | 2 +- app/boards/shields/jorne/jorne.keymap | 2 +- app/boards/shields/leeloo/leeloo.keymap | 2 +- app/boards/shields/lotus58/lotus58.keymap | 6 +++--- app/boards/shields/m60/m60.keymap | 2 +- app/boards/shields/murphpad/murphpad.keymap | 2 +- app/boards/shields/qaz/qaz.keymap | 2 +- app/boards/shields/redox/redox.keymap | 2 +- app/boards/shields/reviung41/reviung41.keymap | 2 +- .../shields/settings_reset/settings_reset.keymap | 2 +- app/boards/shields/tg4x/tg4x.keymap | 2 +- app/boards/shields/tidbit/tidbit.keymap | 2 +- app/boards/shields/tidbit/tidbit_19key.keymap | 2 +- app/boards/shields/waterfowl/waterfowl.keymap | 8 ++++---- app/boards/shields/zodiark/zodiark.keymap | 2 +- app/dts/behaviors/reset.dtsi | 4 ++-- docs/blog/2021-01-27-zmk-sotf-4.md | 2 +- docs/docs/behaviors/reset.md | 6 +++--- docs/src/data/keymap-upgrade.js | 1 + 33 files changed, 48 insertions(+), 47 deletions(-) diff --git a/app/boards/arm/bt60/bt60_v1.keymap b/app/boards/arm/bt60/bt60_v1.keymap index 0985a605542..b42f3f3d637 100644 --- a/app/boards/arm/bt60/bt60_v1.keymap +++ b/app/boards/arm/bt60/bt60_v1.keymap @@ -56,7 +56,7 @@ // ------------------------------------------------------------------------------------------ bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR &trans @@ -84,7 +84,7 @@ raise { bindings = < &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp INS &kp DEL - &kp CLCK &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &kp UP &trans &reset + &kp CLCK &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &kp UP &trans &sys_reset &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp LEFT &kp RIGHT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp DOWN &trans &trans &trans &trans &trans &bootloader &trans &trans &trans @@ -112,7 +112,7 @@ raise { bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &reset &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK + &sys_reset &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &trans &bootloader &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR @@ -140,7 +140,7 @@ raise { bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp F1 - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &bt BT_CLR @@ -168,7 +168,7 @@ raise { bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &trans &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR diff --git a/app/boards/arm/bt60/bt60_v1_hs.keymap b/app/boards/arm/bt60/bt60_v1_hs.keymap index 6e62e1bbfe7..167460c6694 100644 --- a/app/boards/arm/bt60/bt60_v1_hs.keymap +++ b/app/boards/arm/bt60/bt60_v1_hs.keymap @@ -26,7 +26,7 @@ raise { bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR diff --git a/app/boards/arm/planck/planck_rev6.keymap b/app/boards/arm/planck/planck_rev6.keymap index bbfb770e3a9..7e4f673264a 100644 --- a/app/boards/arm/planck/planck_rev6.keymap +++ b/app/boards/arm/planck/planck_rev6.keymap @@ -39,7 +39,7 @@ &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans - &reset &bootloader &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP >; }; }; diff --git a/app/boards/arm/s40nc/s40nc.keymap b/app/boards/arm/s40nc/s40nc.keymap index d7f349d97b5..c43bc671a8b 100644 --- a/app/boards/arm/s40nc/s40nc.keymap +++ b/app/boards/arm/s40nc/s40nc.keymap @@ -50,7 +50,7 @@ &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp C_PP &bt BT_SEL 0 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &kp K_LOCK &bt BT_SEL 1 &out OUT_USB &kp CAPS &kp KP_NUM &kp SLCK &trans &trans &kp COMMA &kp DOT &kp K_VOL_UP &kp K_MUTE - &bt BT_SEL 2 &out OUT_BLE &kp PAUSE_BREAK &reset &trans &bootloader &kp C_BRI_DN &kp K_VOL_DN &kp C_BRI_UP + &bt BT_SEL 2 &out OUT_BLE &kp PAUSE_BREAK &sys_reset &trans &bootloader &kp C_BRI_DN &kp K_VOL_DN &kp C_BRI_UP >; }; }; diff --git a/app/boards/shields/bfo9000/bfo9000.keymap b/app/boards/shields/bfo9000/bfo9000.keymap index fe90493142b..22186a1da93 100644 --- a/app/boards/shields/bfo9000/bfo9000.keymap +++ b/app/boards/shields/bfo9000/bfo9000.keymap @@ -46,7 +46,7 @@ &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 5 &bt BT_SEL 6 &bt BT_SEL 7 &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 5 &bt BT_SEL 6 &bt BT_SEL 7 &out OUT_USB &out OUT_BLE &trans &trans &trans &trans &trans &trans &trans &out OUT_USB &out OUT_BLE &trans &trans &trans &trans &trans &trans &trans &ext_power EP_ON &ext_power EP_OFF &trans &trans &trans &trans &trans &trans &trans &ext_power EP_ON &ext_power EP_OFF &trans &trans &trans &trans &trans &trans &trans - &reset &bootloader &trans &trans &trans &trans &trans &trans &trans &reset &bootloader &trans &trans &trans &trans &trans &trans &trans + &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &trans &trans &trans >; diff --git a/app/boards/shields/boardsource3x4/boardsource3x4.keymap b/app/boards/shields/boardsource3x4/boardsource3x4.keymap index add7efa0400..c47126abcaa 100644 --- a/app/boards/shields/boardsource3x4/boardsource3x4.keymap +++ b/app/boards/shields/boardsource3x4/boardsource3x4.keymap @@ -32,7 +32,7 @@ lower_layer { bindings = < - &bt BT_CLR &none &reset &bootloader + &bt BT_CLR &none &sys_reset &bootloader &trans &bt BT_SEL 3 &bt BT_SEL 4 &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 >; diff --git a/app/boards/shields/contra/contra.keymap b/app/boards/shields/contra/contra.keymap index e24b502867d..77b431b65b4 100644 --- a/app/boards/shields/contra/contra.keymap +++ b/app/boards/shields/contra/contra.keymap @@ -30,7 +30,7 @@ &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL &kp TAB &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp PG_UP &kp LBKT &kp RBKT &kp BSLH &kp LSHFT &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp EQUAL &kp PG_DN &kp HOME &kp END &kp ENTER - &kp LCTRL &kp LGUI &kp LALT &reset &to DEFAULT &kp SPACE &trans &mo BT_CTRL &kp LEFT &kp RIGHT &kp UP &kp DOWN + &kp LCTRL &kp LGUI &kp LALT &sys_reset &to DEFAULT &kp SPACE &trans &mo BT_CTRL &kp LEFT &kp RIGHT &kp UP &kp DOWN >; }; diff --git a/app/boards/shields/cradio/cradio.keymap b/app/boards/shields/cradio/cradio.keymap index 587bc7aa450..3f6670da725 100644 --- a/app/boards/shields/cradio/cradio.keymap +++ b/app/boards/shields/cradio/cradio.keymap @@ -88,7 +88,7 @@ bindings = < //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ //│ RESET │ │ │ │PROFILE 0 │ │ │ │ │ │ RESET │ - &reset &trans &trans &trans &bt BT_SEL 0 &trans &trans &trans &trans &reset + &sys_reset &trans &trans &trans &bt BT_SEL 0 &trans &trans &trans &trans &sys_reset //├──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┤ //│BOOTLOADER│ │ │ │PROFILE 1 │ │ │ │ │ │BOOTLOADER│ &bootloader &trans &trans &trans &bt BT_SEL 1 &trans &trans &trans &trans &bootloader diff --git a/app/boards/shields/crbn/crbn.keymap b/app/boards/shields/crbn/crbn.keymap index 9423e1af92a..b967e5e2671 100644 --- a/app/boards/shields/crbn/crbn.keymap +++ b/app/boards/shields/crbn/crbn.keymap @@ -52,7 +52,7 @@ control { bindings = < - &reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans + &sys_reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans diff --git a/app/boards/shields/eek/eek.keymap b/app/boards/shields/eek/eek.keymap index 439c90aadd2..d250cb01505 100644 --- a/app/boards/shields/eek/eek.keymap +++ b/app/boards/shields/eek/eek.keymap @@ -49,7 +49,7 @@ &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &out OUT_USB &out OUT_BLE &none &kp EQUAL &kp MINUS &kp CAPS &kp F5 &kp F6 &kp F7 &kp F8 &kp LBKT &kp RBKT &none &kp GRAVE &kp BSLH &kp LSHFT &kp F9 &kp F10 &kp F11 &kp F12 &none &none &none &none &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &reset &none &trans + &kp LCTRL &kp LGUI &kp LALT &sys_reset &none &trans >; }; }; diff --git a/app/boards/shields/ergodash/ergodash.keymap b/app/boards/shields/ergodash/ergodash.keymap index a85c58a64cf..e384e504fbe 100644 --- a/app/boards/shields/ergodash/ergodash.keymap +++ b/app/boards/shields/ergodash/ergodash.keymap @@ -56,7 +56,7 @@ &kp F11 &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &none &none &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F12 &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none -&trans &bootloader &reset &none &none &none &none &none &none &none &none &none &none &trans +&trans &bootloader &sys_reset &none &none &none &none &none &none &none &none &none &none &trans &trans &none &none &trans &trans &none &trans &trans &none &trans &none &none &none &trans >; }; @@ -77,7 +77,7 @@ &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none -&trans &none &none &none &none &none &none &none &none &none &none &bootloader &reset &trans +&trans &none &none &none &none &none &none &none &none &none &none &bootloader &sys_reset &trans &trans &none &none &trans &trans &none &trans &trans &none &trans &none &none &none &trans >; }; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.keymap b/app/boards/shields/eternal_keypad/eternal_keypad.keymap index 0f3eda7bf27..da06d2744c4 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad.keymap +++ b/app/boards/shields/eternal_keypad/eternal_keypad.keymap @@ -38,7 +38,7 @@ &bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE &trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD &bt BT_CLR &trans &kp LEFT &kp DOWN &kp RIGHT &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD - &reset &trans &trans &trans &trans &trans &rgb_ug RGB_EFF &rgb_ug RGB_EFR + &sys_reset &trans &trans &trans &trans &trans &rgb_ug RGB_EFF &rgb_ug RGB_EFR &bootloader &trans &trans &trans &trans &trans >; }; @@ -48,7 +48,7 @@ &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp P &kp O &kp I &kp U &kp Y &kp F7 &bt BT_CLR &kp BSPC &kp SEMI &kp L &kp K &kp J &kp H &kp F8 - &reset &trans &kp LGUI &kp M &kp N &kp F12 &kp F11 &kp F9 + &sys_reset &trans &kp LGUI &kp M &kp N &kp F12 &kp F11 &kp F9 &bootloader &trans &trans &trans &trans &kp F10 >; }; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap index e1bddbadc9b..81710032152 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap +++ b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap @@ -38,7 +38,7 @@ &bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE &trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD &bt BT_CLR &trans &kp RIGHT &kp DOWN &kp RIGHT &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD - &reset &trans &trans &trans &trans &trans &rgb_ug RGB_EFF &rgb_ug RGB_EFR + &sys_reset &trans &trans &trans &trans &trans &rgb_ug RGB_EFF &rgb_ug RGB_EFR &bootloader &trans &trans &trans &trans &trans >; }; @@ -48,7 +48,7 @@ &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp P &kp O &kp I &kp U &kp Y &kp F7 &bt BT_CLR &kp BSPC &kp SEMI &kp L &kp K &kp J &kp H &kp F8 - &reset &trans &kp LGUI &kp M &kp N &kp F12 &kp F11 &kp F9 + &sys_reset &trans &kp LGUI &kp M &kp N &kp F12 &kp F11 &kp F9 &bootloader &trans &trans &trans &trans &kp F10 >; }; diff --git a/app/boards/shields/jian/jian.keymap b/app/boards/shields/jian/jian.keymap index 7b8dd676bbd..e8f7dcc87a1 100644 --- a/app/boards/shields/jian/jian.keymap +++ b/app/boards/shields/jian/jian.keymap @@ -67,7 +67,7 @@ // | | | | | | | | | | | | | | // | | | | | | | | bindings = < - &reset &bootloader &none &none &none &none &none &none &none &none &none &none &bootloader &reset + &sys_reset &bootloader &none &none &none &none &none &none &none &none &none &none &bootloader &sys_reset &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 4 &bt BT_SEL 3 &bt BT_SEL 2 &bt BT_SEL 1 &bt BT_SEL 0 &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &none &trans &none &trans &trans &none &trans diff --git a/app/boards/shields/jiran/jiran.keymap b/app/boards/shields/jiran/jiran.keymap index e6c073cc8aa..6dcd733cdbe 100644 --- a/app/boards/shields/jiran/jiran.keymap +++ b/app/boards/shields/jiran/jiran.keymap @@ -25,7 +25,7 @@ lower_layer { bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp EQUAL - &kp F11 &kp TAB &bt BT_CLR &kp HOME &reset &kp PG_UP &kp C_VOL_UP &kp C_VOL_UP &kp PG_UP &reset &kp HOME &kp INS &kp DEL &kp F12 + &kp F11 &kp TAB &bt BT_CLR &kp HOME &sys_reset &kp PG_UP &kp C_VOL_UP &kp C_VOL_UP &kp PG_UP &sys_reset &kp HOME &kp INS &kp DEL &kp F12 &kp LSHIFT &bt BT_NXT &kp LEFT &kp UP &kp RIGHT &kp C_MUTE &kp C_MUTE &kp LEFT &kp UP &kp RIGHT &kp PSCRN &mt RSHIFT SLCK &kp LCTRL &bt BT_PRV &kp END &kp DOWN &kp PG_DN &kp C_VOL_DN &kp C_VOL_DN &kp PG_DN &kp DOWN &kp END &kp PAUSE_BREAK &mt RCTRL KP_NUM &trans &kp SPACE &kp LALT &mt RALT RET &kp BSPC &trans diff --git a/app/boards/shields/jorne/jorne.keymap b/app/boards/shields/jorne/jorne.keymap index 93c7691aa33..2a109fe8ef1 100644 --- a/app/boards/shields/jorne/jorne.keymap +++ b/app/boards/shields/jorne/jorne.keymap @@ -64,7 +64,7 @@ // | | | | | | | | | | | | | | // | | | | | | | | bindings = < - &reset &bootloader &none &none &none &none &none &none &none &none &none &none &bootloader &reset + &sys_reset &bootloader &none &none &none &none &none &none &none &none &none &none &bootloader &sys_reset &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 4 &bt BT_SEL 3 &bt BT_SEL 2 &bt BT_SEL 1 &bt BT_SEL 0 &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &none &trans &none &trans &trans &none &trans diff --git a/app/boards/shields/leeloo/leeloo.keymap b/app/boards/shields/leeloo/leeloo.keymap index 4104cc3a865..fc3b25e03e2 100644 --- a/app/boards/shields/leeloo/leeloo.keymap +++ b/app/boards/shields/leeloo/leeloo.keymap @@ -45,7 +45,7 @@ raise_layer { bindings = < &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &reset &bootloader +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR &trans diff --git a/app/boards/shields/lotus58/lotus58.keymap b/app/boards/shields/lotus58/lotus58.keymap index cfe4342cf8a..50249146d72 100644 --- a/app/boards/shields/lotus58/lotus58.keymap +++ b/app/boards/shields/lotus58/lotus58.keymap @@ -57,7 +57,7 @@ bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &fofunc &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp EQUAL &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT -&kp LSHFT &kp A &sleft &kp D &fright &kp G &reset &reset &kp H &kp J &kp K &kp L &kp SEMI &mt RSHFT SQT +&kp LSHFT &kp A &sleft &kp D &fright &kp G &sys_reset &sys_reset &kp H &kp J &kp K &kp L &kp SEMI &mt RSHFT SQT &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_MUTE &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RCTRL BSLH < 2 RET &kp LALT &kp SPACE < 1 DEL < 2 RET &kp BSPC < 1 RBKT &kp LGUI >; @@ -91,8 +91,8 @@ // | | UNDO | CUT | COPY | PASTE | | | | | | |> | <|<| | |>|> | | | // | | | | | | | | | | bindings = < -&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG &out OUT_USB &out OUT_BLE &trans &reset &bootloader -&trans &kp INS &kp PSCRN &kp K_CMENU &reset &trans &kp PG_UP &trans &kp UP &trans &trans &trans +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG &out OUT_USB &out OUT_BLE &trans &sys_reset &bootloader +&trans &kp INS &kp PSCRN &kp K_CMENU &sys_reset &trans &kp PG_UP &trans &kp UP &trans &trans &trans &trans &kp LALT &kp LCTRL &kp LSHFT &bootloader &kp CLCK &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC &trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &kp C_PP &kp C_PREV &kp C_NEXT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans diff --git a/app/boards/shields/m60/m60.keymap b/app/boards/shields/m60/m60.keymap index 6caa637034a..aa65692932d 100644 --- a/app/boards/shields/m60/m60.keymap +++ b/app/boards/shields/m60/m60.keymap @@ -32,7 +32,7 @@ fn_layer { bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bootloader -&trans &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &reset +&trans &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &sys_reset &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &none &none &trans &trans &none &none &none &none &none &none &none &none &none &none &trans &trans &trans &trans &trans &trans &trans &trans &trans diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap index aec58878562..2e8c6f6e714 100644 --- a/app/boards/shields/murphpad/murphpad.keymap +++ b/app/boards/shields/murphpad/murphpad.keymap @@ -31,7 +31,7 @@ combo_reset { timeout-ms = ; key-positions = <1 3>; - bindings = <&reset>; + bindings = <&sys_reset>; }; combo_bootloader { timeout-ms = ; diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap index a832860e70b..e6794e7bcee 100644 --- a/app/boards/shields/qaz/qaz.keymap +++ b/app/boards/shields/qaz/qaz.keymap @@ -42,7 +42,7 @@ &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &trans &trans &trans &trans &trans &trans &trans &kp EQUAL &kp MINUS &kp DEL &none &none &none &none &none &none &none &kp DOT - &bootloader &reset &none &trans &trans &kp RET &trans &kp FSLH + &bootloader &sys_reset &none &trans &trans &kp RET &trans &kp FSLH >; }; diff --git a/app/boards/shields/redox/redox.keymap b/app/boards/shields/redox/redox.keymap index aed22c4276d..a45595ff44d 100644 --- a/app/boards/shields/redox/redox.keymap +++ b/app/boards/shields/redox/redox.keymap @@ -73,7 +73,7 @@ bindings = < &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &none &none &none &none &none &bootloader &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG - &trans &kp K_MUTE &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE &none &reset &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 + &trans &kp K_MUTE &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE &none &sys_reset &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp PSCRN &kp PSCRN &kp CLCK &none &none &trans &trans &trans &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; diff --git a/app/boards/shields/reviung41/reviung41.keymap b/app/boards/shields/reviung41/reviung41.keymap index d291ca8b403..12f15ad4d17 100644 --- a/app/boards/shields/reviung41/reviung41.keymap +++ b/app/boards/shields/reviung41/reviung41.keymap @@ -64,7 +64,7 @@ bindings = < &rgb_ug RGB_BRI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_EFF &none &rgb_ug RGB_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_CLR &rgb_ug RGB_BRD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_EFR &none &none &none &none &none &none &none &none - &none &none &none &none &none &none &reset &none &none &none &none &none + &none &none &none &none &none &none &sys_reset &none &none &none &none &none &trans &trans &tog 3 &trans &trans >; }; diff --git a/app/boards/shields/settings_reset/settings_reset.keymap b/app/boards/shields/settings_reset/settings_reset.keymap index 052364456cb..0afdcc2bf35 100644 --- a/app/boards/shields/settings_reset/settings_reset.keymap +++ b/app/boards/shields/settings_reset/settings_reset.keymap @@ -13,7 +13,7 @@ default_layer { bindings = < - &reset + &sys_reset >; }; }; diff --git a/app/boards/shields/tg4x/tg4x.keymap b/app/boards/shields/tg4x/tg4x.keymap index 84ca3273b19..e68d0f92de9 100644 --- a/app/boards/shields/tg4x/tg4x.keymap +++ b/app/boards/shields/tg4x/tg4x.keymap @@ -45,7 +45,7 @@ bindings = < &kp PRINTSCREEN &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&trans &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &bootloader &reset &trans +&trans &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &bootloader &sys_reset &trans &trans &trans &trans &trans &trans &kp C_VOL_UP &kp C_VOL_DN &kp C_PP >; }; diff --git a/app/boards/shields/tidbit/tidbit.keymap b/app/boards/shields/tidbit/tidbit.keymap index 7fa98af2783..e8cb37890ab 100644 --- a/app/boards/shields/tidbit/tidbit.keymap +++ b/app/boards/shields/tidbit/tidbit.keymap @@ -36,7 +36,7 @@ func_layer { bindings = < - &none &reset &bootloader + &none &sys_reset &bootloader &out OUT_TOG &out OUT_USB &out OUT_BLE &none &bt BT_SEL 0 &bt BT_PRV &bt BT_NXT &bt BT_CLR &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &tog 0 diff --git a/app/boards/shields/tidbit/tidbit_19key.keymap b/app/boards/shields/tidbit/tidbit_19key.keymap index 6e158b038f1..8414a012a30 100644 --- a/app/boards/shields/tidbit/tidbit_19key.keymap +++ b/app/boards/shields/tidbit/tidbit_19key.keymap @@ -37,7 +37,7 @@ func_layer { bindings = < - &tog 0 &reset &bootloader + &tog 0 &sys_reset &bootloader &out OUT_TOG &out OUT_USB &out OUT_BLE &none &bt BT_SEL 0 &bt BT_PRV &bt BT_NXT &bt BT_CLR &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none diff --git a/app/boards/shields/waterfowl/waterfowl.keymap b/app/boards/shields/waterfowl/waterfowl.keymap index 9a1dabacdbc..d208fe497dd 100644 --- a/app/boards/shields/waterfowl/waterfowl.keymap +++ b/app/boards/shields/waterfowl/waterfowl.keymap @@ -99,10 +99,10 @@ * `-----' `--------------------' `--------------------' `-----' */ bindings = < - &trans &trans &bt BT_CLR &trans &reset &reset &kp F7 &kp F8 &kp F9 &kp F11 - &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &kp F4 &kp F5 &kp F6 &kp F12 - &trans &trans &trans &trans &trans &kp F10 &kp F1 &kp F2 &kp F3 &kp F13 - &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + &trans &trans &bt BT_CLR &trans &sys_reset &sys_reset &kp F7 &kp F8 &kp F9 &kp F11 + &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &kp F4 &kp F5 &kp F6 &kp F12 + &trans &trans &trans &trans &trans &kp F10 &kp F1 &kp F2 &kp F3 &kp F13 + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 >; sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; diff --git a/app/boards/shields/zodiark/zodiark.keymap b/app/boards/shields/zodiark/zodiark.keymap index 21fdef10c9b..0211f818aad 100644 --- a/app/boards/shields/zodiark/zodiark.keymap +++ b/app/boards/shields/zodiark/zodiark.keymap @@ -56,7 +56,7 @@ // | | | | | | | | | | | | | | | | | | // | | | | | | | | | | | | | | | | bindings = < -&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &reset +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &sys_reset &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index cb246814bf6..74a7163b986 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -8,9 +8,9 @@ / { behaviors { - reset: behavior_reset { + sys_reset: behavior_reset { compatible = "zmk,behavior-reset"; - label = "RESET"; + label = "SYSRESET"; #binding-cells = <0>; }; diff --git a/docs/blog/2021-01-27-zmk-sotf-4.md b/docs/blog/2021-01-27-zmk-sotf-4.md index cd84da88883..e7ff3232b51 100644 --- a/docs/blog/2021-01-27-zmk-sotf-4.md +++ b/docs/blog/2021-01-27-zmk-sotf-4.md @@ -164,7 +164,7 @@ For anyone looking to contribute, you can find the [ZMK Firmware project](https: Some items listed in the last coming soon section are still under active development. - A power profiler page for the website, to help users estimate their battery life for a given keyboard - [Nicell] -- Behavior "locality", allowing improved split usage for things like `&reset`, and controlling external power and RGB underglow for both sides - [petejohanson] +- Behavior "locality", allowing improved split usage for things like `&sys_reset`, and controlling external power and RGB underglow for both sides - [petejohanson] - More modular approach to external boards/shields, custom code, user keymaps, etc. - More shields and boards diff --git a/docs/docs/behaviors/reset.md b/docs/docs/behaviors/reset.md index c06a13b7a4c..0fc62b2f4e9 100644 --- a/docs/docs/behaviors/reset.md +++ b/docs/docs/behaviors/reset.md @@ -17,13 +17,13 @@ to the device ### Behavior Binding -- Reference: `&reset` +- Reference: `&sys_reset` - Parameters: None Example: ``` -&reset +&sys_reset ``` ## Bootloader Reset @@ -44,7 +44,7 @@ Example: ## Split Keyboards -Both basic and bootloader reset behaviors are source-specific: This means that it affects the side of the keyboard that contains the behavior binding for split keyboards. For example if you press a key with the `&reset` binding on the left half of the keyboard, the left half will be reset. If you want to be able to reset both sides you can put the bindings on both sides of the keyboard and activate it on the side you would like to reset. +Both basic and bootloader reset behaviors are source-specific: This means that it affects the side of the keyboard that contains the behavior binding for split keyboards. For example if you press a key with the `&sys_reset` binding on the left half of the keyboard, the left half will be reset. If you want to be able to reset both sides you can put the bindings on both sides of the keyboard and activate it on the side you would like to reset. :::note Peripheral invocation The peripheral side of the keyboard has to be paired and connected to the central side in order to be able to activate these behaviors, even if it is possible to trigger the behavior using only keys on that side. This is because the key bindings are processed on the central side which would then instruct the peripheral side to reset. diff --git a/docs/src/data/keymap-upgrade.js b/docs/src/data/keymap-upgrade.js index 7936ca16608..8e1538281ff 100644 --- a/docs/src/data/keymap-upgrade.js +++ b/docs/src/data/keymap-upgrade.js @@ -81,4 +81,5 @@ export const Codes = { export const Behaviors = { cp: "kp", inc_dec_cp: "inc_dec_kp", + reset: "sys_reset", }; From 3a958c667fcbdf9940d115bbdf3f7fe61d821402 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 8 Oct 2022 00:46:08 -0400 Subject: [PATCH 0614/1130] refactor: Move to `zephyr/` include paths. * Zephyr moved to properly namespaced headers, so major "rip the bandaid" commit to move us to those everywhere. --- app/boards/arm/mikoto/pinmux.c | 12 +++++----- app/boards/arm/nrfmicro/pinmux.c | 12 +++++----- app/boards/arm/puchi_ble/pinmux.c | 12 +++++----- app/drivers/display/il0323.c | 14 ++++++------ app/drivers/gpio/gpio_595.c | 14 ++++++------ app/drivers/gpio/gpio_mcp23017.c | 8 +++---- app/drivers/gpio/gpio_mcp23017.h | 2 +- app/drivers/kscan/debounce.h | 2 +- app/drivers/kscan/kscan_composite.c | 4 ++-- app/drivers/kscan/kscan_gpio_demux.c | 8 +++---- app/drivers/kscan/kscan_gpio_direct.c | 14 ++++++------ app/drivers/kscan/kscan_gpio_matrix.c | 16 +++++++------- app/drivers/kscan/kscan_mock.c | 6 ++--- app/drivers/sensor/battery/battery_common.c | 2 +- app/drivers/sensor/battery/battery_common.h | 2 +- app/drivers/sensor/battery/battery_nrf_vddh.c | 10 ++++----- .../sensor/battery/battery_voltage_divider.c | 6 ++--- app/drivers/sensor/ec11/ec11.c | 14 ++++++------ app/drivers/sensor/ec11/ec11.h | 6 ++--- app/drivers/sensor/ec11/ec11_trigger.c | 12 +++++----- app/include/drivers/behavior.h | 4 ++-- app/include/drivers/ext_power.h | 2 +- app/include/linker/zmk-events.ld | 2 +- app/include/zmk/behavior_queue.h | 2 +- app/include/zmk/ble/profile.h | 2 +- .../zmk/display/widgets/battery_status.h | 2 +- .../zmk/display/widgets/layer_status.h | 2 +- .../zmk/display/widgets/output_status.h | 2 +- .../zmk/display/widgets/peripheral_status.h | 2 +- app/include/zmk/display/widgets/wpm_status.h | 2 +- app/include/zmk/event_manager.h | 2 +- .../zmk/events/activity_state_changed.h | 2 +- .../zmk/events/battery_state_changed.h | 2 +- .../zmk/events/ble_active_profile_changed.h | 4 ++-- .../zmk/events/endpoint_selection_changed.h | 2 +- .../zmk/events/keycode_state_changed.h | 2 +- app/include/zmk/events/layer_state_changed.h | 2 +- .../zmk/events/modifiers_state_changed.h | 2 +- .../zmk/events/position_state_changed.h | 2 +- app/include/zmk/events/sensor_event.h | 4 ++-- .../events/split_peripheral_status_changed.h | 2 +- .../zmk/events/usb_conn_state_changed.h | 4 ++-- app/include/zmk/events/wpm_state_changed.h | 2 +- app/include/zmk/hid.h | 4 ++-- app/include/zmk/keys.h | 2 +- app/include/zmk/matrix.h | 2 +- app/include/zmk/split/bluetooth/central.h | 2 +- app/include/zmk/split/bluetooth/uuid.h | 2 +- app/include/zmk/usb.h | 4 ++-- app/src/activity.c | 14 ++++++------ app/src/backlight.c | 16 +++++++------- app/src/battery.c | 16 +++++++------- app/src/behavior_queue.c | 4 ++-- app/src/behaviors/behavior_backlight.c | 4 ++-- app/src/behaviors/behavior_bt.c | 10 +++++---- app/src/behaviors/behavior_caps_word.c | 4 ++-- app/src/behaviors/behavior_ext_power.c | 6 ++--- app/src/behaviors/behavior_hold_tap.c | 4 ++-- app/src/behaviors/behavior_key_press.c | 4 ++-- app/src/behaviors/behavior_key_repeat.c | 4 ++-- app/src/behaviors/behavior_key_toggle.c | 4 ++-- app/src/behaviors/behavior_macro.c | 4 ++-- app/src/behaviors/behavior_mod_morph.c | 4 ++-- app/src/behaviors/behavior_momentary_layer.c | 4 ++-- app/src/behaviors/behavior_none.c | 4 ++-- app/src/behaviors/behavior_outputs.c | 6 ++--- app/src/behaviors/behavior_reset.c | 7 +++--- app/src/behaviors/behavior_rgb_underglow.c | 4 ++-- .../behavior_sensor_rotate_key_press.c | 8 +++---- app/src/behaviors/behavior_sticky_key.c | 4 ++-- app/src/behaviors/behavior_tap_dance.c | 4 ++-- app/src/behaviors/behavior_to_layer.c | 4 ++-- app/src/behaviors/behavior_toggle_layer.c | 4 ++-- app/src/behaviors/behavior_transparent.c | 4 ++-- app/src/ble.c | 22 +++++++++---------- app/src/combo.c | 9 ++++---- app/src/conditional_layer.c | 6 ++--- app/src/display/main.c | 10 ++++----- app/src/display/status_screen.c | 2 +- app/src/display/widgets/battery_status.c | 6 ++--- app/src/display/widgets/layer_status.c | 4 ++-- app/src/display/widgets/output_status.c | 5 ++--- app/src/display/widgets/peripheral_status.c | 5 ++--- app/src/display/widgets/wpm_status.c | 2 +- app/src/endpoints.c | 6 ++--- app/src/event_manager.c | 4 ++-- app/src/events/activity_state_changed.c | 2 +- app/src/events/battery_state_changed.c | 2 +- app/src/events/ble_active_profile_changed.c | 2 +- app/src/events/endpoint_selection_changed.c | 2 +- app/src/events/keycode_state_changed.c | 2 +- app/src/events/layer_state_changed.c | 2 +- app/src/events/modifiers_state_changed.c | 2 +- app/src/events/position_state_changed.c | 2 +- app/src/events/sensor_event.c | 2 +- .../events/split_peripheral_status_changed.c | 2 +- app/src/events/usb_conn_state_changed.c | 2 +- app/src/events/wpm_state_changed.c | 2 +- app/src/ext_power_generic.c | 15 +++++++------ app/src/hid.c | 2 +- app/src/hid_listener.c | 2 +- app/src/hog.c | 10 ++++----- app/src/keymap.c | 10 ++++----- app/src/kscan.c | 10 ++++----- app/src/main.c | 10 ++++----- app/src/matrix_transform.c | 4 ++-- app/src/rgb_underglow.c | 12 +++++----- app/src/sensors.c | 8 +++---- app/src/split/bluetooth/central.c | 16 +++++++------- app/src/split/bluetooth/peripheral.c | 22 +++++++++---------- app/src/split/bluetooth/service.c | 10 ++++----- app/src/split/bluetooth/split_listener.c | 4 ++-- app/src/usb.c | 8 +++---- app/src/usb_hid.c | 8 +++---- app/src/wpm.c | 8 +++---- docs/docs/development/new-behavior.md | 4 ++-- 116 files changed, 334 insertions(+), 331 deletions(-) diff --git a/app/boards/arm/mikoto/pinmux.c b/app/boards/arm/mikoto/pinmux.c index 59a38fbf7e9..6d7f46d1e9f 100644 --- a/app/boards/arm/mikoto/pinmux.c +++ b/app/boards/arm/mikoto/pinmux.c @@ -4,12 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include static int pinmux_mikoto_init(const struct device *port) { ARG_UNUSED(port); diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index ef5b5521324..129530d4a5a 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -4,12 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include static int pinmux_nrfmicro_init(const struct device *port) { ARG_UNUSED(port); diff --git a/app/boards/arm/puchi_ble/pinmux.c b/app/boards/arm/puchi_ble/pinmux.c index 78cea3141f8..0817b6e0a74 100644 --- a/app/boards/arm/puchi_ble/pinmux.c +++ b/app/boards/arm/puchi_ble/pinmux.c @@ -4,12 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include static int pinmux_puchi_ble_init(const struct device *port) { ARG_UNUSED(port); diff --git a/app/drivers/display/il0323.c b/app/drivers/display/il0323.c index f6c9037e68d..ec6da15934b 100644 --- a/app/drivers/display/il0323.c +++ b/app/drivers/display/il0323.c @@ -7,16 +7,16 @@ #define DT_DRV_COMPAT gooddisplay_il0323 #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include "il0323_regs.h" -#include +#include LOG_MODULE_REGISTER(il0323, CONFIG_DISPLAY_LOG_LEVEL); /** diff --git a/app/drivers/gpio/gpio_595.c b/app/drivers/gpio/gpio_595.c index 320167027c7..3d3858449c5 100644 --- a/app/drivers/gpio/gpio_595.c +++ b/app/drivers/gpio/gpio_595.c @@ -12,15 +12,15 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #define LOG_LEVEL CONFIG_GPIO_LOG_LEVEL -#include +#include LOG_MODULE_REGISTER(gpio_595); /** Configuration data */ diff --git a/app/drivers/gpio/gpio_mcp23017.c b/app/drivers/gpio/gpio_mcp23017.c index 1df14e6baa5..feafbd0a132 100644 --- a/app/drivers/gpio/gpio_mcp23017.c +++ b/app/drivers/gpio/gpio_mcp23017.c @@ -12,9 +12,9 @@ #include -#include -#include -#include +#include +#include +#include #include #include #include @@ -22,7 +22,7 @@ #include "gpio_mcp23017.h" #define LOG_LEVEL CONFIG_GPIO_LOG_LEVEL -#include +#include LOG_MODULE_REGISTER(gpio_mcp23017); /** diff --git a/app/drivers/gpio/gpio_mcp23017.h b/app/drivers/gpio/gpio_mcp23017.h index 026565cd00f..01908c0c152 100644 --- a/app/drivers/gpio/gpio_mcp23017.h +++ b/app/drivers/gpio/gpio_mcp23017.h @@ -11,7 +11,7 @@ #ifndef ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ #define ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ -#include +#include #include #include diff --git a/app/drivers/kscan/debounce.h b/app/drivers/kscan/debounce.h index 9fa4531bd0d..6e9faa66818 100644 --- a/app/drivers/kscan/debounce.h +++ b/app/drivers/kscan/debounce.h @@ -8,7 +8,7 @@ #include #include -#include +#include #define DEBOUNCE_COUNTER_BITS 14 #define DEBOUNCE_COUNTER_MAX BIT_MASK(DEBOUNCE_COUNTER_BITS) diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index 35584d9c8bb..e0cf47f987d 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_kscan_composite -#include +#include #include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define MATRIX_NODE_ID DT_DRV_INST(0) diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index ff2c6c69630..5fdd3a7ec86 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -6,10 +6,10 @@ #define DT_DRV_COMPAT zmk_kscan_gpio_demux -#include -#include -#include -#include +#include +#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index 1e0576c5f7a..18a9348d8ee 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -6,13 +6,13 @@ #include "debounce.h" -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index de65fd49f79..70502148685 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -6,14 +6,14 @@ #include "debounce.h" -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/drivers/kscan/kscan_mock.c b/app/drivers/kscan/kscan_mock.c index 4ccce69f4e9..57862b0d6f4 100644 --- a/app/drivers/kscan/kscan_mock.c +++ b/app/drivers/kscan/kscan_mock.c @@ -7,9 +7,9 @@ #define DT_DRV_COMPAT zmk_kscan_mock #include -#include -#include -#include +#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/drivers/sensor/battery/battery_common.c b/app/drivers/sensor/battery/battery_common.c index 36e98affd1f..9afe2d5b4ca 100644 --- a/app/drivers/sensor/battery/battery_common.c +++ b/app/drivers/sensor/battery/battery_common.c @@ -5,7 +5,7 @@ */ #include -#include +#include #include "battery_common.h" diff --git a/app/drivers/sensor/battery/battery_common.h b/app/drivers/sensor/battery/battery_common.h index d81c39e24d8..3e16ceed145 100644 --- a/app/drivers/sensor/battery/battery_common.h +++ b/app/drivers/sensor/battery/battery_common.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include struct battery_value { diff --git a/app/drivers/sensor/battery/battery_nrf_vddh.c b/app/drivers/sensor/battery/battery_nrf_vddh.c index 60104a69aed..3f230812f4b 100644 --- a/app/drivers/sensor/battery/battery_nrf_vddh.c +++ b/app/drivers/sensor/battery/battery_nrf_vddh.c @@ -9,11 +9,11 @@ #define DT_DRV_COMPAT zmk_battery_nrf_vddh -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include "battery_common.h" diff --git a/app/drivers/sensor/battery/battery_voltage_divider.c b/app/drivers/sensor/battery/battery_voltage_divider.c index 09e5525ec57..bc35d002344 100644 --- a/app/drivers/sensor/battery/battery_voltage_divider.c +++ b/app/drivers/sensor/battery/battery_voltage_divider.c @@ -6,12 +6,12 @@ #define DT_DRV_COMPAT zmk_battery_voltage_divider -#include -#include +#include +#include #include #include #include -#include +#include #include "battery_common.h" diff --git a/app/drivers/sensor/ec11/ec11.c b/app/drivers/sensor/ec11/ec11.c index 2fe641fa7c3..5f26ebc3aab 100644 --- a/app/drivers/sensor/ec11/ec11.c +++ b/app/drivers/sensor/ec11/ec11.c @@ -6,13 +6,13 @@ #define DT_DRV_COMPAT alps_ec11 -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include "ec11.h" diff --git a/app/drivers/sensor/ec11/ec11.h b/app/drivers/sensor/ec11/ec11.h index 1cb9c5f77ec..04750df54cb 100644 --- a/app/drivers/sensor/ec11/ec11.h +++ b/app/drivers/sensor/ec11/ec11.h @@ -6,9 +6,9 @@ #pragma once -#include -#include -#include +#include +#include +#include struct ec11_config { const char *a_label; diff --git a/app/drivers/sensor/ec11/ec11_trigger.c b/app/drivers/sensor/ec11/ec11_trigger.c index 555e1f4a3ed..804a21d9123 100644 --- a/app/drivers/sensor/ec11/ec11_trigger.c +++ b/app/drivers/sensor/ec11/ec11_trigger.c @@ -6,17 +6,17 @@ #define DT_DRV_COMPAT alps_ec11 -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include "ec11.h" extern struct ec11_data ec11_driver; -#include +#include LOG_MODULE_DECLARE(EC11, CONFIG_SENSOR_LOG_LEVEL); static inline void setup_int(const struct device *dev, bool enable) { diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index fcb24f6fbbd..71df73440e7 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -8,9 +8,9 @@ #include #include -#include +#include #include -#include +#include #include #include diff --git a/app/include/drivers/ext_power.h b/app/include/drivers/ext_power.h index b422750c60e..287679e1691 100644 --- a/app/include/drivers/ext_power.h +++ b/app/include/drivers/ext_power.h @@ -8,7 +8,7 @@ #include #include -#include +#include #ifdef __cplusplus extern "C" { diff --git a/app/include/linker/zmk-events.ld b/app/include/linker/zmk-events.ld index 78d00bb7dec..66c1264a160 100644 --- a/app/include/linker/zmk-events.ld +++ b/app/include/linker/zmk-events.ld @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include __event_type_start = .; \ KEEP(*(".event_type")); \ diff --git a/app/include/zmk/behavior_queue.h b/app/include/zmk/behavior_queue.h index 8a184e4aa68..307482e7cd4 100644 --- a/app/include/zmk/behavior_queue.h +++ b/app/include/zmk/behavior_queue.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include diff --git a/app/include/zmk/ble/profile.h b/app/include/zmk/ble/profile.h index 1df2743641b..0a57f16fa4b 100644 --- a/app/include/zmk/ble/profile.h +++ b/app/include/zmk/ble/profile.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #define ZMK_BLE_PROFILE_NAME_MAX 15 diff --git a/app/include/zmk/display/widgets/battery_status.h b/app/include/zmk/display/widgets/battery_status.h index b87e87ee6d4..ce22da4d71b 100644 --- a/app/include/zmk/display/widgets/battery_status.h +++ b/app/include/zmk/display/widgets/battery_status.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include struct zmk_widget_battery_status { sys_snode_t node; diff --git a/app/include/zmk/display/widgets/layer_status.h b/app/include/zmk/display/widgets/layer_status.h index 3779351a87e..a11c4039866 100644 --- a/app/include/zmk/display/widgets/layer_status.h +++ b/app/include/zmk/display/widgets/layer_status.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include struct zmk_widget_layer_status { sys_snode_t node; diff --git a/app/include/zmk/display/widgets/output_status.h b/app/include/zmk/display/widgets/output_status.h index 66f09271437..ed8ee813c58 100644 --- a/app/include/zmk/display/widgets/output_status.h +++ b/app/include/zmk/display/widgets/output_status.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include struct zmk_widget_output_status { sys_snode_t node; diff --git a/app/include/zmk/display/widgets/peripheral_status.h b/app/include/zmk/display/widgets/peripheral_status.h index e3b41355eb8..07caeaa76d5 100644 --- a/app/include/zmk/display/widgets/peripheral_status.h +++ b/app/include/zmk/display/widgets/peripheral_status.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include struct zmk_widget_peripheral_status { sys_snode_t node; diff --git a/app/include/zmk/display/widgets/wpm_status.h b/app/include/zmk/display/widgets/wpm_status.h index 0592299e2a9..fbe96cc237a 100644 --- a/app/include/zmk/display/widgets/wpm_status.h +++ b/app/include/zmk/display/widgets/wpm_status.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include struct zmk_widget_wpm_status { sys_snode_t node; diff --git a/app/include/zmk/event_manager.h b/app/include/zmk/event_manager.h index 5acb26eb08b..aa9942ea366 100644 --- a/app/include/zmk/event_manager.h +++ b/app/include/zmk/event_manager.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include #include struct zmk_event_type { diff --git a/app/include/zmk/events/activity_state_changed.h b/app/include/zmk/events/activity_state_changed.h index 998fa2d4741..6a3481f3e0e 100644 --- a/app/include/zmk/events/activity_state_changed.h +++ b/app/include/zmk/events/activity_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include diff --git a/app/include/zmk/events/battery_state_changed.h b/app/include/zmk/events/battery_state_changed.h index 6a003d8dd7d..5a8c625e079 100644 --- a/app/include/zmk/events/battery_state_changed.h +++ b/app/include/zmk/events/battery_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include struct zmk_battery_state_changed { diff --git a/app/include/zmk/events/ble_active_profile_changed.h b/app/include/zmk/events/ble_active_profile_changed.h index 4d3bb7ae8f1..620e19b4b88 100644 --- a/app/include/zmk/events/ble_active_profile_changed.h +++ b/app/include/zmk/events/ble_active_profile_changed.h @@ -6,9 +6,9 @@ #pragma once -#include +#include #include -#include +#include #include diff --git a/app/include/zmk/events/endpoint_selection_changed.h b/app/include/zmk/events/endpoint_selection_changed.h index 38a6a8e526e..198fe5a1688 100644 --- a/app/include/zmk/events/endpoint_selection_changed.h +++ b/app/include/zmk/events/endpoint_selection_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include diff --git a/app/include/zmk/events/keycode_state_changed.h b/app/include/zmk/events/keycode_state_changed.h index 233ec62fc95..c3a3ed30d03 100644 --- a/app/include/zmk/events/keycode_state_changed.h +++ b/app/include/zmk/events/keycode_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include diff --git a/app/include/zmk/events/layer_state_changed.h b/app/include/zmk/events/layer_state_changed.h index 33183546efc..405d1365b7a 100644 --- a/app/include/zmk/events/layer_state_changed.h +++ b/app/include/zmk/events/layer_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include struct zmk_layer_state_changed { diff --git a/app/include/zmk/events/modifiers_state_changed.h b/app/include/zmk/events/modifiers_state_changed.h index 504c2c9c858..3f772cdb1d9 100644 --- a/app/include/zmk/events/modifiers_state_changed.h +++ b/app/include/zmk/events/modifiers_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include diff --git a/app/include/zmk/events/position_state_changed.h b/app/include/zmk/events/position_state_changed.h index 5323e943ac0..3e4e9238cfe 100644 --- a/app/include/zmk/events/position_state_changed.h +++ b/app/include/zmk/events/position_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #define ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL UINT8_MAX diff --git a/app/include/zmk/events/sensor_event.h b/app/include/zmk/events/sensor_event.h index f579bc398c0..9398bcbb713 100644 --- a/app/include/zmk/events/sensor_event.h +++ b/app/include/zmk/events/sensor_event.h @@ -6,9 +6,9 @@ #pragma once -#include +#include #include -#include +#include struct zmk_sensor_event { uint8_t sensor_number; const struct device *sensor; diff --git a/app/include/zmk/events/split_peripheral_status_changed.h b/app/include/zmk/events/split_peripheral_status_changed.h index c75a879f702..6ea59f60649 100644 --- a/app/include/zmk/events/split_peripheral_status_changed.h +++ b/app/include/zmk/events/split_peripheral_status_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include struct zmk_split_peripheral_status_changed { diff --git a/app/include/zmk/events/usb_conn_state_changed.h b/app/include/zmk/events/usb_conn_state_changed.h index b40158c3af3..5f4ac5d235b 100644 --- a/app/include/zmk/events/usb_conn_state_changed.h +++ b/app/include/zmk/events/usb_conn_state_changed.h @@ -6,8 +6,8 @@ #pragma once -#include -#include +#include +#include #include #include diff --git a/app/include/zmk/events/wpm_state_changed.h b/app/include/zmk/events/wpm_state_changed.h index 3d1a3695512..76253e208d6 100644 --- a/app/include/zmk/events/wpm_state_changed.h +++ b/app/include/zmk/events/wpm_state_changed.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 01104d1cd7d..ab42adaa13e 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -6,8 +6,8 @@ #pragma once -#include -#include +#include +#include #include #include diff --git a/app/include/zmk/keys.h b/app/include/zmk/keys.h index 38777ec849c..fa6e7cfe693 100644 --- a/app/include/zmk/keys.h +++ b/app/include/zmk/keys.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include typedef uint32_t zmk_key_t; diff --git a/app/include/zmk/matrix.h b/app/include/zmk/matrix.h index b3e2323b9a9..5f8cd7d7697 100644 --- a/app/include/zmk/matrix.h +++ b/app/include/zmk/matrix.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #define ZMK_MATRIX_NODE_ID DT_CHOSEN(zmk_kscan) diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index 072408605cf..443d9b1b489 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -1,7 +1,7 @@ #pragma once -#include +#include #include int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *binding, diff --git a/app/include/zmk/split/bluetooth/uuid.h b/app/include/zmk/split/bluetooth/uuid.h index 735f5751d0a..cbdb17723cd 100644 --- a/app/include/zmk/split/bluetooth/uuid.h +++ b/app/include/zmk/split/bluetooth/uuid.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #ifndef BT_UUID_NUM_OF_DIGITALS #define BT_UUID_NUM_OF_DIGITALS BT_UUID_DECLARE_16(0x2909) diff --git a/app/include/zmk/usb.h b/app/include/zmk/usb.h index 786d9c731a6..9e92a83664c 100644 --- a/app/include/zmk/usb.h +++ b/app/include/zmk/usb.h @@ -6,8 +6,8 @@ #pragma once -#include -#include +#include +#include #include #include diff --git a/app/src/activity.c b/app/src/activity.c index 029908c0141..41fe2e15dc4 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -4,12 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include +#include +#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -74,8 +74,8 @@ void activity_work_handler(struct k_work *work) { } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ if (inactive_time > MAX_IDLE_MS) { - set_state(ZMK_ACTIVITY_IDLE); - } + set_state(ZMK_ACTIVITY_IDLE); + } } K_WORK_DEFINE(activity_work, activity_work_handler); diff --git a/app/src/backlight.c b/app/src/backlight.c index 159c6fb25f1..f633ddb728b 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -4,14 +4,14 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include - -#include -#include -#include +#include +#include +#include +#include +#include + +#include +#include #include #include diff --git a/app/src/battery.c b/app/src/battery.c index 3f66224126e..540f7c3eab0 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -4,14 +4,14 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include -#include -#include - -#include +#include +#include +#include +#include +#include +#include + +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/behavior_queue.c b/app/src/behavior_queue.c index 617d5aad8ec..529e578234f 100644 --- a/app/src/behavior_queue.c +++ b/app/src/behavior_queue.c @@ -6,8 +6,8 @@ #include -#include -#include +#include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index a1eaaf86195..fe2155b7fd0 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_backlight -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 79b805b6bc0..71cf23225f3 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -6,14 +6,16 @@ #define DT_DRV_COMPAT zmk_behavior_bluetooth -#include +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + #include #include -#include -#include #include -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 7a9612b302d..8ee5bb5c30b 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_caps_word -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index 5db8aac2b26..690ac97175e 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -6,14 +6,14 @@ #define DT_DRV_COMPAT zmk_behavior_ext_power -#include -#include +#include +#include #include #include #include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index a9e4d642e0e..6ea2fe97c7b 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -6,11 +6,11 @@ #define DT_DRV_COMPAT zmk_behavior_hold_tap -#include +#include #include #include #include -#include +#include #include #include #include diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 215da41d69a..2765db9f3ca 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_key_press -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index ad29cb0a79c..033f498b875 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_key_repeat -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index cd2a5dcd7f3..cbbdd0d91ac 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_key_toggle -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index 5b215b93a84..c86d732aab6 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_macro -#include +#include #include -#include +#include #include #include #include diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index effbe4ac887..e5ba346e536 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_mod_morph -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index 46e49fcc57a..c2bd0ffcb98 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_momentary_layer -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 1e7eb2b08c1..613ecbad7e6 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_none -#include +#include #include -#include +#include #include diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index 366abd8fab3..7aab8ee32c0 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -6,8 +6,8 @@ #define DT_DRV_COMPAT zmk_behavior_outputs -#include -#include +#include +#include #include #include @@ -15,7 +15,7 @@ #include #include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index 47b11fa4425..0b983c84709 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -6,10 +6,11 @@ #define DT_DRV_COMPAT zmk_behavior_reset -#include -#include +#include +#include +#include + #include -#include #include diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 3459cd22a56..0af07f8146d 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_rgb_underglow -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_sensor_rotate_key_press.c b/app/src/behaviors/behavior_sensor_rotate_key_press.c index c4a34a94088..ed6eedae9d7 100644 --- a/app/src/behaviors/behavior_sensor_rotate_key_press.c +++ b/app/src/behaviors/behavior_sensor_rotate_key_press.c @@ -6,11 +6,11 @@ #define DT_DRV_COMPAT zmk_behavior_sensor_rotate_key_press -#include -#include -#include +#include +#include +#include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 267b81ab872..2293608694c 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_sticky_key -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 6d78cb3e58f..ddb4aeabfe7 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_tap_dance -#include +#include #include -#include +#include #include #include #include diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index cce39d5ddfa..c05b83eab94 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_to_layer -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index a682c6fe2aa..73a700eda5f 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_toggle_layer -#include +#include #include -#include +#include #include #include diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index 2ba057473ef..eeb2242db6b 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -6,9 +6,9 @@ #define DT_DRV_COMPAT zmk_behavior_transparent -#include +#include #include -#include +#include #include diff --git a/app/src/ble.c b/app/src/ble.c index 4d2e4603dfb..aee90d5d8a5 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -4,29 +4,29 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #if IS_ENABLED(CONFIG_SETTINGS) -#include +#include #endif -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/combo.c b/app/src/combo.c index e434ae170bc..2e2373302d3 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -6,11 +6,12 @@ #define DT_DRV_COMPAT zmk_combos -#include +#include +#include +#include +#include + #include -#include -#include -#include #include #include diff --git a/app/src/conditional_layer.c b/app/src/conditional_layer.c index 572652ff8f2..9ba02a5ce4c 100644 --- a/app/src/conditional_layer.c +++ b/app/src/conditional_layer.c @@ -7,10 +7,10 @@ #define DT_DRV_COMPAT zmk_conditional_layers #include -#include +#include -#include -#include +#include +#include #include #include diff --git a/app/src/display/main.c b/app/src/display/main.c index 3fb4e8f63a9..52fa3c691ee 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -4,12 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include +#include +#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/display/status_screen.c b/app/src/display/status_screen.c index 6b58c30122f..7c3870a8de5 100644 --- a/app/src/display/status_screen.c +++ b/app/src/display/status_screen.c @@ -11,7 +11,7 @@ #include #include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if IS_ENABLED(CONFIG_ZMK_WIDGET_BATTERY_STATUS) diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 3480101d8ac..e35f890ac6c 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -4,10 +4,10 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/display/widgets/layer_status.c b/app/src/display/widgets/layer_status.c index 8dc0061c6a9..c3ddd07cf4d 100644 --- a/app/src/display/widgets/layer_status.c +++ b/app/src/display/widgets/layer_status.c @@ -4,8 +4,8 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 135770a6446..1c6da4b9034 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -4,10 +4,9 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/display/widgets/peripheral_status.c b/app/src/display/widgets/peripheral_status.c index d0c33f2071f..fdfe4d9cb5a 100644 --- a/app/src/display/widgets/peripheral_status.c +++ b/app/src/display/widgets/peripheral_status.c @@ -4,10 +4,9 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/display/widgets/wpm_status.c b/app/src/display/widgets/wpm_status.c index f3d06d65a39..9ae8b540e9f 100644 --- a/app/src/display/widgets/wpm_status.c +++ b/app/src/display/widgets/wpm_status.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 33760010608..9c824f44d71 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -4,8 +4,8 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include #include #include @@ -18,7 +18,7 @@ #include #include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define DEFAULT_ENDPOINT \ diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 471432a8b01..0f4a5547cc2 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -4,8 +4,8 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/events/activity_state_changed.c b/app/src/events/activity_state_changed.c index 2c27ce74108..95be678e464 100644 --- a/app/src/events/activity_state_changed.c +++ b/app/src/events/activity_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_activity_state_changed); \ No newline at end of file diff --git a/app/src/events/battery_state_changed.c b/app/src/events/battery_state_changed.c index 435fb24de75..508ee971d69 100644 --- a/app/src/events/battery_state_changed.c +++ b/app/src/events/battery_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_battery_state_changed); \ No newline at end of file diff --git a/app/src/events/ble_active_profile_changed.c b/app/src/events/ble_active_profile_changed.c index c4887f73ddd..dccbc7e097e 100644 --- a/app/src/events/ble_active_profile_changed.c +++ b/app/src/events/ble_active_profile_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_ble_active_profile_changed); \ No newline at end of file diff --git a/app/src/events/endpoint_selection_changed.c b/app/src/events/endpoint_selection_changed.c index 7f9014da9a0..34bc39dd2ab 100644 --- a/app/src/events/endpoint_selection_changed.c +++ b/app/src/events/endpoint_selection_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_endpoint_selection_changed); diff --git a/app/src/events/keycode_state_changed.c b/app/src/events/keycode_state_changed.c index c9ef6aa7e64..a134f34186d 100644 --- a/app/src/events/keycode_state_changed.c +++ b/app/src/events/keycode_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_keycode_state_changed); diff --git a/app/src/events/layer_state_changed.c b/app/src/events/layer_state_changed.c index bd6234c92a4..79326ccc6d4 100644 --- a/app/src/events/layer_state_changed.c +++ b/app/src/events/layer_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_layer_state_changed); \ No newline at end of file diff --git a/app/src/events/modifiers_state_changed.c b/app/src/events/modifiers_state_changed.c index 3dfea25fbf2..f44d90dda9c 100644 --- a/app/src/events/modifiers_state_changed.c +++ b/app/src/events/modifiers_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_modifiers_state_changed); \ No newline at end of file diff --git a/app/src/events/position_state_changed.c b/app/src/events/position_state_changed.c index bb40584e53e..7b9be89f2d5 100644 --- a/app/src/events/position_state_changed.c +++ b/app/src/events/position_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_position_state_changed); \ No newline at end of file diff --git a/app/src/events/sensor_event.c b/app/src/events/sensor_event.c index 94ade947243..bec1e6e7ebd 100644 --- a/app/src/events/sensor_event.c +++ b/app/src/events/sensor_event.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_sensor_event); \ No newline at end of file diff --git a/app/src/events/split_peripheral_status_changed.c b/app/src/events/split_peripheral_status_changed.c index 1d70b2ffa34..3f4c967d068 100644 --- a/app/src/events/split_peripheral_status_changed.c +++ b/app/src/events/split_peripheral_status_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_split_peripheral_status_changed); \ No newline at end of file diff --git a/app/src/events/usb_conn_state_changed.c b/app/src/events/usb_conn_state_changed.c index b3555569f0d..ae1f05037ac 100644 --- a/app/src/events/usb_conn_state_changed.c +++ b/app/src/events/usb_conn_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_usb_conn_state_changed); \ No newline at end of file diff --git a/app/src/events/wpm_state_changed.c b/app/src/events/wpm_state_changed.c index 3d9830bf797..f16f54d292e 100644 --- a/app/src/events/wpm_state_changed.c +++ b/app/src/events/wpm_state_changed.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include ZMK_EVENT_IMPL(zmk_wpm_state_changed); \ No newline at end of file diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index aab09cecbbc..654f683fa68 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -7,17 +7,18 @@ #define DT_DRV_COMPAT zmk_ext_power_generic #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include + #include #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct ext_power_generic_config { diff --git a/app/src/hid.c b/app/src/hid.c index b66a910d3d2..2a6b5d39da2 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -5,7 +5,7 @@ */ #include "zmk/keys.h" -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c index e233b0b8ed6..3a11101d54f 100644 --- a/app/src/hid_listener.c +++ b/app/src/hid_listener.c @@ -5,7 +5,7 @@ */ #include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/hog.c b/app/src/hog.c index 3dd3e874a56..930714b092a 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -4,15 +4,15 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#include -#include +#include +#include #include #include diff --git a/app/src/keymap.c b/app/src/keymap.c index b00d0fbafbf..0f06a39a339 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -4,9 +4,9 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include +#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include @@ -37,7 +37,7 @@ static uint8_t _zmk_keymap_layer_default = 0; #define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) #define TRANSFORMED_LAYER(node) \ - {LISTIFY(DT_PROP_LEN(node, bindings), BINDING_WITH_COMMA, (,), node)}, + {LISTIFY(DT_PROP_LEN(node, bindings), BINDING_WITH_COMMA, (, ), node)}, #if ZMK_KEYMAP_HAS_SENSORS #define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ @@ -52,7 +52,7 @@ static uint8_t _zmk_keymap_layer_default = 0; #define SENSOR_LAYER(node) \ COND_CODE_1( \ DT_NODE_HAS_PROP(node, sensor_bindings), \ - ({LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, (,), node)}), \ + ({LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, (, ), node)}), \ ({})), #endif /* ZMK_KEYMAP_HAS_SENSORS */ diff --git a/app/src/kscan.c b/app/src/kscan.c index c7cf2881025..f9db8b1ced6 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -4,11 +4,11 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/main.c b/app/src/main.c index ae604a7b9ee..8ea67057771 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -4,12 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include +#include +#include +#include +#include -#include +#include LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); #include diff --git a/app/src/matrix_transform.c b/app/src/matrix_transform.c index e7c6e95f2a9..47256608fd7 100644 --- a/app/src/matrix_transform.c +++ b/app/src/matrix_transform.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#include +#include #include #include #include @@ -15,7 +15,7 @@ [(KT_ROW(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i)) * ZMK_MATRIX_COLS) + \ KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i -static uint32_t transform[] = {LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, (,), 0)}; +static uint32_t transform[] = {LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, (, ), 0)}; #endif diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 18614a4e190..47c3658e915 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -4,17 +4,17 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include -#include +#include +#include +#include +#include #include #include -#include +#include -#include +#include #include #include diff --git a/app/src/sensors.c b/app/src/sensors.c index 184061ac381..9873de4f1cd 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -4,11 +4,11 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include +#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index e94a59aece8..82cf7e015d0 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -5,15 +5,16 @@ */ #include +#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -24,7 +25,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include -#include static int start_scan(void); diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index aa690ab25ba..07d3ee3f927 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -4,29 +4,29 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #if IS_ENABLED(CONFIG_SETTINGS) -#include +#include #endif -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index 5da5401d682..cc20c72fd63 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -5,15 +5,15 @@ */ #include -#include -#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#include -#include +#include +#include #include #include diff --git a/app/src/split/bluetooth/split_listener.c b/app/src/split/bluetooth/split_listener.c index 3f3763ae04a..eb5398c42d6 100644 --- a/app/src/split/bluetooth/split_listener.c +++ b/app/src/split/bluetooth/split_listener.c @@ -4,8 +4,8 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include #include diff --git a/app/src/usb.c b/app/src/usb.c index 146e7bb7ed9..cf04ef46c8f 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -4,11 +4,11 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include -#include -#include +#include +#include #include #include diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index 4b90cf96123..f46c70a0a92 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -4,11 +4,11 @@ * SPDX-License-Identifier: MIT */ -#include -#include +#include +#include -#include -#include +#include +#include #include #include diff --git a/app/src/wpm.c b/app/src/wpm.c index bcabf377ca7..00a5942ecb8 100644 --- a/app/src/wpm.c +++ b/app/src/wpm.c @@ -4,11 +4,11 @@ * SPDX-License-Identifier: MIT */ -#include -#include -#include +#include +#include +#include -#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index af98613e54f..e65bb296c9c 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -137,9 +137,9 @@ The code snippet below shows the essential components of a new driver. #define DT_DRV_COMPAT zmk_ // Dependencies -#include +#include #include -#include +#include #include From e84b4299b5ee15a922397c3485de83468b7036fd Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 8 Oct 2022 00:47:36 -0400 Subject: [PATCH 0615/1130] refactor: Remove deprecated Kconfig override. --- app/Kconfig | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 358d5d144f0..cf2cc6b3c4f 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -429,9 +429,6 @@ config USB_CDC_ACM_RINGBUF_SIZE config LOG_BUFFER_SIZE default 8192 -config LOG_STRDUP_BUF_COUNT - default 16 - config LOG_PROCESS_THREAD_STARTUP_DELAY_MS default 1000 From 062f94d0144530fa699e5158b87293e7ebb526fc Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 17 Jan 2023 20:36:34 -0500 Subject: [PATCH 0616/1130] refactor: Remove v1 logging vestiges. --- app/drivers/kscan/kscan_composite.c | 4 ++-- app/drivers/kscan/kscan_gpio_demux.c | 4 ++-- app/drivers/kscan/kscan_gpio_direct.c | 2 +- app/drivers/kscan/kscan_gpio_matrix.c | 4 ++-- app/src/behavior_queue.c | 2 +- app/src/ble.c | 30 +++++++++++++-------------- app/src/endpoints.c | 2 +- app/src/keymap.c | 5 ++--- app/src/split/bluetooth/central.c | 14 ++++++------- app/src/split/bluetooth/peripheral.c | 8 +++---- app/src/split/bluetooth/service.c | 4 ++-- 11 files changed, 39 insertions(+), 40 deletions(-) diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index e0cf47f987d..b452a9d2c66 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -43,7 +43,7 @@ static int kscan_composite_enable_callback(const struct device *dev) { const struct device *dev = device_get_binding(cfg->label); if (!dev) { - LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label)); + LOG_WRN("Failed to load child kscan device %s", cfg->label); continue; } kscan_enable_callback(dev); @@ -57,7 +57,7 @@ static int kscan_composite_disable_callback(const struct device *dev) { const struct device *dev = device_get_binding(cfg->label); if (!dev) { - LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label)); + LOG_WRN("Failed to load child kscan device %s", cfg->label); continue; } kscan_disable_callback(dev); diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 5fdd3a7ec86..3ca300a382b 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -240,8 +240,8 @@ struct kscan_gpio_item_config { }; \ \ static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ - .rows = {LISTIFY(INST_MATRIX_INPUTS(n), _KSCAN_GPIO_INPUT_CFG_INIT, (,), n)}, \ - .cols = {LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, (,), n)}, \ + .rows = {LISTIFY(INST_MATRIX_INPUTS(n), _KSCAN_GPIO_INPUT_CFG_INIT, (, ), n)}, \ + .cols = {LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, (, ), n)}, \ }; \ \ DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, NULL, &kscan_gpio_data_##n, \ diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index 18a9348d8ee..586e0d95c79 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -327,7 +327,7 @@ static const struct kscan_driver_api kscan_direct_api = { "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ static const struct gpio_dt_spec kscan_direct_inputs_##n[] = { \ - LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (,), n)}; \ + LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (, ), n)}; \ \ static struct debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ \ diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index 70502148685..d2121273724 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -433,10 +433,10 @@ static const struct kscan_driver_api kscan_matrix_api = { "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ static const struct gpio_dt_spec kscan_matrix_rows_##n[] = { \ - LISTIFY(INST_ROWS_LEN(n), KSCAN_GPIO_ROW_CFG_INIT, (,), n)}; \ + LISTIFY(INST_ROWS_LEN(n), KSCAN_GPIO_ROW_CFG_INIT, (, ), n)}; \ \ static const struct gpio_dt_spec kscan_matrix_cols_##n[] = { \ - LISTIFY(INST_COLS_LEN(n), KSCAN_GPIO_COL_CFG_INIT, (,), n)}; \ + LISTIFY(INST_COLS_LEN(n), KSCAN_GPIO_COL_CFG_INIT, (, ), n)}; \ \ static struct debounce_state kscan_matrix_state_##n[INST_MATRIX_LEN(n)]; \ \ diff --git a/app/src/behavior_queue.c b/app/src/behavior_queue.c index 529e578234f..971816f2cd3 100644 --- a/app/src/behavior_queue.c +++ b/app/src/behavior_queue.c @@ -28,7 +28,7 @@ static void behavior_queue_process_next(struct k_work *work) { struct q_item item = {.wait = 0}; while (k_msgq_get(&zmk_behavior_queue_msgq, &item, K_NO_WAIT) == 0) { - LOG_DBG("Invoking %s: 0x%02x 0x%02x", log_strdup(item.binding.behavior_dev), + LOG_DBG("Invoking %s: 0x%02x 0x%02x", item.binding.behavior_dev, item.binding.param1, item.binding.param2); struct zmk_behavior_binding_event event = {.position = item.position, diff --git a/app/src/ble.c b/app/src/ble.c index aee90d5d8a5..a7037d0cfd8 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -111,7 +111,7 @@ void set_profile_address(uint8_t index, const bt_addr_le_t *addr) { memcpy(&profiles[index].peer, addr, sizeof(bt_addr_le_t)); sprintf(setting_name, "ble/profiles/%d", index); - LOG_DBG("Setting profile addr for %s to %s", log_strdup(setting_name), log_strdup(addr_str)); + LOG_DBG("Setting profile addr for %s to %s", setting_name, addr_str); settings_save_one(setting_name, &profiles[index], sizeof(struct zmk_ble_profile)); k_work_submit(&raise_profile_changed_event_work); } @@ -177,7 +177,7 @@ int update_advertising() { // addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(zmk_ble_active_profile_addr(), addr_str, // sizeof(addr_str)); - // LOG_DBG("Directed advertising to %s", log_strdup(addr_str)); + // LOG_DBG("Directed advertising to %s", addr_str); // desired_adv = ZMK_ADV_DIR; } LOG_DBG("advertising from %d to %d", advertising_status, desired_adv); @@ -293,13 +293,13 @@ static int ble_profiles_handle_set(const char *name, size_t len, settings_read_c void *cb_arg) { const char *next; - LOG_DBG("Setting BLE value %s", log_strdup(name)); + LOG_DBG("Setting BLE value %s", name); if (settings_name_steq(name, "profiles", &next) && next) { char *endptr; uint8_t idx = strtoul(next, &endptr, 10); if (*endptr != '\0') { - LOG_WRN("Invalid profile index: %s", log_strdup(next)); + LOG_WRN("Invalid profile index: %s", next); return -EINVAL; } @@ -324,7 +324,7 @@ static int ble_profiles_handle_set(const char *name, size_t len, settings_read_c char addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(&profiles[idx].peer, addr_str, sizeof(addr_str)); - LOG_DBG("Loaded %s address for profile %d", log_strdup(addr_str), idx); + LOG_DBG("Loaded %s address for profile %d", addr_str, idx); } else if (settings_name_steq(name, "active_profile", &next) && !next) { if (len != sizeof(active_profile)) { return -EINVAL; @@ -376,12 +376,12 @@ static void connected(struct bt_conn *conn, uint8_t err) { advertising_status = ZMK_ADV_NONE; if (err) { - LOG_WRN("Failed to connect to %s (%u)", log_strdup(addr), err); + LOG_WRN("Failed to connect to %s (%u)", addr, err); update_advertising(); return; } - LOG_DBG("Connected %s", log_strdup(addr)); + LOG_DBG("Connected %s", addr); if (bt_conn_set_security(conn, BT_SECURITY_L2)) { LOG_ERR("Failed to set security"); @@ -401,7 +401,7 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("Disconnected from %s (reason 0x%02x)", log_strdup(addr), reason); + LOG_DBG("Disconnected from %s (reason 0x%02x)", addr, reason); bt_conn_get_info(conn, &info); @@ -426,9 +426,9 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_ bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); if (!err) { - LOG_DBG("Security changed: %s level %u", log_strdup(addr), level); + LOG_DBG("Security changed: %s level %u", addr, level); } else { - LOG_ERR("Security failed: %s level %u err %d", log_strdup(addr), level, err); + LOG_ERR("Security failed: %s level %u err %d", addr, level, err); } } @@ -438,7 +438,7 @@ static void le_param_updated(struct bt_conn *conn, uint16_t interval, uint16_t l bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("%s: interval %d latency %d timeout %d", log_strdup(addr), interval, latency, timeout); + LOG_DBG("%s: interval %d latency %d timeout %d", addr, interval, latency, timeout); } static struct bt_conn_cb conn_callbacks = { @@ -454,7 +454,7 @@ static void auth_passkey_display(struct bt_conn *conn, unsigned int passkey) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("Passkey for %s: %06u", log_strdup(addr), passkey); + LOG_DBG("Passkey for %s: %06u", addr, passkey); } */ @@ -465,7 +465,7 @@ static void auth_passkey_entry(struct bt_conn *conn) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("Passkey entry requested for %s", log_strdup(addr)); + LOG_DBG("Passkey entry requested for %s", addr); passkey_digit = 0; auth_passkey_entry_conn = bt_conn_ref(conn); } @@ -486,7 +486,7 @@ static void auth_cancel(struct bt_conn *conn) { passkey_digit = 0; #endif - LOG_DBG("Pairing cancelled: %s", log_strdup(addr)); + LOG_DBG("Pairing cancelled: %s", addr); } static enum bt_security_err auth_pairing_accept(struct bt_conn *conn, @@ -517,7 +517,7 @@ static void auth_pairing_complete(struct bt_conn *conn, bool bonded) { } if (!zmk_ble_active_profile_is_open()) { - LOG_ERR("Pairing completed but current profile is not open: %s", log_strdup(addr)); + LOG_ERR("Pairing completed but current profile is not open: %s", addr); bt_unpair(BT_ID_DEFAULT, dst); return; } diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 9c824f44d71..dbd1a3e6c0e 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -148,7 +148,7 @@ int zmk_endpoints_send_report(uint16_t usage_page) { static int endpoints_handle_set(const char *name, size_t len, settings_read_cb read_cb, void *cb_arg) { - LOG_DBG("Setting endpoint value %s", log_strdup(name)); + LOG_DBG("Setting endpoint value %s", name); if (settings_name_steq(name, "preferred", NULL)) { if (len != sizeof(enum zmk_endpoint)) { diff --git a/app/src/keymap.c b/app/src/keymap.c index 0f06a39a339..99483592278 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -179,8 +179,7 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position .timestamp = timestamp, }; - LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, - log_strdup(binding.behavior_dev)); + LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, binding.behavior_dev); behavior = device_get_binding(binding.behavior_dev); @@ -260,7 +259,7 @@ int zmk_keymap_sensor_triggered(uint8_t sensor_number, const struct device *sens int ret; LOG_DBG("layer: %d sensor_number: %d, binding name: %s", layer, sensor_number, - log_strdup(binding->behavior_dev)); + binding->behavior_dev); behavior = device_get_binding(binding->behavior_dev); diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 82cf7e015d0..5b952dfcd38 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -377,8 +377,8 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) { bt_uuid_to_str(&uuid.uuid, uuid_str, sizeof(uuid_str)); bt_uuid_to_str(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID), service_uuid_str, sizeof(service_uuid_str)); - LOG_DBG("UUID %s does not match split UUID: %s", log_strdup(uuid_str), - log_strdup(service_uuid_str)); + LOG_DBG("UUID %s does not match split UUID: %s", uuid_str, + service_uuid_str); continue; } @@ -433,7 +433,7 @@ static void split_central_device_found(const bt_addr_le_t *addr, int8_t rssi, ui char dev[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(addr, dev, sizeof(dev)); - LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", log_strdup(dev), type, ad->len, + LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", dev, type, ad->len, rssi); /* We're only interested in connectable events */ @@ -469,7 +469,7 @@ static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { } if (conn_err) { - LOG_ERR("Failed to connect to %s (%u)", log_strdup(addr), conn_err); + LOG_ERR("Failed to connect to %s (%u)", addr, conn_err); release_peripheral_slot_for_conn(conn); @@ -477,7 +477,7 @@ static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { return; } - LOG_DBG("Connected: %s", log_strdup(addr)); + LOG_DBG("Connected: %s", addr); confirm_peripheral_slot_conn(conn); split_central_process_connection(conn); @@ -489,7 +489,7 @@ static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("Disconnected: %s (reason %d)", log_strdup(addr), reason); + LOG_DBG("Disconnected: %s (reason %d)", addr, reason); err = release_peripheral_slot_for_conn(conn); @@ -579,7 +579,7 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi if (strlcpy(payload.behavior_dev, binding->behavior_dev, payload_dev_size) >= payload_dev_size) { LOG_ERR("Truncated behavior label %s to %s before invoking peripheral behavior", - log_strdup(binding->behavior_dev), log_strdup(payload.behavior_dev)); + binding->behavior_dev, payload.behavior_dev); } struct zmk_split_run_behavior_payload_wrapper wrapper = {.source = source, .payload = payload}; diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index 07d3ee3f927..6b767baa7c1 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -59,7 +59,7 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("Disconnected from %s (reason 0x%02x)", log_strdup(addr), reason); + LOG_DBG("Disconnected from %s (reason 0x%02x)", addr, reason); is_connected = false; @@ -73,9 +73,9 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_ bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); if (!err) { - LOG_DBG("Security changed: %s level %u", log_strdup(addr), level); + LOG_DBG("Security changed: %s level %u", addr, level); } else { - LOG_ERR("Security failed: %s level %u err %d", log_strdup(addr), level, err); + LOG_ERR("Security failed: %s level %u err %d", addr, level, err); } } @@ -85,7 +85,7 @@ static void le_param_updated(struct bt_conn *conn, uint16_t interval, uint16_t l bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - LOG_DBG("%s: interval %d latency %d timeout %d", log_strdup(addr), interval, latency, timeout); + LOG_DBG("%s: interval %d latency %d timeout %d", addr, interval, latency, timeout); } static struct bt_conn_cb conn_callbacks = { diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index cc20c72fd63..fa4b77185fa 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -60,7 +60,7 @@ static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt .param2 = payload->data.param2, .behavior_dev = payload->behavior_dev, }; - LOG_DBG("%s with params %d %d: pressed? %d", log_strdup(binding.behavior_dev), + LOG_DBG("%s with params %d %d: pressed? %d", binding.behavior_dev, binding.param1, binding.param2, payload->data.state); struct zmk_behavior_binding_event event = {.position = payload->data.position, .timestamp = k_uptime_get()}; @@ -72,7 +72,7 @@ static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt } if (err) { - LOG_ERR("Failed to invoke behavior %s: %d", log_strdup(binding.behavior_dev), err); + LOG_ERR("Failed to invoke behavior %s: %d", binding.behavior_dev, err); } } From 09ed79a867b9d360270d505ff361a65ed66735e3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 17 Jan 2023 20:40:44 -0500 Subject: [PATCH 0617/1130] refactor: Move away from deprecated label usages. * Move away from DT_LABEL. * Move to DEVICE_DT_GET for non-behavior device access. * Move various drivers to `gpio_spec_dt` and `DT` related macros. * Remove mcp23017 while at it, since better upstream driver is available. --- app/boards/arm/ferris/ferris_rev02.dts | 3 +- app/boards/arm/ferris/ferris_rev02_defconfig | 3 - app/boards/arm/mikoto/pinmux.c | 4 +- app/boards/arm/nrfmicro/pinmux.c | 2 +- app/boards/arm/puchi_ble/pinmux.c | 2 +- app/drivers/display/il0323.c | 146 +++----- app/drivers/gpio/CMakeLists.txt | 1 - app/drivers/gpio/Kconfig | 1 - app/drivers/gpio/Kconfig.mcp23017 | 22 -- app/drivers/gpio/gpio_mcp23017.c | 332 ------------------ app/drivers/gpio/gpio_mcp23017.h | 86 ----- app/drivers/kscan/kscan_composite.c | 26 +- app/drivers/kscan/kscan_gpio_demux.c | 90 ++--- .../sensor/battery/battery_voltage_divider.c | 77 ++-- app/drivers/sensor/ec11/ec11.c | 30 +- app/drivers/sensor/ec11/ec11.h | 11 +- app/drivers/sensor/ec11/ec11_trigger.c | 15 +- .../dts/bindings/gpio/microchip,mcp23017.yaml | 29 -- .../dts/bindings/gpio/zmk,gpio-595.yaml | 3 - .../bindings/sensor/zmk,battery-nrf-vddh.yaml | 5 - .../sensor/zmk,battery-voltage-divider.yaml | 5 - app/include/zmk/keymap.h | 2 +- app/include/zmk/kscan.h | 4 +- app/src/activity.c | 4 +- app/src/behavior_queue.c | 4 +- app/src/behaviors/behavior_bt.c | 1 - app/src/behaviors/behavior_caps_word.c | 9 +- app/src/behaviors/behavior_hold_tap.c | 4 +- app/src/behaviors/behavior_macro.c | 14 +- app/src/behaviors/behavior_mod_morph.c | 2 +- app/src/behaviors/behavior_tap_dance.c | 2 +- app/src/display/main.c | 11 +- app/src/ext_power_generic.c | 30 +- app/src/keymap.c | 5 +- app/src/kscan.c | 3 +- app/src/main.c | 4 +- app/src/rgb_underglow.c | 18 +- app/src/sensors.c | 3 +- app/src/split/bluetooth/central.c | 6 +- app/src/split/bluetooth/service.c | 4 +- docs/docs/development/new-behavior.md | 4 +- 41 files changed, 199 insertions(+), 828 deletions(-) delete mode 100644 app/drivers/gpio/Kconfig.mcp23017 delete mode 100644 app/drivers/gpio/gpio_mcp23017.c delete mode 100644 app/drivers/gpio/gpio_mcp23017.h delete mode 100644 app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 50de9526ef2..55055e9a1e7 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -104,11 +104,10 @@ clock-frequency = ; right_io: mcp23017@20 { - compatible = "microchip,mcp23017"; + compatible = "microchip,mcp230xx"; status = "okay"; gpio-controller; reg = <0x20>; - label = "RIGHT_IO"; #gpio-cells = <2>; ngpios = <16>; }; diff --git a/app/boards/arm/ferris/ferris_rev02_defconfig b/app/boards/arm/ferris/ferris_rev02_defconfig index 934dc4a02ea..267035c9fb1 100644 --- a/app/boards/arm/ferris/ferris_rev02_defconfig +++ b/app/boards/arm/ferris/ferris_rev02_defconfig @@ -20,9 +20,6 @@ CONFIG_ZMK_USB=y CONFIG_ZMK_KSCAN_MATRIX_POLLING=y CONFIG_USB_SELF_POWERED=n -# Enable IO multiplexer -CONFIG_GPIO_MCP23017=y - # Needed to reduce this to size that will fit on F072 CONFIG_HEAP_MEM_POOL_SIZE=1024 diff --git a/app/boards/arm/mikoto/pinmux.c b/app/boards/arm/mikoto/pinmux.c index 6d7f46d1e9f..524aa17e5bf 100644 --- a/app/boards/arm/mikoto/pinmux.c +++ b/app/boards/arm/mikoto/pinmux.c @@ -15,8 +15,8 @@ static int pinmux_mikoto_init(const struct device *port) { ARG_UNUSED(port); #if CONFIG_BOARD_MIKOTO_520 - const struct device *p0 = device_get_binding("GPIO_0"); - const struct device *p1 = device_get_binding("GPIO_1"); + const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); + const struct device *p1 = DEVICE_DT_GET(DT_NODELABEL(gpio1)); #if CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_40MA gpio_pin_configure(p0, 26, GPIO_INPUT | GPIO_PULL_DOWN); gpio_pin_configure(p1, 15, GPIO_INPUT); diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index 129530d4a5a..6362b39250c 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -15,7 +15,7 @@ static int pinmux_nrfmicro_init(const struct device *port) { ARG_UNUSED(port); #if (CONFIG_BOARD_NRFMICRO_13 || CONFIG_BOARD_NRFMICRO_13_52833) - const struct device *p0 = device_get_binding("GPIO_0"); + const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); #if CONFIG_BOARD_NRFMICRO_CHARGER gpio_pin_configure(p0, 5, GPIO_OUTPUT); gpio_pin_set(p0, 5, 0); diff --git a/app/boards/arm/puchi_ble/pinmux.c b/app/boards/arm/puchi_ble/pinmux.c index 0817b6e0a74..2817827493b 100644 --- a/app/boards/arm/puchi_ble/pinmux.c +++ b/app/boards/arm/puchi_ble/pinmux.c @@ -15,7 +15,7 @@ static int pinmux_puchi_ble_init(const struct device *port) { ARG_UNUSED(port); #if CONFIG_BOARD_PUCHI_BLE_v1 - const struct device *p0 = device_get_binding("GPIO_0"); + const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); #if CONFIG_BOARD_PUCHI_BLE_CHARGER gpio_pin_configure(p0, 5, GPIO_OUTPUT); gpio_pin_set(p0, 5, 0); diff --git a/app/drivers/display/il0323.c b/app/drivers/display/il0323.c index ec6da15934b..94e38481dd1 100644 --- a/app/drivers/display/il0323.c +++ b/app/drivers/display/il0323.c @@ -24,23 +24,6 @@ LOG_MODULE_REGISTER(il0323, CONFIG_DISPLAY_LOG_LEVEL); * */ -#define IL0323_SPI_FREQ DT_INST_PROP(0, spi_max_frequency) -#define IL0323_BUS_NAME DT_INST_BUS_LABEL(0) -#define IL0323_DC_PIN DT_INST_GPIO_PIN(0, dc_gpios) -#define IL0323_DC_FLAGS DT_INST_GPIO_FLAGS(0, dc_gpios) -#define IL0323_DC_CNTRL DT_INST_GPIO_LABEL(0, dc_gpios) -#define IL0323_CS_PIN DT_INST_SPI_DEV_CS_GPIOS_PIN(0) -#define IL0323_CS_FLAGS DT_INST_SPI_DEV_CS_GPIOS_FLAGS(0) -#if DT_INST_SPI_DEV_HAS_CS_GPIOS(0) -#define IL0323_CS_CNTRL DT_INST_SPI_DEV_CS_GPIOS_LABEL(0) -#endif -#define IL0323_BUSY_PIN DT_INST_GPIO_PIN(0, busy_gpios) -#define IL0323_BUSY_CNTRL DT_INST_GPIO_LABEL(0, busy_gpios) -#define IL0323_BUSY_FLAGS DT_INST_GPIO_FLAGS(0, busy_gpios) -#define IL0323_RESET_PIN DT_INST_GPIO_PIN(0, reset_gpios) -#define IL0323_RESET_CNTRL DT_INST_GPIO_LABEL(0, reset_gpios) -#define IL0323_RESET_FLAGS DT_INST_GPIO_FLAGS(0, reset_gpios) - #define EPD_PANEL_WIDTH DT_INST_PROP(0, width) #define EPD_PANEL_HEIGHT DT_INST_PROP(0, height) #define IL0323_PIXELS_PER_BYTE 8U @@ -53,15 +36,11 @@ LOG_MODULE_REGISTER(il0323, CONFIG_DISPLAY_LOG_LEVEL); #define IL0323_PANEL_LAST_PAGE (IL0323_NUMOF_PAGES - 1) #define IL0323_BUFFER_SIZE 1280 -struct il0323_data { - const struct device *reset; - const struct device *dc; - const struct device *busy; - const struct device *spi_dev; - struct spi_config spi_config; -#if defined(IL0323_CS_CNTRL) - struct spi_cs_control cs_ctrl; -#endif +struct il0323_cfg { + struct gpio_dt_spec reset; + struct gpio_dt_spec dc; + struct gpio_dt_spec busy; + struct spi_dt_spec spi; }; static uint8_t il0323_pwr[] = DT_INST_PROP(0, pwr); @@ -69,21 +48,21 @@ static uint8_t il0323_pwr[] = DT_INST_PROP(0, pwr); static uint8_t last_buffer[IL0323_BUFFER_SIZE]; static bool blanking_on = true; -static inline int il0323_write_cmd(struct il0323_data *driver, uint8_t cmd, uint8_t *data, +static inline int il0323_write_cmd(const struct il0323_cfg *cfg, uint8_t cmd, uint8_t *data, size_t len) { struct spi_buf buf = {.buf = &cmd, .len = sizeof(cmd)}; struct spi_buf_set buf_set = {.buffers = &buf, .count = 1}; - gpio_pin_set(driver->dc, IL0323_DC_PIN, 1); - if (spi_write(driver->spi_dev, &driver->spi_config, &buf_set)) { + gpio_pin_set_dt(&cfg->dc, 1); + if (spi_write_dt(&cfg->spi, &buf_set)) { return -EIO; } if (data != NULL) { buf.buf = data; buf.len = len; - gpio_pin_set(driver->dc, IL0323_DC_PIN, 0); - if (spi_write(driver->spi_dev, &driver->spi_config, &buf_set)) { + gpio_pin_set_dt(&cfg->dc, 0); + if (spi_write_dt(&cfg->spi, &buf_set)) { return -EIO; } } @@ -91,22 +70,22 @@ static inline int il0323_write_cmd(struct il0323_data *driver, uint8_t cmd, uint return 0; } -static inline void il0323_busy_wait(struct il0323_data *driver) { - int pin = gpio_pin_get(driver->busy, IL0323_BUSY_PIN); +static inline void il0323_busy_wait(const struct il0323_cfg *cfg) { + int pin = gpio_pin_get_dt(&cfg->busy); while (pin > 0) { __ASSERT(pin >= 0, "Failed to get pin level"); // LOG_DBG("wait %u", pin); k_msleep(IL0323_BUSY_DELAY); - pin = gpio_pin_get(driver->busy, IL0323_BUSY_PIN); + pin = gpio_pin_get_dt(&cfg->busy); } } static int il0323_update_display(const struct device *dev) { - struct il0323_data *driver = dev->data; + const struct il0323_cfg *cfg = dev->config; LOG_DBG("Trigger update sequence"); - if (il0323_write_cmd(driver, IL0323_CMD_DRF, NULL, 0)) { + if (il0323_write_cmd(cfg, IL0323_CMD_DRF, NULL, 0)) { return -EIO; } @@ -117,7 +96,7 @@ static int il0323_update_display(const struct device *dev) { static int il0323_write(const struct device *dev, const uint16_t x, const uint16_t y, const struct display_buffer_descriptor *desc, const void *buf) { - struct il0323_data *driver = dev->data; + const struct il0323_cfg *cfg = dev->config; uint16_t x_end_idx = x + desc->width - 1; uint16_t y_end_idx = y + desc->height - 1; uint8_t ptl[IL0323_PTL_REG_LENGTH] = {0}; @@ -147,20 +126,20 @@ static int il0323_write(const struct device *dev, const uint16_t x, const uint16 ptl[sizeof(ptl) - 1] = IL0323_PTL_PT_SCAN; LOG_HEXDUMP_DBG(ptl, sizeof(ptl), "ptl"); - il0323_busy_wait(driver); - if (il0323_write_cmd(driver, IL0323_CMD_PIN, NULL, 0)) { + il0323_busy_wait(cfg); + if (il0323_write_cmd(cfg, IL0323_CMD_PIN, NULL, 0)) { return -EIO; } - if (il0323_write_cmd(driver, IL0323_CMD_PTL, ptl, sizeof(ptl))) { + if (il0323_write_cmd(cfg, IL0323_CMD_PTL, ptl, sizeof(ptl))) { return -EIO; } - if (il0323_write_cmd(driver, IL0323_CMD_DTM1, last_buffer, IL0323_BUFFER_SIZE)) { + if (il0323_write_cmd(cfg, IL0323_CMD_DTM1, last_buffer, IL0323_BUFFER_SIZE)) { return -EIO; } - if (il0323_write_cmd(driver, IL0323_CMD_DTM2, (uint8_t *)buf, buf_len)) { + if (il0323_write_cmd(cfg, IL0323_CMD_DTM2, (uint8_t *)buf, buf_len)) { return -EIO; } @@ -173,7 +152,7 @@ static int il0323_write(const struct device *dev, const uint16_t x, const uint16 } } - if (il0323_write_cmd(driver, IL0323_CMD_POUT, NULL, 0)) { + if (il0323_write_cmd(cfg, IL0323_CMD_POUT, NULL, 0)) { return -EIO; } @@ -217,11 +196,11 @@ static int il0323_clear_and_write_buffer(const struct device *dev, uint8_t patte } static int il0323_blanking_off(const struct device *dev) { - struct il0323_data *driver = dev->data; + const struct il0323_cfg *cfg = dev->config; if (blanking_on) { - /* Update EPD pannel in normal mode */ - il0323_busy_wait(driver); + /* Update EPD panel in normal mode */ + il0323_busy_wait(cfg); if (il0323_clear_and_write_buffer(dev, 0xff, true)) { return -EIO; } @@ -278,30 +257,30 @@ static int il0323_set_pixel_format(const struct device *dev, const enum display_ } static int il0323_controller_init(const struct device *dev) { - struct il0323_data *driver = dev->data; + const struct il0323_cfg *cfg = dev->config; uint8_t tmp[IL0323_TRES_REG_LENGTH]; LOG_DBG(""); - gpio_pin_set(driver->reset, IL0323_RESET_PIN, 1); + gpio_pin_set_dt(&cfg->reset, 1); k_msleep(IL0323_RESET_DELAY); - gpio_pin_set(driver->reset, IL0323_RESET_PIN, 0); + gpio_pin_set_dt(&cfg->reset, 0); k_msleep(IL0323_RESET_DELAY); - il0323_busy_wait(driver); + il0323_busy_wait(cfg); LOG_DBG("Initialize IL0323 controller"); - if (il0323_write_cmd(driver, IL0323_CMD_PWR, il0323_pwr, sizeof(il0323_pwr))) { + if (il0323_write_cmd(cfg, IL0323_CMD_PWR, il0323_pwr, sizeof(il0323_pwr))) { return -EIO; } /* Turn on: booster, controller, regulators, and sensor. */ - if (il0323_write_cmd(driver, IL0323_CMD_PON, NULL, 0)) { + if (il0323_write_cmd(cfg, IL0323_CMD_PON, NULL, 0)) { return -EIO; } k_msleep(IL0323_PON_DELAY); - il0323_busy_wait(driver); + il0323_busy_wait(cfg); /* Pannel settings, KW mode */ tmp[0] = IL0323_PSR_UD | IL0323_PSR_SHL | IL0323_PSR_SHD | IL0323_PSR_RST; @@ -321,7 +300,7 @@ static int il0323_controller_init(const struct device *dev) { #endif /* panel width */ LOG_HEXDUMP_DBG(tmp, 1, "PSR"); - if (il0323_write_cmd(driver, IL0323_CMD_PSR, tmp, 1)) { + if (il0323_write_cmd(cfg, IL0323_CMD_PSR, tmp, 1)) { return -EIO; } @@ -329,24 +308,24 @@ static int il0323_controller_init(const struct device *dev) { tmp[IL0323_TRES_HRES_IDX] = EPD_PANEL_WIDTH; tmp[IL0323_TRES_VRES_IDX] = EPD_PANEL_HEIGHT; LOG_HEXDUMP_DBG(tmp, IL0323_TRES_REG_LENGTH, "TRES"); - if (il0323_write_cmd(driver, IL0323_CMD_TRES, tmp, IL0323_TRES_REG_LENGTH)) { + if (il0323_write_cmd(cfg, IL0323_CMD_TRES, tmp, IL0323_TRES_REG_LENGTH)) { return -EIO; } tmp[IL0323_CDI_CDI_IDX] = DT_INST_PROP(0, cdi); LOG_HEXDUMP_DBG(tmp, IL0323_CDI_REG_LENGTH, "CDI"); - if (il0323_write_cmd(driver, IL0323_CMD_CDI, tmp, IL0323_CDI_REG_LENGTH)) { + if (il0323_write_cmd(cfg, IL0323_CMD_CDI, tmp, IL0323_CDI_REG_LENGTH)) { return -EIO; } tmp[0] = DT_INST_PROP(0, tcon); - if (il0323_write_cmd(driver, IL0323_CMD_TCON, tmp, 1)) { + if (il0323_write_cmd(cfg, IL0323_CMD_TCON, tmp, 1)) { return -EIO; } /* Enable Auto Sequence */ tmp[0] = IL0323_AUTO_PON_DRF_POF; - if (il0323_write_cmd(driver, IL0323_CMD_AUTO, tmp, 1)) { + if (il0323_write_cmd(cfg, IL0323_CMD_AUTO, tmp, 1)) { return -EIO; } @@ -354,62 +333,43 @@ static int il0323_controller_init(const struct device *dev) { } static int il0323_init(const struct device *dev) { - struct il0323_data *driver = dev->data; - - LOG_DBG(""); + const struct il0323_cfg *cfg = dev->config; - driver->spi_dev = device_get_binding(IL0323_BUS_NAME); - if (driver->spi_dev == NULL) { - LOG_ERR("Could not get SPI device for IL0323"); + if (!spi_is_ready(&cfg->spi)) { + LOG_ERR("SPI device not ready for IL0323"); return -EIO; } - driver->spi_config.frequency = IL0323_SPI_FREQ; - driver->spi_config.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8); - driver->spi_config.slave = DT_INST_REG_ADDR(0); - driver->spi_config.cs = NULL; - - driver->reset = device_get_binding(IL0323_RESET_CNTRL); - if (driver->reset == NULL) { + if (!device_is_ready(cfg->reset.port)) { LOG_ERR("Could not get GPIO port for IL0323 reset"); return -EIO; } - gpio_pin_configure(driver->reset, IL0323_RESET_PIN, GPIO_OUTPUT_INACTIVE | IL0323_RESET_FLAGS); + gpio_pin_configure_dt(&cfg->reset, GPIO_OUTPUT_INACTIVE); - driver->dc = device_get_binding(IL0323_DC_CNTRL); - if (driver->dc == NULL) { + if (!device_is_ready(cfg->dc.port)) { LOG_ERR("Could not get GPIO port for IL0323 DC signal"); return -EIO; } - gpio_pin_configure(driver->dc, IL0323_DC_PIN, GPIO_OUTPUT_INACTIVE | IL0323_DC_FLAGS); + gpio_pin_configure_dt(&cfg->dc, GPIO_OUTPUT_INACTIVE); - driver->busy = device_get_binding(IL0323_BUSY_CNTRL); - if (driver->busy == NULL) { + if (!device_is_ready(cfg->busy.port)) { LOG_ERR("Could not get GPIO port for IL0323 busy signal"); return -EIO; } - gpio_pin_configure(driver->busy, IL0323_BUSY_PIN, GPIO_INPUT | IL0323_BUSY_FLAGS); - -#if defined(IL0323_CS_CNTRL) - driver->cs_ctrl.gpio_dev = device_get_binding(IL0323_CS_CNTRL); - if (!driver->cs_ctrl.gpio_dev) { - LOG_ERR("Unable to get SPI GPIO CS device"); - return -EIO; - } - - driver->cs_ctrl.gpio_pin = IL0323_CS_PIN; - driver->cs_ctrl.gpio_dt_flags = IL0323_CS_FLAGS; - driver->cs_ctrl.delay = 0U; - driver->spi_config.cs = &driver->cs_ctrl; -#endif + gpio_pin_configure_dt(&cfg->busy, GPIO_INPUT); return il0323_controller_init(dev); } -static struct il0323_data il0323_driver; +static struct il0323_cfg il0323_config = { + .spi = SPI_DT_SPEC_INST_GET(0, SPI_OP_MODE_MASTER | SPI_WORD_SET(8), 0), + .reset = GPIO_DT_SPEC_INST_GET(0, reset_gpios), + .busy = GPIO_DT_SPEC_INST_GET(0, busy_gpios), + .dc = GPIO_DT_SPEC_INST_GET(0, dc_gpios), +}; static struct display_driver_api il0323_driver_api = { .blanking_on = il0323_blanking_on, @@ -424,5 +384,5 @@ static struct display_driver_api il0323_driver_api = { .set_orientation = il0323_set_orientation, }; -DEVICE_DT_INST_DEFINE(0, il0323_init, NULL, &il0323_driver, NULL, POST_KERNEL, +DEVICE_DT_INST_DEFINE(0, il0323_init, NULL, NULL, &il0323_config, POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY, &il0323_driver_api); diff --git a/app/drivers/gpio/CMakeLists.txt b/app/drivers/gpio/CMakeLists.txt index f43781516e0..0756ed386b4 100644 --- a/app/drivers/gpio/CMakeLists.txt +++ b/app/drivers/gpio/CMakeLists.txt @@ -5,5 +5,4 @@ zephyr_library_named(zmk__drivers__gpio) zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) zephyr_library_sources_ifdef(CONFIG_GPIO_595 gpio_595.c) -zephyr_library_sources_ifdef(CONFIG_GPIO_MCP23017 gpio_mcp23017.c) zephyr_library_sources_ifdef(CONFIG_GPIO_MAX7318 gpio_max7318.c) diff --git a/app/drivers/gpio/Kconfig b/app/drivers/gpio/Kconfig index 43c7c24e5d3..54b30590e1c 100644 --- a/app/drivers/gpio/Kconfig +++ b/app/drivers/gpio/Kconfig @@ -1,6 +1,5 @@ menuconfig ZMK_DRIVERS_GPIO bool "GPIO" -rsource "Kconfig.mcp23017" rsource "Kconfig.max7318" rsource "Kconfig.595" diff --git a/app/drivers/gpio/Kconfig.mcp23017 b/app/drivers/gpio/Kconfig.mcp23017 deleted file mode 100644 index 049ca82eca8..00000000000 --- a/app/drivers/gpio/Kconfig.mcp23017 +++ /dev/null @@ -1,22 +0,0 @@ -# MCP23017 GPIO configuration options - -# Copyright (c) 2021 Pete Johanson -# SPDX-License-Identifier: Apache-2.0 - -menuconfig GPIO_MCP23017 - bool "MCP23017 I2C-based GPIO chip" - depends on I2C - select HAS_DTS_GPIO - select ZMK_DRIVERS_GPIO - help - Enable driver for MCP23017 I2C-based GPIO chip. - -if GPIO_MCP23017 - -config GPIO_MCP23017_INIT_PRIORITY - int "Init priority" - default 75 - help - Device driver initialization priority. - -endif #GPIO_MCP23017 diff --git a/app/drivers/gpio/gpio_mcp23017.c b/app/drivers/gpio/gpio_mcp23017.c deleted file mode 100644 index feafbd0a132..00000000000 --- a/app/drivers/gpio/gpio_mcp23017.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) 2020 Geanix ApS - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#define DT_DRV_COMPAT microchip_mcp23017 - -/** - * @file Driver for MCP23017 SPI-based GPIO driver. - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include "gpio_mcp23017.h" - -#define LOG_LEVEL CONFIG_GPIO_LOG_LEVEL -#include -LOG_MODULE_REGISTER(gpio_mcp23017); - -/** - * @brief Read both port 0 and port 1 registers of certain register function. - * - * Given the register in reg, read the pair of port 0 and port 1. - * - * @param dev Device struct of the MCP23017. - * @param reg Register to read (the PORTA of the pair of registers). - * @param buf Buffer to read data into. - * - * @return 0 if successful, failed otherwise. - */ -static int read_port_regs(const struct device *dev, uint8_t reg, uint16_t *buf) { - const struct mcp23017_config *const config = dev->config; - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - int ret; - uint16_t port_data; - - uint8_t addr = config->slave; - - ret = i2c_burst_read(drv_data->i2c, addr, reg, (uint8_t *)&port_data, sizeof(port_data)); - if (ret) { - LOG_DBG("i2c_write_read FAIL %d\n", ret); - return ret; - } - - *buf = sys_le16_to_cpu(port_data); - - LOG_DBG("MCP23017: Read: REG[0x%X] = 0x%X, REG[0x%X] = 0x%X", reg, (*buf & 0xFF), (reg + 1), - (*buf >> 8)); - - return 0; -} - -/** - * @brief Write both port 0 and port 1 registers of certain register function. - * - * Given the register in reg, write the pair of port 0 and port 1. - * - * @param dev Device struct of the MCP23017. - * @param reg Register to write into (the PORTA of the pair of registers). - * @param buf Buffer to write data from. - * - * @return 0 if successful, failed otherwise. - */ -static int write_port_regs(const struct device *dev, uint8_t reg, uint16_t value) { - const struct mcp23017_config *const config = dev->config; - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - int ret; - uint16_t port_data; - - LOG_DBG("MCP23017: Write: REG[0x%X] = 0x%X, REG[0x%X] = 0x%X", reg, (value & 0xFF), (reg + 1), - (value >> 8)); - - port_data = sys_cpu_to_le16(value); - - ret = i2c_burst_write(drv_data->i2c, config->slave, reg, (uint8_t *)&port_data, - sizeof(port_data)); - if (ret) { - LOG_DBG("i2c_write FAIL %d\n", ret); - return ret; - } - - return 0; -} - -/** - * @brief Setup the pin direction (input or output) - * - * @param dev Device struct of the MCP23017 - * @param pin The pin number - * @param flags Flags of pin or port - * - * @return 0 if successful, failed otherwise - */ -static int setup_pin_dir(const struct device *dev, uint32_t pin, int flags) { - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - uint16_t *dir = &drv_data->reg_cache.iodir; - uint16_t *output = &drv_data->reg_cache.gpio; - int ret; - - if ((flags & GPIO_OUTPUT) != 0U) { - if ((flags & GPIO_OUTPUT_INIT_HIGH) != 0U) { - *output |= BIT(pin); - } else if ((flags & GPIO_OUTPUT_INIT_LOW) != 0U) { - *output &= ~BIT(pin); - } - *dir &= ~BIT(pin); - } else { - *dir |= BIT(pin); - } - - ret = write_port_regs(dev, REG_GPIO_PORTA, *output); - if (ret != 0) { - return ret; - } - - ret = write_port_regs(dev, REG_IODIR_PORTA, *dir); - - return ret; -} - -/** - * @brief Setup the pin pull up/pull down status - * - * @param dev Device struct of the MCP23017 - * @param pin The pin number - * @param flags Flags of pin or port - * - * @return 0 if successful, failed otherwise - */ -static int setup_pin_pullupdown(const struct device *dev, uint32_t pin, int flags) { - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - uint16_t port; - int ret; - - /* Setup pin pull up or pull down */ - port = drv_data->reg_cache.gppu; - - /* pull down == 0, pull up == 1 */ - if ((flags & GPIO_PULL_DOWN) != 0U) { - return -ENOTSUP; - } - - WRITE_BIT(port, pin, (flags & GPIO_PULL_UP) != 0U); - - ret = write_port_regs(dev, REG_GPPU_PORTA, port); - if (ret == 0) { - drv_data->reg_cache.gppu = port; - } - - return ret; -} - -static int mcp23017_config(const struct device *dev, gpio_pin_t pin, gpio_flags_t flags) { - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - int ret; - - /* Can't do SPI bus operations from an ISR */ - if (k_is_in_isr()) { - return -EWOULDBLOCK; - } - - k_sem_take(&drv_data->lock, K_FOREVER); - - if ((flags & GPIO_OPEN_DRAIN) != 0U) { - ret = -ENOTSUP; - goto done; - }; - - ret = setup_pin_dir(dev, pin, flags); - if (ret) { - LOG_ERR("MCP23017: error setting pin direction (%d)", ret); - goto done; - } - - ret = setup_pin_pullupdown(dev, pin, flags); - if (ret) { - LOG_ERR("MCP23017: error setting pin pull up/down (%d)", ret); - goto done; - } - -done: - k_sem_give(&drv_data->lock); - return ret; -} - -static int mcp23017_port_get_raw(const struct device *dev, uint32_t *value) { - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - uint16_t buf; - int ret; - - /* Can't do SPI bus operations from an ISR */ - if (k_is_in_isr()) { - return -EWOULDBLOCK; - } - - k_sem_take(&drv_data->lock, K_FOREVER); - - ret = read_port_regs(dev, REG_GPIO_PORTA, &buf); - if (ret != 0) { - goto done; - } - - *value = buf; - -done: - k_sem_give(&drv_data->lock); - return ret; -} - -static int mcp23017_port_set_masked_raw(const struct device *dev, uint32_t mask, uint32_t value) { - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - uint16_t buf; - int ret; - - /* Can't do SPI bus operations from an ISR */ - if (k_is_in_isr()) { - return -EWOULDBLOCK; - } - - k_sem_take(&drv_data->lock, K_FOREVER); - - buf = drv_data->reg_cache.gpio; - buf = (buf & ~mask) | (mask & value); - - ret = write_port_regs(dev, REG_GPIO_PORTA, buf); - if (ret == 0) { - drv_data->reg_cache.gpio = buf; - } - - k_sem_give(&drv_data->lock); - - return ret; -} - -static int mcp23017_port_set_bits_raw(const struct device *dev, uint32_t mask) { - return mcp23017_port_set_masked_raw(dev, mask, mask); -} - -static int mcp23017_port_clear_bits_raw(const struct device *dev, uint32_t mask) { - return mcp23017_port_set_masked_raw(dev, mask, 0); -} - -static int mcp23017_port_toggle_bits(const struct device *dev, uint32_t mask) { - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - uint16_t buf; - int ret; - - /* Can't do SPI bus operations from an ISR */ - if (k_is_in_isr()) { - return -EWOULDBLOCK; - } - - k_sem_take(&drv_data->lock, K_FOREVER); - - buf = drv_data->reg_cache.gpio; - buf ^= mask; - - ret = write_port_regs(dev, REG_GPIO_PORTA, buf); - if (ret == 0) { - drv_data->reg_cache.gpio = buf; - } - - k_sem_give(&drv_data->lock); - - return ret; -} - -static int mcp23017_pin_interrupt_configure(const struct device *dev, gpio_pin_t pin, - enum gpio_int_mode mode, enum gpio_int_trig trig) { - return -ENOTSUP; -} - -static const struct gpio_driver_api api_table = { - .pin_configure = mcp23017_config, - .port_get_raw = mcp23017_port_get_raw, - .port_set_masked_raw = mcp23017_port_set_masked_raw, - .port_set_bits_raw = mcp23017_port_set_bits_raw, - .port_clear_bits_raw = mcp23017_port_clear_bits_raw, - .port_toggle_bits = mcp23017_port_toggle_bits, - .pin_interrupt_configure = mcp23017_pin_interrupt_configure, -}; - -/** - * @brief Initialization function of MCP23017 - * - * @param dev Device struct - * @return 0 if successful, failed otherwise. - */ -static int mcp23017_init(const struct device *dev) { - const struct mcp23017_config *const config = dev->config; - struct mcp23017_drv_data *const drv_data = (struct mcp23017_drv_data *const)dev->data; - - drv_data->i2c = device_get_binding((char *)config->i2c_dev_name); - if (!drv_data->i2c) { - LOG_DBG("Unable to get i2c device"); - return -ENODEV; - } - - k_sem_init(&drv_data->lock, 1, 1); - - return 0; -} - -#define MCP23017_INIT(inst) \ - static struct mcp23017_config mcp23017_##inst##_config = { \ - .i2c_dev_name = DT_INST_BUS_LABEL(inst), \ - .slave = DT_INST_REG_ADDR(inst), \ - \ - }; \ - \ - static struct mcp23017_drv_data mcp23017_##inst##_drvdata = { \ - /* Default for registers according to datasheet */ \ - .reg_cache.iodir = 0xFFFF, .reg_cache.ipol = 0x0, .reg_cache.gpinten = 0x0, \ - .reg_cache.defval = 0x0, .reg_cache.intcon = 0x0, .reg_cache.iocon = 0x0, \ - .reg_cache.gppu = 0x0, .reg_cache.intf = 0x0, .reg_cache.intcap = 0x0, \ - .reg_cache.gpio = 0x0, .reg_cache.olat = 0x0, \ - }; \ - \ - /* This has to init after SPI master */ \ - DEVICE_DT_INST_DEFINE(inst, mcp23017_init, NULL, &mcp23017_##inst##_drvdata, \ - &mcp23017_##inst##_config, POST_KERNEL, \ - CONFIG_GPIO_MCP23017_INIT_PRIORITY, &api_table); - -DT_INST_FOREACH_STATUS_OKAY(MCP23017_INIT) diff --git a/app/drivers/gpio/gpio_mcp23017.h b/app/drivers/gpio/gpio_mcp23017.h deleted file mode 100644 index 01908c0c152..00000000000 --- a/app/drivers/gpio/gpio_mcp23017.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2020 Geanix ApS, Pete Johanson - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @file Header file for the MCP23017 driver. - */ - -#ifndef ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ -#define ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ - -#include - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Register definitions */ -#define REG_IODIR_PORTA 0x00 -#define REG_IODIR_PORTB 0x01 -#define REG_IPOL_PORTA 0x02 -#define REG_IPOL_PORTB 0x03 -#define REG_GPINTEN_PORTA 0x04 -#define REG_GPINTEN_PORTB 0x05 -#define REG_DEFVAL_PORTA 0x06 -#define REG_DEFVAL_PORTB 0x07 -#define REG_INTCON_PORTA 0x08 -#define REG_INTCON_PORTB 0x09 -#define REG_GPPU_PORTA 0x0C -#define REG_GPPU_PORTB 0x0D -#define REG_INTF_PORTA 0x0E -#define REG_INTF_PORTB 0x0F -#define REG_INTCAP_PORTA 0x10 -#define REG_INTCAP_PORTB 0x11 -#define REG_GPIO_PORTA 0x12 -#define REG_GPIO_PORTB 0x13 -#define REG_OLAT_PORTA 0x14 -#define REG_OLAT_PORTB 0x15 - -#define MCP23017_ADDR 0x40 -#define MCP23017_READBIT 0x01 - -/** Configuration data */ -struct mcp23017_config { - /* gpio_driver_data needs to be first */ - struct gpio_driver_config common; - - const char *const i2c_dev_name; - const uint16_t slave; -}; - -/** Runtime driver data */ -struct mcp23017_drv_data { - /* gpio_driver_data needs to be first */ - struct gpio_driver_config data; - - /** Master SPI device */ - const struct device *i2c; - - struct k_sem lock; - - struct { - uint16_t iodir; - uint16_t ipol; - uint16_t gpinten; - uint16_t defval; - uint16_t intcon; - uint16_t iocon; - uint16_t gppu; - uint16_t intf; - uint16_t intcap; - uint16_t gpio; - uint16_t olat; - } reg_cache; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* ZEPHYR_DRIVERS_GPIO_GPIO_MCP23017_H_ */ diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index b452a9d2c66..9909a4cfcfa 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -7,7 +7,7 @@ #define DT_DRV_COMPAT zmk_kscan_composite #include -#include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -16,13 +16,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define MATRIX_COLS DT_PROP(MATRIX_NODE_ID, columns) struct kscan_composite_child_config { - char *label; + const struct device *child; uint8_t row_offset; uint8_t column_offset; }; #define CHILD_CONFIG(inst) \ - {.label = DT_LABEL(DT_PHANDLE(inst, kscan)), \ + {.child = DEVICE_DT_GET(DT_PHANDLE(inst, kscan)), \ .row_offset = DT_PROP(inst, row_offset), \ .column_offset = DT_PROP(inst, column_offset)}, @@ -41,12 +41,7 @@ static int kscan_composite_enable_callback(const struct device *dev) { for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - const struct device *dev = device_get_binding(cfg->label); - if (!dev) { - LOG_WRN("Failed to load child kscan device %s", cfg->label); - continue; - } - kscan_enable_callback(dev); + kscan_enable_callback(cfg->child); } return 0; } @@ -55,12 +50,7 @@ static int kscan_composite_disable_callback(const struct device *dev) { for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - const struct device *dev = device_get_binding(cfg->label); - if (!dev) { - LOG_WRN("Failed to load child kscan device %s", cfg->label); - continue; - } - kscan_disable_callback(dev); + kscan_disable_callback(cfg->child); } return 0; } @@ -68,13 +58,13 @@ static int kscan_composite_disable_callback(const struct device *dev) { static void kscan_composite_child_callback(const struct device *child_dev, uint32_t row, uint32_t column, bool pressed) { // TODO: Ideally we can get this passed into our callback! - const struct device *dev = device_get_binding(DT_INST_LABEL(0)); + const struct device *dev = DEVICE_DT_GET(DT_DRV_INST(0)); struct kscan_composite_data *data = dev->data; for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - if (device_get_binding(cfg->label) != child_dev) { + if (cfg->child != child_dev) { continue; } @@ -92,7 +82,7 @@ static int kscan_composite_configure(const struct device *dev, kscan_callback_t for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - kscan_config(device_get_binding(cfg->label), &kscan_composite_child_callback); + kscan_config(cfg->child, &kscan_composite_child_callback); } data->callback = callback; diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/drivers/kscan/kscan_gpio_demux.c index 3ca300a382b..812a899d89c 100644 --- a/app/drivers/kscan/kscan_gpio_demux.c +++ b/app/drivers/kscan/kscan_gpio_demux.c @@ -13,26 +13,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -struct kscan_gpio_item_config { - char *label; - gpio_pin_t pin; - gpio_flags_t flags; -}; - // Helper macro #define PWR_TWO(x) (1 << (x)) -// Define GPIO cfg -#define _KSCAN_GPIO_ITEM_CFG_INIT(n, prop, idx) \ - { \ - .label = DT_INST_GPIO_LABEL_BY_IDX(n, prop, idx), \ - .pin = DT_INST_GPIO_PIN_BY_IDX(n, prop, idx), \ - .flags = DT_INST_GPIO_FLAGS_BY_IDX(n, prop, idx), \ - } - // Define row and col cfg -#define _KSCAN_GPIO_INPUT_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, input_gpios, idx) -#define _KSCAN_GPIO_OUTPUT_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, output_gpios, idx) +#define _KSCAN_GPIO_CFG_INIT(n, prop, idx) GPIO_DT_SPEC_GET_BY_IDX(n, prop, idx), // Check debounce config #define CHECK_DEBOUNCE_CFG(n, a, b) COND_CODE_0(DT_INST_PROP(n, debounce_period), a, b) @@ -51,8 +36,8 @@ struct kscan_gpio_item_config { }; \ \ struct kscan_gpio_config_##n { \ - struct kscan_gpio_item_config rows[INST_MATRIX_INPUTS(n)]; \ - struct kscan_gpio_item_config cols[INST_DEMUX_GPIOS(n)]; \ + const struct gpio_dt_spec rows[INST_MATRIX_INPUTS(n)]; \ + const struct gpio_dt_spec cols[INST_DEMUX_GPIOS(n)]; \ }; \ \ struct kscan_gpio_data_##n { \ @@ -60,33 +45,16 @@ struct kscan_gpio_item_config { struct k_timer poll_timer; \ struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_work_delayable)) work; \ bool matrix_state[INST_MATRIX_INPUTS(n)][INST_MATRIX_OUTPUTS(n)]; \ - const struct device *rows[INST_MATRIX_INPUTS(n)]; \ - const struct device *cols[INST_MATRIX_OUTPUTS(n)]; \ const struct device *dev; \ }; \ /* IO/GPIO SETUP */ \ - /* gpio_input_devices are PHYSICAL IO devices */ \ - static const struct device **kscan_gpio_input_devices_##n(const struct device *dev) { \ - struct kscan_gpio_data_##n *data = dev->data; \ - return data->rows; \ - } \ - \ - static const struct kscan_gpio_item_config *kscan_gpio_input_configs_##n( \ - const struct device *dev) { \ + static const struct gpio_dt_spec *kscan_gpio_input_specs_##n(const struct device *dev) { \ const struct kscan_gpio_config_##n *cfg = dev->config; \ return cfg->rows; \ } \ \ - /* gpio_output_devices are PHYSICAL IO devices */ \ - static const struct device **kscan_gpio_output_devices_##n(const struct device *dev) { \ - struct kscan_gpio_data_##n *data = dev->data; \ - return data->cols; \ - } \ - \ - static const struct kscan_gpio_item_config *kscan_gpio_output_configs_##n( \ - const struct device *dev) { \ + static const struct gpio_dt_spec *kscan_gpio_output_specs_##n(const struct device *dev) { \ const struct kscan_gpio_config_##n *cfg = dev->config; \ - /* If row2col, rows = outputs & cols = inputs */ \ return cfg->cols; \ } \ /* POLLING SETUP */ \ @@ -106,21 +74,16 @@ struct kscan_gpio_item_config { /* Iterate over bits and set GPIOs accordingly */ \ for (uint8_t bit = 0; bit < INST_DEMUX_GPIOS(n); bit++) { \ uint8_t state = (o & (0b1 << bit)) >> bit; \ - const struct device *out_dev = kscan_gpio_output_devices_##n(dev)[bit]; \ - const struct kscan_gpio_item_config *out_cfg = \ - &kscan_gpio_output_configs_##n(dev)[bit]; \ - gpio_pin_set(out_dev, out_cfg->pin, state); \ + const struct gpio_dt_spec *out_spec = &kscan_gpio_output_specs_##n(dev)[bit]; \ + gpio_pin_set_dt(out_spec, state); \ } \ /* Let the col settle before reading the rows */ \ k_usleep(1); \ \ for (int i = 0; i < INST_MATRIX_INPUTS(n); i++) { \ - /* Get the input device (port) */ \ - const struct device *in_dev = kscan_gpio_input_devices_##n(dev)[i]; \ - /* Get the input device config (pin) */ \ - const struct kscan_gpio_item_config *in_cfg = \ - &kscan_gpio_input_configs_##n(dev)[i]; \ - read_state[i][o] = gpio_pin_get(in_dev, in_cfg->pin) > 0; \ + /* Get the input spec */ \ + const struct gpio_dt_spec *in_spec = &kscan_gpio_input_specs_##n(dev)[i]; \ + read_state[i][o] = gpio_pin_get_dt(in_spec) > 0; \ } \ } \ for (int r = 0; r < INST_MATRIX_INPUTS(n); r++) { \ @@ -146,8 +109,7 @@ struct kscan_gpio_item_config { kscan_gpio_read_##n(data->dev); \ } \ \ - static struct kscan_gpio_data_##n kscan_gpio_data_##n = { \ - .rows = {[INST_MATRIX_INPUTS(n) - 1] = NULL}, .cols = {[INST_DEMUX_GPIOS(n) - 1] = NULL}}; \ + static struct kscan_gpio_data_##n kscan_gpio_data_##n = {}; \ \ /* KSCAN API configure function */ \ static int kscan_gpio_configure_##n(const struct device *dev, kscan_callback_t callback) { \ @@ -185,20 +147,18 @@ struct kscan_gpio_item_config { struct kscan_gpio_data_##n *data = dev->data; \ int err; \ /* configure input devices*/ \ - const struct device **input_devices = kscan_gpio_input_devices_##n(dev); \ for (int i = 0; i < INST_MATRIX_INPUTS(n); i++) { \ - const struct kscan_gpio_item_config *in_cfg = &kscan_gpio_input_configs_##n(dev)[i]; \ - input_devices[i] = device_get_binding(in_cfg->label); \ - if (!input_devices[i]) { \ + const struct gpio_dt_spec *in_spec = &kscan_gpio_input_specs_##n(dev)[i]; \ + if (!device_is_ready(in_spec->port)) { \ LOG_ERR("Unable to find input GPIO device"); \ return -EINVAL; \ } \ - err = gpio_pin_configure(input_devices[i], in_cfg->pin, GPIO_INPUT | in_cfg->flags); \ + err = gpio_pin_configure_dt(in_spec, GPIO_INPUT); \ if (err) { \ - LOG_ERR("Unable to configure pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + LOG_ERR("Unable to configure pin %d for input", in_spec->pin); \ return err; \ } else { \ - LOG_DBG("Configured pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + LOG_DBG("Configured pin %d for input", in_spec->pin); \ } \ if (err) { \ LOG_ERR("Error adding the callback to the column device"); \ @@ -206,22 +166,18 @@ struct kscan_gpio_item_config { } \ } \ /* configure output devices*/ \ - const struct device **output_devices = kscan_gpio_output_devices_##n(dev); \ for (int o = 0; o < INST_DEMUX_GPIOS(n); o++) { \ - const struct kscan_gpio_item_config *out_cfg = &kscan_gpio_output_configs_##n(dev)[o]; \ - output_devices[o] = device_get_binding(out_cfg->label); \ - if (!output_devices[o]) { \ + const struct gpio_dt_spec *out_spec = &kscan_gpio_output_specs_##n(dev)[o]; \ + if (!device_is_ready(out_spec->port)) { \ LOG_ERR("Unable to find output GPIO device"); \ return -EINVAL; \ } \ - err = gpio_pin_configure(output_devices[o], out_cfg->pin, \ - GPIO_OUTPUT_ACTIVE | out_cfg->flags); \ + err = gpio_pin_configure_dt(out_spec, GPIO_OUTPUT_ACTIVE); \ if (err) { \ - LOG_ERR("Unable to configure pin %d on %s for output", out_cfg->pin, \ - out_cfg->label); \ + LOG_ERR("Unable to configure pin %d for output", out_spec->pin); \ return err; \ } else { \ - LOG_DBG("Configured pin %d on %s for output", out_cfg->pin, out_cfg->label); \ + LOG_DBG("Configured pin %d for output", out_spec->pin); \ } \ } \ data->dev = dev; \ @@ -240,8 +196,8 @@ struct kscan_gpio_item_config { }; \ \ static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ - .rows = {LISTIFY(INST_MATRIX_INPUTS(n), _KSCAN_GPIO_INPUT_CFG_INIT, (, ), n)}, \ - .cols = {LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, (, ), n)}, \ + .rows = {DT_FOREACH_PROP_ELEM(DT_DRV_INST(n), input_gpios, _KSCAN_GPIO_CFG_INIT)}, \ + .cols = {DT_FOREACH_PROP_ELEM(DT_DRV_INST(n), output_gpios, _KSCAN_GPIO_CFG_INIT)}, \ }; \ \ DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, NULL, &kscan_gpio_data_##n, \ diff --git a/app/drivers/sensor/battery/battery_voltage_divider.c b/app/drivers/sensor/battery/battery_voltage_divider.c index bc35d002344..655af3dbd74 100644 --- a/app/drivers/sensor/battery/battery_voltage_divider.c +++ b/app/drivers/sensor/battery/battery_voltage_divider.c @@ -8,9 +8,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include #include "battery_common.h" @@ -21,22 +21,15 @@ struct io_channel_config { uint8_t channel; }; -struct gpio_channel_config { - const char *label; - uint8_t pin; - uint8_t flags; -}; - struct bvd_config { struct io_channel_config io_channel; - struct gpio_channel_config power_gpios; + struct gpio_dt_spec power; uint32_t output_ohm; uint32_t full_ohm; }; struct bvd_data { const struct device *adc; - const struct device *gpio; struct adc_channel_cfg acc; struct adc_sequence as; struct battery_value value; @@ -56,19 +49,19 @@ static int bvd_sample_fetch(const struct device *dev, enum sensor_channel chan) int rc = 0; - // Enable power GPIO if present - if (drv_data->gpio) { - rc = gpio_pin_set(drv_data->gpio, drv_cfg->power_gpios.pin, 1); - - if (rc != 0) { - LOG_DBG("Failed to enable ADC power GPIO: %d", rc); - return rc; - } +#if DT_INST_NODE_HAS_PROP(0, power_gpios) + // Enable power before sampling + rc = gpio_pin_set_dt(&drv_cfg->power, 1); - // wait for any capacitance to charge up - k_sleep(K_MSEC(10)); + if (rc != 0) { + LOG_DBG("Failed to enable ADC power GPIO: %d", rc); + return rc; } + // wait for any capacitance to charge up + k_sleep(K_MSEC(10)); +#endif // DT_INST_NODE_HAS_PROP(0, power_gpios) + // Read ADC rc = adc_read(drv_data->adc, as); as->calibrate = false; @@ -90,15 +83,15 @@ static int bvd_sample_fetch(const struct device *dev, enum sensor_channel chan) LOG_DBG("Failed to read ADC: %d", rc); } +#if DT_INST_NODE_HAS_PROP(0, power_gpios) // Disable power GPIO if present - if (drv_data->gpio) { - int rc2 = gpio_pin_set(drv_data->gpio, drv_cfg->power_gpios.pin, 0); + int rc2 = gpio_pin_set_dt(&drv_cfg->power, 0); - if (rc2 != 0) { - LOG_DBG("Failed to disable ADC power GPIO: %d", rc2); - return rc2; - } + if (rc2 != 0) { + LOG_DBG("Failed to disable ADC power GPIO: %d", rc2); + return rc2; } +#endif // DT_INST_NODE_HAS_PROP(0, power_gpios) return rc; } @@ -125,20 +118,17 @@ static int bvd_init(const struct device *dev) { int rc = 0; - if (drv_cfg->power_gpios.label) { - drv_data->gpio = device_get_binding(drv_cfg->power_gpios.label); - if (drv_data->gpio == NULL) { - LOG_ERR("Failed to get GPIO %s", drv_cfg->power_gpios.label); - return -ENODEV; - } - rc = gpio_pin_configure(drv_data->gpio, drv_cfg->power_gpios.pin, - GPIO_OUTPUT_INACTIVE | drv_cfg->power_gpios.flags); - if (rc != 0) { - LOG_ERR("Failed to control feed %s.%u: %d", drv_cfg->power_gpios.label, - drv_cfg->power_gpios.pin, rc); - return rc; - } +#if DT_INST_NODE_HAS_PROP(0, power_gpios) + if (!device_is_ready(drv_cfg->power.port)) { + LOG_ERR("GPIO port for power control is not ready"); + return -ENODEV; + } + rc = gpio_pin_configure_dt(&drv_cfg->power, GPIO_OUTPUT_INACTIVE); + if (rc != 0) { + LOG_ERR("Failed to control feed %u: %d", drv_cfg->power.pin, rc); + return rc; } +#endif // DT_INST_NODE_HAS_PROP(0, power_gpios) drv_data->as = (struct adc_sequence){ .channels = BIT(0), @@ -175,12 +165,7 @@ static const struct bvd_config bvd_cfg = { DT_IO_CHANNELS_INPUT(DT_DRV_INST(0)), }, #if DT_INST_NODE_HAS_PROP(0, power_gpios) - .power_gpios = - { - DT_INST_GPIO_LABEL(0, power_gpios), - DT_INST_GPIO_PIN(0, power_gpios), - DT_INST_GPIO_FLAGS(0, power_gpios), - }, + .power = GPIO_DT_SPEC_INST_GET(0, power_gpios), #endif .output_ohm = DT_INST_PROP(0, output_ohms), .full_ohm = DT_INST_PROP(0, full_ohms), diff --git a/app/drivers/sensor/ec11/ec11.c b/app/drivers/sensor/ec11/ec11.c index 5f26ebc3aab..7091f73e739 100644 --- a/app/drivers/sensor/ec11/ec11.c +++ b/app/drivers/sensor/ec11/ec11.c @@ -19,11 +19,9 @@ LOG_MODULE_REGISTER(EC11, CONFIG_SENSOR_LOG_LEVEL); static int ec11_get_ab_state(const struct device *dev) { - struct ec11_data *drv_data = dev->data; const struct ec11_config *drv_cfg = dev->config; - return (gpio_pin_get(drv_data->a, drv_cfg->a_pin) << 1) | - gpio_pin_get(drv_data->b, drv_cfg->b_pin); + return (gpio_pin_get_dt(&drv_cfg->a) << 1) | gpio_pin_get_dt(&drv_cfg->b); } static int ec11_sample_fetch(const struct device *dev, enum sensor_channel chan) { @@ -94,27 +92,25 @@ int ec11_init(const struct device *dev) { struct ec11_data *drv_data = dev->data; const struct ec11_config *drv_cfg = dev->config; - LOG_DBG("A: %s %d B: %s %d resolution %d", drv_cfg->a_label, drv_cfg->a_pin, drv_cfg->b_label, - drv_cfg->b_pin, drv_cfg->resolution); + LOG_DBG("A: %s %d B: %s %d resolution %d", drv_cfg->a.port->name, drv_cfg->a.pin, + drv_cfg->b.port->name, drv_cfg->b.pin, drv_cfg->resolution); - drv_data->a = device_get_binding(drv_cfg->a_label); - if (drv_data->a == NULL) { - LOG_ERR("Failed to get pointer to A GPIO device"); + if (!device_is_ready(drv_cfg->a.port)) { + LOG_ERR("A GPIO device is not ready"); return -EINVAL; } - drv_data->b = device_get_binding(drv_cfg->b_label); - if (drv_data->b == NULL) { - LOG_ERR("Failed to get pointer to B GPIO device"); + if (!device_is_ready(drv_cfg->b.port)) { + LOG_ERR("B GPIO device is not ready"); return -EINVAL; } - if (gpio_pin_configure(drv_data->a, drv_cfg->a_pin, drv_cfg->a_flags | GPIO_INPUT)) { + if (gpio_pin_configure_dt(&drv_cfg->a, GPIO_INPUT)) { LOG_DBG("Failed to configure A pin"); return -EIO; } - if (gpio_pin_configure(drv_data->b, drv_cfg->b_pin, drv_cfg->b_flags | GPIO_INPUT)) { + if (gpio_pin_configure_dt(&drv_cfg->b, GPIO_INPUT)) { LOG_DBG("Failed to configure B pin"); return -EIO; } @@ -134,12 +130,8 @@ int ec11_init(const struct device *dev) { #define EC11_INST(n) \ struct ec11_data ec11_data_##n; \ const struct ec11_config ec11_cfg_##n = { \ - .a_label = DT_INST_GPIO_LABEL(n, a_gpios), \ - .a_pin = DT_INST_GPIO_PIN(n, a_gpios), \ - .a_flags = DT_INST_GPIO_FLAGS(n, a_gpios), \ - .b_label = DT_INST_GPIO_LABEL(n, b_gpios), \ - .b_pin = DT_INST_GPIO_PIN(n, b_gpios), \ - .b_flags = DT_INST_GPIO_FLAGS(n, b_gpios), \ + .a = GPIO_DT_SPEC_INST_GET(n, a_gpios), \ + .b = GPIO_DT_SPEC_INST_GET(n, b_gpios), \ COND_CODE_0(DT_INST_NODE_HAS_PROP(n, resolution), (1), (DT_INST_PROP(n, resolution))), \ }; \ DEVICE_DT_INST_DEFINE(n, ec11_init, NULL, &ec11_data_##n, &ec11_cfg_##n, POST_KERNEL, \ diff --git a/app/drivers/sensor/ec11/ec11.h b/app/drivers/sensor/ec11/ec11.h index 04750df54cb..82c21572329 100644 --- a/app/drivers/sensor/ec11/ec11.h +++ b/app/drivers/sensor/ec11/ec11.h @@ -11,20 +11,13 @@ #include struct ec11_config { - const char *a_label; - const uint8_t a_pin; - const uint8_t a_flags; - - const char *b_label; - const uint8_t b_pin; - const uint8_t b_flags; + const struct gpio_dt_spec a; + const struct gpio_dt_spec b; const uint8_t resolution; }; struct ec11_data { - const struct device *a; - const struct device *b; uint8_t ab_state; int8_t pulses; int8_t ticks; diff --git a/app/drivers/sensor/ec11/ec11_trigger.c b/app/drivers/sensor/ec11/ec11_trigger.c index 804a21d9123..f9384a667e5 100644 --- a/app/drivers/sensor/ec11/ec11_trigger.c +++ b/app/drivers/sensor/ec11/ec11_trigger.c @@ -20,18 +20,15 @@ extern struct ec11_data ec11_driver; LOG_MODULE_DECLARE(EC11, CONFIG_SENSOR_LOG_LEVEL); static inline void setup_int(const struct device *dev, bool enable) { - struct ec11_data *data = dev->data; const struct ec11_config *cfg = dev->config; LOG_DBG("enabled %s", (enable ? "true" : "false")); - if (gpio_pin_interrupt_configure(data->a, cfg->a_pin, - enable ? GPIO_INT_EDGE_BOTH : GPIO_INT_DISABLE)) { + if (gpio_pin_interrupt_configure_dt(&cfg->a, enable ? GPIO_INT_EDGE_BOTH : GPIO_INT_DISABLE)) { LOG_WRN("Unable to set A pin GPIO interrupt"); } - if (gpio_pin_interrupt_configure(data->b, cfg->b_pin, - enable ? GPIO_INT_EDGE_BOTH : GPIO_INT_DISABLE)) { + if (gpio_pin_interrupt_configure_dt(&cfg->b, enable ? GPIO_INT_EDGE_BOTH : GPIO_INT_DISABLE)) { LOG_WRN("Unable to set A pin GPIO interrupt"); } } @@ -121,16 +118,16 @@ int ec11_init_interrupt(const struct device *dev) { drv_data->dev = dev; /* setup gpio interrupt */ - gpio_init_callback(&drv_data->a_gpio_cb, ec11_a_gpio_callback, BIT(drv_cfg->a_pin)); + gpio_init_callback(&drv_data->a_gpio_cb, ec11_a_gpio_callback, BIT(drv_cfg->a.pin)); - if (gpio_add_callback(drv_data->a, &drv_data->a_gpio_cb) < 0) { + if (gpio_add_callback(drv_cfg->a.port, &drv_data->a_gpio_cb) < 0) { LOG_DBG("Failed to set A callback!"); return -EIO; } - gpio_init_callback(&drv_data->b_gpio_cb, ec11_b_gpio_callback, BIT(drv_cfg->b_pin)); + gpio_init_callback(&drv_data->b_gpio_cb, ec11_b_gpio_callback, BIT(drv_cfg->b.pin)); - if (gpio_add_callback(drv_data->b, &drv_data->b_gpio_cb) < 0) { + if (gpio_add_callback(drv_cfg->b.port, &drv_data->b_gpio_cb) < 0) { LOG_DBG("Failed to set B callback!"); return -EIO; } diff --git a/app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml b/app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml deleted file mode 100644 index 75e19c49745..00000000000 --- a/app/drivers/zephyr/dts/bindings/gpio/microchip,mcp23017.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (c) 2020 Geanix ApS -# -# SPDX-License-Identifier: Apache-2.0 -# - -description: > - This is a representation of the Microchip MCP23017 I2C Gpio Expander. - -compatible: "microchip,mcp23017" - -include: [gpio-controller.yaml, i2c-device.yaml] - -properties: - label: - required: true - - "#gpio-cells": - const: 2 - - ngpios: - type: int - required: true - const: 16 - description: Number of gpios supported - -gpio-cells: - - pin - - flags diff --git a/app/drivers/zephyr/dts/bindings/gpio/zmk,gpio-595.yaml b/app/drivers/zephyr/dts/bindings/gpio/zmk,gpio-595.yaml index 43fa751103e..605c969df59 100644 --- a/app/drivers/zephyr/dts/bindings/gpio/zmk,gpio-595.yaml +++ b/app/drivers/zephyr/dts/bindings/gpio/zmk,gpio-595.yaml @@ -12,9 +12,6 @@ compatible: "zmk,gpio-595" include: [gpio-controller.yaml, spi-device.yaml] properties: - label: - required: true - "#gpio-cells": const: 2 diff --git a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml b/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml index a8904360f92..28b7541b819 100644 --- a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml +++ b/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml @@ -4,8 +4,3 @@ description: Battery SoC monitoring using nRF VDDH compatible: "zmk,battery-nrf-vddh" - -properties: - label: - required: true - type: string diff --git a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-voltage-divider.yaml b/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-voltage-divider.yaml index c4c6f80c5e8..d9e07b797e8 100644 --- a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-voltage-divider.yaml +++ b/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-voltage-divider.yaml @@ -6,8 +6,3 @@ description: Battery SoC monitoring using voltage divider compatible: "zmk,battery-voltage-divider" include: voltage-divider.yaml - -properties: - label: - required: true - type: string diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 1195b94320e..a47cd505643 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -25,7 +25,7 @@ int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pr #define ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) \ { \ - .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(drv_inst, bindings, idx)), \ + .behavior_dev = DT_PROP(DT_PHANDLE_BY_IDX(drv_inst, bindings, idx), label), \ .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(drv_inst, bindings, idx, param1), (0), \ (DT_PHA_BY_IDX(drv_inst, bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(drv_inst, bindings, idx, param2), (0), \ diff --git a/app/include/zmk/kscan.h b/app/include/zmk/kscan.h index 33526008ee1..eebe41e743b 100644 --- a/app/include/zmk/kscan.h +++ b/app/include/zmk/kscan.h @@ -6,4 +6,6 @@ #pragma once -int zmk_kscan_init(char *name); +#include + +int zmk_kscan_init(const struct device *dev); diff --git a/app/src/activity.c b/app/src/activity.c index 41fe2e15dc4..46af56fbd84 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -74,8 +74,8 @@ void activity_work_handler(struct k_work *work) { } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ if (inactive_time > MAX_IDLE_MS) { - set_state(ZMK_ACTIVITY_IDLE); - } + set_state(ZMK_ACTIVITY_IDLE); + } } K_WORK_DEFINE(activity_work, activity_work_handler); diff --git a/app/src/behavior_queue.c b/app/src/behavior_queue.c index 971816f2cd3..1511e755d4f 100644 --- a/app/src/behavior_queue.c +++ b/app/src/behavior_queue.c @@ -28,8 +28,8 @@ static void behavior_queue_process_next(struct k_work *work) { struct q_item item = {.wait = 0}; while (k_msgq_get(&zmk_behavior_queue_msgq, &item, K_NO_WAIT) == 0) { - LOG_DBG("Invoking %s: 0x%02x 0x%02x", item.binding.behavior_dev, - item.binding.param1, item.binding.param2); + LOG_DBG("Invoking %s: 0x%02x 0x%02x", item.binding.behavior_dev, item.binding.param1, + item.binding.param2); struct zmk_behavior_binding_event event = {.position = item.position, .timestamp = k_uptime_get()}; diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 71cf23225f3..6d44b5f5e9f 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -16,7 +16,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include - #include #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 8ee5bb5c30b..4c9fd71186d 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -166,9 +166,10 @@ static int behavior_caps_word_init(const struct device *dev) { #define CAPS_WORD_LABEL(i, _n) DT_INST_LABEL(i) #define PARSE_BREAK(i) \ - {.page = ZMK_HID_USAGE_PAGE(i), \ - .id = ZMK_HID_USAGE_ID(i), \ - .implicit_modifiers = SELECT_MODS(i)} + { \ + .page = ZMK_HID_USAGE_PAGE(i), .id = ZMK_HID_USAGE_ID(i), \ + .implicit_modifiers = SELECT_MODS(i) \ + } #define BREAK_ITEM(i, n) PARSE_BREAK(DT_INST_PROP_BY_IDX(n, continue_list, i)) @@ -177,7 +178,7 @@ static int behavior_caps_word_init(const struct device *dev) { static struct behavior_caps_word_config behavior_caps_word_config_##n = { \ .index = n, \ .mods = DT_INST_PROP_OR(n, mods, MOD_LSFT), \ - .continuations = {LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, (,), n)}, \ + .continuations = {LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, (, ), n)}, \ .continuations_count = DT_INST_PROP_LEN(n, continue_list), \ }; \ DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, NULL, &behavior_caps_word_data_##n, \ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 6ea2fe97c7b..30350ef24ce 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -700,8 +700,8 @@ static int behavior_hold_tap_init(const struct device *dev) { #define KP_INST(n) \ static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ - .hold_behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(n, bindings, 0)), \ - .tap_behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(n, bindings, 1)), \ + .hold_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label), \ + .tap_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label), \ .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ .global_quick_tap = DT_INST_PROP(n, global_quick_tap), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index c86d732aab6..e84f1fc89bb 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -44,13 +44,13 @@ struct behavior_macro_config { struct zmk_behavior_binding bindings[]; }; -#define TAP_MODE DT_LABEL(DT_INST(0, zmk_macro_control_mode_tap)) -#define PRESS_MODE DT_LABEL(DT_INST(0, zmk_macro_control_mode_press)) -#define REL_MODE DT_LABEL(DT_INST(0, zmk_macro_control_mode_release)) +#define TAP_MODE DT_PROP(DT_INST(0, zmk_macro_control_mode_tap), label) +#define PRESS_MODE DT_PROP(DT_INST(0, zmk_macro_control_mode_press), label) +#define REL_MODE DT_PROP(DT_INST(0, zmk_macro_control_mode_release), label) -#define TAP_TIME DT_LABEL(DT_INST(0, zmk_macro_control_tap_time)) -#define WAIT_TIME DT_LABEL(DT_INST(0, zmk_macro_control_wait_time)) -#define WAIT_REL DT_LABEL(DT_INST(0, zmk_macro_pause_for_release)) +#define TAP_TIME DT_PROP(DT_INST(0, zmk_macro_control_tap_time), label) +#define WAIT_TIME DT_PROP(DT_INST(0, zmk_macro_control_wait_time), label) +#define WAIT_REL DT_PROP(DT_INST(0, zmk_macro_pause_for_release), label) #define ZM_IS_NODE_MATCH(a, b) (strcmp(a, b) == 0) #define IS_TAP_MODE(dev) ZM_IS_NODE_MATCH(dev, TAP_MODE) @@ -169,7 +169,7 @@ static const struct behavior_driver_api behavior_macro_driver_api = { #define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, DT_DRV_INST(drv_inst)) #define TRANSFORMED_BEHAVIORS(n) \ - {LISTIFY(DT_PROP_LEN(DT_DRV_INST(n), bindings), BINDING_WITH_COMMA, (,), n)}, + {LISTIFY(DT_PROP_LEN(DT_DRV_INST(n), bindings), BINDING_WITH_COMMA, (, ), n)}, #define MACRO_INST(n) \ static struct behavior_macro_state behavior_macro_state_##n = {}; \ diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index e5ba346e536..d540abd93af 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -81,7 +81,7 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } #define _TRANSFORM_ENTRY(idx, node) \ { \ - .behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(node, bindings, idx)), \ + .behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(node, bindings, idx), label), \ .param1 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param1), (0), \ (DT_INST_PHA_BY_IDX(node, bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param2), (0), \ diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index ddb4aeabfe7..fc685124860 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -240,7 +240,7 @@ static int behavior_tap_dance_init(const struct device *dev) { #define _TRANSFORM_ENTRY(idx, node) ZMK_KEYMAP_EXTRACT_BINDING(idx, node) #define TRANSFORMED_BINDINGS(node) \ - { LISTIFY(DT_INST_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, (,), DT_DRV_INST(node)) } + { LISTIFY(DT_INST_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, (, ), DT_DRV_INST(node)) } #define KP_INST(n) \ static struct zmk_behavior_binding \ diff --git a/app/src/display/main.c b/app/src/display/main.c index 52fa3c691ee..e34f8a533cc 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -12,7 +12,7 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#include +#include #include #include "theme.h" @@ -21,9 +21,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -#define ZMK_DISPLAY_NAME CONFIG_LV_Z_DISPLAY_DEV_NAME - -static const struct device *display; +static const struct device *display = DEVICE_DT_GET(DT_CHOSEN(zephyr_display)); static bool initialized = false; static lv_obj_t *screen; @@ -103,8 +101,7 @@ static void initialize_theme() { void initialize_display(struct k_work *work) { LOG_DBG(""); - display = device_get_binding(ZMK_DISPLAY_NAME); - if (display == NULL) { + if (!device_is_ready(display)) { LOG_ERR("Failed to find display device"); return; } @@ -165,4 +162,4 @@ int display_event_handler(const zmk_event_t *eh) { ZMK_LISTENER(display, display_event_handler); ZMK_SUBSCRIPTION(display, zmk_activity_state_changed); -#endif /* IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) */ \ No newline at end of file +#endif /* IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE) */ diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 654f683fa68..e35714da10b 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -22,14 +22,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct ext_power_generic_config { - const char *label; - const uint8_t pin; - const uint8_t flags; + const struct gpio_dt_spec control; const uint16_t init_delay_ms; }; struct ext_power_generic_data { - const struct device *gpio; bool status; #if IS_ENABLED(CONFIG_SETTINGS) bool settings_init; @@ -39,10 +36,10 @@ struct ext_power_generic_data { #if IS_ENABLED(CONFIG_SETTINGS) static void ext_power_save_state_work(struct k_work *work) { char setting_path[40]; - const struct device *ext_power = device_get_binding(DT_INST_LABEL(0)); + const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0)); struct ext_power_generic_data *data = ext_power->data; - snprintf(setting_path, 40, "ext_power/state/%s", DT_INST_LABEL(0)); + snprintf(setting_path, 40, "ext_power/state/%s", DT_INST_PROP(0, label)); settings_save_one(setting_path, &data->status, sizeof(data->status)); } @@ -62,7 +59,7 @@ static int ext_power_generic_enable(const struct device *dev) { struct ext_power_generic_data *data = dev->data; const struct ext_power_generic_config *config = dev->config; - if (gpio_pin_set(data->gpio, config->pin, 1)) { + if (gpio_pin_set_dt(&config->control, 1)) { LOG_WRN("Failed to set ext-power control pin"); return -EIO; } @@ -74,7 +71,8 @@ static int ext_power_generic_disable(const struct device *dev) { struct ext_power_generic_data *data = dev->data; const struct ext_power_generic_config *config = dev->config; - if (gpio_pin_set(data->gpio, config->pin, 0)) { + if (gpio_pin_set_dt(&config->control, 0)) { + LOG_WRN("Failed to set ext-power control pin"); LOG_WRN("Failed to clear ext-power control pin"); return -EIO; } @@ -93,7 +91,7 @@ static int ext_power_settings_set(const char *name, size_t len, settings_read_cb const char *next; int rc; - if (settings_name_steq(name, DT_INST_LABEL(0), &next) && !next) { + if (settings_name_steq(name, DT_INST_PROP(0, label), &next) && !next) { const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0)); struct ext_power_generic_data *data = ext_power->data; @@ -106,7 +104,7 @@ static int ext_power_settings_set(const char *name, size_t len, settings_read_cb data->settings_init = true; if (ext_power == NULL) { - LOG_ERR("Unable to retrieve ext_power device: %s", DT_INST_LABEL(0)); + LOG_ERR("Unable to retrieve ext_power device: %s", DT_INST_PROP(0, label)); return -EIO; } @@ -131,13 +129,7 @@ static int ext_power_generic_init(const struct device *dev) { struct ext_power_generic_data *data = dev->data; const struct ext_power_generic_config *config = dev->config; - data->gpio = device_get_binding(config->label); - if (data->gpio == NULL) { - LOG_ERR("Failed to get ext-power control device"); - return -EINVAL; - } - - if (gpio_pin_configure(data->gpio, config->pin, config->flags | GPIO_OUTPUT)) { + if (gpio_pin_configure_dt(&config->control, GPIO_OUTPUT_INACTIVE)) { LOG_ERR("Failed to configure ext-power control pin"); return -EIO; } @@ -190,9 +182,7 @@ static int ext_power_generic_pm_action(const struct device *dev, enum pm_device_ #endif /* CONFIG_PM_DEVICE */ static const struct ext_power_generic_config config = { - .label = DT_INST_GPIO_LABEL(0, control_gpios), - .pin = DT_INST_GPIO_PIN(0, control_gpios), - .flags = DT_INST_GPIO_FLAGS(0, control_gpios), + .control = GPIO_DT_SPEC_INST_GET(0, control_gpios), .init_delay_ms = DT_INST_PROP_OR(0, init_delay_ms, 0)}; static struct ext_power_generic_data data = { diff --git a/app/src/keymap.c b/app/src/keymap.c index 99483592278..c4e304d4b31 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -42,7 +42,7 @@ static uint8_t _zmk_keymap_layer_default = 0; #if ZMK_KEYMAP_HAS_SENSORS #define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ { \ - .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(layer, sensor_bindings, idx)), \ + .behavior_dev = DT_PROP(DT_PHANDLE_BY_IDX(layer, sensor_bindings, idx), label), \ .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param1), (0), \ (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param2), (0), \ @@ -57,7 +57,8 @@ static uint8_t _zmk_keymap_layer_default = 0; #endif /* ZMK_KEYMAP_HAS_SENSORS */ -#define LAYER_LABEL(node) COND_CODE_0(DT_NODE_HAS_PROP(node, label), (NULL), (DT_LABEL(node))), +#define LAYER_LABEL(node) \ + COND_CODE_0(DT_NODE_HAS_PROP(node, label), (NULL), (DT_PROP(node, label))), // State diff --git a/app/src/kscan.c b/app/src/kscan.c index f9db8b1ced6..b07133203ca 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -58,8 +58,7 @@ void zmk_kscan_process_msgq(struct k_work *item) { } } -int zmk_kscan_init(char *name) { - const struct device *dev = device_get_binding(name); +int zmk_kscan_init(const struct device *dev) { if (dev == NULL) { LOG_ERR("Failed to get the KSCAN device"); return -EINVAL; diff --git a/app/src/main.c b/app/src/main.c index 8ea67057771..3fd6b116608 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -17,12 +17,10 @@ LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -#define ZMK_KSCAN_DEV DT_LABEL(ZMK_MATRIX_NODE_ID) - void main(void) { LOG_INF("Welcome to ZMK!\n"); - if (zmk_kscan_init(ZMK_KSCAN_DEV) != 0) { + if (zmk_kscan_init(DEVICE_DT_GET(ZMK_MATRIX_NODE_ID)) != 0) { return; } diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 47c3658e915..0ed2087a49c 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -27,8 +27,14 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#define STRIP_LABEL DT_LABEL(DT_CHOSEN(zmk_underglow)) -#define STRIP_NUM_PIXELS DT_PROP(DT_CHOSEN(zmk_underglow), chain_length) +#if !DT_CHOSEN(zmk_underglow) + +#error "A zmk,underglow chosen node must be declared" + +#endif + +#define STRIP_CHOSEN DT_CHOSEN(zmk_underglow) +#define STRIP_NUM_PIXELS DT_PROP(STRIP_CHOSEN, chain_length) #define HUE_MAX 360 #define SAT_MAX 100 @@ -230,13 +236,7 @@ static struct k_work_delayable underglow_save_work; #endif static int zmk_rgb_underglow_init(const struct device *_arg) { - led_strip = device_get_binding(STRIP_LABEL); - if (led_strip) { - LOG_INF("Found LED strip device %s", STRIP_LABEL); - } else { - LOG_ERR("LED strip device %s not found", STRIP_LABEL); - return -EINVAL; - } + led_strip = DEVICE_DT_GET(STRIP_CHOSEN); #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER) ext_power = device_get_binding("EXT_POWER"); diff --git a/app/src/sensors.c b/app/src/sensors.c index 9873de4f1cd..efae2bd975b 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -65,7 +65,8 @@ static void zmk_sensors_init_item(const char *node, uint8_t i, uint8_t abs_i) { sensor_trigger_set(sensors[i].dev, &sensors[i].trigger, zmk_sensors_trigger_handler); } -#define _SENSOR_INIT(node) zmk_sensors_init_item(DT_LABEL(node), local_index++, absolute_index++); +#define _SENSOR_INIT(node) \ + zmk_sensors_init_item(DT_PROP(node, label), local_index++, absolute_index++); #define SENSOR_INIT(idx, _i) \ COND_CODE_1(DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_BY_IDX(idx), okay), \ (_SENSOR_INIT(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), (absolute_index++;)) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 5b952dfcd38..ac073c59869 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -377,8 +377,7 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) { bt_uuid_to_str(&uuid.uuid, uuid_str, sizeof(uuid_str)); bt_uuid_to_str(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID), service_uuid_str, sizeof(service_uuid_str)); - LOG_DBG("UUID %s does not match split UUID: %s", uuid_str, - service_uuid_str); + LOG_DBG("UUID %s does not match split UUID: %s", uuid_str, service_uuid_str); continue; } @@ -433,8 +432,7 @@ static void split_central_device_found(const bt_addr_le_t *addr, int8_t rssi, ui char dev[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(addr, dev, sizeof(dev)); - LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", dev, type, ad->len, - rssi); + LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", dev, type, ad->len, rssi); /* We're only interested in connectable events */ if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index fa4b77185fa..f7b0d587b26 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -60,8 +60,8 @@ static ssize_t split_svc_run_behavior(struct bt_conn *conn, const struct bt_gatt .param2 = payload->data.param2, .behavior_dev = payload->behavior_dev, }; - LOG_DBG("%s with params %d %d: pressed? %d", binding.behavior_dev, - binding.param1, binding.param2, payload->data.state); + LOG_DBG("%s with params %d %d: pressed? %d", binding.behavior_dev, binding.param1, + binding.param2, payload->data.state); struct zmk_behavior_binding_event event = {.position = payload->data.position, .timestamp = k_uptime_get()}; int err; diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index e65bb296c9c..6d026f2b0e5 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -258,8 +258,8 @@ An example of this can be seen below, taking the `#define KP_INST(n)` from the h #define KP_INST(n) \ static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ - .hold_behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(n, bindings, 0)), \ - .tap_behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(n, bindings, 1)), \ + .hold_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label), \ + .tap_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label), \ .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ From 4ff1a4d3ea98390325e6330802e56381f9e910d5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 8 Oct 2022 01:52:25 -0400 Subject: [PATCH 0618/1130] refactor: Move to updated Docker images. --- .devcontainer/Dockerfile | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/hardware-metadata-validation.yml | 2 +- .github/workflows/test.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 21a7fd5a90b..5b69e18043d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/zmkfirmware/zmk-dev-arm:3.0 +FROM docker.io/zmkfirmware/zmk-dev-arm:3.2 COPY .bashrc tmp RUN mv /tmp/.bashrc ~/.bashrc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6305b7412c1..f472f755c9b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: if: ${{ always() }} runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:3.0 + image: docker.io/zmkfirmware/zmk-build-arm:3.2 needs: compile-matrix strategy: matrix: diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index c6566feb932..4b10a28b12c 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -29,7 +29,7 @@ jobs: validate-metadata: runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-dev-arm:3.0 + image: docker.io/zmkfirmware/zmk-dev-arm:3.2 steps: - uses: actions/checkout@v3 - name: Install dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 38c61eeaf56..e8a9d2209e4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }} runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:3.0 + image: docker.io/zmkfirmware/zmk-build-arm:3.2 steps: - name: Checkout uses: actions/checkout@v3 From 31f664ffec0e90fe2123e1dfcaca4b34654d4714 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 23 Dec 2021 23:45:29 -0500 Subject: [PATCH 0619/1130] fix(boards): Base config/overlay for rp2040 boards Baseline config and overlay for the following: * `rpi_pico` * `adafruit_kb2040` * `sparkfun_pro_micro_rp2040` * `adafruit_qt_py_rp2040` * `seeeduino_xiao_rp2040` * `boardsource_blok` * `01space_rp2040_042lcd` Co-authored-by: Joel Spadin --- app/boards/01space_rp2040_042lcd.conf | 6 ++++++ app/boards/01space_rp2040_042lcd.overlay | 9 +++++++++ app/boards/adafruit_kb2040.conf | 4 ++++ app/boards/adafruit_kb2040.overlay | 9 +++++++++ app/boards/adafruit_qt_py_rp2040.conf | 4 ++++ app/boards/adafruit_qt_py_rp2040.overlay | 9 +++++++++ .../adafruit_kb2040/adafruit_kb2040.zmk.yml | 9 +++++++++ .../adafruit_qt_py_rp2040.zmk.yml | 9 +++++++++ .../boardsource_blok/boardsource_blok.zmk.yml | 9 +++++++++ .../seeeduino_xiao_rp2040.zmk.yml | 9 +++++++++ .../sparkfun_pro_micro_rp2040.zmk.yml | 9 +++++++++ app/boards/boardsource_blok.conf | 4 ++++ app/boards/boardsource_blok.overlay | 9 +++++++++ app/boards/rpi_pico.conf | 5 +++++ app/boards/rpi_pico.overlay | 8 ++++++++ app/boards/seeeduino_xiao_rp2040.conf | 4 ++++ app/boards/seeeduino_xiao_rp2040.overlay | 9 +++++++++ app/boards/sparkfun_pro_micro_rp2040.conf | 4 ++++ app/boards/sparkfun_pro_micro_rp2040.overlay | 9 +++++++++ app/boards/usb_console.dtsi | 20 +++++++++++++++++++ 20 files changed, 158 insertions(+) create mode 100644 app/boards/01space_rp2040_042lcd.conf create mode 100644 app/boards/01space_rp2040_042lcd.overlay create mode 100644 app/boards/adafruit_kb2040.conf create mode 100644 app/boards/adafruit_kb2040.overlay create mode 100644 app/boards/adafruit_qt_py_rp2040.conf create mode 100644 app/boards/adafruit_qt_py_rp2040.overlay create mode 100644 app/boards/arm/adafruit_kb2040/adafruit_kb2040.zmk.yml create mode 100644 app/boards/arm/adafruit_qt_py_rp2040/adafruit_qt_py_rp2040.zmk.yml create mode 100644 app/boards/arm/boardsource_blok/boardsource_blok.zmk.yml create mode 100644 app/boards/arm/seeeduino_xiao_rp2040/seeeduino_xiao_rp2040.zmk.yml create mode 100644 app/boards/arm/sparkfun_pro_micro_rp2040/sparkfun_pro_micro_rp2040.zmk.yml create mode 100644 app/boards/boardsource_blok.conf create mode 100644 app/boards/boardsource_blok.overlay create mode 100644 app/boards/rpi_pico.conf create mode 100644 app/boards/rpi_pico.overlay create mode 100644 app/boards/seeeduino_xiao_rp2040.conf create mode 100644 app/boards/seeeduino_xiao_rp2040.overlay create mode 100644 app/boards/sparkfun_pro_micro_rp2040.conf create mode 100644 app/boards/sparkfun_pro_micro_rp2040.overlay create mode 100644 app/boards/usb_console.dtsi diff --git a/app/boards/01space_rp2040_042lcd.conf b/app/boards/01space_rp2040_042lcd.conf new file mode 100644 index 00000000000..c520a3b7339 --- /dev/null +++ b/app/boards/01space_rp2040_042lcd.conf @@ -0,0 +1,6 @@ +CONFIG_ZMK_DISPLAY=y +CONFIG_LV_FONT_UNSCII_8=n +CONFIG_ZMK_USB=y +CONFIG_I2C=y +CONFIG_I2C_DW=y +CONFIG_LV_Z_VDB_SIZE=50 diff --git a/app/boards/01space_rp2040_042lcd.overlay b/app/boards/01space_rp2040_042lcd.overlay new file mode 100644 index 00000000000..d89e53f4a8e --- /dev/null +++ b/app/boards/01space_rp2040_042lcd.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + +&xiao_serial { status = "disabled"; }; diff --git a/app/boards/adafruit_kb2040.conf b/app/boards/adafruit_kb2040.conf new file mode 100644 index 00000000000..21c1893d91f --- /dev/null +++ b/app/boards/adafruit_kb2040.conf @@ -0,0 +1,4 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_ZMK_USB=y diff --git a/app/boards/adafruit_kb2040.overlay b/app/boards/adafruit_kb2040.overlay new file mode 100644 index 00000000000..b14e0d04d47 --- /dev/null +++ b/app/boards/adafruit_kb2040.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + +&pro_micro_serial { status = "disabled"; }; diff --git a/app/boards/adafruit_qt_py_rp2040.conf b/app/boards/adafruit_qt_py_rp2040.conf new file mode 100644 index 00000000000..21c1893d91f --- /dev/null +++ b/app/boards/adafruit_qt_py_rp2040.conf @@ -0,0 +1,4 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_ZMK_USB=y diff --git a/app/boards/adafruit_qt_py_rp2040.overlay b/app/boards/adafruit_qt_py_rp2040.overlay new file mode 100644 index 00000000000..d89e53f4a8e --- /dev/null +++ b/app/boards/adafruit_qt_py_rp2040.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + +&xiao_serial { status = "disabled"; }; diff --git a/app/boards/arm/adafruit_kb2040/adafruit_kb2040.zmk.yml b/app/boards/arm/adafruit_kb2040/adafruit_kb2040.zmk.yml new file mode 100644 index 00000000000..c8973f5c294 --- /dev/null +++ b/app/boards/arm/adafruit_kb2040/adafruit_kb2040.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: adafruit_kb2040 +name: Adafruit KB2040 +type: board +arch: arm +outputs: + - usb +url: https://www.adafruit.com/product/5302 +exposes: [pro_micro] diff --git a/app/boards/arm/adafruit_qt_py_rp2040/adafruit_qt_py_rp2040.zmk.yml b/app/boards/arm/adafruit_qt_py_rp2040/adafruit_qt_py_rp2040.zmk.yml new file mode 100644 index 00000000000..9b9c1450d32 --- /dev/null +++ b/app/boards/arm/adafruit_qt_py_rp2040/adafruit_qt_py_rp2040.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: adafruit_qt_py_rp2040 +name: Adafruit QT Py RP2040 +type: board +arch: arm +outputs: + - usb +url: https://www.adafruit.com/product/4900 +exposes: [seeed_xiao] diff --git a/app/boards/arm/boardsource_blok/boardsource_blok.zmk.yml b/app/boards/arm/boardsource_blok/boardsource_blok.zmk.yml new file mode 100644 index 00000000000..a6e91afd703 --- /dev/null +++ b/app/boards/arm/boardsource_blok/boardsource_blok.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: boardsource_blok +name: BoardSource blok +type: board +arch: arm +outputs: + - usb +url: https://peg.software/docs/blok +exposes: [pro_micro] diff --git a/app/boards/arm/seeeduino_xiao_rp2040/seeeduino_xiao_rp2040.zmk.yml b/app/boards/arm/seeeduino_xiao_rp2040/seeeduino_xiao_rp2040.zmk.yml new file mode 100644 index 00000000000..77d8d664dad --- /dev/null +++ b/app/boards/arm/seeeduino_xiao_rp2040/seeeduino_xiao_rp2040.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: seeeduino_xiao_rp2040 +name: Seeeduino XIAO RP2040 +type: board +arch: arm +outputs: + - usb +url: https://wiki.seeedstudio.com/XIAO-RP2040/ +exposes: [seeed_xiao] diff --git a/app/boards/arm/sparkfun_pro_micro_rp2040/sparkfun_pro_micro_rp2040.zmk.yml b/app/boards/arm/sparkfun_pro_micro_rp2040/sparkfun_pro_micro_rp2040.zmk.yml new file mode 100644 index 00000000000..26a2ca64025 --- /dev/null +++ b/app/boards/arm/sparkfun_pro_micro_rp2040/sparkfun_pro_micro_rp2040.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: sparkfun_pro_micro_rp2040 +name: SparkFun Pro Micro RP2040 +type: board +arch: arm +outputs: + - usb +url: https://www.sparkfun.com/products/18288 +exposes: [pro_micro] diff --git a/app/boards/boardsource_blok.conf b/app/boards/boardsource_blok.conf new file mode 100644 index 00000000000..21c1893d91f --- /dev/null +++ b/app/boards/boardsource_blok.conf @@ -0,0 +1,4 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_ZMK_USB=y diff --git a/app/boards/boardsource_blok.overlay b/app/boards/boardsource_blok.overlay new file mode 100644 index 00000000000..b14e0d04d47 --- /dev/null +++ b/app/boards/boardsource_blok.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + +&pro_micro_serial { status = "disabled"; }; diff --git a/app/boards/rpi_pico.conf b/app/boards/rpi_pico.conf new file mode 100644 index 00000000000..f0db8ed14dc --- /dev/null +++ b/app/boards/rpi_pico.conf @@ -0,0 +1,5 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_USB=y diff --git a/app/boards/rpi_pico.overlay b/app/boards/rpi_pico.overlay new file mode 100644 index 00000000000..efc8e080f15 --- /dev/null +++ b/app/boards/rpi_pico.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + diff --git a/app/boards/seeeduino_xiao_rp2040.conf b/app/boards/seeeduino_xiao_rp2040.conf new file mode 100644 index 00000000000..21c1893d91f --- /dev/null +++ b/app/boards/seeeduino_xiao_rp2040.conf @@ -0,0 +1,4 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_ZMK_USB=y diff --git a/app/boards/seeeduino_xiao_rp2040.overlay b/app/boards/seeeduino_xiao_rp2040.overlay new file mode 100644 index 00000000000..d89e53f4a8e --- /dev/null +++ b/app/boards/seeeduino_xiao_rp2040.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + +&xiao_serial { status = "disabled"; }; diff --git a/app/boards/sparkfun_pro_micro_rp2040.conf b/app/boards/sparkfun_pro_micro_rp2040.conf new file mode 100644 index 00000000000..21c1893d91f --- /dev/null +++ b/app/boards/sparkfun_pro_micro_rp2040.conf @@ -0,0 +1,4 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_ZMK_USB=y diff --git a/app/boards/sparkfun_pro_micro_rp2040.overlay b/app/boards/sparkfun_pro_micro_rp2040.overlay new file mode 100644 index 00000000000..b14e0d04d47 --- /dev/null +++ b/app/boards/sparkfun_pro_micro_rp2040.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "usb_console.dtsi" + +&pro_micro_serial { status = "disabled"; }; diff --git a/app/boards/usb_console.dtsi b/app/boards/usb_console.dtsi new file mode 100644 index 00000000000..4ce594085b5 --- /dev/null +++ b/app/boards/usb_console.dtsi @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + chosen { + zephyr,console = &cdc_acm_uart; + }; +}; + +&usbd { + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + From 2f9bc2f1f7b2ad0e0662ef53f5479b72c0f84d02 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 13 Jul 2022 23:34:32 -0400 Subject: [PATCH 0620/1130] fix(logging): Disable USB driver logging. When enabling our high level USB logging, disable the USB driver logging itself entirely, to avoid logging in the driver causing errors when USB isn't up yet to send the logs. --- app/Kconfig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index cf2cc6b3c4f..01817107dc5 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -419,9 +419,16 @@ if ZMK_USB_LOGGING config ZMK_LOG_LEVEL default 4 +choice USB_CDC_ACM_LOG_LEVEL_CHOICE + default USB_CDC_ACM_LOG_LEVEL_OFF +endchoice + +choice USB_DRIVER_LOG_LEVEL_CHOICE + default USB_DRIVER_LOG_LEVEL_OFF + +endchoice + # We do this to avoid log loop where logging to USB generates more log messages. -config USB_CDC_ACM_LOG_LEVEL - default 1 config USB_CDC_ACM_RINGBUF_SIZE default 1024 From a6ebdb7180f5b49d0603de91ca899ea789af0365 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 15 Jul 2022 11:14:51 -0400 Subject: [PATCH 0621/1130] fix(kscan): Default wait between outputs on RP2040. --- app/drivers/kscan/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index 51546006316..216651a1a26 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -44,6 +44,7 @@ config ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS int "Ticks to wait between each output when scanning" + default 1 if SOC_RP2040 default 0 help When iterating over each output to drive it active, read inputs, then set From c3d06b22c8b501fc69f6c2c140c10c95f989c76b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 3 Aug 2022 20:24:45 -0400 Subject: [PATCH 0622/1130] fix(core): Bump system work queue stack on RP2040. --- app/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Kconfig b/app/Kconfig index 01817107dc5..824d2700619 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -121,6 +121,7 @@ menuconfig ZMK_BLE if ZMK_BLE config SYSTEM_WORKQUEUE_STACK_SIZE + default 4096 if SOC_RP2040 default 2048 config ZMK_BLE_THREAD_STACK_SIZE From 198daaf524a2c1223393922195d8f1004964ae2e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 20 Oct 2022 02:21:25 -0400 Subject: [PATCH 0623/1130] fix(shields): Don't try to disable xiao_i2c on Hummingbird. --- app/boards/shields/hummingbird/hummingbird.overlay | 1 - 1 file changed, 1 deletion(-) diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay index 327200a8f57..4af9cbdfebe 100644 --- a/app/boards/shields/hummingbird/hummingbird.overlay +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -53,5 +53,4 @@ }; &xiao_spi { status = "disabled"; }; -&xiao_i2c { status = "disabled"; }; &xiao_serial { status = "disabled"; }; From 518f9a550f5016dad4e8d96ed68f1c4e6a8ccb93 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 20 Oct 2022 17:23:43 +0000 Subject: [PATCH 0624/1130] fix(underglow): Use `DT_HAS_CHOSEN` properly. --- app/src/rgb_underglow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 0ed2087a49c..048b58b4cb8 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -27,7 +27,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if !DT_CHOSEN(zmk_underglow) +#if !DT_HAS_CHOSEN(zmk_underglow) #error "A zmk,underglow chosen node must be declared" From 1493620bf76e05d8419ceec37681b69ca024a871 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 5 Nov 2022 00:35:58 -0400 Subject: [PATCH 0625/1130] refactor(boards): Move to pinctrl. --- .../bluemicro840/bluemicro840_v1-pinctrl.dtsi | 39 ++++++++++ .../arm/bluemicro840/bluemicro840_v1.dts | 13 ++-- .../bluemicro840/bluemicro840_v1_defconfig | 4 +- .../arm/corneish_zen/corneish_zen_v2_left.dts | 27 ++++++- .../corneish_zen_v2_left_defconfig | 3 + .../corneish_zen/corneish_zen_v2_right.dts | 25 +++++- .../corneish_zen_v2_right_defconfig | 3 + app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi | 39 ++++++++++ app/boards/arm/mikoto/mikoto_520.dts | 12 ++- app/boards/arm/mikoto/mikoto_520_defconfig | 2 + app/boards/arm/nice60/nice60-pinctrl.dtsi | 12 +++ app/boards/arm/nice60/nice60.dts | 7 +- app/boards/arm/nice60/nice60_defconfig | 2 + .../arm/nice_nano/nice_nano-pinctrl.dtsi | 39 ++++++++++ app/boards/arm/nice_nano/nice_nano.dtsi | 12 ++- app/boards/arm/nice_nano/nice_nano_defconfig | 5 +- .../arm/nice_nano/nice_nano_v2_defconfig | 5 +- .../nrfmicro/nrfmicro-flipped-pinctrl.dtsi | 39 ++++++++++ app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi | 39 ++++++++++ app/boards/arm/nrfmicro/nrfmicro_11.dts | 13 ++-- app/boards/arm/nrfmicro/nrfmicro_11_defconfig | 2 + .../arm/nrfmicro/nrfmicro_11_flipped.dts | 15 ++-- .../nrfmicro/nrfmicro_11_flipped_defconfig | 2 + app/boards/arm/nrfmicro/nrfmicro_13.dts | 13 ++-- app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 13 ++-- .../arm/nrfmicro/nrfmicro_13_52833_defconfig | 2 + app/boards/arm/nrfmicro/nrfmicro_13_defconfig | 2 + app/boards/arm/pillbug/pillbug-pinctrl.dtsi | 56 +++++++++++++ app/boards/arm/pillbug/pillbug.dts | 20 +++-- .../arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi | 39 ++++++++++ app/boards/arm/puchi_ble/puchi_ble_v1.dts | 11 ++- .../arm/puchi_ble/puchi_ble_v1_defconfig | 3 + .../shields/chalice/boards/nice_nano.overlay | 25 ++++-- .../chalice/boards/nice_nano_v2.overlay | 25 ++++-- .../shields/corne/boards/nice_nano.overlay | 28 +++++-- .../shields/corne/boards/nice_nano_v2.overlay | 47 +++++++++++ .../elephant42/boards/nice_nano.overlay | 47 +++++++++++ .../elephant42/boards/nice_nano_v2.overlay | 29 +++++-- .../eternal_keypad/boards/nice_nano.overlay | 47 +++++++++++ .../boards/nice_nano_v2.overlay | 35 +++++---- .../shields/helix/boards/nice_nano.overlay | 71 +++++++++-------- .../shields/helix/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/jorne/boards/nice_nano.overlay | 27 +++++-- .../shields/jorne/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/kyria/boards/nice_nano.overlay | 24 +++++- .../shields/kyria/boards/nice_nano_v2.overlay | 23 +++++- .../shields/kyria/boards/nrfmicro_11.overlay | 25 ++++-- .../kyria/boards/nrfmicro_11_flipped.overlay | 24 +++++- .../shields/kyria/boards/nrfmicro_13.overlay | 24 +++++- .../shields/lily58/boards/nice_nano.overlay | 32 +++++--- .../lily58/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/microdox/boards/nice_nano.overlay | 35 +++++---- .../microdox/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/murphpad/boards/nice_nano.overlay | 33 +++++--- .../murphpad/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/nibble/boards/nice_nano.overlay | 32 +++++--- .../nibble/boards/nice_nano_v2.overlay | 47 +++++++++++ .../boards/bluemicro840_v1.overlay | 16 +++- .../boards/mikoto_520.overlay | 15 +++- .../boards/nice_nano.overlay | 15 +++- .../boards/nice_nano_v2.overlay | 15 +++- .../boards/nrfmicro_11.overlay | 16 +++- .../boards/nrfmicro_11_flipped.overlay | 15 +++- .../boards/nrfmicro_13.overlay | 15 +++- .../boards/puchi_ble_v1.overlay | 15 +++- .../shields/redox/boards/nice_nano.overlay | 31 +++++--- .../shields/redox/boards/nice_nano_v2.overlay | 47 +++++++++++ .../reviung41/boards/nice_nano.overlay | 26 +++++-- .../reviung41/boards/nice_nano_v2.overlay | 47 +++++++++++ .../romac_plus/boards/nice_nano.overlay | 78 +++++++++++-------- .../romac_plus/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/snap/boards/nice_nano.overlay | 32 +++++--- .../shields/snap/boards/nice_nano_v2.overlay | 32 +++++--- .../boards/nice_nano.overlay | 26 +++++-- .../boards/nice_nano_v2.overlay | 26 +++++-- .../boards/nice_nano.overlay | 24 +++++- .../boards/nice_nano_v2.overlay | 23 +++++- .../boards/nice_nano.overlay | 26 +++++-- .../boards/nice_nano_v2.overlay | 26 +++++-- .../shields/tg4x/boards/nice_nano.overlay | 32 +++++--- .../shields/tg4x/boards/nice_nano_v2.overlay | 47 +++++++++++ .../shields/tidbit/boards/nice_nano.overlay | 32 +++++--- .../tidbit/boards/nice_nano_v2.overlay | 47 +++++++++++ .../two_percent_milk/boards/nice_nano.overlay | 26 +++++-- .../boards/nice_nano_v2.overlay | 26 +++++-- .../boards/nrfmicro_11.overlay | 27 +++++-- .../boards/nrfmicro_11_flipped.overlay | 26 +++++-- .../boards/nrfmicro_13.overlay | 26 +++++-- docs/docs/features/underglow.md | 28 ++++--- 89 files changed, 1984 insertions(+), 379 deletions(-) create mode 100644 app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi create mode 100644 app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi create mode 100644 app/boards/arm/nice60/nice60-pinctrl.dtsi create mode 100644 app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi create mode 100644 app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi create mode 100644 app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi create mode 100644 app/boards/arm/pillbug/pillbug-pinctrl.dtsi create mode 100644 app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi create mode 100644 app/boards/shields/corne/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/elephant42/boards/nice_nano.overlay create mode 100644 app/boards/shields/eternal_keypad/boards/nice_nano.overlay create mode 100644 app/boards/shields/helix/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/jorne/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/lily58/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/microdox/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/murphpad/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/nibble/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/redox/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/reviung41/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/romac_plus/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/tg4x/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/tidbit/boards/nice_nano_v2.overlay diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi new file mode 100644 index 00000000000..18b90f21ffc --- /dev/null +++ b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index 29bf0f8d0c1..c636ca31672 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins.dtsi" +#include "bluemicro840_v1-pinctrl.dtsi" / { model = "BlueMicro840_V1"; @@ -62,15 +63,17 @@ }; &i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <17>; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig index b8e4e8055e6..99d51a94334 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig +++ b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig @@ -7,6 +7,8 @@ CONFIG_BOARD_BLUEMICRO840_V1=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y @@ -18,4 +20,4 @@ CONFIG_NVS=y CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y -CONFIG_FLASH_MAP=y \ No newline at end of file +CONFIG_FLASH_MAP=y diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index 2d8f0a81416..4dbdaef529d 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -53,12 +53,31 @@ }; +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; + &spi0 { status = "okay"; compatible = "nordic,nrf-spim"; - sck-pin = <27>; - mosi-pin = <8>; - miso-pin = <22>; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; epd: il0323@0 { @@ -75,4 +94,4 @@ cdi = <0xd2>; tcon = <0x22>; }; -}; \ No newline at end of file +}; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig index 42e270372fb..305ce72e0e4 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -13,6 +13,9 @@ CONFIG_ZMK_DISPLAY=y # Enable MPU CONFIG_ARM_MPU=y +# enable pinctrl +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts index 097872f5cab..52439e4f3ca 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -60,12 +60,31 @@ col-offset = <6>; }; +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; + &spi0 { status = "okay"; compatible = "nordic,nrf-spim"; - sck-pin = <20>; - mosi-pin = <24>; - miso-pin = <27>; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; epd: il0323@0 { diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index e9b36f2eba4..0fd0fd6cb0a 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -13,6 +13,9 @@ CONFIG_ZMK_DISPLAY=y # Enable MPU CONFIG_ARM_MPU=y +# enable pinctrl +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi b/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi new file mode 100644 index 00000000000..4a8ff82c0d4 --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index 49d9d6beb33..3fff0835b90 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins.dtsi" +#include "mikoto_520-pinctrl.dtsi" / { model = "mikoto"; @@ -62,14 +63,17 @@ &i2c0 { compatible = "nordic,nrf-twi"; - sda-pin = <17>; - scl-pin = <20>; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <8>; - rx-pin = <4>; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/mikoto/mikoto_520_defconfig b/app/boards/arm/mikoto/mikoto_520_defconfig index d5fd8958ca9..c755633e4cf 100644 --- a/app/boards/arm/mikoto/mikoto_520_defconfig +++ b/app/boards/arm/mikoto/mikoto_520_defconfig @@ -7,6 +7,8 @@ CONFIG_BOARD_MIKOTO_520=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/nice60/nice60-pinctrl.dtsi b/app/boards/arm/nice60/nice60-pinctrl.dtsi new file mode 100644 index 00000000000..aced76b4bc3 --- /dev/null +++ b/app/boards/arm/nice60/nice60-pinctrl.dtsi @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = ; + }; + }; +}; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index bb058da879a..c982f88eef8 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -10,6 +10,8 @@ #include #include +#include "nice60-pinctrl.dtsi" + / { model = "nice!60"; compatible = "nice,60"; @@ -110,10 +112,9 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R &spi0 { compatible = "nordic,nrf-spim"; /* Cannot be used together with i2c0. */ + pinctrl-0 = <&spi0_default>; + pinctrl-names = "default"; status = "okay"; - sck-pin = <12>; - mosi-pin = <27>; - miso-pin = <13>; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; diff --git a/app/boards/arm/nice60/nice60_defconfig b/app/boards/arm/nice60/nice60_defconfig index 9fac3a30bfd..48936a04704 100644 --- a/app/boards/arm/nice60/nice60_defconfig +++ b/app/boards/arm/nice60/nice60_defconfig @@ -8,6 +8,8 @@ CONFIG_BOARD_NICE60=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi b/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi new file mode 100644 index 00000000000..18b90f21ffc --- /dev/null +++ b/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index 6c9d081c75b..ad5ef27805f 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -5,6 +5,7 @@ */ #include +#include "nice_nano-pinctrl.dtsi" #include "arduino_pro_micro_pins.dtsi" / { @@ -45,14 +46,17 @@ &i2c0 { compatible = "nordic,nrf-twi"; - sda-pin = <17>; - scl-pin = <20>; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/nice_nano/nice_nano_defconfig b/app/boards/arm/nice_nano/nice_nano_defconfig index 1ff025ec738..a837b7d2875 100644 --- a/app/boards/arm/nice_nano/nice_nano_defconfig +++ b/app/boards/arm/nice_nano/nice_nano_defconfig @@ -10,6 +10,9 @@ CONFIG_ARM_MPU=y # enable GPIO CONFIG_GPIO=y +# Use pinctrl +CONFIG_PINCTRL=y + CONFIG_USE_DT_CODE_PARTITION=y CONFIG_BUILD_OUTPUT_UF2=y @@ -18,4 +21,4 @@ CONFIG_NVS=y CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y -CONFIG_FLASH_MAP=y \ No newline at end of file +CONFIG_FLASH_MAP=y diff --git a/app/boards/arm/nice_nano/nice_nano_v2_defconfig b/app/boards/arm/nice_nano/nice_nano_v2_defconfig index 206e51c2f17..667cf71aca2 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2_defconfig +++ b/app/boards/arm/nice_nano/nice_nano_v2_defconfig @@ -7,6 +7,9 @@ CONFIG_BOARD_NICE_NANO_V2=y # Enable MPU CONFIG_ARM_MPU=y +# Use pinctrl +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y @@ -18,4 +21,4 @@ CONFIG_NVS=y CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y -CONFIG_FLASH_MAP=y \ No newline at end of file +CONFIG_FLASH_MAP=y diff --git a/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi b/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi new file mode 100644 index 00000000000..a54c2598838 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi b/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi new file mode 100644 index 00000000000..a53856901ea --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 82951b5f312..48186ac9c2f 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins.dtsi" +#include "nrfmicro-pinctrl.dtsi" / { model = "nrfmicro"; @@ -47,15 +48,17 @@ }; &i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <17>; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig index 3f6a447d77a..b51929b0c8f 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig @@ -7,6 +7,8 @@ CONFIG_BOARD_NRFMICRO_11=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index fdfba507034..656873a0bb2 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins_flipped.dtsi" +#include "nrfmicro-flipped-pinctrl.dtsi" / { model = "nrfmicro"; @@ -47,15 +48,17 @@ }; &i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <30>; - scl-pin = <31>; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { @@ -105,4 +108,4 @@ reg = <0x000f4000 0x0000c000>; }; }; -}; \ No newline at end of file +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig index efe924f29f5..335a2d75b12 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig @@ -7,6 +7,8 @@ CONFIG_BOARD_NRFMICRO_11_FLIPPED=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index a0f7417067a..9fb68562fe2 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins.dtsi" +#include "nrfmicro-pinctrl.dtsi" / { model = "nrfmicro"; @@ -60,15 +61,17 @@ }; &i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <17>; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index 7f833ff555f..9ade364d4c3 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins_52833.dtsi" +#include "nrfmicro-pinctrl.dtsi" / { model = "nrfmicro"; @@ -60,15 +61,17 @@ }; &i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <17>; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig index 112e0344ae4..4af1ff86a7c 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig @@ -7,6 +7,8 @@ CONFIG_BOARD_NRFMICRO_13_52833=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig index 06758784e58..43ba40e2dc3 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig @@ -7,6 +7,8 @@ CONFIG_BOARD_NRFMICRO_13=y # Enable MPU CONFIG_ARM_MPU=y +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/pillbug/pillbug-pinctrl.dtsi b/app/boards/arm/pillbug/pillbug-pinctrl.dtsi new file mode 100644 index 00000000000..8751bc4bd58 --- /dev/null +++ b/app/boards/arm/pillbug/pillbug-pinctrl.dtsi @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/pillbug/pillbug.dts b/app/boards/arm/pillbug/pillbug.dts index 85c5cccdc08..c1330319ea2 100644 --- a/app/boards/arm/pillbug/pillbug.dts +++ b/app/boards/arm/pillbug/pillbug.dts @@ -7,6 +7,7 @@ /dts-v1/; #include +#include "pillbug-pinctrl.dtsi" #include "blackpill_pins.dtsi" / { @@ -63,22 +64,25 @@ &i2c0 { compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <13>; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; -&spi1{ +&spi1 { status = "disabled"; compatible = "nordic,nrf-spim"; - sck-pin = <40>; - mosi-pin = <11>; - miso-pin = <26>; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi b/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi new file mode 100644 index 00000000000..a53856901ea --- /dev/null +++ b/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.dts b/app/boards/arm/puchi_ble/puchi_ble_v1.dts index e324cccc1dc..a8f25c37d06 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1.dts +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.dts @@ -7,6 +7,7 @@ /dts-v1/; #include #include "arduino_pro_micro_pins.dtsi" +#include "puchi_ble_v1-pinctrl.dtsi" / { model = "puchi_ble"; @@ -61,14 +62,16 @@ &i2c0 { compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <17>; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig b/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig index e32886d0596..1adb9217c8a 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig +++ b/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig @@ -11,6 +11,9 @@ CONFIG_ARM_MPU=y # enable GPIO CONFIG_GPIO=y +# Use pinctrl +CONFIG_PINCTRL=y + CONFIG_USE_DT_CODE_PARTITION=y CONFIG_BUILD_OUTPUT_UF2=y diff --git a/app/boards/shields/chalice/boards/nice_nano.overlay b/app/boards/shields/chalice/boards/nice_nano.overlay index 5a74582a40e..172859aecb1 100644 --- a/app/boards/shields/chalice/boards/nice_nano.overlay +++ b/app/boards/shields/chalice/boards/nice_nano.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,7 +32,7 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <14>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; diff --git a/app/boards/shields/chalice/boards/nice_nano_v2.overlay b/app/boards/shields/chalice/boards/nice_nano_v2.overlay index 5a74582a40e..172859aecb1 100644 --- a/app/boards/shields/chalice/boards/nice_nano_v2.overlay +++ b/app/boards/shields/chalice/boards/nice_nano_v2.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,7 +32,7 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <14>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; diff --git a/app/boards/shields/corne/boards/nice_nano.overlay b/app/boards/shields/corne/boards/nice_nano.overlay index e5f84063fc5..172859aecb1 100644 --- a/app/boards/shields/corne/boards/nice_nano.overlay +++ b/app/boards/shields/corne/boards/nice_nano.overlay @@ -1,24 +1,38 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "SK6812mini"; + label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; diff --git a/app/boards/shields/corne/boards/nice_nano_v2.overlay b/app/boards/shields/corne/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/corne/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/elephant42/boards/nice_nano.overlay b/app/boards/shields/elephant42/boards/nice_nano.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/elephant42/boards/nice_nano.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay index 87c8da215f8..172859aecb1 100644 --- a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay @@ -1,23 +1,38 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; label = "WS2812"; + /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <27>; /* There are per-key RGB and the LAST 6 are underglow */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; @@ -29,4 +44,4 @@ chosen { zmk,underglow = &led_strip; }; -}; \ No newline at end of file +}; diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay index 61950d18d52..172859aecb1 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay @@ -1,32 +1,41 @@ -/* - * Copyright (c) 2022 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "SK6812mini"; + label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <8>; + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/helix/boards/nice_nano.overlay b/app/boards/shields/helix/boards/nice_nano.overlay index da7deed1220..172859aecb1 100644 --- a/app/boards/shields/helix/boards/nice_nano.overlay +++ b/app/boards/shields/helix/boards/nice_nano.overlay @@ -1,38 +1,47 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <32>; /* number of LEDs */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - - color-mapping = ; - }; + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/helix/boards/nice_nano_v2.overlay b/app/boards/shields/helix/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/helix/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/jorne/boards/nice_nano.overlay b/app/boards/shields/jorne/boards/nice_nano.overlay index 2864fd603b9..172859aecb1 100644 --- a/app/boards/shields/jorne/boards/nice_nano.overlay +++ b/app/boards/shields/jorne/boards/nice_nano.overlay @@ -1,13 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -18,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/jorne/boards/nice_nano_v2.overlay b/app/boards/shields/jorne/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/jorne/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/kyria/boards/nice_nano.overlay b/app/boards/shields/kyria/boards/nice_nano.overlay index b774b4ba712..172859aecb1 100644 --- a/app/boards/shields/kyria/boards/nice_nano.overlay +++ b/app/boards/shields/kyria/boards/nice_nano.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -20,6 +35,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/kyria/boards/nice_nano_v2.overlay b/app/boards/shields/kyria/boards/nice_nano_v2.overlay index b1e7fbb50fb..172859aecb1 100644 --- a/app/boards/shields/kyria/boards/nice_nano_v2.overlay +++ b/app/boards/shields/kyria/boards/nice_nano_v2.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; diff --git a/app/boards/shields/kyria/boards/nrfmicro_11.overlay b/app/boards/shields/kyria/boards/nrfmicro_11.overlay index 1cff5f7794d..172859aecb1 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <12>; // 0.12 is not broken out on the nRFMicro - miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -20,6 +35,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; @@ -29,4 +45,3 @@ zmk,underglow = &led_strip; }; }; - diff --git a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay index 80d0c8984e2..172859aecb1 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <12>; // 0.12 is not broken out on the nRFMicro - miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -20,6 +35,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/kyria/boards/nrfmicro_13.overlay b/app/boards/shields/kyria/boards/nrfmicro_13.overlay index 80d0c8984e2..172859aecb1 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_13.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_13.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <12>; // 0.12 is not broken out on the nRFMicro - miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -20,6 +35,7 @@ chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/lily58/boards/nice_nano.overlay b/app/boards/shields/lily58/boards/nice_nano.overlay index 69bfffa0811..172859aecb1 100644 --- a/app/boards/shields/lily58/boards/nice_nano.overlay +++ b/app/boards/shields/lily58/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <5>; /* number of LEDs */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/lily58/boards/nice_nano_v2.overlay b/app/boards/shields/lily58/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/lily58/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/microdox/boards/nice_nano.overlay b/app/boards/shields/microdox/boards/nice_nano.overlay index 360e7098873..172859aecb1 100644 --- a/app/boards/shields/microdox/boards/nice_nano.overlay +++ b/app/boards/shields/microdox/boards/nice_nano.overlay @@ -1,32 +1,41 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "SK6812mini"; + label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/microdox/boards/nice_nano_v2.overlay b/app/boards/shields/microdox/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/microdox/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay index d7cdcff75df..89ba4f9d6ed 100644 --- a/app/boards/shields/murphpad/boards/nice_nano.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2021 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ +#include - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <31>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,7 +32,7 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <8>; /* number of LEDs */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; @@ -35,4 +44,4 @@ chosen { zmk,underglow = &led_strip; }; -}; \ No newline at end of file +}; diff --git a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..89ba4f9d6ed --- /dev/null +++ b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/nibble/boards/nice_nano.overlay b/app/boards/shields/nibble/boards/nice_nano.overlay index 0a08c770784..ece699e26d9 100644 --- a/app/boards/shields/nibble/boards/nice_nano.overlay +++ b/app/boards/shields/nibble/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <11>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <10>; /* number of LEDs */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/nibble/boards/nice_nano_v2.overlay b/app/boards/shields/nibble/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..ece699e26d9 --- /dev/null +++ b/app/boards/shields/nibble/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay index 9d9ab734c0d..27d76b0767b 100644 --- a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay @@ -4,11 +4,21 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <17>; - mosi-pin = <15>; - miso-pin = <25>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay index 9f6fad1c90d..fc2667f3bb0 100644 --- a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay +++ b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay @@ -4,11 +4,20 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <20>; - mosi-pin = <17>; - miso-pin = <5>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay index 3a0ad4624ca..c9a0e78840a 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay @@ -4,11 +4,20 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <20>; - mosi-pin = <17>; - miso-pin = <25>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay index 3a0ad4624ca..0068b5b2c9d 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay @@ -4,11 +4,20 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <20>; - mosi-pin = <17>; - miso-pin = <25>; + pinctrl-0 = <&spi0_default>; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay index 9d9ab734c0d..27d76b0767b 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay @@ -4,11 +4,21 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <17>; - mosi-pin = <15>; - miso-pin = <25>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay index 7b12c252f3e..5074d0f9176 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay @@ -4,11 +4,20 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <31>; - mosi-pin = <30>; - miso-pin = <25>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay index 9d9ab734c0d..9a4f3170c1d 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay @@ -4,11 +4,20 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <17>; - mosi-pin = <15>; - miso-pin = <25>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay index 9d9ab734c0d..9a4f3170c1d 100644 --- a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay @@ -4,11 +4,20 @@ * SPDX-License-Identifier: MIT */ +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; +}; + nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - sck-pin = <17>; - mosi-pin = <15>; - miso-pin = <25>; + pinctrl-0 = &spi0_default; + pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/redox/boards/nice_nano.overlay b/app/boards/shields/redox/boards/nice_nano.overlay index d67e46f9c50..172859aecb1 100644 --- a/app/boards/shields/redox/boards/nice_nano.overlay +++ b/app/boards/shields/redox/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2021 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ +#include - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,7 +32,7 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <5>; /* number of LEDs */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; diff --git a/app/boards/shields/redox/boards/nice_nano_v2.overlay b/app/boards/shields/redox/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/redox/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/reviung41/boards/nice_nano.overlay b/app/boards/shields/reviung41/boards/nice_nano.overlay index b52faac61ce..172859aecb1 100644 --- a/app/boards/shields/reviung41/boards/nice_nano.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <11>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/romac_plus/boards/nice_nano.overlay b/app/boards/shields/romac_plus/boards/nice_nano.overlay index dc686af8ede..172859aecb1 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano.overlay @@ -1,31 +1,47 @@ -#include - -&spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - color-mapping = ; - }; -}; - -/ { - chosen { - zmk,underglow = &led_strip; - }; -}; \ No newline at end of file +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..172859aecb1 --- /dev/null +++ b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/snap/boards/nice_nano.overlay b/app/boards/shields/snap/boards/nice_nano.overlay index f869db5db1d..15c5801ece3 100644 --- a/app/boards/shields/snap/boards/nice_nano.overlay +++ b/app/boards/shields/snap/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2022 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <10>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <5>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/snap/boards/nice_nano_v2.overlay b/app/boards/shields/snap/boards/nice_nano_v2.overlay index f869db5db1d..15c5801ece3 100644 --- a/app/boards/shields/snap/boards/nice_nano_v2.overlay +++ b/app/boards/shields/snap/boards/nice_nano_v2.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2022 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <10>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <5>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay index 0087208cf17..172859aecb1 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay index 0087208cf17..172859aecb1 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay index eb838b24953..4a6b717dfe8 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay @@ -1,12 +1,28 @@ #include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay index eb838b24953..ed03ed0d392 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay index 0087208cf17..172859aecb1 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay index 0087208cf17..172859aecb1 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <6>; /* arbitrary; change at will */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/tg4x/boards/nice_nano.overlay b/app/boards/shields/tg4x/boards/nice_nano.overlay index fe7fbf18b7e..62f201408ae 100644 --- a/app/boards/shields/tg4x/boards/nice_nano.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <8>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <7>; /* number of LEDs */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..62f201408ae --- /dev/null +++ b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/tidbit/boards/nice_nano.overlay b/app/boards/shields/tidbit/boards/nice_nano.overlay index d8a647e9dd9..08379e3098d 100644 --- a/app/boards/shields/tidbit/boards/nice_nano.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano.overlay @@ -1,18 +1,27 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <9>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -23,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <8>; /* number of LEDs */ + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..08379e3098d --- /dev/null +++ b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay index dd7e34c4a97..08379e3098d 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <9>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <2>; + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay index dd7e34c4a97..08379e3098d 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <9>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <2>; + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay index c2dab5a6eee..64d16572be6 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <43>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <12>; // 0.12 is not broken out on the nRFMicro - miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <2>; + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; @@ -29,4 +45,3 @@ zmk,underglow = &led_strip; }; }; - diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay index e53b149a9b3..b84beb93112 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <38>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <12>; // 0.12 is not broken out on the nRFMicro - miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <2>; + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay index 252329b47cc..64d16572be6 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay @@ -1,12 +1,27 @@ #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <43>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <12>; // 0.12 is not broken out on the nRFMicro - miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; @@ -17,9 +32,10 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <2>; + chain-length = <10>; /* arbitrary; change at will */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; + color-mapping = ; }; }; diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index 020701fdadf..c70ffffb689 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -54,23 +54,33 @@ For example, the Kyria shield has a `boards/nice_nano.overlay` file that defines With nRF52 boards, you can just use `&spi1` and define the pins you want to use. -To identify which pin number you need to put in the config you need do to a bit of math. You need the hardware port and run it through a function. -**32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". - -(_P1.13_ would give you _32 \* 1 + 13_ = `<45>` and P0.15 would give you _32 \* 0 + 15_ = `<15>`) - Here's an example on a definition that uses P0.06: ``` #include +&pinctrl { + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + &spi1 { compatible = "nordic,nrf-spim"; status = "okay"; - mosi-pin = <6>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; + + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; From 0c5bcf5fe4dff38f55219c213a745a6731544896 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 16 Jan 2023 04:28:35 +0000 Subject: [PATCH 0626/1130] feat(docs): Add BLE feature/config pages. Co-authored-by: Cem Aksoylar --- docs/docs/config/bluetooth.md | 14 ++++++++ docs/docs/features/bluetooth.md | 59 +++++++++++++++++++++++++++++++++ docs/sidebars.js | 2 ++ 3 files changed, 75 insertions(+) create mode 100644 docs/docs/config/bluetooth.md create mode 100644 docs/docs/features/bluetooth.md diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md new file mode 100644 index 00000000000..420dd5c3627 --- /dev/null +++ b/docs/docs/config/bluetooth.md @@ -0,0 +1,14 @@ +--- +title: Bluetooth Configuration +sidebar_label: Bluetooth +--- + +See the [bluetooth feature page](../features/bluetooth.md) for more details on the general Bluetooth functionality in ZMK. + +See [Configuration Overview](index.md) for instructions on how to change these settings. + +## Kconfig + +| Option | Type | Description | Default | +| ------------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------- | ------- | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md new file mode 100644 index 00000000000..f1a3e2416fe --- /dev/null +++ b/docs/docs/features/bluetooth.md @@ -0,0 +1,59 @@ +--- +title: Bluetooth +sidebar_label: Bluetooth +--- + +ZMK's bluetooth functionality allows users to connect their keyboards to hosts using Bluetooth Low Energy (BLE) technology. It also is used for split keyboards to connect the two halves wirelessly. + +:::note + +Bluetooth 4.2 or newer is required in order to connect to a ZMK keyboard. ZMK implements advanced security using BLE's Secure Connection feature, which requires Bluetooth 4.2 at a minimum. To avoid well-known security vulnerabilities, we disallow using Legacy pairing. + +::: + +## Security + +BLE connections between keyboards and hosts are secured by an initial pairing/bonding process that establishes long term keys (LTK) shared between the two sides, using Elliptic Curve Diffie Hellman (ECDH) for key generation. The same security is used to secure the communication between the two sides of split keyboards running ZMK. + +The only known vulnerability in the protocol is a risk of an active man-in-the-middle (MITM) attack exactly during the initial pairing, which can be mitigated in the future using the Numeric Comparison association model. Support for that in ZMK is still experimental, so if you have serious concerns about an active attacker with physical proximity to your device, consider only pairing/bonding your keyboards in a controlled environment. + +## Profiles + +By default, ZMK supports five "profiles" for selecting which bonded host +device should receive the keyboard input. + +:::note Connection Management + +When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this automatically when you initiate pairing with another device. To pair with a new device select an unused profile with or clearing the current profile, using the [`&bt` behavior](../behaviors/bluetooth.md) on your keyboard. + +A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. + +::: + +Failure to manage the profiles can result in unexpected/broken behavior with hosts due to bond key mismatches, so it is an important aspect of ZMK to understand. + +## Bluetooth Behavior + +Management of the bluetooth in ZMK is accomplished using the [`&bt` behavior](../behaviors/bluetooth.md). Be sure to refer to that documentation to learn how to manage profiles, switch between connected hosts, etc. + +## Troubleshooting + +## Known Issues + +There are a few known issues related to BLE and ZMK: + +### Windows Battery Reporting + +There is a known issue with Windows failing to update the battery information after connecting to a ZMK keyboard. You can work around this Windows bug by overriding a [Bluetooth config variable](../config/bluetooth.md) to force battery notifications even if a host neglects to subscribe to them: + +``` +CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n +``` + +### macOS Connected But Not Working + +If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding issue, macOS may report the keyboard as connected, but fail to actually work. If this occurs: + +1. Remove the keyboard from macOS using the Bluetooth control panel. +1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the macOS device is active, by pressing the correct keys for your particular keymap. +1. Try connecting again from macOS. diff --git a/docs/sidebars.js b/docs/sidebars.js index 7b445a29012..a52f3302c8b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -10,6 +10,7 @@ module.exports = { ], Features: [ "features/keymaps", + "features/bluetooth", "features/combos", "features/conditional-layers", "features/debouncing", @@ -57,6 +58,7 @@ module.exports = { "config/backlight", "config/battery", "config/behaviors", + "config/bluetooth", "config/combos", "config/displays", "config/encoders", From 313ed6adb6db3154c14f783b791255b6f3422fb3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 17 Mar 2023 06:20:33 +0000 Subject: [PATCH 0627/1130] fix(display): Tweak EPD driver init/blanking. Ensure we only clear the display when turning blanking off the first time, not every time, to avoid duplicate clears. --- app/drivers/display/il0323.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/drivers/display/il0323.c b/app/drivers/display/il0323.c index 94e38481dd1..6555e5c1d9b 100644 --- a/app/drivers/display/il0323.c +++ b/app/drivers/display/il0323.c @@ -47,6 +47,7 @@ static uint8_t il0323_pwr[] = DT_INST_PROP(0, pwr); static uint8_t last_buffer[IL0323_BUFFER_SIZE]; static bool blanking_on = true; +static bool init_clear_done = false; static inline int il0323_write_cmd(const struct il0323_cfg *cfg, uint8_t cmd, uint8_t *data, size_t len) { @@ -198,16 +199,21 @@ static int il0323_clear_and_write_buffer(const struct device *dev, uint8_t patte static int il0323_blanking_off(const struct device *dev) { const struct il0323_cfg *cfg = dev->config; - if (blanking_on) { + if (!init_clear_done) { /* Update EPD panel in normal mode */ il0323_busy_wait(cfg); if (il0323_clear_and_write_buffer(dev, 0xff, true)) { return -EIO; } + init_clear_done = true; } blanking_on = false; + if (il0323_update_display(dev)) { + return -EIO; + } + return 0; } From 2614b856349a39a39ddb88c71b695c70a6fa1c05 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 24 Oct 2022 03:54:49 +0000 Subject: [PATCH 0628/1130] feat(docs): Add blog post for Zephyr 3.2. Co-authored-by: Cem Aksoylar --- docs/blog/2023-04-06-zephyr-3-2.md | 303 +++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 docs/blog/2023-04-06-zephyr-3-2.md diff --git a/docs/blog/2023-04-06-zephyr-3-2.md b/docs/blog/2023-04-06-zephyr-3-2.md new file mode 100644 index 00000000000..b60ad27c0b1 --- /dev/null +++ b/docs/blog/2023-04-06-zephyr-3-2.md @@ -0,0 +1,303 @@ +--- +title: "Zephyr 3.2 Update" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [firmware, zephyr, core] +--- + +I'm happy to announce that we have completed the [work](https://github.com/zmkfirmware/zmk/pull/1499) to upgrade ZMK to [Zephyr 3.2](https://docs.zephyrproject.org/3.2.0/releases/release-notes-3.2.html)! + +[petejohanson] did the upgrade work to adjust ZMK for the Zephyr changes, with help from [Nicell] on the LVGL pieces. + +- Upgrade to LVGL 8.x API, and move to the new Kconfig settings. +- Tons of RP2040 work. +- Zephyr core API changes, including DTS `label` use changes. +- Move to [pinctrl](https://docs.zephyrproject.org/3.2.0/hardware/pinctrl/index.html) Zephyr subsystem. + +## Getting The Changes + +Use the following steps to update to the latest tooling in order to properly use the new ZMK changes: + +### User Config Repositories Using GitHub Actions + +Existing user config repositories using Github Actions to build will pull down Zephyr 3.2 automatically, however if you created your user config a while ago, you may need to update it to reference our shared build configuration to leverage the correct Docker image. + +1. Replace the contents of your `.github/workflows/build.yml` with: + + ``` + on: [push, pull_request, workflow_dispatch] + + jobs: + build: + uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main + ``` + +1. If it doesn't exist already, add a new file to your repository named `build.yaml`: + + ``` + # This file generates the GitHub Actions matrix + # For simple board + shield combinations, add them + # to the top level board and shield arrays, for more + # control, add individual board + shield combinations to + # the `include` property, e.g: + # + # board: [ "nice_nano_v2" ] + # shield: [ "corne_left", "corne_right" ] + # include: + # - board: bdn9_rev2 + # - board: nice_nano_v2 + # shield: reviung41 + # + --- + ``` + +and then update it as appropriate to build the right shields/boards for your configuration. + +### Upgrade a manual script + +If you have a custom GitHub Actions workflow you need to maintain for some reason, you can update the workflow to to use the `stable` Docker image tag for the build: + +- Open `.github/workflows/build.yml` in your editor/IDE +- Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found +- Locate and delete the lines for the DTS output step, which is no longer needed: + + ``` + - name: ${{ steps.variables.outputs.display-name }} DTS File + if: ${{ always() }} + run: | + if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi + if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + ``` + +### VS Code & Docker (Dev Container) + +If you build locally using VS Code & Docker then: + +- pull the latest ZMK `main` with `git pull` for your ZMK checkout +- reload the project +- if you are prompted to rebuild the remote container, click `Rebuild` +- otherwise, press `F1` and run `Remote Containers: Rebuild Container` +- Once the container has rebuilt and reloaded, run `west update` to pull the updated Zephyr version and its dependencies. + +Once the container has rebuilt, VS Code will be running the 3.2 Docker image. + +### Local Host Development + +The following steps will get you building ZMK locally against Zephyr 3.2: + +- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- Install the latest version of `west` by running `pip3 install --user --update west`. +- pull the latest ZMK `main` with `git pull` for your ZMK checkout +- run `west update` to pull the updated Zephyr version and its dependencies + +From there, you should be ready to build as normal! + +## Known Issues + +A few testers have reported inconsistent issues with bluetooth connections on Windows after upgrading, which can be resolved by re-pairing your keyboard by: + +1. Remove the device from Windows. +1. Clear the profile on your keyboard that is associated with the Windows device by triggering `&bt BT_CLR` on your keymap while that profile is active. +1. Restart Windows. +1. Re-connect Windows to your keyboard. + +## Windows Battery Reporting Fix + +Zephyr 3.2 introduced [a new Kconfig setting](https://github.com/zephyrproject-rtos/zephyr/pull/48929) that can be used to work around a bug in Windows related to battery reporting. Check out our [bluetooth config](/docs/config/bluetooth) for the full details. The key new configuration that can be set if using Windows is: + +``` +CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n +``` + +## Keymap Changes + +Due to conflicts with new devicetree node labels added for Zephyr's [reset system](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/reset.html), the `&reset` behavior has been renamed to `&sys_reset`. + +All of the in-tree keymaps have been fixed, but you may encounter build failures about duplicate names, requiring you rename the behavior reference in your keymap. Use the [Keymap Upgrader](docs/codes/keymap-upgrader) and this will get fixed for you automatically. + +## Board/Shield Changes + +The following changes have [already been completed](https://github.com/zmkfirmware/zmk/pull/1499/commits) for all boards/shields in ZMK `main` branch. For existing or new PRs, or out of tree boards, the following changes are necessary to properly work with the latest changes. + +### Move to `pinctrl` driver + +Before this change, setting up the details of pins to use them for peripherals like SPI, I2C, etc. was a mix of platform specific driver code. Zephyr has moved to the newer `pinctrl` system to unify the handling of pin configuration, with additional flexibility for things like low power modes for those pins, etc. + +#### Board specific shield overlays + +The main area this affects existing shields is those with board specific overrides, e.g. `/boards/seeeduino_xiao_ble.overlay`, that sets up additional components on custom buses, e.g. addressable RGB LEDs leveraging the SPI MOSI pin. + +#### nRF52 Pin Assignments + +Previously in ZMK, we relied on per-driver devicetree source properties to set the alternate pin functions for things like SPI or I2C. For example, here is the I2C bus setup as it was previously on the `nice_nano` board: + +``` +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <17>; + scl-pin = <20>; +}; +``` + +With the move to the `pinctrl` system, this setup now look like: + +``` + &i2c0 { + compatible = "nordic,nrf-twi"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; + }; +``` + +which references the `pinctrl` configuration: + +``` +&pinctrl { + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; +``` + +Although slightly more _verbose_ this allows pin configuration infrastructure to be re-used, specify other modes, like sleep, etc. in a standard way across architectures. + +#### Out of Tree Boards/Shields + +All of the in-tree boards and shields have been upgraded, but if you maintain/use an out-of-tree board or shield that uses the converted boards and overrides pins for various buses, you may need to switch to `pinctrl` to match ZMK's new approach. + +The approach is the following when updating a _board_: + +1. Add an entry `CONFIG_PINCTRL=y` to the `_defconfig` file in the board directory. +1. Add a new file with the naming convention `-pinctrl.dtsi` to your board directory. +1. In the new file, add your `pinctrl` entries that set up different pin control configurations for whatever peripherals/buses are needed. Here's the nice!nano file as an example: + + ``` + /* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + + &pinctrl { + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + }; + ``` + +1. From the main `.dts` file, add an `#include "-pinctrl.dtsi"` to have the C-preprocessor combine the files. +1. Update the various peripheral nodes to use the new `pinctrl` configurations. For example, the following old configuration: + + ``` + &i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; + }; + ``` + + would be changed to: + + ``` + &i2c0 { + compatible = "nordic,nrf-twi"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; + }; + ``` + +Because `pinctrl` configuration is very dependent on the specific target SoC, you will rarely need to consider it for a shield overlay that leverages a pro micro or XIAO abstraction. As noted, you're more likely to need to fix up pinctrl settings is using a board specific shield overlay, e.g. `/boards/.overlay` to set things up. + +### LVGL Kconfig changes. + +With the update to LVGL 8.x, Zephyr now leverages an upstream Kconfig file for most LVGL settings. Due to this, the naming for many existing configs has been adjusted. For any configs moved upstream, the naming mostly involves a prefix change from `LVGL_` to the shorter `LV_`. For any that are still Zephyr specific configs, they are now prefixed with `LV_Z_` prefix. + +If you maintain or use an out of tree board/shield with a display, the following will need to be changed in your Kconfig files: + +- `LVGL_VDB_SIZE` -> `LV_Z_VDB_SIZE` +- `LVGL_DPI` -> `LV_DPI_DEF` +- `LVGL_BITS_PER_PIXEL` -> `LV_Z_BITS_PER_PIXEL` + +Other than those specific examples, most other Kconfig values can simply change the `LVGL_` prefix to `LV_`. + +## Raspberry Pi Pico/RP2040 Support + +This Zephyr update allows ZMK to support the new(-ish) RP2040 SoC found in the Raspberry Pi Pico. + +:::note + +ZMK does _not_ support wired split communication yet, so RP2040 is only usable for non-split keyboards. To follow progress on wired splits, see [#1117](https://github.com/zmkfirmware/zmk/pull/1117). + +::: + +### Supported Controllers + +The following RP2040 powered controllers have board definitions for folks to test: + +- Raspberry Pi Pico (`rpi_pico`) +- SparkFun Pro Micro RP2040 (`sparkfun_pro_micro_rp2040`) +- Adafruit Keyboar/KB2040 (`adafruit_kb2040`) +- Seeeduino XIAO RP2040 (`seeeduino_xiao_rp2040`) +- Adafruit Qt PY RP2040 (`adafruit_qt_py_rp2040`) +- BoardSource blok (`boardsource_blok`) +- Elite-Pi (compatible with the `sparkfun_pro_micro_rp2040` board) + +## Upcoming Changes + +### Display re-init + +Zephyr's improved [power domain](https://docs.zephyrproject.org/3.2.0/services/pm/power_domain.html#pm-power-domain) support is a foundation +upon which we can provide a proper fix for the [longstanding display re-init bug](https://github.com/zmkfirmware/zmk/issues/674) which has prevented +ZMK from formally supporting our display code. + +There is work still remaining to fully leverage the power domain system within ZMK to fix the bug, but upgrading Zephyr is the first necessary step. + +## Thanks! + +Thanks to all the testers who have helped verify ZMK functionality on the newer Zephyr version. + +[petejohanson]: https://github.com/petejohanson +[nicell]: https://github.com/Nicell From 134b64ef5bbc67dd9f1c2a961609c62d4f226711 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 6 Apr 2023 06:14:44 +0000 Subject: [PATCH 0629/1130] fix(docs): Make link to keymap upgrader work. --- docs/blog/2023-04-06-zephyr-3-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2023-04-06-zephyr-3-2.md b/docs/blog/2023-04-06-zephyr-3-2.md index b60ad27c0b1..693d93dc828 100644 --- a/docs/blog/2023-04-06-zephyr-3-2.md +++ b/docs/blog/2023-04-06-zephyr-3-2.md @@ -115,7 +115,7 @@ CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n Due to conflicts with new devicetree node labels added for Zephyr's [reset system](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/reset.html), the `&reset` behavior has been renamed to `&sys_reset`. -All of the in-tree keymaps have been fixed, but you may encounter build failures about duplicate names, requiring you rename the behavior reference in your keymap. Use the [Keymap Upgrader](docs/codes/keymap-upgrader) and this will get fixed for you automatically. +All of the in-tree keymaps have been fixed, but you may encounter build failures about duplicate names, requiring you rename the behavior reference in your keymap. Use the [Keymap Upgrader](/docs/codes/keymap-upgrader) and this will get fixed for you automatically. ## Board/Shield Changes From 9dcc3ac3753d06db752a1fa7610df1f1be376bd2 Mon Sep 17 00:00:00 2001 From: Hooky <117450225+HookyKB@users.noreply.github.com> Date: Fri, 7 Apr 2023 21:53:10 +0800 Subject: [PATCH 0630/1130] fix(shields): Fixup nice!view adapter pinctrl props. `pinctrl-0` setting missing `<>`. --- .../shields/nice_view_adapter/boards/bluemicro840_v1.overlay | 2 +- app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay | 2 +- app/boards/shields/nice_view_adapter/boards/nice_nano.overlay | 2 +- app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay | 2 +- .../nice_view_adapter/boards/nrfmicro_11_flipped.overlay | 2 +- app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay | 2 +- .../shields/nice_view_adapter/boards/puchi_ble_v1.overlay | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay index 27d76b0767b..9667edf9b94 100644 --- a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay @@ -17,7 +17,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay index fc2667f3bb0..21383c701de 100644 --- a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay +++ b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay @@ -16,7 +16,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay index c9a0e78840a..0068b5b2c9d 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay @@ -16,7 +16,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay index 27d76b0767b..9667edf9b94 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay @@ -17,7 +17,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay index 5074d0f9176..09b57d1693d 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay @@ -16,7 +16,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay index 9a4f3170c1d..0cdb933a5e4 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay @@ -16,7 +16,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay index 9a4f3170c1d..0cdb933a5e4 100644 --- a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay @@ -16,7 +16,7 @@ nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; - pinctrl-0 = &spi0_default; + pinctrl-0 = <&spi0_default>; pinctrl-names = "default"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; From 7434a6b99b01561ea20088819dd1e3cc2b989973 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 8 Apr 2023 00:30:20 -0700 Subject: [PATCH 0631/1130] fix(shields): Fix nice!view for deep sleep --- .../nice_view_adapter/boards/bluemicro840_v1.overlay | 12 ++++++++++-- .../nice_view_adapter/boards/mikoto_520.overlay | 11 ++++++++++- .../nice_view_adapter/boards/nice_nano.overlay | 11 ++++++++++- .../nice_view_adapter/boards/nice_nano_v2.overlay | 11 ++++++++++- .../nice_view_adapter/boards/nrfmicro_11.overlay | 12 ++++++++++-- .../boards/nrfmicro_11_flipped.overlay | 11 ++++++++++- .../nice_view_adapter/boards/nrfmicro_13.overlay | 11 ++++++++++- .../nice_view_adapter/boards/puchi_ble_v1.overlay | 11 ++++++++++- 8 files changed, 80 insertions(+), 10 deletions(-) diff --git a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay index 9667edf9b94..b8b07258399 100644 --- a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay @@ -12,13 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; - nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay index 21383c701de..d9cc083572d 100644 --- a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay +++ b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay @@ -12,12 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay index 0068b5b2c9d..2a1b757d434 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay @@ -12,12 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay index 0068b5b2c9d..2a1b757d434 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay @@ -12,12 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay index 9667edf9b94..b8b07258399 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay @@ -12,13 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; - nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay index 09b57d1693d..1cd19db9c38 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay @@ -12,12 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay index 0cdb933a5e4..b8b07258399 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay @@ -12,12 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay index 0cdb933a5e4..b8b07258399 100644 --- a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay @@ -12,12 +12,21 @@ ; }; }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; - pinctrl-names = "default"; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; From b31b42018ae4368b03b72f038d4dfbbeb31a630a Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 8 Apr 2023 11:08:12 -0500 Subject: [PATCH 0632/1130] fix: Remove deprecated labels from zmk_uno --- app/boards/shields/zmk_uno/zmk_uno.overlay | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index f10d18af4a1..12b5e2b33fe 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -16,7 +16,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "RGB"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ @@ -126,8 +125,6 @@ kscan_matrix: kscan_matrix { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_MATRIX"; - diode-direction = "col2row"; col-gpios @@ -146,8 +143,6 @@ compatible = "zmk,kscan-gpio-direct"; status = "disabled"; - label = "KSCAN_DIRECT"; - input-gpios = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> @@ -161,8 +156,6 @@ compatible = "zmk,kscan-gpio-direct"; toggle-mode; - label = "KSCAN_TOGGLE"; - input-gpios = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> From 374104dec616013bd85bcdf095e1ecc4fea40954 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 9 Apr 2023 12:35:34 -0700 Subject: [PATCH 0633/1130] fix(underglow): Move to spi3 for underglow bus. * Workaround Zephyr bug for Nordic SPI(M) driver after the pinctrl refactor by using spi3 peripheral for the SPI bus for the WS2812 led_strip driver. --- .../shields/chalice/boards/nice_nano.overlay | 10 +++++----- .../shields/chalice/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/corne/boards/nice_nano.overlay | 10 +++++----- .../shields/corne/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/elephant42/boards/nice_nano.overlay | 10 +++++----- .../elephant42/boards/nice_nano_v2.overlay | 10 +++++----- .../eternal_keypad/boards/nice_nano.overlay | 10 +++++----- .../eternal_keypad/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/helix/boards/nice_nano.overlay | 10 +++++----- .../shields/helix/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/jorne/boards/nice_nano.overlay | 10 +++++----- .../shields/jorne/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/kyria/boards/nice_nano.overlay | 10 +++++----- .../shields/kyria/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/lily58/boards/nice_nano.overlay | 10 +++++----- .../shields/lily58/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/microdox/boards/nice_nano.overlay | 10 +++++----- .../shields/microdox/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/murphpad/boards/nice_nano.overlay | 10 +++++----- .../shields/murphpad/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/nibble/boards/nice_nano.overlay | 10 +++++----- .../shields/nibble/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/redox/boards/nice_nano.overlay | 10 +++++----- .../shields/redox/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/reviung41/boards/nice_nano.overlay | 12 ++++++------ .../reviung41/boards/nice_nano_v2.overlay | 12 ++++++------ .../shields/romac_plus/boards/nice_nano.overlay | 10 +++++----- .../romac_plus/boards/nice_nano_v2.overlay | 10 +++++----- app/boards/shields/snap/boards/nice_nano.overlay | 10 +++++----- .../shields/snap/boards/nice_nano_v2.overlay | 10 +++++----- .../boards/nice_nano.overlay | 10 +++++----- .../boards/nice_nano_v2.overlay | 10 +++++----- .../boards/nice_nano.overlay | 10 +++++----- .../boards/nice_nano_v2.overlay | 10 +++++----- .../boards/nice_nano.overlay | 10 +++++----- .../boards/nice_nano_v2.overlay | 10 +++++----- app/boards/shields/tg4x/boards/nice_nano.overlay | 10 +++++----- .../shields/tg4x/boards/nice_nano_v2.overlay | 10 +++++----- .../shields/tidbit/boards/nice_nano.overlay | 10 +++++----- .../shields/tidbit/boards/nice_nano_v2.overlay | 10 +++++----- .../two_percent_milk/boards/nice_nano.overlay | 10 +++++----- .../two_percent_milk/boards/nice_nano_v2.overlay | 10 +++++----- docs/docs/features/underglow.md | 16 ++++++++-------- 43 files changed, 220 insertions(+), 220 deletions(-) diff --git a/app/boards/shields/chalice/boards/nice_nano.overlay b/app/boards/shields/chalice/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/chalice/boards/nice_nano.overlay +++ b/app/boards/shields/chalice/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/chalice/boards/nice_nano_v2.overlay b/app/boards/shields/chalice/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/chalice/boards/nice_nano_v2.overlay +++ b/app/boards/shields/chalice/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/corne/boards/nice_nano.overlay b/app/boards/shields/corne/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/corne/boards/nice_nano.overlay +++ b/app/boards/shields/corne/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/corne/boards/nice_nano_v2.overlay b/app/boards/shields/corne/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/corne/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/elephant42/boards/nice_nano.overlay b/app/boards/shields/elephant42/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/elephant42/boards/nice_nano.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/helix/boards/nice_nano.overlay b/app/boards/shields/helix/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/helix/boards/nice_nano.overlay +++ b/app/boards/shields/helix/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/helix/boards/nice_nano_v2.overlay b/app/boards/shields/helix/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/helix/boards/nice_nano_v2.overlay +++ b/app/boards/shields/helix/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/jorne/boards/nice_nano.overlay b/app/boards/shields/jorne/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/jorne/boards/nice_nano.overlay +++ b/app/boards/shields/jorne/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/jorne/boards/nice_nano_v2.overlay b/app/boards/shields/jorne/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/jorne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/jorne/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/kyria/boards/nice_nano.overlay b/app/boards/shields/kyria/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/kyria/boards/nice_nano.overlay +++ b/app/boards/shields/kyria/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/kyria/boards/nice_nano_v2.overlay b/app/boards/shields/kyria/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/kyria/boards/nice_nano_v2.overlay +++ b/app/boards/shields/kyria/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/lily58/boards/nice_nano.overlay b/app/boards/shields/lily58/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/lily58/boards/nice_nano.overlay +++ b/app/boards/shields/lily58/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/lily58/boards/nice_nano_v2.overlay b/app/boards/shields/lily58/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/lily58/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/microdox/boards/nice_nano.overlay b/app/boards/shields/microdox/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/microdox/boards/nice_nano.overlay +++ b/app/boards/shields/microdox/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/microdox/boards/nice_nano_v2.overlay b/app/boards/shields/microdox/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/microdox/boards/nice_nano_v2.overlay +++ b/app/boards/shields/microdox/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay index 89ba4f9d6ed..3e2241a2a10 100644 --- a/app/boards/shields/murphpad/boards/nice_nano.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay index 89ba4f9d6ed..3e2241a2a10 100644 --- a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/nibble/boards/nice_nano.overlay b/app/boards/shields/nibble/boards/nice_nano.overlay index ece699e26d9..54ab9feca7d 100644 --- a/app/boards/shields/nibble/boards/nice_nano.overlay +++ b/app/boards/shields/nibble/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/nibble/boards/nice_nano_v2.overlay b/app/boards/shields/nibble/boards/nice_nano_v2.overlay index ece699e26d9..54ab9feca7d 100644 --- a/app/boards/shields/nibble/boards/nice_nano_v2.overlay +++ b/app/boards/shields/nibble/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/redox/boards/nice_nano.overlay b/app/boards/shields/redox/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/redox/boards/nice_nano.overlay +++ b/app/boards/shields/redox/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/redox/boards/nice_nano_v2.overlay b/app/boards/shields/redox/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/redox/boards/nice_nano_v2.overlay +++ b/app/boards/shields/redox/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/reviung41/boards/nice_nano.overlay b/app/boards/shields/reviung41/boards/nice_nano.overlay index 172859aecb1..741237e1c62 100644 --- a/app/boards/shields/reviung41/boards/nice_nano.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { @@ -32,7 +32,7 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ + chain-length = <11>; spi-one-frame = <0x70>; spi-zero-frame = <0x40>; diff --git a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay index 172859aecb1..741237e1c62 100644 --- a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { @@ -32,7 +32,7 @@ spi-max-frequency = <4000000>; /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ + chain-length = <11>; spi-one-frame = <0x70>; spi-zero-frame = <0x40>; diff --git a/app/boards/shields/romac_plus/boards/nice_nano.overlay b/app/boards/shields/romac_plus/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/snap/boards/nice_nano.overlay b/app/boards/shields/snap/boards/nice_nano.overlay index 15c5801ece3..28e9ce69c32 100644 --- a/app/boards/shields/snap/boards/nice_nano.overlay +++ b/app/boards/shields/snap/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/snap/boards/nice_nano_v2.overlay b/app/boards/shields/snap/boards/nice_nano_v2.overlay index 15c5801ece3..28e9ce69c32 100644 --- a/app/boards/shields/snap/boards/nice_nano_v2.overlay +++ b/app/boards/shields/snap/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay index 4a6b717dfe8..5b9ce4a8762 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay @@ -2,13 +2,13 @@ &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -16,12 +16,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay index ed03ed0d392..9e168625086 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay index 172859aecb1..f1330669641 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/tg4x/boards/nice_nano.overlay b/app/boards/shields/tg4x/boards/nice_nano.overlay index 62f201408ae..54046bf548e 100644 --- a/app/boards/shields/tg4x/boards/nice_nano.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay index 62f201408ae..54046bf548e 100644 --- a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/tidbit/boards/nice_nano.overlay b/app/boards/shields/tidbit/boards/nice_nano.overlay index 08379e3098d..ad66feac7f6 100644 --- a/app/boards/shields/tidbit/boards/nice_nano.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay index 08379e3098d..ad66feac7f6 100644 --- a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay index 08379e3098d..ad66feac7f6 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay index 08379e3098d..ad66feac7f6 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay @@ -1,13 +1,13 @@ #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -15,12 +15,12 @@ }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index c70ffffb689..c1dc68d3177 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -52,7 +52,7 @@ For example, the Kyria shield has a `boards/nice_nano.overlay` file that defines ### nRF52-based boards -With nRF52 boards, you can just use `&spi1` and define the pins you want to use. +With nRF52 boards, you can just use `&spi3` and define the pins you want to use. Here's an example on a definition that uses P0.06: @@ -60,13 +60,13 @@ Here's an example on a definition that uses P0.06: #include &pinctrl { - spi1_default: spi1_default { + spi3_default: spi3_default { group1 { psels = ; }; }; - spi1_sleep: spi1_sleep { + spi3_sleep: spi3_sleep { group1 { psels = ; low-power-enable; @@ -74,12 +74,12 @@ Here's an example on a definition that uses P0.06: }; }; -&spi1 { +&spi3 { compatible = "nordic,nrf-spim"; status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; pinctrl-names = "default", "sleep"; led_strip: ws2812@0 { @@ -119,12 +119,12 @@ If your board/shield uses LEDs that require the data sent in a different order, For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. -Here's another example for a non-nRF52 board on `spi1`: +Here's another example for a non-nRF52 board on `spi3`: ``` #include -&spi1 { +&spi3 { led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; From 064aff6bc074febd394a288403129e95c386395d Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 8 Apr 2023 16:32:29 -0500 Subject: [PATCH 0634/1130] fix(behaviors): Fix use after free in sticky key Fixed an issue where the sticky key behavior would call ZMK_EVENT_RAISE_AFTER(), which would free the provided event, but then it would keep using that now-freed event data. --- app/src/behaviors/behavior_sticky_key.c | 30 +++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 2293608694c..6697b9b1bbb 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -191,6 +191,11 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { // keep track whether the event has been reraised, so we only reraise it once bool event_reraised = false; + + // reraising the event frees it, so make a copy of any event data we might + // need after it's been freed. + const struct zmk_keycode_state_changed ev_copy = *ev; + for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { struct active_sticky_key *sticky_key = &active_sticky_keys[i]; if (sticky_key->position == ZMK_BHV_STICKY_KEY_POSITION_FREE) { @@ -198,23 +203,24 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { } if (strcmp(sticky_key->config->behavior.behavior_dev, "KEY_PRESS") == 0 && - ZMK_HID_USAGE_ID(sticky_key->param1) == ev->keycode && - ZMK_HID_USAGE_PAGE(sticky_key->param1) == ev->usage_page && - SELECT_MODS(sticky_key->param1) == ev->implicit_modifiers) { + ZMK_HID_USAGE_ID(sticky_key->param1) == ev_copy.keycode && + ZMK_HID_USAGE_PAGE(sticky_key->param1) == ev_copy.usage_page && + SELECT_MODS(sticky_key->param1) == ev_copy.implicit_modifiers) { // don't catch key down events generated by the sticky key behavior itself continue; } // If this event was queued, the timer may be triggered late or not at all. // Release the sticky key if the timer should've run out in the meantime. - if (sticky_key->release_at != 0 && ev->timestamp > sticky_key->release_at) { + if (sticky_key->release_at != 0 && ev_copy.timestamp > sticky_key->release_at) { stop_timer(sticky_key); release_sticky_key_behavior(sticky_key, sticky_key->release_at); continue; } - if (ev->state) { // key down - if (sticky_key->config->ignore_modifiers && is_mod(ev->usage_page, ev->keycode)) { + if (ev_copy.state) { // key down + if (sticky_key->config->ignore_modifiers && + is_mod(ev_copy.usage_page, ev_copy.keycode)) { // ignore modifier key press so we can stack sticky keys and combine with other // modifiers continue; @@ -231,17 +237,17 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { ZMK_EVENT_RAISE_AFTER(eh, behavior_sticky_key); event_reraised = true; } - release_sticky_key_behavior(sticky_key, ev->timestamp); + release_sticky_key_behavior(sticky_key, ev_copy.timestamp); } } - sticky_key->modified_key_usage_page = ev->usage_page; - sticky_key->modified_key_keycode = ev->keycode; + sticky_key->modified_key_usage_page = ev_copy.usage_page; + sticky_key->modified_key_keycode = ev_copy.keycode; } else { // key up if (sticky_key->timer_started && - sticky_key->modified_key_usage_page == ev->usage_page && - sticky_key->modified_key_keycode == ev->keycode) { + sticky_key->modified_key_usage_page == ev_copy.usage_page && + sticky_key->modified_key_keycode == ev_copy.keycode) { stop_timer(sticky_key); - release_sticky_key_behavior(sticky_key, ev->timestamp); + release_sticky_key_behavior(sticky_key, ev_copy.timestamp); } } } From 3c8f55ede0a8f08f0cc11e500c0f2e3d05a87f7c Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 9 Apr 2023 18:08:35 -0700 Subject: [PATCH 0635/1130] fix(display): Do not override font size in status screen --- app/src/display/status_screen.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/display/status_screen.c b/app/src/display/status_screen.c index 7c3870a8de5..58de09ae403 100644 --- a/app/src/display/status_screen.c +++ b/app/src/display/status_screen.c @@ -34,16 +34,9 @@ static struct zmk_widget_layer_status layer_status_widget; static struct zmk_widget_wpm_status wpm_status_widget; #endif -lv_style_t global_style; - lv_obj_t *zmk_display_status_screen() { lv_obj_t *screen; - - lv_style_init(&global_style); - lv_style_set_text_font(&global_style, &lv_font_montserrat_12); - screen = lv_obj_create(NULL); - lv_obj_add_style(screen, &global_style, LV_PART_MAIN); #if IS_ENABLED(CONFIG_ZMK_WIDGET_BATTERY_STATUS) zmk_widget_battery_status_init(&battery_status_widget, screen); From 702d79c108bfd02d85dda3dda55f31ce8316cfd8 Mon Sep 17 00:00:00 2001 From: nguyendown <50001260+nguyendown@users.noreply.github.com> Date: Mon, 10 Apr 2023 12:50:57 +0700 Subject: [PATCH 0636/1130] test(behaviors): add unit tests for sticky key `quick-release` Duplicate the existing tests with `quick-release` enabled: - 8-lsk-osk-combination-quick-release - 10-callum-mods-quick-release --- .../events.patterns | 1 + .../keycode_events.snapshot | 10 ++++ .../native_posix_64.keymap | 40 +++++++++++++ .../events.patterns | 1 + .../keycode_events.snapshot | 12 ++++ .../native_posix_64.keymap | 56 +++++++++++++++++++ 6 files changed, 120 insertions(+) create mode 100644 app/tests/sticky-keys/10-callum-mods-quick-release/events.patterns create mode 100644 app/tests/sticky-keys/10-callum-mods-quick-release/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap create mode 100644 app/tests/sticky-keys/8-lsk-osk-combination-quick-release/events.patterns create mode 100644 app/tests/sticky-keys/8-lsk-osk-combination-quick-release/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap diff --git a/app/tests/sticky-keys/10-callum-mods-quick-release/events.patterns b/app/tests/sticky-keys/10-callum-mods-quick-release/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/sticky-keys/10-callum-mods-quick-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/sticky-keys/10-callum-mods-quick-release/keycode_events.snapshot b/app/tests/sticky-keys/10-callum-mods-quick-release/keycode_events.snapshot new file mode 100644 index 00000000000..5ee7c103696 --- /dev/null +++ b/app/tests/sticky-keys/10-callum-mods-quick-release/keycode_events.snapshot @@ -0,0 +1,10 @@ +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap new file mode 100644 index 00000000000..5c1c2264546 --- /dev/null +++ b/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap @@ -0,0 +1,40 @@ +#include +#include +#include + +&sk { + quick-release; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sk LEFT_CONTROL &kp A + &sk LEFT_SHIFT &sk LEFT_ALT>; + }; + }; +}; + +&kscan { + events = < + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap sk LEFT_ALT */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* tap A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap A (no sticky keys anymore) */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; diff --git a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/events.patterns b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/keycode_events.snapshot b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/keycode_events.snapshot new file mode 100644 index 00000000000..d71c3968318 --- /dev/null +++ b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/keycode_events.snapshot @@ -0,0 +1,12 @@ +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap new file mode 100644 index 00000000000..6d88a9ea1cb --- /dev/null +++ b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap @@ -0,0 +1,56 @@ +#include +#include +#include + +&sk { + quick-release; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sk LEFT_SHIFT &sl 1 + &kp A &kp B>; + }; + + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &kp Y &kp Z>; + }; + }; +}; + +&kscan { + events = < + /* tap sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap A */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap B */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap Y */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap B */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + >; +}; From 3f48062225e0382de35cecc3da6914be89a2c91e Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Fri, 24 Feb 2023 18:11:46 -0500 Subject: [PATCH 0637/1130] feat(core): Add Kconfig option to exclude debug log messages --- app/Kconfig | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 824d2700619..794b6762ecd 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -402,6 +402,17 @@ endmenu menu "USB Logging" +config ZMK_LOGGING_MINIMAL + bool "Suppress all ZMK debug log messages" + default false + +if !ZMK_LOGGING_MINIMAL + +config ZMK_LOG_LEVEL + default 4 + +endif + config ZMK_USB_LOGGING bool "Enable USB CDC ACM logging to help debug" select LOG @@ -417,16 +428,12 @@ config ZMK_USB_LOGGING if ZMK_USB_LOGGING -config ZMK_LOG_LEVEL - default 4 - choice USB_CDC_ACM_LOG_LEVEL_CHOICE default USB_CDC_ACM_LOG_LEVEL_OFF endchoice choice USB_DRIVER_LOG_LEVEL_CHOICE default USB_DRIVER_LOG_LEVEL_OFF - endchoice # We do this to avoid log loop where logging to USB generates more log messages. From a20b9502bc069cac94a55243cf091e3174a9992b Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Fri, 24 Feb 2023 18:14:23 -0500 Subject: [PATCH 0638/1130] feat(core): Add RTT logging Kconfig option --- app/Kconfig | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 794b6762ecd..75a37f6386d 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -400,7 +400,7 @@ config ZMK_KSCAN_EVENT_QUEUE_SIZE #KSCAN Settings endmenu -menu "USB Logging" +menu "Logging" config ZMK_LOGGING_MINIMAL bool "Suppress all ZMK debug log messages" @@ -441,16 +441,38 @@ endchoice config USB_CDC_ACM_RINGBUF_SIZE default 1024 -config LOG_BUFFER_SIZE - default 8192 - config LOG_PROCESS_THREAD_STARTUP_DELAY_MS default 1000 #ZMK_USB_LOGGING endif -#USB Logging +config ZMK_RTT_LOGGING + bool "Enable RTT logging to help debug" + select LOG + select DEBUG + select ASSERT + select USE_SEGGER_RTT + select CONSOLE + select RTT_CONSOLE + +if ZMK_RTT_LOGGING + +config SEGGER_RTT_BUFFER_SIZE_UP + default 8192 + +#ZMK_RTT_LOGGING +endif + +if ZMK_USB_LOGGING || ZMK_RTT_LOGGING + +config LOG_BUFFER_SIZE + default 8192 + +#ZMK_USB_LOGGING || ZMK_RTT_LOGGING +endif + +#Logging endmenu if SETTINGS From ee9fcec3c97c23e15a2369b95cc0a590f04f1875 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Fri, 24 Feb 2023 18:16:18 -0500 Subject: [PATCH 0639/1130] feat(core): Process log every 100ms --- app/Kconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 75a37f6386d..431a1bb1fbe 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -469,6 +469,9 @@ if ZMK_USB_LOGGING || ZMK_RTT_LOGGING config LOG_BUFFER_SIZE default 8192 +config LOG_PROCESS_THREAD_SLEEP_MS + default 100 + #ZMK_USB_LOGGING || ZMK_RTT_LOGGING endif From 309359b32f2ce46adc2b720b1cca20d9ac333d6c Mon Sep 17 00:00:00 2001 From: Purdea Andrei Date: Mon, 10 Apr 2023 10:27:19 +0300 Subject: [PATCH 0640/1130] fix(keymaps): fix keypresses that are not in the transform Before this change, if a matrix position was not present in the transform, various incorrect behaviors would happen: 1) In some cases out-of-bounds accesses: Note that the size of the`transform[]` array does not necessarily match the size of the matrix. So for example if key position (ZMK_MATRIX_COLS-1, ZMK_MATRIX_ROWS-1) is not present in the transform, but ends up being pressed, then the array will be accessed beyond its size, and any data could be returned. 2) In other cases the 0th position in the keymap will be used because the `transform[]` array is initialized to all zeros. --- app/include/zmk/matrix_transform.h | 2 +- app/src/kscan.c | 9 ++++++- app/src/matrix_transform.c | 41 ++++++++++++++++++++++++------ 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/app/include/zmk/matrix_transform.h b/app/include/zmk/matrix_transform.h index 413678a7e3a..ffd3e3f1d29 100644 --- a/app/include/zmk/matrix_transform.h +++ b/app/include/zmk/matrix_transform.h @@ -6,4 +6,4 @@ #pragma once -uint32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t column); \ No newline at end of file +int32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t column); \ No newline at end of file diff --git a/app/src/kscan.c b/app/src/kscan.c index b07133203ca..62d0cf0756e 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -47,7 +47,14 @@ void zmk_kscan_process_msgq(struct k_work *item) { while (k_msgq_get(&zmk_kscan_msgq, &ev, K_NO_WAIT) == 0) { bool pressed = (ev.state == ZMK_KSCAN_EVENT_STATE_PRESSED); - uint32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); + int32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); + + if (position < 0) { + LOG_WRN("Not found in transform: row: %d, col: %d, pressed: %s", ev.row, ev.column, + (pressed ? "true" : "false")); + continue; + } + LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, (pressed ? "true" : "false")); ZMK_EVENT_RAISE(new_zmk_position_state_changed( diff --git a/app/src/matrix_transform.c b/app/src/matrix_transform.c index 47256608fd7..6c616d5e824 100644 --- a/app/src/matrix_transform.c +++ b/app/src/matrix_transform.c @@ -11,17 +11,32 @@ #ifdef ZMK_KEYMAP_TRANSFORM_NODE -#define _TRANSFORM_ENTRY(i, _) \ +/* the transform in the device tree is a list of (row,column) pairs that is + * indexed by by the keymap position of that key. We want to invert this in + * order to be able to quickly determine what keymap position a particular + * row,column pair is associated with, using a single lookup. + * + * We do this by creating the `transform` array at compile time, which is + * indexed by (row * ZMK_MATRIX_COLS) + column, and the value contains an + * encoded keymap index it is associated with. The keymap index is encoded + * by adding INDEX_OFFSET to it, because not all row,column pairs have an + * associated keymap index (some matrices are sparse), C globals are + * initialized to 0, and the keymap index of 0 is a valid index. We want to + * be able to detect the condition when an unassigned matrix position is + * pressed and we want to return an error. + */ + +#define INDEX_OFFSET 1 + +#define TRANSFORM_ENTRY(i, _) \ [(KT_ROW(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i)) * ZMK_MATRIX_COLS) + \ - KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i + KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i + INDEX_OFFSET -static uint32_t transform[] = {LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, (, ), 0)}; +static uint32_t transform[] = {LISTIFY(ZMK_KEYMAP_LEN, TRANSFORM_ENTRY, (, ), 0)}; #endif -uint32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t column) { - uint32_t matrix_index; - +int32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t column) { #if DT_NODE_HAS_PROP(ZMK_KEYMAP_TRANSFORM_NODE, col_offset) column += DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, col_offset); #endif @@ -30,10 +45,20 @@ uint32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t colu row += DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, row_offset); #endif - matrix_index = (row * ZMK_MATRIX_COLS) + column; + const uint32_t matrix_index = (row * ZMK_MATRIX_COLS) + column; #ifdef ZMK_KEYMAP_TRANSFORM_NODE - return transform[matrix_index]; + if (matrix_index >= ARRAY_SIZE(transform)) { + return -EINVAL; + } + + const uint32_t value = transform[matrix_index]; + + if (!value) { + return -EINVAL; + } + + return value - INDEX_OFFSET; #else return matrix_index; #endif /* ZMK_KEYMAP_TRANSFORM_NODE */ From f1b138cbf0a37147f24150af2721899fa17e9fd4 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 14 Apr 2023 14:22:53 -0700 Subject: [PATCH 0641/1130] fix(boards): Fix Zen logo alignment --- app/boards/arm/corneish_zen/custom_status_screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/corneish_zen/custom_status_screen.c b/app/boards/arm/corneish_zen/custom_status_screen.c index c45a6243b60..492239c8a57 100644 --- a/app/boards/arm/corneish_zen/custom_status_screen.c +++ b/app/boards/arm/corneish_zen/custom_status_screen.c @@ -70,7 +70,7 @@ lv_obj_t *zmk_display_status_screen() { lv_obj_t *zenlogo_icon; zenlogo_icon = lv_img_create(screen); lv_img_set_src(zenlogo_icon, &zenlogo); - lv_obj_align(zenlogo_icon, LV_ALIGN_BOTTOM_MID, 2, -5); + lv_obj_align(zenlogo_icon, LV_ALIGN_BOTTOM_MID, 0, -5); #endif return screen; From 71855af14fa079606d4cbdd3d6403e8956c136f8 Mon Sep 17 00:00:00 2001 From: Josep Roca Date: Sun, 16 Apr 2023 10:04:49 +0300 Subject: [PATCH 0642/1130] fix(docs): ignore-modifiers clarification * Clarify the potential need of adding the ignore-modifiers setting for new sticky key behaviors. * Add ignore-modifiers setting to skq example * Update docs/docs/behaviors/sticky-key.md Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/sticky-key.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index 12541ed868c..d881e6b0b83 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -36,7 +36,7 @@ Some typists may find that using a sticky shift key interspersed with rapid typi #### `ignore-modifiers` -This setting is enabled by default. It ensures that if a sticky key modifier is pressed before a previously pressed sticky key is released, the modifiers will get combined so you can add more sticky keys or press a regular key to apply the modifiers. This is to accommodate _callum-style mods_ where you are prone to rolling sticky keys. If you want sticky key modifiers to only chain after release, you can disable this setting. +This setting is enabled by default. It ensures that if a sticky key modifier is pressed before a previously pressed sticky key is released, the modifiers will get combined so you can add more sticky keys or press a regular key to apply the modifiers. This is to accommodate _callum-style mods_ where you are prone to rolling sticky keys. If you want sticky key modifiers to only chain after release, you can disable this setting. Please note that activating multiple modifiers via [modifier functions](https://zmk.dev/docs/codes/modifiers#modifier-functions) such as `&sk LS(LALT)`, require `ignore-modifiers` enabled in order to function properly. #### Example @@ -66,6 +66,7 @@ This configuration would apply to all sticky keys. This may not be appropriate i bindings = <&kp>; release-after-ms = <1000>; quick-release; + ignore-modifiers; }; }; From 83a151890cd9491036ef2d73cd22db86a7a55f5c Mon Sep 17 00:00:00 2001 From: sporkus <102923689+sporkus@users.noreply.github.com> Date: Sun, 16 Apr 2023 13:28:08 -0700 Subject: [PATCH 0643/1130] fix(docs): Correct example keymap filename --- docs/docs/development/boards-shields-keymaps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 4644ee793f2..77d8361a8df 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -30,7 +30,7 @@ in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) - (Optional) A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `board.cmake` file with CMake directives for how to flash to the device. -- A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. +- A `${board_name}.keymap` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. ## Pro Micro Compatible Keyboard From e7a6e4016d757d37f0b8df28d7b78f38554e0b27 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 29 Oct 2022 23:17:12 -0500 Subject: [PATCH 0644/1130] feat(behaviors): Add key position to key events Extended the virtual key position system from combos so that each sensor also gets a virtual key position. This allows sensor behaviors to use the behavior queue API. --- app/include/drivers/behavior.h | 13 +++++++----- app/include/zmk/sensors.h | 7 ++++++- app/include/zmk/virtual_key_position.h | 20 +++++++++++++++++++ .../behavior_sensor_rotate_key_press.c | 3 ++- app/src/combo.c | 3 ++- app/src/keymap.c | 10 ++++++---- 6 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 app/include/zmk/virtual_key_position.h diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 71df73440e7..df18385f529 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -26,6 +26,7 @@ typedef int (*behavior_keymap_binding_callback_t)(struct zmk_behavior_binding *b struct zmk_behavior_binding_event event); typedef int (*behavior_sensor_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, const struct device *sensor, + uint32_t virtual_key_position, int64_t timestamp); enum behavior_locality { @@ -150,21 +151,23 @@ static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_bi /** * @brief Handle the a sensor keymap binding being triggered - * @param dev Pointer to the device structure for the driver instance. + * @param binding Sensor keymap binding which was triggered. * @param sensor Pointer to the sensor device structure for the sensor driver instance. - * @param param1 User parameter specified at time of behavior binding. - * @param param2 User parameter specified at time of behavior binding. + * @param virtual_key_position ZMK_KEYMAP_LEN + sensor number + * @param timestamp Time at which the binding was triggered. * * @retval 0 If successful. * @retval Negative errno code if failure. */ __syscall int behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, const struct device *sensor, + uint32_t virtual_key_position, int64_t timestamp); static inline int z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, - const struct device *sensor, int64_t timestamp) { + const struct device *sensor, + uint32_t virtual_key_position, int64_t timestamp) { const struct device *dev = device_get_binding(binding->behavior_dev); if (dev == NULL) { @@ -177,7 +180,7 @@ z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *bin return -ENOTSUP; } - return api->sensor_binding_triggered(binding, sensor, timestamp); + return api->sensor_binding_triggered(binding, sensor, virtual_key_position, timestamp); } /** diff --git a/app/include/zmk/sensors.h b/app/include/zmk/sensors.h index 8c6c28b3848..9e54695fc19 100644 --- a/app/include/zmk/sensors.h +++ b/app/include/zmk/sensors.h @@ -8,5 +8,10 @@ #define ZMK_KEYMAP_SENSORS_NODE DT_INST(0, zmk_keymap_sensors) #define ZMK_KEYMAP_HAS_SENSORS DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_NODE, okay) -#define ZMK_KEYMAP_SENSORS_LEN DT_PROP_LEN(ZMK_KEYMAP_SENSORS_NODE, sensors) #define ZMK_KEYMAP_SENSORS_BY_IDX(idx) DT_PHANDLE_BY_IDX(ZMK_KEYMAP_SENSORS_NODE, sensors, idx) + +#if ZMK_KEYMAP_HAS_SENSORS +#define ZMK_KEYMAP_SENSORS_LEN DT_PROP_LEN(ZMK_KEYMAP_SENSORS_NODE, sensors) +#else +#define ZMK_KEYMAP_SENSORS_LEN 0 +#endif diff --git a/app/include/zmk/virtual_key_position.h b/app/include/zmk/virtual_key_position.h new file mode 100644 index 00000000000..48deee5c6c8 --- /dev/null +++ b/app/include/zmk/virtual_key_position.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +/** + * Gets the virtual key position to use for the sensor with the given index. + */ +#define ZMK_VIRTUAL_KEY_POSITION_SENSOR(index) (ZMK_KEYMAP_LEN + (index)) + +/** + * Gets the virtual key position to use for the combo with the given index. + */ +#define ZMK_VIRTUAL_KEY_POSITION_COMBO(index) (ZMK_KEYMAP_LEN + ZMK_KEYMAP_SENSORS_LEN + (index)) diff --git a/app/src/behaviors/behavior_sensor_rotate_key_press.c b/app/src/behaviors/behavior_sensor_rotate_key_press.c index ed6eedae9d7..72e33ea46b0 100644 --- a/app/src/behaviors/behavior_sensor_rotate_key_press.c +++ b/app/src/behaviors/behavior_sensor_rotate_key_press.c @@ -21,7 +21,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static int behavior_sensor_rotate_key_press_init(const struct device *dev) { return 0; }; static int on_sensor_binding_triggered(struct zmk_behavior_binding *binding, - const struct device *sensor, int64_t timestamp) { + const struct device *sensor, uint32_t virtual_key_position, + int64_t timestamp) { struct sensor_value value; int err; uint32_t keycode; diff --git a/app/src/combo.c b/app/src/combo.c index 2e2373302d3..90c89c15e73 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -19,6 +19,7 @@ #include #include #include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -476,7 +477,7 @@ ZMK_SUBSCRIPTION(combo, zmk_position_state_changed); .key_positions = DT_PROP(n, key_positions), \ .key_position_len = DT_PROP_LEN(n, key_positions), \ .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, n), \ - .virtual_key_position = ZMK_KEYMAP_LEN + __COUNTER__, \ + .virtual_key_position = ZMK_VIRTUAL_KEY_POSITION_COMBO(__COUNTER__), \ .slow_release = DT_PROP(n, slow_release), \ .layers = DT_PROP(n, layers), \ .layers_len = DT_PROP_LEN(n, layers), \ diff --git a/app/src/keymap.c b/app/src/keymap.c index c4e304d4b31..825246fa95f 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -4,16 +4,17 @@ * SPDX-License-Identifier: MIT */ +#include #include #include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include +#include #include #include -#include -#include -#include +#include #include #if ZMK_BLE_IS_CENTRAL @@ -269,7 +270,8 @@ int zmk_keymap_sensor_triggered(uint8_t sensor_number, const struct device *sens continue; } - ret = behavior_sensor_keymap_binding_triggered(binding, sensor, timestamp); + const uint32_t position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_number); + ret = behavior_sensor_keymap_binding_triggered(binding, sensor, position, timestamp); if (ret > 0) { LOG_DBG("behavior processing to continue to next layer"); From 5c6f21b0e0fe0e85b43056e1ec8b6087b5d31e29 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 29 Oct 2022 23:26:25 -0500 Subject: [PATCH 0645/1130] fix: Fix compiler warnings in sensor code --- app/src/keymap.c | 2 +- app/src/sensors.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/keymap.c b/app/src/keymap.c index 825246fa95f..1f55ad03d30 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -255,7 +255,7 @@ int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pr int zmk_keymap_sensor_triggered(uint8_t sensor_number, const struct device *sensor, int64_t timestamp) { for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= _zmk_keymap_layer_default; layer--) { - if (zmk_keymap_layer_active(layer) && zmk_sensor_keymap[layer] != NULL) { + if (zmk_keymap_layer_active(layer)) { struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_number]; const struct device *behavior; int ret; diff --git a/app/src/sensors.c b/app/src/sensors.c index efae2bd975b..1b92147f8ca 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -35,9 +35,10 @@ struct sensors_data_item { static struct sensors_data_item sensors[] = {LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_ITEM, (, ), 0)}; -static void zmk_sensors_trigger_handler(const struct device *dev, struct sensor_trigger *trigger) { +static void zmk_sensors_trigger_handler(const struct device *dev, + const struct sensor_trigger *trigger) { int err; - struct sensors_data_item *item = CONTAINER_OF(trigger, struct sensors_data_item, trigger); + const struct sensors_data_item *item = CONTAINER_OF(trigger, struct sensors_data_item, trigger); LOG_DBG("sensor %d", item->sensor_number); From 9a73650041da7008fa2df7bd8bbb02ecc8efd9b4 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 21 Apr 2023 09:16:28 -0700 Subject: [PATCH 0646/1130] fix(boards): Move nice!60 to SPI3 for underglow * Move to SPI3 for underglow peripheral, needed after the move to pinctrl. --- app/boards/arm/nice60/nice60-pinctrl.dtsi | 2 +- app/boards/arm/nice60/nice60.dts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/arm/nice60/nice60-pinctrl.dtsi b/app/boards/arm/nice60/nice60-pinctrl.dtsi index aced76b4bc3..ace80f10aae 100644 --- a/app/boards/arm/nice60/nice60-pinctrl.dtsi +++ b/app/boards/arm/nice60/nice60-pinctrl.dtsi @@ -4,7 +4,7 @@ */ &pinctrl { - spi0_default: spi0_default { + spi3_default: spi3_default { group1 { psels = ; }; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index c982f88eef8..fdc65d6bca8 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -109,10 +109,10 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R status = "okay"; }; -&spi0 { +&spi3 { compatible = "nordic,nrf-spim"; - /* Cannot be used together with i2c0. */ - pinctrl-0 = <&spi0_default>; + + pinctrl-0 = <&spi3_default>; pinctrl-names = "default"; status = "okay"; From 3db163aa2cf7db2bd710ba93b57f3eb804b086c7 Mon Sep 17 00:00:00 2001 From: Nick Conway Date: Mon, 23 May 2022 16:33:08 -0400 Subject: [PATCH 0647/1130] feat(behaviors): Add reusable sensor behaviors. * Add new sensor behaviors that either take full bindings add definition, or accept parameters when bound in the keymap. * Remove existing hard-coded key press sensor behavior and instead leverage new generic sensor behaviors to achieve the same functionality. Co-authored-by: nick@conway.dev --- app/CMakeLists.txt | 4 +- app/Kconfig | 6 +- app/Kconfig.behaviors | 24 ++++++ .../behaviors/sensor_rotate_key_press.dtsi | 3 +- .../zmk,behavior-sensor-rotate-key-press.yaml | 19 ----- .../zmk,behavior-sensor-rotate-var.yaml | 25 ++++++ .../behaviors/zmk,behavior-sensor-rotate.yaml | 21 +++++ app/include/drivers/behavior.h | 10 +-- app/src/behaviors/behavior_sensor_rotate.c | 40 ++++++++++ .../behaviors/behavior_sensor_rotate_common.c | 52 +++++++++++++ .../behaviors/behavior_sensor_rotate_common.h | 13 ++++ .../behavior_sensor_rotate_key_press.c | 69 ----------------- .../behaviors/behavior_sensor_rotate_var.c | 31 ++++++++ app/src/keymap.c | 5 +- docs/docs/behaviors/sensor-rotate.md | 77 +++++++++++++++++++ docs/docs/features/encoders.md | 8 +- docs/sidebars.js | 1 + 17 files changed, 301 insertions(+), 107 deletions(-) create mode 100644 app/Kconfig.behaviors delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml create mode 100644 app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml create mode 100644 app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml create mode 100644 app/src/behaviors/behavior_sensor_rotate.c create mode 100644 app/src/behaviors/behavior_sensor_rotate_common.c create mode 100644 app/src/behaviors/behavior_sensor_rotate_common.h delete mode 100644 app/src/behaviors/behavior_sensor_rotate_key_press.c create mode 100644 app/src/behaviors/behavior_sensor_rotate_var.c create mode 100644 docs/docs/behaviors/sensor-rotate.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 3da50b57e5d..a647e88363f 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -51,7 +51,9 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_to_layer.c) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) target_sources(app PRIVATE src/behaviors/behavior_none.c) - target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE app PRIVATE src/behaviors/behavior_sensor_rotate.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_VAR app PRIVATE src/behaviors/behavior_sensor_rotate_var.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON app PRIVATE src/behaviors/behavior_sensor_rotate_common.c) target_sources(app PRIVATE src/combo.c) target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behavior_queue.c) diff --git a/app/Kconfig b/app/Kconfig index 431a1bb1fbe..ccc5f42d7f3 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -350,11 +350,7 @@ config ZMK_BEHAVIORS_QUEUE_SIZE int "Maximum number of behaviors to allow queueing from a macro or other complex behavior" default 64 -DT_COMPAT_ZMK_BEHAVIOR_KEY_TOGGLE := zmk,behavior-key-toggle - -config ZMK_BEHAVIOR_KEY_TOGGLE - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BEHAVIOR_KEY_TOGGLE)) +rsource "Kconfig.behaviors" config ZMK_MACRO_DEFAULT_WAIT_MS int "Default time to wait (in milliseconds) before triggering the next behavior in macros" diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors new file mode 100644 index 00000000000..17850eae2ff --- /dev/null +++ b/app/Kconfig.behaviors @@ -0,0 +1,24 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config ZMK_BEHAVIOR_KEY_TOGGLE + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_KEY_TOGGLE_ENABLED + + +config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON + bool + default n + +config ZMK_BEHAVIOR_SENSOR_ROTATE + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_SENSOR_ROTATE_ENABLED + select ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON + +config ZMK_BEHAVIOR_SENSOR_ROTATE_VAR + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_SENSOR_ROTATE_VAR_ENABLED + select ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON \ No newline at end of file diff --git a/app/dts/behaviors/sensor_rotate_key_press.dtsi b/app/dts/behaviors/sensor_rotate_key_press.dtsi index d3f084b0403..ed1b4cd0001 100644 --- a/app/dts/behaviors/sensor_rotate_key_press.dtsi +++ b/app/dts/behaviors/sensor_rotate_key_press.dtsi @@ -8,9 +8,10 @@ behaviors { /* DEPRECATED: `inc_dec_cp` will be removed in the future */ /omit-if-no-ref/ inc_dec_cp: inc_dec_kp: behavior_sensor_rotate_key_press { - compatible = "zmk,behavior-sensor-rotate-key-press"; + compatible = "zmk,behavior-sensor-rotate-var"; label = "ENC_KEY_PRESS"; #sensor-binding-cells = <2>; + bindings = <&kp>, <&kp>; }; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml deleted file mode 100644 index 1fc60fcf24e..00000000000 --- a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -description: Sensor rotate key press/release behavior - -compatible: "zmk,behavior-sensor-rotate-key-press" - -properties: - label: - type: string - required: true - "#sensor-binding-cells": - type: int - required: true - const: 2 - -sensor-binding-cells: - - param1 - - param2 diff --git a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml new file mode 100644 index 00000000000..0da3b4dbfea --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml @@ -0,0 +1,25 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Sensor rotate behavior + +compatible: "zmk,behavior-sensor-rotate-var" + +properties: + label: + type: string + required: true + "#sensor-binding-cells": + type: int + required: true + const: 2 + bindings: + type: phandles + required: true + tap-ms: + type: int + default: 5 + +sensor-binding-cells: + - param1 + - param2 diff --git a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml new file mode 100644 index 00000000000..d20777b8d98 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml @@ -0,0 +1,21 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Sensor rotate behavior + +compatible: "zmk,behavior-sensor-rotate" + +properties: + label: + type: string + required: true + "#sensor-binding-cells": + type: int + required: true + const: 0 + bindings: + type: phandle-array + required: true + tap-ms: + type: int + default: 5 diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index df18385f529..380fc76f9ba 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -26,8 +26,7 @@ typedef int (*behavior_keymap_binding_callback_t)(struct zmk_behavior_binding *b struct zmk_behavior_binding_event event); typedef int (*behavior_sensor_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, const struct device *sensor, - uint32_t virtual_key_position, - int64_t timestamp); + struct zmk_behavior_binding_event event); enum behavior_locality { BEHAVIOR_LOCALITY_CENTRAL, @@ -161,13 +160,12 @@ static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_bi */ __syscall int behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, const struct device *sensor, - uint32_t virtual_key_position, - int64_t timestamp); + struct zmk_behavior_binding_event event); static inline int z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, const struct device *sensor, - uint32_t virtual_key_position, int64_t timestamp) { + struct zmk_behavior_binding_event event) { const struct device *dev = device_get_binding(binding->behavior_dev); if (dev == NULL) { @@ -180,7 +178,7 @@ z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *bin return -ENOTSUP; } - return api->sensor_binding_triggered(binding, sensor, virtual_key_position, timestamp); + return api->sensor_binding_triggered(binding, sensor, event); } /** diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c new file mode 100644 index 00000000000..e12278bba1a --- /dev/null +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_sensor_rotate + +#include + +#include + +#include "behavior_sensor_rotate_common.h" + +static const struct behavior_driver_api behavior_sensor_rotate_driver_api = { + .sensor_binding_triggered = zmk_behavior_sensor_rotate_common_trigger}; + +static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; + +#define _TRANSFORM_ENTRY(idx, node) \ + { \ + .behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(node, bindings, idx), label), \ + .param1 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param1), (0), \ + (DT_INST_PHA_BY_IDX(node, bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param2), (0), \ + (DT_INST_PHA_BY_IDX(node, bindings, idx, param2))), \ + } + +#define SENSOR_ROTATE_INST(n) \ + static struct behavior_sensor_rotate_config behavior_sensor_rotate_config_##n = { \ + .cw_binding = _TRANSFORM_ENTRY(0, n), \ + .ccw_binding = _TRANSFORM_ENTRY(1, n), \ + .tap_ms = DT_INST_PROP_OR(n, tap_ms, 5), \ + .override_params = false, \ + }; \ + DEVICE_DT_INST_DEFINE( \ + n, behavior_sensor_rotate_init, NULL, NULL, &behavior_sensor_rotate_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sensor_rotate_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_INST) diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c new file mode 100644 index 00000000000..bd31170eda0 --- /dev/null +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -0,0 +1,52 @@ + +#include +#include +#include +#include + +#include + +#include "behavior_sensor_rotate_common.h" + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *binding, + const struct device *sensor, + struct zmk_behavior_binding_event event) { + const struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_sensor_rotate_config *cfg = dev->config; + + struct sensor_value value; + + const int err = sensor_channel_get(sensor, SENSOR_CHAN_ROTATION, &value); + + if (err < 0) { + LOG_WRN("Failed to get sensor rotation value: %d", err); + return err; + } + + struct zmk_behavior_binding triggered_binding; + switch (value.val1) { + case 1: + triggered_binding = cfg->cw_binding; + if (cfg->override_params) { + triggered_binding.param1 = binding->param1; + } + break; + case -1: + triggered_binding = cfg->ccw_binding; + if (cfg->override_params) { + triggered_binding.param1 = binding->param2; + } + break; + default: + return -ENOTSUP; + } + + LOG_DBG("Sensor binding: %s", binding->behavior_dev); + + zmk_behavior_queue_add(event.position, triggered_binding, true, cfg->tap_ms); + zmk_behavior_queue_add(event.position, triggered_binding, false, 0); + + return ZMK_BEHAVIOR_OPAQUE; +} diff --git a/app/src/behaviors/behavior_sensor_rotate_common.h b/app/src/behaviors/behavior_sensor_rotate_common.h new file mode 100644 index 00000000000..2d58218d8ad --- /dev/null +++ b/app/src/behaviors/behavior_sensor_rotate_common.h @@ -0,0 +1,13 @@ + +#include + +struct behavior_sensor_rotate_config { + struct zmk_behavior_binding cw_binding; + struct zmk_behavior_binding ccw_binding; + int tap_ms; + bool override_params; +}; + +int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *binding, + const struct device *sensor, + struct zmk_behavior_binding_event event); \ No newline at end of file diff --git a/app/src/behaviors/behavior_sensor_rotate_key_press.c b/app/src/behaviors/behavior_sensor_rotate_key_press.c deleted file mode 100644 index 72e33ea46b0..00000000000 --- a/app/src/behaviors/behavior_sensor_rotate_key_press.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#define DT_DRV_COMPAT zmk_behavior_sensor_rotate_key_press - -#include -#include -#include - -#include -#include -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - -static int behavior_sensor_rotate_key_press_init(const struct device *dev) { return 0; }; - -static int on_sensor_binding_triggered(struct zmk_behavior_binding *binding, - const struct device *sensor, uint32_t virtual_key_position, - int64_t timestamp) { - struct sensor_value value; - int err; - uint32_t keycode; - LOG_DBG("inc keycode 0x%02X dec keycode 0x%02X", binding->param1, binding->param2); - - err = sensor_channel_get(sensor, SENSOR_CHAN_ROTATION, &value); - - if (err) { - LOG_WRN("Failed to ge sensor rotation value: %d", err); - return err; - } - - switch (value.val1) { - case 1: - keycode = binding->param1; - break; - case -1: - keycode = binding->param2; - break; - default: - return -ENOTSUP; - } - - LOG_DBG("SEND %d", keycode); - - ZMK_EVENT_RAISE(zmk_keycode_state_changed_from_encoded(keycode, true, timestamp)); - - // TODO: Better way to do this? - k_msleep(5); - - return ZMK_EVENT_RAISE(zmk_keycode_state_changed_from_encoded(keycode, false, timestamp)); -} - -static const struct behavior_driver_api behavior_sensor_rotate_key_press_driver_api = { - .sensor_binding_triggered = on_sensor_binding_triggered}; - -#define KP_INST(n) \ - DEVICE_DT_INST_DEFINE(n, behavior_sensor_rotate_key_press_init, NULL, NULL, NULL, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_sensor_rotate_key_press_driver_api); - -DT_INST_FOREACH_STATUS_OKAY(KP_INST) - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c new file mode 100644 index 00000000000..a82267a55e9 --- /dev/null +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_sensor_rotate_var + +#include + +#include + +#include "behavior_sensor_rotate_common.h" + +static const struct behavior_driver_api behavior_sensor_rotate_var_driver_api = { + .sensor_binding_triggered = zmk_behavior_sensor_rotate_common_trigger}; + +static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; }; + +#define SENSOR_ROTATE_VAR_INST(n) \ + static struct behavior_sensor_rotate_config behavior_sensor_rotate_var_config_##n = { \ + .cw_binding = {.behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label)}, \ + .ccw_binding = {.behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label)}, \ + .tap_ms = DT_INST_PROP(n, tap_ms), \ + .override_params = true, \ + }; \ + DEVICE_DT_INST_DEFINE( \ + n, behavior_sensor_rotate_var_init, NULL, NULL, &behavior_sensor_rotate_var_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sensor_rotate_var_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_VAR_INST) diff --git a/app/src/keymap.c b/app/src/keymap.c index 1f55ad03d30..909fd20de87 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -270,8 +270,9 @@ int zmk_keymap_sensor_triggered(uint8_t sensor_number, const struct device *sens continue; } - const uint32_t position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_number); - ret = behavior_sensor_keymap_binding_triggered(binding, sensor, position, timestamp); + struct zmk_behavior_binding_event event = { + .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_number), .timestamp = timestamp}; + ret = behavior_sensor_keymap_binding_triggered(binding, sensor, event); if (ret > 0) { LOG_DBG("behavior processing to continue to next layer"); diff --git a/docs/docs/behaviors/sensor-rotate.md b/docs/docs/behaviors/sensor-rotate.md new file mode 100644 index 00000000000..bd8a50bc5bc --- /dev/null +++ b/docs/docs/behaviors/sensor-rotate.md @@ -0,0 +1,77 @@ +--- +title: Sensor Rotation +sidebar_label: Sensor Rotation +--- + +## Summary + +The Sensor Rotation behavior triggers a different behavior, depending on whether the sensor is rotated clockwise or counter-clockwise. Two variants of this behavior are available, allowing either fully specifying the +two behaviors and their parameters together, or allowing binding the sensor rotation with different clockwise and counterclockwise parameters in the keymap itself. + +## Sensor Rotation + +The standard sensor rotation behavior allows fully binding behaviors to be invoked: + +- If rotated counter-clockwise, the first bound behavior is triggered. +- If rotated clockwise, the second bound behavior is triggered. + +### Configuration + +Here is an example that binds the [RGB Underglow Behavior](/docs/behaviors/underglow.md) to change the RGB brightness: + +``` +/ { + behaviors { + rgb_encoder: rgb_encoder { + compatible = "zmk,behavior-sensor-rotate"; + label = "RGB_ENCODER"; + #sensor-binding-cells = <0>; + bindings = <&rgb_ug RGB_BRD>, <&rgb_ug RGB_BRI>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + base { + ... + sensor-bindings = <&rgb_encoder>; + } + }; +}; +``` + +## Variable Sensor Rotation + +The variable sensor rotation behavior is configured with two behaviors that each expect a single parameter, +allowing the sensor rotation instance to be bound with two parameters at usage time. + +- If rotated counter-clockwise, the first bound behavior is triggered with the first parameter passed to the sensor rotation. +- If rotated clockwise, the second bound behavior is triggered with the second parameter passed to the sensor rotation. + +### Configuration + +Here is an example, showing how send key presses on rotation: + +First, defining the sensor rotation itself, binding the [Key Press Behavior](/docs/behaviors/key-press.md) twice, then binding it in the `sensor-bindings` property of a keymap layer: + +``` +/ { + behaviors { + rot_kp: behavior_sensor_rotate_kp { + compatible = "zmk,behavior-sensor-rotate-var"; + label = "ENC_KP"; + #sensor-binding-cells = <2>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + base { + ... + sensor-bindings = <&rot_kp PG_DN PG_UP>; + } + } +}; +``` diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 225ee6f39c4..29906c909de 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -23,17 +23,17 @@ Keyboards and macropads with encoder support will typically take the two EC11 pi ### Rotation -Rotation is handled separately as a type of sensor. The behavior for this is set in `sensor-bindings`, which is defined in each keymap layer in the following format: +Rotation is handled separately as a type of sensor. The behavior for this is set in `sensor-bindings`. See [Sensor Rotation](../behaviors/sensor-rotate.md) for customizing this behavior. ``` -sensor-bindings = ; +sensor-bindings = ; ``` -- `BINDING`, for now, has only one behavior available; `&inc_dec_kp` for key presses (see [Key Press](../behaviors/key-press.md) for details on available keycodes). +- `BINDING` is either a user-defined behavior, or `&inc_dec_kp` for key presses (see [Key Press](../behaviors/key-press.md) for details on available keycodes). - `CW_KEY` is the keycode activated by a clockwise turn. - `CCW_KEY` is the keycode activated by a counter-clockwise turn. -Additional encoders can be configured by adding more `BINDING CW_KEY CCW_KEY` sets immediately after the first. +Additional encoders can be configured by adding more bindings immediately after the first. As an example, a complete `sensor-bindings` for a Kyria with two encoders could look like: diff --git a/docs/sidebars.js b/docs/sidebars.js index a52f3302c8b..21585747a5f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -35,6 +35,7 @@ module.exports = { "behaviors/tap-dance", "behaviors/caps-word", "behaviors/key-repeat", + "behaviors/sensor-rotate", "behaviors/reset", "behaviors/bluetooth", "behaviors/outputs", From 9d64c2a3a0bdd3d092585be1c6ba86fc8e26d084 Mon Sep 17 00:00:00 2001 From: Nick Coutsos Date: Sat, 22 Apr 2023 20:14:08 -0400 Subject: [PATCH 0648/1130] fix(docs): switch sensor rotate parameter order --- docs/docs/behaviors/sensor-rotate.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/behaviors/sensor-rotate.md b/docs/docs/behaviors/sensor-rotate.md index bd8a50bc5bc..02e56924bad 100644 --- a/docs/docs/behaviors/sensor-rotate.md +++ b/docs/docs/behaviors/sensor-rotate.md @@ -12,8 +12,8 @@ two behaviors and their parameters together, or allowing binding the sensor rota The standard sensor rotation behavior allows fully binding behaviors to be invoked: -- If rotated counter-clockwise, the first bound behavior is triggered. -- If rotated clockwise, the second bound behavior is triggered. +- If rotated clockwise, the first bound behavior is triggered. +- If rotated counter-clockwise, the second bound behavior is triggered. ### Configuration @@ -26,7 +26,7 @@ Here is an example that binds the [RGB Underglow Behavior](/docs/behaviors/under compatible = "zmk,behavior-sensor-rotate"; label = "RGB_ENCODER"; #sensor-binding-cells = <0>; - bindings = <&rgb_ug RGB_BRD>, <&rgb_ug RGB_BRI>; + bindings = <&rgb_ug RGB_BRI>, <&rgb_ug RGB_BRD>; }; }; @@ -46,8 +46,8 @@ Here is an example that binds the [RGB Underglow Behavior](/docs/behaviors/under The variable sensor rotation behavior is configured with two behaviors that each expect a single parameter, allowing the sensor rotation instance to be bound with two parameters at usage time. -- If rotated counter-clockwise, the first bound behavior is triggered with the first parameter passed to the sensor rotation. -- If rotated clockwise, the second bound behavior is triggered with the second parameter passed to the sensor rotation. +- If rotated clockwise, the first bound behavior is triggered with the first parameter passed to the sensor rotation. +- If rotated counter-clockwise, the second bound behavior is triggered with the second parameter passed to the sensor rotation. ### Configuration @@ -70,7 +70,7 @@ First, defining the sensor rotation itself, binding the [Key Press Behavior](/do compatible = "zmk,keymap"; base { ... - sensor-bindings = <&rot_kp PG_DN PG_UP>; + sensor-bindings = <&rot_kp PG_UP PG_DN>; } } }; From 53dea223b73922e385ecf11883e5327a4f328eae Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 14 Jan 2023 12:01:33 -0500 Subject: [PATCH 0649/1130] feat(shields): Add splitkb.com Kyria Rev3. --- app/boards/shields/kyria/Kconfig.defconfig | 2 +- app/boards/shields/kyria/Kconfig.shield | 8 ++++ app/boards/shields/kyria/kyria_rev3.conf | 10 +++++ app/boards/shields/kyria/kyria_rev3.dtsi | 41 +++++++++++++++++++ app/boards/shields/kyria/kyria_rev3.keymap | 38 +++++++++++++++++ app/boards/shields/kyria/kyria_rev3.zmk.yml | 15 +++++++ .../shields/kyria/kyria_rev3_left.overlay | 29 +++++++++++++ .../shields/kyria/kyria_rev3_right.overlay | 33 +++++++++++++++ 8 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 app/boards/shields/kyria/kyria_rev3.conf create mode 100644 app/boards/shields/kyria/kyria_rev3.dtsi create mode 100644 app/boards/shields/kyria/kyria_rev3.keymap create mode 100644 app/boards/shields/kyria/kyria_rev3.zmk.yml create mode 100644 app/boards/shields/kyria/kyria_rev3_left.overlay create mode 100644 app/boards/shields/kyria/kyria_rev3_right.overlay diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index cdb57b6bfa0..53b441cba08 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -1,5 +1,5 @@ -if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_REV2_LEFT +if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_REV2_LEFT || SHIELD_KYRIA_REV3_LEFT config ZMK_KEYBOARD_NAME default "Kyria" diff --git a/app/boards/shields/kyria/Kconfig.shield b/app/boards/shields/kyria/Kconfig.shield index 6304f5d519b..52df937834c 100644 --- a/app/boards/shields/kyria/Kconfig.shield +++ b/app/boards/shields/kyria/Kconfig.shield @@ -19,3 +19,11 @@ config SHIELD_KYRIA_REV2_LEFT config SHIELD_KYRIA_REV2_RIGHT def_bool $(shields_list_contains,kyria_rev2_right) select SHIELD_KYRIA + +config SHIELD_KYRIA_REV3_LEFT + def_bool $(shields_list_contains,kyria_rev3_left) + select SHIELD_KYRIA + +config SHIELD_KYRIA_REV3_RIGHT + def_bool $(shields_list_contains,kyria_rev3_right) + select SHIELD_KYRIA diff --git a/app/boards/shields/kyria/kyria_rev3.conf b/app/boards/shields/kyria/kyria_rev3.conf new file mode 100644 index 00000000000..7a0b5b6c54f --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev3.conf @@ -0,0 +1,10 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Kyria OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/kyria/kyria_rev3.dtsi b/app/boards/shields/kyria/kyria_rev3.dtsi new file mode 100644 index 00000000000..4a50000629b --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev3.dtsi @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria_common.dtsi" + +/ { + chosen { + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <4>; + // | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | + // | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | + // | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | + // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(3,3) RC(2,6) RC(2,7) RC(3,10) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,2) RC(3,4) RC(3,5) RC(3,1) RC(3,6) RC(3,7) RC(3,12) RC(3,8) RC(3,9) RC(3,11) + >; + }; +}; + +&left_encoder { + resolution = <2>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; +}; + +&right_encoder { + resolution = <2>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; +}; diff --git a/app/boards/shields/kyria/kyria_rev3.keymap b/app/boards/shields/kyria/kyria_rev3.keymap new file mode 100644 index 00000000000..fff2e051a18 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev3.keymap @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/* Uncomment this block if using RGB +&led_strip { + chain-length = <6>; + // chain-length = <31>; // Uncomment if using both per-key and underglow LEDs + // chain-length = <25>; // Uncomment if using only per-key LEDs. +}; + */ + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | + // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | + // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; diff --git a/app/boards/shields/kyria/kyria_rev3.zmk.yml b/app/boards/shields/kyria/kyria_rev3.zmk.yml new file mode 100644 index 00000000000..bf84c82cbe1 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev3.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: kyria_rev3 +name: Kyria Rev3 +type: shield +url: https://splitkb.com/products/kyria-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - kyria_rev3_left + - kyria_rev3_right diff --git a/app/boards/shields/kyria/kyria_rev3_left.overlay b/app/boards/shields/kyria/kyria_rev3_left.overlay new file mode 100644 index 00000000000..d00b9e4afe0 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev3_left.overlay @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria_rev3.dtsi" + +&kscan0 { + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/kyria/kyria_rev3_right.overlay b/app/boards/shields/kyria/kyria_rev3_right.overlay new file mode 100644 index 00000000000..ee69730c2e2 --- /dev/null +++ b/app/boards/shields/kyria/kyria_rev3_right.overlay @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria_rev3.dtsi" + +&default_transform { + col-offset = <7>; +}; + +&kscan0 { + row-gpios + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; From 9c4f1e02d14e2903d7ec377fc3042bb704cc7253 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Mon, 24 Apr 2023 16:24:36 +0800 Subject: [PATCH 0650/1130] fix(docs): Update references to QMK settings * Remove TAPPING_FORCE_HOLD reference * Remove IGNORE_MOD_TAP_INTERRUPT reference --- docs/docs/behaviors/hold-tap.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 1dfb8e5da3f..f267e4a4ceb 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -49,8 +49,6 @@ Defines how long a key must be pressed to trigger Hold behavior. If you press a tapped hold-tap again within `quick-tap-ms` milliseconds, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). -In QMK, unlike ZMK, this functionality is enabled by default, and you turn it off using `TAPPING_FORCE_HOLD`. - #### `global-quick-tap` If `global-quick-tap` is enabled, then `quick-tap-ms` will apply not only when the given hold-tap is tapped, but for any key tapped before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. @@ -319,4 +317,4 @@ This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) ### Comparison to QMK -The hold-preferred flavor works similar to the `HOLD_ON_OTHER_KEY_PRESS` setting in QMK. The 'balanced' flavor is similar to the `PERMISSIVE_HOLD` setting, and the `tap-preferred` flavor is similar to `IGNORE_MOD_TAP_INTERRUPT`. +The `hold-preferred` flavor works similar to the `HOLD_ON_OTHER_KEY_PRESS` setting in QMK. The `balanced` flavor is similar to the `PERMISSIVE_HOLD` setting, and the `tap-preferred` flavor is the QMK default. From 32ae776c42215d7302ab47787cbfb47298ccb532 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 22 Apr 2023 23:16:36 -0500 Subject: [PATCH 0651/1130] refactor: Add more checks to pre-commit Updated existing pre-commit hooks and added some new hooks: - Remove trailing whitespace - Ensure every non-empty file ends with a new line - Check YAML file validity - Prevent adding large files - Ensure any scripts with shebangs are executable Added a GitHub action to run pre-commit on every commit. Removed any existing actions which duplicate pre-commit. Ran pre-commit on the codebase. --- .github/pull_request_template.md | 24 +++-- .github/workflows/build-user-config.yml | 4 +- .github/workflows/build.yml | 6 +- .github/workflows/clang-format-lint.yml | 29 ----- .github/workflows/doc-checks.yml | 10 -- .../hardware-metadata-validation.yml | 11 -- .github/workflows/pre-commit.yml | 15 +++ .pre-commit-config.yaml | 12 ++- .vscode/settings.json | 2 +- app/.prettierrc.js | 2 +- .../bluemicro840/arduino_pro_micro_pins.dtsi | 10 +- .../arm/corneish_zen/corneish_zen_v2_left.dts | 2 +- .../corneish_zen/corneish_zen_v2_right.dts | 2 +- app/boards/arm/ferris/README.md | 1 - app/boards/arm/nice60/README.md | 2 + app/boards/arm/nice60/nice60.keymap | 4 +- app/boards/arm/pillbug/pillbug.dts | 2 +- app/boards/arm/preonic/preonic_rev3.yaml | 2 +- app/boards/arm/s40nc/README.md | 2 + app/boards/arm/s40nc/s40nc.keymap | 8 +- app/boards/shields/bfo9000/README.md | 8 +- .../boardsource5x12/boardsource5x12.keymap | 6 +- .../boardsource5x12/boardsource5x12.overlay | 2 +- app/boards/shields/chalice/chalice.keymap | 8 +- app/boards/shields/chalice/chalice.overlay | 4 +- app/boards/shields/clog/clog.dtsi | 2 +- app/boards/shields/corne/corne.dtsi | 2 +- app/boards/shields/eek/eek.keymap | 12 +-- app/boards/shields/eek/eek.overlay | 2 +- .../shields/elephant42/Kconfig.defconfig | 2 +- app/boards/shields/elephant42/elephant42.dtsi | 4 +- .../shields/elephant42/elephant42.keymap | 4 +- .../elephant42/elephant42_left.overlay | 2 +- .../elephant42/elephant42_right.overlay | 2 +- app/boards/shields/helix/helix.dtsi | 2 +- app/boards/shields/helix/helix.keymap | 4 +- app/boards/shields/helix/helix_left.overlay | 2 +- .../shields/hummingbird/hummingbird.overlay | 2 +- app/boards/shields/iris/Kconfig.defconfig | 2 +- app/boards/shields/iris/iris.dtsi | 2 +- app/boards/shields/jian/jian.dtsi | 2 +- app/boards/shields/jiran/jiran.dtsi | 2 +- app/boards/shields/jorne/Kconfig.defconfig | 2 +- app/boards/shields/jorne/jorne.dtsi | 2 +- app/boards/shields/kyria/Kconfig.defconfig | 2 +- app/boards/shields/kyria/kyria_common.dtsi | 2 +- app/boards/shields/leeloo/Kconfig.defconfig | 2 +- app/boards/shields/leeloo/README.md | 19 ++-- app/boards/shields/lily58/lily58.dtsi | 2 +- app/boards/shields/lotus58/Kconfig.defconfig | 2 +- app/boards/shields/lotus58/lotus58.dtsi | 2 +- app/boards/shields/lotus58/lotus58.keymap | 10 +- .../shields/lotus58/lotus58_left.overlay | 2 +- app/boards/shields/microdox/Kconfig.defconfig | 2 +- app/boards/shields/microdox/microdox.dtsi | 2 +- app/boards/shields/murphpad/murphpad.keymap | 24 ++--- app/boards/shields/murphpad/murphpad.overlay | 2 +- app/boards/shields/naked60/naked60.keymap | 4 +- app/boards/shields/nibble/nibble.keymap | 2 +- app/boards/shields/nibble/nibble.overlay | 2 +- app/boards/shields/nice_view/README.md | 2 +- .../shields/nice_view_adapter/README.md | 2 +- app/boards/shields/pancake/pancake.keymap | 12 +-- app/boards/shields/pancake/pancake.overlay | 4 +- app/boards/shields/qaz/qaz.overlay | 2 +- .../shields/quefrency/Kconfig.defconfig | 4 +- app/boards/shields/quefrency/quefrency.dtsi | 10 +- .../shields/quefrency/quefrency_right.overlay | 2 +- app/boards/shields/redox/redox.dtsi | 4 +- app/boards/shields/redox/redox.keymap | 4 +- app/boards/shields/snap/Kconfig.defconfig | 2 +- app/boards/shields/snap/snap.dtsi | 2 +- app/boards/shields/snap/snap.keymap | 2 +- app/boards/shields/snap/snap_left.overlay | 2 +- app/boards/shields/snap/snap_right.overlay | 2 +- app/boards/shields/sofle/Kconfig.defconfig | 2 +- .../splitkb_aurora_corne/Kconfig.defconfig | 2 +- .../splitkb_aurora_corne_left.overlay | 2 +- .../splitkb_aurora_corne_right.overlay | 2 +- .../splitkb_aurora_lily58/Kconfig.defconfig | 2 +- .../splitkb_aurora_lily58_left.overlay | 2 +- .../splitkb_aurora_lily58_right.overlay | 2 +- .../splitkb_aurora_sweep/Kconfig.defconfig | 2 +- .../splitkb_aurora_sweep.keymap | 52 ++++----- .../splitkb_aurora_sweep_left.overlay | 2 +- .../splitkb_aurora_sweep_right.overlay | 2 +- .../shields/splitreus62/Kconfig.defconfig | 6 +- .../shields/splitreus62/splitreus62.dtsi | 2 +- .../splitreus62/splitreus62_right.overlay | 2 +- app/boards/shields/tg4x/README.md | 6 +- app/boards/shields/tg4x/tg4x.overlay | 2 +- app/boards/shields/tidbit/tidbit.keymap | 2 +- app/boards/shields/tidbit/tidbit_19key.keymap | 2 +- .../two_percent_milk/two_percent_milk.keymap | 4 +- .../shields/waterfowl/Kconfig.defconfig | 2 +- app/boards/shields/waterfowl/waterfowl.dtsi | 2 +- app/boards/shields/waterfowl/waterfowl.keymap | 12 +-- app/boards/shields/zmk_uno/zmk_uno.keymap | 8 +- app/boards/shields/zodiark/Kconfig.defconfig | 2 +- app/boards/shields/zodiark/zodiark.keymap | 2 +- app/core-coverage.yml | 64 +++++------ .../dts/bindings/gpio/maxim,max7318.yaml | 20 ++-- .../behaviors/zmk,behavior-macro.yaml | 2 +- .../behaviors/zmk,behavior-tap-dance.yaml | 2 +- .../bindings/display/gooddisplay,il0323.yaml | 102 +++++++++--------- .../macros/zmk,macro-control-mode-press.yaml | 2 +- .../zmk,macro-control-mode-release.yaml | 2 +- .../macros/zmk,macro-control-tap-time.yaml | 2 +- .../macros/zmk,macro-control-wait-time.yaml | 2 +- .../macros/zmk,macro-pause-for-release.yaml | 2 +- app/dts/bindings/zmk,combos.yaml | 2 +- app/include/linker/zmk-events.ld | 2 +- app/package.json | 4 +- app/src/activity.c | 4 +- app/src/display/widgets/Kconfig | 2 +- .../native_posix_64.keymap | 12 +-- .../native_posix_64.keymap | 10 +- .../layer-filter-0/native_posix_64.keymap | 26 ++--- .../layer-filter-1/native_posix_64.keymap | 6 +- .../multiple-timeouts/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 76 ++++++------- .../native_posix_64.keymap | 24 ++--- .../native_posix_64.keymap | 14 +-- .../native_posix_64.keymap | 14 +-- .../native_posix_64.keymap | 46 ++++---- .../native_posix_64.keymap | 8 +- .../press-release/native_posix_64.keymap | 26 ++--- .../press-timeout/native_posix_64.keymap | 6 +- .../native_posix_64.keymap | 12 +-- .../native_posix_64.keymap | 14 +-- .../native_posix_64.keymap | 12 +-- .../native_posix_64.keymap | 6 +- .../native_posix_64.keymap | 6 +- .../native_posix_64.keymap | 18 ++-- .../native_posix_64.keymap | 6 +- .../balanced/1-dn-up/native_posix_64.keymap | 4 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 2 +- .../5-quick-tap/native_posix_64.keymap | 6 +- .../6-retro-tap/native_posix_64.keymap | 8 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../1-basic/native_posix_64.keymap | 4 +- .../many-nested/native_posix_64.keymap | 16 +-- .../1-dn-up/native_posix_64.keymap | 4 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 2 +- .../5-quick-tap/native_posix_64.keymap | 6 +- .../6-retro-tap/native_posix_64.keymap | 8 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../1-basic/native_posix_64.keymap | 4 +- .../1-dn-up/native_posix_64.keymap | 4 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 2 +- .../5-quick-tap/native_posix_64.keymap | 6 +- .../6-nested-timeouts/native_posix_64.keymap | 10 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../1-basic/native_posix_64.keymap | 4 +- .../1-dn-up/native_posix_64.keymap | 4 +- .../2-dn-timer-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 2 +- .../5-quick-tap/native_posix_64.keymap | 6 +- .../1-basic/native_posix_64.keymap | 4 +- .../kp-press-release/native_posix_64.keymap | 2 +- .../kt-alt-tab/native_posix_64.keymap | 18 ++-- .../kt-modded-alpha/native_posix_64.keymap | 10 +- .../native_posix_64.keymap | 4 +- .../kt-press-release/native_posix_64.keymap | 4 +- app/tests/macros/basic/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- .../press-mid-macro/native_posix_64.keymap | 2 +- .../press-release/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 8 +- .../kp-lctl-dn-lctl-up/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 6 +- .../pending | 4 +- .../native_posix_64.keymap | 6 +- .../native_posix_64.keymap | 6 +- .../native_posix_64.keymap | 6 +- .../1-normal/native_posix_64.keymap | 6 +- .../native_posix_64.keymap | 6 +- .../3-covered/native_posix_64.keymap | 2 +- .../1-os-dn-up/native_posix_64.keymap | 4 +- .../10-callum-mods/native_posix_64.keymap | 12 +-- .../10-sl-sl-kp/native_posix_64.keymap | 16 +-- .../native_posix_64.keymap | 10 +- .../native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 18 ++-- .../9-sk-dn-up-dn-up/native_posix_64.keymap | 6 +- .../tap-dance/1b-tap2/native_posix_64.keymap | 4 +- .../tap-dance/1c-tap3/native_posix_64.keymap | 4 +- .../tap-dance/2a-hold1/native_posix_64.keymap | 2 +- .../tap-dance/2b-hold2/native_posix_64.keymap | 4 +- .../tap-dance/2c-hold3/native_posix_64.keymap | 4 +- .../1-single_keypress/native_posix_64.keymap | 4 +- .../native_posix_64.keymap | 6 +- docs/package-lock.json | 17 +-- docs/package.json | 2 +- docs/src/templates/setup.ps1.mustache | 4 +- docs/src/templates/setup.sh.mustache | 2 +- schema/hardware-metadata.schema.json | 32 +----- 247 files changed, 768 insertions(+), 806 deletions(-) delete mode 100644 .github/workflows/clang-format-lint.yml create mode 100644 .github/workflows/pre-commit.yml diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9c3543dd287..9e523a36c58 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,13 +1,15 @@ + ## Board/Shield Check-list - - [ ] This board/shield is tested working on real hardware - - [ ] Definitions follow the general style of other shields/boards upstream ([Reference](https://zmk.dev/docs/development/new-shield)) - - [ ] `.zmk.yml` metadata file added - - [ ] Proper Copyright + License headers added to applicable files (Generally, we stick to "The ZMK Contributors" for copyrights to help avoid churn when files get edited) - - [ ] General consistent formatting of DeviceTree files - - [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader)) - - [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable - - [ ] If split, no name added for the right/peripheral half - - [ ] Kconfig.defconfig file correctly wraps *all* configuration in conditional on the shield symbol - - [ ] `.conf` file has optional extra features commented out - - [ ] Keyboard/PCB is part of a shipped group buy or is generally available in stock to purchase (OSH/personal projects without general availability should create a zmk-config repo instead) + +- [ ] This board/shield is tested working on real hardware +- [ ] Definitions follow the general style of other shields/boards upstream ([Reference](https://zmk.dev/docs/development/new-shield)) +- [ ] `.zmk.yml` metadata file added +- [ ] Proper Copyright + License headers added to applicable files (Generally, we stick to "The ZMK Contributors" for copyrights to help avoid churn when files get edited) +- [ ] General consistent formatting of DeviceTree files +- [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader)) +- [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable +- [ ] If split, no name added for the right/peripheral half +- [ ] Kconfig.defconfig file correctly wraps _all_ configuration in conditional on the shield symbol +- [ ] `.conf` file has optional extra features commented out +- [ ] Keyboard/PCB is part of a shipped group buy or is generally available in stock to purchase (OSH/personal projects without general availability should create a zmk-config repo instead) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 3d89ed7b321..b1e0602d54f 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -19,8 +19,8 @@ on: required: false type: string archive_name: - description: 'Archive output file name' - default: 'firmware' + description: "Archive output file name" + default: "firmware" required: false type: string diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f472f755c9b..82b156e106c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -131,7 +131,7 @@ jobs: for (const configuration of combinedUnique) { if (!perBoard[configuration.board]) perBoard[configuration.board] = []; - + perBoard[configuration.board].push({ shield: configuration.shield, 'cmake-args': configuration['cmake-args'], @@ -234,7 +234,7 @@ jobs: }; } } else if (hm.exposes) { - return hm.exposes.flatMap(i => + return hm.exposes.flatMap(i => metadata.interconnects[i].shields.flatMap(s => boardAndShield(hm, s)) ); } else { @@ -243,7 +243,7 @@ jobs: break; case "shield": if (hm.features && hm.features.includes("keys")) { - return hm.requires.flatMap(i => + return hm.requires.flatMap(i => metadata.interconnects[i].boards.flatMap(b => boardAndShield(b, hm)) ); } else { diff --git a/.github/workflows/clang-format-lint.yml b/.github/workflows/clang-format-lint.yml deleted file mode 100644 index 8c2cfbcfced..00000000000 --- a/.github/workflows/clang-format-lint.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Clang Format - -on: - push: - paths: - - ".github/workflows/clang-format-lint.yml" - - "app/boards/**/*.c" - - "app/include/**/*.h" - - "app/src/**" - - "app/drivers/**/*.c" - - "app/drivers/**/*.h" - pull_request: - paths: - - ".github/workflows/clang-format-lint.yml" - - "app/boards/**/*.c" - - "app/include/**/*.h" - - "app/src/**" - - "app/drivers/**/*.c" - - "app/drivers/**/*.h" - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: DoozyX/clang-format-lint-action@v0.13 - with: - source: "./app" - extensions: "h,c" diff --git a/.github/workflows/doc-checks.yml b/.github/workflows/doc-checks.yml index d048a03e0ab..91e65e6d31e 100644 --- a/.github/workflows/doc-checks.yml +++ b/.github/workflows/doc-checks.yml @@ -21,16 +21,6 @@ jobs: - name: ESLint run: npm run lint working-directory: docs - prettier: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: bahmutov/npm-install@v1 - with: - working-directory: docs - - name: Prettier check - run: npm run prettier:check - working-directory: docs typecheck: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index 4b10a28b12c..100928368e3 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -15,17 +15,6 @@ on: - "app/scripts/west_commands/metadata.py" jobs: - check-metadata-format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/checkout@v3 - - uses: bahmutov/npm-install@v1 - with: - working-directory: app - - name: Prettier Check - run: npm run prettier:check - working-directory: app validate-metadata: runs-on: ubuntu-latest container: diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 00000000000..a6583d4f71b --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,15 @@ +name: pre-commit + +on: + pull_request: + push: + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.x + - uses: pre-commit/action@v3.0.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 02adf09cd1f..7687fc6ee26 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,12 +1,20 @@ fail_fast: false repos: - repo: https://github.com/pocc/pre-commit-hooks - rev: v1.1.1 + rev: v1.3.5 hooks: - id: clang-format args: - -i - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.2.1 + rev: v2.7.1 hooks: - id: prettier + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: check-yaml + - id: check-added-large-files + - id: check-shebang-scripts-are-executable + exclude: "\\.mustache$" diff --git a/.vscode/settings.json b/.vscode/settings.json index 2730549a234..aea29cf0097 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,4 +4,4 @@ "*.keymap": "dts" }, "python.formatting.provider": "black" -} \ No newline at end of file +} diff --git a/app/.prettierrc.js b/app/.prettierrc.js index 806328d9234..2a1f0b48af9 100644 --- a/app/.prettierrc.js +++ b/app/.prettierrc.js @@ -1,3 +1,3 @@ module.exports = { - endOfLine: "auto", + endOfLine: "auto", }; diff --git a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi index 237f5c450dc..53514d64499 100644 --- a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -11,11 +11,11 @@ gpio-map-mask = <0xffffffff 0xffffffc0>; gpio-map-pass-thru = <0 0x3f>; gpio-map - = <0 0 &gpio0 8 0> /* D0 D2 */ - , <1 0 &gpio0 6 0> /* D1 D3*/ - , <2 0 &gpio0 15 0> /* D2 D1*/ - , <3 0 &gpio0 17 0> /* D3 D0*/ - , <4 0 &gpio0 20 0> /* D4/A6 D4*/ + = <0 0 &gpio0 8 0> /* D0 D2 */ + , <1 0 &gpio0 6 0> /* D1 D3*/ + , <2 0 &gpio0 15 0> /* D2 D1*/ + , <3 0 &gpio0 17 0> /* D3 D0*/ + , <4 0 &gpio0 20 0> /* D4/A6 D4*/ , <5 0 &gpio0 13 0> /* D5 C6*/ , <6 0 &gpio0 24 0> /* D6/A7 D7*/ , <7 0 &gpio0 9 0> /* D7 E6*/ diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index 4dbdaef529d..65092dc5a05 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -32,7 +32,7 @@ , <&gpio1 9 GPIO_ACTIVE_HIGH> , <&gpio0 7 GPIO_ACTIVE_HIGH> , <&gpio0 5 GPIO_ACTIVE_HIGH> - ; + ; }; leds { diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts index 52439e4f3ca..980c990020f 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -33,7 +33,7 @@ , <&gpio1 9 GPIO_ACTIVE_HIGH> , <&gpio0 7 GPIO_ACTIVE_HIGH> ; - + }; leds { diff --git a/app/boards/arm/ferris/README.md b/app/boards/arm/ferris/README.md index 2793c6fac4e..b6fdcdf26ae 100644 --- a/app/boards/arm/ferris/README.md +++ b/app/boards/arm/ferris/README.md @@ -1,6 +1,5 @@ # Building ZMK for the Ferris 0.2 - ## Standard Build ``` diff --git a/app/boards/arm/nice60/README.md b/app/boards/arm/nice60/README.md index 49433df8f5b..dce230ae79f 100644 --- a/app/boards/arm/nice60/README.md +++ b/app/boards/arm/nice60/README.md @@ -1,9 +1,11 @@ # nice!60 + ![nice!60](https://i.imgur.com/0YWv5PE.png) The nice!60 is a hotswap 60% made by Nice Keyboards. https://nicekeyboards.com/nice-60 ## Building nice!60 ZMK firmware + ``` west build -p -b nice60 ``` diff --git a/app/boards/arm/nice60/nice60.keymap b/app/boards/arm/nice60/nice60.keymap index bdb188df051..edfec32e93e 100644 --- a/app/boards/arm/nice60/nice60.keymap +++ b/app/boards/arm/nice60/nice60.keymap @@ -12,7 +12,7 @@ / { keymap { compatible = "zmk,keymap"; - + default_layer { // ------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | @@ -40,7 +40,7 @@ // ------------------------------------------------------------------------------------------------ bindings = < &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &rgb_ug RGB_EFR - &bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans + &bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans &bt BT_SEL 1 &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &trans &trans &trans &trans &rgb_ug RGB_EFF &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_SEL 3 &trans &trans &rgb_ug RGB_TOG &kp PSCRN &trans &trans &kp DEL diff --git a/app/boards/arm/pillbug/pillbug.dts b/app/boards/arm/pillbug/pillbug.dts index c1330319ea2..a2e56df3e8e 100644 --- a/app/boards/arm/pillbug/pillbug.dts +++ b/app/boards/arm/pillbug/pillbug.dts @@ -29,7 +29,7 @@ label = "Blue LED"; }; }; - + ext-power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; diff --git a/app/boards/arm/preonic/preonic_rev3.yaml b/app/boards/arm/preonic/preonic_rev3.yaml index 679e1464eea..861f1d2da9d 100644 --- a/app/boards/arm/preonic/preonic_rev3.yaml +++ b/app/boards/arm/preonic/preonic_rev3.yaml @@ -16,4 +16,4 @@ supported: - lsm303dlhc - nvs - can - - kscan \ No newline at end of file + - kscan diff --git a/app/boards/arm/s40nc/README.md b/app/boards/arm/s40nc/README.md index 32db57e9919..96bebb33697 100644 --- a/app/boards/arm/s40nc/README.md +++ b/app/boards/arm/s40nc/README.md @@ -1,9 +1,11 @@ # S40NC + ![S40NC](https://i.imgur.com/fk8587n.jpg) Shorty40NoCordy (S40NC) is a limited run 40% bluetooth keyboard originally made and sold by MechWild. ## Building S40NC ZMK firmware + ``` west build -p -b s40nc ``` diff --git a/app/boards/arm/s40nc/s40nc.keymap b/app/boards/arm/s40nc/s40nc.keymap index c43bc671a8b..f0e60e7d109 100644 --- a/app/boards/arm/s40nc/s40nc.keymap +++ b/app/boards/arm/s40nc/s40nc.keymap @@ -17,7 +17,7 @@ / { keymap { compatible = "zmk,keymap"; - + default_layer { bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC @@ -35,7 +35,7 @@ &trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END >; }; - + raise_layer { bindings = < &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &trans @@ -44,7 +44,7 @@ &trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END >; }; - + control_layer { bindings = < &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp C_PP @@ -55,4 +55,4 @@ }; }; }; - + diff --git a/app/boards/shields/bfo9000/README.md b/app/boards/shields/bfo9000/README.md index 1e91fdcf5c7..54893aedfe1 100644 --- a/app/boards/shields/bfo9000/README.md +++ b/app/boards/shields/bfo9000/README.md @@ -4,10 +4,10 @@ Customizable full-size split ortholinear. ## Features -* Compatible with MX-compatible, Alps-compatible, and Kailh Low-Profile Choc switches. -* Breakoff pieces to allow for 4 to 6 rows and 7 to 9 columns. -* RGB LED connections +- Compatible with MX-compatible, Alps-compatible, and Kailh Low-Profile Choc switches. +- Breakoff pieces to allow for 4 to 6 rows and 7 to 9 columns. +- RGB LED connections ## Hardware Notes -[Included default keymap](http://www.keyboard-layout-editor.com/#/gists/51293c31afcd5f1765e8f413a46bfcf8) \ No newline at end of file +[Included default keymap](http://www.keyboard-layout-editor.com/#/gists/51293c31afcd5f1765e8f413a46bfcf8) diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.keymap b/app/boards/shields/boardsource5x12/boardsource5x12.keymap index 8956ca9831b..cb851c35cac 100644 --- a/app/boards/shields/boardsource5x12/boardsource5x12.keymap +++ b/app/boards/shields/boardsource5x12/boardsource5x12.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include @@ -28,7 +28,7 @@ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp LSHFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET - &mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + &mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT >; }; @@ -44,7 +44,7 @@ &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(NON_US_HASH) &kp LS(NON_US_BSLH) &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE + &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE >; }; diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.overlay b/app/boards/shields/boardsource5x12/boardsource5x12.overlay index 0fafe8a18c7..080a2392919 100644 --- a/app/boards/shields/boardsource5x12/boardsource5x12.overlay +++ b/app/boards/shields/boardsource5x12/boardsource5x12.overlay @@ -39,4 +39,4 @@ , <&pro_micro 6 GPIO_ACTIVE_HIGH> ; }; -}; \ No newline at end of file +}; \ No newline at end of file diff --git a/app/boards/shields/chalice/chalice.keymap b/app/boards/shields/chalice/chalice.keymap index cba93d035e9..c72e3ee1b81 100644 --- a/app/boards/shields/chalice/chalice.keymap +++ b/app/boards/shields/chalice/chalice.keymap @@ -19,9 +19,9 @@ bindings = < &kp ESC &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp INSERT &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp DELETE &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp ENTER + &kp DELETE &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp ENTER &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT &kp UP - &kp LCTRL &kp LALT &kp SPACE &mo 1 &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + &kp LCTRL &kp LALT &kp SPACE &mo 1 &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT >; }; @@ -30,9 +30,9 @@ bindings = < &bootloader &out OUT_TOG &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &bt BT_CLR &rgb_ug RGB_TOG &rgb_ug RGB_HUD &rgb_ug RGB_HUI &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &bt BT_SEL 0 &rgb_ug RGB_EFF &rgb_ug RGB_SAD &rgb_ug RGB_SAI &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &bt BT_SEL 0 &rgb_ug RGB_EFF &rgb_ug RGB_SAD &rgb_ug RGB_SAI &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_SEL 1 &rgb_ug RGB_EFR &rgb_ug RGB_BRD &rgb_ug RGB_BRI &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp PG_UP - &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_DN &kp END + &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_DN &kp END >; }; }; diff --git a/app/boards/shields/chalice/chalice.overlay b/app/boards/shields/chalice/chalice.overlay index 34cbd34ea3d..6778588bf13 100644 --- a/app/boards/shields/chalice/chalice.overlay +++ b/app/boards/shields/chalice/chalice.overlay @@ -21,7 +21,7 @@ map = < RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) RC(0,5) RC(1,5) RC(0,6) RC(1,6) RC(4,6) RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) RC(2,5) RC(3,5) RC(2,6) RC(3,6) RC(5,6) - RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6) + RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6) RC(6,0) RC(7,0) RC(6,1) RC(7,1) RC(6,2) RC(7,2) RC(6,3) RC(7,3) RC(6,4) RC(7,4) RC(6,5) RC(7,5) RC(8,6) RC(9,6) RC(8,0) RC(9,1) RC(8,2) RC(9,2) RC(8,3) RC(9,3) RC(8,4) RC(9,4) RC(8,5) RC(9,5) >; @@ -35,7 +35,7 @@ map = < RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) RC(0,5) RC(1,5) RC(0,6) RC(1,6) RC(4,6) RC(8,1) RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) RC(2,5) RC(3,5) RC(2,6) RC(3,6) RC(5,6) - RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6) + RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6) RC(6,0) RC(7,0) RC(6,1) RC(7,1) RC(6,2) RC(7,2) RC(6,3) RC(7,3) RC(6,4) RC(7,4) RC(6,5) RC(7,5) RC(8,6) RC(9,6) RC(8,0) RC(9,1) RC(8,2) RC(9,2) RC(8,3) RC(9,3) RC(8,4) RC(9,4) RC(8,5) RC(9,5) >; diff --git a/app/boards/shields/clog/clog.dtsi b/app/boards/shields/clog/clog.dtsi index 279431006d3..ccad150c776 100644 --- a/app/boards/shields/clog/clog.dtsi +++ b/app/boards/shields/clog/clog.dtsi @@ -27,7 +27,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; label = "KSCAN"; - + input-gpios = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index e81afcf8da1..a9c1c287f19 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -56,7 +56,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; // TODO: per-key RGB node(s)? diff --git a/app/boards/shields/eek/eek.keymap b/app/boards/shields/eek/eek.keymap index d250cb01505..74ecc4071e9 100644 --- a/app/boards/shields/eek/eek.keymap +++ b/app/boards/shields/eek/eek.keymap @@ -15,9 +15,9 @@ default { // -------------------------------------------------------------------------------------------------------------------------------------------------------------------- -// Q | W | E | R | T | | Y | U | I | O | P | -// A | S | D | F | G | | H | J | K | L | ; | -// Lsft/Z| X | C | V | B | | N | M | , | . |Rsft//| +// Q | W | E | R | T | | Y | U | I | O | P | +// A | S | D | F | G | | H | J | K | L | ; | +// Lsft/Z| X | C | V | B | | N | M | , | . |Rsft//| // | LCTL | Bspc/LMOD | SPC | | Del/Num | Ent | Sym | bindings = < &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P @@ -28,7 +28,7 @@ }; numbers { // -------------------------------------------------------------------------------------------------------------------------------------------------------------------- -// 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | +// 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | // TAB | BT_PRV | BT_NXT | VOL-| VOL+| | < | v | ∧ | > | ' | // Lsft| BT_SEL0| BT_CLR | MUTE| | | HOME| END | PGUP| PGDN| Rsft| // | LCTL | LMOD| LALT | | Num | | BL-reset | @@ -41,8 +41,8 @@ }; symbols { // -------------------------------------------------------------------------------------------------------------------------------------------------------------------- -// ESC | F1 | F2 | F3 | F4 | | OUT_USB | OUT_BLE | | = | - | -// CAPS| F5 | F6 | F7 | F8 | | [ | ] | | ` | \ | +// ESC | F1 | F2 | F3 | F4 | | OUT_USB | OUT_BLE | | = | - | +// CAPS| F5 | F6 | F7 | F8 | | [ | ] | | ` | \ | // LSFT| F9 | F10 | F11 | F12 | | | | | | RSFT | // | LCTL | LMOD| LALT | | RESET | | SYM | bindings = < diff --git a/app/boards/shields/eek/eek.overlay b/app/boards/shields/eek/eek.overlay index 3f830f079e9..f53c6b5bb87 100644 --- a/app/boards/shields/eek/eek.overlay +++ b/app/boards/shields/eek/eek.overlay @@ -20,7 +20,7 @@ RC(0,9) RC(0,8) RC(0,7) RC(0,6) RC(0,5) RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(1,9) RC(1,8) RC(1,7) RC(1,6) RC(1,5) RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(2,9) RC(2,8) RC(2,7) RC(2,6) RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) - RC(3,7) RC(3,6) RC(3,5) RC(3,4) RC(3,3) RC(3,2) + RC(3,7) RC(3,6) RC(3,5) RC(3,4) RC(3,3) RC(3,2) >; }; diff --git a/app/boards/shields/elephant42/Kconfig.defconfig b/app/boards/shields/elephant42/Kconfig.defconfig index e507f2c62f3..55ee6c87d30 100644 --- a/app/boards/shields/elephant42/Kconfig.defconfig +++ b/app/boards/shields/elephant42/Kconfig.defconfig @@ -15,7 +15,7 @@ if SHIELD_ELEPHANT42_LEFT || SHIELD_ELEPHANT42_RIGHT config ZMK_SPLIT default y - + if ZMK_DISPLAY config I2C diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi index e2b708ca6c3..2d3f5166d5e 100644 --- a/app/boards/shields/elephant42/elephant42.dtsi +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include / { @@ -36,7 +36,7 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - }; + }; }; &pro_micro_i2c { diff --git a/app/boards/shields/elephant42/elephant42.keymap b/app/boards/shields/elephant42/elephant42.keymap index 8594c1171f3..62484728ff8 100644 --- a/app/boards/shields/elephant42/elephant42.keymap +++ b/app/boards/shields/elephant42/elephant42.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include @@ -19,7 +19,7 @@ default_layer { bindings = < - < ADJT ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL + < ADJT ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL &mt LCTRL TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp LSHFT &mo LOWR &kp LGUI &kp BSPC &kp SPACE &kp ENTER &mo RAIS &kp LALT diff --git a/app/boards/shields/elephant42/elephant42_left.overlay b/app/boards/shields/elephant42/elephant42_left.overlay index 72fe2251d79..104734389bb 100644 --- a/app/boards/shields/elephant42/elephant42_left.overlay +++ b/app/boards/shields/elephant42/elephant42_left.overlay @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include "elephant42.dtsi" &kscan0 { diff --git a/app/boards/shields/elephant42/elephant42_right.overlay b/app/boards/shields/elephant42/elephant42_right.overlay index 35bd5895efc..c8f69a04a53 100644 --- a/app/boards/shields/elephant42/elephant42_right.overlay +++ b/app/boards/shields/elephant42/elephant42_right.overlay @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include "elephant42.dtsi" &default_transform { diff --git a/app/boards/shields/helix/helix.dtsi b/app/boards/shields/helix/helix.dtsi index 4545756085a..bbaec636080 100644 --- a/app/boards/shields/helix/helix.dtsi +++ b/app/boards/shields/helix/helix.dtsi @@ -42,6 +42,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9 , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; }; \ No newline at end of file diff --git a/app/boards/shields/helix/helix.keymap b/app/boards/shields/helix/helix.keymap index 82327c329af..80678fe6092 100644 --- a/app/boards/shields/helix/helix.keymap +++ b/app/boards/shields/helix/helix.keymap @@ -23,7 +23,7 @@ As such, those are in use within the default layer at this time.*/ / { keymap { compatible = "zmk,keymap"; - + default_layer { // --------------------------------------------------------------------------------------------------------------------------------- // | GRAVE | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | @@ -78,7 +78,7 @@ As such, those are in use within the default layer at this time.*/ // | | | | | | | | | | | | | | | | bindings = < &kp GRAVE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &ext_power EP_TOG - &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &rgb_ug RGB_EFF &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_SPI &rgb_ug RGB_BRI &rgb_ug RGB_TOG + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &rgb_ug RGB_EFF &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_SPI &rgb_ug RGB_BRI &rgb_ug RGB_TOG &bt BT_NXT &out OUT_TOG &out OUT_USB &out OUT_BLE &trans &trans &rgb_ug RGB_EFR &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_SPD &rgb_ug RGB_BRD &trans &bt BT_PRV &trans &trans &trans &trans &trans &kp LBRC &kp RBRC &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans diff --git a/app/boards/shields/helix/helix_left.overlay b/app/boards/shields/helix/helix_left.overlay index 5b0c7623454..2a7ac8057a3 100644 --- a/app/boards/shields/helix/helix_left.overlay +++ b/app/boards/shields/helix/helix_left.overlay @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include "helix.dtsi" &kscan0 { diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay index 4af9cbdfebe..0c48c1285f7 100644 --- a/app/boards/shields/hummingbird/hummingbird.overlay +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -49,7 +49,7 @@ , <&xiao_d 5 GPIO_ACTIVE_HIGH> ; }; - + }; &xiao_spi { status = "disabled"; }; diff --git a/app/boards/shields/iris/Kconfig.defconfig b/app/boards/shields/iris/Kconfig.defconfig index 972884dbe44..83331d1097d 100644 --- a/app/boards/shields/iris/Kconfig.defconfig +++ b/app/boards/shields/iris/Kconfig.defconfig @@ -15,5 +15,5 @@ if SHIELD_IRIS_LEFT || SHIELD_IRIS_RIGHT config ZMK_SPLIT default y - + endif \ No newline at end of file diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi index 24099f61f83..0e976f86b33 100644 --- a/app/boards/shields/iris/iris.dtsi +++ b/app/boards/shields/iris/iris.dtsi @@ -42,6 +42,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; }; \ No newline at end of file diff --git a/app/boards/shields/jian/jian.dtsi b/app/boards/shields/jian/jian.dtsi index 34c0298ed6f..2b1eb3910b1 100644 --- a/app/boards/shields/jian/jian.dtsi +++ b/app/boards/shields/jian/jian.dtsi @@ -71,6 +71,6 @@ , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; }; diff --git a/app/boards/shields/jiran/jiran.dtsi b/app/boards/shields/jiran/jiran.dtsi index 5dfaa46b74a..f0727dd4e68 100644 --- a/app/boards/shields/jiran/jiran.dtsi +++ b/app/boards/shields/jiran/jiran.dtsi @@ -77,6 +77,6 @@ , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; }; diff --git a/app/boards/shields/jorne/Kconfig.defconfig b/app/boards/shields/jorne/Kconfig.defconfig index 4664debf17a..775bb56a960 100644 --- a/app/boards/shields/jorne/Kconfig.defconfig +++ b/app/boards/shields/jorne/Kconfig.defconfig @@ -13,7 +13,7 @@ if SHIELD_JORNE_LEFT || SHIELD_JORNE_RIGHT config ZMK_SPLIT default y - + if ZMK_DISPLAY config I2C diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index 6f43393d52a..bb862b8d9ea 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -72,7 +72,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; // TODO: per-key RGB node(s)? diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 53b441cba08..82f48b4c4fe 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -13,7 +13,7 @@ if SHIELD_KYRIA config ZMK_SPLIT default y - + if ZMK_DISPLAY config I2C diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index c52ab05abf4..1e61cc6bb74 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -17,7 +17,7 @@ compatible = "zmk,kscan-gpio-matrix"; label = "KSCAN"; - diode-direction = "col2row"; + diode-direction = "col2row"; }; left_encoder: encoder_left { diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig index 36306757e2c..d5bfab3d79f 100644 --- a/app/boards/shields/leeloo/Kconfig.defconfig +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -8,7 +8,7 @@ config ZMK_KEYBOARD_NAME config ZMK_SPLIT_ROLE_CENTRAL default y - + endif if SHIELD_LEELOO_LEFT || SHIELD_LEELOO_RIGHT diff --git a/app/boards/shields/leeloo/README.md b/app/boards/shields/leeloo/README.md index 35e04994055..a807843f08f 100644 --- a/app/boards/shields/leeloo/README.md +++ b/app/boards/shields/leeloo/README.md @@ -6,20 +6,22 @@ Keyboard Designer: [clicketysplit.ca](https://clicketysplit.ca) GitHub: [ClicketySplit](https://github.com/ClicketySplit) Hardware Supported: Pro Micro, Elite-C, nice!nano v2 -Albeit, there is no doubt where Leeloo's heritage is derived from—Lily58, and Corne. It is not a copy-paste-modify implementation. +Albeit, there is no doubt where Leeloo's heritage is derived from—Lily58, and Corne. It is not a copy-paste-modify implementation. Leeloo has been designed from scratch; everything from the schematic to its PCB footprints, and column stagger. There are some subtle differences that may not be apparent; however, its subtle changes enable an interesting future. Features: -* 4x6x5m Split Keyboard -* Support for MX/Box or Low Profile Choc switches. -* 90% of the switches are socketed; with the exception to the rotary encoder positions—6 positions require soldering. -* Support for 128x32 OLED Displays. -* The option to select one of three positions for an EC11 rotary encoder on each half. -* Support for Alps Alpine Micro Switch -* Support for 3.7v 301230 LiPo Battery + +- 4x6x5m Split Keyboard +- Support for MX/Box or Low Profile Choc switches. +- 90% of the switches are socketed; with the exception to the rotary encoder positions—6 positions require soldering. +- Support for 128x32 OLED Displays. +- The option to select one of three positions for an EC11 rotary encoder on each half. +- Support for Alps Alpine Micro Switch +- Support for 3.7v 301230 LiPo Battery # Building Your Firmware + ZMK Firmware: [Introduction to ZMK](https://zmk.dev/docs/) Installation: [Installing ZMK](https://zmk.dev/docs/user-setup) Customization: [Customizing ZMK](https://zmk.dev/docs/customization) @@ -36,6 +38,7 @@ Build command for your custom keymap of Leeloo: west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo/config" # Support + If you have any questions with regards to Leeloo, please [Contact Us](https://clicketysplit.ca/pages/contact-us). Clickety Split diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 4efa10699ff..1a296a8c6b4 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -43,7 +43,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; left_encoder: encoder_left { diff --git a/app/boards/shields/lotus58/Kconfig.defconfig b/app/boards/shields/lotus58/Kconfig.defconfig index 56eef359588..b6bb37d852e 100644 --- a/app/boards/shields/lotus58/Kconfig.defconfig +++ b/app/boards/shields/lotus58/Kconfig.defconfig @@ -8,7 +8,7 @@ config ZMK_KEYBOARD_NAME config ZMK_SPLIT_ROLE_CENTRAL default y - + endif if SHIELD_LOTUS58_LEFT || SHIELD_LOTUS58_RIGHT diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index 1df0bf38f0e..e24d75e70d4 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -27,7 +27,7 @@ RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7 RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(4,0) RC(4,11) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) + RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) >; }; diff --git a/app/boards/shields/lotus58/lotus58.keymap b/app/boards/shields/lotus58/lotus58.keymap index 50249146d72..fae463c92a8 100644 --- a/app/boards/shields/lotus58/lotus58.keymap +++ b/app/boards/shields/lotus58/lotus58.keymap @@ -17,7 +17,7 @@ key-positions = <24 52>; layers = <0>; bindings = <&kp LGUI>; - }; + }; }; behaviors { @@ -59,7 +59,7 @@ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp LSHFT &kp A &sleft &kp D &fright &kp G &sys_reset &sys_reset &kp H &kp J &kp K &kp L &kp SEMI &mt RSHFT SQT &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_MUTE &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RCTRL BSLH - < 2 RET &kp LALT &kp SPACE < 1 DEL < 2 RET &kp BSPC < 1 RBKT &kp LGUI + < 2 RET &kp LALT &kp SPACE < 1 DEL < 2 RET &kp BSPC < 1 RBKT &kp LGUI >; sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP &inc_dec_kp PG_UP PG_DN>; @@ -71,7 +71,7 @@ // | | ! | HOME| ^ | END | % | | VOL^ | PGUP | INS | ^ | PSCR | - | // | | # | <- | v | -> | $ | | | | VOLv | <- | ^ | -> | ~ | _ | // | | @ | - | ( | ) | & | | | | MUTE | PGDN | v | : | * | | | -// | F11 | | | | | | | | F12 | +// | F11 | | | | | | | | F12 | bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp PLUS &trans &kp EXCL &kp HOME &kp UP &kp END &kp PRCNT &kp C_VOL_UP &kp PG_UP &kp INS &kp CARET &kp PSCRN &kp MINUS @@ -89,13 +89,13 @@ // | | INS | PSCR | GUI | RESET | | | PGUP | | ^ | | | | // | | ALT | CTRL | SHIFT | FLASH | CAPS | | | | PGDN | <- | v | -> | DEL | BSPC | // | | UNDO | CUT | COPY | PASTE | | | | | | |> | <|<| | |>|> | | | -// | | | | | | | | | | +// | | | | | | | | | | bindings = < &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG &out OUT_USB &out OUT_BLE &trans &sys_reset &bootloader &trans &kp INS &kp PSCRN &kp K_CMENU &sys_reset &trans &kp PG_UP &trans &kp UP &trans &trans &trans &trans &kp LALT &kp LCTRL &kp LSHFT &bootloader &kp CLCK &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC &trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &kp C_PP &kp C_PREV &kp C_NEXT &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP &inc_dec_kp PG_UP PG_DN>; diff --git a/app/boards/shields/lotus58/lotus58_left.overlay b/app/boards/shields/lotus58/lotus58_left.overlay index 9755ae0b3ea..a51659dfb12 100644 --- a/app/boards/shields/lotus58/lotus58_left.overlay +++ b/app/boards/shields/lotus58/lotus58_left.overlay @@ -8,7 +8,7 @@ &kscan0 { col-gpios - = <&pro_micro 15 GPIO_ACTIVE_HIGH> + = <&pro_micro 15 GPIO_ACTIVE_HIGH> , <&pro_micro 16 GPIO_ACTIVE_HIGH> , <&pro_micro 14 GPIO_ACTIVE_HIGH> , <&pro_micro 10 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index 28f8c811d31..8c0b042e2cb 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -15,7 +15,7 @@ if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_RIGHT config ZMK_SPLIT default y - + if ZMK_DISPLAY config I2C diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index b8d47b2a0eb..e3fabb3e854 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -40,7 +40,7 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; // TODO: per-key RGB node(s)? diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap index 2e8c6f6e714..ccdff9f7a71 100644 --- a/app/boards/shields/murphpad/murphpad.keymap +++ b/app/boards/shields/murphpad/murphpad.keymap @@ -44,7 +44,7 @@ bindings = <&bt BT_NXT>; }; }; - + sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1 &encoder_2>; @@ -57,29 +57,29 @@ default_layer { label = "default layer"; bindings = < - &bt BT_CLR &kp TAB &kp F5 &kp LC(LA(C)) &kp LG(D) - &rgb_ug RGB_TOG &kp ESC &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS - &rgb_ug RGB_EFF &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS + &bt BT_CLR &kp TAB &kp F5 &kp LC(LA(C)) &kp LG(D) + &rgb_ug RGB_TOG &kp ESC &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS + &rgb_ug RGB_EFF &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS &kp C_MUTE &kp KP_N4 &kp KP_N5 &kp KP_N6 &trans &mo 1 &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER &kp BSPC &kp KP_N0 &trans &kp KP_DOT &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; - }; - + }; + fn_layer { label = "fn layer"; bindings = < - &trans &trans &trans &trans &trans - &trans &kp KP_NUM &trans &trans &trans + &trans &trans &trans &trans &trans + &trans &kp KP_NUM &trans &trans &trans &trans &trans &trans &trans &trans - &bt BT_CLR &trans &trans &trans &trans + &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &trans &trans - &kp DEL &trans &trans &trans &trans - >; + &kp DEL &trans &trans &trans &trans + >; sensor-bindings = <&inc_dec_kp PG_UP PG_DN &inc_dec_kp C_VOL_UP C_VOL_DN>; - + }; }; }; \ No newline at end of file diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index c66f2aeffbc..b7fead608bd 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -42,7 +42,7 @@ resolution = <4>; status = "disabled"; }; - + encoder_2: encoder_2 { compatible = "alps,ec11"; label = "Encoder 2"; diff --git a/app/boards/shields/naked60/naked60.keymap b/app/boards/shields/naked60/naked60.keymap index d380a599746..1c212cd4544 100644 --- a/app/boards/shields/naked60/naked60.keymap +++ b/app/boards/shields/naked60/naked60.keymap @@ -28,7 +28,7 @@ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp LSHFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET - &mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + &mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT >; }; @@ -44,7 +44,7 @@ &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(NON_US_HASH) &kp LS(NON_US_BSLH) &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE + &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE >; }; diff --git a/app/boards/shields/nibble/nibble.keymap b/app/boards/shields/nibble/nibble.keymap index 23c796eae80..c02aad75b64 100644 --- a/app/boards/shields/nibble/nibble.keymap +++ b/app/boards/shields/nibble/nibble.keymap @@ -32,7 +32,7 @@ }; function_layer { label = "Function"; - + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; bindings = < diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index 13f2c2fe248..baf1eb10315 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -51,7 +51,7 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,15) RC(3,0) RC(3,1) RC(0,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) RC(3,15) -RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,6) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,6) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) >; }; }; diff --git a/app/boards/shields/nice_view/README.md b/app/boards/shields/nice_view/README.md index 0b4ac21f848..e3dffa3446e 100644 --- a/app/boards/shields/nice_view/README.md +++ b/app/boards/shields/nice_view/README.md @@ -2,4 +2,4 @@ The nice!view is a low power, high refresh rate display meant to replace I2C OLEDs traditionally used. -This shield requires that an `&nice_view_spi` labelled SPI bus is provided with *at least* MOSI, SCK, and CS pins defined. +This shield requires that an `&nice_view_spi` labelled SPI bus is provided with _at least_ MOSI, SCK, and CS pins defined. diff --git a/app/boards/shields/nice_view_adapter/README.md b/app/boards/shields/nice_view_adapter/README.md index ec4665a3fec..fe0a6f0760f 100644 --- a/app/boards/shields/nice_view_adapter/README.md +++ b/app/boards/shields/nice_view_adapter/README.md @@ -2,7 +2,7 @@ This shield is used as an adapter between the nice!view and existing shields/boards that expose an I2C OLED header. -To use this shield, you should add this shield to your list of shields *before* `nice_view`. +To use this shield, you should add this shield to your list of shields _before_ `nice_view`. The nice!view will use the SDA/SCL pins of the OLED, and then the adapter expects a final pin to be "bodged" from your microcontroller to the nice!view CS pin. This adapter assumes that the CS pin bodged is the `&pro_micro 1` pin or "D1", which is the top left pin when looking at the front of the board. If you can't use this pin, you'll need to override the `cs-gpios` for the `&nice_view_spi` bus (in your `zmk-config` keymap for example) or you will want to define your own `&nice_view_spi` bus without using this adapter. diff --git a/app/boards/shields/pancake/pancake.keymap b/app/boards/shields/pancake/pancake.keymap index 99f2aaff21e..e5ca437263a 100644 --- a/app/boards/shields/pancake/pancake.keymap +++ b/app/boards/shields/pancake/pancake.keymap @@ -20,7 +20,7 @@ default_layer { bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT &kp SEMI &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp UP &kp ENTER &kp LCTRL &kp LALT &kp LGUI &mo FNC &mo LWR &kp SPACE &kp SPACE &mo RSE &kp SLASH &kp LEFT &kp DOWN &kp RIGHT @@ -32,7 +32,7 @@ &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp BSPC &trans &trans &trans &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp LBRC &kp RBRC &kp C_VOL_UP &trans - &trans &trans &trans &trans &trans &trans &trans &trans &kp QMARK &trans &kp C_VOL_DN &trans + &trans &trans &trans &trans &trans &trans &trans &trans &kp QMARK &trans &kp C_VOL_DN &trans >; }; @@ -41,8 +41,8 @@ &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &trans &kp BSLH &trans &trans &trans &trans &trans &trans &trans &trans &kp LBKT &kp RBKT &kp C_VOL_UP &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_VOL_DN &trans - >; + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_VOL_DN &trans + >; }; function_layer { @@ -50,8 +50,8 @@ &bootloader &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp F11 &kp F12 &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans - &out OUT_BLE &out OUT_USB &out OUT_TOG &trans &trans &trans &trans &trans &trans &trans &trans &trans - >; + &out OUT_BLE &out OUT_USB &out OUT_TOG &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; }; }; }; diff --git a/app/boards/shields/pancake/pancake.overlay b/app/boards/shields/pancake/pancake.overlay index 53e8c8c121e..6fae463f424 100644 --- a/app/boards/shields/pancake/pancake.overlay +++ b/app/boards/shields/pancake/pancake.overlay @@ -14,7 +14,7 @@ label = "KSCAN"; diode-direction = "col2row"; - col-gpios + col-gpios = <&pro_micro 21 GPIO_ACTIVE_HIGH> , <&pro_micro 20 GPIO_ACTIVE_HIGH> , <&pro_micro 19 GPIO_ACTIVE_HIGH> @@ -28,7 +28,7 @@ , <&pro_micro 3 GPIO_ACTIVE_HIGH> , <&pro_micro 2 GPIO_ACTIVE_HIGH> ; - + row-gpios = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay index 098c9f02ef2..76ee5ba7673 100644 --- a/app/boards/shields/qaz/qaz.overlay +++ b/app/boards/shields/qaz/qaz.overlay @@ -49,5 +49,5 @@ , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; - + }; \ No newline at end of file diff --git a/app/boards/shields/quefrency/Kconfig.defconfig b/app/boards/shields/quefrency/Kconfig.defconfig index 9e51c2bc00b..28e46a56c6c 100644 --- a/app/boards/shields/quefrency/Kconfig.defconfig +++ b/app/boards/shields/quefrency/Kconfig.defconfig @@ -1,7 +1,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT - - + + if SHIELD_QUEFRENCY_LEFT config ZMK_KEYBOARD_NAME diff --git a/app/boards/shields/quefrency/quefrency.dtsi b/app/boards/shields/quefrency/quefrency.dtsi index 411d3658a17..c9cb7d43de4 100644 --- a/app/boards/shields/quefrency/quefrency.dtsi +++ b/app/boards/shields/quefrency/quefrency.dtsi @@ -13,7 +13,7 @@ zmk,matrix_transform = &default_transform; }; - /* + /* * This transform correspondsto the 60% left without macro keypad and 65% right, even this * combination of PCBs can have keys in different locations based on configuration. */ @@ -22,11 +22,11 @@ columns = <15>; rows = <6>; map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) /**/ RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,14) RC(5,13) +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) /**/ RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,14) RC(5,13) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) /**/RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(5,14) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,13) -RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) /**/ RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,12) RC(3,13) RC(3,14) RC(3,11) -RC(4,0) RC(4,1) RC(4,2) RC(4,4) RC(4,6) /**/ RC(4,7) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,9) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,13) +RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) /**/ RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,12) RC(3,13) RC(3,14) RC(3,11) +RC(4,0) RC(4,1) RC(4,2) RC(4,4) RC(4,6) /**/ RC(4,7) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,9) >; }; }; diff --git a/app/boards/shields/quefrency/quefrency_right.overlay b/app/boards/shields/quefrency/quefrency_right.overlay index 8e42d55508d..bf97d34b761 100644 --- a/app/boards/shields/quefrency/quefrency_right.overlay +++ b/app/boards/shields/quefrency/quefrency_right.overlay @@ -12,7 +12,7 @@ / { - /* This kscan is for the 65% right half the 60% right half + /* This kscan is for the 65% right half the 60% right half * may require different column and row pins */ kscan0: kscan { diff --git a/app/boards/shields/redox/redox.dtsi b/app/boards/shields/redox/redox.dtsi index 4825a39f785..9c0705a6c33 100644 --- a/app/boards/shields/redox/redox.dtsi +++ b/app/boards/shields/redox/redox.dtsi @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include / { @@ -42,7 +42,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; }; diff --git a/app/boards/shields/redox/redox.keymap b/app/boards/shields/redox/redox.keymap index a45595ff44d..c88f703beab 100644 --- a/app/boards/shields/redox/redox.keymap +++ b/app/boards/shields/redox/redox.keymap @@ -30,7 +30,7 @@ >; }; - + lower_layer { // -------------------------------------------------------------------------------------------------------------------------- // | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL | @@ -62,7 +62,7 @@ &trans &trans &trans &mo 3 &trans &mo 3 &trans &trans &trans &trans &trans &trans &trans &trans >; }; - + adjust_layer { // ----------------------------------------------------------------------------------------- // | F1 | F2 | F3 | F4 | F5 | F6 | --- | F7 | F8 | F9 | F10 | F11 | F12 | diff --git a/app/boards/shields/snap/Kconfig.defconfig b/app/boards/shields/snap/Kconfig.defconfig index fa02421aad5..c4a67e65d20 100644 --- a/app/boards/shields/snap/Kconfig.defconfig +++ b/app/boards/shields/snap/Kconfig.defconfig @@ -15,7 +15,7 @@ if SHIELD_SNAP_LEFT || SHIELD_SNAP_RIGHT config ZMK_SPLIT default y - + if ZMK_DISPLAY config I2C diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi index 0b7f32e592b..77070db9f5c 100644 --- a/app/boards/shields/snap/snap.dtsi +++ b/app/boards/shields/snap/snap.dtsi @@ -38,7 +38,7 @@ // R3C07L | R3C06L | R3C05L | R3C04L | R3C03L | R3C02L | R3C00L | | R3C15R | R3C14R | R3C13R | R3C12R | R3C11R | R3C10R | R3C09R | R4C08R | // R4C07L | R4C06L | R4C05L | R4C04L | R4C03L | R4C02L | R4C01L | R4C00L | | R4C15R | R4C14R | R4C13R | R4C12R | R4C11R | R4C10R | R4C09R | R5C08R | // R5C07L | R5C06L | R5C05L | R5C04L | R5C02L | R5C00L | | R5C15R | R5C14R | R5C13R | R5C12R | R5C11R | R5C10R | R5C09R | - + map = < RC(0,6) RC(0,5) RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,15) RC(0,14) RC(0,13) RC(0,12) RC(0,11) RC(0,10) RC(0,9) RC(0,8) RC(1,7) RC(1,6) RC(1,5) RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,15) RC(1,14) RC(1,13) RC(1,12) RC(1,11) RC(1,10) RC(1,9) RC(1,8) RC(1,16) diff --git a/app/boards/shields/snap/snap.keymap b/app/boards/shields/snap/snap.keymap index db44eb690aa..cc4c5255355 100644 --- a/app/boards/shields/snap/snap.keymap +++ b/app/boards/shields/snap/snap.keymap @@ -37,7 +37,7 @@ bindings = < &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader &kp C_PP &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_PP -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_BRI &rgb_ug RGB_EFF &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_BRD &rgb_ug RGB_HUI diff --git a/app/boards/shields/snap/snap_left.overlay b/app/boards/shields/snap/snap_left.overlay index 90fd66d1fa5..b5b8a8413a3 100644 --- a/app/boards/shields/snap/snap_left.overlay +++ b/app/boards/shields/snap/snap_left.overlay @@ -24,7 +24,7 @@ &left_encoder { a-gpios = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; status = "okay"; }; diff --git a/app/boards/shields/snap/snap_right.overlay b/app/boards/shields/snap/snap_right.overlay index 4243f5189e6..dc71a5cf29b 100644 --- a/app/boards/shields/snap/snap_right.overlay +++ b/app/boards/shields/snap/snap_right.overlay @@ -46,6 +46,6 @@ kscan_direct: kscan_direct { &right_encoder { a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; status = "okay"; }; diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 1c1c5604cfb..afa710ffa90 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -8,7 +8,7 @@ config ZMK_KEYBOARD_NAME config ZMK_SPLIT_ROLE_CENTRAL default y - + endif if SHIELD_SOFLE_LEFT || SHIELD_SOFLE_RIGHT diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig index 29de8d7e1ff..03078cd6672 100644 --- a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig @@ -21,7 +21,7 @@ config ZMK_RGB_UNDERGLOW select SPI config ZMK_DISPLAY - + if ZMK_DISPLAY config SSD1306 diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay index 864321cc156..82234278569 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay @@ -24,7 +24,7 @@ , <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> ; - col-gpios + col-gpios = <&pro_micro 16 GPIO_ACTIVE_HIGH> , <&pro_micro 10 GPIO_ACTIVE_HIGH> , <&pro_micro 14 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay index 34330400308..c1d34ffda17 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay @@ -24,7 +24,7 @@ , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> ; - col-gpios + col-gpios = <&pro_micro 9 GPIO_ACTIVE_HIGH> , <&pro_micro 8 GPIO_ACTIVE_HIGH> , <&pro_micro 7 GPIO_ACTIVE_HIGH> diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig index 3c8d5f58931..221bf90af29 100644 --- a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig @@ -21,7 +21,7 @@ config ZMK_RGB_UNDERGLOW select SPI config ZMK_DISPLAY - + if ZMK_DISPLAY config SSD1306 diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay index 1fa61286da7..10a195ff08c 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay @@ -25,7 +25,7 @@ , <&pro_micro 8 GPIO_ACTIVE_HIGH> ; - col-gpios + col-gpios = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay index 7f281db956f..eaebff36da2 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay @@ -25,7 +25,7 @@ , <&pro_micro 10 GPIO_ACTIVE_HIGH> ; - col-gpios + col-gpios = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig index 4a2b897368b..ac07c935a91 100644 --- a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig @@ -21,7 +21,7 @@ config ZMK_RGB_UNDERGLOW select SPI config ZMK_DISPLAY - + if ZMK_DISPLAY config SSD1306 diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap index 136e6927f47..385d2022fa4 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap @@ -14,7 +14,7 @@ // tapping_term_ms = <200>; }; -/ { +/ { combos { compatible = "zmk,combos"; @@ -23,80 +23,80 @@ key-positions = <0 1>; bindings = <&kp ESC>; }; - + combo_tab { timeout-ms = <50>; key-positions = <10 11>; bindings = <&kp TAB>; }; - + combo_ralt { timeout-ms = <50>; key-positions = <17 16>; bindings = <&kp RALT>; }; - + combo_lalt { timeout-ms = <50>; key-positions = <11 12>; bindings = <&kp LALT>; }; - + combo_lgui { timeout-ms = <50>; key-positions = <12 13>; bindings = <&kp LGUI>; }; - - + + combo_rgui { timeout-ms = <50>; key-positions = <17 18>; bindings = <&kp RGUI>; }; - - + + }; keymap { compatible = "zmk,keymap"; - + default_layer { bindings = < - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT &mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET - &mo 1 &kp LCTL &kp SPC &mo 2 + &mo 1 &kp LCTL &kp SPC &mo 2 >; }; left_layer { bindings = < - &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 - &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL - &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL - &mo 1 &kp LGUI &kp RGUI &mo 2 + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL + &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL + &mo 1 &kp LGUI &kp RGUI &mo 2 >; }; - + right_layer { bindings = < - &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN + &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP &kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT - &mo 3 &kp LCTL &kp SPC &mo 2 + &mo 3 &kp LCTL &kp SPC &mo 2 >; - }; - + }; + tri_layer { bindings = < &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans - &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans - &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans - &trans &trans &trans &trans + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans + &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans + &trans &trans &trans &trans >; - }; - + }; + }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay index 3dc954c33a9..1ff5ed5eaeb 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay @@ -24,7 +24,7 @@ , <&pro_micro 15 GPIO_ACTIVE_HIGH> ; - col-gpios + col-gpios = <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay index 3811423eeee..81ddca404dc 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay @@ -24,7 +24,7 @@ , <&pro_micro 14 GPIO_ACTIVE_HIGH> ; - col-gpios + col-gpios = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index 88a53a2f0e0..14063d3e46a 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -1,8 +1,8 @@ # Copyright (c) 2020 Derek Schmell # SPDX-License-Identifier: MIT - - + + if SHIELD_SPLITREUS62_LEFT config ZMK_KEYBOARD_NAME @@ -17,5 +17,5 @@ if SHIELD_SPLITREUS62_LEFT || SHIELD_SPLITREUS62_RIGHT config ZMK_SPLIT default y - + endif diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index 4b55bb8d183..905605e903f 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -45,6 +45,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) , <&pro_micro 5 GPIO_ACTIVE_HIGH> , <&pro_micro 6 GPIO_ACTIVE_HIGH> ; - + }; }; diff --git a/app/boards/shields/splitreus62/splitreus62_right.overlay b/app/boards/shields/splitreus62/splitreus62_right.overlay index f301ab999bb..9f76e7eb706 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.overlay +++ b/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include "splitreus62.dtsi" &default_transform { diff --git a/app/boards/shields/tg4x/README.md b/app/boards/shields/tg4x/README.md index 087ce251c35..12709fde0b3 100644 --- a/app/boards/shields/tg4x/README.md +++ b/app/boards/shields/tg4x/README.md @@ -6,6 +6,6 @@ Standard setup for the [TG4x](https://github.com/MythosMann/tg4x/) 40% keyboard. This TG4x implementation is for... -* rev 2.1 of the board -* Split spacebar with 2.25U on the left and 2.75U on the right -* 2U right shift +- rev 2.1 of the board +- Split spacebar with 2.25U on the left and 2.75U on the right +- 2U right shift diff --git a/app/boards/shields/tg4x/tg4x.overlay b/app/boards/shields/tg4x/tg4x.overlay index 0df94a2b59e..ca6e23c3183 100644 --- a/app/boards/shields/tg4x/tg4x.overlay +++ b/app/boards/shields/tg4x/tg4x.overlay @@ -10,7 +10,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; label = "KSCAN"; - + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/tidbit/tidbit.keymap b/app/boards/shields/tidbit/tidbit.keymap index e8cb37890ab..11424dc8f25 100644 --- a/app/boards/shields/tidbit/tidbit.keymap +++ b/app/boards/shields/tidbit/tidbit.keymap @@ -21,7 +21,7 @@ keymap { compatible = "zmk,keymap"; - + default_layer { bindings = < &kp KP_NUMLOCK &kp KP_ASTERISK &kp KP_MINUS diff --git a/app/boards/shields/tidbit/tidbit_19key.keymap b/app/boards/shields/tidbit/tidbit_19key.keymap index 8414a012a30..5710aeaf392 100644 --- a/app/boards/shields/tidbit/tidbit_19key.keymap +++ b/app/boards/shields/tidbit/tidbit_19key.keymap @@ -22,7 +22,7 @@ keymap { compatible = "zmk,keymap"; - + default_layer { bindings = < &tog 1 &kp KP_NUMLOCK &kp KP_SLASH diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.keymap b/app/boards/shields/two_percent_milk/two_percent_milk.keymap index 04dc4c0de4e..132793b3987 100644 --- a/app/boards/shields/two_percent_milk/two_percent_milk.keymap +++ b/app/boards/shields/two_percent_milk/two_percent_milk.keymap @@ -7,11 +7,11 @@ #include #include #include - + / { keymap { compatible = "zmk,keymap"; - + default_layer { bindings = < &kp X diff --git a/app/boards/shields/waterfowl/Kconfig.defconfig b/app/boards/shields/waterfowl/Kconfig.defconfig index 70029f0b816..5a77ca11a14 100644 --- a/app/boards/shields/waterfowl/Kconfig.defconfig +++ b/app/boards/shields/waterfowl/Kconfig.defconfig @@ -13,7 +13,7 @@ if SHIELD_WATERFOWL_LEFT || SHIELD_WATERFOWL_RIGHT config ZMK_SPLIT default y - + if ZMK_DISPLAY config I2C diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index c21dcf07d92..a156360e6ab 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -40,7 +40,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; left_encoder: encoder_left { //roller diff --git a/app/boards/shields/waterfowl/waterfowl.keymap b/app/boards/shields/waterfowl/waterfowl.keymap index d208fe497dd..9583499c2fb 100644 --- a/app/boards/shields/waterfowl/waterfowl.keymap +++ b/app/boards/shields/waterfowl/waterfowl.keymap @@ -22,8 +22,8 @@ * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| * | Z | X | C | V | B | | 2 | | 3 | | N | M | , | . | / | * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. - * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ bindings = < @@ -46,7 +46,7 @@ * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| * | | | INS | | | | 2 | | 3 | | 0 | 1 | 2 | 3 | * | * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. + * ,-----. ,--------------------. ,--------------------. ,-----. * | 1 | | DEL | SPACE | MO(3)| | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ @@ -70,7 +70,7 @@ * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| * | $ | | { | } | & | | 2 | | 3 | | | | | | | * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. + * ,-----. ,--------------------. ,--------------------. ,-----. * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ @@ -94,7 +94,7 @@ * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| * | | | | | | | 2 | | 3 | | F10 | F1 | F2 | F3 | F13 | * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. + * ,-----. ,--------------------. ,--------------------. ,-----. * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ @@ -106,7 +106,7 @@ >; sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; - }; + }; }; }; \ No newline at end of file diff --git a/app/boards/shields/zmk_uno/zmk_uno.keymap b/app/boards/shields/zmk_uno/zmk_uno.keymap index 7ab2632a272..0e0fc7954c1 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno.keymap @@ -29,8 +29,8 @@ }; REMOVE ME: */ - - + + / { macros { ZMK_MACRO(ble_zero, @@ -47,7 +47,7 @@ REMOVE ME: */ keymap { compatible = "zmk,keymap"; - + default_layer { bindings = < &kp A &bl BL_TOG @@ -55,7 +55,7 @@ REMOVE ME: */ &out OUT_USB &ble_zero &ble_one >; - + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; }; }; diff --git a/app/boards/shields/zodiark/Kconfig.defconfig b/app/boards/shields/zodiark/Kconfig.defconfig index 77648afdf5d..c6024694bad 100644 --- a/app/boards/shields/zodiark/Kconfig.defconfig +++ b/app/boards/shields/zodiark/Kconfig.defconfig @@ -8,7 +8,7 @@ config ZMK_KEYBOARD_NAME config ZMK_SPLIT_ROLE_CENTRAL default y - + endif if SHIELD_ZODIARK_LEFT || SHIELD_ZODIARK_RIGHT diff --git a/app/boards/shields/zodiark/zodiark.keymap b/app/boards/shields/zodiark/zodiark.keymap index 0211f818aad..82639edc8f6 100644 --- a/app/boards/shields/zodiark/zodiark.keymap +++ b/app/boards/shields/zodiark/zodiark.keymap @@ -39,7 +39,7 @@ // | | 0 | . | Enter| | | | | | | | 0 | . | Enter | | bindings = < &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 -&kp KP_NUM &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp PSCRN &kp SLCK &trans &trans &kp PAUSE_BREAK &trans &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp F12 +&kp KP_NUM &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp PSCRN &kp SLCK &trans &trans &kp PAUSE_BREAK &trans &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp F12 &trans &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp INS &kp HOME &trans &trans &kp PG_UP &trans &kp KP_N4 &kp KP_N5 &kp KP_N6 &trans &trans &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp DEL &kp END &trans &trans &trans &trans &kp PG_DN &trans &kp KP_N1 &kp KP_N2 &kp KP_N3 &trans &trans &kp KP_N0 &kp KP_DOT &kp KP_ENTER &trans &trans &trans &trans &trans &trans &kp KP_N0 &kp KP_DOT &kp KP_ENTER &trans diff --git a/app/core-coverage.yml b/app/core-coverage.yml index 12c03613588..4a60aad9caf 100644 --- a/app/core-coverage.yml +++ b/app/core-coverage.yml @@ -1,35 +1,35 @@ board: -- nice_nano_v2 -- nrfmicro_13 -- proton_c + - nice_nano_v2 + - nrfmicro_13 + - proton_c shield: -- corne_left -- corne_right -- romac -- settings_reset -- tidbit + - corne_left + - corne_right + - romac + - settings_reset + - tidbit include: -- board: bdn9_rev2 -- board: nice60 -- board: seeeduino_xiao_ble - shield: hummingbird -- board: nrf52840_m2 - shield: m60 -- board: planck_rev6 -- board: proton_c - shield: clueboard_california -- board: nice_nano_v2 - shield: kyria_left - cmake-args: "-DCONFIG_ZMK_DISPLAY=y" - nickname: "display" -- board: nice_nano_v2 - shield: kyria_right - cmake-args: "-DCONFIG_ZMK_DISPLAY=y" - nickname: "display" -- board: nice_nano - shield: romac_plus - cmake-args: "-DCONFIG_ZMK_RGB_UNDERGLOW=y -DCONFIG_WS2812_STRIP=y" - nickname: "underglow" -- board: nice_nano_v2 - shield: lily58_left nice_view_adapter nice_view - nickname: "niceview" + - board: bdn9_rev2 + - board: nice60 + - board: seeeduino_xiao_ble + shield: hummingbird + - board: nrf52840_m2 + shield: m60 + - board: planck_rev6 + - board: proton_c + shield: clueboard_california + - board: nice_nano_v2 + shield: kyria_left + cmake-args: "-DCONFIG_ZMK_DISPLAY=y" + nickname: "display" + - board: nice_nano_v2 + shield: kyria_right + cmake-args: "-DCONFIG_ZMK_DISPLAY=y" + nickname: "display" + - board: nice_nano + shield: romac_plus + cmake-args: "-DCONFIG_ZMK_RGB_UNDERGLOW=y -DCONFIG_WS2812_STRIP=y" + nickname: "underglow" + - board: nice_nano_v2 + shield: lily58_left nice_view_adapter nice_view + nickname: "niceview" diff --git a/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml b/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml index 2db84bcd5a3..94952813edd 100644 --- a/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml +++ b/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml @@ -5,24 +5,24 @@ # description: > - This is a representation of the Maxim MAX7318 I2C Gpio Expander. + This is a representation of the Maxim MAX7318 I2C Gpio Expander. compatible: "maxim,max7318" include: [gpio-controller.yaml, i2c-device.yaml] properties: - label: - required: true + label: + required: true - "#gpio-cells": - const: 2 + "#gpio-cells": + const: 2 - ngpios: - type: int - required: true - const: 16 - description: Number of gpios supported + ngpios: + type: int + required: true + const: 16 + description: Number of gpios supported gpio-cells: - pin diff --git a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml index 009476855ed..e6f6757d49a 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml @@ -16,4 +16,4 @@ properties: description: The default time to wait (in milliseconds) before triggering the next behavior in the macro bindings list. tap-ms: type: int - description: The default time to wait (in milliseconds) between the press and release events on a tapped macro behavior binding \ No newline at end of file + description: The default time to wait (in milliseconds) between the press and release events on a tapped macro behavior binding diff --git a/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml b/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml index 8f01effc511..82e1517dac9 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml @@ -13,4 +13,4 @@ properties: required: true tapping-term-ms: type: int - default: 200 \ No newline at end of file + default: 200 diff --git a/app/dts/bindings/display/gooddisplay,il0323.yaml b/app/dts/bindings/display/gooddisplay,il0323.yaml index d4a9ac7dd5b..46fc7326584 100644 --- a/app/dts/bindings/display/gooddisplay,il0323.yaml +++ b/app/dts/bindings/display/gooddisplay,il0323.yaml @@ -8,54 +8,54 @@ compatible: "gooddisplay,il0323" include: spi-device.yaml properties: - height: - type: int - required: true - description: Height in pixel of the panel driven by the controller - - width: - type: int - required: true - description: Width in pixel of the panel driven by the controller - - reset-gpios: - type: phandle-array - required: true - description: RESET pin. - - The RESET pin of GD7965 is active low. - If connected directly the MCU pin should be configured - as active low. - - dc-gpios: - type: phandle-array - required: true - description: DC pin. - - The DC pin of GD7965 is active low (transmission command byte). - If connected directly the MCU pin should be configured - as active low. - - busy-gpios: - type: phandle-array - required: true - description: BUSY pin. - - The BUSY pin of GD7965 is active low. - If connected directly the MCU pin should be configured - as active low. - - pwr: - type: uint8-array - required: true - description: Power Setting (PWR) values - - cdi: - type: int - required: true - description: VCOM and data interval value - - tcon: - type: int - required: true - description: TCON setting value \ No newline at end of file + height: + type: int + required: true + description: Height in pixel of the panel driven by the controller + + width: + type: int + required: true + description: Width in pixel of the panel driven by the controller + + reset-gpios: + type: phandle-array + required: true + description: RESET pin. + + The RESET pin of GD7965 is active low. + If connected directly the MCU pin should be configured + as active low. + + dc-gpios: + type: phandle-array + required: true + description: DC pin. + + The DC pin of GD7965 is active low (transmission command byte). + If connected directly the MCU pin should be configured + as active low. + + busy-gpios: + type: phandle-array + required: true + description: BUSY pin. + + The BUSY pin of GD7965 is active low. + If connected directly the MCU pin should be configured + as active low. + + pwr: + type: uint8-array + required: true + description: Power Setting (PWR) values + + cdi: + type: int + required: true + description: VCOM and data interval value + + tcon: + type: int + required: true + description: TCON setting value diff --git a/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml b/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml index 64b3939b470..57603f3a14a 100644 --- a/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml +++ b/app/dts/bindings/macros/zmk,macro-control-mode-press.yaml @@ -5,4 +5,4 @@ description: Set Macro To Press Mode compatible: "zmk,macro-control-mode-press" -include: zero_param.yaml \ No newline at end of file +include: zero_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml b/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml index c1c27882776..cd4ee2b651b 100644 --- a/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml +++ b/app/dts/bindings/macros/zmk,macro-control-mode-release.yaml @@ -5,4 +5,4 @@ description: Set Macro To Release Mode compatible: "zmk,macro-control-mode-release" -include: zero_param.yaml \ No newline at end of file +include: zero_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml b/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml index 8dacdc2afb2..f3bfcd5fd5e 100644 --- a/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml +++ b/app/dts/bindings/macros/zmk,macro-control-tap-time.yaml @@ -5,4 +5,4 @@ description: Set Macro Tap Duration compatible: "zmk,macro-control-tap-time" -include: one_param.yaml \ No newline at end of file +include: one_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml b/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml index 9e9beac2a54..45da69faa49 100644 --- a/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml +++ b/app/dts/bindings/macros/zmk,macro-control-wait-time.yaml @@ -5,4 +5,4 @@ description: Set Macro Wait Duration compatible: "zmk,macro-control-wait-time" -include: one_param.yaml \ No newline at end of file +include: one_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml b/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml index e89d8b2422a..929e2a29f73 100644 --- a/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml +++ b/app/dts/bindings/macros/zmk,macro-pause-for-release.yaml @@ -5,4 +5,4 @@ description: Macro Pause Until Release Marker compatible: "zmk,macro-pause-for-release" -include: zero_param.yaml \ No newline at end of file +include: zero_param.yaml diff --git a/app/dts/bindings/zmk,combos.yaml b/app/dts/bindings/zmk,combos.yaml index 1a914a7ff06..d094b5c42af 100644 --- a/app/dts/bindings/zmk,combos.yaml +++ b/app/dts/bindings/zmk,combos.yaml @@ -22,4 +22,4 @@ child-binding: type: boolean layers: type: array - default: [-1] \ No newline at end of file + default: [-1] diff --git a/app/include/linker/zmk-events.ld b/app/include/linker/zmk-events.ld index 66c1264a160..3e307f854f1 100644 --- a/app/include/linker/zmk-events.ld +++ b/app/include/linker/zmk-events.ld @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include __event_type_start = .; \ diff --git a/app/package.json b/app/package.json index e75d96956cc..9ad2878823e 100644 --- a/app/package.json +++ b/app/package.json @@ -18,6 +18,6 @@ }, "homepage": "https://zmk.dev/", "devDependencies": { - "prettier": "^2.4.0" + "prettier": "^2.7.1" } -} \ No newline at end of file +} diff --git a/app/src/activity.c b/app/src/activity.c index 46af56fbd84..41fe2e15dc4 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -74,8 +74,8 @@ void activity_work_handler(struct k_work *work) { } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ if (inactive_time > MAX_IDLE_MS) { - set_state(ZMK_ACTIVITY_IDLE); - } + set_state(ZMK_ACTIVITY_IDLE); + } } K_WORK_DEFINE(activity_work, activity_work_handler); diff --git a/app/src/display/widgets/Kconfig b/app/src/display/widgets/Kconfig index 5ef32d20417..4c056cf5e00 100644 --- a/app/src/display/widgets/Kconfig +++ b/app/src/display/widgets/Kconfig @@ -33,7 +33,7 @@ config ZMK_WIDGET_PERIPHERAL_STATUS depends on BT && ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL default y if BT && ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL select LV_USE_LABEL - + config ZMK_WIDGET_WPM_STATUS bool "Widget for displaying typed words per minute" depends on !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL diff --git a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap index d35c7277084..a02f6c64ffb 100644 --- a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap @@ -8,7 +8,7 @@ /* This test fails if the order of event handlers for hold-taps -and combos is wrong. Hold-taps need to process key position events +and combos is wrong. Hold-taps need to process key position events first so the decision to hold or tap can be made. */ / { @@ -37,11 +37,11 @@ first so the decision to hold or tap can be made. &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,2,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap index a99c15d97f8..325da627d2b 100644 --- a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap @@ -32,11 +32,11 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,2,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/layer-filter-0/native_posix_64.keymap b/app/tests/combo/layer-filter-0/native_posix_64.keymap index aac330f9019..337128226d3 100644 --- a/app/tests/combo/layer-filter-0/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-0/native_posix_64.keymap @@ -52,27 +52,27 @@ &kscan { events = < /* Combo One */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) /* Combo Three */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(1,1,10) /* Toggle Layer */ - ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,1,10) /* Combo Two */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) /* Combo Three */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(1,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/layer-filter-1/native_posix_64.keymap b/app/tests/combo/layer-filter-1/native_posix_64.keymap index 995f27ee896..8eb5e9ebd6b 100644 --- a/app/tests/combo/layer-filter-1/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-1/native_posix_64.keymap @@ -32,9 +32,9 @@ &kscan { events = < /* Combo One */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/multiple-timeouts/native_posix_64.keymap b/app/tests/combo/multiple-timeouts/native_posix_64.keymap index 91bf52353dd..87d21be1936 100644 --- a/app/tests/combo/multiple-timeouts/native_posix_64.keymap +++ b/app/tests/combo/multiple-timeouts/native_posix_64.keymap @@ -34,7 +34,7 @@ events = < ZMK_MOCK_PRESS(0,0,100) ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap index e3cbf43707a..8b7b4196266 100644 --- a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap @@ -2,7 +2,7 @@ #include #include -/* +/* combo 0 timeout inf combo 01 timeout inf combo 0123 timeout inf @@ -51,66 +51,66 @@ events = < /* all permutations of combo one press, combo triggered by release */ /* while debugging these, you may want to set the release_timer to a high number */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,2,10) - - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,2,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,2,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - + ZMK_MOCK_RELEASE(0,0,10) + /* all permutations of combo two press and release, combo triggered by release */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) ZMK_MOCK_RELEASE(0,2,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap index c228c475b91..457378829e7 100644 --- a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap @@ -39,26 +39,26 @@ &kscan { events = < - /* if you're debugging these, remember that the timer can be triggered between + /* if you're debugging these, remember that the timer can be triggered between events while stepping through code. */ /* all permutations of combo two press and release, combo triggered by timeout */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,100) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,100) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,100) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap index 3d36421383e..ba547dc2e40 100644 --- a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap @@ -2,7 +2,7 @@ #include #include -/* +/* combo 01 timeout 100 combo 0123 timeout 100 press 012, wait until timeout runs out @@ -40,13 +40,13 @@ &kscan { events = < - /* if you're debugging these, remember that the timer can be triggered between + /* if you're debugging these, remember that the timer can be triggered between events while stepping through code. */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,100) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,100) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,2,100) >; }; \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap index 0622dcd0474..0da394b5983 100644 --- a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap @@ -2,7 +2,7 @@ #include #include -/* +/* combo 12 timeout 100 combo 0123 timeout 100 press 012, release 2 @@ -41,13 +41,13 @@ &kscan { events = < - /* if you're debugging these, remember that the timer can be triggered between + /* if you're debugging these, remember that the timer can be triggered between events while stepping through code. */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,100) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,100) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,2,100) >; }; \ No newline at end of file diff --git a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap index 4e68105fb59..f9537344334 100644 --- a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap +++ b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap @@ -10,7 +10,7 @@ key-positions = <0 1>; bindings = <&kp X>; }; - + combo_two { timeout-ms = <30>; key-positions = <0 2>; @@ -40,44 +40,44 @@ &kscan { events = < /* all permutations of combo one press and release */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) /* all permutations of combo two press and release */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) ZMK_MOCK_RELEASE(0,2,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap index 68736d8fbcc..c6202365b21 100644 --- a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap @@ -3,7 +3,7 @@ #include / { - combos { + combos { compatible = "zmk,combos"; combo_one { timeout-ms = <80>; @@ -27,9 +27,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,100) ZMK_MOCK_RELEASE(1,1,100) >; }; \ No newline at end of file diff --git a/app/tests/combo/press-release/native_posix_64.keymap b/app/tests/combo/press-release/native_posix_64.keymap index 0f45792ddc6..8d81f35b6d7 100644 --- a/app/tests/combo/press-release/native_posix_64.keymap +++ b/app/tests/combo/press-release/native_posix_64.keymap @@ -3,7 +3,7 @@ #include / { - combos { + combos { compatible = "zmk,combos"; combo_one { timeout-ms = <30>; @@ -28,24 +28,24 @@ &kscan { events = < /* all different combinations of press and release order */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/press-timeout/native_posix_64.keymap b/app/tests/combo/press-timeout/native_posix_64.keymap index ff0b749330e..497cf1aa955 100644 --- a/app/tests/combo/press-timeout/native_posix_64.keymap +++ b/app/tests/combo/press-timeout/native_posix_64.keymap @@ -27,9 +27,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap index 2518bbc90ef..cf7e79f7f22 100644 --- a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap @@ -33,13 +33,13 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(1,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap index 4895636e2b1..0c55eb47db6 100644 --- a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap @@ -33,14 +33,14 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + + ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap index 0c4a698ce05..248d6e75e00 100644 --- a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap @@ -33,14 +33,14 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(1,1,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap index 3bacb886989..5af94d45b3d 100644 --- a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap @@ -28,11 +28,11 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,0,10) /* this should release the combo */ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) >; }; \ No newline at end of file diff --git a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap index 8ac8316b18c..88351bea6d6 100644 --- a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap @@ -28,11 +28,11 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,0,10) /* this should not release the combo yet */ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) >; }; \ No newline at end of file diff --git a/app/tests/gresc/gresc-press-release/native_posix_64.keymap b/app/tests/gresc/gresc-press-release/native_posix_64.keymap index 7ca3d77dfbb..4b658a73c40 100644 --- a/app/tests/gresc/gresc-press-release/native_posix_64.keymap +++ b/app/tests/gresc/gresc-press-release/native_posix_64.keymap @@ -19,30 +19,30 @@ &kscan { events = < /* esc */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* ~ */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(1,0,10) /* LGUI+` */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(1,1,10) /* ~ */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) /* LGUI+` */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap index 0c38721de34..78b8ebcb283 100644 --- a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap +++ b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap @@ -27,15 +27,15 @@ The first gresc that is released releases the key. &kscan { events = < /* esc */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_PRESS(0,1,10) /* the second gresc is ignored */ ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) /* the second gresc is ignored */ /* ~ */ - ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) /* the second gresc is ignored */ + ZMK_MOCK_PRESS(0,0,10) /* the second gresc is ignored */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) /* the second gresc is ignored */ diff --git a/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap index 040cdd3ee78..38c8668ca5f 100644 --- a/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap index abb31b4b3a1..a540353b0ce 100644 --- a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 38575e9a204..76bb2fa3787 100644 --- a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,300) /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 21baa447eba..882f33aa6a8 100644 --- a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /*d*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index cd7ff384bfc..0fc0b848c3d 100644 --- a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /* d */ ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index b84aa6265b7..5d0fcbfb2e5 100644 --- a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index bdfaf9d3d9e..fca60ba8ed1 100644 --- a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index c0fd1bd184b..5d0af9ca1bf 100644 --- a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(0,0,100) ZMK_MOCK_PRESS(1,0,100) ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 69c19676e77..6b1383523db 100644 --- a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) - /* timer */ + /* timer */ >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap index 8f90ffadb4e..d895df02316 100644 --- a/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap @@ -6,9 +6,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap index 706ca540604..832ea7ef7d1 100644 --- a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap @@ -31,15 +31,15 @@ &kscan { events = < /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* retro tap */ ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* hold */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap index d1d2b756c32..7560a05a183 100644 --- a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,1,200) // non trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap index 94d9a923cc2..b915a6a9339 100644 --- a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) // trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap index 6ddf87f895c..a6ac1507c24 100644 --- a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(1,0,10) // trigger key ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_PRESS(1,1,400) // not trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap index 930760553ab..9965c9b3773 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap index 2698f0553ee..6d016501b18 100644 --- a/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap @@ -20,7 +20,7 @@ default_layer { bindings = < - &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J &ht_bal LEFT_GUI H &ht_bal LEFT_ALT L >; }; @@ -29,13 +29,13 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,100) ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_PRESS(1,1,100) - ZMK_MOCK_RELEASE(0,0,100) - ZMK_MOCK_RELEASE(0,1,100) - ZMK_MOCK_RELEASE(1,0,100) - ZMK_MOCK_RELEASE(1,1,100) + ZMK_MOCK_PRESS(1,1,100) + ZMK_MOCK_RELEASE(0,0,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,0,100) + ZMK_MOCK_RELEASE(1,1,100) >; }; diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap index 040cdd3ee78..38c8668ca5f 100644 --- a/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap index abb31b4b3a1..a540353b0ce 100644 --- a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 38575e9a204..76bb2fa3787 100644 --- a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,300) /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 21baa447eba..882f33aa6a8 100644 --- a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /*d*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index cd7ff384bfc..0fc0b848c3d 100644 --- a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /* d */ ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index b84aa6265b7..5d0fcbfb2e5 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index bdfaf9d3d9e..fca60ba8ed1 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index c0fd1bd184b..5d0af9ca1bf 100644 --- a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(0,0,100) ZMK_MOCK_PRESS(1,0,100) ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 69c19676e77..6b1383523db 100644 --- a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) - /* timer */ + /* timer */ >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap index 8f90ffadb4e..d895df02316 100644 --- a/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap @@ -6,9 +6,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap index 314b7334b86..dc96ee8b094 100644 --- a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap @@ -31,15 +31,15 @@ &kscan { events = < /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* retro tap */ ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* hold */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap index d1d2b756c32..7560a05a183 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,1,200) // non trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap index 94d9a923cc2..b915a6a9339 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) // trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap index 6ddf87f895c..a6ac1507c24 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(1,0,10) // trigger key ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_PRESS(1,1,400) // not trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap index ee0d5e80a66..13a58c3e396 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap index 040cdd3ee78..38c8668ca5f 100644 --- a/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap index abb31b4b3a1..a540353b0ce 100644 --- a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 38575e9a204..76bb2fa3787 100644 --- a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,300) /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 21baa447eba..882f33aa6a8 100644 --- a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /*d*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index cd7ff384bfc..0fc0b848c3d 100644 --- a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /* d */ ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index b84aa6265b7..5d0fcbfb2e5 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index bdfaf9d3d9e..fca60ba8ed1 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index c0fd1bd184b..5d0af9ca1bf 100644 --- a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(0,0,100) ZMK_MOCK_PRESS(1,0,100) ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 69c19676e77..6b1383523db 100644 --- a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) - /* timer */ + /* timer */ >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap index 8f90ffadb4e..d895df02316 100644 --- a/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap @@ -6,9 +6,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap index adbd648eccc..b733e3a2a06 100644 --- a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap @@ -2,7 +2,7 @@ #include #include -/* +/* * A hold-tap with long tapping term is pressed first. * A hold-tap with short tapping term is quickly tapped. * The short tapping term hold-tap should 'tap', not 'hold'. @@ -45,9 +45,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,20) - ZMK_MOCK_PRESS(0,1,20) - ZMK_MOCK_RELEASE(0,1,200) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,20) + ZMK_MOCK_PRESS(0,1,20) + ZMK_MOCK_RELEASE(0,1,200) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap index d1d2b756c32..7560a05a183 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,1,200) // non trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap index 94d9a923cc2..b915a6a9339 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) // trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap index 6ddf87f895c..a6ac1507c24 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(1,0,10) // trigger key ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_PRESS(1,1,400) // not trigger key - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap index 930760553ab..9965c9b3773 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap index 040cdd3ee78..38c8668ca5f 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap index 11d033f40d9..b5834e06d1e 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap @@ -5,7 +5,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap index abb31b4b3a1..a540353b0ce 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 38575e9a204..76bb2fa3787 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ ZMK_MOCK_RELEASE(1,1,300) /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 21baa447eba..882f33aa6a8 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /*d*/ ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index cd7ff384bfc..0fc0b848c3d 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -8,6 +8,6 @@ ZMK_MOCK_PRESS(1,0,10) /* d */ ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index b84aa6265b7..5d0fcbfb2e5 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index bdfaf9d3d9e..fca60ba8ed1 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < ZMK_MOCK_PRESS(0,0,200) ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) >; diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index c0fd1bd184b..5d0af9ca1bf 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -8,7 +8,7 @@ ZMK_MOCK_PRESS(0,0,100) ZMK_MOCK_PRESS(1,0,100) ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ + /* timer fires */ ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 69c19676e77..6b1383523db 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -9,6 +9,6 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,10) - /* timer */ + /* timer */ >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap index 8f90ffadb4e..d895df02316 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap @@ -6,9 +6,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap index 930760553ab..9965c9b3773 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/keypress/kp-press-release/native_posix_64.keymap b/app/tests/keypress/kp-press-release/native_posix_64.keymap index 0ddb7ab6bac..c8e744ee7f1 100644 --- a/app/tests/keypress/kp-press-release/native_posix_64.keymap +++ b/app/tests/keypress/kp-press-release/native_posix_64.keymap @@ -2,7 +2,7 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap b/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap index f437989325b..f4d034295a8 100644 --- a/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap @@ -5,30 +5,30 @@ &kscan { events = < /* Toggle LALT on */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Tap TAB twice */ - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) /* Toggle LSHFT on */ - ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) /* Tap TAB once */ - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) /* Toggle LALT off */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Tap A */ - ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,1,10) /* Toggle LSHFT off */ - ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) /* Tap A */ - ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,1,10) >; }; diff --git a/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap b/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap index 3b14e416bb7..0a4ad4ae414 100644 --- a/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap @@ -5,18 +5,18 @@ &kscan { events = < /* Toggle LS(A) on */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Toggle LS(A) off */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Press A */ - ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,0,10) /* Toggle LS(A) on */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Toggle LS(A) off */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Release A */ ZMK_MOCK_RELEASE(1,0,10) diff --git a/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap b/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap index 644caa26295..e25d4b187ff 100644 --- a/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap @@ -2,9 +2,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/keytoggle/kt-press-release/native_posix_64.keymap b/app/tests/keytoggle/kt-press-release/native_posix_64.keymap index 644caa26295..e25d4b187ff 100644 --- a/app/tests/keytoggle/kt-press-release/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-press-release/native_posix_64.keymap @@ -2,9 +2,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/macros/basic/native_posix_64.keymap b/app/tests/macros/basic/native_posix_64.keymap index 6a2391db66d..a281279259d 100644 --- a/app/tests/macros/basic/native_posix_64.keymap +++ b/app/tests/macros/basic/native_posix_64.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap index 2f3b943a70d..e6ef4f490be 100644 --- a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include diff --git a/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap index c264a9aba44..c5cde5b499b 100644 --- a/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap +++ b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include diff --git a/app/tests/macros/press-mid-macro/native_posix_64.keymap b/app/tests/macros/press-mid-macro/native_posix_64.keymap index a075a443614..b8ae76f1bc8 100644 --- a/app/tests/macros/press-mid-macro/native_posix_64.keymap +++ b/app/tests/macros/press-mid-macro/native_posix_64.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include diff --git a/app/tests/macros/press-release/native_posix_64.keymap b/app/tests/macros/press-release/native_posix_64.keymap index 6814d5421e5..2546712672e 100644 --- a/app/tests/macros/press-release/native_posix_64.keymap +++ b/app/tests/macros/press-release/native_posix_64.keymap @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: MIT */ - + #include #include #include diff --git a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap index b814242514b..dbb2df5c51f 100644 --- a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap index 26af5657005..b01c625724b 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) >; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap index 9df2c1527aa..89930328035 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap @@ -5,8 +5,8 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap index 5f9375fb856..acd55e83a7e 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) >; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap index 1b175d445e9..7e1865a0e29 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap index 0e9a2d6a8cf..e175d60ef7a 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending index 3f49005af22..f3df27cabd5 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending @@ -1,9 +1,9 @@ -This test fails because the hid_listener_keycode_released function +This test fails because the hid_listener_keycode_released function releases implicit modifiers always, even if they were not set by the key that's going up. Also see the comment in that function: If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time. Solving this would require keeping track of which key's implicit modifiers are currently - active and only releasing modifiers at that time. + active and only releasing modifiers at that time. diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap index 10d0dbf8ce9..8c4534f4f9b 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap index 3d6494dd8e6..e82182c478b 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap @@ -5,9 +5,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap index d5f372f198d..a36b85d2568 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) >; }; diff --git a/app/tests/momentary-layer/1-normal/native_posix_64.keymap b/app/tests/momentary-layer/1-normal/native_posix_64.keymap index b5249f7b755..ed0e8ad1be9 100644 --- a/app/tests/momentary-layer/1-normal/native_posix_64.keymap +++ b/app/tests/momentary-layer/1-normal/native_posix_64.keymap @@ -24,9 +24,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap index 96e4e8d9675..9311fdee55a 100644 --- a/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap +++ b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap @@ -24,9 +24,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) >; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/3-covered/native_posix_64.keymap b/app/tests/momentary-layer/3-covered/native_posix_64.keymap index 2dde6d88c48..62ae301df0f 100644 --- a/app/tests/momentary-layer/3-covered/native_posix_64.keymap +++ b/app/tests/momentary-layer/3-covered/native_posix_64.keymap @@ -27,7 +27,7 @@ and the original key is "covered". &kscan { events = < - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) >; }; diff --git a/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap b/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap index d0f26b2f736..230e9566bf1 100644 --- a/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap @@ -5,8 +5,8 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,1200) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,1200) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) >; diff --git a/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap index 9febf08c584..79567de9a62 100644 --- a/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap @@ -24,7 +24,7 @@ &kscan { events = < /* press sl lower_layer */ - ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,1,10) /* tap sk LEFT_CONTROL */ ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) @@ -32,12 +32,12 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) /* release sl lower_layer */ - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* tap A (with left control and left shift enabled) */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) /* tap A (no sticky keys anymore) */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap index e9b87f4215c..e89faa93ff1 100644 --- a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap @@ -35,11 +35,11 @@ &kscan { events = < /* press sl 1 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* press sl 2 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* press 1 */ ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) @@ -49,11 +49,11 @@ /* repeat test to check if cleanup is done correctly */ /* press sl 1 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* press sl 2 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* press 1 */ ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap index 33115453f0e..f52a6bec6b7 100644 --- a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap @@ -9,17 +9,17 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(1,0,10) /* second key is pressed shortly after the first. It should not be capitalized. */ - ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(1,1,10) /* repeat test to check if cleanup is done correctly */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) >; diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap index 2d078ba5f8d..63aca99b208 100644 --- a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap @@ -5,14 +5,14 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) /* repeat test to check if cleanup is done correctly */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) >; diff --git a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap index 4470fb2160c..18d09ebc0d9 100644 --- a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap @@ -29,8 +29,8 @@ &kscan { events = < /* press sl 1 */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* press X */ ZMK_MOCK_PRESS(0,1,10) /* press A */ @@ -40,8 +40,8 @@ /* repeat test to check if cleanup is done correctly */ /* press sl 1 */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* press X */ ZMK_MOCK_PRESS(0,1,10) /* press Y */ diff --git a/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap index 438880d5ef3..4760026997e 100644 --- a/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap @@ -5,9 +5,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap b/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap index 067f2379367..2fb661a7f1e 100644 --- a/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap @@ -5,9 +5,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(1,0,10) >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap index d58641bd892..92fd1e0adca 100644 --- a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap @@ -5,8 +5,8 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,800) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,800) ZMK_MOCK_PRESS(1,0,400) ZMK_MOCK_RELEASE(1,0,10) >; diff --git a/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap index aac6725e578..1daa6c4f3bc 100644 --- a/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,1100) + ZMK_MOCK_RELEASE(0,0,1100) >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap index 66bb72d8145..1be65a5ba33 100644 --- a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap +++ b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap @@ -5,8 +5,8 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,0,100) diff --git a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap index bdcccf3327f..a90bb32ede5 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap +++ b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap @@ -24,24 +24,24 @@ &kscan { events = < /* tap sl lower_layer */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* tap sk LEFT_CONTROL */ ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* tap A */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* repeat */ /* tap sl */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* tap sk */ ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* tap A */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap index d4c30fbf9c9..f811f7e92a1 100644 --- a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap @@ -18,10 +18,10 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* the sticky key is pressed again, so the previous one must be cancelled */ - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,1200) >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/1b-tap2/native_posix_64.keymap b/app/tests/tap-dance/1b-tap2/native_posix_64.keymap index c5e1c8db6e5..5674c4eaa8b 100644 --- a/app/tests/tap-dance/1b-tap2/native_posix_64.keymap +++ b/app/tests/tap-dance/1b-tap2/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,200) + ZMK_MOCK_RELEASE(0,0,200) >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/1c-tap3/native_posix_64.keymap b/app/tests/tap-dance/1c-tap3/native_posix_64.keymap index 6813393e5d7..142b823659f 100644 --- a/app/tests/tap-dance/1c-tap3/native_posix_64.keymap +++ b/app/tests/tap-dance/1c-tap3/native_posix_64.keymap @@ -6,10 +6,10 @@ &kscan { events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,200) + ZMK_MOCK_RELEASE(0,0,200) >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/2a-hold1/native_posix_64.keymap b/app/tests/tap-dance/2a-hold1/native_posix_64.keymap index f4c7a2d29a4..bcfc21d20d5 100644 --- a/app/tests/tap-dance/2a-hold1/native_posix_64.keymap +++ b/app/tests/tap-dance/2a-hold1/native_posix_64.keymap @@ -6,6 +6,6 @@ &kscan { events = < ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/2b-hold2/native_posix_64.keymap b/app/tests/tap-dance/2b-hold2/native_posix_64.keymap index 0fec2e40fea..6691437e738 100644 --- a/app/tests/tap-dance/2b-hold2/native_posix_64.keymap +++ b/app/tests/tap-dance/2b-hold2/native_posix_64.keymap @@ -6,8 +6,8 @@ &kscan { events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/2c-hold3/native_posix_64.keymap b/app/tests/tap-dance/2c-hold3/native_posix_64.keymap index 8375c6f6392..942ecfc0374 100644 --- a/app/tests/tap-dance/2c-hold3/native_posix_64.keymap +++ b/app/tests/tap-dance/2c-hold3/native_posix_64.keymap @@ -6,10 +6,10 @@ &kscan { events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) >; }; \ No newline at end of file diff --git a/app/tests/wpm/1-single_keypress/native_posix_64.keymap b/app/tests/wpm/1-single_keypress/native_posix_64.keymap index ec12a286ca4..2aa52c168dd 100644 --- a/app/tests/wpm/1-single_keypress/native_posix_64.keymap +++ b/app/tests/wpm/1-single_keypress/native_posix_64.keymap @@ -2,9 +2,9 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) /* Wait for the worker to trigger and reset after 5 seconds, followed by a 0 at 6 seconds */ - ZMK_MOCK_PRESS(0,0,6000) + ZMK_MOCK_PRESS(0,0,6000) >; }; \ No newline at end of file diff --git a/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap b/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap index f4ba2dfe1e4..3cfab946ec4 100644 --- a/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap +++ b/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap @@ -2,14 +2,14 @@ &kscan { events = < - ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) //1st WPM worker call - 12wpm - 1 key press in 1 second - ZMK_MOCK_PRESS(0,0,1000) + ZMK_MOCK_PRESS(0,0,1000) ZMK_MOCK_RELEASE(0,0,10) // 2nd WPM worker call - 12wpm - 2 key press in 2 second // note there is no event for this as WPM hasn't changed // 3rd WPM worker call - 8wpm - 2 key press in 3 seconds - ZMK_MOCK_PRESS(0,0,2000) + ZMK_MOCK_PRESS(0,0,2000) >; }; \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json index fbc859e502f..c7333cb36a9 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -39,7 +39,7 @@ "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", - "prettier": "2.3.1", + "prettier": "^2.7.1", "string-replace-loader": "^3.1.0", "typescript": "^4.6.3", "webpack": "^5.72.1" @@ -12201,15 +12201,18 @@ } }, "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-error": { @@ -24675,9 +24678,9 @@ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "pretty-error": { diff --git a/docs/package.json b/docs/package.json index 7c933b032a3..95d47b9f0bc 100644 --- a/docs/package.json +++ b/docs/package.json @@ -58,7 +58,7 @@ "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", - "prettier": "2.3.1", + "prettier": "^2.7.1", "string-replace-loader": "^3.1.0", "typescript": "^4.6.3", "webpack": "^5.72.1" diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index f90c74889e1..90f9cdcfaec 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -74,7 +74,7 @@ if (Test-CommandExists Get-Acl) { $permission = (Get-Acl $pwd).Access | ?{$_.IdentityReference -match $env:UserName ` -and $_.FileSystemRights -match "FullControl" ` - -or $_.FileSystemRights -match "Write" } | + -or $_.FileSystemRights -match "Write" } | Select IdentityReference,FileSystemRights If (-Not $permission){ @@ -141,7 +141,7 @@ if ($keyboard_type -eq "shield") { Write-Host "Wired split is not yet supported by ZMK." exit 1 } - + $shields = $keyboard_siblings $board = $($($boards.keys)[$choice]) $boards = ( $board ) diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index 4c3868ec45d..c711dbc5b1c 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -97,7 +97,7 @@ select opt in "${options[@]}" "Quit"; do keyboard_arch=${keyboards_arch[$keyboard_index]} keyboard_basedir=${keyboards_basedir[$keyboard_index]} keyboard_title=${options[$keyboard_index]} - keyboard_sibling_var=${keyboard}_siblings[@] + keyboard_sibling_var=${keyboard}_siblings[@] keyboard_sibling_first=${keyboard}_siblings[0] if [ -n "${!keyboard_sibling_first}" ]; then keyboard_siblings=${!keyboard_sibling_var} diff --git a/schema/hardware-metadata.schema.json b/schema/hardware-metadata.schema.json index 8ca382c552e..4c2bdf3b730 100644 --- a/schema/hardware-metadata.schema.json +++ b/schema/hardware-metadata.schema.json @@ -31,10 +31,7 @@ }, { "type": "object", - "required": [ - "id", - "features" - ], + "required": ["id", "features"], "properties": { "id": { "$ref": "#/$defs/id" @@ -89,9 +86,7 @@ "title": "InterconnectNodeLabels", "type": "object", "additionalProperties": false, - "required": [ - "gpio" - ], + "required": ["gpio"], "properties": { "gpio": { "type": "string" }, "i2c": { "type": "string" }, @@ -104,14 +99,7 @@ "title": "Interconnect", "type": "object", "additionalProperties": false, - "required": [ - "file_format", - "id", - "name", - "description", - "url", - "type" - ], + "required": ["file_format", "id", "name", "description", "url", "type"], "properties": { "file_format": { "type": "string", @@ -200,10 +188,7 @@ "type": "array", "items": { "type": "string", - "enum": [ - "usb", - "ble" - ] + "enum": ["usb", "ble"] } }, "features": { @@ -224,14 +209,7 @@ "title": "Shield", "type": "object", "additionalProperties": false, - "required": [ - "file_format", - "id", - "name", - "url", - "type", - "requires" - ], + "required": ["file_format", "id", "name", "url", "type", "requires"], "properties": { "file_format": { "type": "string", From 94061bb91629a83cfe251e63799a9be04a1564d4 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 22 Apr 2023 23:25:56 -0500 Subject: [PATCH 0652/1130] refactor: Replace tabs with spaces Standardized indentation to use spaces with a new pre-commit hook. --- .pre-commit-config.yaml | 5 + app/Kconfig | 380 +++++++++--------- app/boards/arm/bdn9/Kconfig.board | 4 +- app/boards/arm/bdn9/Kconfig.defconfig | 10 +- app/boards/arm/bdn9/bdn9_rev2.dts | 210 +++++----- app/boards/arm/bdn9/bdn9_rev2.keymap | 30 +- app/boards/arm/bluemicro840/Kconfig | 8 +- app/boards/arm/bluemicro840/Kconfig.board | 4 +- app/boards/arm/bluemicro840/Kconfig.defconfig | 10 +- .../bluemicro840/arduino_pro_micro_pins.dtsi | 86 ++-- .../bluemicro840/bluemicro840_v1-pinctrl.dtsi | 58 +-- .../arm/bluemicro840/bluemicro840_v1.dts | 174 ++++---- app/boards/arm/bt60/Kconfig | 8 +- app/boards/arm/bt60/Kconfig.board | 8 +- app/boards/arm/bt60/Kconfig.defconfig | 14 +- app/boards/arm/bt60/bt60.dtsi | 194 ++++----- app/boards/arm/bt60/bt60_v1.dts | 186 ++++----- app/boards/arm/bt60/bt60_v1.keymap | 328 +++++++-------- app/boards/arm/bt60/bt60_v1_hs.dts | 98 ++--- app/boards/arm/bt60/bt60_v1_hs.keymap | 60 +-- app/boards/arm/corneish_zen/Kconfig.board | 8 +- app/boards/arm/corneish_zen/Kconfig.defconfig | 46 +-- app/boards/arm/corneish_zen/corneish_zen.dtsi | 184 ++++----- .../arm/corneish_zen/corneish_zen.keymap | 4 +- .../arm/corneish_zen/corneish_zen_v2_left.dts | 144 +++---- .../corneish_zen/corneish_zen_v2_right.dts | 150 +++---- app/boards/arm/dz60rgb/Kconfig.board | 4 +- app/boards/arm/dz60rgb/Kconfig.defconfig | 4 +- app/boards/arm/dz60rgb/dz60rgb_rev1.dts | 126 +++--- app/boards/arm/dz60rgb/dz60rgb_rev1.keymap | 24 +- app/boards/arm/ferris/Kconfig.board | 4 +- app/boards/arm/ferris/Kconfig.defconfig | 8 +- app/boards/arm/ferris/ferris_rev02.dts | 254 ++++++------ app/boards/arm/mikoto/Kconfig | 10 +- app/boards/arm/mikoto/Kconfig.board | 4 +- app/boards/arm/mikoto/Kconfig.defconfig | 14 +- .../arm/mikoto/arduino_pro_micro_pins.dtsi | 86 ++-- app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi | 58 +-- app/boards/arm/mikoto/mikoto_520.dts | 176 ++++---- app/boards/arm/nice60/Kconfig | 8 +- app/boards/arm/nice60/Kconfig.board | 4 +- app/boards/arm/nice60/Kconfig.defconfig | 10 +- app/boards/arm/nice60/nice60-pinctrl.dtsi | 10 +- app/boards/arm/nice60/nice60.dts | 280 ++++++------- app/boards/arm/nice60/nice60.keymap | 42 +- app/boards/arm/nice_nano/Kconfig | 8 +- app/boards/arm/nice_nano/Kconfig.board | 8 +- app/boards/arm/nice_nano/Kconfig.defconfig | 10 +- .../arm/nice_nano/arduino_pro_micro_pins.dtsi | 86 ++-- .../arm/nice_nano/nice_nano-pinctrl.dtsi | 58 +-- app/boards/arm/nice_nano/nice_nano.dts | 30 +- app/boards/arm/nice_nano/nice_nano.dtsi | 144 +++---- app/boards/arm/nice_nano/nice_nano_v2.dts | 26 +- app/boards/arm/nrf52840_m2/Kconfig | 8 +- app/boards/arm/nrf52840_m2/Kconfig.board | 4 +- app/boards/arm/nrf52840_m2/Kconfig.defconfig | 10 +- app/boards/arm/nrf52840_m2/nrf52840_m2.dts | 162 ++++---- app/boards/arm/nrfmicro/Kconfig | 14 +- app/boards/arm/nrfmicro/Kconfig.board | 16 +- app/boards/arm/nrfmicro/Kconfig.defconfig | 16 +- .../arm/nrfmicro/arduino_pro_micro_pins.dtsi | 86 ++-- .../arduino_pro_micro_pins_52833.dtsi | 86 ++-- .../arduino_pro_micro_pins_flipped.dtsi | 86 ++-- .../nrfmicro/nrfmicro-flipped-pinctrl.dtsi | 58 +-- app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi | 58 +-- app/boards/arm/nrfmicro/nrfmicro_11.dts | 152 +++---- .../arm/nrfmicro/nrfmicro_11_flipped.dts | 152 +++---- app/boards/arm/nrfmicro/nrfmicro_13.dts | 172 ++++---- app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 172 ++++---- app/boards/arm/pillbug/pillbug-pinctrl.dtsi | 88 ++-- app/boards/arm/planck/Kconfig.board | 4 +- app/boards/arm/planck/Kconfig.defconfig | 4 +- app/boards/arm/planck/planck_rev6.dts | 192 ++++----- app/boards/arm/planck/planck_rev6.keymap | 64 +-- app/boards/arm/preonic/Kconfig.board | 4 +- app/boards/arm/proton_c/Kconfig.board | 4 +- app/boards/arm/proton_c/Kconfig.defconfig | 4 +- .../arm/proton_c/arduino_pro_micro_pins.dtsi | 86 ++-- app/boards/arm/proton_c/proton_c.dts | 112 +++--- app/boards/arm/puchi_ble/Kconfig.board | 4 +- app/boards/arm/puchi_ble/Kconfig.defconfig | 12 +- .../arm/puchi_ble/arduino_pro_micro_pins.dtsi | 86 ++-- .../arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi | 58 +-- app/boards/arm/puchi_ble/puchi_ble_v1.dts | 172 ++++---- app/boards/arm/s40nc/Kconfig.board | 4 +- app/boards/arm/s40nc/Kconfig.defconfig | 12 +- app/boards/arm/s40nc/s40nc.dts | 222 +++++----- app/boards/arm/s40nc/s40nc.keymap | 34 +- app/boards/native_posix.overlay | 20 +- app/boards/native_posix_64.overlay | 20 +- app/boards/seeeduino_xiao.overlay | 14 +- app/boards/seeeduino_xiao_ble.overlay | 34 +- app/boards/shields/Kconfig.defconfig | 4 +- app/boards/shields/Kconfig.shield | 2 +- app/boards/shields/a_dux/Kconfig.defconfig | 6 +- app/boards/shields/a_dux/Kconfig.shield | 4 +- app/boards/shields/a_dux/a_dux.dtsi | 76 ++-- app/boards/shields/a_dux/a_dux.keymap | 24 +- app/boards/shields/a_dux/a_dux_right.overlay | 2 +- app/boards/shields/bfo9000/Kconfig.defconfig | 6 +- app/boards/shields/bfo9000/Kconfig.shield | 4 +- app/boards/shields/bfo9000/bfo9000.dtsi | 60 +-- app/boards/shields/bfo9000/bfo9000.keymap | 70 ++-- .../shields/bfo9000/bfo9000_left.overlay | 22 +- .../shields/bfo9000/bfo9000_right.overlay | 24 +- .../shields/boardsource3x4/Kconfig.shield | 2 +- .../shields/chalice/boards/nice_nano.overlay | 64 +-- .../chalice/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/clog/Kconfig.defconfig | 6 +- app/boards/shields/clog/Kconfig.shield | 4 +- app/boards/shields/clog/clog.dtsi | 64 +-- app/boards/shields/clog/clog_right.overlay | 2 +- .../clueboard_california/Kconfig.defconfig | 4 +- .../clueboard_california/Kconfig.shield | 2 +- .../clueboard_california.keymap | 26 +- .../clueboard_california.overlay | 40 +- app/boards/shields/contra/Kconfig.shield | 2 +- app/boards/shields/corne/Kconfig.defconfig | 20 +- app/boards/shields/corne/Kconfig.shield | 4 +- .../shields/corne/boards/nice_nano.overlay | 64 +-- .../shields/corne/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/corne/corne.dtsi | 94 ++--- app/boards/shields/corne/corne.keymap | 4 +- app/boards/shields/corne/corne_left.overlay | 16 +- app/boards/shields/corne/corne_right.overlay | 20 +- app/boards/shields/cradio/Kconfig.defconfig | 6 +- app/boards/shields/cradio/Kconfig.shield | 4 +- app/boards/shields/cradio/README.md | 38 +- app/boards/shields/cradio/cradio.dtsi | 76 ++-- .../shields/cradio/cradio_right.overlay | 2 +- app/boards/shields/crbn/Kconfig.defconfig | 2 +- app/boards/shields/crbn/Kconfig.shield | 2 +- app/boards/shields/crbn/crbn.keymap | 100 ++--- app/boards/shields/crbn/crbn.overlay | 80 ++-- .../shields/elephant42/Kconfig.defconfig | 16 +- .../elephant42/boards/nice_nano.overlay | 64 +-- .../elephant42/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/elephant42/elephant42.dtsi | 34 +- app/boards/shields/ergodash/Kconfig.defconfig | 6 +- app/boards/shields/ergodash/Kconfig.shield | 4 +- app/boards/shields/ergodash/ergodash.dtsi | 70 ++-- .../shields/ergodash/ergodash_right.overlay | 2 +- .../shields/eternal_keypad/Kconfig.defconfig | 2 +- .../shields/eternal_keypad/Kconfig.shield | 4 +- .../eternal_keypad/boards/nice_nano.overlay | 64 +-- .../boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/fourier/Kconfig.defconfig | 6 +- app/boards/shields/fourier/Kconfig.shield | 4 +- app/boards/shields/fourier/fourier.dtsi | 52 +-- .../shields/helix/boards/nice_nano.overlay | 64 +-- .../shields/helix/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/helix/helix_right.overlay | 2 +- .../shields/hummingbird/hummingbird.overlay | 4 +- app/boards/shields/iris/Kconfig.defconfig | 6 +- app/boards/shields/iris/Kconfig.shield | 4 +- app/boards/shields/iris/iris.dtsi | 48 +-- app/boards/shields/iris/iris.keymap | 38 +- app/boards/shields/iris/iris_left.overlay | 16 +- app/boards/shields/iris/iris_right.overlay | 18 +- app/boards/shields/jian/Kconfig.defconfig | 6 +- app/boards/shields/jian/Kconfig.shield | 4 +- app/boards/shields/jian/jian.dtsi | 76 ++-- app/boards/shields/jian/jian_left.overlay | 16 +- app/boards/shields/jian/jian_right.overlay | 22 +- app/boards/shields/jiran/Kconfig.defconfig | 6 +- app/boards/shields/jiran/Kconfig.shield | 4 +- app/boards/shields/jiran/jiran.dtsi | 74 ++-- app/boards/shields/jiran/jiran_left.overlay | 16 +- app/boards/shields/jiran/jiran_right.overlay | 22 +- app/boards/shields/jorne/Kconfig.defconfig | 20 +- app/boards/shields/jorne/Kconfig.shield | 4 +- .../shields/jorne/boards/nice_nano.overlay | 64 +-- .../shields/jorne/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/jorne/jorne.dtsi | 108 ++--- app/boards/shields/jorne/jorne_left.overlay | 16 +- app/boards/shields/jorne/jorne_right.overlay | 22 +- app/boards/shields/kyria/Kconfig.defconfig | 20 +- app/boards/shields/kyria/Kconfig.shield | 24 +- .../shields/kyria/boards/nice_nano.overlay | 64 +-- .../shields/kyria/boards/nice_nano_v2.overlay | 64 +-- .../shields/kyria/boards/nrfmicro_11.overlay | 64 +-- .../kyria/boards/nrfmicro_11_flipped.overlay | 64 +-- .../shields/kyria/boards/nrfmicro_13.overlay | 64 +-- app/boards/shields/kyria/kyria.dtsi | 54 +-- app/boards/shields/kyria/kyria.keymap | 24 +- app/boards/shields/kyria/kyria_common.dtsi | 94 ++--- app/boards/shields/kyria/kyria_left.overlay | 22 +- app/boards/shields/kyria/kyria_rev2.dtsi | 42 +- app/boards/shields/kyria/kyria_rev2.keymap | 24 +- .../shields/kyria/kyria_rev2_left.overlay | 34 +- .../shields/kyria/kyria_rev2_right.overlay | 38 +- app/boards/shields/kyria/kyria_rev3.dtsi | 48 +-- app/boards/shields/kyria/kyria_rev3.keymap | 40 +- .../shields/kyria/kyria_rev3_left.overlay | 32 +- .../shields/kyria/kyria_rev3_right.overlay | 34 +- app/boards/shields/kyria/kyria_right.overlay | 26 +- app/boards/shields/leeloo/Kconfig.defconfig | 20 +- app/boards/shields/leeloo/Kconfig.shield | 4 +- app/boards/shields/leeloo/leeloo.dtsi | 32 +- app/boards/shields/leeloo/leeloo_left.overlay | 18 +- .../shields/leeloo/leeloo_right.overlay | 20 +- app/boards/shields/lily58/Kconfig.defconfig | 20 +- app/boards/shields/lily58/Kconfig.shield | 4 +- .../shields/lily58/boards/nice_nano.overlay | 64 +-- .../lily58/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/lily58/lily58.dtsi | 102 ++--- app/boards/shields/lily58/lily58.keymap | 36 +- app/boards/shields/lily58/lily58_left.overlay | 18 +- .../shields/lily58/lily58_right.overlay | 18 +- app/boards/shields/lotus58/Kconfig.defconfig | 20 +- app/boards/shields/lotus58/Kconfig.shield | 4 +- .../shields/lotus58/lotus58_left.overlay | 18 +- .../shields/lotus58/lotus58_right.overlay | 20 +- app/boards/shields/m60/Kconfig.defconfig | 2 +- app/boards/shields/m60/Kconfig.shield | 2 +- app/boards/shields/m60/m60.keymap | 32 +- app/boards/shields/m60/m60.overlay | 68 ++-- app/boards/shields/microdox/Kconfig.defconfig | 20 +- app/boards/shields/microdox/Kconfig.shield | 4 +- .../shields/microdox/boards/nice_nano.overlay | 64 +-- .../microdox/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/microdox/microdox.dtsi | 76 ++-- .../shields/microdox/microdox_left.overlay | 14 +- .../shields/microdox/microdox_right.overlay | 20 +- app/boards/shields/murphpad/Kconfig.defconfig | 16 +- app/boards/shields/murphpad/Kconfig.shield | 2 +- .../shields/murphpad/boards/nice_nano.overlay | 64 +-- .../murphpad/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/murphpad/murphpad.overlay | 110 ++--- app/boards/shields/nibble/Kconfig.defconfig | 18 +- app/boards/shields/nibble/Kconfig.shield | 2 +- .../shields/nibble/boards/nice_nano.overlay | 64 +-- .../nibble/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/nibble/nibble.keymap | 38 +- app/boards/shields/nibble/nibble.overlay | 106 ++--- .../shields/nice_view/Kconfig.defconfig | 12 +- app/boards/shields/nice_view/Kconfig.shield | 2 +- .../shields/nice_view/nice_view.overlay | 24 +- .../shields/nice_view_adapter/Kconfig.shield | 2 +- .../boards/bluemicro840_v1.overlay | 42 +- .../boards/mikoto_520.overlay | 42 +- .../boards/nice_nano.overlay | 42 +- .../boards/nice_nano_v2.overlay | 42 +- .../boards/nrfmicro_11.overlay | 42 +- .../boards/nrfmicro_11_flipped.overlay | 42 +- .../boards/nrfmicro_13.overlay | 42 +- .../boards/puchi_ble_v1.overlay | 42 +- app/boards/shields/pancake/Kconfig.shield | 2 +- .../shields/quefrency/Kconfig.defconfig | 6 +- app/boards/shields/quefrency/Kconfig.shield | 4 +- app/boards/shields/quefrency/quefrency.dtsi | 30 +- app/boards/shields/redox/Kconfig.defconfig | 6 +- app/boards/shields/redox/Kconfig.shield | 4 +- .../shields/redox/boards/nice_nano.overlay | 64 +-- .../shields/redox/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/redox/redox.dtsi | 46 +-- app/boards/shields/redox/redox_left.overlay | 18 +- app/boards/shields/redox/redox_right.overlay | 20 +- .../reviung41/boards/nice_nano.overlay | 64 +-- .../reviung41/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/romac/Kconfig.defconfig | 2 +- app/boards/shields/romac/Kconfig.shield | 2 +- app/boards/shields/romac/romac.overlay | 38 +- .../shields/romac_plus/Kconfig.defconfig | 2 +- app/boards/shields/romac_plus/Kconfig.shield | 2 +- .../romac_plus/boards/nice_nano.overlay | 64 +-- .../romac_plus/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/romac_plus/romac_plus.dtsi | 80 ++-- .../shields/romac_plus/romac_plus.overlay | 26 +- .../shields/settings_reset/Kconfig.defconfig | 2 +- .../shields/settings_reset/Kconfig.shield | 2 +- .../settings_reset/settings_reset.overlay | 20 +- app/boards/shields/snap/Kconfig.defconfig | 20 +- app/boards/shields/snap/Kconfig.shield | 4 +- .../shields/snap/boards/nice_nano.overlay | 64 +-- .../shields/snap/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/snap/snap.dtsi | 106 ++--- app/boards/shields/snap/snap.keymap | 38 +- app/boards/shields/snap/snap_left.overlay | 36 +- app/boards/shields/snap/snap_right.overlay | 56 +-- app/boards/shields/sofle/Kconfig.defconfig | 20 +- app/boards/shields/sofle/Kconfig.shield | 4 +- app/boards/shields/sofle/sofle_left.overlay | 18 +- app/boards/shields/sofle/sofle_right.overlay | 20 +- .../splitkb_aurora_corne/Kconfig.defconfig | 24 +- .../splitkb_aurora_corne/Kconfig.shield | 4 +- .../boards/nice_nano.overlay | 64 +-- .../boards/nice_nano_v2.overlay | 64 +-- .../splitkb_aurora_corne.dtsi | 108 ++--- .../splitkb_aurora_corne.keymap | 4 +- .../splitkb_aurora_corne_left.overlay | 54 +-- .../splitkb_aurora_corne_right.overlay | 58 +-- .../splitkb_aurora_lily58/Kconfig.defconfig | 24 +- .../splitkb_aurora_lily58/Kconfig.shield | 4 +- .../boards/nice_nano.overlay | 72 ++-- .../boards/nice_nano_v2.overlay | 72 ++-- .../splitkb_aurora_lily58.dtsi | 94 ++--- .../splitkb_aurora_lily58.keymap | 36 +- .../splitkb_aurora_lily58_left.overlay | 56 +-- .../splitkb_aurora_lily58_right.overlay | 58 +-- .../splitkb_aurora_sweep/Kconfig.defconfig | 24 +- .../splitkb_aurora_sweep/Kconfig.shield | 4 +- .../boards/nice_nano.overlay | 64 +-- .../boards/nice_nano_v2.overlay | 64 +-- .../splitkb_aurora_sweep.dtsi | 118 +++--- .../splitkb_aurora_sweep.keymap | 74 ++-- .../splitkb_aurora_sweep_left.overlay | 62 +-- .../splitkb_aurora_sweep_right.overlay | 64 +-- .../shields/splitreus62/Kconfig.defconfig | 6 +- app/boards/shields/splitreus62/Kconfig.shield | 4 +- .../shields/splitreus62/splitreus62.dtsi | 56 +-- .../shields/splitreus62/splitreus62.keymap | 14 +- .../splitreus62/splitreus62_left.overlay | 16 +- .../splitreus62/splitreus62_right.overlay | 18 +- app/boards/shields/tg4x/Kconfig.shield | 2 +- .../shields/tg4x/boards/nice_nano.overlay | 64 +-- .../shields/tg4x/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/tg4x/tg4x.keymap | 50 +-- app/boards/shields/tg4x/tg4x.overlay | 80 ++-- app/boards/shields/tidbit/Kconfig.defconfig | 16 +- app/boards/shields/tidbit/Kconfig.shield | 2 +- .../shields/tidbit/boards/nice_nano.overlay | 64 +-- .../tidbit/boards/nice_nano_v2.overlay | 64 +-- app/boards/shields/tidbit/tidbit.dtsi | 208 +++++----- app/boards/shields/tidbit/tidbit.keymap | 66 +-- app/boards/shields/tidbit/tidbit_19key.keymap | 66 +-- .../shields/two_percent_milk/Kconfig.shield | 2 +- .../two_percent_milk/boards/nice_nano.overlay | 64 +-- .../boards/nice_nano_v2.overlay | 64 +-- .../boards/nrfmicro_11.overlay | 64 +-- .../boards/nrfmicro_11_flipped.overlay | 64 +-- .../boards/nrfmicro_13.overlay | 64 +-- .../two_percent_milk/two_percent_milk.overlay | 22 +- .../shields/waterfowl/Kconfig.defconfig | 20 +- app/boards/shields/waterfowl/Kconfig.shield | 4 +- app/boards/shields/waterfowl/waterfowl.dtsi | 126 +++--- app/boards/shields/waterfowl/waterfowl.keymap | 78 ++-- .../shields/waterfowl/waterfowl_left.overlay | 16 +- .../shields/waterfowl/waterfowl_right.overlay | 18 +- app/boards/shields/zmk_uno/Kconfig.shield | 2 +- app/boards/shields/zmk_uno/zmk_uno.overlay | 314 +++++++-------- app/boards/shields/zodiark/Kconfig.defconfig | 20 +- app/boards/shields/zodiark/Kconfig.shield | 4 +- .../shields/zodiark/zodiark_left.overlay | 20 +- .../shields/zodiark/zodiark_right.overlay | 22 +- app/boards/usb_console.dtsi | 14 +- app/cmake/ZephyrBuildConfig.cmake | 262 ++++++------ app/drivers/display/CMakeLists.txt | 2 +- app/drivers/display/Kconfig.il0323 | 10 +- app/drivers/gpio/Kconfig.595 | 22 +- app/drivers/gpio/Kconfig.max7318 | 22 +- app/drivers/kscan/Kconfig | 102 ++--- app/drivers/sensor/battery/Kconfig | 30 +- app/drivers/sensor/ec11/Kconfig | 52 +-- app/dts/behaviors/backlight.dtsi | 14 +- app/dts/behaviors/bluetooth.dtsi | 14 +- app/dts/behaviors/caps_word.dtsi | 16 +- app/dts/behaviors/ext_power.dtsi | 14 +- app/dts/behaviors/gresc.dtsi | 16 +- app/dts/behaviors/key_press.dtsi | 16 +- app/dts/behaviors/key_repeat.dtsi | 16 +- app/dts/behaviors/key_toggle.dtsi | 14 +- app/dts/behaviors/layer_tap.dtsi | 20 +- app/dts/behaviors/macros.dtsi | 76 ++-- app/dts/behaviors/mod_tap.dtsi | 20 +- app/dts/behaviors/momentary_layer.dtsi | 14 +- app/dts/behaviors/none.dtsi | 14 +- app/dts/behaviors/reset.dtsi | 26 +- app/dts/behaviors/rgb_underglow.dtsi | 14 +- .../behaviors/sensor_rotate_key_press.dtsi | 18 +- app/dts/behaviors/sticky_key.dtsi | 36 +- app/dts/behaviors/to_layer.dtsi | 14 +- app/dts/behaviors/toggle_layer.dtsi | 14 +- app/dts/behaviors/transparent.dtsi | 14 +- app/dts/common/arduino_uno_pro_micro_map.dtsi | 68 ++-- app/include/linker/zmk-events.ld | 12 +- app/run-test.sh | 32 +- app/src/split/Kconfig | 14 +- app/src/split/bluetooth/Kconfig | 50 +-- .../backlight/basic/native_posix_64.keymap | 52 +-- app/tests/backlight/behavior_keymap.dtsi | 48 +-- .../config-brt/native_posix_64.keymap | 16 +- .../config-on/native_posix_64.keymap | 16 +- .../config-step/native_posix_64.keymap | 64 +-- .../backlight/cycle/native_posix_64.keymap | 130 +++--- .../low-brightness/native_posix_64.keymap | 70 ++-- app/tests/caps-word/behavior_keymap.dtsi | 20 +- .../native_posix_64.keymap | 44 +- .../native_posix_64.keymap | 22 +- .../native_posix_64.keymap | 22 +- .../native_posix_64.keymap | 20 +- .../native_posix.keymap | 20 +- .../native_posix_64.keymap | 20 +- .../native_posix_64.keymap | 54 +-- .../native_posix_64.keymap | 54 +-- .../native_posix_64.keymap | 56 +-- .../native_posix_64.keymap | 52 +-- .../native_posix_64.keymap | 54 +-- .../layer-filter-0/native_posix_64.keymap | 122 +++--- .../layer-filter-1/native_posix_64.keymap | 52 +-- .../multiple-timeouts/native_posix_64.keymap | 58 +-- .../native_posix_64.keymap | 198 ++++----- .../native_posix_64.keymap | 88 ++-- .../native_posix_64.keymap | 66 +-- .../native_posix_64.keymap | 66 +-- .../native_posix_64.keymap | 128 +++--- .../native_posix_64.keymap | 56 +-- .../native_posix_64.keymap | 48 +-- .../native_posix_64.keymap | 52 +-- .../press-release/native_posix_64.keymap | 74 ++-- .../press-timeout/native_posix_64.keymap | 48 +-- .../native_posix_64.keymap | 66 +-- .../native_posix_64.keymap | 66 +-- .../native_posix_64.keymap | 66 +-- .../native_posix_64.keymap | 54 +-- .../native_posix_64.keymap | 54 +-- .../native_posix_64.keymap | 70 ++-- .../native_posix_64.keymap | 48 +-- .../balanced/1-dn-up/native_posix_64.keymap | 8 +- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../5-quick-tap/native_posix_64.keymap | 12 +- .../6-retro-tap/native_posix_64.keymap | 66 +-- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../7-positional/behavior_keymap.dtsi | 40 +- .../native_posix_64.keymap | 16 +- .../on-release-trigger/native_posix_64.keymap | 16 +- .../native_posix_64.keymap | 18 +- .../1-basic/native_posix_64.keymap | 36 +- .../2-double-hold/native_posix_64.keymap | 24 +- .../8-global-quick-tap/behavior_keymap.dtsi | 42 +- .../hold-tap/balanced/behavior_keymap.dtsi | 40 +- .../many-nested/native_posix_64.keymap | 60 +-- .../1-dn-up/native_posix_64.keymap | 8 +- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../5-quick-tap/native_posix_64.keymap | 12 +- .../6-retro-tap/native_posix_64.keymap | 66 +-- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../7-positional/behavior_keymap.dtsi | 40 +- .../native_posix_64.keymap | 16 +- .../on-release-trigger/native_posix_64.keymap | 16 +- .../native_posix_64.keymap | 18 +- .../1-basic/native_posix_64.keymap | 36 +- .../2-double-hold/native_posix_64.keymap | 24 +- .../8-global-quick-tap/behavior_keymap.dtsi | 42 +- .../hold-preferred/behavior_keymap.dtsi | 40 +- .../1-dn-up/native_posix_64.keymap | 8 +- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../5-quick-tap/native_posix_64.keymap | 12 +- .../6-nested-timeouts/native_posix_64.keymap | 70 ++-- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../7-positional/behavior_keymap.dtsi | 40 +- .../native_posix_64.keymap | 16 +- .../on-release-trigger/native_posix_64.keymap | 16 +- .../native_posix_64.keymap | 18 +- .../1-basic/native_posix_64.keymap | 36 +- .../2-double-hold/native_posix_64.keymap | 24 +- .../8-global-quick-tap/behavior_keymap.dtsi | 42 +- .../tap-preferred/behavior_keymap.dtsi | 40 +- .../1-dn-up/native_posix_64.keymap | 8 +- .../2-dn-timer-up/native_posix_64.keymap | 8 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../3c-kcdn-dn-kcup-up/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../4c-dn-kcdn-kcup-up/native_posix_64.keymap | 14 +- .../native_posix_64.keymap | 14 +- .../5-quick-tap/native_posix_64.keymap | 12 +- .../1-basic/native_posix_64.keymap | 36 +- .../2-double-hold/native_posix_64.keymap | 24 +- .../6-global-quick-tap/behavior_keymap.dtsi | 42 +- .../behavior_keymap.dtsi | 40 +- app/tests/key-repeat/behavior_keymap.dtsi | 20 +- .../native_posix_64.keymap | 16 +- .../native_posix.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 16 +- .../native_posix_64.keymap | 8 +- app/tests/keypress/behavior_keymap.dtsi | 20 +- .../kp-press-release/native_posix_64.keymap | 8 +- app/tests/keytoggle/behavior_keymap.dtsi | 20 +- .../kt-alt-tab/native_posix_64.keymap | 60 +-- .../kt-modded-alpha/native_posix_64.keymap | 44 +- .../native_posix_64.keymap | 12 +- .../kt-press-release/native_posix_64.keymap | 12 +- app/tests/macros/basic/native_posix_64.keymap | 2 +- app/tests/macros/behavior_keymap.dtsi | 96 ++--- .../native_posix_64.keymap | 58 +-- .../native_posix_64.keymap | 62 +-- .../press-mid-macro/native_posix_64.keymap | 2 +- .../press-release/native_posix_64.keymap | 2 +- .../timing-override/native_posix_64.keymap | 2 +- .../wait-macro-release/native_posix_64.keymap | 2 +- .../1-no-morph/native_posix_64.keymap | 8 +- .../2a-masked-morph/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 16 +- .../native_posix_64.keymap | 42 +- .../native_posix_64.keymap | 46 +-- .../3-unmasked-morph/native_posix_64.keymap | 32 +- app/tests/mod-morph/behavior_keymap.dtsi | 20 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 32 +- .../kp-lctl-dn-lctl-up/native_posix_64.keymap | 28 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 32 +- .../native_posix_64.keymap | 32 +- .../1-normal/native_posix_64.keymap | 40 +- .../native_posix_64.keymap | 40 +- .../3-covered/native_posix_64.keymap | 36 +- .../4-nested/native_posix_64.keymap | 54 +-- .../native_posix_64.keymap | 54 +-- .../momentary-layer/behavior_keymap.dtsi | 28 +- app/tests/none/behavior_keymap.dtsi | 28 +- app/tests/none/layered/native_posix_64.keymap | 2 +- app/tests/none/normal/native_posix.keymap | 2 +- app/tests/none/normal/native_posix_64.keymap | 2 +- .../1-os-dn-up/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 54 +-- .../10-callum-mods/native_posix_64.keymap | 64 +-- .../10-sl-sl-kp/native_posix_64.keymap | 92 ++--- .../native_posix_64.keymap | 30 +- .../native_posix_64.keymap | 22 +- .../native_posix_64.keymap | 70 ++-- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 16 +- .../native_posix_64.keymap | 82 ++-- .../native_posix_64.keymap | 70 ++-- .../9-sk-dn-up-dn-up/native_posix_64.keymap | 34 +- app/tests/sticky-keys/behavior_keymap.dtsi | 28 +- .../tap-dance/1a-tap1/native_posix_64.keymap | 8 +- .../tap-dance/1b-tap2/native_posix_64.keymap | 10 +- .../tap-dance/1c-tap3/native_posix_64.keymap | 12 +- .../tap-dance/2a-hold1/native_posix_64.keymap | 8 +- .../tap-dance/2b-hold2/native_posix_64.keymap | 10 +- .../tap-dance/2c-hold3/native_posix_64.keymap | 12 +- .../3a-tap-int-mid/native_posix_64.keymap | 6 +- .../3b-tap-int-seq/native_posix_64.keymap | 6 +- .../3c-tap-int-after/native_posix_64.keymap | 6 +- .../3d-hold-int-mid/native_posix_64.keymap | 6 +- .../3e-hold-int-seq/native_posix_64.keymap | 6 +- .../3f-hold-int-after/native_posix_64.keymap | 6 +- .../4a-single/native_posix_64.keymap | 8 +- .../5a-tdint-mid/native_posix_64.keymap | 6 +- .../5b-tdint-seq/native_posix_64.keymap | 6 +- .../5c-tdint-after/native_posix_64.keymap | 6 +- .../5d-tdint-multiple/native_posix_64.keymap | 6 +- .../6-combo-tap2/native_posix_64.keymap | 20 +- app/tests/to-layer/behavior_keymap.dtsi | 28 +- .../to-layer/normal/native_posix_64.keymap | 30 +- app/tests/toggle-layer/behavior_keymap.dtsi | 38 +- .../early-key-release/native_posix_64.keymap | 4 +- .../normal/native_posix_64.keymap | 2 +- app/tests/transparent/behavior_keymap.dtsi | 28 +- .../layered/native_posix_64.keymap | 2 +- .../transparent/normal/native_posix_64.keymap | 2 +- .../1-single_keypress/native_posix_64.keymap | 12 +- .../native_posix_64.keymap | 22 +- app/tests/wpm/behavior_keymap.dtsi | 20 +- docs/blog/2020-10-03-bootloader-fix.md | 26 +- docs/docs/behaviors/hold-tap.md | 218 +++++----- docs/docs/behaviors/layers.md | 20 +- docs/docs/behaviors/tap-dance.md | 44 +- docs/docs/config/index.md | 24 +- docs/docs/development/new-behavior.md | 16 +- docs/docs/development/new-shield.md | 172 ++++---- docs/docs/features/backlight.md | 26 +- docs/docs/features/combos.md | 16 +- docs/docs/features/keymaps.md | 4 +- docs/docs/features/underglow.md | 30 +- docs/docs/keymap-example-file.md | 16 +- docs/docs/keymap-example.md | 16 +- 613 files changed, 11915 insertions(+), 11910 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7687fc6ee26..1375a6ae709 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,10 @@ fail_fast: false repos: + - repo: https://github.com/Lucas-C/pre-commit-hooks + rev: v1.5.1 + hooks: + - id: remove-tabs + exclude: "vendor-prefixes\\.txt$" - repo: https://github.com/pocc/pre-commit-hooks rev: v1.3.5 hooks: diff --git a/app/Kconfig b/app/Kconfig index ccc5f42d7f3..25a99b551b3 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -8,167 +8,167 @@ menu "ZMK" menu "Basic Keyboard Setup" config ZMK_KEYBOARD_NAME - string "Keyboard Name" + string "Keyboard Name" config USB_DEVICE_PRODUCT - default ZMK_KEYBOARD_NAME + default ZMK_KEYBOARD_NAME config BT_DEVICE_NAME - default ZMK_KEYBOARD_NAME + default ZMK_KEYBOARD_NAME config USB_DEVICE_VID - default 0x1D50 + default 0x1D50 config USB_DEVICE_PID - default 0x615E + default 0x615E config USB_DEVICE_MANUFACTURER - default "ZMK Project" + default "ZMK Project" config BT_DIS_PNP_VID - default 0x1D50 + default 0x1D50 config BT_DIS_PNP_PID - default 0x615E + default 0x615E config BT_DIS_MODEL - default ZMK_KEYBOARD_NAME + default ZMK_KEYBOARD_NAME config BT_DIS_MANUF - default "ZMK Project" + default "ZMK Project" menu "HID" choice ZMK_HID_REPORT_TYPE - prompt "HID Report Type" + prompt "HID Report Type" config ZMK_HID_REPORT_TYPE_HKRO - bool "#-Key Roll Over (HKRO) HID Report" - help - Enable # key roll over for HID report. This selection is "boot keyboard" compatible - but limits the total number of possible keys to report as held to #. + bool "#-Key Roll Over (HKRO) HID Report" + help + Enable # key roll over for HID report. This selection is "boot keyboard" compatible + but limits the total number of possible keys to report as held to #. config ZMK_HID_REPORT_TYPE_NKRO - bool "Full N-Key Roll Over (NKRO) HID Report" - help - Enable full N-Key Roll Over for HID output. This selection will prevent the keyboard - from working with some BIOS/UEFI versions that only support "boot keyboard" support. - This option also prevents using some infrequently used higher range HID usages. + bool "Full N-Key Roll Over (NKRO) HID Report" + help + Enable full N-Key Roll Over for HID output. This selection will prevent the keyboard + from working with some BIOS/UEFI versions that only support "boot keyboard" support. + This option also prevents using some infrequently used higher range HID usages. endchoice if ZMK_HID_REPORT_TYPE_HKRO config ZMK_HID_KEYBOARD_REPORT_SIZE - int "# Keyboard Keys Reportable" - default 6 + int "# Keyboard Keys Reportable" + default 6 endif config ZMK_HID_CONSUMER_REPORT_SIZE - int "# Consumer Keys Reportable" - default 6 + int "# Consumer Keys Reportable" + default 6 choice ZMK_HID_CONSUMER_REPORT_USAGES - prompt "HID Report Type" + prompt "HID Report Type" config ZMK_HID_CONSUMER_REPORT_USAGES_FULL - bool "Full Consumer HID Usage Support" - help - Enable full Consumer usage ID values to be sent to hosts. Allows for less - frequently used usages, but has compatibability issues with some host OSes. + bool "Full Consumer HID Usage Support" + help + Enable full Consumer usage ID values to be sent to hosts. Allows for less + frequently used usages, but has compatibability issues with some host OSes. config ZMK_HID_CONSUMER_REPORT_USAGES_BASIC - bool "Basic Consumer HID Usage Support" - help - Enable Consumer usage ID values up to "Playback Speed - Slow" to be sent to - hosts. Allows for broader compatibability with more host OSes. + bool "Basic Consumer HID Usage Support" + help + Enable Consumer usage ID values up to "Playback Speed - Slow" to be sent to + hosts. Allows for broader compatibability with more host OSes. endchoice menu "Output Types" config ZMK_USB - bool "USB" - select USB - select USB_DEVICE_STACK - select USB_DEVICE_HID + bool "USB" + select USB + select USB_DEVICE_STACK + select USB_DEVICE_HID if ZMK_USB config USB_NUMOF_EP_WRITE_RETRIES - default 10 + default 10 config USB_HID_POLL_INTERVAL_MS - default 1 + default 1 #ZMK_USB endif menuconfig ZMK_BLE - bool "BLE (HID over GATT)" - select BT - select BT_SMP - select BT_SMP_SC_PAIR_ONLY - select BT_SMP_APP_PAIRING_ACCEPT - select BT_PERIPHERAL - select BT_DIS - select BT_BAS - select BT_SETTINGS - select SETTINGS + bool "BLE (HID over GATT)" + select BT + select BT_SMP + select BT_SMP_SC_PAIR_ONLY + select BT_SMP_APP_PAIRING_ACCEPT + select BT_PERIPHERAL + select BT_DIS + select BT_BAS + select BT_SETTINGS + select SETTINGS if ZMK_BLE config SYSTEM_WORKQUEUE_STACK_SIZE - default 4096 if SOC_RP2040 - default 2048 + default 4096 if SOC_RP2040 + default 2048 config ZMK_BLE_THREAD_STACK_SIZE - int "BLE notify thread stack size" - default 512 + int "BLE notify thread stack size" + default 512 config ZMK_BLE_THREAD_PRIORITY - int "BLE notify thread priority" - default 5 + int "BLE notify thread priority" + default 5 config ZMK_BLE_KEYBOARD_REPORT_QUEUE_SIZE - int "Max number of keyboard HID reports to queue for sending over BLE" - default 20 + int "Max number of keyboard HID reports to queue for sending over BLE" + default 20 config ZMK_BLE_CONSUMER_REPORT_QUEUE_SIZE - int "Max number of consumer HID reports to queue for sending over BLE" - default 5 + int "Max number of consumer HID reports to queue for sending over BLE" + default 5 config ZMK_BLE_CLEAR_BONDS_ON_START - bool "Configuration that clears all bond information from the keyboard on startup." - default n + bool "Configuration that clears all bond information from the keyboard on startup." + default n # HID GATT notifications sent this way are *not* picked up by Linux, and possibly others. config BT_GATT_NOTIFY_MULTIPLE - default n + default n config BT_GATT_AUTO_SEC_REQ - default n + default n config BT_DEVICE_APPEARANCE - default 961 + default 961 config ZMK_BLE_PASSKEY_ENTRY - bool "Experimental: Requiring typing passkey from host to pair BLE connection" - default n + bool "Experimental: Requiring typing passkey from host to pair BLE connection" + default n config BT_PERIPHERAL_PREF_MIN_INT - default 6 + default 6 config BT_PERIPHERAL_PREF_MAX_INT - default 12 + default 12 config BT_PERIPHERAL_PREF_LATENCY - default 30 + default 30 config BT_PERIPHERAL_PREF_TIMEOUT - default 400 + default 400 #ZMK_BLE endif @@ -189,108 +189,108 @@ menu "Display/LED Options" rsource "src/display/Kconfig" menuconfig ZMK_RGB_UNDERGLOW - bool "RGB Adressable LED Underglow" - select LED_STRIP + bool "RGB Adressable LED Underglow" + select LED_STRIP if ZMK_RGB_UNDERGLOW # This default value cuts down on tons of excess .conf files, if you're using GPIO, manually disable this config SPI - default y + default y config ZMK_RGB_UNDERGLOW_EXT_POWER - bool "RGB underglow toggling also controls external power" - default y + bool "RGB underglow toggling also controls external power" + default y config ZMK_RGB_UNDERGLOW_BRT_MIN - int "RGB underglow minimum brightness in percent" - range 0 100 - default 0 + int "RGB underglow minimum brightness in percent" + range 0 100 + default 0 config ZMK_RGB_UNDERGLOW_BRT_MAX - int "RGB underglow maximum brightness in percent" - range ZMK_RGB_UNDERGLOW_BRT_MIN 100 - default 100 + int "RGB underglow maximum brightness in percent" + range ZMK_RGB_UNDERGLOW_BRT_MIN 100 + default 100 config ZMK_RGB_UNDERGLOW_HUE_STEP - int "RGB underglow hue step in degrees" - range 0 359 - default 10 + int "RGB underglow hue step in degrees" + range 0 359 + default 10 config ZMK_RGB_UNDERGLOW_SAT_STEP - int "RGB underglow saturation step in percent" - range 0 100 - default 10 + int "RGB underglow saturation step in percent" + range 0 100 + default 10 config ZMK_RGB_UNDERGLOW_BRT_STEP - int "RGB underglow brightness step in percent" - range 0 100 - default 10 + int "RGB underglow brightness step in percent" + range 0 100 + default 10 config ZMK_RGB_UNDERGLOW_HUE_START - int "RGB underglow start hue value in degrees" - range 0 359 - default 0 + int "RGB underglow start hue value in degrees" + range 0 359 + default 0 config ZMK_RGB_UNDERGLOW_SAT_START - int "RGB underglow start saturations value in percent" - range 0 100 - default 100 + int "RGB underglow start saturations value in percent" + range 0 100 + default 100 config ZMK_RGB_UNDERGLOW_BRT_START - int "RGB underglow start brightness value in percent" - range ZMK_RGB_UNDERGLOW_BRT_MIN ZMK_RGB_UNDERGLOW_BRT_MAX - default ZMK_RGB_UNDERGLOW_BRT_MAX + int "RGB underglow start brightness value in percent" + range ZMK_RGB_UNDERGLOW_BRT_MIN ZMK_RGB_UNDERGLOW_BRT_MAX + default ZMK_RGB_UNDERGLOW_BRT_MAX config ZMK_RGB_UNDERGLOW_SPD_START - int "RGB underglow start animation speed value" - range 1 5 - default 3 + int "RGB underglow start animation speed value" + range 1 5 + default 3 config ZMK_RGB_UNDERGLOW_EFF_START - int "RGB underglow start effect int value related to the effect enum list" - range 0 3 - default 0 + int "RGB underglow start effect int value related to the effect enum list" + range 0 3 + default 0 config ZMK_RGB_UNDERGLOW_ON_START - bool "RGB underglow starts on by default" - default y + bool "RGB underglow starts on by default" + default y config ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE - bool "Turn off RGB underglow when keyboard goes into idle state" + bool "Turn off RGB underglow when keyboard goes into idle state" config ZMK_RGB_UNDERGLOW_AUTO_OFF_USB - bool "Turn off RGB underglow when USB is disconnected" - depends on USB_DEVICE_STACK + bool "Turn off RGB underglow when USB is disconnected" + depends on USB_DEVICE_STACK #ZMK_RGB_UNDERGLOW endif menuconfig ZMK_BACKLIGHT - bool "LED backlight" - select LED + bool "LED backlight" + select LED if ZMK_BACKLIGHT config ZMK_BACKLIGHT_BRT_STEP - int "Brightness step in percent" - range 1 100 - default 20 + int "Brightness step in percent" + range 1 100 + default 20 config ZMK_BACKLIGHT_BRT_START - int "Default brightness in percent" - range 1 100 - default 40 + int "Default brightness in percent" + range 1 100 + default 40 config ZMK_BACKLIGHT_ON_START - bool "Default backlight state" - default y + bool "Default backlight state" + default y config ZMK_BACKLIGHT_AUTO_OFF_IDLE - bool "Turn off backlight when keyboard goes into idle state" + bool "Turn off backlight when keyboard goes into idle state" config ZMK_BACKLIGHT_AUTO_OFF_USB - bool "Turn off backlight when USB is disconnected" + bool "Turn off backlight when USB is disconnected" #ZMK_BACKLIGHT endif @@ -301,28 +301,28 @@ endmenu menu "Power Management" config ZMK_IDLE_TIMEOUT - int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" - default 30000 + int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" + default 30000 config ZMK_SLEEP - bool "Enable deep sleep support" - imply USB + bool "Enable deep sleep support" + imply USB if ZMK_SLEEP config PM_DEVICE - default y + default y config ZMK_IDLE_SLEEP_TIMEOUT - int "Milliseconds of inactivity before entering deep sleep" - default 900000 + int "Milliseconds of inactivity before entering deep sleep" + default 900000 #ZMK_SLEEP endif config ZMK_EXT_POWER - bool "Enable support to control external power output" - default y + bool "Enable support to control external power output" + default y #Power Management endmenu @@ -330,16 +330,16 @@ endmenu menu "Combo options" config ZMK_COMBO_MAX_PRESSED_COMBOS - int "Maximum number of currently pressed combos" - default 4 + int "Maximum number of currently pressed combos" + default 4 config ZMK_COMBO_MAX_COMBOS_PER_KEY - int "Maximum number of combos per key" - default 5 + int "Maximum number of combos per key" + default 5 config ZMK_COMBO_MAX_KEYS_PER_COMBO - int "Maximum number of keys per combo" - default 4 + int "Maximum number of keys per combo" + default 4 #Combo options endmenu @@ -347,18 +347,18 @@ endmenu menu "Behavior Options" config ZMK_BEHAVIORS_QUEUE_SIZE - int "Maximum number of behaviors to allow queueing from a macro or other complex behavior" - default 64 + int "Maximum number of behaviors to allow queueing from a macro or other complex behavior" + default 64 rsource "Kconfig.behaviors" config ZMK_MACRO_DEFAULT_WAIT_MS - int "Default time to wait (in milliseconds) before triggering the next behavior in macros" - default 15 + int "Default time to wait (in milliseconds) before triggering the next behavior in macros" + default 15 config ZMK_MACRO_DEFAULT_TAP_MS - int "Default time to wait (in milliseconds) between the press and release events of a tapped behavior in macros" - default 30 + int "Default time to wait (in milliseconds) between the press and release events of a tapped behavior in macros" + default 30 endmenu @@ -369,8 +369,8 @@ menu "Initialization Priorities" if USB_DEVICE_STACK config ZMK_USB_INIT_PRIORITY - int "USB Init Priority" - default 50 + int "USB Init Priority" + default 50 #USB endif @@ -378,8 +378,8 @@ endif if ZMK_BLE || ZMK_SPLIT_BLE config ZMK_BLE_INIT_PRIORITY - int "BLE Init Priority" - default 50 + int "BLE Init Priority" + default 50 #ZMK_BLE || ZMK_SPLIT_BLE endif @@ -390,8 +390,8 @@ endmenu menu "KSCAN Settings" config ZMK_KSCAN_EVENT_QUEUE_SIZE - int "Size of the event queue for KSCAN events to buffer events" - default 4 + int "Size of the event queue for KSCAN events to buffer events" + default 4 #KSCAN Settings endmenu @@ -399,63 +399,63 @@ endmenu menu "Logging" config ZMK_LOGGING_MINIMAL - bool "Suppress all ZMK debug log messages" - default false + bool "Suppress all ZMK debug log messages" + default false if !ZMK_LOGGING_MINIMAL config ZMK_LOG_LEVEL - default 4 + default 4 endif config ZMK_USB_LOGGING - bool "Enable USB CDC ACM logging to help debug" - select LOG - select USB - select USB_DEVICE_STACK - select USB_CDC_ACM - select SERIAL - select CONSOLE - select UART_INTERRUPT_DRIVEN - select UART_LINE_CTRL - select UART_CONSOLE - select USB_UART_CONSOLE + bool "Enable USB CDC ACM logging to help debug" + select LOG + select USB + select USB_DEVICE_STACK + select USB_CDC_ACM + select SERIAL + select CONSOLE + select UART_INTERRUPT_DRIVEN + select UART_LINE_CTRL + select UART_CONSOLE + select USB_UART_CONSOLE if ZMK_USB_LOGGING choice USB_CDC_ACM_LOG_LEVEL_CHOICE - default USB_CDC_ACM_LOG_LEVEL_OFF + default USB_CDC_ACM_LOG_LEVEL_OFF endchoice choice USB_DRIVER_LOG_LEVEL_CHOICE - default USB_DRIVER_LOG_LEVEL_OFF + default USB_DRIVER_LOG_LEVEL_OFF endchoice # We do this to avoid log loop where logging to USB generates more log messages. config USB_CDC_ACM_RINGBUF_SIZE - default 1024 + default 1024 config LOG_PROCESS_THREAD_STARTUP_DELAY_MS - default 1000 + default 1000 #ZMK_USB_LOGGING endif config ZMK_RTT_LOGGING - bool "Enable RTT logging to help debug" - select LOG - select DEBUG - select ASSERT - select USE_SEGGER_RTT - select CONSOLE - select RTT_CONSOLE + bool "Enable RTT logging to help debug" + select LOG + select DEBUG + select ASSERT + select USE_SEGGER_RTT + select CONSOLE + select RTT_CONSOLE if ZMK_RTT_LOGGING config SEGGER_RTT_BUFFER_SIZE_UP - default 8192 + default 8192 #ZMK_RTT_LOGGING endif @@ -463,10 +463,10 @@ endif if ZMK_USB_LOGGING || ZMK_RTT_LOGGING config LOG_BUFFER_SIZE - default 8192 + default 8192 config LOG_PROCESS_THREAD_SLEEP_MS - default 100 + default 100 #ZMK_USB_LOGGING || ZMK_RTT_LOGGING endif @@ -477,16 +477,16 @@ endmenu if SETTINGS config ZMK_SETTINGS_SAVE_DEBOUNCE - int "Milliseconds to debounce settings saves" - default 60000 + int "Milliseconds to debounce settings saves" + default 60000 #SETTINGS endif config ZMK_BATTERY_REPORT_INTERVAL - depends on ZMK_BLE - int "Battery level report interval in seconds" - default 60 + depends on ZMK_BLE + int "Battery level report interval in seconds" + default 60 #Advanced endmenu @@ -495,26 +495,26 @@ endmenu endmenu config HEAP_MEM_POOL_SIZE - default 8192 + default 8192 config KERNEL_BIN_NAME - default "zmk" + default "zmk" config REBOOT - default y + default y config USB_DEVICE_STACK - default y if HAS_HW_NRF_USBD + default y if HAS_HW_NRF_USBD config ZMK_WPM - bool "Calculate WPM" - default n + bool "Calculate WPM" + default n config SENSOR - default y + default y choice CBPRINTF_IMPLEMENTATION - default CBPRINTF_NANO + default CBPRINTF_NANO endchoice diff --git a/app/boards/arm/bdn9/Kconfig.board b/app/boards/arm/bdn9/Kconfig.board index a67e9a51d75..76a204cc41a 100644 --- a/app/boards/arm/bdn9/Kconfig.board +++ b/app/boards/arm/bdn9/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_BDN9 - bool "BDN9 rev2" - depends on SOC_STM32F072XB + bool "BDN9 rev2" + depends on SOC_STM32F072XB diff --git a/app/boards/arm/bdn9/Kconfig.defconfig b/app/boards/arm/bdn9/Kconfig.defconfig index 176951857e4..d1c82811d28 100644 --- a/app/boards/arm/bdn9/Kconfig.defconfig +++ b/app/boards/arm/bdn9/Kconfig.defconfig @@ -6,16 +6,16 @@ if BOARD_BDN9 config BOARD - default "bdn9_rev2" + default "bdn9_rev2" config ZMK_KEYBOARD_NAME - default "BDN9 Rev2" + default "BDN9 Rev2" config ZMK_USB - default y + default y config ZMK_RGB_UNDERGLOW - select SPI - select WS2812_STRIP + select SPI + select WS2812_STRIP endif # BOARD_BDN9 diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index e75893d6469..d2d1c65cb8f 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -10,134 +10,134 @@ #include / { - model = "Keeb.io BDN9 rev2"; - compatible = "keebio,bdn9", "st,stm32f072"; - - chosen { - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,kscan = &kscan; - zmk,underglow = &led_strip; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; - - input-gpios - = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiof 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiof 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; - - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&gpioa 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - mid_encoder: encoder_mid { - compatible = "alps,ec11"; - label = "MID_ENCODER"; - a-gpios = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - right_encoder: encoder_right { - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - a-gpios = <&gpioa 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&gpiob 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - sensors: sensors { - compatible = "zmk,keymap-sensors"; - status = "disabled"; - sensors = <>; - }; + model = "Keeb.io BDN9 rev2"; + compatible = "keebio,bdn9", "st,stm32f072"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,kscan = &kscan; + zmk,underglow = &led_strip; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + + input-gpios + = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiof 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiof 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&gpioa 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + mid_encoder: encoder_mid { + compatible = "alps,ec11"; + label = "MID_ENCODER"; + a-gpios = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&gpioa 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpiob 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors: sensors { + compatible = "zmk,keymap-sensors"; + status = "disabled"; + sensors = <>; + }; }; &spi2 { - status = "okay"; - pinctrl-0 = <&spi2_sck_pb13 &spi2_mosi_pb15>; - pinctrl-names = "default"; + status = "okay"; + pinctrl-0 = <&spi2_sck_pb13 &spi2_mosi_pb15>; + pinctrl-names = "default"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <9>; - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <9>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; &clk_hsi { - status = "okay"; + status = "okay"; }; &pll { - status = "okay"; - prediv = <1>; - mul = <6>; - clocks = <&clk_hsi>; + status = "okay"; + prediv = <1>; + mul = <6>; + clocks = <&clk_hsi>; }; &rcc { - clocks = <&pll>; - clock-frequency = ; - ahb-prescaler = <1>; - apb1-prescaler = <1>; + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; }; &usb { - status = "okay"; - pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; - pinctrl-names = "default"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &rtc { - status = "okay"; + status = "okay"; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - /* Set 6Kb of storage at the end of the 128Kb of flash */ - storage_partition: partition@1e800 { - label = "storage"; - reg = <0x0001e800 0x00001800>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 128Kb of flash */ + storage_partition: partition@1e800 { + label = "storage"; + reg = <0x0001e800 0x00001800>; + }; + }; }; diff --git a/app/boards/arm/bdn9/bdn9_rev2.keymap b/app/boards/arm/bdn9/bdn9_rev2.keymap index 50c273c764b..1e2c192dd6f 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.keymap +++ b/app/boards/arm/bdn9/bdn9_rev2.keymap @@ -9,8 +9,8 @@ /* Uncomment and keep whatever encoders are on your BDN9 &sensors { - status = "okay"; - sensors = <&left_encoder &mid_encoder &right_encoder>; + status = "okay"; + sensors = <&left_encoder &mid_encoder &right_encoder>; }; */ @@ -20,19 +20,19 @@ // &right_encoder { status = "okay"; }; / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < - &kp HOME &kp K_PP &kp END - &kp PG_UP &kp UP &kp PG_DN - &kp LEFT &kp DOWN &kp RIGHT - >; - /* Uncomment and add necessary bindings. This examples is for one encoder - sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; - */ - }; - }; + default_layer { + bindings = < + &kp HOME &kp K_PP &kp END + &kp PG_UP &kp UP &kp PG_DN + &kp LEFT &kp DOWN &kp RIGHT + >; + /* Uncomment and add necessary bindings. This examples is for one encoder + sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; + */ + }; + }; }; diff --git a/app/boards/arm/bluemicro840/Kconfig b/app/boards/arm/bluemicro840/Kconfig index 0e6743d3ef2..ca060885f16 100644 --- a/app/boards/arm/bluemicro840/Kconfig +++ b/app/boards/arm/bluemicro840/Kconfig @@ -1,8 +1,8 @@ # SPDX-License-Identifier: MIT config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on BOARD_BLUEMICRO840_V1 + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_BLUEMICRO840_V1 diff --git a/app/boards/arm/bluemicro840/Kconfig.board b/app/boards/arm/bluemicro840/Kconfig.board index bc271af3f73..e27940157b2 100644 --- a/app/boards/arm/bluemicro840/Kconfig.board +++ b/app/boards/arm/bluemicro840/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_BLUEMICRO840_V1 - bool "BlueMicro840_V1" - depends on SOC_NRF52840_QIAA + bool "BlueMicro840_V1" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/bluemicro840/Kconfig.defconfig b/app/boards/arm/bluemicro840/Kconfig.defconfig index 5d911ec6024..732805ae199 100644 --- a/app/boards/arm/bluemicro840/Kconfig.defconfig +++ b/app/boards/arm/bluemicro840/Kconfig.defconfig @@ -6,22 +6,22 @@ if BOARD_BLUEMICRO840_V1 config BOARD - default "bluemicro840_v1" + default "bluemicro840_v1" if USB_DEVICE_STACK config USB_NRFX - default y + default y endif # USB_DEVICE_STACK config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y endif # BOARD_BLUEMICRO840_V1 diff --git a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi index 53514d64499..cdb8fcdd3fd 100644 --- a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -5,50 +5,50 @@ */ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 D2 */ - , <1 0 &gpio0 6 0> /* D1 D3*/ - , <2 0 &gpio0 15 0> /* D2 D1*/ - , <3 0 &gpio0 17 0> /* D3 D0*/ - , <4 0 &gpio0 20 0> /* D4/A6 D4*/ - , <5 0 &gpio0 13 0> /* D5 C6*/ - , <6 0 &gpio0 24 0> /* D6/A7 D7*/ - , <7 0 &gpio0 9 0> /* D7 E6*/ - , <8 0 &gpio0 10 0> /* D8/A8 B4*/ - , <9 0 &gpio1 6 0> /* D9/A9 B5*/ - , <10 0 &gpio1 11 0> /* D10/A10 B6*/ - , <16 0 &gpio0 28 0> /* D16 B2*/ - , <14 0 &gpio0 3 0> /* D14 B3*/ - , <15 0 &gpio1 13 0> /* D15 B1*/ - , <18 0 &gpio0 2 0> /* D18/A0 F7*/ - , <19 0 &gpio0 29 0> /* D19/A1 F6*/ - , <20 0 &gpio0 26 0> /* D20/A2 F5*/ - , <21 0 &gpio0 30 0> /* D21/A3 F4*/ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 D2 */ + , <1 0 &gpio0 6 0> /* D1 D3*/ + , <2 0 &gpio0 15 0> /* D2 D1*/ + , <3 0 &gpio0 17 0> /* D3 D0*/ + , <4 0 &gpio0 20 0> /* D4/A6 D4*/ + , <5 0 &gpio0 13 0> /* D5 C6*/ + , <6 0 &gpio0 24 0> /* D6/A7 D7*/ + , <7 0 &gpio0 9 0> /* D7 E6*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 11 0> /* D10/A10 B6*/ + , <16 0 &gpio0 28 0> /* D16 B2*/ + , <14 0 &gpio0 3 0> /* D14 B3*/ + , <15 0 &gpio1 13 0> /* D15 B1*/ + , <18 0 &gpio0 2 0> /* D18/A0 F7*/ + , <19 0 &gpio0 29 0> /* D19/A1 F6*/ + , <20 0 &gpio0 26 0> /* D20/A2 F5*/ + , <21 0 &gpio0 30 0> /* D21/A3 F4*/ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 2 0> /* D18/A0 F7*/ - , <1 0 &gpio0 29 0> /* D19/A1 F6*/ - , <2 0 &gpio0 26 0> /* D20/A2 F5*/ - , <3 0 &gpio0 30 0> /* D21/A3 F4*/ - , <6 0 &gpio0 20 0> /* D4/A6 D4*/ - , <7 0 &gpio0 24 0> /* D6/A7 D7*/ - , <8 0 &gpio0 10 0> /* D8/A8 B4*/ - , <9 0 &gpio1 6 0> /* D9/A9 B5*/ - , <10 0 &gpio1 11 0> /* D10/A10 B6*/ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* D18/A0 F7*/ + , <1 0 &gpio0 29 0> /* D19/A1 F6*/ + , <2 0 &gpio0 26 0> /* D20/A2 F5*/ + , <3 0 &gpio0 30 0> /* D21/A3 F4*/ + , <6 0 &gpio0 20 0> /* D4/A6 D4*/ + , <7 0 &gpio0 24 0> /* D6/A7 D7*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 11 0> /* D10/A10 B6*/ + ; + }; }; pro_micro_d: &pro_micro {}; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi index 18b90f21ffc..15c48509202 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi +++ b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi @@ -4,36 +4,36 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index c636ca31672..f19526011a6 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -10,117 +10,117 @@ #include "bluemicro840_v1-pinctrl.dtsi" / { - model = "BlueMicro840_V1"; - compatible = "bluemicro840,v1"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - init-delay-ms = <20>; - control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 7>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 806000)>; - }; + model = "BlueMicro840_V1"; + compatible = "bluemicro840,v1"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + init-delay-ms = <20>; + control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 7>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twim"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/bt60/Kconfig b/app/boards/arm/bt60/Kconfig index 359e237dda5..d57a6b7efe3 100644 --- a/app/boards/arm/bt60/Kconfig +++ b/app/boards/arm/bt60/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: MIT config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on (BOARD_BT60_V1_HS || BOARD_BT60_V1) + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_BT60_V1_HS || BOARD_BT60_V1) diff --git a/app/boards/arm/bt60/Kconfig.board b/app/boards/arm/bt60/Kconfig.board index 0f0a9c6e341..24c0a8b5b0c 100644 --- a/app/boards/arm/bt60/Kconfig.board +++ b/app/boards/arm/bt60/Kconfig.board @@ -4,9 +4,9 @@ # SPDX-License-Identifier: MIT config BOARD_BT60_V1 - bool "bt60" - depends on SOC_NRF52840_QIAA + bool "bt60" + depends on SOC_NRF52840_QIAA config BOARD_BT60_V1_HS - bool "bt60 hotswap" - depends on SOC_NRF52840_QIAA + bool "bt60 hotswap" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/bt60/Kconfig.defconfig b/app/boards/arm/bt60/Kconfig.defconfig index bad1e7cdc7c..e7cf1a48cff 100644 --- a/app/boards/arm/bt60/Kconfig.defconfig +++ b/app/boards/arm/bt60/Kconfig.defconfig @@ -4,28 +4,28 @@ if BOARD_BT60_V1_HS || BOARD_BT60_V1 config BOARD - default "bt60" + default "bt60" if USB config USB_NRFX - default y + default y config USB_DEVICE_STACK - default y + default y endif # USB config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y config ZMK_KEYBOARD_NAME - default "BT60" + default "BT60" endif # BOARD_BT60 diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index 3858ba46715..6e4900af53c 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -9,126 +9,126 @@ #include / { - model = "BT60"; - compatible = "polarityworks,bt60"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder>; - }; - - - - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "okay"; - }; - - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 806000)>; - }; + model = "BT60"; + compatible = "polarityworks,bt60"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; + + + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <17>; - scl-pin = <20>; + compatible = "nordic,nrf-twi"; + sda-pin = <17>; + scl-pin = <20>; }; &uart0 { - compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; + compatible = "nordic,nrf-uarte"; + tx-pin = <6>; + rx-pin = <8>; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/bt60/bt60_v1.dts b/app/boards/arm/bt60/bt60_v1.dts index 8b2f0cb41bb..0cfe184a090 100644 --- a/app/boards/arm/bt60/bt60_v1.dts +++ b/app/boards/arm/bt60/bt60_v1.dts @@ -9,105 +9,105 @@ / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &ansi_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &ansi_transform; + }; - ansi_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <5>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) - RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) - RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) - >; - }; + ansi_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) + >; + }; - hhkb_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <5>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) - RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) - RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) - >; - }; + hhkb_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; - iso_transform: keymap_transform_2 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <5>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) - RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) - RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) - >; - }; + iso_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; - all_1u_transform: keymap_transform_3 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <5>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) - RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,14) - RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) - >; - }; + all_1u_transform: keymap_transform_3 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,14) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) + >; + }; - split_transform: keymap_transform_4 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <5>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) - RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) - RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) - >; - }; + split_transform: keymap_transform_4 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) + RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) + RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - diode-direction = "col2row"; + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; - col-gpios - = <&gpio1 13 GPIO_ACTIVE_HIGH> - , <&gpio1 10 GPIO_ACTIVE_HIGH> - , <&gpio1 11 GPIO_ACTIVE_HIGH> - , <&gpio1 15 GPIO_ACTIVE_HIGH> - , <&gpio0 3 GPIO_ACTIVE_HIGH> - , <&gpio0 2 GPIO_ACTIVE_HIGH> - , <&gpio0 28 GPIO_ACTIVE_HIGH> - , <&gpio0 29 GPIO_ACTIVE_HIGH> - , <&gpio0 30 GPIO_ACTIVE_HIGH> - , <&gpio0 31 GPIO_ACTIVE_HIGH> - , <&gpio0 5 GPIO_ACTIVE_HIGH> - , <&gpio0 7 GPIO_ACTIVE_HIGH> - , <&gpio1 9 GPIO_ACTIVE_HIGH> - , <&gpio0 12 GPIO_ACTIVE_HIGH> - , <&gpio0 23 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&gpio1 13 GPIO_ACTIVE_HIGH> + , <&gpio1 10 GPIO_ACTIVE_HIGH> + , <&gpio1 11 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + ; - row-gpios - = <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; + row-gpios + = <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; }; diff --git a/app/boards/arm/bt60/bt60_v1.keymap b/app/boards/arm/bt60/bt60_v1.keymap index b42f3f3d637..25ae269d306 100644 --- a/app/boards/arm/bt60/bt60_v1.keymap +++ b/app/boards/arm/bt60/bt60_v1.keymap @@ -11,170 +11,170 @@ / { - chosen { - #ifdef ANSI - zmk,matrix_transform = &ansi_transform; - #elif defined(HHKB) - zmk,matrix_transform = &hhkb_transform; - #elif defined(ISO) - zmk,matrix_transform = &iso_transform; - #elif defined(ALL_1U) - zmk,matrix_transform = &all_1u_transform; - #else - zmk,matrix_transform = &split_transform; - #endif - }; + chosen { + #ifdef ANSI + zmk,matrix_transform = &ansi_transform; + #elif defined(HHKB) + zmk,matrix_transform = &hhkb_transform; + #elif defined(ISO) + zmk,matrix_transform = &iso_transform; + #elif defined(ALL_1U) + zmk,matrix_transform = &all_1u_transform; + #else + zmk,matrix_transform = &split_transform; + #endif + }; - keymap { - compatible = "zmk,keymap"; - #ifdef ANSI - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - // ------------------------------------------------------------------------------------------ - // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | - // | TAB | Q | UP | E | R | T | Y | U | INS | O |PSCRN|SLCK |PSEBRK| RESET | - // | CAPS |LEFT |DOWN |RIGHT| F | G | H | J | K | L |HOME |PGUP | BOOTLOADER | - // | PREV |VOLUP |VOLDN|MUTE | V | B | N | M | , | END | PGDN | NEXT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | BT_CLR | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset - &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR &trans - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #elif defined(HHKB) - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | BSPC | - // | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 | - // | CAPS | ALT | WIN | SPACE | WIN | ALT | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSLH &kp GRAVE - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSPC - &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &mo 1 - &kp LCTRL &kp LALT &kp LGUI &kp SPACE &kp RGUI &kp RALT &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - bindings = < - &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp INS &kp DEL - &kp CLCK &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &kp UP &trans &sys_reset - &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp LEFT &kp RIGHT &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp DOWN &trans &trans - &trans &trans &trans &bootloader &trans &trans &trans - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #elif defined(ISO) - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | - // | SHIFT | | | Z | X | C | V | B | N | M | , | . | / | SHIFT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET - &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &sys_reset &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK - &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &trans &bootloader - &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #elif defined(ALL_1U) - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHFT | UP | 1 | - // | CTL | WIN | ALT | SPACE | ALT | CTRL | LEFT | DOWN | RIGHT | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &mo 1 - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp F1 - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset - &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #else - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP| DEL | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 | - // | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &mo 1 - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &kp C_MENU &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset - &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &trans - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #endif - }; + keymap { + compatible = "zmk,keymap"; + #ifdef ANSI + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // ------------------------------------------------------------------------------------------ + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | + // | TAB | Q | UP | E | R | T | Y | U | INS | O |PSCRN|SLCK |PSEBRK| RESET | + // | CAPS |LEFT |DOWN |RIGHT| F | G | H | J | K | L |HOME |PGUP | BOOTLOADER | + // | PREV |VOLUP |VOLDN|MUTE | V | B | N | M | , | END | PGDN | NEXT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | BT_CLR | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(HHKB) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | BSPC | + // | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 | + // | CAPS | ALT | WIN | SPACE | WIN | ALT | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSLH &kp GRAVE + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSPC + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &mo 1 + &kp LCTRL &kp LALT &kp LGUI &kp SPACE &kp RGUI &kp RALT &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp INS &kp DEL + &kp CLCK &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &kp UP &trans &sys_reset + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp LEFT &kp RIGHT &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp DOWN &trans &trans + &trans &trans &trans &bootloader &trans &trans &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ISO) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | + // | SHIFT | | | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET + &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &sys_reset &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &trans &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ALL_1U) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHFT | UP | 1 | + // | CTL | WIN | ALT | SPACE | ALT | CTRL | LEFT | DOWN | RIGHT | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &mo 1 + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp F1 + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #else + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP| DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 | + // | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &mo 1 + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &kp C_MENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &trans + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #endif + }; }; diff --git a/app/boards/arm/bt60/bt60_v1_hs.dts b/app/boards/arm/bt60/bt60_v1_hs.dts index 0e686fd9879..b24dee1e82b 100644 --- a/app/boards/arm/bt60/bt60_v1_hs.dts +++ b/app/boards/arm/bt60/bt60_v1_hs.dts @@ -9,53 +9,53 @@ / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <5>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(2,13) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) - RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,8) RC(4,9) RC(4,10) RC(4,11) - >; - }; - - - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - diode-direction = "col2row"; - - col-gpios - = <&gpio1 11 GPIO_ACTIVE_HIGH> - , <&gpio1 10 GPIO_ACTIVE_HIGH> - , <&gpio1 13 GPIO_ACTIVE_HIGH> - , <&gpio1 15 GPIO_ACTIVE_HIGH> - , <&gpio0 3 GPIO_ACTIVE_HIGH> - , <&gpio0 2 GPIO_ACTIVE_HIGH> - , <&gpio0 28 GPIO_ACTIVE_HIGH> - , <&gpio0 29 GPIO_ACTIVE_HIGH> - , <&gpio0 30 GPIO_ACTIVE_HIGH> - , <&gpio0 31 GPIO_ACTIVE_HIGH> - , <&gpio0 5 GPIO_ACTIVE_HIGH> - , <&gpio0 7 GPIO_ACTIVE_HIGH> - , <&gpio1 9 GPIO_ACTIVE_HIGH> - , <&gpio0 12 GPIO_ACTIVE_HIGH> - ; - - row-gpios - = <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 23 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(2,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,8) RC(4,9) RC(4,10) RC(4,11) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&gpio1 11 GPIO_ACTIVE_HIGH> + , <&gpio1 10 GPIO_ACTIVE_HIGH> + , <&gpio1 13 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 23 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; }; diff --git a/app/boards/arm/bt60/bt60_v1_hs.keymap b/app/boards/arm/bt60/bt60_v1_hs.keymap index 167460c6694..6c26756e35a 100644 --- a/app/boards/arm/bt60/bt60_v1_hs.keymap +++ b/app/boards/arm/bt60/bt60_v1_hs.keymap @@ -3,35 +3,35 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &bt BT_CLR - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans - &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset - &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - }; + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &bt BT_CLR + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans + &trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &sys_reset + &trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; }; diff --git a/app/boards/arm/corneish_zen/Kconfig.board b/app/boards/arm/corneish_zen/Kconfig.board index 33baa11072e..ca82e33068b 100644 --- a/app/boards/arm/corneish_zen/Kconfig.board +++ b/app/boards/arm/corneish_zen/Kconfig.board @@ -4,9 +4,9 @@ # config BOARD_CORNEISH_ZEN_V2_LEFT - bool "corneish zen left v2" - depends on SOC_NRF52840_QIAA + bool "corneish zen left v2" + depends on SOC_NRF52840_QIAA config BOARD_CORNEISH_ZEN_V2_RIGHT - bool "corneish zen right v2" - depends on SOC_NRF52840_QIAA \ No newline at end of file + bool "corneish zen right v2" + depends on SOC_NRF52840_QIAA \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig index 33ce12567e7..a161230c1fb 100644 --- a/app/boards/arm/corneish_zen/Kconfig.defconfig +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -6,10 +6,10 @@ if BOARD_CORNEISH_ZEN_V2_LEFT config ZMK_KEYBOARD_NAME - default "Corne-ish Zen" + default "Corne-ish Zen" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif # BOARD_CORNEISH_ZEN_V2_LEFT @@ -17,65 +17,65 @@ endif # BOARD_CORNEISH_ZEN_V2_LEFT if BOARD_CORNEISH_ZEN_V2_LEFT || BOARD_CORNEISH_ZEN_V2_RIGHT config BOARD - default "corneish_zen" + default "corneish_zen" config ZMK_SPLIT - default y + default y config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y if USB config USB_NRFX - default y + default y config USB_DEVICE_STACK - default y + default y endif # USB config ZMK_DISPLAY - select LV_USE_CONT - select LV_FONT_MONTSERRAT_26 - select LV_FONT_MONTSERRAT_20 - select LV_FONT_MONTSERRAT_16 - select LV_USE_LABEL - select LV_USE_IMG + select LV_USE_CONT + select LV_FONT_MONTSERRAT_26 + select LV_FONT_MONTSERRAT_20 + select LV_FONT_MONTSERRAT_16 + select LV_USE_LABEL + select LV_USE_IMG choice ZMK_DISPLAY_STATUS_SCREEN - default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM + default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM endchoice if ZMK_DISPLAY config SPI - default y + default y config IL0323 - default y + default y config ZMK_DISPLAY_BLANK_ON_IDLE - default n + default n endif # ZMK_DISPLAY menuconfig CUSTOM_WIDGET_BATTERY_STATUS - bool "custom battery status widget" + bool "custom battery status widget" menuconfig CUSTOM_WIDGET_OUTPUT_STATUS - bool "custom output status widget" + bool "custom output status widget" menuconfig CUSTOM_WIDGET_LAYER_STATUS - bool "custom layer status widget" + bool "custom layer status widget" menuconfig CUSTOM_WIDGET_PERIPHERAL_STATUS - bool "custom peripheral status widget" + bool "custom peripheral status widget" endif # BOARD_CORNEISH_ZEN_V2_LEFT || BOARD_CORNEISH_ZEN_V2_RIGHT diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index f203c9f8b1c..10be54cc697 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -11,116 +11,116 @@ #include / { - model = "corneish_zen_v2"; - compatible = "corneish_zen_v2"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zmk,kscan = &kscan0; - zmk,display = &epd; - zmk,battery = &vbatt; - zephyr,console = &cdc_acm_uart; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; - - // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | - // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | - // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | - // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) - RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; - - five_column_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; - - // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | - // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | - // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | - // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < - RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) - RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) - RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) - RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + model = "corneish_zen_v2"; + compatible = "corneish_zen_v2"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,display = &epd; + zmk,battery = &vbatt; + zephyr,console = &cdc_acm_uart; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; + + // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | + // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | + // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | + // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; + + // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | + // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | + // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | + // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < + RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) + RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) + RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/corneish_zen.keymap b/app/boards/arm/corneish_zen/corneish_zen.keymap index 72d0b8f1bfb..2b9eeb14bcd 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.keymap +++ b/app/boards/arm/corneish_zen/corneish_zen.keymap @@ -45,7 +45,7 @@ &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; @@ -60,7 +60,7 @@ &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; }; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index 65092dc5a05..9f3dd73a819 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -8,90 +8,90 @@ #include "corneish_zen.dtsi" /{ - chosen { - zephyr,display = &epd; - zmk,battery = &vbatt; - }; + chosen { + zephyr,display = &epd; + zmk,battery = &vbatt; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - col-gpios - = <&gpio0 21 GPIO_ACTIVE_HIGH> - , <&gpio0 23 GPIO_ACTIVE_HIGH> - , <&gpio0 12 GPIO_ACTIVE_HIGH> - , <&gpio1 9 GPIO_ACTIVE_HIGH> - , <&gpio0 7 GPIO_ACTIVE_HIGH> - , <&gpio0 5 GPIO_ACTIVE_HIGH> - ; - }; + col-gpios + = <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + ; + }; - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 0>; - output-ohms = <1960000>; - full-ohms = <(1960000 + 810000)>; - }; + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 0>; + output-ohms = <1960000>; + full-ohms = <(1960000 + 810000)>; + }; }; &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; &spi0 { - status = "okay"; - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; + status = "okay"; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; - epd: il0323@0 { - compatible = "gooddisplay,il0323"; - reg = <0>; - label = "DISPLAY"; - width = <80>; - height = <128>; - spi-max-frequency = <4000000>; - dc-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; - busy-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; - reset-gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; - pwr = [03 00 26 26]; - cdi = <0xd2>; - tcon = <0x22>; - }; + epd: il0323@0 { + compatible = "gooddisplay,il0323"; + reg = <0>; + label = "DISPLAY"; + width = <80>; + height = <128>; + spi-max-frequency = <4000000>; + dc-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + busy-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + pwr = [03 00 26 26]; + cdi = <0xd2>; + tcon = <0x22>; + }; }; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts index 980c990020f..3cb7556f9be 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -8,98 +8,98 @@ #include "corneish_zen.dtsi" /{ - chosen { - zephyr,display = &epd; - zmk,battery = &vbatt; - }; + chosen { + zephyr,display = &epd; + zmk,battery = &vbatt; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - col-gpios - = <&gpio0 19 GPIO_ACTIVE_HIGH> - , <&gpio0 21 GPIO_ACTIVE_HIGH> - , <&gpio0 23 GPIO_ACTIVE_HIGH> - , <&gpio0 12 GPIO_ACTIVE_HIGH> - , <&gpio1 9 GPIO_ACTIVE_HIGH> - , <&gpio0 7 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&gpio0 19 GPIO_ACTIVE_HIGH> + , <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + ; - }; + }; - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 0>; - output-ohms = <1960000>; - full-ohms = <(1960000 + 810000)>; - }; + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 0>; + output-ohms = <1960000>; + full-ohms = <(1960000 + 810000)>; + }; }; &default_transform { - col-offset = <6>; + col-offset = <6>; }; &five_column_transform { - col-offset = <6>; + col-offset = <6>; }; &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; &spi0 { - status = "okay"; - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; + status = "okay"; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; - epd: il0323@0 { - compatible = "gooddisplay,il0323"; - reg = <0>; - label = "DISPLAY"; - width = <80>; - height = <128>; - spi-max-frequency = <4000000>; - dc-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; - busy-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; - reset-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; - pwr = [03 00 26 26]; - //softstart = [17 17 17 17]; - cdi = <0xd2>; - tcon = <0x22>; - }; + epd: il0323@0 { + compatible = "gooddisplay,il0323"; + reg = <0>; + label = "DISPLAY"; + width = <80>; + height = <128>; + spi-max-frequency = <4000000>; + dc-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; + busy-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + pwr = [03 00 26 26]; + //softstart = [17 17 17 17]; + cdi = <0xd2>; + tcon = <0x22>; + }; }; diff --git a/app/boards/arm/dz60rgb/Kconfig.board b/app/boards/arm/dz60rgb/Kconfig.board index ec8dad6836e..ba09e2dd43e 100644 --- a/app/boards/arm/dz60rgb/Kconfig.board +++ b/app/boards/arm/dz60rgb/Kconfig.board @@ -2,5 +2,5 @@ # SPDX-License-Identifier: MIT config BOARD_DZ60RGB_REV1 - bool "DZ60RGB Keyboard" - depends on SOC_STM32F303XC + bool "DZ60RGB Keyboard" + depends on SOC_STM32F303XC diff --git a/app/boards/arm/dz60rgb/Kconfig.defconfig b/app/boards/arm/dz60rgb/Kconfig.defconfig index 779d3123a39..2e30e3d048d 100644 --- a/app/boards/arm/dz60rgb/Kconfig.defconfig +++ b/app/boards/arm/dz60rgb/Kconfig.defconfig @@ -6,9 +6,9 @@ if BOARD_DZ60RGB_REV1 config ZMK_KEYBOARD_NAME - default "DZ60RGB Rev 1" + default "DZ60RGB Rev 1" config ZMK_USB - default y + default y endif # BOARD_DZ60RGB_REV1 diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts index e2730d21124..14be837d9ee 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts @@ -10,84 +10,84 @@ #include / { - model = "DZ60RGB, Rev 1"; - compatible = "dz60rgb,rev1", "st,stm32f303"; + model = "DZ60RGB, Rev 1"; + compatible = "dz60rgb,rev1", "st,stm32f303"; - chosen { - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <5>; - map = < + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,13) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&gpioa 6 GPIO_ACTIVE_HIGH> - , <&gpioa 7 GPIO_ACTIVE_HIGH> - , <&gpiob 0 GPIO_ACTIVE_HIGH> - , <&gpiob 13 GPIO_ACTIVE_HIGH> - , <&gpiob 15 GPIO_ACTIVE_HIGH> - , <&gpioa 8 GPIO_ACTIVE_HIGH> - , <&gpioa 15 GPIO_ACTIVE_HIGH> - , <&gpiob 3 GPIO_ACTIVE_HIGH> - , <&gpiob 4 GPIO_ACTIVE_HIGH> - , <&gpiob 5 GPIO_ACTIVE_HIGH> - , <&gpiob 8 GPIO_ACTIVE_HIGH> - , <&gpiob 9 GPIO_ACTIVE_HIGH> - , <&gpioc 13 GPIO_ACTIVE_HIGH> - , <&gpioc 14 GPIO_ACTIVE_HIGH> - ; - }; + diode-direction = "col2row"; + row-gpios + = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpioa 6 GPIO_ACTIVE_HIGH> + , <&gpioa 7 GPIO_ACTIVE_HIGH> + , <&gpiob 0 GPIO_ACTIVE_HIGH> + , <&gpiob 13 GPIO_ACTIVE_HIGH> + , <&gpiob 15 GPIO_ACTIVE_HIGH> + , <&gpioa 8 GPIO_ACTIVE_HIGH> + , <&gpioa 15 GPIO_ACTIVE_HIGH> + , <&gpiob 3 GPIO_ACTIVE_HIGH> + , <&gpiob 4 GPIO_ACTIVE_HIGH> + , <&gpiob 5 GPIO_ACTIVE_HIGH> + , <&gpiob 8 GPIO_ACTIVE_HIGH> + , <&gpiob 9 GPIO_ACTIVE_HIGH> + , <&gpioc 13 GPIO_ACTIVE_HIGH> + , <&gpioc 14 GPIO_ACTIVE_HIGH> + ; + }; }; &usb { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; - /* Set 6Kb of storage at the end of the 256Kb of flash */ - storage_partition: partition@3e800 { - label = "storage"; - reg = <0x0003e800 0x00001800>; - }; - }; + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; }; diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap b/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap index f95fce0ef13..e8cc6a7a884 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap @@ -2,10 +2,10 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | @@ -13,13 +13,13 @@ // | SHIFT | Z | X | C | V | B | N | M | , | . | SHIFT(/) | ^ | DEL | // | CTL | WIN | ALT | SPACE | ALT | MO(1) | <- | v | -> | // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &mt RSHFT FSLH &kp UP &kp DEL - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp LEFT &kp DOWN &kp RIGHT - >; - }; - }; + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &mt RSHFT FSLH &kp UP &kp DEL + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp LEFT &kp DOWN &kp RIGHT + >; + }; + }; }; \ No newline at end of file diff --git a/app/boards/arm/ferris/Kconfig.board b/app/boards/arm/ferris/Kconfig.board index ad96271ab3f..70ee895d8dd 100644 --- a/app/boards/arm/ferris/Kconfig.board +++ b/app/boards/arm/ferris/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_FERRIS - bool "Ferris rev 0.2" - depends on SOC_STM32F072XB + bool "Ferris rev 0.2" + depends on SOC_STM32F072XB diff --git a/app/boards/arm/ferris/Kconfig.defconfig b/app/boards/arm/ferris/Kconfig.defconfig index c59cb902c35..7cf43bcb9e6 100644 --- a/app/boards/arm/ferris/Kconfig.defconfig +++ b/app/boards/arm/ferris/Kconfig.defconfig @@ -6,15 +6,15 @@ if BOARD_FERRIS config BOARD - default "ferris_rev02" + default "ferris_rev02" config ZMK_KEYBOARD_NAME - default "Ferris rev 0.2" + default "Ferris rev 0.2" config ZMK_USB - default y + default y config ZMK_KSCAN_MATRIX_POLLING - default y + default y endif # BOARD_FERRIS diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 55055e9a1e7..618a5591407 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -11,153 +11,153 @@ #include / { - model = "Ferris rev0.2"; - compatible = "ferris,rev02", "st,stm32f072"; - - chosen { - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,kscan = &kscan; - zmk,matrix_transform = &transform; - /* TODO: Enable once we support the IC for underglow - zmk,underglow = &led_strip; - */ - }; - - transform: transform { - compatible = "zmk,matrix-transform"; - rows = <4>; - columns = <10>; - - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) - RC(3,3) RC(3,4) RC(3,5) RC(3,6) - >; - }; - - kscan: kscan { - compatible = "zmk,kscan-composite"; - label = "KSCAN"; - rows = <4>; - columns = <10>; - - left { - kscan = <&kscan_left>; - }; - - right { - kscan = <&kscan_right>; - column-offset = <5>; - }; - }; - - kscan_left: kscan_left { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_LEFT"; - - diode-direction = "col2row"; - - col-gpios - = <&gpiob 8 (GPIO_ACTIVE_HIGH)> - , <&gpiob 4 (GPIO_ACTIVE_HIGH)> - , <&gpiob 3 (GPIO_ACTIVE_HIGH)> - , <&gpioa 15 (GPIO_ACTIVE_HIGH)> - , <&gpioa 14 (GPIO_ACTIVE_HIGH)> - ; - row-gpios - = <&gpiob 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; - - kscan_right: kscan_right { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_RIGHT"; - - diode-direction = "row2col"; - - col-gpios - = <&right_io 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&right_io 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&right_io 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&right_io 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&right_io 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - row-gpios - = <&right_io 8 (GPIO_ACTIVE_LOW)> - , <&right_io 9 (GPIO_ACTIVE_LOW)> - , <&right_io 10 (GPIO_ACTIVE_LOW)> - , <&right_io 11 (GPIO_ACTIVE_LOW)> - ; - }; + model = "Ferris rev0.2"; + compatible = "ferris,rev02", "st,stm32f072"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,kscan = &kscan; + zmk,matrix_transform = &transform; + /* TODO: Enable once we support the IC for underglow + zmk,underglow = &led_strip; + */ + }; + + transform: transform { + compatible = "zmk,matrix-transform"; + rows = <4>; + columns = <10>; + + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) + >; + }; + + kscan: kscan { + compatible = "zmk,kscan-composite"; + label = "KSCAN"; + rows = <4>; + columns = <10>; + + left { + kscan = <&kscan_left>; + }; + + right { + kscan = <&kscan_right>; + column-offset = <5>; + }; + }; + + kscan_left: kscan_left { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN_LEFT"; + + diode-direction = "col2row"; + + col-gpios + = <&gpiob 8 (GPIO_ACTIVE_HIGH)> + , <&gpiob 4 (GPIO_ACTIVE_HIGH)> + , <&gpiob 3 (GPIO_ACTIVE_HIGH)> + , <&gpioa 15 (GPIO_ACTIVE_HIGH)> + , <&gpioa 14 (GPIO_ACTIVE_HIGH)> + ; + row-gpios + = <&gpiob 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + kscan_right: kscan_right { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN_RIGHT"; + + diode-direction = "row2col"; + + col-gpios + = <&right_io 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&right_io 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + row-gpios + = <&right_io 8 (GPIO_ACTIVE_LOW)> + , <&right_io 9 (GPIO_ACTIVE_LOW)> + , <&right_io 10 (GPIO_ACTIVE_LOW)> + , <&right_io 11 (GPIO_ACTIVE_LOW)> + ; + }; }; &i2c2 { - pinctrl-0 = <&i2c2_scl_pb10 &i2c2_sda_pb11>; - pinctrl-names = "default"; - status = "okay"; - clock-frequency = ; - - right_io: mcp23017@20 { - compatible = "microchip,mcp230xx"; - status = "okay"; - gpio-controller; - reg = <0x20>; - #gpio-cells = <2>; - ngpios = <16>; - }; + pinctrl-0 = <&i2c2_scl_pb10 &i2c2_sda_pb11>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; + + right_io: mcp23017@20 { + compatible = "microchip,mcp230xx"; + status = "okay"; + gpio-controller; + reg = <0x20>; + #gpio-cells = <2>; + ngpios = <16>; + }; }; &usb { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &clk_hsi { - status = "okay"; + status = "okay"; }; &pll { - prediv = <1>; - mul = <6>; - clocks = <&clk_hsi>; - status = "okay"; + prediv = <1>; + mul = <6>; + clocks = <&clk_hsi>; + status = "okay"; }; &rcc { - clocks = <&pll>; - clock-frequency = ; - ahb-prescaler = <1>; - apb1-prescaler = <1>; + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; }; &rtc { - status = "okay"; + status = "okay"; }; &flash0 { - /* - * For more information, see: - * http: //docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - /* Set 6Kb of storage at the end of the 128Kb of flash */ - storage_partition: partition@3e800 { - label = "storage"; - reg = <0x0001e800 0x00001800>; - }; - }; + /* + * For more information, see: + * http: //docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 128Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0001e800 0x00001800>; + }; + }; }; diff --git a/app/boards/arm/mikoto/Kconfig b/app/boards/arm/mikoto/Kconfig index 646d119c181..71ec9411738 100644 --- a/app/boards/arm/mikoto/Kconfig +++ b/app/boards/arm/mikoto/Kconfig @@ -1,12 +1,12 @@ config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on (BOARD_MIKOTO_520) + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_MIKOTO_520) choice BOARD_MIKOTO_CHARGER_CURRENT prompt "Charge current to supply to attached batteries" - depends on (BOARD_MIKOTO_520) + depends on (BOARD_MIKOTO_520) config BOARD_MIKOTO_CHARGER_CURRENT_40MA bool "40mA charge current, for battery capacity 40mAh or higher" diff --git a/app/boards/arm/mikoto/Kconfig.board b/app/boards/arm/mikoto/Kconfig.board index 067c2fbe7a5..a872fa1fa01 100644 --- a/app/boards/arm/mikoto/Kconfig.board +++ b/app/boards/arm/mikoto/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_MIKOTO_520 - bool "mikoto_520" - depends on SOC_NRF52840_QIAA + bool "mikoto_520" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/mikoto/Kconfig.defconfig b/app/boards/arm/mikoto/Kconfig.defconfig index 6aafc613ca8..8c7746dbb8e 100644 --- a/app/boards/arm/mikoto/Kconfig.defconfig +++ b/app/boards/arm/mikoto/Kconfig.defconfig @@ -6,29 +6,29 @@ if BOARD_MIKOTO_520 config BOARD - default "mikoto" + default "mikoto" if USB config USB_NRFX - default y + default y config USB_DEVICE_STACK - default y + default y endif # USB config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y config PINMUX - default y + default y choice BOARD_MIKOTO_CHARGER_CURRENT default BOARD_MIKOTO_CHARGER_CURRENT_100MA diff --git a/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi b/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi index 7c5cd12f95d..ed6097ec6b9 100644 --- a/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi @@ -6,50 +6,50 @@ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 4 0> /* D0 */ - , <1 0 &gpio0 8 0> /* D1 */ - , <2 0 &gpio0 17 0> /* D2 */ - , <3 0 &gpio0 20 0> /* D3 */ - , <4 0 &gpio0 22 0> /* D4/A6 */ - , <5 0 &gpio0 24 0> /* D5 */ - , <6 0 &gpio1 0 0> /* D6/A7 */ - , <7 0 &gpio1 2 0> /* D7 */ - , <8 0 &gpio1 4 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio0 9 0> /* D10/A10 */ - , <16 0 &gpio0 10 0> /* D16 */ - , <14 0 &gpio1 13 0> /* D14 */ - , <15 0 &gpio0 2 0> /* D15 */ - , <18 0 &gpio0 29 0> /* D18/A0 */ - , <19 0 &gpio0 31 0> /* D19/A1 */ - , <20 0 &gpio0 25 0> /* D20/A2 */ - , <21 0 &gpio0 11 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 4 0> /* D0 */ + , <1 0 &gpio0 8 0> /* D1 */ + , <2 0 &gpio0 17 0> /* D2 */ + , <3 0 &gpio0 20 0> /* D3 */ + , <4 0 &gpio0 22 0> /* D4/A6 */ + , <5 0 &gpio0 24 0> /* D5 */ + , <6 0 &gpio1 0 0> /* D6/A7 */ + , <7 0 &gpio1 2 0> /* D7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio1 13 0> /* D14 */ + , <15 0 &gpio0 2 0> /* D15 */ + , <18 0 &gpio0 29 0> /* D18/A0 */ + , <19 0 &gpio0 31 0> /* D19/A1 */ + , <20 0 &gpio0 25 0> /* D20/A2 */ + , <21 0 &gpio0 11 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 29 0> /* D18/A0 */ - , <1 0 &gpio0 31 0> /* D19/A1 */ - , <2 0 &gpio0 25 0> /* D20/A2 */ - , <3 0 &gpio0 11 0> /* D21/A3 */ - , <6 0 &gpio0 22 0> /* D4/A6 */ - , <7 0 &gpio1 0 0> /* D6/A7 */ - , <8 0 &gpio1 4 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio0 9 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 29 0> /* D18/A0 */ + , <1 0 &gpio0 31 0> /* D19/A1 */ + , <2 0 &gpio0 25 0> /* D20/A2 */ + , <3 0 &gpio0 11 0> /* D21/A3 */ + , <6 0 &gpio0 22 0> /* D4/A6 */ + , <7 0 &gpio1 0 0> /* D6/A7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + ; + }; }; diff --git a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi b/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi index 4a8ff82c0d4..df43c407eec 100644 --- a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi +++ b/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi @@ -4,36 +4,36 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index 3fff0835b90..f8007033155 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -10,117 +10,117 @@ #include "mikoto_520-pinctrl.dtsi" / { - model = "mikoto"; - compatible = "zhiayang,mikoto"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; - init-delay-ms = <50>; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 1>; - output-ohms = <10000000>; - full-ohms = <(10000000 + 4000000)>; - }; + model = "mikoto"; + compatible = "zhiayang,mikoto"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + init-delay-ms = <50>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 1>; + output-ohms = <10000000>; + full-ohms = <(10000000 + 4000000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twi"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twi"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - current-speed = <115200>; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nice60/Kconfig b/app/boards/arm/nice60/Kconfig index db7cf398305..dfca4f1b45b 100644 --- a/app/boards/arm/nice60/Kconfig +++ b/app/boards/arm/nice60/Kconfig @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on BOARD_NICE60 + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NICE60 diff --git a/app/boards/arm/nice60/Kconfig.board b/app/boards/arm/nice60/Kconfig.board index 778f79eb694..88db9ee861b 100644 --- a/app/boards/arm/nice60/Kconfig.board +++ b/app/boards/arm/nice60/Kconfig.board @@ -2,5 +2,5 @@ # SPDX-License-Identifier: MIT config BOARD_NICE60 - bool "nice!60" - depends on SOC_NRF52840_QIAA + bool "nice!60" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/nice60/Kconfig.defconfig b/app/boards/arm/nice60/Kconfig.defconfig index 39cf15405ab..f3347df9c6e 100644 --- a/app/boards/arm/nice60/Kconfig.defconfig +++ b/app/boards/arm/nice60/Kconfig.defconfig @@ -4,22 +4,22 @@ if BOARD_NICE60 config ZMK_KEYBOARD_NAME - default "nice!60" + default "nice!60" if USB_DEVICE_STACK config USB_NRFX - default y + default y endif # USB_DEVICE_STACK config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y endif # BOARD_NICE60 diff --git a/app/boards/arm/nice60/nice60-pinctrl.dtsi b/app/boards/arm/nice60/nice60-pinctrl.dtsi index ace80f10aae..9b0e198d396 100644 --- a/app/boards/arm/nice60/nice60-pinctrl.dtsi +++ b/app/boards/arm/nice60/nice60-pinctrl.dtsi @@ -4,9 +4,9 @@ */ &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; }; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index fdc65d6bca8..651dd555556 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -13,170 +13,170 @@ #include "nice60-pinctrl.dtsi" / { - model = "nice!60"; - compatible = "nice,60"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - zmk,underglow = &led_strip; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <5>; - map = < + model = "nice!60"; + compatible = "nice,60"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + zmk,underglow = &led_strip; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,13) RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,9) RC(4,10) RC(4,11) RC(4,13) - >; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&gpio1 15 GPIO_ACTIVE_HIGH> - , <&gpio0 29 GPIO_ACTIVE_HIGH> - , <&gpio0 31 GPIO_ACTIVE_HIGH> - , <&gpio0 30 GPIO_ACTIVE_HIGH> - , <&gpio0 28 GPIO_ACTIVE_HIGH> - , <&gpio0 2 GPIO_ACTIVE_HIGH> - , <&gpio0 3 GPIO_ACTIVE_HIGH> - , <&gpio1 3 GPIO_ACTIVE_HIGH> - , <&gpio1 7 GPIO_ACTIVE_HIGH> - , <&gpio1 4 GPIO_ACTIVE_HIGH> - , <&gpio1 6 GPIO_ACTIVE_HIGH> - , <&gpio1 5 GPIO_ACTIVE_HIGH> - , <&gpio1 1 GPIO_ACTIVE_HIGH> - , <&gpio1 2 GPIO_ACTIVE_HIGH> - ; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 806000)>; - }; + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio1 3 GPIO_ACTIVE_HIGH> + , <&gpio1 7 GPIO_ACTIVE_HIGH> + , <&gpio1 4 GPIO_ACTIVE_HIGH> + , <&gpio1 6 GPIO_ACTIVE_HIGH> + , <&gpio1 5 GPIO_ACTIVE_HIGH> + , <&gpio1 1 GPIO_ACTIVE_HIGH> + , <&gpio1 2 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &spi3 { - compatible = "nordic,nrf-spim"; - - pinctrl-0 = <&spi3_default>; - pinctrl-names = "default"; - status = "okay"; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <12>; /* LED strip length */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - color-mapping = ; - }; + compatible = "nordic,nrf-spim"; + + pinctrl-0 = <&spi3_default>; + pinctrl-names = "default"; + status = "okay"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <12>; /* LED strip length */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "mbr"; - reg = <0x00000000 0x00001000>; - }; - - code_partition: partition@1000 { - label = "code_partition"; - reg = <0x00001000 0x000d3000>; - }; - - /* - * The flash starting at 0x000d4000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@d4000 { - label = "storage"; - reg = <0x000d4000 0x00020000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "mbr"; + reg = <0x00000000 0x00001000>; + }; + + code_partition: partition@1000 { + label = "code_partition"; + reg = <0x00001000 0x000d3000>; + }; + + /* + * The flash starting at 0x000d4000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@d4000 { + label = "storage"; + reg = <0x000d4000 0x00020000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nice60/nice60.keymap b/app/boards/arm/nice60/nice60.keymap index edfec32e93e..3a35716321b 100644 --- a/app/boards/arm/nice60/nice60.keymap +++ b/app/boards/arm/nice60/nice60.keymap @@ -10,10 +10,10 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | @@ -21,16 +21,16 @@ // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | // | CTL | WIN | ALT | SPACE | ALT | WIN | MO(1) | CTL | // ------------------------------------------------------------------------------------------ - bindings = < - &gresc &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &mo 1 &kp RCTRL - >; - }; + bindings = < + &gresc &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &mo 1 &kp RCTRL + >; + }; - rgb_layer { + rgb_layer { // ------------------------------------------------------------------------------------------------ // | BT CLR | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | EFFECT REV | // | BT 1 | | UP | | HUEUP | SATUP | BRIUP | SPDUP | | | | | | | @@ -38,13 +38,13 @@ // | BT 3 | | | | | | | | | | | | // | BT 4 | | | TOG RGB | PRT SCR | | | DEL | // ------------------------------------------------------------------------------------------------ - bindings = < - &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &rgb_ug RGB_EFR - &bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans - &bt BT_SEL 1 &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &trans &trans &trans &trans &rgb_ug RGB_EFF - &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &bt BT_SEL 3 &trans &trans &rgb_ug RGB_TOG &kp PSCRN &trans &trans &kp DEL - >; - }; - }; + bindings = < + &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &rgb_ug RGB_EFR + &bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans + &bt BT_SEL 1 &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &trans &trans &trans &trans &rgb_ug RGB_EFF + &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_SEL 3 &trans &trans &rgb_ug RGB_TOG &kp PSCRN &trans &trans &kp DEL + >; + }; + }; }; diff --git a/app/boards/arm/nice_nano/Kconfig b/app/boards/arm/nice_nano/Kconfig index 0c9fbc79d8a..ac6828a4bbe 100644 --- a/app/boards/arm/nice_nano/Kconfig +++ b/app/boards/arm/nice_nano/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: MIT config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on (BOARD_NICE_NANO || BOARD_NICE_NANO_V2) + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_NICE_NANO || BOARD_NICE_NANO_V2) diff --git a/app/boards/arm/nice_nano/Kconfig.board b/app/boards/arm/nice_nano/Kconfig.board index 4a80b448ce3..8dd16512358 100644 --- a/app/boards/arm/nice_nano/Kconfig.board +++ b/app/boards/arm/nice_nano/Kconfig.board @@ -4,10 +4,10 @@ # SPDX-License-Identifier: MIT config BOARD_NICE_NANO - bool "nice!nano" - depends on SOC_NRF52840_QIAA + bool "nice!nano" + depends on SOC_NRF52840_QIAA config BOARD_NICE_NANO_V2 - bool "nice!nano v2" - depends on SOC_NRF52840_QIAA + bool "nice!nano v2" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/nice_nano/Kconfig.defconfig b/app/boards/arm/nice_nano/Kconfig.defconfig index ad3fefef315..ada59dd9f2e 100644 --- a/app/boards/arm/nice_nano/Kconfig.defconfig +++ b/app/boards/arm/nice_nano/Kconfig.defconfig @@ -4,22 +4,22 @@ if BOARD_NICE_NANO || BOARD_NICE_NANO_V2 config BOARD - default "nice_nano" + default "nice_nano" if USB_DEVICE_STACK config USB_NRFX - default y + default y endif # USB_DEVICE_STACK config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y endif # BOARD_NICE_NANO || BOARD_NICE_NANO_V2 diff --git a/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi b/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi index b972451bb5e..f1b569c05db 100644 --- a/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi @@ -5,50 +5,50 @@ */ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 */ - , <1 0 &gpio0 6 0> /* D1 */ - , <2 0 &gpio0 17 0> /* D2 */ - , <3 0 &gpio0 20 0> /* D3 */ - , <4 0 &gpio0 22 0> /* D4/A6 */ - , <5 0 &gpio0 24 0> /* D5 */ - , <6 0 &gpio1 0 0> /* D6/A7 */ - , <7 0 &gpio0 11 0> /* D7 */ - , <8 0 &gpio1 4 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio0 9 0> /* D10/A10 */ - , <16 0 &gpio0 10 0> /* D16 */ - , <14 0 &gpio1 11 0> /* D14 */ - , <15 0 &gpio1 13 0> /* D15 */ - , <18 0 &gpio1 15 0> /* D18/A0 */ - , <19 0 &gpio0 2 0> /* D19/A1 */ - , <20 0 &gpio0 29 0> /* D20/A2 */ - , <21 0 &gpio0 31 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 17 0> /* D2 */ + , <3 0 &gpio0 20 0> /* D3 */ + , <4 0 &gpio0 22 0> /* D4/A6 */ + , <5 0 &gpio0 24 0> /* D5 */ + , <6 0 &gpio1 0 0> /* D6/A7 */ + , <7 0 &gpio0 11 0> /* D7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio1 11 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + , <18 0 &gpio1 15 0> /* D18/A0 */ + , <19 0 &gpio0 2 0> /* D19/A1 */ + , <20 0 &gpio0 29 0> /* D20/A2 */ + , <21 0 &gpio0 31 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio1 15 0> /* D18/A0 */ - , <1 0 &gpio0 2 0> /* D19/A1 */ - , <2 0 &gpio0 29 0> /* D20/A2 */ - , <3 0 &gpio0 31 0> /* D21/A3 */ - , <6 0 &gpio0 22 0> /* D4/A6 */ - , <7 0 &gpio1 0 0> /* D6/A7 */ - , <8 0 &gpio1 4 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio0 9 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio1 15 0> /* D18/A0 */ + , <1 0 &gpio0 2 0> /* D19/A1 */ + , <2 0 &gpio0 29 0> /* D20/A2 */ + , <3 0 &gpio0 31 0> /* D21/A3 */ + , <6 0 &gpio0 22 0> /* D4/A6 */ + , <7 0 &gpio1 0 0> /* D6/A7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + ; + }; }; pro_micro_d: &pro_micro {}; diff --git a/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi b/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi index 18b90f21ffc..15c48509202 100644 --- a/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi +++ b/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi @@ -4,36 +4,36 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index e29df2057a6..4ee0df7fc43 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -8,21 +8,21 @@ #include "nice_nano.dtsi" / { - chosen { - zmk,battery = &vbatt; - }; + chosen { + zmk,battery = &vbatt; + }; - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; - }; + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + }; - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 806000)>; - }; + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; }; diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index ad5ef27805f..0c0a3823054 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -9,101 +9,101 @@ #include "arduino_pro_micro_pins.dtsi" / { - model = "nice!nano"; - compatible = "nice,nano"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; + model = "nice!nano"; + compatible = "nice,nano"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twi"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twi"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - current-speed = <115200>; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts index ed2b35f4ebf..b2fbcc81970 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2.dts +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -8,19 +8,19 @@ #include "nice_nano.dtsi" / { - chosen { - zmk,battery = &vbatt; - }; + chosen { + zmk,battery = &vbatt; + }; - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; - init-delay-ms = <50>; - }; + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + init-delay-ms = <50>; + }; - vbatt: vbatt { - compatible = "zmk,battery-nrf-vddh"; - label = "BATTERY"; - }; + vbatt: vbatt { + compatible = "zmk,battery-nrf-vddh"; + label = "BATTERY"; + }; }; diff --git a/app/boards/arm/nrf52840_m2/Kconfig b/app/boards/arm/nrf52840_m2/Kconfig index c7edeb8db6f..c9cb652352b 100644 --- a/app/boards/arm/nrf52840_m2/Kconfig +++ b/app/boards/arm/nrf52840_m2/Kconfig @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on BOARD_NRF52840_M2 + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NRF52840_M2 diff --git a/app/boards/arm/nrf52840_m2/Kconfig.board b/app/boards/arm/nrf52840_m2/Kconfig.board index 499010390cf..b2927ff2507 100644 --- a/app/boards/arm/nrf52840_m2/Kconfig.board +++ b/app/boards/arm/nrf52840_m2/Kconfig.board @@ -4,6 +4,6 @@ # SPDX-License-Identifier: MIT config BOARD_NRF52840_M2 - bool "nrf52480_m2" - depends on SOC_NRF52840_QIAA + bool "nrf52480_m2" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/nrf52840_m2/Kconfig.defconfig b/app/boards/arm/nrf52840_m2/Kconfig.defconfig index 4e1679bae02..50a049bb926 100644 --- a/app/boards/arm/nrf52840_m2/Kconfig.defconfig +++ b/app/boards/arm/nrf52840_m2/Kconfig.defconfig @@ -4,22 +4,22 @@ if BOARD_NRF52840_M2 config BOARD - default "nrf52480_m2" + default "nrf52480_m2" if USB_DEVICE_STACK config USB_NRFX - default y + default y endif # USB_DEVICE_STACK config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y endif # BOARD_NRF52840_M2 diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts index dc22c40b566..253e6b77d56 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts @@ -8,105 +8,105 @@ #include / { - model = "Makerdiary nRF52840 M.2 module"; - compatible = "makerdiary,nrf52840_m2"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; - - leds { - compatible = "gpio-leds"; - red_led: led_0 { - gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>; - label = "Red LED"; - }; - green_led: led_1 { - gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>; - label = "Green LED"; - }; - blue_led: led_2 { - gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 0>; - output-ohms = <1000000>; - full-ohms = <(1000000 + 1000000)>; - }; + model = "Makerdiary nRF52840 M.2 module"; + compatible = "makerdiary,nrf52840_m2"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + red_led: led_0 { + gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>; + label = "Red LED"; + }; + green_led: led_1 { + gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>; + label = "Green LED"; + }; + blue_led: led_2 { + gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 0>; + output-ohms = <1000000>; + full-ohms = <(1000000 + 1000000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &usbd { - compatible = "nordic,nrf-usbd"; - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + compatible = "nordic,nrf-usbd"; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/Kconfig b/app/boards/arm/nrfmicro/Kconfig index 12b06621781..233ddbad460 100644 --- a/app/boards/arm/nrfmicro/Kconfig +++ b/app/boards/arm/nrfmicro/Kconfig @@ -1,10 +1,10 @@ config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833) + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833) config BOARD_NRFMICRO_CHARGER - bool "Enable battery charger" - default y - depends on (BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833) + bool "Enable battery charger" + default y + depends on (BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833) diff --git a/app/boards/arm/nrfmicro/Kconfig.board b/app/boards/arm/nrfmicro/Kconfig.board index 244242a9360..441de5cff7e 100644 --- a/app/boards/arm/nrfmicro/Kconfig.board +++ b/app/boards/arm/nrfmicro/Kconfig.board @@ -4,17 +4,17 @@ # SPDX-License-Identifier: MIT config BOARD_NRFMICRO_11 - bool "nrfmicro_11" - depends on SOC_NRF52840_QIAA + bool "nrfmicro_11" + depends on SOC_NRF52840_QIAA config BOARD_NRFMICRO_11_FLIPPED - bool "nrfmicro_11_flipped" - depends on SOC_NRF52840_QIAA + bool "nrfmicro_11_flipped" + depends on SOC_NRF52840_QIAA config BOARD_NRFMICRO_13 - bool "nrfmicro_13" - depends on SOC_NRF52840_QIAA + bool "nrfmicro_13" + depends on SOC_NRF52840_QIAA config BOARD_NRFMICRO_13_52833 - bool "nrfmicro_13_52833" - depends on SOC_NRF52833_QIAA + bool "nrfmicro_13_52833" + depends on SOC_NRF52833_QIAA diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index 751d592b955..7d752ac6ee6 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -6,31 +6,31 @@ if BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 config BOARD - default "nrfmicro" + default "nrfmicro" if USB_DEVICE_STACK config USB_NRFX - default y + default y endif # USB_DEVICE_STACK config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y config PINMUX - default y + default y -if BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 +if BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 config BOARD_NRFMICRO_CHARGER - default y + default y endif # BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi index 537aaed35b0..01e342c0df5 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi @@ -6,50 +6,50 @@ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 */ - , <1 0 &gpio0 6 0> /* D1 */ - , <2 0 &gpio0 15 0> /* D2 */ - , <3 0 &gpio0 17 0> /* D3 */ - , <4 0 &gpio0 20 0> /* D4/A6 */ - , <5 0 &gpio0 13 0> /* D5 */ - , <6 0 &gpio0 24 0> /* D6/A7 */ - , <7 0 &gpio0 9 0> /* D7 */ - , <8 0 &gpio0 10 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio1 11 0> /* D10/A10 */ - , <16 0 &gpio0 28 0> /* D16 */ - , <14 0 &gpio0 3 0> /* D14 */ - , <15 0 &gpio1 13 0> /* D15 */ - , <18 0 &gpio0 2 0> /* D18/A0 */ - , <19 0 &gpio0 29 0> /* D19/A1 */ - , <20 0 &gpio0 31 0> /* D20/A2 */ - , <21 0 &gpio0 30 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + , <18 0 &gpio0 2 0> /* D18/A0 */ + , <19 0 &gpio0 29 0> /* D19/A1 */ + , <20 0 &gpio0 31 0> /* D20/A2 */ + , <21 0 &gpio0 30 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 2 0> /* D18/A0 */ - , <1 0 &gpio0 29 0> /* D19/A1 */ - , <2 0 &gpio0 31 0> /* D20/A2 */ - , <3 0 &gpio0 30 0> /* D21/A3 */ - , <6 0 &gpio0 20 0> /* D4/A6 */ - , <7 0 &gpio0 24 0> /* D6/A7 */ - , <8 0 &gpio0 10 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio1 11 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* D18/A0 */ + , <1 0 &gpio0 29 0> /* D19/A1 */ + , <2 0 &gpio0 31 0> /* D20/A2 */ + , <3 0 &gpio0 30 0> /* D21/A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; }; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi index 651edb94166..76ece25f786 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi @@ -6,50 +6,50 @@ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 */ - , <1 0 &gpio0 6 0> /* D1 */ - , <2 0 &gpio0 15 0> /* D2 */ - , <3 0 &gpio0 17 0> /* D3 */ - , <4 0 &gpio0 20 0> /* D4/A6 */ - , <5 0 &gpio0 13 0> /* D5 */ - , <6 0 &gpio0 24 0> /* D6/A7 */ - , <7 0 &gpio0 9 0> /* D7 */ - , <8 0 &gpio0 10 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio1 4 0> /* D10/A10 */ - , <16 0 &gpio0 28 0> /* D16 */ - , <14 0 &gpio0 3 0> /* D14 */ - , <15 0 &gpio1 5 0> /* D15 */ - , <18 0 &gpio0 2 0> /* D18/A0 */ - , <19 0 &gpio0 29 0> /* D19/A1 */ - , <20 0 &gpio0 31 0> /* D20/A2 */ - , <21 0 &gpio0 30 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 4 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 5 0> /* D15 */ + , <18 0 &gpio0 2 0> /* D18/A0 */ + , <19 0 &gpio0 29 0> /* D19/A1 */ + , <20 0 &gpio0 31 0> /* D20/A2 */ + , <21 0 &gpio0 30 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 2 0> /* D18/A0 */ - , <1 0 &gpio0 29 0> /* D19/A1 */ - , <2 0 &gpio0 31 0> /* D20/A2 */ - , <3 0 &gpio0 30 0> /* D21/A3 */ - , <6 0 &gpio0 20 0> /* D4/A6 */ - , <7 0 &gpio0 24 0> /* D6/A7 */ - , <8 0 &gpio0 10 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio1 11 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* D18/A0 */ + , <1 0 &gpio0 29 0> /* D19/A1 */ + , <2 0 &gpio0 31 0> /* D20/A2 */ + , <3 0 &gpio0 30 0> /* D21/A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; }; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi index 887a31446c5..923efbbf256 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi @@ -5,50 +5,50 @@ */ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 */ - , <1 0 &gpio0 6 0> /* D1 */ - , <2 0 &gpio0 30 0> /* D2 */ - , <3 0 &gpio0 31 0> /* D3 */ - , <4 0 &gpio0 29 0> /* D4/A6 */ - , <5 0 &gpio0 2 0> /* D5 */ - , <6 0 &gpio1 13 0> /* D6/A7 */ - , <7 0 &gpio0 3 0> /* D7 */ - , <8 0 &gpio0 28 0> /* D8/A8 */ - , <9 0 &gpio1 11 0> /* D9/A9 */ - , <10 0 &gpio1 6 0> /* D10/A10 */ - , <16 0 &gpio0 10 0> /* D16 */ - , <14 0 &gpio0 9 0> /* D14 */ - , <15 0 &gpio0 24 0> /* D15 */ - , <18 0 &gpio0 13 0> /* D18/A0 */ - , <19 0 &gpio0 20 0> /* D19/A1 */ - , <20 0 &gpio0 17 0> /* D20/A2 */ - , <21 0 &gpio0 15 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 30 0> /* D2 */ + , <3 0 &gpio0 31 0> /* D3 */ + , <4 0 &gpio0 29 0> /* D4/A6 */ + , <5 0 &gpio0 2 0> /* D5 */ + , <6 0 &gpio1 13 0> /* D6/A7 */ + , <7 0 &gpio0 3 0> /* D7 */ + , <8 0 &gpio0 28 0> /* D8/A8 */ + , <9 0 &gpio1 11 0> /* D9/A9 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio0 9 0> /* D14 */ + , <15 0 &gpio0 24 0> /* D15 */ + , <18 0 &gpio0 13 0> /* D18/A0 */ + , <19 0 &gpio0 20 0> /* D19/A1 */ + , <20 0 &gpio0 17 0> /* D20/A2 */ + , <21 0 &gpio0 15 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 13 0> /* D18/A0 */ - , <1 0 &gpio0 20 0> /* D19/A1 */ - , <2 0 &gpio0 17 0> /* D20/A2 */ - , <3 0 &gpio0 15 0> /* D21/A3 */ - , <6 0 &gpio0 29 0> /* D4/A6 */ - , <7 0 &gpio1 13 0> /* D6/A7 */ - , <8 0 &gpio0 28 0> /* D8/A8 */ - , <9 0 &gpio1 11 0> /* D9/A9 */ - , <10 0 &gpio1 6 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 13 0> /* D18/A0 */ + , <1 0 &gpio0 20 0> /* D19/A1 */ + , <2 0 &gpio0 17 0> /* D20/A2 */ + , <3 0 &gpio0 15 0> /* D21/A3 */ + , <6 0 &gpio0 29 0> /* D4/A6 */ + , <7 0 &gpio1 13 0> /* D6/A7 */ + , <8 0 &gpio0 28 0> /* D8/A8 */ + , <9 0 &gpio1 11 0> /* D9/A9 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ + ; + }; }; pro_micro_d: &pro_micro {}; diff --git a/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi b/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi index a54c2598838..22bc11d4013 100644 --- a/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi +++ b/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi @@ -4,36 +4,36 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi b/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi index a53856901ea..35a46e5ae52 100644 --- a/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi +++ b/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi @@ -4,36 +4,36 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 48186ac9c2f..68331edc692 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -10,102 +10,102 @@ #include "nrfmicro-pinctrl.dtsi" / { - model = "nrfmicro"; - compatible = "joric,nrfmicro"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; - }; + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + }; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twim"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index 656873a0bb2..9977617c768 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -10,102 +10,102 @@ #include "nrfmicro-flipped-pinctrl.dtsi" / { - model = "nrfmicro"; - compatible = "joric,nrfmicro"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; - }; + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + }; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twim"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index 9fb68562fe2..300838ff1ab 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -10,115 +10,115 @@ #include "nrfmicro-pinctrl.dtsi" / { - model = "nrfmicro"; - compatible = "joric,nrfmicro"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 820000)>; - }; + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twim"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index 9ade364d4c3..86bcb5e5753 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -10,115 +10,115 @@ #include "nrfmicro-pinctrl.dtsi" / { - model = "nrfmicro"; - compatible = "joric,nrfmicro"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 820000)>; - }; + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twim"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x00046000>; - }; - - /* - * The flash starting at 0x0006c000 and ending at - * 0x00073fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@6c000 { - label = "storage"; - reg = <0x0006c000 0x00008000>; - }; - - boot_partition: partition@74000 { - label = "adafruit_boot"; - reg = <0x00074000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x00046000>; + }; + + /* + * The flash starting at 0x0006c000 and ending at + * 0x00073fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@6c000 { + label = "storage"; + reg = <0x0006c000 0x00008000>; + }; + + boot_partition: partition@74000 { + label = "adafruit_boot"; + reg = <0x00074000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/pillbug/pillbug-pinctrl.dtsi b/app/boards/arm/pillbug/pillbug-pinctrl.dtsi index 8751bc4bd58..8a9e9fc21ab 100644 --- a/app/boards/arm/pillbug/pillbug-pinctrl.dtsi +++ b/app/boards/arm/pillbug/pillbug-pinctrl.dtsi @@ -4,53 +4,53 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - spi1_default: spi1_default { - group1 { - psels = , - , - ; - }; - }; + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; - spi1_sleep: spi1_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/planck/Kconfig.board b/app/boards/arm/planck/Kconfig.board index fe15e1a9f9e..28b7381fb03 100644 --- a/app/boards/arm/planck/Kconfig.board +++ b/app/boards/arm/planck/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_PLANCK_REV6 - bool "Planck V6 Keyboard" - depends on SOC_STM32F303XC + bool "Planck V6 Keyboard" + depends on SOC_STM32F303XC diff --git a/app/boards/arm/planck/Kconfig.defconfig b/app/boards/arm/planck/Kconfig.defconfig index 913c1c137d1..d1304da0588 100644 --- a/app/boards/arm/planck/Kconfig.defconfig +++ b/app/boards/arm/planck/Kconfig.defconfig @@ -6,10 +6,10 @@ if BOARD_PLANCK_REV6 config ZMK_KEYBOARD_NAME - default "Planck V6" + default "Planck V6" config ZMK_USB - default y + default y config ZMK_KSCAN_MATRIX_POLLING default y diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index 9723959537c..5fdd2c21aee 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -10,123 +10,123 @@ #include / { - model = "Plack PCD, rev6"; - compatible = "planck,rev6", "st,stm32f303"; + model = "Plack PCD, rev6"; + compatible = "planck,rev6", "st,stm32f303"; - chosen { - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,kscan = &kscan0; - zmk,matrix_transform = &layout_grid_transform; - }; + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,kscan = &kscan0; + zmk,matrix_transform = &layout_grid_transform; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; diode-direction = "col2row"; - row-gpios - = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpiob 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioc 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioc 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioc 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&gpiob 11 GPIO_ACTIVE_HIGH> - , <&gpiob 10 GPIO_ACTIVE_HIGH> - , <&gpiob 2 GPIO_ACTIVE_HIGH> - , <&gpiob 1 GPIO_ACTIVE_HIGH> - , <&gpioa 7 GPIO_ACTIVE_HIGH> - , <&gpiob 0 GPIO_ACTIVE_HIGH> - ; - }; + row-gpios + = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpiob 11 GPIO_ACTIVE_HIGH> + , <&gpiob 10 GPIO_ACTIVE_HIGH> + , <&gpiob 2 GPIO_ACTIVE_HIGH> + , <&gpiob 1 GPIO_ACTIVE_HIGH> + , <&gpioa 7 GPIO_ACTIVE_HIGH> + , <&gpiob 0 GPIO_ACTIVE_HIGH> + ; + }; layout_grid_transform: - keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <6>; - rows = <8>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) - RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,4) RC(7,5) RC(7,0) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) - >; - }; + keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,4) RC(7,5) RC(7,0) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) + >; + }; layout_mit_transform: - keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <6>; - rows = <8>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) - RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,4) RC(7,0) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) - >; - }; + keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,4) RC(7,0) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) + >; + }; layout_2x2u_transform: - keymap_transform_2 { - compatible = "zmk,matrix-transform"; - columns = <6>; - rows = <8>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) - RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,5) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) - >; - }; + keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) + RC(3,0) RC(3,1) RC(3,2) RC(7,3) RC(7,5) RC(7,1) RC(7,2) RC(3,3) RC(3,4) RC(3,5) + >; + }; }; &usb { - pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; - pinctrl-names = "default"; - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &clk_hse { - status = "okay"; - clock-frequency = ; + status = "okay"; + clock-frequency = ; }; &pll { - prediv = <1>; - mul = <9>; - clocks = <&clk_hse>; - status = "okay"; + prediv = <1>; + mul = <9>; + clocks = <&clk_hse>; + status = "okay"; }; &rcc { - clocks = <&pll>; - clock-frequency = ; - ahb-prescaler = <1>; - apb1-prescaler = <2>; - apb2-prescaler = <1>; + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <2>; + apb2-prescaler = <1>; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; - /* Set 6Kb of storage at the end of the 256Kb of flash */ - storage_partition: partition@3e800 { - label = "storage"; - reg = <0x0003e800 0x00001800>; - }; - }; + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; }; diff --git a/app/boards/arm/planck/planck_rev6.keymap b/app/boards/arm/planck/planck_rev6.keymap index 7e4f673264a..65138057283 100644 --- a/app/boards/arm/planck/planck_rev6.keymap +++ b/app/boards/arm/planck/planck_rev6.keymap @@ -8,39 +8,39 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - // ----------------------------------------------------------------------------------------- - // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | - // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | - // | | LCTL | LALT | LGUI | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | - bindings = < - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC - &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET - &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &trans &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT - >; - }; + default_layer { + // ----------------------------------------------------------------------------------------- + // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | + // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | + // | | LCTL | LALT | LGUI | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET + &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &trans &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + }; - lower { - bindings = < - &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL - &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE - &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(HASH) &kp LS(BSLH) &kp HOME &kp END &trans - &trans &trans &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP - >; - }; + lower { + bindings = < + &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(HASH) &kp LS(BSLH) &kp HOME &kp END &trans + &trans &trans &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + >; + }; - raise { - bindings = < - &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC - &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH - &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans - &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP - >; - }; - }; + raise { + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans + &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + >; + }; + }; }; diff --git a/app/boards/arm/preonic/Kconfig.board b/app/boards/arm/preonic/Kconfig.board index a930b90f264..39f35db6b50 100644 --- a/app/boards/arm/preonic/Kconfig.board +++ b/app/boards/arm/preonic/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_PREONIC_REV3 - bool "Preonic V3 Keyboard" - depends on SOC_STM32F303XC + bool "Preonic V3 Keyboard" + depends on SOC_STM32F303XC diff --git a/app/boards/arm/proton_c/Kconfig.board b/app/boards/arm/proton_c/Kconfig.board index ffa7ffd648b..1596077fc1d 100644 --- a/app/boards/arm/proton_c/Kconfig.board +++ b/app/boards/arm/proton_c/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_QMK_PROTON_C - bool "QMK Proton-C" - depends on SOC_STM32F303XC + bool "QMK Proton-C" + depends on SOC_STM32F303XC diff --git a/app/boards/arm/proton_c/Kconfig.defconfig b/app/boards/arm/proton_c/Kconfig.defconfig index 78ccbabd6fc..f5089119c13 100644 --- a/app/boards/arm/proton_c/Kconfig.defconfig +++ b/app/boards/arm/proton_c/Kconfig.defconfig @@ -6,9 +6,9 @@ if BOARD_QMK_PROTON_C config BOARD - default "proton_c" + default "proton_c" config ZMK_USB - default y + default y endif # BOARD_QMK_PROTON_C diff --git a/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi b/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi index 9a026adf0d8..1831194289c 100644 --- a/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi @@ -5,50 +5,50 @@ */ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpioa 10 0> /* D0 */ - , <1 0 &gpioa 9 0> /* D1 */ - , <2 0 &gpiob 7 0> /* D2 */ - , <3 0 &gpiob 6 0> /* D3 */ - , <4 0 &gpiob 5 0> /* D4/A6 */ - , <5 0 &gpiob 4 0> /* D5 */ - , <6 0 &gpiob 3 0> /* D6/A7 */ - , <7 0 &gpiob 2 0> /* D7 */ - , <8 0 &gpiob 1 0> /* D8/A8 */ - , <9 0 &gpiob 0 0> /* D9/A9 */ - , <10 0 &gpiob 9 0> /* D10/A10 */ - , <16 0 &gpiob 15 0> /* D16 */ - , <14 0 &gpiob 14 0> /* D14 */ - , <15 0 &gpiob 13 0> /* D15 */ - , <18 0 &gpiob 8 0> /* D18/A0 */ - , <19 0 &gpioa 0 0> /* D19/A1 */ - , <20 0 &gpioa 1 0> /* D20/A2 */ - , <21 0 &gpioa 2 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpioa 10 0> /* D0 */ + , <1 0 &gpioa 9 0> /* D1 */ + , <2 0 &gpiob 7 0> /* D2 */ + , <3 0 &gpiob 6 0> /* D3 */ + , <4 0 &gpiob 5 0> /* D4/A6 */ + , <5 0 &gpiob 4 0> /* D5 */ + , <6 0 &gpiob 3 0> /* D6/A7 */ + , <7 0 &gpiob 2 0> /* D7 */ + , <8 0 &gpiob 1 0> /* D8/A8 */ + , <9 0 &gpiob 0 0> /* D9/A9 */ + , <10 0 &gpiob 9 0> /* D10/A10 */ + , <16 0 &gpiob 15 0> /* D16 */ + , <14 0 &gpiob 14 0> /* D14 */ + , <15 0 &gpiob 13 0> /* D15 */ + , <18 0 &gpiob 8 0> /* D18/A0 */ + , <19 0 &gpioa 0 0> /* D19/A1 */ + , <20 0 &gpioa 1 0> /* D20/A2 */ + , <21 0 &gpioa 2 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpiob 8 0> /* D18/A0 */ - , <1 0 &gpioa 0 0> /* D19/A1 */ - , <2 0 &gpioa 1 0> /* D20/A2 */ - , <3 0 &gpioa 2 0> /* D21/A3 */ - , <6 0 &gpiob 5 0> /* D4/A6 */ - , <7 0 &gpiob 3 0> /* D6/A7 */ - , <8 0 &gpiob 1 0> /* D8/A8 */ - , <9 0 &gpiob 0 0> /* D9/A9 */ - , <10 0 &gpiob 9 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpiob 8 0> /* D18/A0 */ + , <1 0 &gpioa 0 0> /* D19/A1 */ + , <2 0 &gpioa 1 0> /* D20/A2 */ + , <3 0 &gpioa 2 0> /* D21/A3 */ + , <6 0 &gpiob 5 0> /* D4/A6 */ + , <7 0 &gpiob 3 0> /* D6/A7 */ + , <8 0 &gpiob 1 0> /* D8/A8 */ + , <9 0 &gpiob 0 0> /* D9/A9 */ + , <10 0 &gpiob 9 0> /* D10/A10 */ + ; + }; }; pro_micro_d: &pro_micro {}; diff --git a/app/boards/arm/proton_c/proton_c.dts b/app/boards/arm/proton_c/proton_c.dts index df63427f894..b5a490eeab6 100644 --- a/app/boards/arm/proton_c/proton_c.dts +++ b/app/boards/arm/proton_c/proton_c.dts @@ -10,91 +10,91 @@ #include "arduino_pro_micro_pins.dtsi" / { - model = "QMK Proton C"; - compatible = "qmk,proton_c", "st,stm32f303"; + model = "QMK Proton C"; + compatible = "qmk,proton_c", "st,stm32f303"; - chosen { - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart0; - }; + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart0; + }; - aliases { - led0 = &led; - }; + aliases { + led0 = &led; + }; - leds { - compatible = "gpio-leds"; - led: led_0 { - gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; - label = "User LED"; - }; - }; + leds { + compatible = "gpio-leds"; + led: led_0 { + gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; + label = "User LED"; + }; + }; }; &usart1 { - pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; - pinctrl-names = "default"; + pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; + pinctrl-names = "default"; }; &spi2 { - pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>; - pinctrl-names = "default"; + pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>; + pinctrl-names = "default"; }; &i2c1 { - pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>; - pinctrl-names = "default"; + pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>; + pinctrl-names = "default"; }; &clk_hse { - status = "okay"; - clock-frequency = ; + status = "okay"; + clock-frequency = ; }; &pll { - prediv = <1>; - mul = <9>; - clocks = <&clk_hse>; - status = "okay"; + prediv = <1>; + mul = <9>; + clocks = <&clk_hse>; + status = "okay"; }; &rcc { - clocks = <&pll>; - clock-frequency = ; - ahb-prescaler = <1>; - apb1-prescaler = <2>; - apb2-prescaler = <1>; + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <2>; + apb2-prescaler = <1>; }; &usb { - pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; - pinctrl-names = "default"; - status = "okay"; - cdc_acm_uart0: cdc_acm_uart0 { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; + status = "okay"; + cdc_acm_uart0: cdc_acm_uart0 { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &rtc { - status = "okay"; + status = "okay"; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; - /* Set 6Kb of storage at the end of the 256Kb of flash */ - storage_partition: partition@3e800 { - label = "storage"; - reg = <0x0003e800 0x00001800>; - }; - }; + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; }; diff --git a/app/boards/arm/puchi_ble/Kconfig.board b/app/boards/arm/puchi_ble/Kconfig.board index 0763888513f..0f5b7f96d84 100644 --- a/app/boards/arm/puchi_ble/Kconfig.board +++ b/app/boards/arm/puchi_ble/Kconfig.board @@ -4,5 +4,5 @@ # SPDX-License-Identifier: MIT config BOARD_PUCHI_BLE_v1 - bool "puchi_ble_v1" - depends on SOC_NRF52840_QIAA + bool "puchi_ble_v1" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/puchi_ble/Kconfig.defconfig b/app/boards/arm/puchi_ble/Kconfig.defconfig index 94d12c17b63..c4fca8e1f31 100644 --- a/app/boards/arm/puchi_ble/Kconfig.defconfig +++ b/app/boards/arm/puchi_ble/Kconfig.defconfig @@ -4,25 +4,25 @@ if BOARD_PUCHI_BLE_v1 config BOARD - default "puchi_ble" + default "puchi_ble" if USB_DEVICE_STACK config USB_NRFX - default y + default y endif # USB_DEVICE_STACK config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y config PINMUX - default y + default y endif # BOARD_PUCHI_BLE_v1 diff --git a/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi b/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi index ed3317f1c73..3037ea3e14b 100644 --- a/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/puchi_ble/arduino_pro_micro_pins.dtsi @@ -6,50 +6,50 @@ / { - pro_micro: connector { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 */ - , <1 0 &gpio0 6 0> /* D1 */ - , <2 0 &gpio0 15 0> /* D2 */ - , <3 0 &gpio0 17 0> /* D3 */ - , <4 0 &gpio0 20 0> /* D4/A6 */ - , <5 0 &gpio0 13 0> /* D5 */ - , <6 0 &gpio0 24 0> /* D6/A7 */ - , <7 0 &gpio0 9 0> /* D7 */ - , <8 0 &gpio0 10 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio1 11 0> /* D10/A10 */ - , <16 0 &gpio0 28 0> /* D16 */ - , <14 0 &gpio0 3 0> /* D14 */ - , <15 0 &gpio1 13 0> /* D15 */ - , <18 0 &gpio0 2 0> /* D18/A0 */ - , <19 0 &gpio0 29 0> /* D19/A1 */ - , <20 0 &gpio0 31 0> /* D20/A2 */ - , <21 0 &gpio0 30 0> /* D21/A3 */ - ; - }; + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + , <18 0 &gpio0 2 0> /* D18/A0 */ + , <19 0 &gpio0 29 0> /* D19/A1 */ + , <20 0 &gpio0 31 0> /* D20/A2 */ + , <21 0 &gpio0 30 0> /* D21/A3 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 2 0> /* D18/A0 */ - , <1 0 &gpio0 29 0> /* D19/A1 */ - , <2 0 &gpio0 31 0> /* D20/A2 */ - , <3 0 &gpio0 30 0> /* D21/A3 */ - , <6 0 &gpio0 20 0> /* D4/A6 */ - , <7 0 &gpio0 24 0> /* D6/A7 */ - , <8 0 &gpio0 10 0> /* D8/A8 */ - , <9 0 &gpio1 6 0> /* D9/A9 */ - , <10 0 &gpio1 11 0> /* D10/A10 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* D18/A0 */ + , <1 0 &gpio0 29 0> /* D19/A1 */ + , <2 0 &gpio0 31 0> /* D20/A2 */ + , <3 0 &gpio0 30 0> /* D21/A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; }; diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi b/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi index a53856901ea..35a46e5ae52 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi +++ b/app/boards/arm/puchi_ble/puchi_ble_v1-pinctrl.dtsi @@ -4,36 +4,36 @@ */ &pinctrl { - uart0_default: uart0_default { - group1 { - psels = ; - bias-pull-up; - }; - group2 { - psels = ; - }; - }; + uart0_default: uart0_default { + group1 { + psels = ; + bias-pull-up; + }; + group2 { + psels = ; + }; + }; - uart0_sleep: uart0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; - i2c0_default: i2c0_default { - group1 { - psels = , - ; - }; - }; + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; - i2c0_sleep: i2c0_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.dts b/app/boards/arm/puchi_ble/puchi_ble_v1.dts index a8f25c37d06..b056f7113e1 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1.dts +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.dts @@ -10,115 +10,115 @@ #include "puchi_ble_v1-pinctrl.dtsi" / { - model = "puchi_ble"; - compatible = "puchi_ble"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - ext-power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 820000)>; - }; + model = "puchi_ble"; + compatible = "puchi_ble"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &i2c0 { - compatible = "nordic,nrf-twi"; - pinctrl-0 = <&i2c0_default>; - pinctrl-1 = <&i2c0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-twi"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; }; &uart0 { - compatible = "nordic,nrf-uarte"; - pinctrl-0 = <&uart0_default>; - pinctrl-1 = <&uart0_sleep>; - pinctrl-names = "default", "sleep"; + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "softdevice"; - reg = <0x00000000 0x00026000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000c6000>; - }; - - /* - * The flash starting at 0x000ec000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000ec000 0x00008000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/s40nc/Kconfig.board b/app/boards/arm/s40nc/Kconfig.board index 673e3b24c6a..e703d7269af 100644 --- a/app/boards/arm/s40nc/Kconfig.board +++ b/app/boards/arm/s40nc/Kconfig.board @@ -2,5 +2,5 @@ # SPDX-License-Identifier: MIT config BOARD_S40NC - bool "S40NC" - depends on SOC_NRF52840_QIAA + bool "S40NC" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/s40nc/Kconfig.defconfig b/app/boards/arm/s40nc/Kconfig.defconfig index 266f8443b45..11e62cf54c5 100644 --- a/app/boards/arm/s40nc/Kconfig.defconfig +++ b/app/boards/arm/s40nc/Kconfig.defconfig @@ -4,25 +4,25 @@ if BOARD_S40NC config ZMK_KEYBOARD_NAME - default "S40NC" + default "S40NC" if USB config USB_NRFX - default y + default y config USB_DEVICE_STACK - default y + default y endif # USB config BT_CTLR - default BT + default BT config ZMK_BLE - default y + default y config ZMK_USB - default y + default y endif # BOARD_S40NC diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index 5b588b45ffe..6eb9e2a561a 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -9,137 +9,137 @@ #include / { - model = "S40NC"; - compatible = "s40nc"; - - chosen { - zephyr,code-partition = &code_partition; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; - map = < + model = "S40NC"; + compatible = "s40nc"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,11) RC(2,0) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,4) RC(3,6) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - >; - }; - - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&gpio1 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&gpio1 2 GPIO_ACTIVE_HIGH> - , <&gpio1 1 GPIO_ACTIVE_HIGH> - , <&gpio1 3 GPIO_ACTIVE_HIGH> - , <&gpio1 0 GPIO_ACTIVE_HIGH> - , <&gpio0 22 GPIO_ACTIVE_HIGH> - , <&gpio1 15 GPIO_ACTIVE_HIGH> - , <&gpio0 3 GPIO_ACTIVE_HIGH> - , <&gpio0 2 GPIO_ACTIVE_HIGH> - , <&gpio0 28 GPIO_ACTIVE_HIGH> - , <&gpio0 29 GPIO_ACTIVE_HIGH> - , <&gpio0 30 GPIO_ACTIVE_HIGH> - , <&gpio0 31 GPIO_ACTIVE_HIGH> - ; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 2>; - output-ohms = <2000000>; - full-ohms = <(2000000 + 820000)>; - }; + >; + }; + + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio1 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio1 2 GPIO_ACTIVE_HIGH> + , <&gpio1 1 GPIO_ACTIVE_HIGH> + , <&gpio1 3 GPIO_ACTIVE_HIGH> + , <&gpio1 0 GPIO_ACTIVE_HIGH> + , <&gpio0 22 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &gpiote { - status = "okay"; + status = "okay"; }; &gpio0 { - status = "okay"; + status = "okay"; }; &gpio1 { - status = "okay"; + status = "okay"; }; &usbd { - status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; &flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - sd_partition: partition@0 { - label = "mbr"; - reg = <0x00000000 0x00001000>; - }; - - code_partition: partition@1000 { - label = "code_partition"; - reg = <0x00001000 0x000d3000>; - }; - - /* - * The flash starting at 0x000d4000 and ending at - * 0x000f3fff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@d4000 { - label = "storage"; - reg = <0x000d4000 0x00020000>; - }; - - boot_partition: partition@f4000 { - label = "adafruit_boot"; - reg = <0x000f4000 0x0000c000>; - }; - }; + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "mbr"; + reg = <0x00000000 0x00001000>; + }; + + code_partition: partition@1000 { + label = "code_partition"; + reg = <0x00001000 0x000d3000>; + }; + + /* + * The flash starting at 0x000d4000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@d4000 { + label = "storage"; + reg = <0x000d4000 0x00020000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; }; diff --git a/app/boards/arm/s40nc/s40nc.keymap b/app/boards/arm/s40nc/s40nc.keymap index f0e60e7d109..dfc352d79d3 100644 --- a/app/boards/arm/s40nc/s40nc.keymap +++ b/app/boards/arm/s40nc/s40nc.keymap @@ -15,44 +15,44 @@ #define CONTROL 3 / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < + default_layer { + bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &mo LOWER &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp ENTER &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp FSLH &kp UP &kp RSHFT &kp LCTRL &kp LGUI &kp LALT < LOWER SPACE < CONTROL SPACE < RAISE SPACE &kp LEFT &kp DOWN &kp RIGHT - >; - }; + >; + }; - lower_layer { - bindings = < + lower_layer { + bindings = < &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL &kp PSCRN &kp MINUS &kp EQUAL &trans &trans &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp APOS &trans &trans &trans &trans &trans &trans &trans &kp COMMA &kp DOT &kp PG_UP &kp BSLH &trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END - >; - }; + >; + }; raise_layer { - bindings = < + bindings = < &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &trans &kp PSCRN &kp UNDER &kp PLUS &trans &trans &trans &trans &kp LBRC &kp RBRC &kp COLON &kp DQT &trans &trans &trans &trans &trans &trans &trans &kp LT &kp GT &kp PG_UP &kp PIPE &trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END - >; - }; + >; + }; control_layer { - bindings = < + bindings = < &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp C_PP &bt BT_SEL 0 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &kp K_LOCK &bt BT_SEL 1 &out OUT_USB &kp CAPS &kp KP_NUM &kp SLCK &trans &trans &kp COMMA &kp DOT &kp K_VOL_UP &kp K_MUTE &bt BT_SEL 2 &out OUT_BLE &kp PAUSE_BREAK &sys_reset &trans &bootloader &kp C_BRI_DN &kp K_VOL_DN &kp C_BRI_UP - >; - }; - }; + >; + }; + }; }; diff --git a/app/boards/native_posix.overlay b/app/boards/native_posix.overlay index 2c1ed79d0e6..f8a8f700348 100644 --- a/app/boards/native_posix.overlay +++ b/app/boards/native_posix.overlay @@ -3,16 +3,16 @@ #include / { - chosen { - zmk,kscan = &kscan; - }; + chosen { + zmk,kscan = &kscan; + }; - kscan: kscan { - compatible = "zmk,kscan-mock"; - label = "KSCAN_MOCK"; + kscan: kscan { + compatible = "zmk,kscan-mock"; + label = "KSCAN_MOCK"; - rows = <2>; - columns = <2>; - exit-after; - }; + rows = <2>; + columns = <2>; + exit-after; + }; }; diff --git a/app/boards/native_posix_64.overlay b/app/boards/native_posix_64.overlay index 2c1ed79d0e6..f8a8f700348 100644 --- a/app/boards/native_posix_64.overlay +++ b/app/boards/native_posix_64.overlay @@ -3,16 +3,16 @@ #include / { - chosen { - zmk,kscan = &kscan; - }; + chosen { + zmk,kscan = &kscan; + }; - kscan: kscan { - compatible = "zmk,kscan-mock"; - label = "KSCAN_MOCK"; + kscan: kscan { + compatible = "zmk,kscan-mock"; + label = "KSCAN_MOCK"; - rows = <2>; - columns = <2>; - exit-after; - }; + rows = <2>; + columns = <2>; + exit-after; + }; }; diff --git a/app/boards/seeeduino_xiao.overlay b/app/boards/seeeduino_xiao.overlay index 70080286ece..a2ddaea4eaf 100644 --- a/app/boards/seeeduino_xiao.overlay +++ b/app/boards/seeeduino_xiao.overlay @@ -5,15 +5,15 @@ */ / { - chosen { - zephyr,console = &cdc_acm_uart; - }; + chosen { + zephyr,console = &cdc_acm_uart; + }; }; &usb0 { - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index 452786d1901..51671a803b4 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -6,29 +6,29 @@ / { - chosen { - zephyr,console = &cdc_acm_uart; - zmk,battery = &vbatt; - }; + chosen { + zephyr,console = &cdc_acm_uart; + zmk,battery = &vbatt; + }; - vbatt: vbatt { - compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; - io-channels = <&adc 7>; - power-gpios = <&gpio0 14 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; - output-ohms = <510000>; - full-ohms = <(1000000 + 510000)>; - }; + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 7>; + power-gpios = <&gpio0 14 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; + output-ohms = <510000>; + full-ohms = <(1000000 + 510000)>; + }; }; &adc { - status = "okay"; + status = "okay"; }; &usbd { - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/boards/shields/Kconfig.defconfig b/app/boards/shields/Kconfig.defconfig index 5b9ca9a12fd..58dd45d6e9b 100644 --- a/app/boards/shields/Kconfig.defconfig +++ b/app/boards/shields/Kconfig.defconfig @@ -2,13 +2,13 @@ config ZMK_KEYBOARD_NAME - default "cradios" + default "cradios" # Unable to use interrupts as the same pin number is used # across A & B controllers, and STM32F303CCT6 can't enable # interrutps for multiple controllers for the same "line" # for the external interrupts. config ZMK_KSCAN_GPIO_POLLING - default y + default y diff --git a/app/boards/shields/Kconfig.shield b/app/boards/shields/Kconfig.shield index 844d4332b61..cab78898de8 100644 --- a/app/boards/shields/Kconfig.shield +++ b/app/boards/shields/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_CRADIOS - def_bool $(shields_list_contains,cradios) + def_bool $(shields_list_contains,cradios) diff --git a/app/boards/shields/a_dux/Kconfig.defconfig b/app/boards/shields/a_dux/Kconfig.defconfig index 53cd1986517..2dc40dbe33a 100644 --- a/app/boards/shields/a_dux/Kconfig.defconfig +++ b/app/boards/shields/a_dux/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_A_DUX_LEFT config ZMK_KEYBOARD_NAME - default "A. Dux" + default "A. Dux" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_A_DUX_LEFT || SHIELD_A_DUX_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/a_dux/Kconfig.shield b/app/boards/shields/a_dux/Kconfig.shield index 6058f29084a..928f432c410 100644 --- a/app/boards/shields/a_dux/Kconfig.shield +++ b/app/boards/shields/a_dux/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_A_DUX_LEFT - def_bool $(shields_list_contains,a_dux_left) + def_bool $(shields_list_contains,a_dux_left) config SHIELD_A_DUX_RIGHT - def_bool $(shields_list_contains,a_dux_right) + def_bool $(shields_list_contains,a_dux_right) diff --git a/app/boards/shields/a_dux/a_dux.dtsi b/app/boards/shields/a_dux/a_dux.dtsi index 4840227ccde..28156f42e82 100644 --- a/app/boards/shields/a_dux/a_dux.dtsi +++ b/app/boards/shields/a_dux/a_dux.dtsi @@ -8,45 +8,45 @@ / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <34>; - rows = <1>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) - RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) - RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) - RC(0,15) RC(0,16) RC(0,33) RC(0,32) - >; - }; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; - input-gpios = - <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + input-gpios = + <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, + <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; }; diff --git a/app/boards/shields/a_dux/a_dux.keymap b/app/boards/shields/a_dux/a_dux.keymap index eda03ff9097..0f162a33ce5 100644 --- a/app/boards/shields/a_dux/a_dux.keymap +++ b/app/boards/shields/a_dux/a_dux.keymap @@ -9,18 +9,18 @@ / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - // This is a sample keymap intended to be replaced with your own - base_layer { - bindings = < - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P - &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI - &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH - &kp TAB &kp BSPC &kp SPACE &kp ENTER - >; - }; + // This is a sample keymap intended to be replaced with your own + base_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH + &kp TAB &kp BSPC &kp SPACE &kp ENTER + >; + }; - }; + }; }; diff --git a/app/boards/shields/a_dux/a_dux_right.overlay b/app/boards/shields/a_dux/a_dux_right.overlay index 0034317e39c..d4aed65c2f8 100644 --- a/app/boards/shields/a_dux/a_dux_right.overlay +++ b/app/boards/shields/a_dux/a_dux_right.overlay @@ -7,5 +7,5 @@ #include "a_dux.dtsi" &default_transform { - col-offset = <17>; + col-offset = <17>; }; diff --git a/app/boards/shields/bfo9000/Kconfig.defconfig b/app/boards/shields/bfo9000/Kconfig.defconfig index 7e9ccf9ce5b..7e41b04a489 100644 --- a/app/boards/shields/bfo9000/Kconfig.defconfig +++ b/app/boards/shields/bfo9000/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_BFO9000_LEFT config ZMK_KEYBOARD_NAME - default "BFO-9000" + default "BFO-9000" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_BFO9000_LEFT || SHIELD_BFO9000_RIGHT config ZMK_SPLIT - default y + default y endif \ No newline at end of file diff --git a/app/boards/shields/bfo9000/Kconfig.shield b/app/boards/shields/bfo9000/Kconfig.shield index 4750e43a8c5..5746abbe42c 100644 --- a/app/boards/shields/bfo9000/Kconfig.shield +++ b/app/boards/shields/bfo9000/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_BFO9000_LEFT - def_bool $(shields_list_contains,bfo9000_left) + def_bool $(shields_list_contains,bfo9000_left) config SHIELD_BFO9000_RIGHT - def_bool $(shields_list_contains,bfo9000_right) + def_bool $(shields_list_contains,bfo9000_right) diff --git a/app/boards/shields/bfo9000/bfo9000.dtsi b/app/boards/shields/bfo9000/bfo9000.dtsi index 0ceb9127048..c5547920658 100644 --- a/app/boards/shields/bfo9000/bfo9000.dtsi +++ b/app/boards/shields/bfo9000/bfo9000.dtsi @@ -7,38 +7,38 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <18>; - rows = <6>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) RC(0,16) RC(0,17) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) RC(1,16) RC(1,17) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(2,15) RC(2,16) RC(2,17) - RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,14) RC(3,15) RC(3,16) RC(3,17) - RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,15) RC(4,16) RC(4,17) - RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) RC(5,6) RC(5,7) RC(5,8) RC(5,9) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) RC(5,16) RC(5,17) - >; - }; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <18>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) RC(0,16) RC(0,17) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) RC(1,16) RC(1,17) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(2,15) RC(2,16) RC(2,17) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,14) RC(3,15) RC(3,16) RC(3,17) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,15) RC(4,16) RC(4,17) + RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) RC(5,6) RC(5,7) RC(5,8) RC(5,9) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) RC(5,16) RC(5,17) + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; }; \ No newline at end of file diff --git a/app/boards/shields/bfo9000/bfo9000.keymap b/app/boards/shields/bfo9000/bfo9000.keymap index 22186a1da93..18a2085c3b7 100644 --- a/app/boards/shields/bfo9000/bfo9000.keymap +++ b/app/boards/shields/bfo9000/bfo9000.keymap @@ -15,41 +15,41 @@ #define LOWER 1 / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - // | Esc | Vol Up | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del | - // | Home | Vol Dn | ` | 1 | 2 | 3 | 4 | 5 | 6 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bk Spc | - // | End | Tab | Tab | Q | W | E | R | T | Y | T | Y | U | I | O | P | [ | ] | \ | - // | Pg Up | Caps | Ctrl | A | S | D | F | G | H | G | H | J | K | L | ; | ' | Enter | Enter | - // | Pg Dn | Up | Shift | Z | X | C | V | B | N | B | N | M | , | . | / | Shift | Up | | - // | Left | Dn | Right | Ctrl | Alt | Win | Spc | Spc | Enter | Bk Spc | Spc | Spc | Win | Alt | Ctrl | Left | Dn | Right | - bindings = < - &kp ESC &kp C_VOL_UP &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &kp HOME &kp C_VOL_DN &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp END &kp TAB &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp PG_UP &kp CAPS &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp APOS &kp ENTER &kp ENTER - &kp PG_DN &kp UP &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT &kp UP &mo LOWER - &kp LEFT &kp DOWN &kp RIGHT &kp LCTRL &kp LALT &kp LMETA &kp SPACE &kp SPACE &kp ENTER &kp BSPC &kp SPACE &kp SPACE &kp RMETA &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT - >; - }; + default_layer { + // | Esc | Vol Up | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del | + // | Home | Vol Dn | ` | 1 | 2 | 3 | 4 | 5 | 6 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bk Spc | + // | End | Tab | Tab | Q | W | E | R | T | Y | T | Y | U | I | O | P | [ | ] | \ | + // | Pg Up | Caps | Ctrl | A | S | D | F | G | H | G | H | J | K | L | ; | ' | Enter | Enter | + // | Pg Dn | Up | Shift | Z | X | C | V | B | N | B | N | M | , | . | / | Shift | Up | | + // | Left | Dn | Right | Ctrl | Alt | Win | Spc | Spc | Enter | Bk Spc | Spc | Spc | Win | Alt | Ctrl | Left | Dn | Right | + bindings = < + &kp ESC &kp C_VOL_UP &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &kp HOME &kp C_VOL_DN &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp END &kp TAB &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp PG_UP &kp CAPS &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp APOS &kp ENTER &kp ENTER + &kp PG_DN &kp UP &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT &kp UP &mo LOWER + &kp LEFT &kp DOWN &kp RIGHT &kp LCTRL &kp LALT &kp LMETA &kp SPACE &kp SPACE &kp ENTER &kp BSPC &kp SPACE &kp SPACE &kp RMETA &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + }; - lower_layer { - // | | | | | | | | | | | | | | | | | | | - // | | | | | | | | | | | | | | | | | | | - // | | | | | | | | | | | | | | | | | | | - // | | | | | | | | | | | | | | | | | | | - // | | | | | | | | | | | | | | | | | | | - // | | | | | | | | | | | | | | | | | | | - bindings = < - &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 5 &bt BT_SEL 6 &bt BT_SEL 7 &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 5 &bt BT_SEL 6 &bt BT_SEL 7 - &out OUT_USB &out OUT_BLE &trans &trans &trans &trans &trans &trans &trans &out OUT_USB &out OUT_BLE &trans &trans &trans &trans &trans &trans &trans - &ext_power EP_ON &ext_power EP_OFF &trans &trans &trans &trans &trans &trans &trans &ext_power EP_ON &ext_power EP_OFF &trans &trans &trans &trans &trans &trans &trans - &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans - &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &trans &trans &trans - &trans &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &trans &trans &trans - >; - }; - }; + lower_layer { + // | | | | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | | | | | | | + bindings = < + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 5 &bt BT_SEL 6 &bt BT_SEL 7 &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_SEL 5 &bt BT_SEL 6 &bt BT_SEL 7 + &out OUT_USB &out OUT_BLE &trans &trans &trans &trans &trans &trans &trans &out OUT_USB &out OUT_BLE &trans &trans &trans &trans &trans &trans &trans + &ext_power EP_ON &ext_power EP_OFF &trans &trans &trans &trans &trans &trans &trans &ext_power EP_ON &ext_power EP_OFF &trans &trans &trans &trans &trans &trans &trans + &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans + &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &trans &trans &trans + &trans &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &trans &trans &trans + >; + }; + }; }; diff --git a/app/boards/shields/bfo9000/bfo9000_left.overlay b/app/boards/shields/bfo9000/bfo9000_left.overlay index 3f034d955a3..9e921053640 100644 --- a/app/boards/shields/bfo9000/bfo9000_left.overlay +++ b/app/boards/shields/bfo9000/bfo9000_left.overlay @@ -7,15 +7,15 @@ #include "bfo9000.dtsi" &kscan0 { - col-gpios - = <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/bfo9000/bfo9000_right.overlay b/app/boards/shields/bfo9000/bfo9000_right.overlay index 30bd35e2ca3..897c6b0bfdd 100644 --- a/app/boards/shields/bfo9000/bfo9000_right.overlay +++ b/app/boards/shields/bfo9000/bfo9000_right.overlay @@ -7,19 +7,19 @@ #include "bfo9000.dtsi" &default_transform { - col-offset = <9>; + col-offset = <9>; }; &kscan0 { - col-gpios - = <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/boardsource3x4/Kconfig.shield b/app/boards/shields/boardsource3x4/Kconfig.shield index cda55d0700c..7f574cea67a 100644 --- a/app/boards/shields/boardsource3x4/Kconfig.shield +++ b/app/boards/shields/boardsource3x4/Kconfig.shield @@ -2,5 +2,5 @@ # SPDX-License-Identifier: MIT config SHIELD_BOARDSOURCE3X4 - def_bool $(shields_list_contains,boardsource3x4) + def_bool $(shields_list_contains,boardsource3x4) diff --git a/app/boards/shields/chalice/boards/nice_nano.overlay b/app/boards/shields/chalice/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/chalice/boards/nice_nano.overlay +++ b/app/boards/shields/chalice/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/chalice/boards/nice_nano_v2.overlay b/app/boards/shields/chalice/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/chalice/boards/nice_nano_v2.overlay +++ b/app/boards/shields/chalice/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/clog/Kconfig.defconfig b/app/boards/shields/clog/Kconfig.defconfig index 1ca779f3ff1..53ded4d779c 100644 --- a/app/boards/shields/clog/Kconfig.defconfig +++ b/app/boards/shields/clog/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_CLOG_LEFT config ZMK_KEYBOARD_NAME - default "Clog" + default "Clog" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_CLOG_LEFT || SHIELD_CLOG_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/clog/Kconfig.shield b/app/boards/shields/clog/Kconfig.shield index 2301af94f1a..69ecef8da44 100644 --- a/app/boards/shields/clog/Kconfig.shield +++ b/app/boards/shields/clog/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_CLOG_LEFT - def_bool $(shields_list_contains,clog_left) + def_bool $(shields_list_contains,clog_left) config SHIELD_CLOG_RIGHT - def_bool $(shields_list_contains,clog_right) + def_bool $(shields_list_contains,clog_right) diff --git a/app/boards/shields/clog/clog.dtsi b/app/boards/shields/clog/clog.dtsi index ccad150c776..40e9a39fd02 100644 --- a/app/boards/shields/clog/clog.dtsi +++ b/app/boards/shields/clog/clog.dtsi @@ -8,44 +8,44 @@ / { chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; }; default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <34>; - rows = <1>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,20) RC(0,19) RC(0,18) RC(0,17) - RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) RC(0,21) - RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) - RC(0,15) RC(0,16) RC(0,33) RC(0,32) - >; + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) RC(0,21) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; }; kscan0: kscan { - compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; - input-gpios - = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + input-gpios + = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; }; diff --git a/app/boards/shields/clog/clog_right.overlay b/app/boards/shields/clog/clog_right.overlay index 0dc5d64f759..8b0efb3d260 100644 --- a/app/boards/shields/clog/clog_right.overlay +++ b/app/boards/shields/clog/clog_right.overlay @@ -7,5 +7,5 @@ #include "clog.dtsi" &default_transform { - col-offset = <17>; + col-offset = <17>; }; diff --git a/app/boards/shields/clueboard_california/Kconfig.defconfig b/app/boards/shields/clueboard_california/Kconfig.defconfig index e101ea76aa2..278aaa4472c 100644 --- a/app/boards/shields/clueboard_california/Kconfig.defconfig +++ b/app/boards/shields/clueboard_california/Kconfig.defconfig @@ -2,13 +2,13 @@ if SHIELD_CLUEBOARD_CALIFORNIA config ZMK_KEYBOARD_NAME - default "Clueboard California Macropad" + default "Clueboard California Macropad" # Unable to use interrupts as the same pin number is used # across A & B controllers, and STM32F303CCT6 can't enable # interrutps for multiple controllers for the same "line" # for the external interrupts. config ZMK_KSCAN_DIRECT_POLLING - default y + default y endif diff --git a/app/boards/shields/clueboard_california/Kconfig.shield b/app/boards/shields/clueboard_california/Kconfig.shield index eca025d1464..e987d29a65f 100644 --- a/app/boards/shields/clueboard_california/Kconfig.shield +++ b/app/boards/shields/clueboard_california/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_CLUEBOARD_CALIFORNIA - def_bool $(shields_list_contains,clueboard_california) + def_bool $(shields_list_contains,clueboard_california) diff --git a/app/boards/shields/clueboard_california/clueboard_california.keymap b/app/boards/shields/clueboard_california/clueboard_california.keymap index b9041c371fe..9af22fa1f27 100644 --- a/app/boards/shields/clueboard_california/clueboard_california.keymap +++ b/app/boards/shields/clueboard_california/clueboard_california.keymap @@ -8,18 +8,18 @@ #include / { - keymap0: keymap { - compatible = "zmk,keymap"; + keymap0: keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < - &kp N9 &kp N8 - &kp N7 &kp N6 - &kp N5 - &kp N4 &kp N3 - &kp N2 &kp N1 - &kp N0 - >; - }; - }; + default_layer { + bindings = < + &kp N9 &kp N8 + &kp N7 &kp N6 + &kp N5 + &kp N4 &kp N3 + &kp N2 &kp N1 + &kp N0 + >; + }; + }; }; \ No newline at end of file diff --git a/app/boards/shields/clueboard_california/clueboard_california.overlay b/app/boards/shields/clueboard_california/clueboard_california.overlay index 9f52d0d35d5..dfa5d9cf926 100644 --- a/app/boards/shields/clueboard_california/clueboard_california.overlay +++ b/app/boards/shields/clueboard_california/clueboard_california.overlay @@ -5,30 +5,30 @@ */ / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-direct"; + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; + label = "KSCAN"; - input-gpios - = <&gpioa 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpioa 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&gpiob 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + input-gpios + = <&gpioa 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; - }; + }; - // TODO: Per-key LED node(s) + // TODO: Per-key LED node(s) }; diff --git a/app/boards/shields/contra/Kconfig.shield b/app/boards/shields/contra/Kconfig.shield index 59412ff5c7b..e9f8e80464f 100644 --- a/app/boards/shields/contra/Kconfig.shield +++ b/app/boards/shields/contra/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_CONTRA - def_bool $(shields_list_contains,contra) \ No newline at end of file + def_bool $(shields_list_contains,contra) \ No newline at end of file diff --git a/app/boards/shields/corne/Kconfig.defconfig b/app/boards/shields/corne/Kconfig.defconfig index acf542d74b9..07dd07e9c0f 100644 --- a/app/boards/shields/corne/Kconfig.defconfig +++ b/app/boards/shields/corne/Kconfig.defconfig @@ -1,44 +1,44 @@ if SHIELD_CORNE_LEFT config ZMK_KEYBOARD_NAME - default "Corne" + default "Corne" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_CORNE_LEFT || SHIELD_CORNE_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/corne/Kconfig.shield b/app/boards/shields/corne/Kconfig.shield index 3cac86fe254..099680b9dbc 100644 --- a/app/boards/shields/corne/Kconfig.shield +++ b/app/boards/shields/corne/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_CORNE_LEFT - def_bool $(shields_list_contains,corne_left) + def_bool $(shields_list_contains,corne_left) config SHIELD_CORNE_RIGHT - def_bool $(shields_list_contains,corne_right) + def_bool $(shields_list_contains,corne_right) diff --git a/app/boards/shields/corne/boards/nice_nano.overlay b/app/boards/shields/corne/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/corne/boards/nice_nano.overlay +++ b/app/boards/shields/corne/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/corne/boards/nice_nano_v2.overlay b/app/boards/shields/corne/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/corne/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index a9c1c287f19..0e9eddf967f 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -7,77 +7,77 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - five_column_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; - // TODO: per-key RGB node(s)? + // TODO: per-key RGB node(s)? }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/corne/corne.keymap b/app/boards/shields/corne/corne.keymap index 53218a860c6..0555cf41757 100644 --- a/app/boards/shields/corne/corne.keymap +++ b/app/boards/shields/corne/corne.keymap @@ -35,7 +35,7 @@ &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; @@ -49,7 +49,7 @@ &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; }; diff --git a/app/boards/shields/corne/corne_left.overlay b/app/boards/shields/corne/corne_left.overlay index fe7e3c78baf..117cb19efd9 100644 --- a/app/boards/shields/corne/corne_left.overlay +++ b/app/boards/shields/corne/corne_left.overlay @@ -7,12 +7,12 @@ #include "corne.dtsi" &kscan0 { - col-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/corne/corne_right.overlay b/app/boards/shields/corne/corne_right.overlay index 1d7ed9ecd7f..a8a0cfe7bf2 100644 --- a/app/boards/shields/corne/corne_right.overlay +++ b/app/boards/shields/corne/corne_right.overlay @@ -7,20 +7,20 @@ #include "corne.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &five_column_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/cradio/Kconfig.defconfig b/app/boards/shields/cradio/Kconfig.defconfig index b600383ad12..c5d03f4ee7a 100644 --- a/app/boards/shields/cradio/Kconfig.defconfig +++ b/app/boards/shields/cradio/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_CRADIO_LEFT config ZMK_KEYBOARD_NAME - default "Cradio" + default "Cradio" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_CRADIO_LEFT || SHIELD_CRADIO_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/cradio/Kconfig.shield b/app/boards/shields/cradio/Kconfig.shield index bb5f0735d5b..affb1c53c92 100644 --- a/app/boards/shields/cradio/Kconfig.shield +++ b/app/boards/shields/cradio/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_CRADIO_LEFT - def_bool $(shields_list_contains,cradio_left) + def_bool $(shields_list_contains,cradio_left) config SHIELD_CRADIO_RIGHT - def_bool $(shields_list_contains,cradio_right) + def_bool $(shields_list_contains,cradio_right) diff --git a/app/boards/shields/cradio/README.md b/app/boards/shields/cradio/README.md index ee1cab0e55a..2c4e2e6019d 100644 --- a/app/boards/shields/cradio/README.md +++ b/app/boards/shields/cradio/README.md @@ -10,25 +10,25 @@ Some revisions of the aforementioned PCBs have slightly different pin arrangemen /* Adjusted Cradio pin arrangement */ /* The position of Q and B keys have been swapped */ &kscan0 { - input-gpios - = <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + input-gpios + = <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; ``` diff --git a/app/boards/shields/cradio/cradio.dtsi b/app/boards/shields/cradio/cradio.dtsi index ca464c9580a..57dcfd4b271 100644 --- a/app/boards/shields/cradio/cradio.dtsi +++ b/app/boards/shields/cradio/cradio.dtsi @@ -8,45 +8,45 @@ / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <34>; - rows = <1>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) - RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) - RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) - RC(0,15) RC(0,16) RC(0,33) RC(0,32) - >; - }; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; - input-gpios - = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + input-gpios + = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; }; diff --git a/app/boards/shields/cradio/cradio_right.overlay b/app/boards/shields/cradio/cradio_right.overlay index 41436e975ae..fea9ae1ccd7 100644 --- a/app/boards/shields/cradio/cradio_right.overlay +++ b/app/boards/shields/cradio/cradio_right.overlay @@ -7,5 +7,5 @@ #include "cradio.dtsi" &default_transform { - col-offset = <17>; + col-offset = <17>; }; diff --git a/app/boards/shields/crbn/Kconfig.defconfig b/app/boards/shields/crbn/Kconfig.defconfig index 2a5c8e397ad..c00e97a41ee 100644 --- a/app/boards/shields/crbn/Kconfig.defconfig +++ b/app/boards/shields/crbn/Kconfig.defconfig @@ -4,6 +4,6 @@ if SHIELD_CRBN config ZMK_KEYBOARD_NAME - default "CRBN" + default "CRBN" endif diff --git a/app/boards/shields/crbn/Kconfig.shield b/app/boards/shields/crbn/Kconfig.shield index ceeb5f63567..bf92dbf1ea5 100644 --- a/app/boards/shields/crbn/Kconfig.shield +++ b/app/boards/shields/crbn/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_CRBN - def_bool $(shields_list_contains,crbn) + def_bool $(shields_list_contains,crbn) diff --git a/app/boards/shields/crbn/crbn.keymap b/app/boards/shields/crbn/crbn.keymap index b967e5e2671..f963ba84434 100644 --- a/app/boards/shields/crbn/crbn.keymap +++ b/app/boards/shields/crbn/crbn.keymap @@ -9,54 +9,54 @@ #include / { - keymap { - compatible = "zmk,keymap"; - - default_layer { - // ----------------------------------------------------------------------------------------- - // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | - // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | - // | | LCTL | LALT | LGUI | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | - bindings = < - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC - &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET - &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &kp SPACE &trans &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT - >; - - sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; - }; - - lower { - bindings = < - &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL - &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE - &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(HASH) &kp LS(BSLH) &kp HOME &kp END &trans - &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP - >; - - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - - raise { - bindings = < - &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC - &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH - &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans - &trans &trans &trans &trans &mo 3 &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP - >; - - sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; - }; - - control { - bindings = < - &sys_reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans - &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - >; - }; - }; + keymap { + compatible = "zmk,keymap"; + + default_layer { + // ----------------------------------------------------------------------------------------- + // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | + // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | + // | | LCTL | LALT | LGUI | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET + &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &kp SPACE &trans &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + + sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; + }; + + lower { + bindings = < + &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(HASH) &kp LS(BSLH) &kp HOME &kp END &trans + &trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + raise { + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp HASH &kp BSLH &kp PG_UP &kp PG_DN &trans + &trans &trans &trans &trans &mo 3 &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + >; + + sensor-bindings = <&inc_dec_kp PG_UP PG_DN>; + }; + + control { + bindings = < + &sys_reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans + &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; }; diff --git a/app/boards/shields/crbn/crbn.overlay b/app/boards/shields/crbn/crbn.overlay index 18382cce2da..817a83d078b 100644 --- a/app/boards/shields/crbn/crbn.overlay +++ b/app/boards/shields/crbn/crbn.overlay @@ -7,49 +7,49 @@ #include / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - diode-direction = "col2row"; + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; - col-gpios - = <&pro_micro 1 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 2 GPIO_ACTIVE_HIGH> - , <&pro_micro 3 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 7 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 3 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + ; - row-gpios - = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; + row-gpios + = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; - encoder: encoder { - compatible = "alps,ec11"; - label = "ENCODER"; - a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; - status = "okay"; - }; + encoder: encoder { + compatible = "alps,ec11"; + label = "ENCODER"; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + status = "okay"; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&encoder>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder>; + }; }; diff --git a/app/boards/shields/elephant42/Kconfig.defconfig b/app/boards/shields/elephant42/Kconfig.defconfig index 55ee6c87d30..70a312c10d5 100644 --- a/app/boards/shields/elephant42/Kconfig.defconfig +++ b/app/boards/shields/elephant42/Kconfig.defconfig @@ -14,34 +14,34 @@ endif if SHIELD_ELEPHANT42_LEFT || SHIELD_ELEPHANT42_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/elephant42/boards/nice_nano.overlay b/app/boards/shields/elephant42/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/elephant42/boards/nice_nano.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi index 2d3f5166d5e..b0e9a32ebc4 100644 --- a/app/boards/shields/elephant42/elephant42.dtsi +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -40,21 +40,21 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) }; &pro_micro_i2c { - status = "okay"; - - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; \ No newline at end of file diff --git a/app/boards/shields/ergodash/Kconfig.defconfig b/app/boards/shields/ergodash/Kconfig.defconfig index 43cab0b1e18..34a87e8e311 100644 --- a/app/boards/shields/ergodash/Kconfig.defconfig +++ b/app/boards/shields/ergodash/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_ERGODASH_LEFT config ZMK_KEYBOARD_NAME - default "Ergodash" + default "Ergodash" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_ERGODASH_LEFT || SHIELD_ERGODASH_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/ergodash/Kconfig.shield b/app/boards/shields/ergodash/Kconfig.shield index b3cca293134..5814e21ef55 100644 --- a/app/boards/shields/ergodash/Kconfig.shield +++ b/app/boards/shields/ergodash/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_ERGODASH_LEFT - def_bool $(shields_list_contains,ergodash_left) + def_bool $(shields_list_contains,ergodash_left) config SHIELD_ERGODASH_RIGHT - def_bool $(shields_list_contains,ergodash_right) + def_bool $(shields_list_contains,ergodash_right) diff --git a/app/boards/shields/ergodash/ergodash.dtsi b/app/boards/shields/ergodash/ergodash.dtsi index a2b76075328..d109fa66ec9 100644 --- a/app/boards/shields/ergodash/ergodash.dtsi +++ b/app/boards/shields/ergodash/ergodash.dtsi @@ -7,15 +7,15 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <5>; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; // Numbering based on rev 1.2 schema // * keys that can be in different positions are denoted as MW // * MW40 can be broken off @@ -24,38 +24,38 @@ // | SW3 | SW7 | SW11 | SW15 | SW19 | SW23 | SW27 | | | | SW27 | SW23 | SW19 | SW15 | SW11 | SW7 | SW3 | // | SW4 | SW8 | SW12 | SW16 | SW20 | SW24 | | MW28 | | MW28 | | SW24 | SW20 | SW16 | SW12 | SW8 | SW4 | // | SW30 | SW31 | SW32 | MW33 | SW34 | | MW35 | MW40 | | MW40 | MW35 | | SW34 | MW33 | SW32 | SW31 | SW30 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,13) RC(0,12) RC(0,11) RC(0,10) RC(0,9) RC(0,8) RC(0,7) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,13) RC(1,12) RC(1,11) RC(1,10) RC(1,9) RC(1,8) RC(1,7) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,13) RC(2,12) RC(2,11) RC(2,10) RC(2,9) RC(2,8) RC(2,7) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,13) RC(3,12) RC(3,11) RC(3,10) RC(3,9) RC(3,8) RC(3,7) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,13) RC(4,12) RC(4,11) RC(4,10) RC(4,9) RC(4,8) RC(4,7) - >; + >; }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - col-gpios - = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; }; diff --git a/app/boards/shields/ergodash/ergodash_right.overlay b/app/boards/shields/ergodash/ergodash_right.overlay index 464b3f5d12c..07fbbb70bf9 100644 --- a/app/boards/shields/ergodash/ergodash_right.overlay +++ b/app/boards/shields/ergodash/ergodash_right.overlay @@ -7,5 +7,5 @@ #include "ergodash.dtsi" &default_transform { - col-offset = <7>; + col-offset = <7>; }; diff --git a/app/boards/shields/eternal_keypad/Kconfig.defconfig b/app/boards/shields/eternal_keypad/Kconfig.defconfig index 4d4195ef759..725141921ca 100644 --- a/app/boards/shields/eternal_keypad/Kconfig.defconfig +++ b/app/boards/shields/eternal_keypad/Kconfig.defconfig @@ -4,6 +4,6 @@ if SHIELD_ETERNAL_KEYPAD || SHIELD_ETERNAL_KEYPAD_LEFTY config ZMK_KEYBOARD_NAME - default "Eternal Keypad" + default "Eternal Keypad" endif diff --git a/app/boards/shields/eternal_keypad/Kconfig.shield b/app/boards/shields/eternal_keypad/Kconfig.shield index 4a59379e5c1..2301515396f 100644 --- a/app/boards/shields/eternal_keypad/Kconfig.shield +++ b/app/boards/shields/eternal_keypad/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_ETERNAL_KEYPAD - def_bool $(shields_list_contains,eternal_keypad) + def_bool $(shields_list_contains,eternal_keypad) config SHIELD_ETERNAL_KEYPAD_LEFTY - def_bool $(shields_list_contains,eternal_keypad_lefty) + def_bool $(shields_list_contains,eternal_keypad_lefty) diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/fourier/Kconfig.defconfig b/app/boards/shields/fourier/Kconfig.defconfig index b887870c896..a07ca714961 100644 --- a/app/boards/shields/fourier/Kconfig.defconfig +++ b/app/boards/shields/fourier/Kconfig.defconfig @@ -5,16 +5,16 @@ if SHIELD_FOURIER_LEFT config ZMK_KEYBOARD_NAME - default "Fourier" + default "Fourier" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_FOURIER_LEFT || SHIELD_FOURIER_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/fourier/Kconfig.shield b/app/boards/shields/fourier/Kconfig.shield index 2e337410756..ee28c7ace82 100644 --- a/app/boards/shields/fourier/Kconfig.shield +++ b/app/boards/shields/fourier/Kconfig.shield @@ -3,7 +3,7 @@ config SHIELD_FOURIER_LEFT - def_bool $(shields_list_contains,fourier_left) + def_bool $(shields_list_contains,fourier_left) config SHIELD_FOURIER_RIGHT - def_bool $(shields_list_contains,fourier_right) + def_bool $(shields_list_contains,fourier_right) diff --git a/app/boards/shields/fourier/fourier.dtsi b/app/boards/shields/fourier/fourier.dtsi index 99027ea9510..0902d6878ef 100644 --- a/app/boards/shields/fourier/fourier.dtsi +++ b/app/boards/shields/fourier/fourier.dtsi @@ -7,37 +7,37 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - /* - * This transform correspondsto the 60% left without macro keypad and 65% right, even this - * combination of PCBs can have keys in different locations based on configuration. - */ - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <13>; - rows = <4>; - map = < + /* + * This transform correspondsto the 60% left without macro keypad and 65% right, even this + * combination of PCBs can have keys in different locations based on configuration. + */ + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <13>; + rows = <4>; + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) /**/ RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0, 11) RC(0,12) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) /**/ RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,12) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,6) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) /**/ RC(3,6) RC(3,9) RC(3,10) RC(3,11) RC(3,12) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D - ; - }; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D + ; + }; }; diff --git a/app/boards/shields/helix/boards/nice_nano.overlay b/app/boards/shields/helix/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/helix/boards/nice_nano.overlay +++ b/app/boards/shields/helix/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/helix/boards/nice_nano_v2.overlay b/app/boards/shields/helix/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/helix/boards/nice_nano_v2.overlay +++ b/app/boards/shields/helix/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/helix/helix_right.overlay b/app/boards/shields/helix/helix_right.overlay index 42dd0f52166..0d3cc63d14a 100644 --- a/app/boards/shields/helix/helix_right.overlay +++ b/app/boards/shields/helix/helix_right.overlay @@ -7,7 +7,7 @@ #include "helix.dtsi" &default_transform { - col-offset = <7>; + col-offset = <7>; }; &kscan0 { diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay index 0c48c1285f7..1b40acba7c4 100644 --- a/app/boards/shields/hummingbird/hummingbird.overlay +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -10,8 +10,8 @@ chosen { zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; - /delete-property/ zephyr,console; - /delete-property/ zephyr,shell-uart; + /delete-property/ zephyr,console; + /delete-property/ zephyr,shell-uart; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/iris/Kconfig.defconfig b/app/boards/shields/iris/Kconfig.defconfig index 83331d1097d..b68bc99967c 100644 --- a/app/boards/shields/iris/Kconfig.defconfig +++ b/app/boards/shields/iris/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_IRIS_LEFT config ZMK_KEYBOARD_NAME - default "Iris" + default "Iris" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_IRIS_LEFT || SHIELD_IRIS_RIGHT config ZMK_SPLIT - default y + default y endif \ No newline at end of file diff --git a/app/boards/shields/iris/Kconfig.shield b/app/boards/shields/iris/Kconfig.shield index 370bd22265d..764d8101155 100644 --- a/app/boards/shields/iris/Kconfig.shield +++ b/app/boards/shields/iris/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_IRIS_LEFT - def_bool $(shields_list_contains,iris_left) + def_bool $(shields_list_contains,iris_left) config SHIELD_IRIS_RIGHT - def_bool $(shields_list_contains,iris_right) + def_bool $(shields_list_contains,iris_right) diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi index 0e976f86b33..a0caf1ad56e 100644 --- a/app/boards/shields/iris/iris.dtsi +++ b/app/boards/shields/iris/iris.dtsi @@ -7,41 +7,41 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | // | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | // | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) - >; - }; + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; }; \ No newline at end of file diff --git a/app/boards/shields/iris/iris.keymap b/app/boards/shields/iris/iris.keymap index 7c00d0a5eed..209c2277071 100644 --- a/app/boards/shields/iris/iris.keymap +++ b/app/boards/shields/iris/iris.keymap @@ -9,55 +9,55 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | -// | GUI | LOWER| SPACE | | ENTER | RAISE| ALT | - bindings = < +// | GUI | LOWER| SPACE | | ENTER | RAISE| ALT | + bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp GRAVE &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT - >; - }; + &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT + >; + }; - lower_layer { + lower_layer { // ------------------------------------------------------------------------------------------------------------ // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | // | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | - bindings = < + bindings = < &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp TILDE &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE - &trans &trans &trans &trans &trans &trans - >; - }; + &trans &trans &trans &trans &trans &trans + >; + }; - raise_layer { + raise_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | // | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | // | | | | | | | | - bindings = < + bindings = < &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KP_PLUS &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH - &trans &trans &trans &trans &trans &trans - >; - }; - }; + &trans &trans &trans &trans &trans &trans + >; + }; + }; }; diff --git a/app/boards/shields/iris/iris_left.overlay b/app/boards/shields/iris/iris_left.overlay index 2c52fca8035..eb330d31ab2 100644 --- a/app/boards/shields/iris/iris_left.overlay +++ b/app/boards/shields/iris/iris_left.overlay @@ -7,12 +7,12 @@ #include "iris.dtsi" &kscan0 { - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/iris/iris_right.overlay b/app/boards/shields/iris/iris_right.overlay index 2ed712a208b..d2375b18ed3 100644 --- a/app/boards/shields/iris/iris_right.overlay +++ b/app/boards/shields/iris/iris_right.overlay @@ -7,16 +7,16 @@ #include "iris.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/jian/Kconfig.defconfig b/app/boards/shields/jian/Kconfig.defconfig index bbdafbae81c..2f3d0a17c44 100644 --- a/app/boards/shields/jian/Kconfig.defconfig +++ b/app/boards/shields/jian/Kconfig.defconfig @@ -2,16 +2,16 @@ if SHIELD_JIAN_LEFT config ZMK_KEYBOARD_NAME - default "Jian" + default "Jian" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_JIAN_LEFT || SHIELD_JIAN_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/jian/Kconfig.shield b/app/boards/shields/jian/Kconfig.shield index 5b874f0367c..efcfa21458b 100644 --- a/app/boards/shields/jian/Kconfig.shield +++ b/app/boards/shields/jian/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_JIAN_LEFT - def_bool $(shields_list_contains,jian_left) + def_bool $(shields_list_contains,jian_left) config SHIELD_JIAN_RIGHT - def_bool $(shields_list_contains,jian_right) + def_bool $(shields_list_contains,jian_right) diff --git a/app/boards/shields/jian/jian.dtsi b/app/boards/shields/jian/jian.dtsi index 2b1eb3910b1..8e772791689 100644 --- a/app/boards/shields/jian/jian.dtsi +++ b/app/boards/shields/jian/jian.dtsi @@ -7,70 +7,70 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; // | SW0 | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | SW0 | // | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(2,0) RC(0,0) RC(0,1) RC(1,2) RC(0,2) RC(0,3) RC(0,4) RC(0,7) RC(0,8) RC(0,9) RC(1,9) RC(0,10) RC(0,11) RC(2,11) RC(1,0) RC(1,1) RC(2,2) RC(1,3) RC(1,4) RC(0,5) RC(0,6) RC(1,7) RC(1,8) RC(2,9) RC(1,10) RC(1,11) RC(2,1) RC(3,2) RC(3,3) RC(2,3) RC(2,4) RC(1,5) RC(1,6) RC(2,7) RC(2,8) RC(3,8) RC(3,9) RC(2,10) RC(3,4) RC(2,5) RC(3,5) RC(3,6) RC(2,6) RC(3,7) - >; - }; + >; + }; - crkbd_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; + crkbd_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < - RC(0,0) RC(0,1) RC(1,2) RC(0,2) RC(0,3) RC(0,4) RC(0,7) RC(0,8) RC(0,9) RC(1,9) RC(0,10) RC(0,11) + map = < + RC(0,0) RC(0,1) RC(1,2) RC(0,2) RC(0,3) RC(0,4) RC(0,7) RC(0,8) RC(0,9) RC(1,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(2,2) RC(1,3) RC(1,4) RC(0,5) RC(0,6) RC(1,7) RC(1,8) RC(2,9) RC(1,10) RC(1,11) RC(2,1) RC(3,2) RC(3,3) RC(2,3) RC(2,4) RC(1,5) RC(1,6) RC(2,7) RC(2,8) RC(3,8) RC(3,9) RC(2,10) RC(3,4) RC(2,5) RC(3,5) RC(3,6) RC(2,6) RC(3,7) - >; - }; + >; + }; - five_column_transform: keymap_transform_2 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; + five_column_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < - RC(0,1) RC(1,2) RC(0,2) RC(0,3) RC(0,4) RC(0,7) RC(0,8) RC(0,9) RC(1,9) RC(0,10) + map = < + RC(0,1) RC(1,2) RC(0,2) RC(0,3) RC(0,4) RC(0,7) RC(0,8) RC(0,9) RC(1,9) RC(0,10) RC(1,1) RC(2,2) RC(1,3) RC(1,4) RC(0,5) RC(0,6) RC(1,7) RC(1,8) RC(2,9) RC(1,10) RC(3,2) RC(3,3) RC(2,3) RC(2,4) RC(1,5) RC(1,6) RC(2,7) RC(2,8) RC(3,8) RC(3,9) RC(3,4) RC(2,5) RC(3,5) RC(3,6) RC(2,6) RC(3,7) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; }; diff --git a/app/boards/shields/jian/jian_left.overlay b/app/boards/shields/jian/jian_left.overlay index e7f9d5b5ed0..e402f03b1c5 100644 --- a/app/boards/shields/jian/jian_left.overlay +++ b/app/boards/shields/jian/jian_left.overlay @@ -7,12 +7,12 @@ #include "jian.dtsi" &kscan0 { - col-gpios - = <&pro_micro 1 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/jian/jian_right.overlay b/app/boards/shields/jian/jian_right.overlay index cac83fd3b6c..f646741bf7d 100644 --- a/app/boards/shields/jian/jian_right.overlay +++ b/app/boards/shields/jian/jian_right.overlay @@ -7,24 +7,24 @@ #include "jian.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &crkbd_transform { - col-offset = <6>; + col-offset = <6>; }; &five_column_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 1 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/jiran/Kconfig.defconfig b/app/boards/shields/jiran/Kconfig.defconfig index b5b1f97b7cd..0c6683f4f76 100644 --- a/app/boards/shields/jiran/Kconfig.defconfig +++ b/app/boards/shields/jiran/Kconfig.defconfig @@ -4,16 +4,16 @@ if SHIELD_JIRAN_LEFT config ZMK_KEYBOARD_NAME - default "Jiran" + default "Jiran" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_JIRAN_LEFT || SHIELD_JIRAN_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/jiran/Kconfig.shield b/app/boards/shields/jiran/Kconfig.shield index 8a24ace0d1e..8f480723288 100644 --- a/app/boards/shields/jiran/Kconfig.shield +++ b/app/boards/shields/jiran/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_JIRAN_LEFT - def_bool $(shields_list_contains,jiran_left) + def_bool $(shields_list_contains,jiran_left) config SHIELD_JIRAN_RIGHT - def_bool $(shields_list_contains,jiran_right) + def_bool $(shields_list_contains,jiran_right) diff --git a/app/boards/shields/jiran/jiran.dtsi b/app/boards/shields/jiran/jiran.dtsi index f0727dd4e68..b7e74c27c63 100644 --- a/app/boards/shields/jiran/jiran.dtsi +++ b/app/boards/shields/jiran/jiran.dtsi @@ -7,76 +7,76 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <5>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW0 | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | SW0 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | // | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(4,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(4,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) - >; - }; + >; + }; - jian_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <5>; + jian_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; // | SW0 | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | SW0 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | // | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 | - map = < + map = < RC(4,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(4,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) - >; - }; + >; + }; - crkbd_transform: keymap_transform_2 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <5>; + crkbd_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | // | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 | - map = < + map = < RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; }; diff --git a/app/boards/shields/jiran/jiran_left.overlay b/app/boards/shields/jiran/jiran_left.overlay index 4466202cdc8..3b7f5e55551 100644 --- a/app/boards/shields/jiran/jiran_left.overlay +++ b/app/boards/shields/jiran/jiran_left.overlay @@ -7,12 +7,12 @@ #include "jiran.dtsi" &kscan0 { - col-gpios - = <&pro_micro 1 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 7 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/jiran/jiran_right.overlay b/app/boards/shields/jiran/jiran_right.overlay index c3648797080..668c55139ce 100644 --- a/app/boards/shields/jiran/jiran_right.overlay +++ b/app/boards/shields/jiran/jiran_right.overlay @@ -7,24 +7,24 @@ #include "jiran.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &jian_transform { - col-offset = <6>; + col-offset = <6>; }; &crkbd_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 7 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 1 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/jorne/Kconfig.defconfig b/app/boards/shields/jorne/Kconfig.defconfig index 775bb56a960..04beb792c4d 100644 --- a/app/boards/shields/jorne/Kconfig.defconfig +++ b/app/boards/shields/jorne/Kconfig.defconfig @@ -2,44 +2,44 @@ if SHIELD_JORNE_LEFT config ZMK_KEYBOARD_NAME - default "Jorne" + default "Jorne" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_JORNE_LEFT || SHIELD_JORNE_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/jorne/Kconfig.shield b/app/boards/shields/jorne/Kconfig.shield index 88fd4e5ad96..37a3cab59cd 100644 --- a/app/boards/shields/jorne/Kconfig.shield +++ b/app/boards/shields/jorne/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_JORNE_LEFT - def_bool $(shields_list_contains,jorne_left) + def_bool $(shields_list_contains,jorne_left) config SHIELD_JORNE_RIGHT - def_bool $(shields_list_contains,jorne_right) + def_bool $(shields_list_contains,jorne_right) diff --git a/app/boards/shields/jorne/boards/nice_nano.overlay b/app/boards/shields/jorne/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/jorne/boards/nice_nano.overlay +++ b/app/boards/shields/jorne/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/jorne/boards/nice_nano_v2.overlay b/app/boards/shields/jorne/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/jorne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/jorne/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index bb862b8d9ea..1d12b85c90f 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -7,93 +7,93 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; // | SW0 | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | SW0 | // | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(3,0) RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(3,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - crkbd_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; + crkbd_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - five_column_transform: keymap_transform_2 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; + five_column_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; - // TODO: per-key RGB node(s)? + // TODO: per-key RGB node(s)? }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/jorne/jorne_left.overlay b/app/boards/shields/jorne/jorne_left.overlay index 7e132cd97e7..f0476b41f2e 100644 --- a/app/boards/shields/jorne/jorne_left.overlay +++ b/app/boards/shields/jorne/jorne_left.overlay @@ -7,12 +7,12 @@ #include "jorne.dtsi" &kscan0 { - col-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/jorne/jorne_right.overlay b/app/boards/shields/jorne/jorne_right.overlay index 698bf9ddbbc..604f4816205 100644 --- a/app/boards/shields/jorne/jorne_right.overlay +++ b/app/boards/shields/jorne/jorne_right.overlay @@ -7,24 +7,24 @@ #include "jorne.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &crkbd_transform { - col-offset = <6>; + col-offset = <6>; }; &five_column_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 82f48b4c4fe..2d162736b49 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -2,44 +2,44 @@ if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_REV2_LEFT || SHIELD_KYRIA_REV3_LEFT config ZMK_KEYBOARD_NAME - default "Kyria" + default "Kyria" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_KYRIA config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/kyria/Kconfig.shield b/app/boards/shields/kyria/Kconfig.shield index 52df937834c..a9d5ac4fa93 100644 --- a/app/boards/shields/kyria/Kconfig.shield +++ b/app/boards/shields/kyria/Kconfig.shield @@ -5,25 +5,25 @@ config SHIELD_KYRIA bool config SHIELD_KYRIA_LEFT - def_bool $(shields_list_contains,kyria_left) - select SHIELD_KYRIA + def_bool $(shields_list_contains,kyria_left) + select SHIELD_KYRIA config SHIELD_KYRIA_RIGHT - def_bool $(shields_list_contains,kyria_right) - select SHIELD_KYRIA + def_bool $(shields_list_contains,kyria_right) + select SHIELD_KYRIA config SHIELD_KYRIA_REV2_LEFT - def_bool $(shields_list_contains,kyria_rev2_left) - select SHIELD_KYRIA + def_bool $(shields_list_contains,kyria_rev2_left) + select SHIELD_KYRIA config SHIELD_KYRIA_REV2_RIGHT - def_bool $(shields_list_contains,kyria_rev2_right) - select SHIELD_KYRIA + def_bool $(shields_list_contains,kyria_rev2_right) + select SHIELD_KYRIA config SHIELD_KYRIA_REV3_LEFT - def_bool $(shields_list_contains,kyria_rev3_left) - select SHIELD_KYRIA + def_bool $(shields_list_contains,kyria_rev3_left) + select SHIELD_KYRIA config SHIELD_KYRIA_REV3_RIGHT - def_bool $(shields_list_contains,kyria_rev3_right) - select SHIELD_KYRIA + def_bool $(shields_list_contains,kyria_rev3_right) + select SHIELD_KYRIA diff --git a/app/boards/shields/kyria/boards/nice_nano.overlay b/app/boards/shields/kyria/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/kyria/boards/nice_nano.overlay +++ b/app/boards/shields/kyria/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/kyria/boards/nice_nano_v2.overlay b/app/boards/shields/kyria/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/kyria/boards/nice_nano_v2.overlay +++ b/app/boards/shields/kyria/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/kyria/boards/nrfmicro_11.overlay b/app/boards/shields/kyria/boards/nrfmicro_11.overlay index 172859aecb1..8754dec63bf 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi1_default: spi1_default { - group1 { - psels = ; - }; - }; - - spi1_sleep: spi1_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay index 172859aecb1..8754dec63bf 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi1_default: spi1_default { - group1 { - psels = ; - }; - }; - - spi1_sleep: spi1_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/kyria/boards/nrfmicro_13.overlay b/app/boards/shields/kyria/boards/nrfmicro_13.overlay index 172859aecb1..8754dec63bf 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_13.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_13.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi1_default: spi1_default { - group1 { - psels = ; - }; - }; - - spi1_sleep: spi1_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/kyria/kyria.dtsi b/app/boards/shields/kyria/kyria.dtsi index cffe23b0627..b98240e495c 100644 --- a/app/boards/shields/kyria/kyria.dtsi +++ b/app/boards/shields/kyria/kyria.dtsi @@ -7,58 +7,58 @@ #include "kyria_common.dtsi" / { - chosen { - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; // | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | // | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | // | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(2,15) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) - >; - }; + >; + }; // | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | // | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | // | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | - five_column_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <4>; - map = < + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <4>; + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) - >; - }; + >; + }; }; &kscan0 { - row-gpios - = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + row-gpios + = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; }; &left_encoder { - a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; &right_encoder { - a-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index a8804dd9f6e..9a2163db549 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -8,23 +8,23 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL - &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT - >; + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; }; diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index 1e61cc6bb74..2e10cd37df4 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -7,54 +7,54 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - }; - - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - resolution = <4>; - status = "disabled"; - }; - - right_encoder: encoder_right { - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - resolution = <4>; - status = "disabled"; - }; - - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; - - // TODO: RGB node(s) + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; + + // TODO: RGB node(s) }; &pro_micro_i2c { - status = "okay"; - - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <64>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <63>; - prechargep = <0x22>; - }; + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/kyria/kyria_left.overlay b/app/boards/shields/kyria/kyria_left.overlay index 20ced548e6b..d89a077525b 100644 --- a/app/boards/shields/kyria/kyria_left.overlay +++ b/app/boards/shields/kyria/kyria_left.overlay @@ -7,18 +7,18 @@ #include "kyria.dtsi" &kscan0 { - col-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/kyria/kyria_rev2.dtsi b/app/boards/shields/kyria/kyria_rev2.dtsi index b40af365ac8..e61131bfd53 100644 --- a/app/boards/shields/kyria/kyria_rev2.dtsi +++ b/app/boards/shields/kyria/kyria_rev2.dtsi @@ -7,49 +7,49 @@ #include "kyria_common.dtsi" / { - chosen { - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; // | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | // | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | // | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(2,15) RC(3,2) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) - >; - }; + >; + }; // | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | // | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | // | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | - five_column_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <4>; - map = < + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <4>; + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(3,2) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) - >; - }; + >; + }; }; &left_encoder { - a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; &right_encoder { - a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; diff --git a/app/boards/shields/kyria/kyria_rev2.keymap b/app/boards/shields/kyria/kyria_rev2.keymap index a8804dd9f6e..9a2163db549 100644 --- a/app/boards/shields/kyria/kyria_rev2.keymap +++ b/app/boards/shields/kyria/kyria_rev2.keymap @@ -8,23 +8,23 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL - &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT - >; + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; }; diff --git a/app/boards/shields/kyria/kyria_rev2_left.overlay b/app/boards/shields/kyria/kyria_rev2_left.overlay index cee2e2a81ea..67eaeac226f 100644 --- a/app/boards/shields/kyria/kyria_rev2_left.overlay +++ b/app/boards/shields/kyria/kyria_rev2_left.overlay @@ -7,24 +7,24 @@ #include "kyria_rev2.dtsi" &kscan0 { - row-gpios - = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 7 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - ; + row-gpios + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/kyria/kyria_rev2_right.overlay b/app/boards/shields/kyria/kyria_rev2_right.overlay index 9e29c6f77d8..acc806cf090 100644 --- a/app/boards/shields/kyria/kyria_rev2_right.overlay +++ b/app/boards/shields/kyria/kyria_rev2_right.overlay @@ -7,32 +7,32 @@ #include "kyria_rev2.dtsi" &default_transform { - col-offset = <8>; + col-offset = <8>; }; &five_column_transform { - col-offset = <8>; + col-offset = <8>; }; &kscan0 { - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/kyria/kyria_rev3.dtsi b/app/boards/shields/kyria/kyria_rev3.dtsi index 4a50000629b..0cf91c60a07 100644 --- a/app/boards/shields/kyria/kyria_rev3.dtsi +++ b/app/boards/shields/kyria/kyria_rev3.dtsi @@ -7,35 +7,35 @@ #include "kyria_common.dtsi" / { - chosen { - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <4>; - // | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | - // | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | - // | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | - // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(3,3) RC(2,6) RC(2,7) RC(3,10) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) - RC(3,2) RC(3,4) RC(3,5) RC(3,1) RC(3,6) RC(3,7) RC(3,12) RC(3,8) RC(3,9) RC(3,11) - >; - }; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <4>; + // | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | + // | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | + // | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | + // | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(3,3) RC(2,6) RC(2,7) RC(3,10) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,2) RC(3,4) RC(3,5) RC(3,1) RC(3,6) RC(3,7) RC(3,12) RC(3,8) RC(3,9) RC(3,11) + >; + }; }; &left_encoder { - resolution = <2>; - a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; &right_encoder { - resolution = <2>; - a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; diff --git a/app/boards/shields/kyria/kyria_rev3.keymap b/app/boards/shields/kyria/kyria_rev3.keymap index fff2e051a18..d74757cad7d 100644 --- a/app/boards/shields/kyria/kyria_rev3.keymap +++ b/app/boards/shields/kyria/kyria_rev3.keymap @@ -9,30 +9,30 @@ /* Uncomment this block if using RGB &led_strip { - chain-length = <6>; - // chain-length = <31>; // Uncomment if using both per-key and underglow LEDs - // chain-length = <25>; // Uncomment if using only per-key LEDs. + chain-length = <6>; + // chain-length = <31>; // Uncomment if using both per-key and underglow LEDs + // chain-length = <25>; // Uncomment if using only per-key LEDs. }; */ / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - // --------------------------------------------------------------------------------------------------------------------------------- - // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | - // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | - // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | - // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL - &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT - >; + default_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | + // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | + // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; }; diff --git a/app/boards/shields/kyria/kyria_rev3_left.overlay b/app/boards/shields/kyria/kyria_rev3_left.overlay index d00b9e4afe0..577b89dc134 100644 --- a/app/boards/shields/kyria/kyria_rev3_left.overlay +++ b/app/boards/shields/kyria/kyria_rev3_left.overlay @@ -7,23 +7,23 @@ #include "kyria_rev3.dtsi" &kscan0 { - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - ; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/kyria/kyria_rev3_right.overlay b/app/boards/shields/kyria/kyria_rev3_right.overlay index ee69730c2e2..88ed658962f 100644 --- a/app/boards/shields/kyria/kyria_rev3_right.overlay +++ b/app/boards/shields/kyria/kyria_rev3_right.overlay @@ -7,27 +7,27 @@ #include "kyria_rev3.dtsi" &default_transform { - col-offset = <7>; + col-offset = <7>; }; &kscan0 { - row-gpios - = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 7 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + row-gpios + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/kyria/kyria_right.overlay b/app/boards/shields/kyria/kyria_right.overlay index 00ba5b2f3c4..72d97027992 100644 --- a/app/boards/shields/kyria/kyria_right.overlay +++ b/app/boards/shields/kyria/kyria_right.overlay @@ -7,27 +7,27 @@ #include "kyria.dtsi" &default_transform { - col-offset = <8>; + col-offset = <8>; }; &five_column_transform { - col-offset = <8>; + col-offset = <8>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig index d5bfab3d79f..7388a4b9af0 100644 --- a/app/boards/shields/leeloo/Kconfig.defconfig +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -4,28 +4,28 @@ if SHIELD_LEELOO_LEFT config ZMK_KEYBOARD_NAME - default "Leeloo" + default "Leeloo" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_LEELOO_LEFT || SHIELD_LEELOO_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY @@ -33,16 +33,16 @@ if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/leeloo/Kconfig.shield b/app/boards/shields/leeloo/Kconfig.shield index 1736c6eb525..46ea96400fb 100644 --- a/app/boards/shields/leeloo/Kconfig.shield +++ b/app/boards/shields/leeloo/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_LEELOO_LEFT - def_bool $(shields_list_contains,leeloo_left) + def_bool $(shields_list_contains,leeloo_left) config SHIELD_LEELOO_RIGHT - def_bool $(shields_list_contains,leeloo_right) + def_bool $(shields_list_contains,leeloo_right) diff --git a/app/boards/shields/leeloo/leeloo.dtsi b/app/boards/shields/leeloo/leeloo.dtsi index 5f2cbeac62e..438f9a9d924 100644 --- a/app/boards/shields/leeloo/leeloo.dtsi +++ b/app/boards/shields/leeloo/leeloo.dtsi @@ -67,21 +67,21 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/leeloo/leeloo_left.overlay b/app/boards/shields/leeloo/leeloo_left.overlay index 1d6424fd675..59fce1b0e5b 100644 --- a/app/boards/shields/leeloo/leeloo_left.overlay +++ b/app/boards/shields/leeloo/leeloo_left.overlay @@ -6,16 +6,16 @@ #include "leeloo.dtsi" &kscan0 { - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/leeloo/leeloo_right.overlay b/app/boards/shields/leeloo/leeloo_right.overlay index 2f3fbf5c01e..80e89529566 100644 --- a/app/boards/shields/leeloo/leeloo_right.overlay +++ b/app/boards/shields/leeloo/leeloo_right.overlay @@ -6,20 +6,20 @@ #include "leeloo.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/lily58/Kconfig.defconfig b/app/boards/shields/lily58/Kconfig.defconfig index 97cecce15e3..e77a9c2208d 100644 --- a/app/boards/shields/lily58/Kconfig.defconfig +++ b/app/boards/shields/lily58/Kconfig.defconfig @@ -2,44 +2,44 @@ if SHIELD_LILY58_LEFT config ZMK_KEYBOARD_NAME - default "Lily58" + default "Lily58" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_LILY58_LEFT || SHIELD_LILY58_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/lily58/Kconfig.shield b/app/boards/shields/lily58/Kconfig.shield index 932e33b3201..1b3bb6ba819 100644 --- a/app/boards/shields/lily58/Kconfig.shield +++ b/app/boards/shields/lily58/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_LILY58_LEFT - def_bool $(shields_list_contains,lily58_left) + def_bool $(shields_list_contains,lily58_left) config SHIELD_LILY58_RIGHT - def_bool $(shields_list_contains,lily58_right) + def_bool $(shields_list_contains,lily58_right) diff --git a/app/boards/shields/lily58/boards/nice_nano.overlay b/app/boards/shields/lily58/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/lily58/boards/nice_nano.overlay +++ b/app/boards/shields/lily58/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/lily58/boards/nice_nano_v2.overlay b/app/boards/shields/lily58/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/lily58/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 1a296a8c6b4..ec520f6bb8a 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -7,75 +7,75 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <5>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | // | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | // | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - }; + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index dd935c7aefd..7df3277f780 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -10,61 +10,61 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | // | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | - bindings = < + bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp GRAVE &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp LALT &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp BSPC &kp RGUI - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; - lower_layer { + lower_layer { // ------------------------------------------------------------------------------------------------------------ // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | // | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | | | - bindings = < + bindings = < &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp TILDE &trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE &trans &trans &trans &trans &trans &trans &trans &trans - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; - raise_layer { + raise_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | v | ^ | -> | | // | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | // | | | | | | | | | | - bindings = < + bindings = < &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KP_PLUS &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &trans &trans &trans &trans &trans &trans &trans &trans - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; }; diff --git a/app/boards/shields/lily58/lily58_left.overlay b/app/boards/shields/lily58/lily58_left.overlay index daa53651ff3..b95332d9845 100644 --- a/app/boards/shields/lily58/lily58_left.overlay +++ b/app/boards/shields/lily58/lily58_left.overlay @@ -7,16 +7,16 @@ #include "lily58.dtsi" &kscan0 { - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/lily58/lily58_right.overlay b/app/boards/shields/lily58/lily58_right.overlay index 18ec806bd7b..15820ad2966 100644 --- a/app/boards/shields/lily58/lily58_right.overlay +++ b/app/boards/shields/lily58/lily58_right.overlay @@ -7,16 +7,16 @@ #include "lily58.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/lotus58/Kconfig.defconfig b/app/boards/shields/lotus58/Kconfig.defconfig index b6bb37d852e..62695c2020a 100644 --- a/app/boards/shields/lotus58/Kconfig.defconfig +++ b/app/boards/shields/lotus58/Kconfig.defconfig @@ -4,44 +4,44 @@ if SHIELD_LOTUS58_LEFT config ZMK_KEYBOARD_NAME - default "Lotus58" + default "Lotus58" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_LOTUS58_LEFT || SHIELD_LOTUS58_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/lotus58/Kconfig.shield b/app/boards/shields/lotus58/Kconfig.shield index dbf7ba010d6..2d91c58cb47 100644 --- a/app/boards/shields/lotus58/Kconfig.shield +++ b/app/boards/shields/lotus58/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_LOTUS58_LEFT - def_bool $(shields_list_contains,lotus58_left) + def_bool $(shields_list_contains,lotus58_left) config SHIELD_LOTUS58_RIGHT - def_bool $(shields_list_contains,lotus58_right) + def_bool $(shields_list_contains,lotus58_right) diff --git a/app/boards/shields/lotus58/lotus58_left.overlay b/app/boards/shields/lotus58/lotus58_left.overlay index a51659dfb12..a1fc1e28e4f 100644 --- a/app/boards/shields/lotus58/lotus58_left.overlay +++ b/app/boards/shields/lotus58/lotus58_left.overlay @@ -7,16 +7,16 @@ #include "lotus58.dtsi" &kscan0 { - col-gpios - = <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/lotus58/lotus58_right.overlay b/app/boards/shields/lotus58/lotus58_right.overlay index dffcaeb1817..5bdfe710a27 100644 --- a/app/boards/shields/lotus58/lotus58_right.overlay +++ b/app/boards/shields/lotus58/lotus58_right.overlay @@ -7,20 +7,20 @@ #include "lotus58.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/m60/Kconfig.defconfig b/app/boards/shields/m60/Kconfig.defconfig index ad105ed9929..a46969540c3 100644 --- a/app/boards/shields/m60/Kconfig.defconfig +++ b/app/boards/shields/m60/Kconfig.defconfig @@ -4,6 +4,6 @@ if SHIELD_M60 config ZMK_KEYBOARD_NAME - default "m60" + default "m60" endif diff --git a/app/boards/shields/m60/Kconfig.shield b/app/boards/shields/m60/Kconfig.shield index 4ed58c4999b..b1414b96dcd 100644 --- a/app/boards/shields/m60/Kconfig.shield +++ b/app/boards/shields/m60/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_M60 - def_bool $(shields_list_contains,m60) + def_bool $(shields_list_contains,m60) diff --git a/app/boards/shields/m60/m60.keymap b/app/boards/shields/m60/m60.keymap index aa65692932d..8daa6b7cd7a 100644 --- a/app/boards/shields/m60/m60.keymap +++ b/app/boards/shields/m60/m60.keymap @@ -9,10 +9,10 @@ #include / { - keymap0: keymap { - compatible = "zmk,keymap"; + keymap0: keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | @@ -20,23 +20,23 @@ // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | // | CTL | WIN | ALT | SPACE | ALT | MO(1) | WIN | CTRL | // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RGUI &kp RCTRL - >; - }; + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RGUI &kp RCTRL + >; + }; - fn_layer { - bindings = < + fn_layer { + bindings = < &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bootloader &trans &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &sys_reset &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &none &none &trans &trans &none &none &none &none &none &none &none &none &none &none &trans &trans &trans &trans &trans &trans &trans &trans &trans - >; - }; - }; + >; + }; + }; }; diff --git a/app/boards/shields/m60/m60.overlay b/app/boards/shields/m60/m60.overlay index 18d06511d86..a2ab259321b 100644 --- a/app/boards/shields/m60/m60.overlay +++ b/app/boards/shields/m60/m60.overlay @@ -7,42 +7,42 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio1 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - col-gpios - = <&gpio0 19 GPIO_ACTIVE_HIGH> - , <&gpio0 20 GPIO_ACTIVE_HIGH> - , <&gpio0 21 GPIO_ACTIVE_HIGH> - , <&gpio0 22 GPIO_ACTIVE_HIGH> - , <&gpio0 23 GPIO_ACTIVE_HIGH> - , <&gpio0 24 GPIO_ACTIVE_HIGH> - , <&gpio0 25 GPIO_ACTIVE_HIGH> - , <&gpio0 26 GPIO_ACTIVE_HIGH> - ; - }; + diode-direction = "col2row"; + row-gpios + = <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio0 19 GPIO_ACTIVE_HIGH> + , <&gpio0 20 GPIO_ACTIVE_HIGH> + , <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 22 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 24 GPIO_ACTIVE_HIGH> + , <&gpio0 25 GPIO_ACTIVE_HIGH> + , <&gpio0 26 GPIO_ACTIVE_HIGH> + ; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <8>; - rows = <8>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <8>; + rows = <8>; // | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | MX13 | MX14 | // | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | MX21 | MX22 | MX23 | MX24 | MX25 | MX26 | MX27 | MX28 | // | MX29 | MX30 | MX31 | MX32 | MX33 | MX34 | MX35 | MX36 | MX37 | MX38 | MX39 | MX40 | MX41 | @@ -55,6 +55,6 @@ RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4 RC(6,4) RC(6,3) RC(6,2) RC(6,1) RC(6,0) RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,3) RC(5,2) RC(5,1) RC(6,5) RC(6,6) RC(6,7) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,4) >; - }; + }; }; diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index 8c0b042e2cb..d05ae045803 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -4,44 +4,44 @@ if SHIELD_MICRODOX_LEFT config ZMK_KEYBOARD_NAME - default "Microdox" + default "Microdox" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/microdox/Kconfig.shield b/app/boards/shields/microdox/Kconfig.shield index ac79eab6a25..47543760b6a 100644 --- a/app/boards/shields/microdox/Kconfig.shield +++ b/app/boards/shields/microdox/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_MICRODOX_LEFT - def_bool $(shields_list_contains,microdox_left) + def_bool $(shields_list_contains,microdox_left) config SHIELD_MICRODOX_RIGHT - def_bool $(shields_list_contains,microdox_right) + def_bool $(shields_list_contains,microdox_right) diff --git a/app/boards/shields/microdox/boards/nice_nano.overlay b/app/boards/shields/microdox/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/microdox/boards/nice_nano.overlay +++ b/app/boards/shields/microdox/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/microdox/boards/nice_nano_v2.overlay b/app/boards/shields/microdox/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/microdox/boards/nice_nano_v2.overlay +++ b/app/boards/shields/microdox/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index e3fabb3e854..e02aa5546f4 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -7,59 +7,59 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; // | SW1 | SW2 | SW3 | SW4 | SW5 | | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW6 | SW7 | SW8 | SW9 | SW10 | | SW10 | SW9 | SW8 | SW7 | SW6 | // | SW11 | SW12 | SW13 | SW14 | SW15 | | SW15 | SW14 | SW13 | SW12 | SW11 | // | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; - // TODO: per-key RGB node(s)? + // TODO: per-key RGB node(s)? }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/microdox/microdox_left.overlay b/app/boards/shields/microdox/microdox_left.overlay index 307776e721a..d38f50da876 100644 --- a/app/boards/shields/microdox/microdox_left.overlay +++ b/app/boards/shields/microdox/microdox_left.overlay @@ -7,11 +7,11 @@ #include "microdox.dtsi" &kscan0 { - col-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/microdox/microdox_right.overlay b/app/boards/shields/microdox/microdox_right.overlay index 5475c31fbeb..4dd29016de8 100644 --- a/app/boards/shields/microdox/microdox_right.overlay +++ b/app/boards/shields/microdox/microdox_right.overlay @@ -7,20 +7,20 @@ #include "microdox.dtsi" &default_transform { - col-offset = <5>; + col-offset = <5>; }; &oled { - segment-remap; - com-invdir; + segment-remap; + com-invdir; }; &kscan0 { - col-gpios - = <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/murphpad/Kconfig.defconfig b/app/boards/shields/murphpad/Kconfig.defconfig index 07e71826c90..80e65351dad 100644 --- a/app/boards/shields/murphpad/Kconfig.defconfig +++ b/app/boards/shields/murphpad/Kconfig.defconfig @@ -4,34 +4,34 @@ if SHIELD_MURPHPAD config ZMK_KEYBOARD_NAME - default "MurphPad" + default "MurphPad" if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/murphpad/Kconfig.shield b/app/boards/shields/murphpad/Kconfig.shield index 389caa269ff..1c961aeadc8 100644 --- a/app/boards/shields/murphpad/Kconfig.shield +++ b/app/boards/shields/murphpad/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_MURPHPAD - def_bool $(shields_list_contains,murphpad) \ No newline at end of file + def_bool $(shields_list_contains,murphpad) \ No newline at end of file diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay index 3e2241a2a10..ac6c51d5c90 100644 --- a/app/boards/shields/murphpad/boards/nice_nano.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay index 3e2241a2a10..ac6c51d5c90 100644 --- a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index b7fead608bd..13905092e64 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -7,69 +7,69 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + diode-direction = "col2row"; + row-gpios + = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - col-gpios - = <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; - }; + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; + }; - encoder_1: encoder_1 { - compatible = "alps,ec11"; - label = "Encoder 1"; - a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; + encoder_1: encoder_1 { + compatible = "alps,ec11"; + label = "Encoder 1"; + a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; - encoder_2: encoder_2 { - compatible = "alps,ec11"; - label = "Encoder 2"; - a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; + encoder_2: encoder_2 { + compatible = "alps,ec11"; + label = "Encoder 2"; + a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/nibble/Kconfig.defconfig b/app/boards/shields/nibble/Kconfig.defconfig index d5e8cbebe31..31ac7cfe7dd 100644 --- a/app/boards/shields/nibble/Kconfig.defconfig +++ b/app/boards/shields/nibble/Kconfig.defconfig @@ -4,38 +4,38 @@ if SHIELD_NIBBLE config ZMK_KEYBOARD_NAME - default "NIBBLE" + default "NIBBLE" config ZMK_USB - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/nibble/Kconfig.shield b/app/boards/shields/nibble/Kconfig.shield index 44364f4e387..cb6fd15ec88 100644 --- a/app/boards/shields/nibble/Kconfig.shield +++ b/app/boards/shields/nibble/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_NIBBLE - def_bool $(shields_list_contains,nibble) + def_bool $(shields_list_contains,nibble) diff --git a/app/boards/shields/nibble/boards/nice_nano.overlay b/app/boards/shields/nibble/boards/nice_nano.overlay index 54ab9feca7d..45c552633ff 100644 --- a/app/boards/shields/nibble/boards/nice_nano.overlay +++ b/app/boards/shields/nibble/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/nibble/boards/nice_nano_v2.overlay b/app/boards/shields/nibble/boards/nice_nano_v2.overlay index 54ab9feca7d..45c552633ff 100644 --- a/app/boards/shields/nibble/boards/nice_nano_v2.overlay +++ b/app/boards/shields/nibble/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/nibble/nibble.keymap b/app/boards/shields/nibble/nibble.keymap index c02aad75b64..5b90f6c19ae 100644 --- a/app/boards/shields/nibble/nibble.keymap +++ b/app/boards/shields/nibble/nibble.keymap @@ -9,39 +9,39 @@ #include / { - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&encoder_1>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder_1>; + }; - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - label = "Default"; + default_layer { + label = "Default"; - sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; - bindings = < + bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp HOME &kp C_MUTE &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp DEL &trans &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP &trans &kp LSHFT &trans &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN &trans &kp LCTRL &kp LGUI &kp LALT &kp SPACE &mo 1 &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT - >; - }; - function_layer { - label = "Function"; + >; + }; + function_layer { + label = "Function"; - sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; - bindings = < + bindings = < &kp TILDE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &kp END &kp C_MUTE &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_PRV &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &kp C_PREV &kp C_PP &kp C_NEXT - >; - }; - }; + >; + }; + }; }; diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index baf1eb10315..cd1176401b7 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -7,69 +7,69 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - encoder_1: encoder_1 { - compatible = "alps,ec11"; - label = "Encoder 1"; - a-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "okay"; - }; + encoder_1: encoder_1 { + compatible = "alps,ec11"; + label = "Encoder 1"; + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-demux"; - label = "KSCAN"; - polling-interval-msec = <25>; - input-gpios - = <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - output-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - ; - }; + kscan0: kscan { + compatible = "zmk,kscan-gpio-demux"; + label = "KSCAN"; + polling-interval-msec = <25>; + input-gpios + = <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + output-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + ; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <5>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; - map = < + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,15) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,15) RC(3,0) RC(3,1) RC(0,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) RC(3,15) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,6) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) - >; - }; + >; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig index 22c5f6479f1..d2378409612 100644 --- a/app/boards/shields/nice_view/Kconfig.defconfig +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -4,24 +4,24 @@ if SHIELD_NICE_VIEW config ZMK_DISPLAY - select LV_FONT_MONTSERRAT_26 + select LV_FONT_MONTSERRAT_26 if ZMK_DISPLAY config SPI - default y + default y config LS0XX - default y + default y config ZMK_WIDGET_WPM_STATUS - default y if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL + default y if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # ZMK_DISPLAY diff --git a/app/boards/shields/nice_view/Kconfig.shield b/app/boards/shields/nice_view/Kconfig.shield index 55cba78861d..fbe4fde873c 100644 --- a/app/boards/shields/nice_view/Kconfig.shield +++ b/app/boards/shields/nice_view/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_NICE_VIEW - def_bool $(shields_list_contains,nice_view) + def_bool $(shields_list_contains,nice_view) diff --git a/app/boards/shields/nice_view/nice_view.overlay b/app/boards/shields/nice_view/nice_view.overlay index eacdd41a711..49ce0f23ad3 100644 --- a/app/boards/shields/nice_view/nice_view.overlay +++ b/app/boards/shields/nice_view/nice_view.overlay @@ -5,19 +5,19 @@ */ &nice_view_spi { - status = "okay"; - nice_view: ls0xx@0 { - compatible = "sharp,ls0xx"; - label = "DISPLAY"; - spi-max-frequency = <1000000>; - reg = <0>; - width = <160>; - height = <68>; - }; + status = "okay"; + nice_view: ls0xx@0 { + compatible = "sharp,ls0xx"; + label = "DISPLAY"; + spi-max-frequency = <1000000>; + reg = <0>; + width = <160>; + height = <68>; + }; }; / { - chosen { - zephyr,display = &nice_view; - }; + chosen { + zephyr,display = &nice_view; + }; }; diff --git a/app/boards/shields/nice_view_adapter/Kconfig.shield b/app/boards/shields/nice_view_adapter/Kconfig.shield index bf9ba7cb8a4..f95a209cbff 100644 --- a/app/boards/shields/nice_view_adapter/Kconfig.shield +++ b/app/boards/shields/nice_view_adapter/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_NICE_VIEW_ADAPTER - def_bool $(shields_list_contains,nice_view_adapter) + def_bool $(shields_list_contains,nice_view_adapter) diff --git a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay index b8b07258399..706cffbebea 100644 --- a/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/bluemicro840_v1.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay index d9cc083572d..e00b599c61c 100644 --- a/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay +++ b/app/boards/shields/nice_view_adapter/boards/mikoto_520.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay index 2a1b757d434..45ba34dedeb 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay index 2a1b757d434..45ba34dedeb 100644 --- a/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nice_nano_v2.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay index b8b07258399..706cffbebea 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay index 1cd19db9c38..5b5dbfb1c3b 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_11_flipped.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay index b8b07258399..706cffbebea 100644 --- a/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay +++ b/app/boards/shields/nice_view_adapter/boards/nrfmicro_13.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay index b8b07258399..706cffbebea 100644 --- a/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay +++ b/app/boards/shields/nice_view_adapter/boards/puchi_ble_v1.overlay @@ -5,31 +5,31 @@ */ &pinctrl { - spi0_default: spi0_default { - group1 { - psels = , - , - ; - }; - }; - spi0_sleep: spi0_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; nice_view_spi: &spi0 { - compatible = "nordic,nrf-spim"; - pinctrl-0 = <&spi0_default>; - pinctrl-1 = <&spi0_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&pro_micro 1 GPIO_ACTIVE_HIGH>; }; &pro_micro_i2c { - status = "disabled"; + status = "disabled"; }; diff --git a/app/boards/shields/pancake/Kconfig.shield b/app/boards/shields/pancake/Kconfig.shield index 784d25a4c58..ca00d303852 100644 --- a/app/boards/shields/pancake/Kconfig.shield +++ b/app/boards/shields/pancake/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_PANCAKE - def_bool $(shields_list_contains,pancake) \ No newline at end of file + def_bool $(shields_list_contains,pancake) \ No newline at end of file diff --git a/app/boards/shields/quefrency/Kconfig.defconfig b/app/boards/shields/quefrency/Kconfig.defconfig index 28e46a56c6c..db618287bb6 100644 --- a/app/boards/shields/quefrency/Kconfig.defconfig +++ b/app/boards/shields/quefrency/Kconfig.defconfig @@ -5,16 +5,16 @@ if SHIELD_QUEFRENCY_LEFT config ZMK_KEYBOARD_NAME - default "Quefrency" + default "Quefrency" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_QUEFRENCY_LEFT || SHIELD_QUEFRENCY_RIGHT config ZMK_SPLIT - default y + default y endif \ No newline at end of file diff --git a/app/boards/shields/quefrency/Kconfig.shield b/app/boards/shields/quefrency/Kconfig.shield index d205e58fde5..d30d30f1490 100644 --- a/app/boards/shields/quefrency/Kconfig.shield +++ b/app/boards/shields/quefrency/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_QUEFRENCY_LEFT - def_bool $(shields_list_contains,quefrency_left) + def_bool $(shields_list_contains,quefrency_left) config SHIELD_QUEFRENCY_RIGHT - def_bool $(shields_list_contains,quefrency_right) + def_bool $(shields_list_contains,quefrency_right) diff --git a/app/boards/shields/quefrency/quefrency.dtsi b/app/boards/shields/quefrency/quefrency.dtsi index c9cb7d43de4..f7dc4489918 100644 --- a/app/boards/shields/quefrency/quefrency.dtsi +++ b/app/boards/shields/quefrency/quefrency.dtsi @@ -7,26 +7,26 @@ #include / { - chosen { - zmk,kscan = &kscan0; + chosen { + zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + zmk,matrix_transform = &default_transform; + }; - /* - * This transform correspondsto the 60% left without macro keypad and 65% right, even this - * combination of PCBs can have keys in different locations based on configuration. - */ - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <15>; - rows = <6>; - map = < + /* + * This transform correspondsto the 60% left without macro keypad and 65% right, even this + * combination of PCBs can have keys in different locations based on configuration. + */ + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <6>; + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) /**/ RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,14) RC(5,13) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) /**/RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(5,14) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,13) RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) /**/ RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,12) RC(3,13) RC(3,14) RC(3,11) RC(4,0) RC(4,1) RC(4,2) RC(4,4) RC(4,6) /**/ RC(4,7) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,9) - >; - }; + >; + }; }; diff --git a/app/boards/shields/redox/Kconfig.defconfig b/app/boards/shields/redox/Kconfig.defconfig index bf122b5ea5e..32e30ad513d 100644 --- a/app/boards/shields/redox/Kconfig.defconfig +++ b/app/boards/shields/redox/Kconfig.defconfig @@ -3,16 +3,16 @@ if SHIELD_REDOX_LEFT config ZMK_KEYBOARD_NAME - default "Redox" + default "Redox" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_REDOX_LEFT || SHIELD_REDOX_RIGHT config ZMK_SPLIT - default y + default y endif \ No newline at end of file diff --git a/app/boards/shields/redox/Kconfig.shield b/app/boards/shields/redox/Kconfig.shield index 2df91c1115a..8e6c601d74c 100644 --- a/app/boards/shields/redox/Kconfig.shield +++ b/app/boards/shields/redox/Kconfig.shield @@ -1,7 +1,7 @@ # Copyright (c) 2021 The ZMK Contributors # SPDX-License-Identifier: MIT config SHIELD_REDOX_LEFT - def_bool $(shields_list_contains,redox_left) + def_bool $(shields_list_contains,redox_left) config SHIELD_REDOX_RIGHT - def_bool $(shields_list_contains,redox_right) + def_bool $(shields_list_contains,redox_right) diff --git a/app/boards/shields/redox/boards/nice_nano.overlay b/app/boards/shields/redox/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/redox/boards/nice_nano.overlay +++ b/app/boards/shields/redox/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/redox/boards/nice_nano_v2.overlay b/app/boards/shields/redox/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/redox/boards/nice_nano_v2.overlay +++ b/app/boards/shields/redox/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/redox/redox.dtsi b/app/boards/shields/redox/redox.dtsi index 9c0705a6c33..d2d72d0ff1f 100644 --- a/app/boards/shields/redox/redox.dtsi +++ b/app/boards/shields/redox/redox.dtsi @@ -7,42 +7,42 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <5>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | SW13 | | SW13 | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | SW14 | SW15 | SW16 | SW17 | SW18 | SW19 | SW20 | | SW20 | SW19 | SW18 | SW17 | SW16 | SW15 | SW14 | // | SW21 | SW22 | SW23 | SW24 | SW25 | SW26 | SW27 | SW28 | | SW28 | SW27 | SW26 | SW25 | SW24 | SW23 | SW22 | SW21 | // | SW29 | SW30 | SW31 | SW32 | SW33 | SW34 | SW35 | | SW35 | SW34 | SW33 | SW32 | SW31 | SW30 | SW29 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(0,6) RC(0,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(1,6) RC(1,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(2,6) RC(3,6) RC(3,7) RC(2,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; }; diff --git a/app/boards/shields/redox/redox_left.overlay b/app/boards/shields/redox/redox_left.overlay index 322dca7954b..d68029d8805 100644 --- a/app/boards/shields/redox/redox_left.overlay +++ b/app/boards/shields/redox/redox_left.overlay @@ -7,13 +7,13 @@ #include "redox.dtsi" &kscan0 { - col-gpios - = <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/redox/redox_right.overlay b/app/boards/shields/redox/redox_right.overlay index f2dcfed0c0f..09b146377d4 100644 --- a/app/boards/shields/redox/redox_right.overlay +++ b/app/boards/shields/redox/redox_right.overlay @@ -7,17 +7,17 @@ #include "redox.dtsi" &default_transform { - col-offset = <7>; + col-offset = <7>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + ; }; diff --git a/app/boards/shields/reviung41/boards/nice_nano.overlay b/app/boards/shields/reviung41/boards/nice_nano.overlay index 741237e1c62..8590149e2bd 100644 --- a/app/boards/shields/reviung41/boards/nice_nano.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <11>; - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <11>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay index 741237e1c62..8590149e2bd 100644 --- a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <11>; - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <11>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig index 53527971b97..5cd94faa777 100644 --- a/app/boards/shields/romac/Kconfig.defconfig +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_ROMAC config ZMK_KEYBOARD_NAME - default "RoMac" + default "RoMac" endif diff --git a/app/boards/shields/romac/Kconfig.shield b/app/boards/shields/romac/Kconfig.shield index 59669d336c2..9bdd2c5f520 100644 --- a/app/boards/shields/romac/Kconfig.shield +++ b/app/boards/shields/romac/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_ROMAC - def_bool $(shields_list_contains,romac) + def_bool $(shields_list_contains,romac) diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index 827273a47a2..480d3f84650 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -7,28 +7,28 @@ #include / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - col-gpios - = <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; - }; + }; }; diff --git a/app/boards/shields/romac_plus/Kconfig.defconfig b/app/boards/shields/romac_plus/Kconfig.defconfig index c4efdb97312..442bc0bdf52 100644 --- a/app/boards/shields/romac_plus/Kconfig.defconfig +++ b/app/boards/shields/romac_plus/Kconfig.defconfig @@ -4,6 +4,6 @@ if SHIELD_ROMAC_PLUS config ZMK_KEYBOARD_NAME - default "RoMac+ v4" + default "RoMac+ v4" endif \ No newline at end of file diff --git a/app/boards/shields/romac_plus/Kconfig.shield b/app/boards/shields/romac_plus/Kconfig.shield index a7c7c614b2a..277f1eb3885 100644 --- a/app/boards/shields/romac_plus/Kconfig.shield +++ b/app/boards/shields/romac_plus/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_ROMAC_PLUS - def_bool $(shields_list_contains,romac_plus) + def_bool $(shields_list_contains,romac_plus) diff --git a/app/boards/shields/romac_plus/boards/nice_nano.overlay b/app/boards/shields/romac_plus/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/romac_plus/romac_plus.dtsi b/app/boards/shields/romac_plus/romac_plus.dtsi index 0fd4374a3ad..71ec87b2b94 100644 --- a/app/boards/shields/romac_plus/romac_plus.dtsi +++ b/app/boards/shields/romac_plus/romac_plus.dtsi @@ -7,50 +7,50 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <3>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <3>; + rows = <4>; - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(1,0) RC(1,1) RC(1,2) RC(2,0) RC(2,1) RC(2,2) RC(3,0) RC(3,1) RC(3,2) - >; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; - - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder>; - }; - - // TODO: per-key RGB node(s)? + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; + + // TODO: per-key RGB node(s)? }; \ No newline at end of file diff --git a/app/boards/shields/romac_plus/romac_plus.overlay b/app/boards/shields/romac_plus/romac_plus.overlay index 4ef3874404d..2308e284c7d 100644 --- a/app/boards/shields/romac_plus/romac_plus.overlay +++ b/app/boards/shields/romac_plus/romac_plus.overlay @@ -7,22 +7,22 @@ #include "romac_plus.dtsi" / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; + diode-direction = "col2row"; - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; - }; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; + }; }; diff --git a/app/boards/shields/settings_reset/Kconfig.defconfig b/app/boards/shields/settings_reset/Kconfig.defconfig index 6d050cb4f48..05f3b406bd0 100644 --- a/app/boards/shields/settings_reset/Kconfig.defconfig +++ b/app/boards/shields/settings_reset/Kconfig.defconfig @@ -4,7 +4,7 @@ if SHIELD_SETTINGS_RESET config ZMK_KEYBOARD_NAME - default "SETTINGS RESET" + default "SETTINGS RESET" endif diff --git a/app/boards/shields/settings_reset/Kconfig.shield b/app/boards/shields/settings_reset/Kconfig.shield index b5ce97f9310..b1e6ed0e464 100644 --- a/app/boards/shields/settings_reset/Kconfig.shield +++ b/app/boards/shields/settings_reset/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_SETTINGS_RESET - def_bool $(shields_list_contains,settings_reset) + def_bool $(shields_list_contains,settings_reset) diff --git a/app/boards/shields/settings_reset/settings_reset.overlay b/app/boards/shields/settings_reset/settings_reset.overlay index 51e04ba7bc7..77a9d85871d 100644 --- a/app/boards/shields/settings_reset/settings_reset.overlay +++ b/app/boards/shields/settings_reset/settings_reset.overlay @@ -7,18 +7,18 @@ #include / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; - input-gpios - = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; + input-gpios + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; }; diff --git a/app/boards/shields/snap/Kconfig.defconfig b/app/boards/shields/snap/Kconfig.defconfig index c4a67e65d20..e21111e969a 100644 --- a/app/boards/shields/snap/Kconfig.defconfig +++ b/app/boards/shields/snap/Kconfig.defconfig @@ -4,44 +4,44 @@ if SHIELD_SNAP_LEFT config ZMK_KEYBOARD_NAME - default "SNAP" + default "SNAP" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_SNAP_LEFT || SHIELD_SNAP_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/snap/Kconfig.shield b/app/boards/shields/snap/Kconfig.shield index eb02c45f8f7..edbd1b57cd7 100644 --- a/app/boards/shields/snap/Kconfig.shield +++ b/app/boards/shields/snap/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_SNAP_LEFT - def_bool $(shields_list_contains,snap_left) + def_bool $(shields_list_contains,snap_left) config SHIELD_SNAP_RIGHT - def_bool $(shields_list_contains,snap_right) + def_bool $(shields_list_contains,snap_right) diff --git a/app/boards/shields/snap/boards/nice_nano.overlay b/app/boards/shields/snap/boards/nice_nano.overlay index 28e9ce69c32..1a51eb16736 100644 --- a/app/boards/shields/snap/boards/nice_nano.overlay +++ b/app/boards/shields/snap/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/snap/boards/nice_nano_v2.overlay b/app/boards/shields/snap/boards/nice_nano_v2.overlay index 28e9ce69c32..1a51eb16736 100644 --- a/app/boards/shields/snap/boards/nice_nano_v2.overlay +++ b/app/boards/shields/snap/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi index 77070db9f5c..a374ad1768b 100644 --- a/app/boards/shields/snap/snap.dtsi +++ b/app/boards/shields/snap/snap.dtsi @@ -7,30 +7,30 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan_composite; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan_composite; + zmk,matrix_transform = &default_transform; + }; - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - resolution = <4>; - status = "disabled"; - }; + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; - right_encoder: encoder_right { - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - resolution = <4>; - status = "disabled"; - }; + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + resolution = <4>; + status = "disabled"; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <17>; - rows = <6>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <17>; + rows = <6>; // | R0C06L | R0C05L | R0C04L | R0C03L | R0C02L | R0C01L | R0C00L | | R0C15R | R0C14R | R0C13R | R0C12R | R0C11R | R0C10R | R0C09R | R0C08R | // R1C07L | R1C06L | R1C05L | R1C04L | R1C03L | R1C02L | R1C01L | R1C00L | | R1C15R | R1C14R | R1C13R | R1C12R | R1C11R | R1C10R | R1C09R | R1C08R | R2C0XR | @@ -39,48 +39,48 @@ // R4C07L | R4C06L | R4C05L | R4C04L | R4C03L | R4C02L | R4C01L | R4C00L | | R4C15R | R4C14R | R4C13R | R4C12R | R4C11R | R4C10R | R4C09R | R5C08R | // R5C07L | R5C06L | R5C05L | R5C04L | R5C02L | R5C00L | | R5C15R | R5C14R | R5C13R | R5C12R | R5C11R | R5C10R | R5C09R | - map = < - RC(0,6) RC(0,5) RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,15) RC(0,14) RC(0,13) RC(0,12) RC(0,11) RC(0,10) RC(0,9) RC(0,8) + map = < + RC(0,6) RC(0,5) RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,15) RC(0,14) RC(0,13) RC(0,12) RC(0,11) RC(0,10) RC(0,9) RC(0,8) RC(1,7) RC(1,6) RC(1,5) RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,15) RC(1,14) RC(1,13) RC(1,12) RC(1,11) RC(1,10) RC(1,9) RC(1,8) RC(1,16) RC(2,7) RC(2,6) RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,0) RC(2,15) RC(2,14) RC(2,13) RC(2,12) RC(2,11) RC(2,10) RC(2,9) RC(3,8) RC(2,8) RC(3,7) RC(3,6) RC(3,5) RC(3,4) RC(3,3) RC(3,2) RC(3,0) RC(3,15) RC(3,14) RC(3,13) RC(3,12) RC(3,11) RC(3,10) RC(3,9) RC(4,8) RC(4,7) RC(4,6) RC(4,5) RC(4,4) RC(4,3) RC(4,2) RC(4,1) RC(4,0) RC(4,15) RC(4,14) RC(4,13) RC(4,12) RC(4,11) RC(4,10) RC(4,9) RC(5,8) RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,2) RC(5,0) RC(5,15) RC(5,14) RC(5,13) RC(5,12) RC(5,11) RC(5,10) RC(5,9) - >; - }; + >; + }; - kscan_composite: kscan { - compatible = "zmk,kscan-composite"; - label = "KSCAN"; - rows = <6>; - columns = <17>; + kscan_composite: kscan { + compatible = "zmk,kscan-composite"; + label = "KSCAN"; + rows = <6>; + columns = <17>; - demux { - kscan = <&kscan_demux>; - }; - }; + demux { + kscan = <&kscan_demux>; + }; + }; - kscan_demux: kscan_demux { - compatible = "zmk,kscan-gpio-demux"; - label = "DEMUX"; - polling-interval-msec = <25>; - }; + kscan_demux: kscan_demux { + compatible = "zmk,kscan-gpio-demux"; + label = "DEMUX"; + polling-interval-msec = <25>; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/snap/snap.keymap b/app/boards/shields/snap/snap.keymap index cc4c5255355..7c750f9f14c 100644 --- a/app/boards/shields/snap/snap.keymap +++ b/app/boards/shields/snap/snap.keymap @@ -10,38 +10,38 @@ #include / { - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - label = "Default"; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp C_VOL_UP C_VOL_DN>; - bindings = < + default_layer { + label = "Default"; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp C_VOL_UP C_VOL_DN>; + bindings = < &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp KP_NUM &kp PAUSE_BREAK &kp C_MUTE &kp TILDE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL &kp HOME &kp F13 &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp END &kp F14 &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP &kp F15 &kp LSHFT &kp NUHS &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN &kp F16 &kp LCTRL &kp LGUI &kp LALT &mo 1 &kp SPACE &kp BSPC &mo 1 &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT - >; - }; + >; + }; - function_layer { - label = "Function"; - sensor-bindings = <&inc_dec_kp C_NEXT C_PREV &inc_dec_kp C_NEXT C_PREV>; - bindings = < + function_layer { + label = "Function"; + sensor-bindings = <&inc_dec_kp C_NEXT C_PREV &inc_dec_kp C_NEXT C_PREV>; + bindings = < &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader &kp C_PP &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_PP &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_TOG &rgb_ug RGB_BRI &rgb_ug RGB_EFF &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &rgb_ug RGB_HUD &rgb_ug RGB_BRD &rgb_ug RGB_HUI - >; - }; - }; + >; + }; + }; }; diff --git a/app/boards/shields/snap/snap_left.overlay b/app/boards/shields/snap/snap_left.overlay index b5b8a8413a3..abbe945045a 100644 --- a/app/boards/shields/snap/snap_left.overlay +++ b/app/boards/shields/snap/snap_left.overlay @@ -7,28 +7,28 @@ #include "snap.dtsi" &kscan_demux { - input-gpios - = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - output-gpios - = <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - ; + input-gpios + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + output-gpios + = <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - a-gpios = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - status = "okay"; + a-gpios = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + status = "okay"; }; &oled { - segment-remap; - com-invdir; + segment-remap; + com-invdir; }; diff --git a/app/boards/shields/snap/snap_right.overlay b/app/boards/shields/snap/snap_right.overlay index dc71a5cf29b..ad04ae24057 100644 --- a/app/boards/shields/snap/snap_right.overlay +++ b/app/boards/shields/snap/snap_right.overlay @@ -8,44 +8,44 @@ / { kscan_direct: kscan_direct { - compatible = "zmk,kscan-gpio-direct"; - label = "DIRECT"; - input-gpios - = <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; + compatible = "zmk,kscan-gpio-direct"; + label = "DIRECT"; + input-gpios + = <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; }; &default_transform { - col-offset = <8>; + col-offset = <8>; }; &kscan_composite { - direct { - kscan = <&kscan_direct>; - row-offset = <1>; - column-offset = <8>; - }; + direct { + kscan = <&kscan_direct>; + row-offset = <1>; + column-offset = <8>; + }; }; &kscan_demux { - input-gpios - = <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - output-gpios - = <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - ; + input-gpios + = <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + output-gpios + = <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - status = "okay"; + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + status = "okay"; }; diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index afa710ffa90..cc598d6720f 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -4,44 +4,44 @@ if SHIELD_SOFLE_LEFT config ZMK_KEYBOARD_NAME - default "Sofle" + default "Sofle" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_SOFLE_LEFT || SHIELD_SOFLE_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/sofle/Kconfig.shield b/app/boards/shields/sofle/Kconfig.shield index e23a97a133f..a865e839625 100644 --- a/app/boards/shields/sofle/Kconfig.shield +++ b/app/boards/shields/sofle/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_SOFLE_LEFT - def_bool $(shields_list_contains,sofle_left) + def_bool $(shields_list_contains,sofle_left) config SHIELD_SOFLE_RIGHT - def_bool $(shields_list_contains,sofle_right) + def_bool $(shields_list_contains,sofle_right) diff --git a/app/boards/shields/sofle/sofle_left.overlay b/app/boards/shields/sofle/sofle_left.overlay index 13bfb3977e6..057e6050361 100644 --- a/app/boards/shields/sofle/sofle_left.overlay +++ b/app/boards/shields/sofle/sofle_left.overlay @@ -7,16 +7,16 @@ #include "sofle.dtsi" &kscan0 { - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/sofle/sofle_right.overlay b/app/boards/shields/sofle/sofle_right.overlay index 53b10e601af..65e5f330730 100644 --- a/app/boards/shields/sofle/sofle_right.overlay +++ b/app/boards/shields/sofle/sofle_right.overlay @@ -7,20 +7,20 @@ #include "sofle.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig index 03078cd6672..a28792c7bb1 100644 --- a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig @@ -4,50 +4,50 @@ if SHIELD_SPLITKB_AURORA_CORNE_LEFT config ZMK_KEYBOARD_NAME - default "Aurora Corne" + default "Aurora Corne" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif # SHIELD_SPLITKB_AURORA_CORNE_LEFT if SHIELD_SPLITKB_AURORA_CORNE_LEFT || SHIELD_SPLITKB_AURORA_CORNE_RIGHT config ZMK_SPLIT - default y + default y config ZMK_RGB_UNDERGLOW - select WS2812_STRIP - select SPI + select WS2812_STRIP + select SPI config ZMK_DISPLAY if ZMK_DISPLAY config SSD1306 - default y + default y config I2C - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.shield b/app/boards/shields/splitkb_aurora_corne/Kconfig.shield index 3de10105976..1efcdf00212 100644 --- a/app/boards/shields/splitkb_aurora_corne/Kconfig.shield +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_SPLITKB_AURORA_CORNE_LEFT - def_bool $(shields_list_contains,splitkb_aurora_corne_left) + def_bool $(shields_list_contains,splitkb_aurora_corne_left) config SHIELD_SPLITKB_AURORA_CORNE_RIGHT - def_bool $(shields_list_contains,splitkb_aurora_corne_right) + def_bool $(shields_list_contains,splitkb_aurora_corne_right) diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi index aa52594882e..a1b7b64382c 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi @@ -8,85 +8,85 @@ / { - chosen { - zephyr,display = &oled; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - five_column_transform: keymap_transform_1 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; // | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) - >; - }; + >; + }; - left_encoder: left_encoder { - compatible = "alps,ec11"; - label = "L_ENCODER"; - resolution = <4>; - status = "disabled"; + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "L_ENCODER"; + resolution = <4>; + status = "disabled"; - a-gpios = <&pro_micro 4 GPIO_PULL_UP>; - b-gpios = <&pro_micro 5 GPIO_PULL_UP>; - }; + a-gpios = <&pro_micro 4 GPIO_PULL_UP>; + b-gpios = <&pro_micro 5 GPIO_PULL_UP>; + }; - right_encoder: right_encoder { - compatible = "alps,ec11"; - label = "R_ENCODER"; - resolution = <4>; - status = "disabled"; + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "R_ENCODER"; + resolution = <4>; + status = "disabled"; - a-gpios = <&pro_micro 19 GPIO_PULL_UP>; - b-gpios = <&pro_micro 18 GPIO_PULL_UP>; - }; + a-gpios = <&pro_micro 19 GPIO_PULL_UP>; + b-gpios = <&pro_micro 18 GPIO_PULL_UP>; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap index 53218a860c6..0555cf41757 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap @@ -35,7 +35,7 @@ &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; @@ -49,7 +49,7 @@ &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay index 82234278569..89563f42917 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay @@ -7,36 +7,36 @@ #include "splitkb_aurora_corne.dtsi" / { - chosen { - zmk,kscan = &kscan; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; - diode-direction = "col2row"; - - row-gpios - = <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - ; - - col-gpios - = <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - ; - }; + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; + }; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay index c1d34ffda17..e05df223f5b 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay @@ -7,42 +7,42 @@ #include "splitkb_aurora_corne.dtsi" / { - chosen { - zmk,kscan = &kscan; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; - diode-direction = "col2row"; - - row-gpios - = <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - ; - - col-gpios - = <&pro_micro 9 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - , <&pro_micro 7 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - ; - }; + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + ; + }; }; &right_encoder { - status = "okay"; + status = "okay"; }; &default_transform { - col-offset = <6>; + col-offset = <6>; }; &five_column_transform { - col-offset = <6>; + col-offset = <6>; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig index 221bf90af29..e54e2b4332f 100644 --- a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig @@ -4,50 +4,50 @@ if SHIELD_SPLITKB_AURORA_LILY58_LEFT config ZMK_KEYBOARD_NAME - default "Aurora Lily58" + default "Aurora Lily58" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif # SHIELD_SPLITKB_AURORA_LILY58_LEFT if SHIELD_SPLITKB_AURORA_LILY58_LEFT || SHIELD_SPLITKB_AURORA_LILY58_RIGHT config ZMK_SPLIT - default y + default y config ZMK_RGB_UNDERGLOW - select WS2812_STRIP - select SPI + select WS2812_STRIP + select SPI config ZMK_DISPLAY if ZMK_DISPLAY config SSD1306 - default y + default y config I2C - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield b/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield index 35f8b2d1eff..a64f47dca15 100644 --- a/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_SPLITKB_AURORA_LILY58_LEFT - def_bool $(shields_list_contains,splitkb_aurora_lily58_left) + def_bool $(shields_list_contains,splitkb_aurora_lily58_left) config SHIELD_SPLITKB_AURORA_LILY58_RIGHT - def_bool $(shields_list_contains,splitkb_aurora_lily58_right) + def_bool $(shields_list_contains,splitkb_aurora_lily58_right) diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay index 5b9ce4a8762..0eafa704333 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay @@ -2,46 +2,46 @@ &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; - - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <5>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - color-mapping = ; - }; + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay index 9e168625086..6601d27d4d8 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay @@ -1,46 +1,46 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; - - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <5>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - color-mapping = ; - }; + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <5>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi index 08e2ac9ea8e..908356c757b 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi @@ -8,71 +8,71 @@ / { - chosen { - zephyr,display = &oled; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <14>; - rows = <5>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | // | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | // | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) - >; - }; + >; + }; - left_encoder: left_encoder { - compatible = "alps,ec11"; - label = "L_ENCODER"; - resolution = <4>; - status = "disabled"; + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "L_ENCODER"; + resolution = <4>; + status = "disabled"; - a-gpios = <&pro_micro 5 GPIO_PULL_UP>; - b-gpios = <&pro_micro 4 GPIO_PULL_UP>; - }; + a-gpios = <&pro_micro 5 GPIO_PULL_UP>; + b-gpios = <&pro_micro 4 GPIO_PULL_UP>; + }; - right_encoder: right_encoder { - compatible = "alps,ec11"; - label = "R_ENCODER"; - resolution = <4>; - status = "disabled"; + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "R_ENCODER"; + resolution = <4>; + status = "disabled"; - a-gpios = <&pro_micro 18 GPIO_PULL_UP>; - b-gpios = <&pro_micro 19 GPIO_PULL_UP>; - }; + a-gpios = <&pro_micro 18 GPIO_PULL_UP>; + b-gpios = <&pro_micro 19 GPIO_PULL_UP>; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap index 376bcf26c65..b8a9103b1d6 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.keymap @@ -10,61 +10,61 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | // | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | - bindings = < + bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp GRAVE &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp LALT &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp BSPC &kp RGUI - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; - lower_layer { + lower_layer { // ------------------------------------------------------------------------------------------------------------ // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | // | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | | | - bindings = < + bindings = < &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp TILDE &trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &trans &trans &trans &trans &trans &trans &trans - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; - raise_layer { + raise_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | v | ^ | -> | | // | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | // | | | | | | | | | | - bindings = < + bindings = < &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KP_PLUS &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &trans &trans &trans &trans &trans &trans &trans &trans - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay index 10a195ff08c..c4f12ddaf98 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay @@ -7,37 +7,37 @@ #include "splitkb_aurora_lily58.dtsi" / { - chosen { - zmk,kscan = &kscan; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; - diode-direction = "row2col"; - - row-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - , <&pro_micro 7 GPIO_ACTIVE_HIGH> - , <&pro_micro 8 GPIO_ACTIVE_HIGH> - ; - - col-gpios - = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - ; - }; + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay index eaebff36da2..09da298cd7d 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay @@ -7,39 +7,39 @@ #include "splitkb_aurora_lily58.dtsi" / { - chosen { - zmk,kscan = &kscan; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; - diode-direction = "row2col"; - - row-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; - - col-gpios - = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - ; - }; + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; }; &right_encoder { - status = "okay"; + status = "okay"; }; &default_transform { - col-offset = <6>; + col-offset = <6>; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig index ac07c935a91..83cb1bf687c 100644 --- a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig @@ -4,50 +4,50 @@ if SHIELD_SPLITKB_AURORA_SWEEP_LEFT config ZMK_KEYBOARD_NAME - default "Aurora Sweep" + default "Aurora Sweep" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif # SHIELD_SPLITKB_AURORA_SWEEP_LEFT if SHIELD_SPLITKB_AURORA_SWEEP_LEFT || SHIELD_SPLITKB_AURORA_SWEEP_RIGHT config ZMK_SPLIT - default y + default y config ZMK_RGB_UNDERGLOW - select WS2812_STRIP - select SPI + select WS2812_STRIP + select SPI config ZMK_DISPLAY if ZMK_DISPLAY config SSD1306 - default y + default y config I2C - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield b/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield index abb05282eda..7d92134ccd9 100644 --- a/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_SPLITKB_AURORA_SWEEP_LEFT - def_bool $(shields_list_contains,splitkb_aurora_sweep_left) + def_bool $(shields_list_contains,splitkb_aurora_sweep_left) config SHIELD_SPLITKB_AURORA_SWEEP_RIGHT - def_bool $(shields_list_contains,splitkb_aurora_sweep_right) + def_bool $(shields_list_contains,splitkb_aurora_sweep_right) diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay index f1330669641..810340f9af4 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi index a999df6a073..ab568a0986d 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi @@ -8,73 +8,73 @@ / { - chosen { - zephyr,display = &oled; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; - map = < - RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) - RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) - RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) - RC(3,1) RC(3,0) RC(3,5) RC(3,6) - >; - }; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; + map = < + RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) + RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) + RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,1) RC(3,0) RC(3,5) RC(3,6) + >; + }; - left_encoder1: left_encoder1 { - compatible = "alps,ec11"; - label = "L_ENCODER1"; - resolution = <4>; - status = "disabled"; - }; + left_encoder1: left_encoder1 { + compatible = "alps,ec11"; + label = "L_ENCODER1"; + resolution = <4>; + status = "disabled"; + }; - left_encoder2: left_encoder2 { - compatible = "alps,ec11"; - label = "L_ENCODER2"; - resolution = <4>; - status = "disabled"; - }; + left_encoder2: left_encoder2 { + compatible = "alps,ec11"; + label = "L_ENCODER2"; + resolution = <4>; + status = "disabled"; + }; - right_encoder1: right_encoder1 { - compatible = "alps,ec11"; - label = "R_ENCODER1"; - resolution = <4>; - status = "disabled"; - }; + right_encoder1: right_encoder1 { + compatible = "alps,ec11"; + label = "R_ENCODER1"; + resolution = <4>; + status = "disabled"; + }; - right_encoder2: right_encoder2 { - compatible = "alps,ec11"; - label = "R_ENCODER2"; - resolution = <4>; - status = "disabled"; - }; + right_encoder2: right_encoder2 { + compatible = "alps,ec11"; + label = "R_ENCODER2"; + resolution = <4>; + status = "disabled"; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder1 &right_encoder1>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder1 &right_encoder1>; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap index 385d2022fa4..4b57beac644 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap @@ -62,41 +62,41 @@ keymap { compatible = "zmk,keymap"; - default_layer { - bindings = < - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P - &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT - &mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET - &mo 1 &kp LCTL &kp SPC &mo 2 - >; - }; - - left_layer { - bindings = < - &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 - &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL - &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL - &mo 1 &kp LGUI &kp RGUI &mo 2 - >; - }; - - right_layer { - bindings = < - &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN - &kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP - &kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT - &mo 3 &kp LCTL &kp SPC &mo 2 - >; - }; - - tri_layer { - bindings = < - &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans - &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans - &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans - &trans &trans &trans &trans - >; - }; - - }; + default_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT + &mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET + &mo 1 &kp LCTL &kp SPC &mo 2 + >; + }; + + left_layer { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL + &kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL + &mo 1 &kp LGUI &kp RGUI &mo 2 + >; + }; + + right_layer { + bindings = < + &kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN + &kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP + &kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT + &mo 3 &kp LCTL &kp SPC &mo 2 + >; + }; + + tri_layer { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans + &bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans + &trans &trans &trans &trans + >; + }; + + }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay index 1ff5ed5eaeb..f62d24fa4ae 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay @@ -7,42 +7,42 @@ #include "splitkb_aurora_sweep.dtsi" / { - chosen { - zmk,kscan = &kscan; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; - diode-direction = "row2col"; - - row-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - ; - - col-gpios - = <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - ; - }; + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; }; &left_encoder1 { - status = "okay"; - a-gpios = <&pro_micro 9 GPIO_PULL_UP>; - b-gpios = <&pro_micro 8 GPIO_PULL_UP>; + status = "okay"; + a-gpios = <&pro_micro 9 GPIO_PULL_UP>; + b-gpios = <&pro_micro 8 GPIO_PULL_UP>; }; &left_encoder2 { - status = "okay"; - a-gpios = <&pro_micro 14 GPIO_PULL_UP>; - b-gpios = <&pro_micro 16 GPIO_PULL_UP>; + status = "okay"; + a-gpios = <&pro_micro 14 GPIO_PULL_UP>; + b-gpios = <&pro_micro 16 GPIO_PULL_UP>; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay index 81ddca404dc..ff1d16d329e 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay @@ -7,45 +7,45 @@ #include "splitkb_aurora_sweep.dtsi" / { - chosen { - zmk,kscan = &kscan; - }; - - kscan: kscan { - compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; - diode-direction = "row2col"; - - row-gpios - = <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - ; - - col-gpios - = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> - ; - }; + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; + + col-gpios + = <&pro_micro 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + }; }; &right_encoder1 { - status = "okay"; - a-gpios = <&pro_micro 16 GPIO_PULL_UP>; - b-gpios = <&pro_micro 10 GPIO_PULL_UP>; + status = "okay"; + a-gpios = <&pro_micro 16 GPIO_PULL_UP>; + b-gpios = <&pro_micro 10 GPIO_PULL_UP>; }; &right_encoder2 { - status = "okay"; - a-gpios = <&pro_micro 20 GPIO_PULL_UP>; - b-gpios = <&pro_micro 4 GPIO_PULL_UP>; + status = "okay"; + a-gpios = <&pro_micro 20 GPIO_PULL_UP>; + b-gpios = <&pro_micro 4 GPIO_PULL_UP>; }; &default_transform { - col-offset = <5>; + col-offset = <5>; }; diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index 14063d3e46a..52d62c9d8e9 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -6,16 +6,16 @@ if SHIELD_SPLITREUS62_LEFT config ZMK_KEYBOARD_NAME - default "Splitreus62" + default "Splitreus62" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_SPLITREUS62_LEFT || SHIELD_SPLITREUS62_RIGHT config ZMK_SPLIT - default y + default y endif diff --git a/app/boards/shields/splitreus62/Kconfig.shield b/app/boards/shields/splitreus62/Kconfig.shield index 762d991b4ab..951ab9fb9a1 100644 --- a/app/boards/shields/splitreus62/Kconfig.shield +++ b/app/boards/shields/splitreus62/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_SPLITREUS62_LEFT - def_bool $(shields_list_contains,splitreus62_left) + def_bool $(shields_list_contains,splitreus62_left) config SHIELD_SPLITREUS62_RIGHT - def_bool $(shields_list_contains,splitreus62_right) + def_bool $(shields_list_contains,splitreus62_right) diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index 905605e903f..abc3b7f7d27 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -7,44 +7,44 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <6>; -// | SW0 | SW5 | SW10 | SW15 | SW20 | SW25 | SW25 | SW20 | SW15 | SW10 | SW5 | SW1 | -// | SW1 | SW6 | SW11 | SW16 | SW21 | SW26 | SW26 | SW21 | SW16 | SW11 | SW6 | SW2 | -// | SW2 | SW7 | SW12 | SW17 | SW22 | SW27 | SW27 | SW22 | SW17 | SW12 | SW7 | SW3 | -// | SW3 | SW8 | SW13 | SW18 | SW23 | SW28 | SW28 | SW23 | SW18 | SW13 | SW8 | SW4 | + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <6>; +// | SW0 | SW5 | SW10 | SW15 | SW20 | SW25 | SW25 | SW20 | SW15 | SW10 | SW5 | SW1 | +// | SW1 | SW6 | SW11 | SW16 | SW21 | SW26 | SW26 | SW21 | SW16 | SW11 | SW6 | SW2 | +// | SW2 | SW7 | SW12 | SW17 | SW22 | SW27 | SW27 | SW22 | SW17 | SW12 | SW7 | SW3 | +// | SW3 | SW8 | SW13 | SW18 | SW23 | SW28 | SW28 | SW23 | SW18 | SW13 | SW8 | SW4 | // | SW4 | SW9 | SW14 | SW19 | SW24 | SW29 | SW29 | SW24 | SW19 | SW14 | SW9 | SW5 | // SW30 | SW30 - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(5,5) RC(5,6) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "row2col"; - row-gpios - = <&pro_micro 1 GPIO_ACTIVE_HIGH > - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 2 GPIO_ACTIVE_HIGH> - , <&pro_micro 4 GPIO_ACTIVE_HIGH> - , <&pro_micro 5 GPIO_ACTIVE_HIGH> - , <&pro_micro 6 GPIO_ACTIVE_HIGH> - ; + diode-direction = "row2col"; + row-gpios + = <&pro_micro 1 GPIO_ACTIVE_HIGH > + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + ; - }; + }; }; diff --git a/app/boards/shields/splitreus62/splitreus62.keymap b/app/boards/shields/splitreus62/splitreus62.keymap index c1b0f50f1b5..c7bdb4439aa 100644 --- a/app/boards/shields/splitreus62/splitreus62.keymap +++ b/app/boards/shields/splitreus62/splitreus62.keymap @@ -9,24 +9,24 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // ------------------------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | | N | M | , | . | / | SHIFT | // | LCTL | LGUI | LALT | GRAV | | EQL | DEL | BKSP| | RET | SPC | LBKT | RBKT | LBKT | HOME | END | - bindings = < + bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp LCTRL &kp LGUI &kp LALT &kp GRAVE &kp EQUAL &kp DEL &kp SPACE &kp LBKT &kp RBKT &kp MINUS &kp HOME &kp END &kp BSPC &kp RET - >; - }; - }; + >; + }; + }; }; diff --git a/app/boards/shields/splitreus62/splitreus62_left.overlay b/app/boards/shields/splitreus62/splitreus62_left.overlay index ba5c21ffb13..992eb0db9bb 100644 --- a/app/boards/shields/splitreus62/splitreus62_left.overlay +++ b/app/boards/shields/splitreus62/splitreus62_left.overlay @@ -7,12 +7,12 @@ #include "splitreus62.dtsi" &kscan0 { - col-gpios - = <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + col-gpios + = <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; }; diff --git a/app/boards/shields/splitreus62/splitreus62_right.overlay b/app/boards/shields/splitreus62/splitreus62_right.overlay index 9f76e7eb706..d83db26d6d9 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.overlay +++ b/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -7,16 +7,16 @@ #include "splitreus62.dtsi" &default_transform { - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + col-gpios + = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; }; diff --git a/app/boards/shields/tg4x/Kconfig.shield b/app/boards/shields/tg4x/Kconfig.shield index 27166b10c51..d7fc1c13c6a 100644 --- a/app/boards/shields/tg4x/Kconfig.shield +++ b/app/boards/shields/tg4x/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_TG4X - def_bool $(shields_list_contains,tg4x) + def_bool $(shields_list_contains,tg4x) diff --git a/app/boards/shields/tg4x/boards/nice_nano.overlay b/app/boards/shields/tg4x/boards/nice_nano.overlay index 54046bf548e..85ab6fbc260 100644 --- a/app/boards/shields/tg4x/boards/nice_nano.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay index 54046bf548e..85ab6fbc260 100644 --- a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/tg4x/tg4x.keymap b/app/boards/shields/tg4x/tg4x.keymap index e68d0f92de9..89a478ae52a 100644 --- a/app/boards/shields/tg4x/tg4x.keymap +++ b/app/boards/shields/tg4x/tg4x.keymap @@ -9,46 +9,46 @@ #include / { - behaviors { - ht: hold_tap { - compatible = "zmk,behavior-hold-tap"; - label = "Hold Tap"; - #binding-cells = <2>; - tapping-term-ms = <200>; - flavor = "tap-preferred"; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + ht: hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "Hold Tap"; + #binding-cells = <2>; + tapping-term-ms = <200>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < + default_layer { + bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp SEMI &kp BSPC &ht CAPS TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp APOS &kp RET &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp RSHFT &kp LCTRL &kp LGUI &kp LALT < 1 SPACE &kp SPACE &kp RALT &kp RGUI &mo 2 &kp RCTRL - >; - }; + >; + }; - function_layer { - bindings = < + function_layer { + bindings = < &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp DEL &none &kp HOME &kp PG_UP &trans &trans &trans &kp LBKT &kp RBKT &kp EQUAL &kp BSLH &kp FSLH &trans &trans &kp END &kp PG_DN &trans &trans &trans &trans &trans &trans &kp UP &trans &trans &trans &trans &trans &trans &trans &kp LEFT &kp DOWN &kp RIGHT - >; - }; + >; + }; - other_layer { - bindings = < + other_layer { + bindings = < &kp PRINTSCREEN &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &bootloader &sys_reset &trans &trans &trans &trans &trans &trans &kp C_VOL_UP &kp C_VOL_DN &kp C_PP - >; - }; + >; + }; - }; + }; }; diff --git a/app/boards/shields/tg4x/tg4x.overlay b/app/boards/shields/tg4x/tg4x.overlay index ca6e23c3183..c0b1b3bc807 100644 --- a/app/boards/shields/tg4x/tg4x.overlay +++ b/app/boards/shields/tg4x/tg4x.overlay @@ -7,49 +7,49 @@ #include / { - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - - row-gpios - = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - col-gpios - = <&pro_micro 1 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - rows = <8>; - columns = <7>; - - map = < + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + rows = <8>; + columns = <7>; + + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(6,0) RC(6,1) RC(6,2) RC(6,4) RC(3,0) RC(3,1) RC(3,2) RC(3,4) RC(3,5) RC(7,1) RC(7,2) RC(7,3) RC(7,4) - >; - }; + >; + }; - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; }; diff --git a/app/boards/shields/tidbit/Kconfig.defconfig b/app/boards/shields/tidbit/Kconfig.defconfig index e3655a9e379..393fbef1bf2 100644 --- a/app/boards/shields/tidbit/Kconfig.defconfig +++ b/app/boards/shields/tidbit/Kconfig.defconfig @@ -4,35 +4,35 @@ if SHIELD_TIDBIT config ZMK_KEYBOARD_NAME - default "tidbit" + default "tidbit" if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/tidbit/Kconfig.shield b/app/boards/shields/tidbit/Kconfig.shield index c1e8ecca3dd..dc811bb2e96 100644 --- a/app/boards/shields/tidbit/Kconfig.shield +++ b/app/boards/shields/tidbit/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_TIDBIT - def_bool $(shields_list_contains,tidbit) + def_bool $(shields_list_contains,tidbit) diff --git a/app/boards/shields/tidbit/boards/nice_nano.overlay b/app/boards/shields/tidbit/boards/nice_nano.overlay index ad66feac7f6..75514ac47db 100644 --- a/app/boards/shields/tidbit/boards/nice_nano.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay index ad66feac7f6..75514ac47db 100644 --- a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index ba97a57a92b..fb84c89ed41 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -7,111 +7,111 @@ #include / { - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "row2col"; - - row-gpios - = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - col-gpios - = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <4>; - rows = <5>; - - map = < - RC(0,1) RC(0,2) RC(0,3) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) - RC(3,0) RC(3,1) RC(3,2) RC(3,3) - RC(4,0) RC(4,1) RC(4,2) RC(4,3) - >; - }; - - encoder_1_top_row: encoder_1_top_row { - compatible = "alps,ec11"; - label = "Top Row Encoder"; - a-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - encoder_1: encoder_1 { - compatible = "alps,ec11"; - label = "Encoder 1"; - a-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - encoder_2: encoder_2 { - compatible = "alps,ec11"; - label = "Encoder 2"; - a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - encoder_3: encoder_3 { - compatible = "alps,ec11"; - label = "Encoder 3"; - a-gpios = <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - encoder_4: encoder_4 { - compatible = "alps,ec11"; - label = "Encoder 4"; - a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; - status = "disabled"; - }; - - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "row2col"; + + row-gpios + = <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <4>; + rows = <5>; + + map = < + RC(0,1) RC(0,2) RC(0,3) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) + >; + }; + + encoder_1_top_row: encoder_1_top_row { + compatible = "alps,ec11"; + label = "Top Row Encoder"; + a-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + encoder_1: encoder_1 { + compatible = "alps,ec11"; + label = "Encoder 1"; + a-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + encoder_2: encoder_2 { + compatible = "alps,ec11"; + label = "Encoder 2"; + a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + encoder_3: encoder_3 { + compatible = "alps,ec11"; + label = "Encoder 3"; + a-gpios = <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + encoder_4: encoder_4 { + compatible = "alps,ec11"; + label = "Encoder 4"; + a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; }; &pro_micro_i2c { - status = "okay"; - - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/tidbit/tidbit.keymap b/app/boards/shields/tidbit/tidbit.keymap index 11424dc8f25..2e415bf8f4d 100644 --- a/app/boards/shields/tidbit/tidbit.keymap +++ b/app/boards/shields/tidbit/tidbit.keymap @@ -10,40 +10,40 @@ #include &encoder_1_top_row { - status = "okay"; + status = "okay"; }; / { - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&encoder_1_top_row>; - }; - - keymap { - compatible = "zmk,keymap"; - - default_layer { - bindings = < - &kp KP_NUMLOCK &kp KP_ASTERISK &kp KP_MINUS - &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_PLUS - &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &none - &kp KP_NUMBER_1 &kp KP_NUMBER_2 &kp KP_NUMBER_3 < 1 KP_ENTER - &none &kp KP_NUMBER_0 &kp KP_DOT &none - >; - - sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; - }; - - func_layer { - bindings = < - &none &sys_reset &bootloader - &out OUT_TOG &out OUT_USB &out OUT_BLE &none - &bt BT_SEL 0 &bt BT_PRV &bt BT_NXT &bt BT_CLR - &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &tog 0 - &kp C_MUTE &none &none &none - >; - - sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; - }; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder_1_top_row>; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp KP_NUMLOCK &kp KP_ASTERISK &kp KP_MINUS + &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_PLUS + &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &none + &kp KP_NUMBER_1 &kp KP_NUMBER_2 &kp KP_NUMBER_3 < 1 KP_ENTER + &none &kp KP_NUMBER_0 &kp KP_DOT &none + >; + + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; + }; + + func_layer { + bindings = < + &none &sys_reset &bootloader + &out OUT_TOG &out OUT_USB &out OUT_BLE &none + &bt BT_SEL 0 &bt BT_PRV &bt BT_NXT &bt BT_CLR + &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &tog 0 + &kp C_MUTE &none &none &none + >; + + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; + }; + }; }; diff --git a/app/boards/shields/tidbit/tidbit_19key.keymap b/app/boards/shields/tidbit/tidbit_19key.keymap index 5710aeaf392..1be71e7a9b7 100644 --- a/app/boards/shields/tidbit/tidbit_19key.keymap +++ b/app/boards/shields/tidbit/tidbit_19key.keymap @@ -11,40 +11,40 @@ #include &encoder_4 { - status = "okay"; + status = "okay"; }; / { - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&encoder_4>; - }; - - keymap { - compatible = "zmk,keymap"; - - default_layer { - bindings = < - &tog 1 &kp KP_NUMLOCK &kp KP_SLASH - &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_ASTERISK - &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &kp KP_MINUS - &kp KP_NUMBER_1 &kp KP_NUMBER_2 &kp KP_NUMBER_3 &kp KP_PLUS - &kp C_MUTE &kp KP_NUMBER_0 &kp KP_DOT &kp KP_ENTER - >; - - sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; - }; - - func_layer { - bindings = < - &tog 0 &sys_reset &bootloader - &out OUT_TOG &out OUT_USB &out OUT_BLE &none - &bt BT_SEL 0 &bt BT_PRV &bt BT_NXT &bt BT_CLR - &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none - &kp C_MUTE &none &none &none - >; - - sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; - }; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder_4>; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &tog 1 &kp KP_NUMLOCK &kp KP_SLASH + &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_ASTERISK + &kp KP_NUMBER_4 &kp KP_NUMBER_5 &kp KP_NUMBER_6 &kp KP_MINUS + &kp KP_NUMBER_1 &kp KP_NUMBER_2 &kp KP_NUMBER_3 &kp KP_PLUS + &kp C_MUTE &kp KP_NUMBER_0 &kp KP_DOT &kp KP_ENTER + >; + + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; + }; + + func_layer { + bindings = < + &tog 0 &sys_reset &bootloader + &out OUT_TOG &out OUT_USB &out OUT_BLE &none + &bt BT_SEL 0 &bt BT_PRV &bt BT_NXT &bt BT_CLR + &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none + &kp C_MUTE &none &none &none + >; + + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; + }; + }; }; diff --git a/app/boards/shields/two_percent_milk/Kconfig.shield b/app/boards/shields/two_percent_milk/Kconfig.shield index ec2c3b1f46a..b6fbcfdcc46 100644 --- a/app/boards/shields/two_percent_milk/Kconfig.shield +++ b/app/boards/shields/two_percent_milk/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_TWO_PERCENT_MILK - def_bool $(shields_list_contains,two_percent_milk) + def_bool $(shields_list_contains,two_percent_milk) diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay index ad66feac7f6..75514ac47db 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay index ad66feac7f6..75514ac47db 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi3_default>; - pinctrl-1 = <&spi3_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay index 64d16572be6..d20e58e7d89 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi1_default: spi1_default { - group1 { - psels = ; - }; - }; - - spi1_sleep: spi1_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay index b84beb93112..3167898038c 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi1_default: spi1_default { - group1 { - psels = ; - }; - }; - - spi1_sleep: spi1_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay index 64d16572be6..d20e58e7d89 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay @@ -1,47 +1,47 @@ #include &pinctrl { - spi1_default: spi1_default { - group1 { - psels = ; - }; - }; - - spi1_sleep: spi1_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi1_default: spi1_default { + group1 { + psels = ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi1 { - compatible = "nordic,nrf-spim"; - status = "okay"; + compatible = "nordic,nrf-spim"; + status = "okay"; - pinctrl-0 = <&spi1_default>; - pinctrl-1 = <&spi1_sleep>; - pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <10>; /* arbitrary; change at will */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.overlay b/app/boards/shields/two_percent_milk/two_percent_milk.overlay index d43ed32133d..8d4a244a424 100644 --- a/app/boards/shields/two_percent_milk/two_percent_milk.overlay +++ b/app/boards/shields/two_percent_milk/two_percent_milk.overlay @@ -5,20 +5,20 @@ */ / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-direct"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; + label = "KSCAN"; - input-gpios - = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + input-gpios + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; - }; + }; }; \ No newline at end of file diff --git a/app/boards/shields/waterfowl/Kconfig.defconfig b/app/boards/shields/waterfowl/Kconfig.defconfig index 5a77ca11a14..dbee82b87d7 100644 --- a/app/boards/shields/waterfowl/Kconfig.defconfig +++ b/app/boards/shields/waterfowl/Kconfig.defconfig @@ -2,44 +2,44 @@ if SHIELD_WATERFOWL_LEFT config ZMK_KEYBOARD_NAME - default "Waterfowl" + default "Waterfowl" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_WATERFOWL_LEFT || SHIELD_WATERFOWL_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/waterfowl/Kconfig.shield b/app/boards/shields/waterfowl/Kconfig.shield index a321b73dd05..ec01a626376 100644 --- a/app/boards/shields/waterfowl/Kconfig.shield +++ b/app/boards/shields/waterfowl/Kconfig.shield @@ -3,7 +3,7 @@ config SHIELD_WATERFOWL_LEFT - def_bool $(shields_list_contains,waterfowl_left) + def_bool $(shields_list_contains,waterfowl_left) config SHIELD_WATERFOWL_RIGHT - def_bool $(shields_list_contains,waterfowl_right) + def_bool $(shields_list_contains,waterfowl_right) diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index a156360e6ab..7f4929b3451 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -7,79 +7,79 @@ #include / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <4>; -// | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | -// | MX10 | MX9 | MX8 | MX7 | MX6 | | MX6 | MX7 | MX8 | MX9 | MX10 | -// | MX15 | MX14 | MX13 | MX12 | MX11 | | MX11 | MX12 | MX13 | MX14 | MX15 | -// | MX20 | MX19 | MX18 | MX17 | MX16 | | MX16 | MX17 | MX18 | MX19 | MX20 | - map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) -RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) - >; - }; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | +// | MX10 | MX9 | MX8 | MX7 | MX6 | | MX6 | MX7 | MX8 | MX9 | MX10 | +// | MX15 | MX14 | MX13 | MX12 | MX11 | | MX11 | MX12 | MX13 | MX14 | MX15 | +// | MX20 | MX19 | MX18 | MX17 | MX16 | | MX16 | MX17 | MX18 | MX19 | MX20 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; - }; + }; - left_encoder: encoder_left { //roller - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - }; + left_encoder: encoder_left { //roller + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; - right_encoder: encoder_right { //Standard encoder on left half - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; - }; + right_encoder: encoder_right { //Standard encoder on left half + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; - // TODO: RGB node(s) + // TODO: RGB node(s) }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <64>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <63>; - prechargep = <0x22>; - }; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/waterfowl/waterfowl.keymap b/app/boards/shields/waterfowl/waterfowl.keymap index 9583499c2fb..c47f188b07e 100644 --- a/app/boards/shields/waterfowl/waterfowl.keymap +++ b/app/boards/shields/waterfowl/waterfowl.keymap @@ -9,10 +9,10 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { /* QWERTY * * ,----------------------------------. ,----------------------------------. @@ -26,17 +26,17 @@ * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ - bindings = < - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P - &mt LGUI A &mt LALT S &mt LCTRL D &mt LSHFT F &kp G &kp H &mt LSHFT J &mt LCTRL K &mt LALT L &mt LGUI SEMI - &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH - &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 - >; + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &mt LGUI A &mt LALT S &mt LCTRL D &mt LSHFT F &kp G &kp H &mt LSHFT J &mt LCTRL K &mt LALT L &mt LGUI SEMI + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; - }; + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; - navnum_layer { + navnum_layer { /* NAVNUM * * ,----------------------------------. ,----------------------------------. @@ -50,17 +50,17 @@ * | 1 | | DEL | SPACE | MO(3)| | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ - bindings = < - &trans &kp PG_UP &kp UP &kp PG_DN &trans &kp FSLH &kp N7 &kp N8 &kp N9 &kp MINUS - &kp HOME &kp LEFT &kp DOWN &kp RIGHT &kp END &kp EQUAL &kp N4 &kp N5 &kp N6 &kp PLUS - &trans &trans &kp INS &trans &trans &kp N0 &kp N1 &kp N2 &kp N3 &kp ASTERISK - &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 - >; + bindings = < + &trans &kp PG_UP &kp UP &kp PG_DN &trans &kp FSLH &kp N7 &kp N8 &kp N9 &kp MINUS + &kp HOME &kp LEFT &kp DOWN &kp RIGHT &kp END &kp EQUAL &kp N4 &kp N5 &kp N6 &kp PLUS + &trans &trans &kp INS &trans &trans &kp N0 &kp N1 &kp N2 &kp N3 &kp ASTERISK + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; - }; + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; - symbol_layer { + symbol_layer { /* SYM * * ,----------------------------------. ,----------------------------------. @@ -74,17 +74,17 @@ * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ - bindings = < - &kp PRCNT &kp AT &kp LBKT &kp RBKT &kp NON_US_BSLH &trans &trans &kp CARET &trans &trans - &kp HASH &kp EXCL &kp LPAR &kp RPAR &kp PIPE &kp UNDER &kp APOS &kp DOUBLE_QUOTES &kp TILDE &kp GRAVE - &kp DLLR &trans &kp LBRC &kp RBRC &kp AMPS &trans &trans &trans &trans &trans - &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 - >; + bindings = < + &kp PRCNT &kp AT &kp LBKT &kp RBKT &kp NON_US_BSLH &trans &trans &kp CARET &trans &trans + &kp HASH &kp EXCL &kp LPAR &kp RPAR &kp PIPE &kp UNDER &kp APOS &kp DOUBLE_QUOTES &kp TILDE &kp GRAVE + &kp DLLR &trans &kp LBRC &kp RBRC &kp AMPS &trans &trans &trans &trans &trans + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; - }; + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; - function_layer { + function_layer { /* FUNC * * ,----------------------------------. ,----------------------------------. @@ -98,15 +98,15 @@ * | 1 | | DEL | SPACE | TAB | | ESC | BS | ENTER | | 4 | * `-----' `--------------------' `--------------------' `-----' */ - bindings = < - &trans &trans &bt BT_CLR &trans &sys_reset &sys_reset &kp F7 &kp F8 &kp F9 &kp F11 - &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &kp F4 &kp F5 &kp F6 &kp F12 - &trans &trans &trans &trans &trans &kp F10 &kp F1 &kp F2 &kp F3 &kp F13 - &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 - >; + bindings = < + &trans &trans &bt BT_CLR &trans &sys_reset &sys_reset &kp F7 &kp F8 &kp F9 &kp F11 + &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &kp F4 &kp F5 &kp F6 &kp F12 + &trans &trans &trans &trans &trans &kp F10 &kp F1 &kp F2 &kp F3 &kp F13 + &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 + >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; - }; + sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + }; - }; + }; }; \ No newline at end of file diff --git a/app/boards/shields/waterfowl/waterfowl_left.overlay b/app/boards/shields/waterfowl/waterfowl_left.overlay index 031936eaae5..3b9fd42d404 100644 --- a/app/boards/shields/waterfowl/waterfowl_left.overlay +++ b/app/boards/shields/waterfowl/waterfowl_left.overlay @@ -7,15 +7,15 @@ #include "waterfowl.dtsi" &kscan0 { - col-gpios - = <&pro_micro 21 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/waterfowl/waterfowl_right.overlay b/app/boards/shields/waterfowl/waterfowl_right.overlay index cff0d53cc5f..bf8f3a446b1 100644 --- a/app/boards/shields/waterfowl/waterfowl_right.overlay +++ b/app/boards/shields/waterfowl/waterfowl_right.overlay @@ -7,20 +7,20 @@ #include "waterfowl.dtsi" &default_transform { - col-offset = <5>; + col-offset = <5>; }; &kscan0 { - col-gpios - = <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 18 GPIO_ACTIVE_HIGH> - , <&pro_micro 19 GPIO_ACTIVE_HIGH> - , <&pro_micro 20 GPIO_ACTIVE_HIGH> - , <&pro_micro 21 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/zmk_uno/Kconfig.shield b/app/boards/shields/zmk_uno/Kconfig.shield index 3f7331c3772..958915f59c0 100644 --- a/app/boards/shields/zmk_uno/Kconfig.shield +++ b/app/boards/shields/zmk_uno/Kconfig.shield @@ -2,4 +2,4 @@ # SPDX-License-Identifier: MIT config SHIELD_ZMK_UNO - def_bool $(shields_list_contains,zmk_uno) + def_bool $(shields_list_contains,zmk_uno) diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 12b5e2b33fe..04332911e9b 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -8,172 +8,172 @@ #include &arduino_i2c { - status = "okay"; + status = "okay"; }; &arduino_spi { - status = "okay"; + status = "okay"; - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; - /* WS2812 */ - chain-length = <7>; /* 4 underglow + 3 per-key LEDs */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; + /* WS2812 */ + chain-length = <7>; /* 4 underglow + 3 per-key LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; - color-mapping = ; - }; + color-mapping = ; + }; }; / { - chosen { - zmk,kscan = &kscan_matrix_comp; - zmk,backlight = &backlight; - zmk,underglow = &led_strip; - zmk,matrix-transform = &matrix_transform; - }; - - // Commented out until we add more powerful power domain support - // external_power { - // compatible = "zmk,ext-power-generic"; - // label = "EXT_POWER"; - // init-delay-ms = <200>; - // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; - // }; - - rgb_power { - compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - // label = "RGB_POWER"; - init-delay-ms = <200>; - control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; - }; - - backlight: gpioleds { - compatible = "gpio-leds"; - label = "Backlight LEDs"; - gpio_led_0 { - gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; - }; - }; - - matrix_transform: matrix_transform { - compatible = "zmk,matrix-transform"; - rows = <3>; - columns = <4>; - - map = < - RC(0,0) RC(0,1) - RC(1,0) RC(1,1) - RC(2,0) RC(2,1) RC(2,2) - >; - }; - - direct_matrix_transform: direct_matrix_transform { - compatible = "zmk,matrix-transform"; - rows = <3>; - columns = <4>; - - map = < - RC(0,0) RC(0,1) - RC(0,2) RC(0,3) - RC(1,0) RC(1,1) RC(1,2) - >; - }; - - kscan_matrix_comp: kscan_matrix_comp { - compatible = "zmk,kscan-composite"; - rows = <1>; - columns = <7>; - - label = "KSCAN_MATRIX_COMP"; - - matrix { - kscan = <&kscan_matrix>; - }; - - toggle { - kscan = <&kscan_sp3t_toggle>; - row-offset = <2>; - }; - - }; - - kscan_direct_comp: kscan_direct_comp { - compatible = "zmk,kscan-composite"; - - label = "KSCAN_DIRECT_COMP"; - status = "disabled"; - - matrix { - kscan = <&kscan_direct>; - }; - - toggle { - kscan = <&kscan_sp3t_toggle>; - row-offset = <1>; - }; - - }; - - kscan_matrix: kscan_matrix { - compatible = "zmk,kscan-gpio-matrix"; - - diode-direction = "col2row"; - - col-gpios - = <&arduino_header 10 GPIO_ACTIVE_HIGH> - , <&arduino_header 9 GPIO_ACTIVE_HIGH> - ; - - row-gpios - = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - }; - - kscan_direct: kscan_direct { - compatible = "zmk,kscan-gpio-direct"; - status = "disabled"; - - input-gpios - = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - - }; - - kscan_sp3t_toggle: kscan_sp3t_toggle { - compatible = "zmk,kscan-gpio-direct"; - toggle-mode; - - input-gpios - = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; - - encoder: encoder { - label = "ENCODER"; - resolution = <4>; - compatible = "alps,ec11"; - a-gpios = <&arduino_header 14 GPIO_PULL_UP>; - b-gpios = <&arduino_header 15 GPIO_PULL_UP>; - }; - - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&encoder>; - }; + chosen { + zmk,kscan = &kscan_matrix_comp; + zmk,backlight = &backlight; + zmk,underglow = &led_strip; + zmk,matrix-transform = &matrix_transform; + }; + + // Commented out until we add more powerful power domain support + // external_power { + // compatible = "zmk,ext-power-generic"; + // label = "EXT_POWER"; + // init-delay-ms = <200>; + // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + // }; + + rgb_power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + // label = "RGB_POWER"; + init-delay-ms = <200>; + control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + }; + + backlight: gpioleds { + compatible = "gpio-leds"; + label = "Backlight LEDs"; + gpio_led_0 { + gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + }; + + matrix_transform: matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(1,0) RC(1,1) + RC(2,0) RC(2,1) RC(2,2) + >; + }; + + direct_matrix_transform: direct_matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(0,2) RC(0,3) + RC(1,0) RC(1,1) RC(1,2) + >; + }; + + kscan_matrix_comp: kscan_matrix_comp { + compatible = "zmk,kscan-composite"; + rows = <1>; + columns = <7>; + + label = "KSCAN_MATRIX_COMP"; + + matrix { + kscan = <&kscan_matrix>; + }; + + toggle { + kscan = <&kscan_sp3t_toggle>; + row-offset = <2>; + }; + + }; + + kscan_direct_comp: kscan_direct_comp { + compatible = "zmk,kscan-composite"; + + label = "KSCAN_DIRECT_COMP"; + status = "disabled"; + + matrix { + kscan = <&kscan_direct>; + }; + + toggle { + kscan = <&kscan_sp3t_toggle>; + row-offset = <1>; + }; + + }; + + kscan_matrix: kscan_matrix { + compatible = "zmk,kscan-gpio-matrix"; + + diode-direction = "col2row"; + + col-gpios + = <&arduino_header 10 GPIO_ACTIVE_HIGH> + , <&arduino_header 9 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + kscan_direct: kscan_direct { + compatible = "zmk,kscan-gpio-direct"; + status = "disabled"; + + input-gpios + = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + + }; + + kscan_sp3t_toggle: kscan_sp3t_toggle { + compatible = "zmk,kscan-gpio-direct"; + toggle-mode; + + input-gpios + = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + + encoder: encoder { + label = "ENCODER"; + resolution = <4>; + compatible = "alps,ec11"; + a-gpios = <&arduino_header 14 GPIO_PULL_UP>; + b-gpios = <&arduino_header 15 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder>; + }; }; diff --git a/app/boards/shields/zodiark/Kconfig.defconfig b/app/boards/shields/zodiark/Kconfig.defconfig index c6024694bad..e7538c41815 100644 --- a/app/boards/shields/zodiark/Kconfig.defconfig +++ b/app/boards/shields/zodiark/Kconfig.defconfig @@ -4,44 +4,44 @@ if SHIELD_ZODIARK_LEFT config ZMK_KEYBOARD_NAME - default "Zodiark" + default "Zodiark" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_ZODIARK_LEFT || SHIELD_ZODIARK_RIGHT config ZMK_SPLIT - default y + default y if ZMK_DISPLAY config I2C - default y + default y config SSD1306 - default y + default y config SSD1306_REVERSE_MODE - default y + default y endif # ZMK_DISPLAY if LVGL config LV_Z_VDB_SIZE - default 64 + default 64 config LV_Z_DPI - default 148 + default 148 config LV_Z_BITS_PER_PIXEL - default 1 + default 1 choice LV_COLOR_DEPTH - default LV_COLOR_DEPTH_1 + default LV_COLOR_DEPTH_1 endchoice endif # LVGL diff --git a/app/boards/shields/zodiark/Kconfig.shield b/app/boards/shields/zodiark/Kconfig.shield index 25e23a1441b..0eb4e8add0f 100644 --- a/app/boards/shields/zodiark/Kconfig.shield +++ b/app/boards/shields/zodiark/Kconfig.shield @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT config SHIELD_ZODIARK_LEFT - def_bool $(shields_list_contains,zodiark_left) + def_bool $(shields_list_contains,zodiark_left) config SHIELD_ZODIARK_RIGHT - def_bool $(shields_list_contains,zodiark_right) + def_bool $(shields_list_contains,zodiark_right) diff --git a/app/boards/shields/zodiark/zodiark_left.overlay b/app/boards/shields/zodiark/zodiark_left.overlay index fe55edc6bb3..1f866f781ed 100644 --- a/app/boards/shields/zodiark/zodiark_left.overlay +++ b/app/boards/shields/zodiark/zodiark_left.overlay @@ -7,17 +7,17 @@ #include "zodiark.dtsi" &kscan0 { - col-gpios - = <&pro_micro 2 GPIO_ACTIVE_HIGH> - , <&pro_micro 1 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 10 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 2 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; }; &left_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/shields/zodiark/zodiark_right.overlay b/app/boards/shields/zodiark/zodiark_right.overlay index 3405f59bd08..998f1e00961 100644 --- a/app/boards/shields/zodiark/zodiark_right.overlay +++ b/app/boards/shields/zodiark/zodiark_right.overlay @@ -7,21 +7,21 @@ #include "zodiark.dtsi" &default_transform { - col-offset = <7>; + col-offset = <7>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> - , <&pro_micro 16 GPIO_ACTIVE_HIGH> - , <&pro_micro 14 GPIO_ACTIVE_HIGH> - , <&pro_micro 15 GPIO_ACTIVE_HIGH> - , <&pro_micro 0 GPIO_ACTIVE_HIGH> - , <&pro_micro 1 GPIO_ACTIVE_HIGH> - , <&pro_micro 2 GPIO_ACTIVE_HIGH> - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 0 GPIO_ACTIVE_HIGH> + , <&pro_micro 1 GPIO_ACTIVE_HIGH> + , <&pro_micro 2 GPIO_ACTIVE_HIGH> + ; }; &right_encoder { - status = "okay"; + status = "okay"; }; diff --git a/app/boards/usb_console.dtsi b/app/boards/usb_console.dtsi index 4ce594085b5..3cc76ad313b 100644 --- a/app/boards/usb_console.dtsi +++ b/app/boards/usb_console.dtsi @@ -6,15 +6,15 @@ / { - chosen { - zephyr,console = &cdc_acm_uart; - }; + chosen { + zephyr,console = &cdc_acm_uart; + }; }; &usbd { - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; - }; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; }; diff --git a/app/cmake/ZephyrBuildConfig.cmake b/app/cmake/ZephyrBuildConfig.cmake index 931dd7ac6df..ade341990a0 100644 --- a/app/cmake/ZephyrBuildConfig.cmake +++ b/app/cmake/ZephyrBuildConfig.cmake @@ -14,13 +14,13 @@ get_property(cached_user_config_value CACHE ZMK_CONFIG PROPERTY VALUE) set(user_config_cli_argument ${cached_user_config_value}) # Either new or old if(user_config_cli_argument STREQUAL CACHED_ZMK_CONFIG) - # We already have a CACHED_ZMK_CONFIG so there is no new input on the CLI + # We already have a CACHED_ZMK_CONFIG so there is no new input on the CLI unset(user_config_cli_argument) endif() set(user_config_app_cmake_lists ${ZMK_CONFIG}) if(cached_user_config_value STREQUAL ZMK_CONFIG) - # The app build scripts did not set a default, The ZMK_CONFIG we are + # The app build scripts did not set a default, The ZMK_CONFIG we are # reading is the cached value from the CLI unset(user_config_app_cmake_lists) endif() @@ -29,172 +29,172 @@ if(CACHED_ZMK_CONFIG) # Warn the user if it looks like he is trying to change the user_config # without cleaning first if(user_config_cli_argument) - if(NOT (CACHED_ZMK_CONFIG STREQUAL user_config_cli_argument)) + if(NOT (CACHED_ZMK_CONFIG STREQUAL user_config_cli_argument)) message(WARNING "The build directory must be cleaned pristinely when changing user ZMK config") endif() endif() set(ZMK_CONFIG ${CACHED_ZMK_CONFIG}) elseif(user_config_cli_argument) - set(ZMK_CONFIG ${user_config_cli_argument}) + set(ZMK_CONFIG ${user_config_cli_argument}) elseif(DEFINED ENV{ZMK_CONFIG}) - set(ZMK_CONFIG $ENV{ZMK_CONFIG}) + set(ZMK_CONFIG $ENV{ZMK_CONFIG}) elseif(user_config_app_cmake_lists) - set(ZMK_CONFIG ${user_config_app_cmake_lists}) + set(ZMK_CONFIG ${user_config_app_cmake_lists}) endif() # Store the selected user_config in the cache set(CACHED_ZMK_CONFIG ${ZMK_CONFIG} CACHE STRING "Selected user ZMK config") if (ZMK_CONFIG) - set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}") - if(EXISTS ${ZMK_CONFIG}/boards) - message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}") - list(APPEND BOARD_ROOT ${ZMK_CONFIG}) - endif() - if(EXISTS ${ZMK_CONFIG}/dts) - message(STATUS "Adding ZMK config directory as DTS root: ${ZMK_CONFIG}") - list(APPEND DTS_ROOT ${ZMK_CONFIG}) - endif() + set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}") + if(EXISTS ${ZMK_CONFIG}/boards) + message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}") + list(APPEND BOARD_ROOT ${ZMK_CONFIG}) + endif() + if(EXISTS ${ZMK_CONFIG}/dts) + message(STATUS "Adding ZMK config directory as DTS root: ${ZMK_CONFIG}") + list(APPEND DTS_ROOT ${ZMK_CONFIG}) + endif() endif() if(DEFINED SHIELD) - string(REPLACE " " ";" SHIELD_AS_LIST "${SHIELD}") + string(REPLACE " " ";" SHIELD_AS_LIST "${SHIELD}") endif() foreach(root ${BOARD_ROOT}) - set(shield_dir ${root}/boards/shields) - # Match the Kconfig.shield files in the shield directories to make sure we are - # finding shields, e.g. x_nucleo_iks01a1/Kconfig.shield - file(GLOB_RECURSE shields_refs_list ${shield_dir}/*/Kconfig.shield) - unset(SHIELD_LIST) - foreach(shields_refs ${shields_refs_list}) - get_filename_component(shield_path ${shields_refs} DIRECTORY) - file(GLOB shield_overlays RELATIVE ${shield_path} ${shield_path}/*.overlay) - foreach(overlay ${shield_overlays}) - get_filename_component(shield ${overlay} NAME_WE) - list(APPEND SHIELD_LIST ${shield}) - set(SHIELD_DIR_${shield} ${shield_path}) - endforeach() - endforeach() - - if (EXISTS "${root}/boards/${BOARD}.overlay") - list(APPEND shield_dts_files "${root}/boards/${BOARD}.overlay") - endif() - if (NOT DEFINED BOARD_DIR_NAME) - find_path(BOARD_DIR - NAMES ${BOARD}_defconfig - PATHS ${root}/boards/*/* - NO_DEFAULT_PATH - ) - if(BOARD_DIR) - get_filename_component(BOARD_DIR_NAME ${BOARD_DIR} NAME) - list(APPEND KEYMAP_DIRS ${BOARD_DIR}) - endif() - endif() - - if(DEFINED SHIELD) - foreach(s ${SHIELD_AS_LIST}) - if(NOT ${s} IN_LIST SHIELD_LIST) - message(WARNING "Didn't find ${s}") - continue() - endif() - message(STATUS "Adding ${SHIELD_DIR_${s}}") - list(APPEND KEYMAP_DIRS ${SHIELD_DIR_${s}}) - get_filename_component(shield_dir_name ${SHIELD_DIR_${s}} NAME) - list(APPEND SHIELD_DIR ${shield_dir_name}) - endforeach() - endif() + set(shield_dir ${root}/boards/shields) + # Match the Kconfig.shield files in the shield directories to make sure we are + # finding shields, e.g. x_nucleo_iks01a1/Kconfig.shield + file(GLOB_RECURSE shields_refs_list ${shield_dir}/*/Kconfig.shield) + unset(SHIELD_LIST) + foreach(shields_refs ${shields_refs_list}) + get_filename_component(shield_path ${shields_refs} DIRECTORY) + file(GLOB shield_overlays RELATIVE ${shield_path} ${shield_path}/*.overlay) + foreach(overlay ${shield_overlays}) + get_filename_component(shield ${overlay} NAME_WE) + list(APPEND SHIELD_LIST ${shield}) + set(SHIELD_DIR_${shield} ${shield_path}) + endforeach() + endforeach() + + if (EXISTS "${root}/boards/${BOARD}.overlay") + list(APPEND shield_dts_files "${root}/boards/${BOARD}.overlay") + endif() + if (NOT DEFINED BOARD_DIR_NAME) + find_path(BOARD_DIR + NAMES ${BOARD}_defconfig + PATHS ${root}/boards/*/* + NO_DEFAULT_PATH + ) + if(BOARD_DIR) + get_filename_component(BOARD_DIR_NAME ${BOARD_DIR} NAME) + list(APPEND KEYMAP_DIRS ${BOARD_DIR}) + endif() + endif() + + if(DEFINED SHIELD) + foreach(s ${SHIELD_AS_LIST}) + if(NOT ${s} IN_LIST SHIELD_LIST) + message(WARNING "Didn't find ${s}") + continue() + endif() + message(STATUS "Adding ${SHIELD_DIR_${s}}") + list(APPEND KEYMAP_DIRS ${SHIELD_DIR_${s}}) + get_filename_component(shield_dir_name ${SHIELD_DIR_${s}} NAME) + list(APPEND SHIELD_DIR ${shield_dir_name}) + endforeach() + endif() endforeach() # Give a shield like `kyria_rev2_left` we want to use `kyria_rev2` and `kyria` as candidate names for # overlay/conf/keymap files. if(DEFINED SHIELD) - foreach(s ${SHIELD_AS_LIST}) - if (DEFINED $SHIELD_DIR_${s}) - get_filename_component(shield_dir_name ${SHIELD_DIR_${s}} NAME) - endif() - string(REPLACE "_" ";" S_PIECES ${s}) - list(LENGTH S_PIECES S_PIECES_LEN) - while(NOT S_PIECES STREQUAL "") - list(POP_BACK S_PIECES) - list(JOIN S_PIECES "_" s_substr) - if ("${s_substr}" STREQUAL "" OR "${s_substr}" STREQUAL "${shield_dir_name}") - break() - endif() - list(APPEND shield_candidate_names ${s_substr}) - endwhile() - endforeach() + foreach(s ${SHIELD_AS_LIST}) + if (DEFINED $SHIELD_DIR_${s}) + get_filename_component(shield_dir_name ${SHIELD_DIR_${s}} NAME) + endif() + string(REPLACE "_" ";" S_PIECES ${s}) + list(LENGTH S_PIECES S_PIECES_LEN) + while(NOT S_PIECES STREQUAL "") + list(POP_BACK S_PIECES) + list(JOIN S_PIECES "_" s_substr) + if ("${s_substr}" STREQUAL "" OR "${s_substr}" STREQUAL "${shield_dir_name}") + break() + endif() + list(APPEND shield_candidate_names ${s_substr}) + endwhile() + endforeach() endif() if (ZMK_CONFIG) - if (EXISTS ${ZMK_CONFIG}) - message(STATUS "ZMK Config directory: ${ZMK_CONFIG}") - list(PREPEND KEYMAP_DIRS "${ZMK_CONFIG}") - - if (DEFINED SHIELD) - foreach (s ${shield_candidate_names} ${SHIELD_AS_LIST}) - if (DEFINED ${SHIELD_DIR_${s}}) - get_filename_component(shield_dir_name ${SHIELD_DIR_${s}} NAME) - endif() - list(APPEND overlay_candidates "${ZMK_CONFIG}/${s}_${BOARD}.overlay") - list(APPEND overlay_candidates "${ZMK_CONFIG}/${s}.overlay") - if (NOT "${shield_dir_name}" STREQUAL "${s}") - list(APPEND config_candidates "${ZMK_CONFIG}/${shield_dir_name}_${BOARD}.conf") - list(APPEND config_candidates "${ZMK_CONFIG}/${shield_dir_name}.conf") - endif() - list(APPEND config_candidates "${ZMK_CONFIG}/${s}_${BOARD}.conf") - list(APPEND config_candidates "${ZMK_CONFIG}/${s}.conf") - endforeach() - endif() - - # TODO: Board revisions? - list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.overlay") - list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD}.overlay") - list(APPEND overlay_candidates "${ZMK_CONFIG}/default.overlay") - list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.conf") - list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD}.conf") - list(APPEND config_candidates "${ZMK_CONFIG}/default.conf") - - foreach(overlay ${overlay_candidates}) - if (EXISTS "${overlay}") - message(STATUS "ZMK Config devicetree overlay: ${overlay}") - list(APPEND shield_dts_files "${overlay}") - break() - endif() - endforeach() - - foreach(conf ${config_candidates}) - if (EXISTS "${conf}") - message(STATUS "ZMK Config Kconfig: ${conf}") - list(APPEND shield_conf_files "${conf}") - endif() - endforeach() - else() - message(WARNING "Unable to locate ZMK config at: ${ZMK_CONFIG}") - endif() + if (EXISTS ${ZMK_CONFIG}) + message(STATUS "ZMK Config directory: ${ZMK_CONFIG}") + list(PREPEND KEYMAP_DIRS "${ZMK_CONFIG}") + + if (DEFINED SHIELD) + foreach (s ${shield_candidate_names} ${SHIELD_AS_LIST}) + if (DEFINED ${SHIELD_DIR_${s}}) + get_filename_component(shield_dir_name ${SHIELD_DIR_${s}} NAME) + endif() + list(APPEND overlay_candidates "${ZMK_CONFIG}/${s}_${BOARD}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/${s}.overlay") + if (NOT "${shield_dir_name}" STREQUAL "${s}") + list(APPEND config_candidates "${ZMK_CONFIG}/${shield_dir_name}_${BOARD}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/${shield_dir_name}.conf") + endif() + list(APPEND config_candidates "${ZMK_CONFIG}/${s}_${BOARD}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/${s}.conf") + endforeach() + endif() + + # TODO: Board revisions? + list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/default.overlay") + list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/default.conf") + + foreach(overlay ${overlay_candidates}) + if (EXISTS "${overlay}") + message(STATUS "ZMK Config devicetree overlay: ${overlay}") + list(APPEND shield_dts_files "${overlay}") + break() + endif() + endforeach() + + foreach(conf ${config_candidates}) + if (EXISTS "${conf}") + message(STATUS "ZMK Config Kconfig: ${conf}") + list(APPEND shield_conf_files "${conf}") + endif() + endforeach() + else() + message(WARNING "Unable to locate ZMK config at: ${ZMK_CONFIG}") + endif() endif() if(NOT KEYMAP_FILE) - foreach(keymap_dir ${KEYMAP_DIRS}) - foreach(keymap_prefix ${shield_candidate_names} ${SHIELD_AS_LIST} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR_NAME}) - if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap) - set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file") - message(STATUS "Using keymap file: ${KEYMAP_FILE}") - set(DTC_OVERLAY_FILE ${KEYMAP_FILE}) - break() - endif() - endforeach() - endforeach() + foreach(keymap_dir ${KEYMAP_DIRS}) + foreach(keymap_prefix ${shield_candidate_names} ${SHIELD_AS_LIST} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR_NAME}) + if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap) + set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file") + message(STATUS "Using keymap file: ${KEYMAP_FILE}") + set(DTC_OVERLAY_FILE ${KEYMAP_FILE}) + break() + endif() + endforeach() + endforeach() else() - message(STATUS "Using keymap file: ${KEYMAP_FILE}") - set(DTC_OVERLAY_FILE ${KEYMAP_FILE}) + message(STATUS "Using keymap file: ${KEYMAP_FILE}") + set(DTC_OVERLAY_FILE ${KEYMAP_FILE}) endif() if (NOT KEYMAP_FILE) - message(WARNING "Failed to locate keymap file!") + message(WARNING "Failed to locate keymap file!") endif() diff --git a/app/drivers/display/CMakeLists.txt b/app/drivers/display/CMakeLists.txt index 13b97193994..d5e83c1dc4e 100644 --- a/app/drivers/display/CMakeLists.txt +++ b/app/drivers/display/CMakeLists.txt @@ -1,4 +1,4 @@ # Copyright (c) 2021 The ZMK Contributors # SPDX-License-Identifier: MIT -zephyr_sources_ifdef(CONFIG_IL0323 il0323.c) \ No newline at end of file +zephyr_sources_ifdef(CONFIG_IL0323 il0323.c) \ No newline at end of file diff --git a/app/drivers/display/Kconfig.il0323 b/app/drivers/display/Kconfig.il0323 index f39015efde2..f3308c1650d 100644 --- a/app/drivers/display/Kconfig.il0323 +++ b/app/drivers/display/Kconfig.il0323 @@ -4,8 +4,8 @@ # IL0323 display controller configuration options config IL0323 - bool "IL0323 compatible display controller driver" - depends on SPI - depends on HEAP_MEM_POOL_SIZE != 0 - help - Enable driver for IL0323 compatible controller. \ No newline at end of file + bool "IL0323 compatible display controller driver" + depends on SPI + depends on HEAP_MEM_POOL_SIZE != 0 + help + Enable driver for IL0323 compatible controller. \ No newline at end of file diff --git a/app/drivers/gpio/Kconfig.595 b/app/drivers/gpio/Kconfig.595 index f43e807b788..b4b6bdcc2d8 100644 --- a/app/drivers/gpio/Kconfig.595 +++ b/app/drivers/gpio/Kconfig.595 @@ -6,20 +6,20 @@ DT_COMPAT_ZMK_GPIO_595 := zmk,gpio-595 menuconfig GPIO_595 - bool "595 Shift Register SPI driver" - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_GPIO_595)) - depends on SPI - select HAS_DTS_GPIO - select ZMK_DRIVERS_GPIO - help - Enable driver for 595 shift register chip using SPI. + bool "595 Shift Register SPI driver" + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_GPIO_595)) + depends on SPI + select HAS_DTS_GPIO + select ZMK_DRIVERS_GPIO + help + Enable driver for 595 shift register chip using SPI. if GPIO_595 config GPIO_595_INIT_PRIORITY - int "Init priority" - default 75 - help - Device driver initialization priority. + int "Init priority" + default 75 + help + Device driver initialization priority. endif #GPIO_595 diff --git a/app/drivers/gpio/Kconfig.max7318 b/app/drivers/gpio/Kconfig.max7318 index ded7f926b9c..d572b97090f 100644 --- a/app/drivers/gpio/Kconfig.max7318 +++ b/app/drivers/gpio/Kconfig.max7318 @@ -6,20 +6,20 @@ DT_COMPAT_MAXIM_MAX7318 := maxim,max7318 menuconfig GPIO_MAX7318 - bool "MAX7318 I2C-based GPIO chip" - default $(dt_compat_enabled,$(DT_COMPAT_MAXIM_MAX7318)) - depends on I2C - select HAS_DTS_GPIO - select ZMK_DRIVERS_GPIO - help - Enable driver for MAX7318 I2C-based GPIO chip. + bool "MAX7318 I2C-based GPIO chip" + default $(dt_compat_enabled,$(DT_COMPAT_MAXIM_MAX7318)) + depends on I2C + select HAS_DTS_GPIO + select ZMK_DRIVERS_GPIO + help + Enable driver for MAX7318 I2C-based GPIO chip. if GPIO_MAX7318 config GPIO_MAX7318_INIT_PRIORITY - int "Init priority" - default 75 - help - Device driver initialization priority. + int "Init priority" + default 75 + help + Device driver initialization priority. endif #GPIO_MAX7318 diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index 216651a1a26..1d1656694dc 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -8,87 +8,87 @@ DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX := zmk,kscan-gpio-matrix DT_COMPAT_ZMK_KSCAN_MOCK := zmk,kscan-mock config ZMK_KSCAN_COMPOSITE_DRIVER - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_COMPOSITE)) + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_COMPOSITE)) config ZMK_KSCAN_GPIO_DRIVER - bool - select GPIO + bool + select GPIO config ZMK_KSCAN_GPIO_DEMUX - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_DEMUX)) - select ZMK_KSCAN_GPIO_DRIVER + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_DEMUX)) + select ZMK_KSCAN_GPIO_DRIVER config ZMK_KSCAN_GPIO_DIRECT - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_DIRECT)) - select ZMK_KSCAN_GPIO_DRIVER + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_DIRECT)) + select ZMK_KSCAN_GPIO_DRIVER config ZMK_KSCAN_GPIO_MATRIX - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX)) - select ZMK_KSCAN_GPIO_DRIVER + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX)) + select ZMK_KSCAN_GPIO_DRIVER if ZMK_KSCAN_GPIO_MATRIX config ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS - int "Ticks to wait before reading inputs after an output set active" - default 0 - help - When iterating over each output to drive it active, read inputs, then set - inactive again, some boards may take time for output to propagate to the - inputs. In that scenario, set this value to a positive value to configure - the number of ticks to wait after setting an output active before reading - the inputs for their active state. + int "Ticks to wait before reading inputs after an output set active" + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for output to propagate to the + inputs. In that scenario, set this value to a positive value to configure + the number of ticks to wait after setting an output active before reading + the inputs for their active state. config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS int "Ticks to wait between each output when scanning" - default 1 if SOC_RP2040 - default 0 - help - When iterating over each output to drive it active, read inputs, then set - inactive again, some boards may take time for the previous output to - "settle" before reading inputs for the next active output column. In that - scenario, set this value to a positive value to configure the number of - ticks to wait after reading each column of keys. + default 1 if SOC_RP2040 + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for the previous output to + "settle" before reading inputs for the next active output column. In that + scenario, set this value to a positive value to configure the number of + ticks to wait after reading each column of keys. endif # ZMK_KSCAN_GPIO_MATRIX config ZMK_KSCAN_MOCK_DRIVER - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_MOCK)) + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_MOCK)) if ZMK_KSCAN_GPIO_DRIVER config ZMK_KSCAN_MATRIX_POLLING - bool "Poll for key event triggers instead of using interrupts on matrix boards." + bool "Poll for key event triggers instead of using interrupts on matrix boards." config ZMK_KSCAN_DIRECT_POLLING - bool "Poll for key event triggers instead of using interrupts on direct wired boards." + bool "Poll for key event triggers instead of using interrupts on direct wired boards." config ZMK_KSCAN_DEBOUNCE_PRESS_MS - int "Debounce time for key press in milliseconds." - default -1 - help - Global debounce time for key press in milliseconds. - If this is -1, the debounce time is controlled by the debounce-press-ms - Devicetree property, which defaults to 5 ms. Otherwise this overrides the - debounce time for all key scan drivers to the chosen value. + int "Debounce time for key press in milliseconds." + default -1 + help + Global debounce time for key press in milliseconds. + If this is -1, the debounce time is controlled by the debounce-press-ms + Devicetree property, which defaults to 5 ms. Otherwise this overrides the + debounce time for all key scan drivers to the chosen value. config ZMK_KSCAN_DEBOUNCE_RELEASE_MS - int "Debounce time for key release in milliseconds." - default -1 - help - Global debounce time for key release in milliseconds. - If this is -1, the debounce time is controlled by the debounce-release-ms - Devicetree property, which defaults to 5 ms. Otherwise this overrides the - debounce time for all key scan drivers to the chosen value. + int "Debounce time for key release in milliseconds." + default -1 + help + Global debounce time for key release in milliseconds. + If this is -1, the debounce time is controlled by the debounce-release-ms + Devicetree property, which defaults to 5 ms. Otherwise this overrides the + debounce time for all key scan drivers to the chosen value. endif config ZMK_KSCAN_INIT_PRIORITY - int "Keyboard scan driver init priority" - default 40 - help - Keyboard scan device driver initialization priority. + int "Keyboard scan driver init priority" + default 40 + help + Keyboard scan device driver initialization priority. diff --git a/app/drivers/sensor/battery/Kconfig b/app/drivers/sensor/battery/Kconfig index d7c82bb0429..a9d7189e58a 100644 --- a/app/drivers/sensor/battery/Kconfig +++ b/app/drivers/sensor/battery/Kconfig @@ -5,22 +5,22 @@ DT_COMPAT_ZMK_BATTERY_NRF_VDDH := zmk,battery-nrf-vddh DT_COMPAT_ZMK_BATTERY_VOLTAGE_DIVIDER := zmk,battery-voltage-divider config ZMK_BATTERY - bool "ZMK battery monitoring" - help - Enable battery monitoring + bool "ZMK battery monitoring" + help + Enable battery monitoring config ZMK_BATTERY_NRF_VDDH - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BATTERY_NRF_VDDH)) - select ADC - select ZMK_BATTERY - help - Enable ZMK nRF VDDH voltage driver for battery monitoring. + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BATTERY_NRF_VDDH)) + select ADC + select ZMK_BATTERY + help + Enable ZMK nRF VDDH voltage driver for battery monitoring. config ZMK_BATTERY_VOLTAGE_DIVIDER - bool - default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BATTERY_VOLTAGE_DIVIDER)) - select ADC - select ZMK_BATTERY - help - Enable ZMK battery voltage divider driver for battery monitoring. + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BATTERY_VOLTAGE_DIVIDER)) + select ADC + select ZMK_BATTERY + help + Enable ZMK battery voltage divider driver for battery monitoring. diff --git a/app/drivers/sensor/ec11/Kconfig b/app/drivers/sensor/ec11/Kconfig index 6854e530eb2..e86d092a127 100644 --- a/app/drivers/sensor/ec11/Kconfig +++ b/app/drivers/sensor/ec11/Kconfig @@ -2,49 +2,49 @@ # SPDX-License-Identifier: MIT menuconfig EC11 - bool "EC11 Incremental Encoder Sensor" - depends on GPIO - help - Enable driver for EC11 incremental encoder sensors. + bool "EC11 Incremental Encoder Sensor" + depends on GPIO + help + Enable driver for EC11 incremental encoder sensors. if EC11 choice - prompt "Trigger mode" - default EC11_TRIGGER_NONE - help - Specify the type of triggering to be used by the driver. + prompt "Trigger mode" + default EC11_TRIGGER_NONE + help + Specify the type of triggering to be used by the driver. config EC11_TRIGGER_NONE - bool "No trigger" + bool "No trigger" config EC11_TRIGGER_GLOBAL_THREAD - bool "Use global thread" - depends on GPIO - select EC11_TRIGGER + bool "Use global thread" + depends on GPIO + select EC11_TRIGGER config EC11_TRIGGER_OWN_THREAD - bool "Use own thread" - depends on GPIO - select EC11_TRIGGER + bool "Use own thread" + depends on GPIO + select EC11_TRIGGER endchoice config EC11_TRIGGER - bool + bool config EC11_THREAD_PRIORITY - int "Thread priority" - depends on EC11_TRIGGER_OWN_THREAD - default 10 - help - Priority of thread used by the driver to handle interrupts. + int "Thread priority" + depends on EC11_TRIGGER_OWN_THREAD + default 10 + help + Priority of thread used by the driver to handle interrupts. config EC11_THREAD_STACK_SIZE - int "Thread stack size" - depends on EC11_TRIGGER_OWN_THREAD - default 1024 - help - Stack size of thread used by the driver to handle interrupts. + int "Thread stack size" + depends on EC11_TRIGGER_OWN_THREAD + default 1024 + help + Stack size of thread used by the driver to handle interrupts. endif # EC11 \ No newline at end of file diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi index f9bd02b8159..bebd6dfbf54 100644 --- a/app/dts/behaviors/backlight.dtsi +++ b/app/dts/behaviors/backlight.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ bl: behavior_backlight { - compatible = "zmk,behavior-backlight"; - label = "BCKLGHT"; - #binding-cells = <2>; - }; - }; + behaviors { + /omit-if-no-ref/ bl: behavior_backlight { + compatible = "zmk,behavior-backlight"; + label = "BCKLGHT"; + #binding-cells = <2>; + }; + }; }; diff --git a/app/dts/behaviors/bluetooth.dtsi b/app/dts/behaviors/bluetooth.dtsi index 1e9cf21b17f..a49ff4d6f30 100644 --- a/app/dts/behaviors/bluetooth.dtsi +++ b/app/dts/behaviors/bluetooth.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ bt: behavior_bluetooth { - compatible = "zmk,behavior-bluetooth"; - label = "BLUETOOTH"; - #binding-cells = <2>; - }; - }; + behaviors { + /omit-if-no-ref/ bt: behavior_bluetooth { + compatible = "zmk,behavior-bluetooth"; + label = "BLUETOOTH"; + #binding-cells = <2>; + }; + }; }; diff --git a/app/dts/behaviors/caps_word.dtsi b/app/dts/behaviors/caps_word.dtsi index ac04e26b2d6..219300dc282 100644 --- a/app/dts/behaviors/caps_word.dtsi +++ b/app/dts/behaviors/caps_word.dtsi @@ -7,13 +7,13 @@ #include / { - behaviors { - /omit-if-no-ref/ caps_word: behavior_caps_word { - compatible = "zmk,behavior-caps-word"; - label = "CAPS_WORD"; - #binding-cells = <0>; - continue-list = ; - }; - }; + behaviors { + /omit-if-no-ref/ caps_word: behavior_caps_word { + compatible = "zmk,behavior-caps-word"; + label = "CAPS_WORD"; + #binding-cells = <0>; + continue-list = ; + }; + }; }; diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index 18e824e21fa..f61170dd5f3 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - ext_power: behavior_ext_power { - compatible = "zmk,behavior-ext-power"; - label = "EXTPOWER"; - #binding-cells = <1>; - }; - }; + behaviors { + ext_power: behavior_ext_power { + compatible = "zmk,behavior-ext-power"; + label = "EXTPOWER"; + #binding-cells = <1>; + }; + }; }; diff --git a/app/dts/behaviors/gresc.dtsi b/app/dts/behaviors/gresc.dtsi index 29593880a16..fa4c685b7df 100644 --- a/app/dts/behaviors/gresc.dtsi +++ b/app/dts/behaviors/gresc.dtsi @@ -7,13 +7,13 @@ #include / { - behaviors { - /omit-if-no-ref/ gresc: grave_escape { - compatible = "zmk,behavior-mod-morph"; - label = "GRAVE_ESCAPE"; - #binding-cells = <0>; - bindings = <&kp ESC>, <&kp GRAVE>; + behaviors { + /omit-if-no-ref/ gresc: grave_escape { + compatible = "zmk,behavior-mod-morph"; + label = "GRAVE_ESCAPE"; + #binding-cells = <0>; + bindings = <&kp ESC>, <&kp GRAVE>; mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; - }; - }; + }; + }; }; diff --git a/app/dts/behaviors/key_press.dtsi b/app/dts/behaviors/key_press.dtsi index 59a4e12addc..b0fc2db1017 100644 --- a/app/dts/behaviors/key_press.dtsi +++ b/app/dts/behaviors/key_press.dtsi @@ -5,12 +5,12 @@ */ / { - behaviors { - /* DEPRECATED: `cp` will be removed in the future */ - /omit-if-no-ref/ cp: kp: behavior_key_press { - compatible = "zmk,behavior-key-press"; - label = "KEY_PRESS"; - #binding-cells = <1>; - }; - }; + behaviors { + /* DEPRECATED: `cp` will be removed in the future */ + /omit-if-no-ref/ cp: kp: behavior_key_press { + compatible = "zmk,behavior-key-press"; + label = "KEY_PRESS"; + #binding-cells = <1>; + }; + }; }; diff --git a/app/dts/behaviors/key_repeat.dtsi b/app/dts/behaviors/key_repeat.dtsi index aa8ffa0444c..795a77f6210 100644 --- a/app/dts/behaviors/key_repeat.dtsi +++ b/app/dts/behaviors/key_repeat.dtsi @@ -7,13 +7,13 @@ #include / { - behaviors { - /omit-if-no-ref/ key_repeat: behavior_key_repeat { - compatible = "zmk,behavior-key-repeat"; - label = "KEY_REPEAT"; - #binding-cells = <0>; - usage-pages = ; - }; - }; + behaviors { + /omit-if-no-ref/ key_repeat: behavior_key_repeat { + compatible = "zmk,behavior-key-repeat"; + label = "KEY_REPEAT"; + #binding-cells = <0>; + usage-pages = ; + }; + }; }; diff --git a/app/dts/behaviors/key_toggle.dtsi b/app/dts/behaviors/key_toggle.dtsi index 98001b79993..df581014e08 100644 --- a/app/dts/behaviors/key_toggle.dtsi +++ b/app/dts/behaviors/key_toggle.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ kt: behavior_key_toggle { - compatible = "zmk,behavior-key-toggle"; - label = "KEY_TOGGLE"; - #binding-cells = <1>; - }; - }; + behaviors { + /omit-if-no-ref/ kt: behavior_key_toggle { + compatible = "zmk,behavior-key-toggle"; + label = "KEY_TOGGLE"; + #binding-cells = <1>; + }; + }; }; diff --git a/app/dts/behaviors/layer_tap.dtsi b/app/dts/behaviors/layer_tap.dtsi index 21fd9d56e19..1d92245c643 100644 --- a/app/dts/behaviors/layer_tap.dtsi +++ b/app/dts/behaviors/layer_tap.dtsi @@ -5,14 +5,14 @@ */ / { - behaviors { - /omit-if-no-ref/ lt: behavior_layer_tap { - compatible = "zmk,behavior-hold-tap"; - label = "LAYER_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <200>; - bindings = <&mo>, <&kp>; - }; - }; + behaviors { + /omit-if-no-ref/ lt: behavior_layer_tap { + compatible = "zmk,behavior-hold-tap"; + label = "LAYER_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <200>; + bindings = <&mo>, <&kp>; + }; + }; }; diff --git a/app/dts/behaviors/macros.dtsi b/app/dts/behaviors/macros.dtsi index 7615329164f..757c046edd7 100644 --- a/app/dts/behaviors/macros.dtsi +++ b/app/dts/behaviors/macros.dtsi @@ -6,49 +6,49 @@ #define ZMK_MACRO_STRINGIFY(x) #x #define ZMK_MACRO(name,...) \ - name: name { \ - label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ - compatible = "zmk,behavior-macro"; \ - #binding-cells = <0>; \ - __VA_ARGS__ \ - }; + name: name { \ + label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ + compatible = "zmk,behavior-macro"; \ + #binding-cells = <0>; \ + __VA_ARGS__ \ + }; / { - behaviors { - macro_tap: macro_control_mode_tap { - compatible = "zmk,macro-control-mode-tap"; - label = "MAC_TAP"; - #binding-cells = <0>; - }; + behaviors { + macro_tap: macro_control_mode_tap { + compatible = "zmk,macro-control-mode-tap"; + label = "MAC_TAP"; + #binding-cells = <0>; + }; - macro_press: macro_control_mode_press { - compatible = "zmk,macro-control-mode-press"; - label = "MAC_PRESS"; - #binding-cells = <0>; - }; + macro_press: macro_control_mode_press { + compatible = "zmk,macro-control-mode-press"; + label = "MAC_PRESS"; + #binding-cells = <0>; + }; - macro_release: macro_control_mode_release { - compatible = "zmk,macro-control-mode-release"; - label = "MAC_REL"; - #binding-cells = <0>; - }; + macro_release: macro_control_mode_release { + compatible = "zmk,macro-control-mode-release"; + label = "MAC_REL"; + #binding-cells = <0>; + }; - macro_tap_time: macro_control_tap_time { - compatible = "zmk,macro-control-tap-time"; - label = "MAC_TAP_TIME"; - #binding-cells = <1>; - }; + macro_tap_time: macro_control_tap_time { + compatible = "zmk,macro-control-tap-time"; + label = "MAC_TAP_TIME"; + #binding-cells = <1>; + }; - macro_wait_time: macro_control_wait_time { - compatible = "zmk,macro-control-wait-time"; - label = "MAC_WAIT_TIME"; - #binding-cells = <1>; - }; + macro_wait_time: macro_control_wait_time { + compatible = "zmk,macro-control-wait-time"; + label = "MAC_WAIT_TIME"; + #binding-cells = <1>; + }; - macro_pause_for_release: macro_pause_for_release { - compatible = "zmk,macro-pause-for-release"; - label = "MAC_WAIT_REL"; - #binding-cells = <0>; - }; - }; + macro_pause_for_release: macro_pause_for_release { + compatible = "zmk,macro-pause-for-release"; + label = "MAC_WAIT_REL"; + #binding-cells = <0>; + }; + }; }; diff --git a/app/dts/behaviors/mod_tap.dtsi b/app/dts/behaviors/mod_tap.dtsi index 7a98713c3b2..d441a4f1157 100644 --- a/app/dts/behaviors/mod_tap.dtsi +++ b/app/dts/behaviors/mod_tap.dtsi @@ -5,14 +5,14 @@ */ / { - behaviors { - /omit-if-no-ref/ mt: behavior_mod_tap { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping-term-ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + /omit-if-no-ref/ mt: behavior_mod_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; }; diff --git a/app/dts/behaviors/momentary_layer.dtsi b/app/dts/behaviors/momentary_layer.dtsi index 2dbd88d943b..d1c91232f1d 100644 --- a/app/dts/behaviors/momentary_layer.dtsi +++ b/app/dts/behaviors/momentary_layer.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ mo: behavior_momentary_layer { - compatible = "zmk,behavior-momentary-layer"; - label = "MO"; - #binding-cells = <1>; - }; - }; + behaviors { + /omit-if-no-ref/ mo: behavior_momentary_layer { + compatible = "zmk,behavior-momentary-layer"; + label = "MO"; + #binding-cells = <1>; + }; + }; }; diff --git a/app/dts/behaviors/none.dtsi b/app/dts/behaviors/none.dtsi index 790f2d617ad..fc4890c3911 100644 --- a/app/dts/behaviors/none.dtsi +++ b/app/dts/behaviors/none.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ none: behavior_none { - compatible = "zmk,behavior-none"; - label = "NONE"; - #binding-cells = <0>; - }; - }; + behaviors { + /omit-if-no-ref/ none: behavior_none { + compatible = "zmk,behavior-none"; + label = "NONE"; + #binding-cells = <0>; + }; + }; }; diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index 74a7163b986..2e775269aff 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -7,18 +7,18 @@ #include / { - behaviors { - sys_reset: behavior_reset { - compatible = "zmk,behavior-reset"; - label = "SYSRESET"; - #binding-cells = <0>; - }; + behaviors { + sys_reset: behavior_reset { + compatible = "zmk,behavior-reset"; + label = "SYSRESET"; + #binding-cells = <0>; + }; - bootloader: behavior_reset_dfu { - compatible = "zmk,behavior-reset"; - label = "BOOTLOAD"; - type = ; - #binding-cells = <0>; - }; - }; + bootloader: behavior_reset_dfu { + compatible = "zmk,behavior-reset"; + label = "BOOTLOAD"; + type = ; + #binding-cells = <0>; + }; + }; }; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index 54fe422e2ba..6ffec2e6767 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - rgb_ug: behavior_rgb_underglow { - compatible = "zmk,behavior-rgb-underglow"; - label = "RGB_UG"; - #binding-cells = <2>; - }; - }; + behaviors { + rgb_ug: behavior_rgb_underglow { + compatible = "zmk,behavior-rgb-underglow"; + label = "RGB_UG"; + #binding-cells = <2>; + }; + }; }; diff --git a/app/dts/behaviors/sensor_rotate_key_press.dtsi b/app/dts/behaviors/sensor_rotate_key_press.dtsi index ed1b4cd0001..dc30b7989b7 100644 --- a/app/dts/behaviors/sensor_rotate_key_press.dtsi +++ b/app/dts/behaviors/sensor_rotate_key_press.dtsi @@ -5,13 +5,13 @@ */ / { - behaviors { - /* DEPRECATED: `inc_dec_cp` will be removed in the future */ - /omit-if-no-ref/ inc_dec_cp: inc_dec_kp: behavior_sensor_rotate_key_press { - compatible = "zmk,behavior-sensor-rotate-var"; - label = "ENC_KEY_PRESS"; - #sensor-binding-cells = <2>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + /* DEPRECATED: `inc_dec_cp` will be removed in the future */ + /omit-if-no-ref/ inc_dec_cp: inc_dec_kp: behavior_sensor_rotate_key_press { + compatible = "zmk,behavior-sensor-rotate-var"; + label = "ENC_KEY_PRESS"; + #sensor-binding-cells = <2>; + bindings = <&kp>, <&kp>; + }; + }; }; diff --git a/app/dts/behaviors/sticky_key.dtsi b/app/dts/behaviors/sticky_key.dtsi index 886d35b7dfc..72a80a903a1 100644 --- a/app/dts/behaviors/sticky_key.dtsi +++ b/app/dts/behaviors/sticky_key.dtsi @@ -5,24 +5,24 @@ */ / { - behaviors { - /omit-if-no-ref/ sk: behavior_sticky_key { - compatible = "zmk,behavior-sticky-key"; - label = "STICKY_KEY"; - #binding-cells = <1>; - release-after-ms = <1000>; - bindings = <&kp>; - ignore-modifiers; - }; - /omit-if-no-ref/ sl: behavior_sticky_layer { - compatible = "zmk,behavior-sticky-key"; - label = "STICKY_LAYER"; - #binding-cells = <1>; - release-after-ms = <1000>; - bindings = <&mo>; - quick-release; - }; - }; + behaviors { + /omit-if-no-ref/ sk: behavior_sticky_key { + compatible = "zmk,behavior-sticky-key"; + label = "STICKY_KEY"; + #binding-cells = <1>; + release-after-ms = <1000>; + bindings = <&kp>; + ignore-modifiers; + }; + /omit-if-no-ref/ sl: behavior_sticky_layer { + compatible = "zmk,behavior-sticky-key"; + label = "STICKY_LAYER"; + #binding-cells = <1>; + release-after-ms = <1000>; + bindings = <&mo>; + quick-release; + }; + }; }; diff --git a/app/dts/behaviors/to_layer.dtsi b/app/dts/behaviors/to_layer.dtsi index fa8f98bda32..0ea66fa9e3b 100644 --- a/app/dts/behaviors/to_layer.dtsi +++ b/app/dts/behaviors/to_layer.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ to: behavior_to_layer { - compatible = "zmk,behavior-to-layer"; - label = "TO_LAYER"; - #binding-cells = <1>; - }; - }; + behaviors { + /omit-if-no-ref/ to: behavior_to_layer { + compatible = "zmk,behavior-to-layer"; + label = "TO_LAYER"; + #binding-cells = <1>; + }; + }; }; diff --git a/app/dts/behaviors/toggle_layer.dtsi b/app/dts/behaviors/toggle_layer.dtsi index ea0b1c19248..75730934e49 100644 --- a/app/dts/behaviors/toggle_layer.dtsi +++ b/app/dts/behaviors/toggle_layer.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ tog: behavior_toggle_layer { - compatible = "zmk,behavior-toggle-layer"; - label = "TOGGLE_LAYER"; - #binding-cells = <1>; - }; - }; + behaviors { + /omit-if-no-ref/ tog: behavior_toggle_layer { + compatible = "zmk,behavior-toggle-layer"; + label = "TOGGLE_LAYER"; + #binding-cells = <1>; + }; + }; }; diff --git a/app/dts/behaviors/transparent.dtsi b/app/dts/behaviors/transparent.dtsi index 81ebb133e99..0dfaade29ca 100644 --- a/app/dts/behaviors/transparent.dtsi +++ b/app/dts/behaviors/transparent.dtsi @@ -5,11 +5,11 @@ */ / { - behaviors { - /omit-if-no-ref/ trans: behavior_transparent { - compatible = "zmk,behavior-transparent"; - label = "TRANS"; - #binding-cells = <0>; - }; - }; + behaviors { + /omit-if-no-ref/ trans: behavior_transparent { + compatible = "zmk,behavior-transparent"; + label = "TRANS"; + #binding-cells = <0>; + }; + }; }; diff --git a/app/dts/common/arduino_uno_pro_micro_map.dtsi b/app/dts/common/arduino_uno_pro_micro_map.dtsi index 3f3d64f0092..a6b8d792d1a 100644 --- a/app/dts/common/arduino_uno_pro_micro_map.dtsi +++ b/app/dts/common/arduino_uno_pro_micro_map.dtsi @@ -7,41 +7,41 @@ /* This provies a mapping from Arduino Uno to Arduino Pro Micro pins for development */ / { - pro_micro_d: connector_d { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &arduino_header 6 0> /* D0 */ - , <1 0 &arduino_header 7 0> /* D1 */ - , <2 0 &arduino_header 8 0> /* D2 */ - , <3 0 &arduino_header 9 0> /* D3 */ - , <4 0 &arduino_header 10 0> /* D4/A6 */ - , <5 0 &arduino_header 11 0> /* D5 */ - , <6 0 &arduino_header 12 0> /* D6/A7 */ - , <7 0 &arduino_header 13 0> /* D7 */ - , <8 0 &arduino_header 14 0> /* D8/A8 */ - , <9 0 &arduino_header 15 0> /* D9/A9 */ - , <10 0 &arduino_header 16 0> /* D10/A10 */ - , <16 0 &arduino_header 17 0> /* D16 */ - , <14 0 &arduino_header 18 0> /* D14 */ - , <15 0 &arduino_header 19 0> /* D15 */ - ; - }; + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &arduino_header 6 0> /* D0 */ + , <1 0 &arduino_header 7 0> /* D1 */ + , <2 0 &arduino_header 8 0> /* D2 */ + , <3 0 &arduino_header 9 0> /* D3 */ + , <4 0 &arduino_header 10 0> /* D4/A6 */ + , <5 0 &arduino_header 11 0> /* D5 */ + , <6 0 &arduino_header 12 0> /* D6/A7 */ + , <7 0 &arduino_header 13 0> /* D7 */ + , <8 0 &arduino_header 14 0> /* D8/A8 */ + , <9 0 &arduino_header 15 0> /* D9/A9 */ + , <10 0 &arduino_header 16 0> /* D10/A10 */ + , <16 0 &arduino_header 17 0> /* D16 */ + , <14 0 &arduino_header 18 0> /* D14 */ + , <15 0 &arduino_header 19 0> /* D15 */ + ; + }; - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &arduino_header 0 0> /* A0 */ - , <1 0 &arduino_header 1 0> /* A1 */ - , <2 0 &arduino_header 2 0> /* A2 */ - , <3 0 &arduino_header 3 0> /* A3 */ - ; - }; + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &arduino_header 0 0> /* A0 */ + , <1 0 &arduino_header 1 0> /* A1 */ + , <2 0 &arduino_header 2 0> /* A2 */ + , <3 0 &arduino_header 3 0> /* A3 */ + ; + }; }; pro_micro_i2c: &arduino_i2c {}; diff --git a/app/include/linker/zmk-events.ld b/app/include/linker/zmk-events.ld index 3e307f854f1..0c4bb6e4856 100644 --- a/app/include/linker/zmk-events.ld +++ b/app/include/linker/zmk-events.ld @@ -6,11 +6,11 @@ #include - __event_type_start = .; \ - KEEP(*(".event_type")); \ - __event_type_end = .; \ + __event_type_start = .; \ + KEEP(*(".event_type")); \ + __event_type_end = .; \ - __event_subscriptions_start = .; \ - KEEP(*(".event_subscription")); \ - __event_subscriptions_end = .; \ + __event_subscriptions_start = .; \ + KEEP(*(".event_subscription")); \ + __event_subscriptions_end = .; \ diff --git a/app/run-test.sh b/app/run-test.sh index 94438f34df2..6935f2c8b36 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -4,23 +4,23 @@ # SPDX-License-Identifier: MIT if [ -z "$1" ]; then - echo "Usage: ./run-test.sh " - exit 1 + echo "Usage: ./run-test.sh " + exit 1 fi path="$1" if [ $path = "all" ]; then - path="tests" + path="tests" fi testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;) num_cases=$(echo "$testcases" | wc -l) if [ $num_cases -gt 1 ] || [ "$testcases" != "$path" ]; then - echo "" > ./build/tests/pass-fail.log - echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh - err=$? - sort -k2 ./build/tests/pass-fail.log - exit $err + echo "" > ./build/tests/pass-fail.log + echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh + err=$? + sort -k2 ./build/tests/pass-fail.log + exit $err fi testcase="$path" @@ -28,19 +28,19 @@ echo "Running $testcase:" west build -d build/$testcase -b native_posix_64 -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 if [ $? -gt 0 ]; then - echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log - exit 1 + echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log + exit 1 fi ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log diff -auZ $testcase/keycode_events.snapshot build/$testcase/keycode_events.log if [ $? -gt 0 ]; then - if [ -f $testcase/pending ]; then - echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log - exit 0 - fi - echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log - exit 1 + if [ -f $testcase/pending ]; then + echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log + exit 0 + fi + echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log + exit 1 fi echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log diff --git a/app/src/split/Kconfig b/app/src/split/Kconfig index 42cb411c567..dbe5f092644 100644 --- a/app/src/split/Kconfig +++ b/app/src/split/Kconfig @@ -2,21 +2,21 @@ # SPDX-License-Identifier: MIT menuconfig ZMK_SPLIT - bool "Split keyboard support" + bool "Split keyboard support" if ZMK_SPLIT config ZMK_SPLIT_ROLE_CENTRAL - bool "Split central device" + bool "Split central device" choice ZMK_SPLIT_TRANSPORT - prompt "Split transport" + prompt "Split transport" config ZMK_SPLIT_BLE - bool "BLE" - depends on ZMK_BLE - select BT_USER_PHY_UPDATE - select BT_AUTO_PHY_UPDATE + bool "BLE" + depends on ZMK_BLE + select BT_USER_PHY_UPDATE + select BT_AUTO_PHY_UPDATE endchoice diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index f6976cffcb6..53119d8247f 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -7,55 +7,55 @@ menu "BLE Transport" # Added for backwards compatibility. New shields/board should set `ZMK_SPLIT_ROLE_CENTRAL` only. config ZMK_SPLIT_BLE_ROLE_CENTRAL - bool - select ZMK_SPLIT_ROLE_CENTRAL + bool + select ZMK_SPLIT_ROLE_CENTRAL config ZMK_SPLIT_ROLE_CENTRAL - select BT_CENTRAL - select BT_GATT_CLIENT - select BT_GATT_AUTO_DISCOVER_CCC + select BT_CENTRAL + select BT_GATT_CLIENT + select BT_GATT_AUTO_DISCOVER_CCC if ZMK_SPLIT_ROLE_CENTRAL config ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE - int "Max number of key position state events to queue when received from peripherals" - default 5 + int "Max number of key position state events to queue when received from peripherals" + default 5 config ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE - int "BLE split central write thread stack size" - default 512 + int "BLE split central write thread stack size" + default 512 config ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE - int "Max number of behavior run events to queue to send to the peripheral(s)" - default 5 + int "Max number of behavior run events to queue to send to the peripheral(s)" + default 5 endif # ZMK_SPLIT_ROLE_CENTRAL if !ZMK_SPLIT_ROLE_CENTRAL config ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE - int "BLE split peripheral notify thread stack size" - default 650 + int "BLE split peripheral notify thread stack size" + default 650 config ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY - int "BLE split peripheral notify thread priority" - default 5 + int "BLE split peripheral notify thread priority" + default 5 config ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE - int "Max number of key position state events to queue to send to the central" - default 10 + int "Max number of key position state events to queue to send to the central" + default 10 config ZMK_USB - default n + default n config BT_MAX_PAIRED - default 1 + default 1 config BT_MAX_CONN - default 1 + default 1 config BT_PERIPHERAL_PREF_MAX_INT - default 6 + default 6 #!ZMK_SPLIT_ROLE_CENTRAL endif @@ -71,10 +71,10 @@ if ZMK_BLE if ZMK_SPLIT_BLE && ZMK_SPLIT_ROLE_CENTRAL config BT_MAX_CONN - default 6 + default 6 config BT_MAX_PAIRED - default 6 + default 6 #ZMK_SPLIT_BLE && ZMK_SPLIT_ROLE_CENTRAL endif @@ -82,10 +82,10 @@ endif if !ZMK_SPLIT_BLE config BT_MAX_CONN - default 5 + default 5 config BT_MAX_PAIRED - default 5 + default 5 #!ZMK_SPLIT_BLE endif diff --git a/app/tests/backlight/basic/native_posix_64.keymap b/app/tests/backlight/basic/native_posix_64.keymap index 185dbf7c8af..dfb08fef51b 100644 --- a/app/tests/backlight/basic/native_posix_64.keymap +++ b/app/tests/backlight/basic/native_posix_64.keymap @@ -1,30 +1,30 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_OFF */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - /* BL_OFF */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - /* BL_ON */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* BL_ON */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; diff --git a/app/tests/backlight/behavior_keymap.dtsi b/app/tests/backlight/behavior_keymap.dtsi index 26869272551..771072ac4ec 100644 --- a/app/tests/backlight/behavior_keymap.dtsi +++ b/app/tests/backlight/behavior_keymap.dtsi @@ -4,31 +4,31 @@ #include / { - chosen { - zmk,backlight = &backlight; - }; + chosen { + zmk,backlight = &backlight; + }; - backlight: leds { - compatible = "gpio-leds"; - led_0 { - gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; - }; - led_1 { - gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 1"; - }; - }; + backlight: leds { + compatible = "gpio-leds"; + led_0 { + gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + led_1 { + gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 1"; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &bl BL_INC &bl BL_DEC - &bl BL_ON &bl BL_OFF - >; - }; - }; + default_layer { + bindings = < + &bl BL_INC &bl BL_DEC + &bl BL_ON &bl BL_OFF + >; + }; + }; }; diff --git a/app/tests/backlight/config-brt/native_posix_64.keymap b/app/tests/backlight/config-brt/native_posix_64.keymap index 6617c9f69c7..cbb6c93fcae 100644 --- a/app/tests/backlight/config-brt/native_posix_64.keymap +++ b/app/tests/backlight/config-brt/native_posix_64.keymap @@ -1,12 +1,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/backlight/config-on/native_posix_64.keymap b/app/tests/backlight/config-on/native_posix_64.keymap index a95ccd93ef0..1a8de92884b 100644 --- a/app/tests/backlight/config-on/native_posix_64.keymap +++ b/app/tests/backlight/config-on/native_posix_64.keymap @@ -1,12 +1,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* BL_ON */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* BL_OFF */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - >; + events = < + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + >; }; diff --git a/app/tests/backlight/config-step/native_posix_64.keymap b/app/tests/backlight/config-step/native_posix_64.keymap index 96fbe96a03e..706144597a3 100644 --- a/app/tests/backlight/config-step/native_posix_64.keymap +++ b/app/tests/backlight/config-step/native_posix_64.keymap @@ -1,36 +1,36 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/backlight/cycle/native_posix_64.keymap b/app/tests/backlight/cycle/native_posix_64.keymap index a2f3c830c85..00615e3546d 100644 --- a/app/tests/backlight/cycle/native_posix_64.keymap +++ b/app/tests/backlight/cycle/native_posix_64.keymap @@ -4,75 +4,75 @@ #include / { - chosen { - zmk,backlight = &backlight; - }; + chosen { + zmk,backlight = &backlight; + }; - backlight: leds { - compatible = "gpio-leds"; - led_0 { - gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; - }; - led_1 { - gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 1"; - }; - }; + backlight: leds { + compatible = "gpio-leds"; + led_0 { + gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 0"; + }; + led_1 { + gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + label = "Backlight LED 1"; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &bl BL_CYCLE &none - &none &none - >; - }; - }; + default_layer { + bindings = < + &bl BL_CYCLE &none + &none &none + >; + }; + }; }; &kscan { - events = < - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_CYCLE */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_CYCLE */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/backlight/low-brightness/native_posix_64.keymap b/app/tests/backlight/low-brightness/native_posix_64.keymap index 3b01f7006ab..a151e0f6b96 100644 --- a/app/tests/backlight/low-brightness/native_posix_64.keymap +++ b/app/tests/backlight/low-brightness/native_posix_64.keymap @@ -1,39 +1,39 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_ON */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* BL_OFF */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* BL_OFF */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_DEC */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* BL_INC */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_ON */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* BL_OFF */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_DEC */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* BL_INC */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/caps-word/behavior_keymap.dtsi b/app/tests/caps-word/behavior_keymap.dtsi index 04653bec127..855406fc72f 100644 --- a/app/tests/caps-word/behavior_keymap.dtsi +++ b/app/tests/caps-word/behavior_keymap.dtsi @@ -3,15 +3,15 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &caps_word &kp A - &kp N6 &kp MINUS - >; - }; - }; + default_layer { + bindings = < + &caps_word &kp A + &kp N6 &kp MINUS + >; + }; + }; }; diff --git a/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap b/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap index 3053d5dfcaa..bbbdac10c9b 100644 --- a/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap +++ b/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap @@ -4,30 +4,30 @@ #include "../behavior_keymap.dtsi" / { - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &caps_word &kp A - &kp LSHFT &kp MINUS - >; - }; - }; + default_layer { + bindings = < + &caps_word &kp A + &kp LSHFT &kp MINUS + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix_64.keymap b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix_64.keymap index 68c3249fa45..08b173bd771 100644 --- a/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix_64.keymap +++ b/app/tests/caps-word/continue-with-non-alpha-continue-list-item/native_posix_64.keymap @@ -4,18 +4,18 @@ #include "../behavior_keymap.dtsi" &caps_word { - continue-list = ; + continue-list = ; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix_64.keymap b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix_64.keymap index 40a4d4a9529..cde97c846f3 100644 --- a/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix_64.keymap +++ b/app/tests/caps-word/continue-with-non-modified-numeric-usage-id/native_posix_64.keymap @@ -4,18 +4,18 @@ #include "../behavior_keymap.dtsi" &caps_word { - continue-list = ; + continue-list = ; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix_64.keymap b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix_64.keymap index 4219e3544ed..3fbb020b5cf 100644 --- a/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix_64.keymap +++ b/app/tests/caps-word/deactivate-by-non-alpha-non-continuation/native_posix_64.keymap @@ -4,14 +4,14 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap b/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap index 05f13fede3f..121a827cce6 100644 --- a/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap +++ b/app/tests/caps-word/deactivate-by-second-press/native_posix.keymap @@ -4,14 +4,14 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap b/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap index e0695564004..b8ae4ee02eb 100644 --- a/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap +++ b/app/tests/caps-word/deactivate-by-second-press/native_posix_64.keymap @@ -4,14 +4,14 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10000) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,30) - ZMK_MOCK_RELEASE(0,1,30) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,30) - ZMK_MOCK_PRESS(0,1,30) - ZMK_MOCK_RELEASE(0,1,1000) - >; + events = < + ZMK_MOCK_PRESS(0,0,10000) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,30) + ZMK_MOCK_RELEASE(0,1,30) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,30) + ZMK_MOCK_PRESS(0,1,30) + ZMK_MOCK_RELEASE(0,1,1000) + >; }; \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap index a02f6c64ffb..e6754b71128 100644 --- a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap @@ -3,7 +3,7 @@ #include &mt { - flavor = "hold-preferred"; + flavor = "hold-preferred"; }; /* @@ -12,36 +12,36 @@ and combos is wrong. Hold-taps need to process key position events first so the decision to hold or tap can be made. */ / { - combos { - compatible = "zmk,combos"; + combos { + compatible = "zmk,combos"; - combo_two { - timeout-ms = <100>; - key-positions = <1 2>; - bindings = <&kp Y>; - }; - }; + combo_two { + timeout-ms = <100>; + key-positions = <1 2>; + bindings = <&kp Y>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &mt LEFT_CONTROL A &kp B - &kp C &none - >; - }; - }; + default_layer { + bindings = < + &mt LEFT_CONTROL A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,2,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,2,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap index 325da627d2b..9538243291c 100644 --- a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap @@ -3,40 +3,40 @@ #include &mt { - flavor = "hold-preferred"; + flavor = "hold-preferred"; }; /* this test checks if hold-taps can be part of a combo */ / { - combos { - compatible = "zmk,combos"; - combo_two { - timeout-ms = <100>; - key-positions = <0 1>; - bindings = <&kp Y>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_two { + timeout-ms = <100>; + key-positions = <0 1>; + bindings = <&kp Y>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &mt LEFT_CONTROL A &kp B - &kp C &none - >; - }; - }; + default_layer { + bindings = < + &mt LEFT_CONTROL A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,2,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,2,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap index 7a78980874b..d6d187e2046 100644 --- a/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap @@ -3,43 +3,43 @@ #include &mt { - flavor = "hold-preferred"; + flavor = "hold-preferred"; }; /* This test verifies that hold-tap keys can observe * events which were released from combos. */ / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <100>; - key-positions = <0 2>; - bindings = <&kp Y>; - }; - combo_two { - timeout-ms = <100>; - key-positions = <1 3>; - bindings = <&kp Z>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <100>; + key-positions = <0 2>; + bindings = <&kp Y>; + }; + combo_two { + timeout-ms = <100>; + key-positions = <1 3>; + bindings = <&kp Z>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &mt LEFT_CONTROL A &mt RIGHT_CONTROL B - &none &none - >; - }; - }; + default_layer { + bindings = < + &mt LEFT_CONTROL A &mt RIGHT_CONTROL B + &none &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,0) - ZMK_MOCK_PRESS(0,1,300) - >; + events = < + ZMK_MOCK_PRESS(0,0,0) + ZMK_MOCK_PRESS(0,1,300) + >; }; \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap index d405379327c..f1c7eee7087 100644 --- a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap @@ -3,38 +3,38 @@ #include &mt { - flavor = "hold-preferred"; + flavor = "hold-preferred"; }; / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <40>; - key-positions = <0 1>; - bindings = <&kp X>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <40>; + key-positions = <0 1>; + bindings = <&kp X>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &mt RSHFT RET &kp C - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &mt RSHFT RET &kp C + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,1,50) - ZMK_MOCK_RELEASE(1,1,50) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,1,50) + ZMK_MOCK_RELEASE(1,1,50) + >; }; diff --git a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap index ba6cecc6495..134b77dfa34 100644 --- a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap @@ -5,14 +5,14 @@ #define ZMK_COMBO(name, combo_bindings, keypos, combo_term) \ / { \ - combos { \ - compatible = "zmk,combos"; \ - combo_ ## name { \ - key-positions = ; \ - bindings = ; \ - timeout-ms = ; \ - }; \ - }; \ + combos { \ + compatible = "zmk,combos"; \ + combo_ ## name { \ + key-positions = ; \ + bindings = ; \ + timeout-ms = ; \ + }; \ + }; \ }; ZMK_COMBO(qmark, &kp QMARK, 0 3, 30) @@ -20,27 +20,27 @@ ZMK_COMBO(dllr, &kp DLLR, 1 3, 50) ZMK_COMBO(tilde, &kp TILDE, 3 4, 50) / { - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &none &none - &kp A &mt LSHFT T - &none - >; - }; - }; + default_layer { + bindings = < + &none &none + &kp A &mt LSHFT T + &none + >; + }; + }; }; &kscan { - rows = <3>; - columns = <2>; - events = < - ZMK_MOCK_PRESS(1,1,500) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,500) - ZMK_MOCK_RELEASE(1,1,0) - >; + rows = <3>; + columns = <2>; + events = < + ZMK_MOCK_PRESS(1,1,500) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,500) + ZMK_MOCK_RELEASE(1,1,0) + >; }; \ No newline at end of file diff --git a/app/tests/combo/layer-filter-0/native_posix_64.keymap b/app/tests/combo/layer-filter-0/native_posix_64.keymap index 337128226d3..8d94872b658 100644 --- a/app/tests/combo/layer-filter-0/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-0/native_posix_64.keymap @@ -6,73 +6,73 @@ #define TIMEOUT (60*60*1000) / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = ; - key-positions = <0 1>; - bindings = <&kp X>; - layers = <0>; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = ; + key-positions = <0 1>; + bindings = <&kp X>; + layers = <0>; + }; - combo_two { - timeout-ms = ; - key-positions = <0 1>; - bindings = <&kp Y>; - layers = <1>; - }; + combo_two { + timeout-ms = ; + key-positions = <0 1>; + bindings = <&kp Y>; + layers = <1>; + }; - combo_three { - timeout-ms = ; - key-positions = <0 2>; - bindings = <&kp Z>; - }; - }; + combo_three { + timeout-ms = ; + key-positions = <0 2>; + bindings = <&kp Z>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &tog 1 - >; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &tog 1 + >; + }; - filtered_layer { - bindings = < - &kp A &kp B - &kp C &tog 0 - >; - }; - }; + filtered_layer { + bindings = < + &kp A &kp B + &kp C &tog 0 + >; + }; + }; }; &kscan { - events = < - /* Combo One */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - /* Combo Three */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,1,10) - /* Toggle Layer */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - /* Combo Two */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - /* Combo Three */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,1,10) - >; + events = < + /* Combo One */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + /* Combo Three */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + /* Toggle Layer */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* Combo Two */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + /* Combo Three */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/layer-filter-1/native_posix_64.keymap b/app/tests/combo/layer-filter-1/native_posix_64.keymap index 8eb5e9ebd6b..96eccea4ea8 100644 --- a/app/tests/combo/layer-filter-1/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-1/native_posix_64.keymap @@ -6,35 +6,35 @@ #define TIMEOUT (60*60*1000) / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = ; - key-positions = <0 1>; - bindings = <&kp X>; - layers = <1>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = ; + key-positions = <0 1>; + bindings = <&kp X>; + layers = <1>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &tog 1 - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &tog 1 + >; + }; + }; }; &kscan { - events = < - /* Combo One */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + /* Combo One */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/multiple-timeouts/native_posix_64.keymap b/app/tests/combo/multiple-timeouts/native_posix_64.keymap index 87d21be1936..d2176390403 100644 --- a/app/tests/combo/multiple-timeouts/native_posix_64.keymap +++ b/app/tests/combo/multiple-timeouts/native_posix_64.keymap @@ -3,38 +3,38 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - }; - combo_two { - timeout-ms = <120>; - key-positions = <0 1 2>; - bindings = <&kp C>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + }; + combo_two { + timeout-ms = <120>; + key-positions = <0 1 2>; + bindings = <&kp C>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &none &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &none &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap index 8b7b4196266..e82846652d3 100644 --- a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap @@ -3,7 +3,7 @@ #include /* - combo 0 timeout inf + combo 0 timeout inf combo 01 timeout inf combo 0123 timeout inf press 012 in any combination, release any of those keys @@ -14,104 +14,104 @@ #define TIMEOUT (60*60*1000) / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = ; - key-positions = <0 1 2>; - bindings = <&kp X>; - }; - - combo_two { - timeout-ms = ; - key-positions = <0 2>; - bindings = <&kp Y>; - }; - - combo_three { - timeout-ms = ; - key-positions = <1>; - bindings = <&kp Z>; - }; - }; - - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - - default_layer { - bindings = < - &kp A &kp B - &kp C &none - >; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = ; + key-positions = <0 1 2>; + bindings = <&kp X>; + }; + + combo_two { + timeout-ms = ; + key-positions = <0 2>; + bindings = <&kp Y>; + }; + + combo_three { + timeout-ms = ; + key-positions = <1>; + bindings = <&kp Z>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - /* all permutations of combo one press, combo triggered by release */ - /* while debugging these, you may want to set the release_timer to a high number */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,2,10) - - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,1,10) - - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - - /* all permutations of combo two press and release, combo triggered by release */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* all permutations of combo one press, combo triggered by release */ + /* while debugging these, you may want to set the release_timer to a high number */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,2,10) + + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,1,10) + + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + + /* all permutations of combo two press and release, combo triggered by release */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap index 457378829e7..a695a388c66 100644 --- a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap @@ -9,57 +9,57 @@ expected outcome: AB after 100ms */ / { - combos { - compatible = "zmk,combos"; - combo_two { - timeout-ms = <50>; - key-positions = <0 1>; - bindings = <&kp Y>; - }; + combos { + compatible = "zmk,combos"; + combo_two { + timeout-ms = <50>; + key-positions = <0 1>; + bindings = <&kp Y>; + }; - combo_three { - timeout-ms = <100>; - key-positions = <0 1 2>; - bindings = <&kp X>; - }; - }; + combo_three { + timeout-ms = <100>; + key-positions = <0 1 2>; + bindings = <&kp X>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - /* if you're debugging these, remember that the timer can be triggered between - events while stepping through code. */ - /* all permutations of combo two press and release, combo triggered by timeout */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,100) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + events = < + /* if you're debugging these, remember that the timer can be triggered between + events while stepping through code. */ + /* all permutations of combo two press and release, combo triggered by timeout */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,100) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap index ba547dc2e40..6bf0e7100cd 100644 --- a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap @@ -9,44 +9,44 @@ expected: combo 01 after 100ms, immediately followed by key 2. */ / { - combos { - compatible = "zmk,combos"; - combo_two { - timeout-ms = <100>; - key-positions = <0 1>; - bindings = <&kp Y>; - }; + combos { + compatible = "zmk,combos"; + combo_two { + timeout-ms = <100>; + key-positions = <0 1>; + bindings = <&kp Y>; + }; - combo_four { - timeout-ms = <100>; - key-positions = <0 1 2 3>; - bindings = <&kp W>; - }; + combo_four { + timeout-ms = <100>; + key-positions = <0 1 2 3>; + bindings = <&kp W>; + }; - }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - /* if you're debugging these, remember that the timer can be triggered between - events while stepping through code. */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,100) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,2,100) - >; + events = < + /* if you're debugging these, remember that the timer can be triggered between + events while stepping through code. */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,100) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,2,100) + >; }; \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap index 0da394b5983..0a2f5ee137f 100644 --- a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap @@ -9,45 +9,45 @@ expected: key pos 0 followed by combo 12 */ / { - combos { - compatible = "zmk,combos"; - combo_two { - timeout-ms = <100>; - key-positions = <1 2>; - bindings = <&kp Y>; - }; + combos { + compatible = "zmk,combos"; + combo_two { + timeout-ms = <100>; + key-positions = <1 2>; + bindings = <&kp Y>; + }; - combo_four { - timeout-ms = <100>; - key-positions = <0 1 2 3>; - bindings = <&kp W>; - }; + combo_four { + timeout-ms = <100>; + key-positions = <0 1 2 3>; + bindings = <&kp W>; + }; - }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - /* if you're debugging these, remember that the timer can be triggered between - events while stepping through code. */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,2,100) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,2,100) - >; + events = < + /* if you're debugging these, remember that the timer can be triggered between + events while stepping through code. */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,2,100) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,2,100) + >; }; \ No newline at end of file diff --git a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap index f9537344334..900c4af3f1e 100644 --- a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap +++ b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap @@ -3,82 +3,82 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp X>; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp X>; + }; - combo_two { - timeout-ms = <30>; - key-positions = <0 2>; - bindings = <&kp Y>; - }; + combo_two { + timeout-ms = <30>; + key-positions = <0 2>; + bindings = <&kp Y>; + }; - combo_three { - timeout-ms = <30>; - key-positions = <3>; - bindings = <&kp Z>; - }; - }; + combo_three { + timeout-ms = <30>; + key-positions = <3>; + bindings = <&kp Z>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &none + >; + }; + }; }; &kscan { - events = < - /* all permutations of combo one press and release */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + events = < + /* all permutations of combo one press and release */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) - /* all permutations of combo two press and release */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) + /* all permutations of combo two press and release */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,2,10) - ZMK_MOCK_RELEASE(0,2,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,2,10) + ZMK_MOCK_RELEASE(0,2,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap index 2a71ad32e88..dac0bd5ca4c 100644 --- a/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap @@ -3,37 +3,37 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <80>; - key-positions = <0 1 2 3>; - bindings = <&kp Z>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2 3>; + bindings = <&kp Z>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &kp D - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,100) - ZMK_MOCK_RELEASE(1,0,100) - ZMK_MOCK_RELEASE(0,1,100) - ZMK_MOCK_RELEASE(1,1,100) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,100) + ZMK_MOCK_RELEASE(1,0,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,1,100) + >; }; diff --git a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap index c6202365b21..19bad1d0d1d 100644 --- a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap @@ -3,33 +3,33 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <80>; - key-positions = <0 1 2 3>; - bindings = <&kp Z>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2 3>; + bindings = <&kp Z>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &kp D - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,100) - ZMK_MOCK_RELEASE(1,1,100) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,1,100) + >; }; \ No newline at end of file diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap index b8117187751..2eb6271e2f0 100644 --- a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap @@ -3,35 +3,35 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <80>; - key-positions = <0 1 2>; - bindings = <&kp Z>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2>; + bindings = <&kp Z>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp C &kp D - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,100) - ZMK_MOCK_RELEASE(0,1,100) - ZMK_MOCK_RELEASE(0,0,100) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(0,0,100) + >; }; diff --git a/app/tests/combo/press-release/native_posix_64.keymap b/app/tests/combo/press-release/native_posix_64.keymap index 8d81f35b6d7..6bd432f9c86 100644 --- a/app/tests/combo/press-release/native_posix_64.keymap +++ b/app/tests/combo/press-release/native_posix_64.keymap @@ -3,49 +3,49 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &none &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &none &none + >; + }; + }; }; &kscan { - events = < - /* all different combinations of press and release order */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + events = < + /* all different combinations of press and release order */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/press-timeout/native_posix_64.keymap b/app/tests/combo/press-timeout/native_posix_64.keymap index 497cf1aa955..6ca6487ba93 100644 --- a/app/tests/combo/press-timeout/native_posix_64.keymap +++ b/app/tests/combo/press-timeout/native_posix_64.keymap @@ -3,33 +3,33 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &none &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &none &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap index cf7e79f7f22..9a395a41468 100644 --- a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap @@ -3,43 +3,43 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + }; - combo_two { - timeout-ms = <30>; - key-positions = <2 3>; - bindings = <&kp D>; - }; - }; + combo_two { + timeout-ms = <30>; + key-positions = <2 3>; + bindings = <&kp D>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp Z &kp Y - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp Z &kp Y + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(1,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap index 0c55eb47db6..86ca3931dce 100644 --- a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap @@ -3,44 +3,44 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + }; - combo_two { - timeout-ms = <30>; - key-positions = <2 3>; - bindings = <&kp D>; - }; - }; + combo_two { + timeout-ms = <30>; + key-positions = <2 3>; + bindings = <&kp D>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp Z &kp Y - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp Z &kp Y + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap index 248d6e75e00..650895784ae 100644 --- a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap @@ -3,44 +3,44 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + }; - combo_two { - timeout-ms = <30>; - key-positions = <2 3>; - bindings = <&kp D>; - }; - }; + combo_two { + timeout-ms = <30>; + key-positions = <2 3>; + bindings = <&kp D>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp Z &kp Y - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp Z &kp Y + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(1,1,10) - >; + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap index 5af94d45b3d..832e9705897 100644 --- a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap @@ -3,36 +3,36 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - /* no slow-release! */ - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + /* no slow-release! */ + }; + }; - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp D &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp D &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) /* this should release the combo */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) /* this should release the combo */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap index 88351bea6d6..7fdb012ed15 100644 --- a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap @@ -3,36 +3,36 @@ #include / { - combos { - compatible = "zmk,combos"; - combo_one { - timeout-ms = <30>; - key-positions = <0 1>; - bindings = <&kp C>; - slow-release; - }; - }; + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <30>; + key-positions = <0 1>; + bindings = <&kp C>; + slow-release; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp A &kp B - &kp D &none - >; - }; - }; + default_layer { + bindings = < + &kp A &kp B + &kp D &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) /* this should not release the combo yet */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) /* this should not release the combo yet */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/gresc/gresc-press-release/native_posix_64.keymap b/app/tests/gresc/gresc-press-release/native_posix_64.keymap index 4b658a73c40..5e3fac42c72 100644 --- a/app/tests/gresc/gresc-press-release/native_posix_64.keymap +++ b/app/tests/gresc/gresc-press-release/native_posix_64.keymap @@ -3,47 +3,47 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &gresc &none - &kp LEFT_SHIFT &kp LEFT_GUI - >; - }; - }; + default_layer { + bindings = < + &gresc &none + &kp LEFT_SHIFT &kp LEFT_GUI + >; + }; + }; }; &kscan { - events = < - /* esc */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < + /* esc */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) - /* ~ */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) + /* ~ */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* LGUI+` */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,1,10) + /* LGUI+` */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) - /* ~ */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + /* ~ */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) - /* LGUI+` */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + /* LGUI+` */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap index 78b8ebcb283..18f94da5771 100644 --- a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap +++ b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap @@ -11,33 +11,33 @@ The first gresc that is released releases the key. */ / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &gresc &gresc - &kp LEFT_SHIFT &kp LEFT_GUI - >; - }; - }; + default_layer { + bindings = < + &gresc &gresc + &kp LEFT_SHIFT &kp LEFT_GUI + >; + }; + }; }; &kscan { - events = < - /* esc */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) /* the second gresc is ignored */ - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) /* the second gresc is ignored */ + events = < + /* esc */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) /* the second gresc is ignored */ + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) /* the second gresc is ignored */ - /* ~ */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) /* the second gresc is ignored */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) /* the second gresc is ignored */ - >; + /* ~ */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) /* the second gresc is ignored */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) /* the second gresc is ignored */ + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap index 38c8668ca5f..5b725bb1536 100644 --- a/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/1-dn-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap index a540353b0ce..3a696af79b3 100644 --- a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 76bb2fa3787..5704ca4b529 100644 --- a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 882f33aa6a8..df066fb0c49 100644 --- a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index 0fc0b848c3d..34645ad4a43 100644 --- a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index 5d0fcbfb2e5..9c108d32ff5 100644 --- a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index fca60ba8ed1..9fd7cbf09e6 100644 --- a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index 5d0af9ca1bf..f586b97862f 100644 --- a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 6b1383523db..3a5eab10c4f 100644 --- a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap index 301ef0ac5f2..cc7412f7f37 100644 --- a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap index d895df02316..bd431ceb095 100644 --- a/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/5-quick-tap/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap index 832ea7ef7d1..51995f8d905 100644 --- a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap @@ -3,43 +3,43 @@ #include / { - behaviors { - ht_bal: behavior_balanced { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "balanced"; - tapping_term_ms = <300>; - bindings = <&kp>, <&kp>; - retro-tap; - }; - }; + behaviors { + ht_bal: behavior_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + retro-tap; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_bal LEFT_SHIFT F &none - &kp D &none>; - }; - }; + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &none + &kp D &none>; + }; + }; }; &kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* retro tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - /* hold */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* retro tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap index 7560a05a183..9ee237d3a99 100644 --- a/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,1,200) // non trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,1,200) // non trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap index b915a6a9339..f2f2f8bd068 100644 --- a/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) // trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) // trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi index 5657644d3bd..c750f8e30c8 100644 --- a/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - ht_bal: behavior_hold_tap_balanced { - compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; - #binding-cells = <2>; - flavor = "balanced"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; hold-trigger-key-positions = <2>; - }; - }; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J - &kp D &kp E>; - }; - }; + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &kp D &kp E>; + }; + }; }; diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap index 942d5ae4cf7..8c24dc34f8a 100644 --- a/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/on-release-no-trigger/native_posix_64.keymap @@ -6,12 +6,12 @@ &ht_bal { hold-trigger-on-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) // mod 1 - ZMK_MOCK_PRESS(0,1,10) // mod 2 - ZMK_MOCK_PRESS(1,1,10) // not trigger position - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,1,10) // not trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap index 677a253432d..1db5f20e386 100644 --- a/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/on-release-trigger/native_posix_64.keymap @@ -6,12 +6,12 @@ &ht_bal { hold-trigger-on-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) // mod 1 - ZMK_MOCK_PRESS(0,1,10) // mod 2 - ZMK_MOCK_PRESS(1,0,10) // trigger position - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,0,10) // trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap index a6ac1507c24..78404536bed 100644 --- a/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap @@ -4,13 +4,13 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) // trigger key - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,400) // not trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) // trigger key + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,400) // not trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap index 9965c9b3773..5af001f6be1 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -4,22 +4,22 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* normal quick tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,400) - /* hold */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* normal quick tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,400) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,400) + /* global quick tap */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/native_posix_64.keymap index 37c37f55630..69d691cee8e 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/native_posix_64.keymap @@ -4,17 +4,17 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* hold the first mod tap */ - ZMK_MOCK_PRESS(0,0,400) - /* hold the second mod tap */ - ZMK_MOCK_PRESS(0,1,400) - /* press the normal key */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + /* hold the first mod tap */ + ZMK_MOCK_PRESS(0,0,400) + /* hold the second mod tap */ + ZMK_MOCK_PRESS(0,1,400) + /* press the normal key */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* release the hold taps */ - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + /* release the hold taps */ + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi index 0966ce0d83c..ef8efd437d7 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - ht_bal: behavior_balanced { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "balanced"; - tapping-term-ms = <300>; - quick-tap-ms = <300>; - bindings = <&kp>, <&kp>; - global-quick-tap; - }; - }; + behaviors { + ht_bal: behavior_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <300>; + quick-tap-ms = <300>; + bindings = <&kp>, <&kp>; + global-quick-tap; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL C - &kp D &none>; - }; - }; + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL C + &kp D &none>; + }; + }; }; diff --git a/app/tests/hold-tap/balanced/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/behavior_keymap.dtsi index d62be888484..9f338ebc99b 100644 --- a/app/tests/hold-tap/balanced/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/behavior_keymap.dtsi @@ -3,26 +3,26 @@ #include / { - behaviors { - ht_bal: behavior_hold_tap_balanced { - compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; - #binding-cells = <2>; - flavor = "balanced"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J - &kp D &kp RIGHT_CONTROL>; - }; - }; + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; }; diff --git a/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap index 6d016501b18..4bac8b8334d 100644 --- a/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap @@ -3,39 +3,39 @@ #include / { - behaviors { - ht_bal: behavior_hold_tap_balanced { - compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; - #binding-cells = <2>; - flavor = "balanced"; - tapping-term-ms = <300>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J - &ht_bal LEFT_GUI H &ht_bal LEFT_ALT L - >; - }; - }; + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &ht_bal LEFT_GUI H &ht_bal LEFT_ALT L + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(0,1,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_PRESS(1,1,100) - ZMK_MOCK_RELEASE(0,0,100) - ZMK_MOCK_RELEASE(0,1,100) - ZMK_MOCK_RELEASE(1,0,100) - ZMK_MOCK_RELEASE(1,1,100) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_PRESS(1,1,100) + ZMK_MOCK_RELEASE(0,0,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,0,100) + ZMK_MOCK_RELEASE(1,1,100) + >; }; diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap index 38c8668ca5f..5b725bb1536 100644 --- a/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap index a540353b0ce..3a696af79b3 100644 --- a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 76bb2fa3787..5704ca4b529 100644 --- a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 882f33aa6a8..df066fb0c49 100644 --- a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index 0fc0b848c3d..34645ad4a43 100644 --- a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index 5d0fcbfb2e5..9c108d32ff5 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index fca60ba8ed1..9fd7cbf09e6 100644 --- a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index 5d0af9ca1bf..f586b97862f 100644 --- a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 6b1383523db..3a5eab10c4f 100644 --- a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap index 301ef0ac5f2..cc7412f7f37 100644 --- a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap index d895df02316..bd431ceb095 100644 --- a/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/5-quick-tap/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap index dc96ee8b094..8dbc7d82c6b 100644 --- a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap @@ -3,43 +3,43 @@ #include / { - behaviors { - hp: behavior_hold_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping_term_ms = <300>; - bindings = <&kp>, <&kp>; - retro-tap; - }; - }; + behaviors { + hp: behavior_hold_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + retro-tap; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &hp LEFT_SHIFT F &none - &kp D &none>; - }; - }; + default_layer { + bindings = < + &hp LEFT_SHIFT F &none + &kp D &none>; + }; + }; }; &kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* retro tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - /* hold */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* retro tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap index 7560a05a183..9ee237d3a99 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,1,200) // non trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,1,200) // non trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap index b915a6a9339..f2f2f8bd068 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) // trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) // trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi index bf681004012..71f3aba5773 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - ht_hold: behavior_hold_hold_tap { - compatible = "zmk,behavior-hold-tap"; - label = "hold_hold_tap"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; + behaviors { + ht_hold: behavior_hold_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "hold_hold_tap"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; hold-trigger-key-positions = <2>; - }; - }; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_hold LEFT_SHIFT F &ht_hold LEFT_CONTROL J - &kp D &kp E>; - }; - }; + default_layer { + bindings = < + &ht_hold LEFT_SHIFT F &ht_hold LEFT_CONTROL J + &kp D &kp E>; + }; + }; }; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap index b48332ffe22..f35b73ba701 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap @@ -6,12 +6,12 @@ &ht_hold { hold-trigger-on-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) // mod 1 - ZMK_MOCK_PRESS(0,1,10) // mod 2 - ZMK_MOCK_PRESS(1,1,10) // not trigger position - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,1,10) // not trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap index 77398582f80..0b4eb32094d 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/on-release-trigger/native_posix_64.keymap @@ -6,12 +6,12 @@ &ht_hold { hold-trigger-on-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) // mod 1 - ZMK_MOCK_PRESS(0,1,10) // mod 2 - ZMK_MOCK_PRESS(1,0,10) // trigger position - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,0,10) // trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap index a6ac1507c24..78404536bed 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap @@ -4,13 +4,13 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) // trigger key - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,400) // not trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) // trigger key + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,400) // not trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap index 13a58c3e396..e28eb4c37e8 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -4,22 +4,22 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* normal quick tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,400) - /* hold */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* normal quick tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,400) + /* hold */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,400) + /* global quick tap */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap index 37c37f55630..69d691cee8e 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap @@ -4,17 +4,17 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* hold the first mod tap */ - ZMK_MOCK_PRESS(0,0,400) - /* hold the second mod tap */ - ZMK_MOCK_PRESS(0,1,400) - /* press the normal key */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + /* hold the first mod tap */ + ZMK_MOCK_PRESS(0,0,400) + /* hold the second mod tap */ + ZMK_MOCK_PRESS(0,1,400) + /* press the normal key */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* release the hold taps */ - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + /* release the hold taps */ + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi index fee3361e4b4..392a5f83435 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - hp: behavior_hold_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping-term-ms = <300>; - quick-tap-ms = <300>; - bindings = <&kp>, <&kp>; - global-quick-tap; - }; - }; + behaviors { + hp: behavior_hold_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <300>; + bindings = <&kp>, <&kp>; + global-quick-tap; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &hp LEFT_SHIFT F &hp LEFT_CONTROL G - &kp D &none>; - }; - }; + default_layer { + bindings = < + &hp LEFT_SHIFT F &hp LEFT_CONTROL G + &kp D &none>; + }; + }; }; diff --git a/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi index 41c84e1e18e..da6b8362da1 100644 --- a/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi @@ -5,26 +5,26 @@ / { - behaviors { - ht_hold: behavior_hold_hold_tap { - compatible = "zmk,behavior-hold-tap"; - label = "hold_hold_tap"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + ht_hold: behavior_hold_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "hold_hold_tap"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_hold LEFT_SHIFT F &ht_hold LEFT_CONTROL J - &kp D &kp RIGHT_CONTROL>; - }; - }; + default_layer { + bindings = < + &ht_hold LEFT_SHIFT F &ht_hold LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; }; diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap index 38c8668ca5f..5b725bb1536 100644 --- a/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap index a540353b0ce..3a696af79b3 100644 --- a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 76bb2fa3787..5704ca4b529 100644 --- a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 882f33aa6a8..df066fb0c49 100644 --- a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index 0fc0b848c3d..34645ad4a43 100644 --- a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index 5d0fcbfb2e5..9c108d32ff5 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index fca60ba8ed1..9fd7cbf09e6 100644 --- a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index 5d0af9ca1bf..f586b97862f 100644 --- a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 6b1383523db..3a5eab10c4f 100644 --- a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap index 301ef0ac5f2..cc7412f7f37 100644 --- a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap index d895df02316..bd431ceb095 100644 --- a/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/5-quick-tap/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap index b733e3a2a06..500d2670b96 100644 --- a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap @@ -9,45 +9,45 @@ */ / { - behaviors { - tp_short: short_tap { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP_SHORT"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <100>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - }; - tp_long: long_tap { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP_LONG"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <200>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + tp_short: short_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP_SHORT"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <100>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + tp_long: long_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP_LONG"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <200>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &tp_long LEFT_SHIFT F &tp_short LEFT_CONTROL J - &kp D &kp RIGHT_CONTROL>; - }; - }; + default_layer { + bindings = < + &tp_long LEFT_SHIFT F &tp_short LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,20) - ZMK_MOCK_PRESS(0,1,20) - ZMK_MOCK_RELEASE(0,1,200) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,20) + ZMK_MOCK_PRESS(0,1,20) + ZMK_MOCK_RELEASE(0,1,200) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap index 7560a05a183..9ee237d3a99 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-ntgdn-timer-ntgup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,1,200) // non trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,1,200) // non trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap index b915a6a9339..f2f2f8bd068 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/4a-dn-tgdn-timer-tgup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) // trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) // trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi index e4be8d15dc5..79a88eb2c51 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - tp: behavior_tap_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; hold-trigger-key-positions = <2>; - }; - }; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &tp LEFT_SHIFT F &tp LEFT_CONTROL J - &kp D &kp E>; - }; - }; + default_layer { + bindings = < + &tp LEFT_SHIFT F &tp LEFT_CONTROL J + &kp D &kp E>; + }; + }; }; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap index 504318f7504..179b64ee2d8 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-no-trigger/native_posix_64.keymap @@ -6,12 +6,12 @@ &tp { hold-trigger-on-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) // mod 1 - ZMK_MOCK_PRESS(0,1,10) // mod 2 - ZMK_MOCK_PRESS(1,1,10) // not trigger position - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,1,10) // not trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap index 7061eee772f..e926b45c4fe 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/on-release-trigger/native_posix_64.keymap @@ -6,12 +6,12 @@ &tp { hold-trigger-on-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) // mod 1 - ZMK_MOCK_PRESS(0,1,10) // mod 2 - ZMK_MOCK_PRESS(1,0,10) // trigger position - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) // mod 1 + ZMK_MOCK_PRESS(0,1,10) // mod 2 + ZMK_MOCK_PRESS(1,0,10) // trigger position + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap index a6ac1507c24..78404536bed 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/7-positional/tgdn-dn-ntgdn-timer-ntgup-tgup-up/native_posix_64.keymap @@ -4,13 +4,13 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) // trigger key - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,1,400) // not trigger key - /* timer fires */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) // trigger key + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,400) // not trigger key + /* timer fires */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap index 9965c9b3773..5af001f6be1 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -4,22 +4,22 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* normal quick tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,400) - /* hold */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* normal quick tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,400) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,400) + /* global quick tap */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap index 37c37f55630..69d691cee8e 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap @@ -4,17 +4,17 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* hold the first mod tap */ - ZMK_MOCK_PRESS(0,0,400) - /* hold the second mod tap */ - ZMK_MOCK_PRESS(0,1,400) - /* press the normal key */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + /* hold the first mod tap */ + ZMK_MOCK_PRESS(0,0,400) + /* hold the second mod tap */ + ZMK_MOCK_PRESS(0,1,400) + /* press the normal key */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* release the hold taps */ - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + /* release the hold taps */ + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi index 4771ab75895..02362ef2b09 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - tp: behavior_tap_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <300>; - quick-tap-ms = <300>; - bindings = <&kp>, <&kp>; - global-quick-tap; - }; - }; + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <300>; + bindings = <&kp>, <&kp>; + global-quick-tap; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &tp LEFT_SHIFT F &tp LEFT_CONTROL C - &kp D &none>; - }; - }; + default_layer { + bindings = < + &tp LEFT_SHIFT F &tp LEFT_CONTROL C + &kp D &none>; + }; + }; }; diff --git a/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi index cdeb9596236..df307740199 100644 --- a/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi @@ -3,26 +3,26 @@ #include / { - behaviors { - tp: behavior_tap_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &tp LEFT_SHIFT F &tp LEFT_CONTROL J - &kp D &kp RIGHT_CONTROL>; - }; - }; + default_layer { + bindings = < + &tp LEFT_SHIFT F &tp LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; }; diff --git a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap index 38c8668ca5f..5b725bb1536 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/1-dn-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap index b5834e06d1e..bb20a323fde 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/2-dn-timer-up/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap index a540353b0ce..3a696af79b3 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3a-moddn-dn-modup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap index 76bb2fa3787..5704ca4b529 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3b-moddn-dn-modup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap index 882f33aa6a8..df066fb0c49 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3c-kcdn-dn-kcup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap index 0fc0b848c3d..34645ad4a43 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/3d-kcdn-dn-kcup-timer-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap index 5d0fcbfb2e5..9c108d32ff5 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-htdn-timer-htup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap index fca60ba8ed1..9fd7cbf09e6 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4a-dn-kcdn-timer-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap index 5d0af9ca1bf..f586b97862f 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4b-dn-kcdn-kcup-timer-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap index 6b1383523db..3a5eab10c4f 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4c-dn-kcdn-kcup-up/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap index 301ef0ac5f2..cc7412f7f37 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/4d-dn-kcdn-timer-up-kcup/native_posix_64.keymap @@ -4,11 +4,11 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap index d895df02316..bd431ceb095 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/5-quick-tap/native_posix_64.keymap @@ -5,10 +5,10 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap index 9965c9b3773..5af001f6be1 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap @@ -4,22 +4,22 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* tap */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* normal quick tap */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,400) - /* hold */ - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + /* tap */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* normal quick tap */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,400) + /* hold */ + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,400) + /* global quick tap */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/native_posix_64.keymap index 37c37f55630..69d691cee8e 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/native_posix_64.keymap @@ -4,17 +4,17 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - /* hold the first mod tap */ - ZMK_MOCK_PRESS(0,0,400) - /* hold the second mod tap */ - ZMK_MOCK_PRESS(0,1,400) - /* press the normal key */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + /* hold the first mod tap */ + ZMK_MOCK_PRESS(0,0,400) + /* hold the second mod tap */ + ZMK_MOCK_PRESS(0,1,400) + /* press the normal key */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* release the hold taps */ - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + /* release the hold taps */ + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi index 6ca7ac72702..029a8128292 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi @@ -3,27 +3,27 @@ #include / { - behaviors { - ht_tui: behavior_hold_tap_tap_unless_interrupted { - compatible = "zmk,behavior-hold-tap"; - label = "hold_tap_tap_unless_interrupted"; - #binding-cells = <2>; - flavor = "tap-unless-interrupted"; - tapping-term-ms = <300>; - quick-tap-ms = <300>; - bindings = <&kp>, <&kp>; - global-quick-tap; - }; - }; + behaviors { + ht_tui: behavior_hold_tap_tap_unless_interrupted { + compatible = "zmk,behavior-hold-tap"; + label = "hold_tap_tap_unless_interrupted"; + #binding-cells = <2>; + flavor = "tap-unless-interrupted"; + tapping-term-ms = <300>; + quick-tap-ms = <300>; + bindings = <&kp>, <&kp>; + global-quick-tap; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_tui LEFT_SHIFT F &ht_tui LEFT_CONTROL J - &kp D &kp RIGHT_CONTROL>; - }; - }; + default_layer { + bindings = < + &ht_tui LEFT_SHIFT F &ht_tui LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; }; diff --git a/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi index 18f68d632ff..b24de6dd257 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi @@ -5,26 +5,26 @@ / { - behaviors { - ht_tui: behavior_hold_tap_tap_unless_interrupted { - compatible = "zmk,behavior-hold-tap"; - label = "hold_tap_tap_unless_interrupted"; - #binding-cells = <2>; - flavor = "tap-unless-interrupted"; - tapping-term-ms = <300>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; + behaviors { + ht_tui: behavior_hold_tap_tap_unless_interrupted { + compatible = "zmk,behavior-hold-tap"; + label = "hold_tap_tap_unless_interrupted"; + #binding-cells = <2>; + flavor = "tap-unless-interrupted"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &ht_tui LEFT_SHIFT F &ht_tui LEFT_CONTROL J - &kp D &kp RIGHT_CONTROL>; - }; - }; + default_layer { + bindings = < + &ht_tui LEFT_SHIFT F &ht_tui LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; }; diff --git a/app/tests/key-repeat/behavior_keymap.dtsi b/app/tests/key-repeat/behavior_keymap.dtsi index 24902fc6278..c8e2d9c427b 100644 --- a/app/tests/key-repeat/behavior_keymap.dtsi +++ b/app/tests/key-repeat/behavior_keymap.dtsi @@ -3,15 +3,15 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label = "Default keymap"; + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; - default_layer { - bindings = < - &key_repeat &kp A - &kp LCTRL &kp C_VOL_UP - >; - }; - }; + default_layer { + bindings = < + &key_repeat &kp A + &kp LCTRL &kp C_VOL_UP + >; + }; + }; }; diff --git a/app/tests/key-repeat/ignore-other-usage-page-events/native_posix_64.keymap b/app/tests/key-repeat/ignore-other-usage-page-events/native_posix_64.keymap index b042e8e0977..e4687573944 100644 --- a/app/tests/key-repeat/ignore-other-usage-page-events/native_posix_64.keymap +++ b/app/tests/key-repeat/ignore-other-usage-page-events/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap index 98c8f6f8dbd..9078f304d58 100644 --- a/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap +++ b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap index 42f6514b3f4..1d27770b240 100644 --- a/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap +++ b/app/tests/key-repeat/press-and-release-after-key-usage/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,1,9000) - ZMK_MOCK_RELEASE(0,1,30) - ZMK_MOCK_PRESS(0,0,30) - ZMK_MOCK_RELEASE(0,0,3000) - >; + events = < + ZMK_MOCK_PRESS(0,1,9000) + ZMK_MOCK_RELEASE(0,1,30) + ZMK_MOCK_PRESS(0,0,30) + ZMK_MOCK_RELEASE(0,0,3000) + >; }; \ No newline at end of file diff --git a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix_64.keymap b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix_64.keymap index ab9622e4447..109aed5ac3d 100644 --- a/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix_64.keymap +++ b/app/tests/key-repeat/press-and-release-with-explicit-modifiers/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix_64.keymap b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix_64.keymap index 9ff64468bbd..0d2d0f6c65b 100644 --- a/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix_64.keymap +++ b/app/tests/key-repeat/send-nothing-if-no-keys-pressed-yet/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/keypress/behavior_keymap.dtsi b/app/tests/keypress/behavior_keymap.dtsi index f0c5d0c2f7b..52f9421c2fb 100644 --- a/app/tests/keypress/behavior_keymap.dtsi +++ b/app/tests/keypress/behavior_keymap.dtsi @@ -3,15 +3,15 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp B &none - &none &none - >; - }; - }; + default_layer { + bindings = < + &kp B &none + &none &none + >; + }; + }; }; diff --git a/app/tests/keypress/kp-press-release/native_posix_64.keymap b/app/tests/keypress/kp-press-release/native_posix_64.keymap index c8e744ee7f1..a414f34ba63 100644 --- a/app/tests/keypress/kp-press-release/native_posix_64.keymap +++ b/app/tests/keypress/kp-press-release/native_posix_64.keymap @@ -1,8 +1,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/keytoggle/behavior_keymap.dtsi b/app/tests/keytoggle/behavior_keymap.dtsi index 32712a8d7e2..45d48164b0c 100644 --- a/app/tests/keytoggle/behavior_keymap.dtsi +++ b/app/tests/keytoggle/behavior_keymap.dtsi @@ -3,15 +3,15 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kt B &none - &none &none - >; - }; - }; + default_layer { + bindings = < + &kt B &none + &none &none + >; + }; + }; }; diff --git a/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap b/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap index f4d034295a8..4f70b591105 100644 --- a/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap @@ -3,46 +3,46 @@ #include &kscan { - events = < + events = < /* Toggle LALT on */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* Tap TAB twice */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* Toggle LSHFT on */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) /* Tap TAB once */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) /* Toggle LALT off */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* Tap A */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) /* Toggle LSHFT off */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) /* Tap A */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - >; + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kt LALT &kp TAB - &kt LSHFT &kp A - >; - }; - }; + default_layer { + bindings = < + &kt LALT &kp TAB + &kt LSHFT &kp A + >; + }; + }; }; \ No newline at end of file diff --git a/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap b/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap index 0a4ad4ae414..b07f297f795 100644 --- a/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap @@ -3,36 +3,36 @@ #include &kscan { - events = < + events = < /* Toggle LS(A) on */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* Toggle LS(A) off */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* Press A */ - ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,0,10) /* Toggle LS(A) on */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* Toggle LS(A) off */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) /* Release A */ - ZMK_MOCK_RELEASE(1,0,10) - >; + ZMK_MOCK_RELEASE(1,0,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kt LS(A) &trans - &kp A &trans - >; - }; - }; + default_layer { + bindings = < + &kt LS(A) &trans + &kp A &trans + >; + }; + }; }; \ No newline at end of file diff --git a/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap b/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap index e25d4b187ff..5c2d202850b 100644 --- a/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-press-release-nkro/native_posix_64.keymap @@ -1,10 +1,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/keytoggle/kt-press-release/native_posix_64.keymap b/app/tests/keytoggle/kt-press-release/native_posix_64.keymap index e25d4b187ff..5c2d202850b 100644 --- a/app/tests/keytoggle/kt-press-release/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-press-release/native_posix_64.keymap @@ -1,10 +1,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/macros/basic/native_posix_64.keymap b/app/tests/macros/basic/native_posix_64.keymap index a281279259d..a34ba99f72e 100644 --- a/app/tests/macros/basic/native_posix_64.keymap +++ b/app/tests/macros/basic/native_posix_64.keymap @@ -10,5 +10,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/macros/behavior_keymap.dtsi b/app/tests/macros/behavior_keymap.dtsi index 7399cd5b92a..90322e42818 100644 --- a/app/tests/macros/behavior_keymap.dtsi +++ b/app/tests/macros/behavior_keymap.dtsi @@ -9,60 +9,60 @@ #include / { - macros { - ZMK_MACRO(abc_macro, - wait-ms = <10>; - tap-ms = <50>; - bindings = <&kp A &kp B &kp C>; - ) + macros { + ZMK_MACRO(abc_macro, + wait-ms = <10>; + tap-ms = <50>; + bindings = <&kp A &kp B &kp C>; + ) - ZMK_MACRO(hold_shift_macro, - bindings - = <¯o_press &kp LSHFT> - , <¯o_tap> - , <&kp D &kp O &kp G> - , <¯o_release &kp LSHFT> - ; - ) + ZMK_MACRO(hold_shift_macro, + bindings + = <¯o_press &kp LSHFT> + , <¯o_tap> + , <&kp D &kp O &kp G> + , <¯o_release &kp LSHFT> + ; + ) - ZMK_MACRO(custom_timing, - bindings - = <¯o_wait_time 50> - , <&kp A> - , <¯o_tap_time 20> - , <&kp B &kp C> - ; - ) + ZMK_MACRO(custom_timing, + bindings + = <¯o_wait_time 50> + , <&kp A> + , <¯o_tap_time 20> + , <&kp B &kp C> + ; + ) - ZMK_MACRO(dual_sequence_macro, - wait-ms = <10>; - tap-ms = <40>; - bindings - = <¯o_press &kp LALT> - , <¯o_tap> - , <&kp TAB> - , <¯o_pause_for_release> - , <¯o_release &kp LALT> - ; - ) - }; + ZMK_MACRO(dual_sequence_macro, + wait-ms = <10>; + tap-ms = <40>; + bindings + = <¯o_press &kp LALT> + , <¯o_tap> + , <&kp TAB> + , <¯o_pause_for_release> + , <¯o_release &kp LALT> + ; + ) + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &abc_macro &mo 1 - &hold_shift_macro &custom_timing>; - }; + default_layer { + bindings = < + &abc_macro &mo 1 + &hold_shift_macro &custom_timing>; + }; - extra_layer { - bindings = < - &dual_sequence_macro &trans - &kp TAB &none>; + extra_layer { + bindings = < + &dual_sequence_macro &trans + &kp TAB &none>; - }; + }; - }; + }; }; diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap index e6ef4f490be..bdf89abfdc9 100644 --- a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap @@ -9,19 +9,19 @@ #include / { - macros { - ZMK_MACRO( - mo_mod_macro, - wait-ms = <0>; - tap-ms = <20>; - bindings - = <¯o_press &mo 1 &kp LSHFT> - , <¯o_pause_for_release> - , <¯o_release &mo 1 &kp LSHFT>; - ) - }; - - behaviors { + macros { + ZMK_MACRO( + mo_mod_macro, + wait-ms = <0>; + tap-ms = <20>; + bindings + = <¯o_press &mo 1 &kp LSHFT> + , <¯o_pause_for_release> + , <¯o_release &mo 1 &kp LSHFT>; + ) + }; + + behaviors { mth: macro_tap_hold { compatible = "zmk,behavior-hold-tap"; label = "MACRO_TAP_HOLD"; @@ -30,28 +30,28 @@ tapping-term-ms = <200>; bindings = <&mo_mod_macro>, <&kp>; }; - }; + }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &mth 0 TAB &kp A - &kp B &kp C>; - }; + default_layer { + bindings = < + &mth 0 TAB &kp A + &kp B &kp C>; + }; - extra_layer { - bindings = < - &kp D &kp E - &kp F &kp G>; + extra_layer { + bindings = < + &kp D &kp E + &kp F &kp G>; - }; + }; - }; + }; }; &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap index c5cde5b499b..4cc60bf5b00 100644 --- a/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap +++ b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap @@ -9,38 +9,38 @@ #include / { - macros { - ZMK_MACRO( - mo_mod_macro, - wait-ms = <0>; - tap-ms = <20>; - bindings - = <¯o_press &mo 1 &kp LSHFT> - , <¯o_pause_for_release> - , <¯o_release &mo 1 &kp LSHFT>; - ) - }; - - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - - default_layer { - bindings = < - &mo_mod_macro &kp A - &kp B &kp C>; - }; - - extra_layer { - bindings = < - &kp D &kp E - &kp F &kp G>; - - }; - - }; + macros { + ZMK_MACRO( + mo_mod_macro, + wait-ms = <0>; + tap-ms = <20>; + bindings + = <¯o_press &mo 1 &kp LSHFT> + , <¯o_pause_for_release> + , <¯o_release &mo 1 &kp LSHFT>; + ) + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &mo_mod_macro &kp A + &kp B &kp C>; + }; + + extra_layer { + bindings = < + &kp D &kp E + &kp F &kp G>; + + }; + + }; }; &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/macros/press-mid-macro/native_posix_64.keymap b/app/tests/macros/press-mid-macro/native_posix_64.keymap index b8ae76f1bc8..8010a8e79dc 100644 --- a/app/tests/macros/press-mid-macro/native_posix_64.keymap +++ b/app/tests/macros/press-mid-macro/native_posix_64.keymap @@ -10,5 +10,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/macros/press-release/native_posix_64.keymap b/app/tests/macros/press-release/native_posix_64.keymap index 2546712672e..75333333783 100644 --- a/app/tests/macros/press-release/native_posix_64.keymap +++ b/app/tests/macros/press-release/native_posix_64.keymap @@ -10,5 +10,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/macros/timing-override/native_posix_64.keymap b/app/tests/macros/timing-override/native_posix_64.keymap index 343926a7ca7..e5d35e88de4 100644 --- a/app/tests/macros/timing-override/native_posix_64.keymap +++ b/app/tests/macros/timing-override/native_posix_64.keymap @@ -10,5 +10,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/macros/wait-macro-release/native_posix_64.keymap b/app/tests/macros/wait-macro-release/native_posix_64.keymap index 6dabaeca1cf..394e4a88a4f 100644 --- a/app/tests/macros/wait-macro-release/native_posix_64.keymap +++ b/app/tests/macros/wait-macro-release/native_posix_64.keymap @@ -10,5 +10,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/mod-morph/1-no-morph/native_posix_64.keymap b/app/tests/mod-morph/1-no-morph/native_posix_64.keymap index fb939de59c8..916aa569652 100644 --- a/app/tests/mod-morph/1-no-morph/native_posix_64.keymap +++ b/app/tests/mod-morph/1-no-morph/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap b/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap index 9ad50202c32..ec0591e5a07 100644 --- a/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap +++ b/app/tests/mod-morph/2a-masked-morph/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; diff --git a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap index 74de8588d63..66fb1ed0f58 100644 --- a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap +++ b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap @@ -13,25 +13,25 @@ }; }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_ALT &mod_morph - &kp LEFT_SHIFT &kp RIGHT_SHIFT - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_ALT &mod_morph + &kp LEFT_SHIFT &kp RIGHT_SHIFT + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; diff --git a/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap index d5406e195a1..de1368bdafa 100644 --- a/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap +++ b/app/tests/mod-morph/2c-masked-morph-and-explicit-mods/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; diff --git a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap index 7071e8cd397..9b7f4fe1826 100644 --- a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap +++ b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap @@ -3,13 +3,13 @@ #include &kscan { - events = < + events = < /* Shift + tap &mod_morph --> expect B (but get Shift + B) */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; / { @@ -24,22 +24,22 @@ }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_SHIFT &mod_morph - &kp C &none - >; - }; + default_layer { + bindings = < + &kp LEFT_SHIFT &mod_morph + &kp C &none + >; + }; second_layer { - bindings = < - &trans &trans - &kp D &trans - >; - }; - }; + bindings = < + &trans &trans + &kp D &trans + >; + }; + }; }; diff --git a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap index 96c2f270fef..e0c1d1e57b3 100644 --- a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap +++ b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap @@ -3,15 +3,15 @@ #include &kscan { - events = < + events = < /* Shift + hold &mod_morph --> expect and get D (no shift) */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,200) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,200) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; / { @@ -26,22 +26,22 @@ }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_SHIFT &mod_morph - &kp C &none - >; - }; + default_layer { + bindings = < + &kp LEFT_SHIFT &mod_morph + &kp C &none + >; + }; second_layer { - bindings = < - &trans &trans - &kp D &trans - >; - }; - }; + bindings = < + &trans &trans + &kp D &trans + >; + }; + }; }; diff --git a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap index a82d3ea724b..a20c04d5dfc 100644 --- a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap +++ b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap @@ -14,24 +14,24 @@ }; }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_ALT &mod_morph - &kp LEFT_SHIFT &kp RIGHT_SHIFT - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_ALT &mod_morph + &kp LEFT_SHIFT &kp RIGHT_SHIFT + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; diff --git a/app/tests/mod-morph/behavior_keymap.dtsi b/app/tests/mod-morph/behavior_keymap.dtsi index 09720d8d032..2f880540564 100644 --- a/app/tests/mod-morph/behavior_keymap.dtsi +++ b/app/tests/mod-morph/behavior_keymap.dtsi @@ -9,15 +9,15 @@ }; }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_ALT &mod_morph - &kp LEFT_SHIFT &kp RIGHT_SHIFT - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_ALT &mod_morph + &kp LEFT_SHIFT &kp RIGHT_SHIFT + >; + }; + }; }; diff --git a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap index dbb2df5c51f..621945a8218 100644 --- a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap @@ -4,25 +4,25 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) - >; + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LS(LA(LG(LEFT_CONTROL))) &kp LEFT_CONTROL - &kp A &none - >; - }; - }; + default_layer { + bindings = < + &kp LS(LA(LG(LEFT_CONTROL))) &kp LEFT_CONTROL + &kp A &none + >; + }; + }; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap index b01c625724b..d68f89213d9 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap @@ -4,24 +4,24 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_CONTROL &kp LEFT_CONTROL - &kp LEFT_SHIFT &none - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap index 89930328035..c2d12eb2104 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap @@ -4,22 +4,22 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_CONTROL &kp LEFT_CONTROL - &kp LEFT_SHIFT &none - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap index acd55e83a7e..7be62b9455d 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap @@ -4,24 +4,24 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_CONTROL &kp LEFT_CONTROL - &kp LEFT_SHIFT &none - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; }; diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap index 7e1865a0e29..8d1d773efbd 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap @@ -4,25 +4,25 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) - >; + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LEFT_CONTROL &kp LEFT_CONTROL - &kp LEFT_SHIFT &none - >; - }; - }; + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; }; diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap index e175d60ef7a..87101d837e0 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap @@ -4,24 +4,24 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LC(A) &kp LS(B) - &kp LEFT_CONTROL &none - >; - }; - }; + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &kp LEFT_CONTROL &none + >; + }; + }; }; diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap index 8c4534f4f9b..6b40fef158a 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap @@ -4,24 +4,24 @@ &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LC(A) &kp LS(B) - &none &none - >; - }; - }; + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &none &none + >; + }; + }; }; diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap index e82182c478b..4b2ca139da9 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap @@ -4,24 +4,24 @@ &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LC(A) &kp LS(B) - &kp LEFT_CONTROL &none - >; - }; - }; + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &kp LEFT_CONTROL &none + >; + }; + }; }; diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap index a36b85d2568..a256476252d 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap @@ -4,24 +4,24 @@ &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp LC(A) &kp LS(B) - &kp LEFT_CONTROL &none - >; - }; - }; + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &kp LEFT_CONTROL &none + >; + }; + }; }; diff --git a/app/tests/momentary-layer/1-normal/native_posix_64.keymap b/app/tests/momentary-layer/1-normal/native_posix_64.keymap index ed0e8ad1be9..387a1322ff1 100644 --- a/app/tests/momentary-layer/1-normal/native_posix_64.keymap +++ b/app/tests/momentary-layer/1-normal/native_posix_64.keymap @@ -4,29 +4,29 @@ #include "../behavior_keymap.dtsi" / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp B &mo 1 - &none &none>; - }; + default_layer { + bindings = < + &kp B &mo 1 + &none &none>; + }; - layer_1 { - bindings = < - &kp C &trans - &none &none>; - }; - }; + layer_1 { + bindings = < + &kp C &trans + &none &none>; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap index 9311fdee55a..776fc761be5 100644 --- a/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap +++ b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap @@ -4,29 +4,29 @@ #include "../behavior_keymap.dtsi" / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp B &mo 1 - &none &none>; - }; + default_layer { + bindings = < + &kp B &mo 1 + &none &none>; + }; - layer_1 { - bindings = < - &kp C &none - &none &none>; - }; - }; + layer_1 { + bindings = < + &kp C &none + &none &none>; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/3-covered/native_posix_64.keymap b/app/tests/momentary-layer/3-covered/native_posix_64.keymap index 62ae301df0f..a7939d9e95e 100644 --- a/app/tests/momentary-layer/3-covered/native_posix_64.keymap +++ b/app/tests/momentary-layer/3-covered/native_posix_64.keymap @@ -7,27 +7,27 @@ this test verifies that the correct key is released when a layer is enabled "on and the original key is "covered". */ / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &trans &mo 1 - &trans &trans>; - }; + default_layer { + bindings = < + &trans &mo 1 + &trans &trans>; + }; - layer_1 { - bindings = < - &trans &kp A - &trans &trans>; - }; - }; + layer_1 { + bindings = < + &trans &kp A + &trans &trans>; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/momentary-layer/4-nested/native_posix_64.keymap b/app/tests/momentary-layer/4-nested/native_posix_64.keymap index fd376d00000..1f4f0aea219 100644 --- a/app/tests/momentary-layer/4-nested/native_posix_64.keymap +++ b/app/tests/momentary-layer/4-nested/native_posix_64.keymap @@ -3,37 +3,37 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &none &mo 1 - &none &none>; - }; + default_layer { + bindings = < + &none &mo 1 + &none &none>; + }; - layer_1 { - bindings = < - &mo 2 &none - &none &none>; - }; + layer_1 { + bindings = < + &mo 2 &none + &none &none>; + }; - layer_2 { - bindings = < - &none &none - &kp B &none>; - }; - }; + layer_2 { + bindings = < + &none &none + &kp B &none>; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap b/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap index c467aea3559..4c8f789089d 100644 --- a/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap +++ b/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap @@ -3,37 +3,37 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &none &mo 1 - &none &none>; - }; + default_layer { + bindings = < + &none &mo 1 + &none &none>; + }; - layer_1 { - bindings = < - &mo 2 &none - &none &none>; - }; + layer_1 { + bindings = < + &mo 2 &none + &none &none>; + }; - layer_2 { - bindings = < - &none &none - &kp B &none>; - }; - }; + layer_2 { + bindings = < + &none &none + &kp B &none>; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/behavior_keymap.dtsi b/app/tests/momentary-layer/behavior_keymap.dtsi index 40bc31ecb6c..63127a393d1 100644 --- a/app/tests/momentary-layer/behavior_keymap.dtsi +++ b/app/tests/momentary-layer/behavior_keymap.dtsi @@ -3,20 +3,20 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp B &mo 1 - &trans &trans>; - }; + default_layer { + bindings = < + &kp B &mo 1 + &trans &trans>; + }; - layer_1 { - bindings = < - &kp C_NEXT &trans - &trans &trans>; - }; - }; + layer_1 { + bindings = < + &kp C_NEXT &trans + &trans &trans>; + }; + }; }; diff --git a/app/tests/none/behavior_keymap.dtsi b/app/tests/none/behavior_keymap.dtsi index 40d863c14f1..7a4c099bfb1 100644 --- a/app/tests/none/behavior_keymap.dtsi +++ b/app/tests/none/behavior_keymap.dtsi @@ -3,20 +3,20 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &none &mo 1 - &kp A &none>; - }; + default_layer { + bindings = < + &none &mo 1 + &kp A &none>; + }; - lower_layer { - bindings = < - &none &trans - &none &kp A>; - }; - }; + lower_layer { + bindings = < + &none &trans + &none &kp A>; + }; + }; }; diff --git a/app/tests/none/layered/native_posix_64.keymap b/app/tests/none/layered/native_posix_64.keymap index 597ca2db788..b1e84c30661 100644 --- a/app/tests/none/layered/native_posix_64.keymap +++ b/app/tests/none/layered/native_posix_64.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/none/normal/native_posix.keymap b/app/tests/none/normal/native_posix.keymap index cbeb61dc477..502f7ccc473 100644 --- a/app/tests/none/normal/native_posix.keymap +++ b/app/tests/none/normal/native_posix.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/none/normal/native_posix_64.keymap b/app/tests/none/normal/native_posix_64.keymap index cbeb61dc477..502f7ccc473 100644 --- a/app/tests/none/normal/native_posix_64.keymap +++ b/app/tests/none/normal/native_posix_64.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap b/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap index 230e9566bf1..f9612928a32 100644 --- a/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/1-os-dn-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,1200) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,1200) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap index 5c1c2264546..bc541824a82 100644 --- a/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap @@ -3,38 +3,38 @@ #include &sk { - quick-release; + quick-release; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk LEFT_CONTROL &kp A - &sk LEFT_SHIFT &sk LEFT_ALT>; - }; - }; + default_layer { + bindings = < + &sk LEFT_CONTROL &kp A + &sk LEFT_SHIFT &sk LEFT_ALT>; + }; + }; }; &kscan { - events = < - /* tap sk LEFT_CONTROL */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* tap sk LEFT_SHIFT */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* tap sk LEFT_ALT */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - /* tap A */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* tap A (no sticky keys anymore) */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap sk LEFT_ALT */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + /* tap A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap A (no sticky keys anymore) */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; diff --git a/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap index 79567de9a62..9121b1880ec 100644 --- a/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap @@ -3,41 +3,41 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk E &sl 1 - &kp A &kp B>; - }; + default_layer { + bindings = < + &sk E &sl 1 + &kp A &kp B>; + }; - lower_layer { - bindings = < - &sk LEFT_CONTROL &kp X - &sk LEFT_SHIFT &kp Z>; - }; - }; + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &sk LEFT_SHIFT &kp Z>; + }; + }; }; &kscan { - events = < - /* press sl lower_layer */ - ZMK_MOCK_PRESS(0,1,10) - /* tap sk LEFT_CONTROL */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* tap sk LEFT_SHIFT */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* release sl lower_layer */ - ZMK_MOCK_RELEASE(0,1,10) - /* tap A (with left control and left shift enabled) */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* tap A (no sticky keys anymore) */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + /* press sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* release sl lower_layer */ + ZMK_MOCK_RELEASE(0,1,10) + /* tap A (with left control and left shift enabled) */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap A (no sticky keys anymore) */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap index e89faa93ff1..23ceeeb6161 100644 --- a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap @@ -8,58 +8,58 @@ */ / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sl 1 &kp A - &none &none>; - }; + default_layer { + bindings = < + &sl 1 &kp A + &none &none>; + }; - layer_1 { - bindings = < - &sl 2 &none - &none &none>; - }; + layer_1 { + bindings = < + &sl 2 &none + &none &none>; + }; - layer_2 { - bindings = < - &none &kp NUM_1 - &none &none>; - }; - }; + layer_2 { + bindings = < + &none &kp NUM_1 + &none &none>; + }; + }; }; &kscan { - events = < - /* press sl 1 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* press sl 2 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* press 1 */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* press A */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + events = < + /* press sl 1 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press sl 2 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press 1 */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* press A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) - /* repeat test to check if cleanup is done correctly */ - /* press sl 1 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* press sl 2 */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* press 1 */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* press A */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) + /* repeat test to check if cleanup is done correctly */ + /* press sl 1 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press sl 2 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* press 1 */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* press A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap index f52a6bec6b7..131e7069cba 100644 --- a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup-quick-release/native_posix_64.keymap @@ -4,23 +4,23 @@ #include "../behavior_keymap.dtsi" &sk { - quick-release; + quick-release; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - /* second key is pressed shortly after the first. It should not be capitalized. */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(1,1,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + /* second key is pressed shortly after the first. It should not be capitalized. */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(1,1,10) - /* repeat test to check if cleanup is done correctly */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + /* repeat test to check if cleanup is done correctly */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap index 63aca99b208..4a0c50c8347 100644 --- a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/native_posix_64.keymap @@ -4,16 +4,16 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* repeat test to check if cleanup is done correctly */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + /* repeat test to check if cleanup is done correctly */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap index 18d09ebc0d9..390207515dd 100644 --- a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap @@ -8,45 +8,45 @@ */ / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk E &sl 1 - &kp A &kp B>; - }; + default_layer { + bindings = < + &sk E &sl 1 + &kp A &kp B>; + }; - lower_layer { - bindings = < - &sk LEFT_CONTROL &kp X - &kp Y &kp Z>; - }; - }; + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &kp Y &kp Z>; + }; + }; }; &kscan { - events = < - /* press sl 1 */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* press X */ - ZMK_MOCK_PRESS(0,1,10) - /* press A */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + /* press sl 1 */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* press X */ + ZMK_MOCK_PRESS(0,1,10) + /* press A */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) - /* repeat test to check if cleanup is done correctly */ - /* press sl 1 */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* press X */ - ZMK_MOCK_PRESS(0,1,10) - /* press Y */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + /* repeat test to check if cleanup is done correctly */ + /* press sl 1 */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* press X */ + ZMK_MOCK_PRESS(0,1,10) + /* press Y */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap b/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap index 4760026997e..c635dade668 100644 --- a/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/3a-os-dn-kcdn-kcup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap b/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap index 2fb661a7f1e..e629d270488 100644 --- a/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/3b-os-dn-kcdn-up-kcup/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap index 92fd1e0adca..2404a5823dc 100644 --- a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,800) - ZMK_MOCK_PRESS(1,0,400) - ZMK_MOCK_RELEASE(1,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,800) + ZMK_MOCK_PRESS(1,0,400) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap b/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap index 1daa6c4f3bc..7cf04b7d0ad 100644 --- a/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/5-os-kcdn-dn-kcup-up/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,1100) - >; + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,1100) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap index 1be65a5ba33..a22d0a5a272 100644 --- a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap +++ b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,0,100) - ZMK_MOCK_RELEASE(1,1,100) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,0,100) + ZMK_MOCK_RELEASE(1,1,100) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap index 6d88a9ea1cb..4da4ad98a19 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap +++ b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap @@ -3,54 +3,54 @@ #include &sk { - quick-release; + quick-release; }; / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk LEFT_SHIFT &sl 1 - &kp A &kp B>; - }; + default_layer { + bindings = < + &sk LEFT_SHIFT &sl 1 + &kp A &kp B>; + }; - lower_layer { - bindings = < - &sk LEFT_CONTROL &kp X - &kp Y &kp Z>; - }; - }; + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &kp Y &kp Z>; + }; + }; }; &kscan { - events = < - /* tap sl lower_layer */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* tap sk LEFT_CONTROL */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* tap A */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* tap B */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) + events = < + /* tap sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap A */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap B */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) - /* tap sk LEFT_SHIFT */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* tap sl lower_layer */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* tap Y */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - /* tap B */ - ZMK_MOCK_PRESS(1,1,10) - ZMK_MOCK_RELEASE(1,1,10) - >; + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap Y */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap B */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + >; }; diff --git a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap index a90bb32ede5..d9c49014b3f 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap +++ b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap @@ -3,45 +3,45 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk E &sl 1 - &kp A &kp B>; - }; + default_layer { + bindings = < + &sk E &sl 1 + &kp A &kp B>; + }; - lower_layer { - bindings = < - &sk LEFT_CONTROL &kp X - &kp Y &kp Z>; - }; - }; + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &kp Y &kp Z>; + }; + }; }; &kscan { - events = < - /* tap sl lower_layer */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* tap sk LEFT_CONTROL */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* tap A */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) + events = < + /* tap sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap A */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) - /* repeat */ - /* tap sl */ - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - /* tap sk */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* tap A */ - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - >; + /* repeat */ + /* tap sl */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap sk */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap A */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap index f811f7e92a1..74678256aff 100644 --- a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap @@ -3,25 +3,25 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk LEFT_SHIFT &none - &none &none - >; - }; - }; + default_layer { + bindings = < + &sk LEFT_SHIFT &none + &none &none + >; + }; + }; }; &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* the sticky key is pressed again, so the previous one must be cancelled */ - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,1200) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* the sticky key is pressed again, so the previous one must be cancelled */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,1200) + >; }; \ No newline at end of file diff --git a/app/tests/sticky-keys/behavior_keymap.dtsi b/app/tests/sticky-keys/behavior_keymap.dtsi index f12770093c7..9322cb141be 100644 --- a/app/tests/sticky-keys/behavior_keymap.dtsi +++ b/app/tests/sticky-keys/behavior_keymap.dtsi @@ -3,20 +3,20 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &sk E &mo 1 - &kp A &kp B>; - }; + default_layer { + bindings = < + &sk E &mo 1 + &kp A &kp B>; + }; - lower_layer { - bindings = < - &sk LEFT_CONTROL &kp X - &kp Y &kp Z>; - }; - }; + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &kp Y &kp Z>; + }; + }; }; diff --git a/app/tests/tap-dance/1a-tap1/native_posix_64.keymap b/app/tests/tap-dance/1a-tap1/native_posix_64.keymap index 1e5dff06821..4e65cfa1186 100644 --- a/app/tests/tap-dance/1a-tap1/native_posix_64.keymap +++ b/app/tests/tap-dance/1a-tap1/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,200) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,200) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/1b-tap2/native_posix_64.keymap b/app/tests/tap-dance/1b-tap2/native_posix_64.keymap index 5674c4eaa8b..47fa8c3398b 100644 --- a/app/tests/tap-dance/1b-tap2/native_posix_64.keymap +++ b/app/tests/tap-dance/1b-tap2/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,200) - >; + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,200) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/1c-tap3/native_posix_64.keymap b/app/tests/tap-dance/1c-tap3/native_posix_64.keymap index 142b823659f..6b01dfff761 100644 --- a/app/tests/tap-dance/1c-tap3/native_posix_64.keymap +++ b/app/tests/tap-dance/1c-tap3/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,200) - >; + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,200) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/2a-hold1/native_posix_64.keymap b/app/tests/tap-dance/2a-hold1/native_posix_64.keymap index bcfc21d20d5..c16f875b42f 100644 --- a/app/tests/tap-dance/2a-hold1/native_posix_64.keymap +++ b/app/tests/tap-dance/2a-hold1/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + events = < + ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/2b-hold2/native_posix_64.keymap b/app/tests/tap-dance/2b-hold2/native_posix_64.keymap index 6691437e738..499488867fa 100644 --- a/app/tests/tap-dance/2b-hold2/native_posix_64.keymap +++ b/app/tests/tap-dance/2b-hold2/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/2c-hold3/native_posix_64.keymap b/app/tests/tap-dance/2c-hold3/native_posix_64.keymap index 942ecfc0374..7bedd6508b6 100644 --- a/app/tests/tap-dance/2c-hold3/native_posix_64.keymap +++ b/app/tests/tap-dance/2c-hold3/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + events = < ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; + ZMK_MOCK_RELEASE(0,0,10) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/3a-tap-int-mid/native_posix_64.keymap b/app/tests/tap-dance/3a-tap-int-mid/native_posix_64.keymap index 8a62430c5a8..903b9a88c72 100644 --- a/app/tests/tap-dance/3a-tap-int-mid/native_posix_64.keymap +++ b/app/tests/tap-dance/3a-tap-int-mid/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(1,0,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/3b-tap-int-seq/native_posix_64.keymap b/app/tests/tap-dance/3b-tap-int-seq/native_posix_64.keymap index 4a76bdb0949..7d10b7152ab 100644 --- a/app/tests/tap-dance/3b-tap-int-seq/native_posix_64.keymap +++ b/app/tests/tap-dance/3b-tap-int-seq/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,1,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/3c-tap-int-after/native_posix_64.keymap b/app/tests/tap-dance/3c-tap-int-after/native_posix_64.keymap index e1b6d979894..571a877f642 100644 --- a/app/tests/tap-dance/3c-tap-int-after/native_posix_64.keymap +++ b/app/tests/tap-dance/3c-tap-int-after/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/3d-hold-int-mid/native_posix_64.keymap b/app/tests/tap-dance/3d-hold-int-mid/native_posix_64.keymap index 55a98d361ae..0220977a6dd 100644 --- a/app/tests/tap-dance/3d-hold-int-mid/native_posix_64.keymap +++ b/app/tests/tap-dance/3d-hold-int-mid/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,400) + events = < + ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) ZMK_MOCK_RELEASE(0,0,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/3e-hold-int-seq/native_posix_64.keymap b/app/tests/tap-dance/3e-hold-int-seq/native_posix_64.keymap index b31e92dce18..58595291bdd 100644 --- a/app/tests/tap-dance/3e-hold-int-seq/native_posix_64.keymap +++ b/app/tests/tap-dance/3e-hold-int-seq/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,400) + events = < + ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/3f-hold-int-after/native_posix_64.keymap b/app/tests/tap-dance/3f-hold-int-after/native_posix_64.keymap index 6397fbb3411..78770b13d80 100644 --- a/app/tests/tap-dance/3f-hold-int-after/native_posix_64.keymap +++ b/app/tests/tap-dance/3f-hold-int-after/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,400) + events = < + ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_RELEASE(0,1,10) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/4a-single/native_posix_64.keymap b/app/tests/tap-dance/4a-single/native_posix_64.keymap index 348a682724f..d473a7d2e69 100644 --- a/app/tests/tap-dance/4a-single/native_posix_64.keymap +++ b/app/tests/tap-dance/4a-single/native_posix_64.keymap @@ -4,8 +4,8 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,1,10) - >; + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/5a-tdint-mid/native_posix_64.keymap b/app/tests/tap-dance/5a-tdint-mid/native_posix_64.keymap index 2188fd020e9..79bdf2f7081 100644 --- a/app/tests/tap-dance/5a-tdint-mid/native_posix_64.keymap +++ b/app/tests/tap-dance/5a-tdint-mid/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_RELEASE(1,0,200) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/5b-tdint-seq/native_posix_64.keymap b/app/tests/tap-dance/5b-tdint-seq/native_posix_64.keymap index 320b7199b71..012d932d60e 100644 --- a/app/tests/tap-dance/5b-tdint-seq/native_posix_64.keymap +++ b/app/tests/tap-dance/5b-tdint-seq/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(1,1,200) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/5c-tdint-after/native_posix_64.keymap b/app/tests/tap-dance/5c-tdint-after/native_posix_64.keymap index 17e538bd860..fea96a563d9 100644 --- a/app/tests/tap-dance/5c-tdint-after/native_posix_64.keymap +++ b/app/tests/tap-dance/5c-tdint-after/native_posix_64.keymap @@ -4,10 +4,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,1,200) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/5d-tdint-multiple/native_posix_64.keymap b/app/tests/tap-dance/5d-tdint-multiple/native_posix_64.keymap index 150f6d05f6d..f98be05ff99 100644 --- a/app/tests/tap-dance/5d-tdint-multiple/native_posix_64.keymap +++ b/app/tests/tap-dance/5d-tdint-multiple/native_posix_64.keymap @@ -4,12 +4,12 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) + events = < + ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_PRESS(1,1,10) ZMK_MOCK_RELEASE(1,1,10) ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,200) - >; + >; }; \ No newline at end of file diff --git a/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap b/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap index 72b6744ae44..a8a82fd9f6b 100644 --- a/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap +++ b/app/tests/tap-dance/6-combo-tap2/native_posix_64.keymap @@ -4,14 +4,14 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - ZMK_MOCK_RELEASE(0,1,200) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,200) + >; }; \ No newline at end of file diff --git a/app/tests/to-layer/behavior_keymap.dtsi b/app/tests/to-layer/behavior_keymap.dtsi index 81e7e80948f..663e897d74b 100644 --- a/app/tests/to-layer/behavior_keymap.dtsi +++ b/app/tests/to-layer/behavior_keymap.dtsi @@ -3,20 +3,20 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &to 0 &to 1 - &kp A &kp S>; - }; + default_layer { + bindings = < + &to 0 &to 1 + &kp A &kp S>; + }; - second_layer { - bindings = < - &to 0 &to 1 - &kp J &kp K>; - }; - }; + second_layer { + bindings = < + &to 0 &to 1 + &kp J &kp K>; + }; + }; }; diff --git a/app/tests/to-layer/normal/native_posix_64.keymap b/app/tests/to-layer/normal/native_posix_64.keymap index 056341f77da..4cb23809452 100644 --- a/app/tests/to-layer/normal/native_posix_64.keymap +++ b/app/tests/to-layer/normal/native_posix_64.keymap @@ -11,19 +11,19 @@ // To layer 0 -- does nothing &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/toggle-layer/behavior_keymap.dtsi b/app/tests/toggle-layer/behavior_keymap.dtsi index b9c0d4a46ab..1ecf8599259 100644 --- a/app/tests/toggle-layer/behavior_keymap.dtsi +++ b/app/tests/toggle-layer/behavior_keymap.dtsi @@ -3,26 +3,26 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp B &tog 1 - &kp D &kp G>; - }; + default_layer { + bindings = < + &kp B &tog 1 + &kp D &kp G>; + }; - lower_layer { - bindings = < - &kp C_NEXT &trans - &kp L &kp J>; - }; + lower_layer { + bindings = < + &kp C_NEXT &trans + &kp L &kp J>; + }; - raise_layer { - bindings = < - &kp W &kp U - &kp X &kp M>; - }; - }; + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; }; diff --git a/app/tests/toggle-layer/early-key-release/native_posix_64.keymap b/app/tests/toggle-layer/early-key-release/native_posix_64.keymap index 6c293390020..0a0c88ea845 100644 --- a/app/tests/toggle-layer/early-key-release/native_posix_64.keymap +++ b/app/tests/toggle-layer/early-key-release/native_posix_64.keymap @@ -4,6 +4,6 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/toggle-layer/normal/native_posix_64.keymap b/app/tests/toggle-layer/normal/native_posix_64.keymap index 9df9d649c07..97bdd17993d 100644 --- a/app/tests/toggle-layer/normal/native_posix_64.keymap +++ b/app/tests/toggle-layer/normal/native_posix_64.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/transparent/behavior_keymap.dtsi b/app/tests/transparent/behavior_keymap.dtsi index 2a7e783abe8..dd5ded90b6c 100644 --- a/app/tests/transparent/behavior_keymap.dtsi +++ b/app/tests/transparent/behavior_keymap.dtsi @@ -3,20 +3,20 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &trans &mo 1 - &kp A &none>; - }; + default_layer { + bindings = < + &trans &mo 1 + &kp A &none>; + }; - lower_layer { - bindings = < - &trans &trans - &trans &kp A>; - }; - }; + lower_layer { + bindings = < + &trans &trans + &trans &kp A>; + }; + }; }; diff --git a/app/tests/transparent/layered/native_posix_64.keymap b/app/tests/transparent/layered/native_posix_64.keymap index 597ca2db788..b1e84c30661 100644 --- a/app/tests/transparent/layered/native_posix_64.keymap +++ b/app/tests/transparent/layered/native_posix_64.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/transparent/normal/native_posix_64.keymap b/app/tests/transparent/normal/native_posix_64.keymap index cbeb61dc477..502f7ccc473 100644 --- a/app/tests/transparent/normal/native_posix_64.keymap +++ b/app/tests/transparent/normal/native_posix_64.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/wpm/1-single_keypress/native_posix_64.keymap b/app/tests/wpm/1-single_keypress/native_posix_64.keymap index 2aa52c168dd..2b113409e52 100644 --- a/app/tests/wpm/1-single_keypress/native_posix_64.keymap +++ b/app/tests/wpm/1-single_keypress/native_posix_64.keymap @@ -1,10 +1,10 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* Wait for the worker to trigger and reset after 5 seconds, followed by a 0 at 6 seconds */ - ZMK_MOCK_PRESS(0,0,6000) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* Wait for the worker to trigger and reset after 5 seconds, followed by a 0 at 6 seconds */ + ZMK_MOCK_PRESS(0,0,6000) + >; }; \ No newline at end of file diff --git a/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap b/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap index 3cfab946ec4..869a5208c4c 100644 --- a/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap +++ b/app/tests/wpm/2-multiple_keypress/native_posix_64.keymap @@ -1,15 +1,15 @@ #include "../behavior_keymap.dtsi" &kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - //1st WPM worker call - 12wpm - 1 key press in 1 second - ZMK_MOCK_PRESS(0,0,1000) - ZMK_MOCK_RELEASE(0,0,10) - // 2nd WPM worker call - 12wpm - 2 key press in 2 second - // note there is no event for this as WPM hasn't changed - // 3rd WPM worker call - 8wpm - 2 key press in 3 seconds - ZMK_MOCK_PRESS(0,0,2000) - >; + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + //1st WPM worker call - 12wpm - 1 key press in 1 second + ZMK_MOCK_PRESS(0,0,1000) + ZMK_MOCK_RELEASE(0,0,10) + // 2nd WPM worker call - 12wpm - 2 key press in 2 second + // note there is no event for this as WPM hasn't changed + // 3rd WPM worker call - 8wpm - 2 key press in 3 seconds + ZMK_MOCK_PRESS(0,0,2000) + >; }; \ No newline at end of file diff --git a/app/tests/wpm/behavior_keymap.dtsi b/app/tests/wpm/behavior_keymap.dtsi index f0c5d0c2f7b..52f9421c2fb 100644 --- a/app/tests/wpm/behavior_keymap.dtsi +++ b/app/tests/wpm/behavior_keymap.dtsi @@ -3,15 +3,15 @@ #include / { - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; - default_layer { - bindings = < - &kp B &none - &none &none - >; - }; - }; + default_layer { + bindings = < + &kp B &none + &none &none + >; + }; + }; }; diff --git a/docs/blog/2020-10-03-bootloader-fix.md b/docs/blog/2020-10-03-bootloader-fix.md index 8a9fd7f800c..ec1d7b0ba72 100644 --- a/docs/blog/2020-10-03-bootloader-fix.md +++ b/docs/blog/2020-10-03-bootloader-fix.md @@ -175,19 +175,19 @@ do is shift back the settings area and code space `0xC000` bytes. We'll apply this to all of the `.dts` files for the boards that were affected by this issue. ```diff - code_partition: partition@26000 { - label = "code_partition"; -- reg = <0x00026000 0x000d2000>; -+ reg = <0x00026000 0x000c6000>; - }; - - -- storage_partition: partition@f8000 { -+ storage_partition: partition@ec000 { - label = "storage"; -- reg = <0x000f8000 0x00008000>; -+ reg = <0x000ec000 0x00008000>; - }; + code_partition: partition@26000 { + label = "code_partition"; +- reg = <0x00026000 0x000d2000>; ++ reg = <0x00026000 0x000c6000>; + }; + + +- storage_partition: partition@f8000 { ++ storage_partition: partition@ec000 { + label = "storage"; +- reg = <0x000f8000 0x00008000>; ++ reg = <0x000ec000 0x00008000>; + }; ``` And with those changes, we should no longer run into this issue! In the process diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index f267e4a4ceb..f0096606938 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -57,14 +57,14 @@ For example, the following hold-tap configuration enables `global-quick-tap` wit ``` gqt: global-quick-tap { - compatible = "zmk,behavior-hold-tap"; - label = "GLOBAL_QUICK_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping-term-ms = <200>; - quick-tap-ms = <125>; - global-quick-tap; - bindings = <&kp>, <&kp>; + compatible = "zmk,behavior-hold-tap"; + label = "GLOBAL_QUICK_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <200>; + quick-tap-ms = <125>; + global-quick-tap; + bindings = <&kp>, <&kp>; }; ``` @@ -80,7 +80,7 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin ``` &mt { - retro-tap; + retro-tap; }; ``` @@ -101,28 +101,28 @@ See the following example, which uses a hold-tap behavior definition, configured #include / { - behaviors { - pht: positional_hold_tap { - compatible = "zmk,behavior-hold-tap"; - label = "POSITIONAL_HOLD_TAP"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping-term-ms = <400>; - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - hold-trigger-key-positions = <1>; // <---[[the W key]] - }; - }; - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - default_layer { - bindings = < - // position 0 position 1 position 2 - &pht LEFT_SHIFT Q &kp W &kp E - >; - }; - }; + behaviors { + pht: positional_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "POSITIONAL_HOLD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <400>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <1>; // <---[[the W key]] + }; + }; + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + default_layer { + bindings = < + // position 0 position 1 position 2 + &pht LEFT_SHIFT Q &kp W &kp E + >; + }; + }; }; ``` @@ -154,28 +154,28 @@ The following are suggested hold-tap configurations that work well with home row #include / { - behaviors { - lh_pht: left_hand_positional_hold_tap { - compatible = "zmk,behavior-hold-tap"; - label = "LEFT_POSITIONAL_HOLD_TAP"; - #binding-cells = <2>; - flavor = "tap-unless-interrupted"; - tapping-term-ms = <100>; // <---[[produces tap if held longer than tapping-term-ms]] - quick-tap-ms = <200>; - bindings = <&kp>, <&kp>; - hold-trigger-key-positions = <5 6 7 8 9 10>; // <---[[right-hand keys]] - }; - }; - - keymap { - compatible = "zmk,keymap"; - default_layer { - bindings = < - // position 0 pos 1 pos 2 pos 3 pos 4 pos 5 pos 6 pos 7 pos 8 pos 9 pos 10 - &lh_pht LSFT A &lh_pht LGUI S &lh_pht LALT D &lh_pht LCTL F &kp G &kp H &kp I &kp J &kp K &kp L &kp SEMI - >; - }; - }; + behaviors { + lh_pht: left_hand_positional_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "LEFT_POSITIONAL_HOLD_TAP"; + #binding-cells = <2>; + flavor = "tap-unless-interrupted"; + tapping-term-ms = <100>; // <---[[produces tap if held longer than tapping-term-ms]] + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = <5 6 7 8 9 10>; // <---[[right-hand keys]] + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + // position 0 pos 1 pos 2 pos 3 pos 4 pos 5 pos 6 pos 7 pos 8 pos 9 pos 10 + &lh_pht LSFT A &lh_pht LGUI S &lh_pht LALT D &lh_pht LCTL F &kp G &kp H &kp I &kp J &kp K &kp L &kp SEMI + >; + }; + }; }; ``` @@ -186,26 +186,26 @@ The following are suggested hold-tap configurations that work well with home row #include / { - behaviors { - hm: homerow_mods { - compatible = "zmk,behavior-hold-tap"; - label = "HOMEROW_MODS"; - #binding-cells = <2>; - tapping-term-ms = <150>; - quick-tap-ms = <0>; - flavor = "tap-preferred"; - bindings = <&kp>, <&kp>; - }; - }; - - keymap { - compatible = "zmk,keymap"; - default_layer { - bindings = < - &hm LCTRL A &hm LGUI S &hm LALT D &hm LSHIFT F - >; - }; - }; + behaviors { + hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "HOMEROW_MODS"; + #binding-cells = <2>; + tapping-term-ms = <150>; + quick-tap-ms = <0>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &hm LCTRL A &hm LGUI S &hm LALT D &hm LSHIFT F + >; + }; + }; }; ``` @@ -216,26 +216,26 @@ The following are suggested hold-tap configurations that work well with home row #include / { - behaviors { - bhm: balanced_homerow_mods { - compatible = "zmk,behavior-hold-tap"; - label = "HOMEROW_MODS"; - #binding-cells = <2>; - tapping-term-ms = <200>; // <---[[moderate duration]] - quick-tap-ms = <0>; - flavor = "balanced"; - bindings = <&kp>, <&kp>; - }; - }; - - keymap { - compatible = "zmk,keymap"; - default_layer { - bindings = < - &bhm LCTRL A &bhm LGUI S &bhm LALT D &bhm LSHIFT F - >; - }; - }; + behaviors { + bhm: balanced_homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "HOMEROW_MODS"; + #binding-cells = <2>; + tapping-term-ms = <200>; // <---[[moderate duration]] + quick-tap-ms = <0>; + flavor = "balanced"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &bhm LCTRL A &bhm LGUI S &bhm LALT D &bhm LSHIFT F + >; + }; + }; }; ``` @@ -264,14 +264,14 @@ A popular method of implementing Autoshift in ZMK involves a C-preprocessor macr }; }; - keymap { - compatible = "zmk,keymap"; - default_layer { - bindings = < - AS(Q) AS(W) AS(E) AS(R) AS(T) AS(Y) // Autoshift applied for QWERTY keys - >; - }; - }; + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + AS(Q) AS(W) AS(E) AS(R) AS(T) AS(Y) // Autoshift applied for QWERTY keys + >; + }; + }; }; ``` @@ -300,14 +300,14 @@ This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) }; keymap { - compatible = "zmk,keymap"; - default_layer { - bindings = < - &mo_tog 2 1 // &mo 2 on hold, &tog 1 on tap - MO_TOG(3) // &mo 3 on hold, &tog 3 on tap - >; - }; - }; + compatible = "zmk,keymap"; + default_layer { + bindings = < + &mo_tog 2 1 // &mo 2 on hold, &tog 1 on tap + MO_TOG(3) // &mo 3 on hold, &tog 3 on tap + >; + }; + }; }; ``` diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 0818aaaeacc..cf793089be6 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -105,29 +105,29 @@ Example: #define NONE 0 / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < + default_layer { + bindings = < &tog NAVI &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS &kp NUMBER_7 &kp NUMBER_8 &kp NUMBER_9 &kp KP_PLUS &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 &kp KP_PLUS &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_3 &kp RETURN &kp NUMBER_0 &kp NUMBER_0 &kp DOT &kp RETURN - >; - }; + >; + }; - nav_layer { - bindings = < + nav_layer { + bindings = < &tog NAVI &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS &kp HOME &kp UP &kp PAGE_UP &kp KP_PLUS &kp LEFT &none &kp RIGHT &kp KP_PLUS &kp END &kp DOWN &kp PAGE_DOWN &kp RETURN &kp INSERT &kp INSERT &kp DEL &kp RETURN >; - }; - }; + }; + }; }; ``` diff --git a/docs/docs/behaviors/tap-dance.md b/docs/docs/behaviors/tap-dance.md index 65d5e7659d6..c68b51dcd44 100644 --- a/docs/docs/behaviors/tap-dance.md +++ b/docs/docs/behaviors/tap-dance.md @@ -42,25 +42,25 @@ This example configures a tap-dance named `td0` that outputs the number of times #include / { - behaviors { - td0: tap_dance_0 { + behaviors { + td0: tap_dance_0 { compatible = "zmk,behavior-tap-dance"; label = "TAP_DANCE_0"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&kp N1>, <&kp N2>, <&kp N3>; }; - }; + }; - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < - &td0 - >; - }; - }; + default_layer { + bindings = < + &td0 + >; + }; + }; }; ``` @@ -83,25 +83,25 @@ This example configures a mod-tap inside a tap-dance named `td_mt` that outputs #include / { - behaviors { - td_mt: tap_dance_mod_tap { + behaviors { + td_mt: tap_dance_mod_tap { compatible = "zmk,behavior-tap-dance"; label = "TAP_DANCE_MOD_TAP"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&mt LSHIFT CAPSLOCK>, <&kp LCTRL>; }; - }; + }; - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - bindings = < - &td_mt - >; - }; - }; + default_layer { + bindings = < + &td_mt + >; + }; + }; }; ``` diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 51fd45b7109..1ff1bfa094e 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -116,14 +116,14 @@ Devicetree files look like this: ```devicetree / { - chosen { - zmk,kscan = &kscan0; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - }; + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + }; }; ``` @@ -167,9 +167,9 @@ If the node you want to edit doesn't have a label, you can also write a new tree ```devicetree / { - kscan { - debounce-press-ms = <0>; - }; + kscan { + debounce-press-ms = <0>; + }; }; ``` @@ -244,7 +244,7 @@ Example: some-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>, <&gpio0 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + ; ``` #### path diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index 6d026f2b0e5..0d70aa3b2a2 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -367,15 +367,15 @@ For the purpose of this section, we will discuss the structure of `app/dts/behav #include / { - behaviors { - /omit-if-no-ref/ gresc: grave_escape { - compatible = "zmk,behavior-mod-morph"; - label = "GRAVE_ESCAPE"; - #binding-cells = <0>; - bindings = <&kp ESC>, <&kp GRAVE>; + behaviors { + /omit-if-no-ref/ gresc: grave_escape { + compatible = "zmk,behavior-mod-morph"; + label = "GRAVE_ESCAPE"; + #binding-cells = <0>; + bindings = <&kp ESC>, <&kp GRAVE>; mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; - }; - }; + }; + }; }; ``` diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 62d71f0328e..186169234f2 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -55,7 +55,7 @@ The `Kconfig.shield` file defines any additional Kconfig settings that may be re ``` config SHIELD_MY_BOARD - def_bool $(shields_list_contains,my_board) + def_bool $(shields_list_contains,my_board) ``` This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.md) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. @@ -64,10 +64,10 @@ This will make sure that a new configuration value named `SHIELD_MY_BOARD` is se ``` config SHIELD_MY_BOARD_LEFT - def_bool $(shields_list_contains,my_board_left) + def_bool $(shields_list_contains,my_board_left) config SHIELD_MY_BOARD_RIGHT - def_bool $(shields_list_contains,my_board_right) + def_bool $(shields_list_contains,my_board_right) ``` ### Kconfig.defconfig @@ -87,7 +87,7 @@ The keyboard name must be less than or equal to 16 characters in length, otherwi if SHIELD_MY_BOARD config ZMK_KEYBOARD_NAME - default "My Board" + default "My Board" endif ``` @@ -101,17 +101,17 @@ Finally, you'll want to turn on the split option for both sides. This can all be if SHIELD_MY_BOARD_LEFT config ZMK_KEYBOARD_NAME - default "My Board" + default "My Board" config ZMK_SPLIT_ROLE_CENTRAL - default y + default y endif if SHIELD_MY_BOARD_LEFT || SHIELD_MY_BOARD_RIGHT config ZMK_SPLIT - default y + default y endif ``` @@ -134,13 +134,13 @@ this might look something like: ``` / { - chosen { - zmk,kscan = &kscan0; - }; + chosen { + zmk,kscan = &kscan0; + }; - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; diode-direction = "col2row"; col-gpios @@ -149,12 +149,12 @@ this might look something like: , <&pro_micro 16 GPIO_ACTIVE_HIGH> ; - row-gpios - = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + row-gpios + = <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; + ; + }; }; ``` @@ -174,43 +174,43 @@ For `col2row` directed boards like the iris, the shared .dtsi file may look like #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <4>; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | // | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | // | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) - >; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A from the schematic file - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B from the schematic file - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C from the schematic file - , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D from the schematic file - , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row E from the schematic file - ; - - }; + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A from the schematic file + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B from the schematic file + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C from the schematic file + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D from the schematic file + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row E from the schematic file + ; + + }; }; ``` @@ -230,14 +230,14 @@ This is exemplified with the iris .overlay files. #include "iris.dtsi" // Notice that the main dtsi files are included in the overlay. &kscan0 { - col-gpios - = <&pro_micro 19 GPIO_ACTIVE_HIGH> // col1 in the schematic - , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col2 in the schematic - , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col3 in the schematic - , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col4 in the schematic - , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col5 in the schematic - , <&pro_micro 10 GPIO_ACTIVE_HIGH> // col6 in the schematic - ; + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> // col1 in the schematic + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col2 in the schematic + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col3 in the schematic + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col4 in the schematic + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col5 in the schematic + , <&pro_micro 10 GPIO_ACTIVE_HIGH> // col6 in the schematic + ; }; ``` @@ -247,18 +247,18 @@ This is exemplified with the iris .overlay files. #include "iris.dtsi" &default_transform { // The matrix transform for this board is 6 columns over because the left half is 6 columns wide according to the matrix. - col-offset = <6>; + col-offset = <6>; }; &kscan0 { - col-gpios - = <&pro_micro 10 GPIO_ACTIVE_HIGH> // col6 in the schematic - , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col5 in the schematic - , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col4 in the schematic - , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col3 in the schematic - , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col2 in the schematic - , <&pro_micro 19 GPIO_ACTIVE_HIGH> // col1 in the schematic - ; + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> // col6 in the schematic + , <&pro_micro 16 GPIO_ACTIVE_HIGH> // col5 in the schematic + , <&pro_micro 14 GPIO_ACTIVE_HIGH> // col4 in the schematic + , <&pro_micro 15 GPIO_ACTIVE_HIGH> // col3 in the schematic + , <&pro_micro 18 GPIO_ACTIVE_HIGH> // col2 in the schematic + , <&pro_micro 19 GPIO_ACTIVE_HIGH> // col1 in the schematic + ; }; ``` @@ -316,28 +316,28 @@ Here is an example for the [nice60](https://github.com/Nicell/nice60), which use #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <8>; - rows = <8>; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <8>; + rows = <8>; // | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | MX13 | MX14 | // | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | MX21 | MX22 | MX23 | MX34 | MX25 | MX26 | MX27 | MX28 | // | MX29 | MX30 | MX31 | MX32 | MX33 | MX34 | MX35 | MX36 | MX37 | MX38 | MX39 | MX40 | MX41 | // | MX42 | MX43 | MX44 | MX45 | MX46 | MX47 | MX48 | MX49 | MX50 | MX51 | MX52 | MX53 | // | MX54 | MX55 | MX56 | MX57 | MX58 | MX59 | MX60 | MX61 | - map = < + map = < RC(3,0) RC(2,0) RC(1,0) RC(0,0) RC(1,1) RC(0,1) RC(0,2) RC(1,3) RC(0,3) RC(1,4) RC(0,4) RC(0,5) RC(1,6) RC(1,7) RC(4,0) RC(4,1) RC(3,1) RC(2,1) RC(2,2) RC(1,2) RC(2,3) RC(3,4) RC(2,4) RC(2,5) RC(1,5) RC(2,6) RC(2,7) RC(3,7) RC(5,0) RC(5,1) RC(5,2) RC(4,2) RC(3,2) RC(4,3) RC(3,3) RC(4,4) RC(4,5) RC(3,5) RC(4,6) RC(3,6) RC(4,7) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(5,3) RC(6,4) RC(5,4) RC(6,5) RC(5,5) RC(6,6) RC(5,6) RC(5,7) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,5) RC(7,6) RC(6,7) RC(7,7) - >; - }; + >; + }; ``` Some important things to note: @@ -433,13 +433,13 @@ In your device tree file you will need to add the following lines to define the ``` left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = ; - b-gpios = ; - resolution = <4>; - status = "disabled"; - }; + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = ; + b-gpios = ; + resolution = <4>; + status = "disabled"; + }; ``` Here you will have to replace PIN_A and PIN_B with the appropriate pins that your PCB utilizes for the encoder(s). For keyboards that use the Pro Micro or any of the Pro Micro replacements, Sparkfun's [Pro Micro Hookup Guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro) has a pinout diagram that can be useful to determine the right pins. Reference either the blue numbers labeled "Arduino" (digital pins) or the green numbers labeled "Analog" (analog pins). For pins that are labeled as both digital and analog, refer to your specific board's .dtsi file to determine how you should refer to that pin. @@ -450,9 +450,9 @@ Once you have defined the encoder sensors, you will have to add them to the list ``` sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; ``` In this example, a left_encoder and right_encoder are both added. Additional encoders can be added with spaces separating each, and the order they are added here determines the order in which you define their behavior in your keymap. @@ -463,7 +463,7 @@ Add the following lines to your overlay file(s) to enable the encoder: ``` &left_encoder { - status = "okay"; + status = "okay"; }; ``` diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index 03d206f114a..717361a2085 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -62,9 +62,9 @@ Then you have to add the following lines to your `.dts` file: ``` &pwm0 { - status = "okay"; - ch0-pin = <45>; - /* ch0-inverted; */ + status = "okay"; + ch0-pin = <45>; + /* ch0-inverted; */ }; ``` @@ -84,7 +84,7 @@ Then you have to add the following lines inside the root devicetree node on the label = "Backlight LEDs"; pwm_led_0 { pwms = <&pwm0 45>; - label = "Backlight LED 0"; + label = "Backlight LED 0"; }; }; }; @@ -129,9 +129,9 @@ Then add the following lines to your `.overlay` file: ``` &pwm0 { - status = "okay"; - ch0-pin = <45>; - /* ch0-inverted; */ + status = "okay"; + ch0-pin = <45>; + /* ch0-inverted; */ }; ``` @@ -151,7 +151,7 @@ Then you have to add the following lines inside the root devicetree node on the label = "Backlight LEDs"; pwm_led_0 { pwms = <&pwm0 45>; - label = "Backlight LED 0"; + label = "Backlight LED 0"; }; }; }; @@ -182,7 +182,7 @@ Optionally, on Pro Micro compatible shields you can add a LED GPIO node to your label = "Backlight LEDs"; gpio_led_0 { gpios = <&pro_micro 20 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; + label = "Backlight LED 0"; }; }; }; @@ -201,10 +201,10 @@ In order to do that, first you need to enable PWM for each pin: ``` &pwm0 { - status = "okay"; - ch0-pin = <45>; /* LED 0 */ - ch1-pin = <46>; /* LED 1 */ - ch2-pin = <47>; /* LED 2 */ + status = "okay"; + ch0-pin = <45>; /* LED 0 */ + ch1-pin = <46>; /* LED 1 */ + ch2-pin = <47>; /* LED 2 */ ... }; ``` diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 09191896190..44313cc1dac 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -12,14 +12,14 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod ``` / { - combos { - compatible = "zmk,combos"; - combo_esc { - timeout-ms = <50>; - key-positions = <0 1>; - bindings = <&kp ESC>; - }; - }; + combos { + compatible = "zmk,combos"; + combo_esc { + timeout-ms = <50>; + key-positions = <0 1>; + bindings = <&kp ESC>; + }; + }; }; ``` diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index 6d4e5f2c5f9..93c2c8250fa 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -113,10 +113,10 @@ Nested under the devicetree root, is the keymap node. The node _name_ itself is ``` keymap { - compatible = "zmk,keymap"; + compatible = "zmk,keymap"; // Layer nodes go here! - }; + }; ``` ### Layers diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index c1dc68d3177..00d3aa0ab8a 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -60,18 +60,18 @@ Here's an example on a definition that uses P0.06: #include &pinctrl { - spi3_default: spi3_default { - group1 { - psels = ; - }; - }; - - spi3_sleep: spi3_sleep { - group1 { - psels = ; - low-power-enable; - }; - }; + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; &spi3 { @@ -149,9 +149,9 @@ Once you have your `led_strip` properly defined you need to add it to the root d ``` / { - chosen { - zmk,underglow = &led_strip; - }; + chosen { + zmk,underglow = &led_strip; + }; }; ``` diff --git a/docs/docs/keymap-example-file.md b/docs/docs/keymap-example-file.md index cb20cb6d393..d8d201aff93 100644 --- a/docs/docs/keymap-example-file.md +++ b/docs/docs/keymap-example-file.md @@ -3,24 +3,24 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // -------------------------------------------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | // | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | - bindings = < + bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; }; ``` diff --git a/docs/docs/keymap-example.md b/docs/docs/keymap-example.md index 9d751f59944..47d1c06bca6 100644 --- a/docs/docs/keymap-example.md +++ b/docs/docs/keymap-example.md @@ -1,21 +1,21 @@ ``` - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { + default_layer { // -------------------------------------------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | // | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | - bindings = < + bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT - >; + >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; - }; - }; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; ``` From 5b07c86d05a81a82d4fd72ad29d3daa846a2b458 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 00:00:12 -0500 Subject: [PATCH 0653/1130] chore: Update Prettier Added a workaround to select the latest version of Prettier with pre-commit, since the pre-commit mirror repo started tracking alpha releases and doesn't have anything beyond 2.7.1. --- .pre-commit-config.yaml | 3 +++ app/package-lock.json | 14 +++++++------- app/package.json | 2 +- docs/package-lock.json | 14 +++++++------- docs/package.json | 2 +- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1375a6ae709..e0666ea8d2b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,6 +15,9 @@ repos: rev: v2.7.1 hooks: - id: prettier + # Workaround for https://github.com/pre-commit/mirrors-prettier/issues/29 + additional_dependencies: + - prettier@2.8.7 - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: diff --git a/app/package-lock.json b/app/package-lock.json index ed8765f35e2..060fcba0f48 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,13 +9,13 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { - "prettier": "^2.7.1" + "prettier": "^2.8.7" } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -30,9 +30,9 @@ }, "dependencies": { "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true } } diff --git a/app/package.json b/app/package.json index 9ad2878823e..e1a7957fbce 100644 --- a/app/package.json +++ b/app/package.json @@ -18,6 +18,6 @@ }, "homepage": "https://zmk.dev/", "devDependencies": { - "prettier": "^2.7.1" + "prettier": "^2.8.7" } } diff --git a/docs/package-lock.json b/docs/package-lock.json index c7333cb36a9..2c8a7fba1e5 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -39,7 +39,7 @@ "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", - "prettier": "^2.7.1", + "prettier": "^2.8.7", "string-replace-loader": "^3.1.0", "typescript": "^4.6.3", "webpack": "^5.72.1" @@ -12201,9 +12201,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -24678,9 +24678,9 @@ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true }, "pretty-error": { diff --git a/docs/package.json b/docs/package.json index 95d47b9f0bc..70105b54f64 100644 --- a/docs/package.json +++ b/docs/package.json @@ -58,7 +58,7 @@ "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", - "prettier": "^2.7.1", + "prettier": "^2.8.7", "string-replace-loader": "^3.1.0", "typescript": "^4.6.3", "webpack": "^5.72.1" From 7a352908eebdc84aca905a83a22e27748154ad0d Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 11:37:42 -0500 Subject: [PATCH 0654/1130] docs: Add pre-commit documentation --- docs/docs/development/pre-commit.md | 37 +++++++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 38 insertions(+) create mode 100644 docs/docs/development/pre-commit.md diff --git a/docs/docs/development/pre-commit.md b/docs/docs/development/pre-commit.md new file mode 100644 index 00000000000..b4306fc9521 --- /dev/null +++ b/docs/docs/development/pre-commit.md @@ -0,0 +1,37 @@ +--- +title: Pre-commit +--- + +ZMK uses [pre-commit](https://pre-commit.com/) to check for common errors and make sure the codebase is formatted consistently. + +Pre-commit is run on every pull request. You can also install it locally to get the same checks run on every commit you make _before_ you submit a pull request. + +## Installing pre-commit + +Open a terminal and run: + +```bash +pip3 install pre-commit +``` + +If this doesn't work, make sure [Python](https://www.python.org/) is installed and try again. + +## Enabling Commit Hooks + +Now that pre-commit is installed on your PC, you need to install it into the ZMK repo to enable it. Open a terminal to the ZMK repo directory and run: + +```bash +pre-commit install +``` + +This should print a message such as + +``` +pre-commit installed at .git\hooks\pre-commit +``` + +Pre-commit will now automatically check your changes whenever you run `git commit`. If it detects a problem, it will describe the problem and cancel the commit. For simple problems such as incorrect formatting, it will also automatically fix the files so you can just `git add` them and try again. + +## Automatically Enabling pre-commit + +Pre-commit can be configured to automatically install itself into any newly cloned repository, so you don't have to remember to run `pre-commit install`. See the [pre-commit documentation](https://pre-commit.com/#automatically-enabling-pre-commit-on-repositories) for instructions. diff --git a/docs/sidebars.js b/docs/sidebars.js index 21585747a5f..43f17b4193f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -71,6 +71,7 @@ module.exports = { ], Development: [ "development/clean-room", + "development/pre-commit", "development/documentation", "development/setup", "development/build-flash", From de152fe7419b8a02ca8a1723c3487dba69da3969 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 20 Apr 2023 23:51:40 -0700 Subject: [PATCH 0655/1130] fix(bluetooth): Revert to Legacy LLCP * Reports of constant/frequent disconnects, with HCI err 0x28, "instant passed", seem linked to newer LLCP that became default in Zephyr 3.2, so revert to the Legacy LLCP for now until a proper fix for new LLCP can be found. --- app/Kconfig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 25a99b551b3..32b708e8801 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -120,6 +120,11 @@ menuconfig ZMK_BLE if ZMK_BLE +choice BT_LL_SW_LLCP_IMPL + default BT_LL_SW_LLCP_LEGACY + +endchoice + config SYSTEM_WORKQUEUE_STACK_SIZE default 4096 if SOC_RP2040 default 2048 From e52e734480816d269ecedb5bac6a3703577e6c02 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 25 Apr 2023 05:51:04 +0000 Subject: [PATCH 0656/1130] chore: Fix formatting of Kconfig setting. --- app/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 32b708e8801..d1b6682f507 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -121,7 +121,7 @@ menuconfig ZMK_BLE if ZMK_BLE choice BT_LL_SW_LLCP_IMPL - default BT_LL_SW_LLCP_LEGACY + default BT_LL_SW_LLCP_LEGACY endchoice From db08e041c64d1a2b232bca9f728c02cde3907860 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:37:33 +0100 Subject: [PATCH 0657/1130] feat(boards): Polarity works CKP Series Adds support for the CKP family of boards BT60V2 ANSIHotswap, ISO Hotswap, ANSI Lowpro and soldered BT65 ANSI Hotswap, ISO Hotswap and soldered BT75 ANSI Hotswap and soldered The BT65 and BT75 are stylised as btXX_v1 in order to maintain compatibility with customers existing zmk-config setups in the same way the BT60 V1 was handled when merged into main. CKP boards have identical pinmapping between hotswap and soldered so there's only one set of defconfig, dts, keymap, yaml and yml files per size --- app/boards/arm/ckp/Kconfig | 8 + app/boards/arm/ckp/Kconfig.board | 16 ++ app/boards/arm/ckp/Kconfig.defconfig | 34 +++++ app/boards/arm/ckp/board.cmake | 4 + app/boards/arm/ckp/bt60_v2.dts | 71 +++++++++ app/boards/arm/ckp/bt60_v2.keymap | 177 ++++++++++++++++++++++ app/boards/arm/ckp/bt60_v2.yaml | 15 ++ app/boards/arm/ckp/bt60_v2.zmk.yml | 14 ++ app/boards/arm/ckp/bt60_v2_defconfig | 38 +++++ app/boards/arm/ckp/bt65_v1.dts | 71 +++++++++ app/boards/arm/ckp/bt65_v1.keymap | 177 ++++++++++++++++++++++ app/boards/arm/ckp/bt65_v1.yaml | 15 ++ app/boards/arm/ckp/bt65_v1.zmk.yml | 14 ++ app/boards/arm/ckp/bt65_v1_defconfig | 38 +++++ app/boards/arm/ckp/bt75_v1.dts | 61 ++++++++ app/boards/arm/ckp/bt75_v1.keymap | 148 ++++++++++++++++++ app/boards/arm/ckp/bt75_v1.yaml | 15 ++ app/boards/arm/ckp/bt75_v1.zmk.yml | 14 ++ app/boards/arm/ckp/bt75_v1_defconfig | 38 +++++ app/boards/arm/ckp/ckp-pinctrl.dtsi | 31 ++++ app/boards/arm/ckp/ckp.dtsi | 217 +++++++++++++++++++++++++++ 21 files changed, 1216 insertions(+) create mode 100644 app/boards/arm/ckp/Kconfig create mode 100644 app/boards/arm/ckp/Kconfig.board create mode 100644 app/boards/arm/ckp/Kconfig.defconfig create mode 100644 app/boards/arm/ckp/board.cmake create mode 100644 app/boards/arm/ckp/bt60_v2.dts create mode 100644 app/boards/arm/ckp/bt60_v2.keymap create mode 100644 app/boards/arm/ckp/bt60_v2.yaml create mode 100644 app/boards/arm/ckp/bt60_v2.zmk.yml create mode 100644 app/boards/arm/ckp/bt60_v2_defconfig create mode 100644 app/boards/arm/ckp/bt65_v1.dts create mode 100644 app/boards/arm/ckp/bt65_v1.keymap create mode 100644 app/boards/arm/ckp/bt65_v1.yaml create mode 100644 app/boards/arm/ckp/bt65_v1.zmk.yml create mode 100644 app/boards/arm/ckp/bt65_v1_defconfig create mode 100644 app/boards/arm/ckp/bt75_v1.dts create mode 100644 app/boards/arm/ckp/bt75_v1.keymap create mode 100644 app/boards/arm/ckp/bt75_v1.yaml create mode 100644 app/boards/arm/ckp/bt75_v1.zmk.yml create mode 100644 app/boards/arm/ckp/bt75_v1_defconfig create mode 100644 app/boards/arm/ckp/ckp-pinctrl.dtsi create mode 100644 app/boards/arm/ckp/ckp.dtsi diff --git a/app/boards/arm/ckp/Kconfig b/app/boards/arm/ckp/Kconfig new file mode 100644 index 00000000000..7baf1486102 --- /dev/null +++ b/app/boards/arm/ckp/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_BT60_V2 || BOARD_BT65_V1 || BOARD_BT75_V1 diff --git a/app/boards/arm/ckp/Kconfig.board b/app/boards/arm/ckp/Kconfig.board new file mode 100644 index 00000000000..a98a31673f4 --- /dev/null +++ b/app/boards/arm/ckp/Kconfig.board @@ -0,0 +1,16 @@ +# CKP boards configuration + +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_BT60_V2 + bool "bt60_v2" + depends on SOC_NRF52840_QIAA + +config BOARD_BT65_V1 + bool "bt65_v1" + depends on SOC_NRF52840_QIAA + +config BOARD_BT75_V1 + bool "bt75_v1" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/ckp/Kconfig.defconfig b/app/boards/arm/ckp/Kconfig.defconfig new file mode 100644 index 00000000000..d5bf4ded1eb --- /dev/null +++ b/app/boards/arm/ckp/Kconfig.defconfig @@ -0,0 +1,34 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD + default "bt60_v2" if BOARD_BT60_V2 + default "bt65_v1" if BOARD_BT65_V1 + default "bt75_v1" if BOARD_BT75_V1 +config ZMK_KEYBOARD_NAME + default "BT60 V2" if BOARD_BT60_V2 + default "BT65" if BOARD_BT65_V1 + default "BT75" if BOARD_BT75_V1 + +if BOARD_BT60_V2 || BOARD_BT65_V1 || BOARD_BT75_V1 + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +endif # BOARD_BT60_V2 || BOARD_BT65_V1 || BOARD_BT75_V1 diff --git a/app/boards/arm/ckp/board.cmake b/app/boards/arm/ckp/board.cmake new file mode 100644 index 00000000000..b7feee2ee9e --- /dev/null +++ b/app/boards/arm/ckp/board.cmake @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/ckp/bt60_v2.dts b/app/boards/arm/ckp/bt60_v2.dts new file mode 100644 index 00000000000..19f92287e3f --- /dev/null +++ b/app/boards/arm/ckp/bt60_v2.dts @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2022 The ZMK Contributors +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include "ckp.dtsi" + + +/ { + model = "BT60_V2"; + compatible = "polarityworks,bt60_v2"; + + chosen { + zmk,matrix_transform = &ansi_transform; + }; + + + ansi_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) + RC(4,0) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) + >; + }; + + iso_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) + >; + }; + + all_1u_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) + >; + }; + + hhkb_transform: keymap_transform_3 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) + RC(4,0) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,11) RC(5,12) RC(5,13) + >; + }; +}; diff --git a/app/boards/arm/ckp/bt60_v2.keymap b/app/boards/arm/ckp/bt60_v2.keymap new file mode 100644 index 00000000000..eeb5c96e373 --- /dev/null +++ b/app/boards/arm/ckp/bt60_v2.keymap @@ -0,0 +1,177 @@ +#include +#include +#include +#include +#include + +#define ANSI +//#define ISO +//#define ALL_1U +//#define HHKB + +/ { + chosen { + #ifdef ANSI + zmk,matrix_transform = &ansi_transform; + #elif defined(ISO) + zmk,matrix_transform = &iso_transform; + #elif defined(ALL_1U) + zmk,matrix_transform = &all_1u_transform; + #elif defined(HHKB) + zmk,matrix_transform = &hhkb_transform; + #else + #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt60_v2.keymap" + #endif + }; + + keymap { + compatible = "zmk,keymap"; + #ifdef ANSI + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // ------------------------------------------------------------------------------------------ + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | + // | TAB | Q | UP | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | RGB_TOG| + // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | HOME| PGUP| BOOT | + // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | END | PGDN | BL_TOG | + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | RESET | BT_CLR | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &rgb_ug RGB_TOG + &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &kp END &kp PG_DN &bl BL_TOG + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &sys_reset &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ISO) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | + // | SHIFT | \ | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT + &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET + &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // ------------------------------------------------------------------------------------------ + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | + // | TAB | Q | UP | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | | + // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | HOME| PGUP|RGB_TOG| BOOT | + // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| B | N | M | , | END | PGDN | BL_TOG | + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | RESET |BT_CLR | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK + &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &rgb_ug RGB_TOG &bootloader + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &kp END &kp PG_DN &bl BL_TOG + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &sys_reset &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ALL_1U) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP | DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHFT |NONE| Z | X | C | V | B | N | M | , | . | / | SHFT | UP | 1 | + // | CTL | WIN | ALT | SPACE | RALT| CTRL | LEFT | DOWN | RIGHT | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &none &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &mo 1 + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // ------------------------------------------------------------------------------------------ + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |BKSP | DEL | + // | TAB | Q | W | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | RGB_TOG | + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | HOME| PGUP| BOOT | + // | SHFT |NONE|VOLDN|VOLUP|MUTE|BLINC|BLDEC| N | M | , | END | PGDN | SHFT|BL_TOG| 1 | + // | BT_PRV| BT_NXT| ALT | SPACE | RALT| CTRL | LEFT |RESET| BT_CLR | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &rgb_ug RGB_TOG + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &trans &none &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &kp END &kp PG_DN &trans &bl BL_TOG &trans + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &sys_reset &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(HHKB) + default_layer { + // ------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL | + // ------------------------------------------------------------------------------------------ + bindings = < + + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // ------------------------------------------------------------------------------------------ + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | + // | TAB | Q | UP | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | RGB_TOG| + // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | HOME| PGUP| BOOT | + // | SHFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | END | PGDN | BL_TOG | + // | BT_PRV | BT_NXT | ALT | SPACE | RESET | 1 | BT_CLR | + // ------------------------------------------------------------------------------------------ + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &rgb_ug RGB_TOG + &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &kp END &kp PG_DN &bl BL_TOG + &bt BT_PRV &bt BT_NXT &trans &trans &sys_reset &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #else + #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt60_v2.keymap" + #endif + + }; +}; diff --git a/app/boards/arm/ckp/bt60_v2.yaml b/app/boards/arm/ckp/bt60_v2.yaml new file mode 100644 index 00000000000..2a3f3b47a47 --- /dev/null +++ b/app/boards/arm/ckp/bt60_v2.yaml @@ -0,0 +1,15 @@ +identifier: bt60_v2 +name: BT60 V2 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/ckp/bt60_v2.zmk.yml b/app/boards/arm/ckp/bt60_v2.zmk.yml new file mode 100644 index 00000000000..faf64205da1 --- /dev/null +++ b/app/boards/arm/ckp/bt60_v2.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: bt60_v2 +name: BT60 V2 +type: board +arch: arm +features: + - keys + - encoder + - underglow + - backlight +outputs: + - usb + - ble +url: https://polarityworks.com/btckp diff --git a/app/boards/arm/ckp/bt60_v2_defconfig b/app/boards/arm/ckp/bt60_v2_defconfig new file mode 100644 index 00000000000..f6dc7e09a68 --- /dev/null +++ b/app/boards/arm/ckp/bt60_v2_defconfig @@ -0,0 +1,38 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BT60_V2=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y +CONFIG_PINCTRL=y + +# encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_PWM=y +CONFIG_LED_PWM=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=y +CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=262 +CONFIG_WS2812_STRIP=y +CONFIG_SPI=y + +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y diff --git a/app/boards/arm/ckp/bt65_v1.dts b/app/boards/arm/ckp/bt65_v1.dts new file mode 100644 index 00000000000..97d80da2fb1 --- /dev/null +++ b/app/boards/arm/ckp/bt65_v1.dts @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2022 The ZMK Contributors +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include "ckp.dtsi" + + +/ { + model = "BT65_V1"; + compatible = "polarityworks,bt65_v1"; + + chosen { + zmk,matrix_transform = &ansi_transform; + }; + + + ansi_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(3,15) + RC(4,0) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) + >; + }; + + iso_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,15) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) + >; + }; + + all_1u_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(3,15) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) + >; + }; + + hhkb_transform: keymap_transform_3 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; + map = < + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(3,15) + RC(4,0) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,11) RC(5,12) RC(5,13) RC(5,15) + >; + }; +}; diff --git a/app/boards/arm/ckp/bt65_v1.keymap b/app/boards/arm/ckp/bt65_v1.keymap new file mode 100644 index 00000000000..27411a71c21 --- /dev/null +++ b/app/boards/arm/ckp/bt65_v1.keymap @@ -0,0 +1,177 @@ +#include +#include +#include +#include +#include + +#define ANSI +//#define ISO +//#define ALL_1U +//#define HHKB + +/ { + chosen { + #ifdef ANSI + zmk,matrix_transform = &ansi_transform; + #elif defined(ISO) + zmk,matrix_transform = &iso_transform; + #elif defined(ALL_1U) + zmk,matrix_transform = &all_1u_transform; + #elif defined(HHKB) + zmk,matrix_transform = &hhkb_transform; + #else + #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt65_v1.keymap" + #endif + }; + + keymap { + compatible = "zmk,keymap"; + #ifdef ANSI + default_layer { + // ------------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | INS | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | PGUP| + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | PGDN| + // | CTL | WIN | ALT | SPACE | ALT | 1 |RCTRL| LEFT| DOWN|RIGHT| + // ------------------------------------------------------------------------------------------------ + bindings = < + + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BKSP &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp INS + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | BL_TOG |RGB_TOG| + // | TAB | Q | W | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | RESET | PSCRN| + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | ; | ' | BOOT | P_BRK| + // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | . | / | SHIFT | HOME | END | + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | CTRL | LEFT | DOWN |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bl BL_TOG &rgb_ug RGB_TOG + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &sys_reset &kp PSCRN + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &bootloader &kp PAUSE_BREAK + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &kp HOME &kp END + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ISO) + default_layer { + // ------------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | INS | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | PGUP| + // |SHIFT | \ | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | PGDN| + // | CTL | WIN | ALT | SPACE | ALT | 1 |RCTRL| LEFT| DOWN|RIGHT| + // ------------------------------------------------------------------------------------------------ + bindings = < + + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BKSP &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp INS + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET &kp PG_UP + &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | BL_TOG |RGB_TOG| + // | TAB | Q | W | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | | PSCRN| + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | ; | ' |RESET| BOOT | P_BRK| + // |SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| B | N | M | , | . | / | SHIFT | HOME | END | + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | CTRL | LEFT | DOWN |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bl BL_TOG &rgb_ug RGB_TOG + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &kp PSCRN + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &kp PAUSE_BREAK + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &trans &kp HOME &kp END + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ALL_1U) + default_layer { + // ------------------------------------------------------------------------------------------------- + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP | DEL | HOME| + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | END | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | PGUP| + // |SHIFT|NONE | Z | X | C | V | B | N | M | , | . | / |SHIFT|NONE | UP | PGDN| + // | CTL | WIN | ALT | SPACE | ALT | 1 |RCTRL| LEFT| DOWN|RIGHT| + // ------------------------------------------------------------------------------------------------- + bindings = < + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL &kp HOME + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp END + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP + &kp LSHFT &none &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &none &kp UP &kp PG_DN + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp LALT &mo 1 &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |BL_TOG|RGB_TOG|HOME| + // | TAB | Q | W | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | RESET | PSCRN| + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | ; | ' | BOOT | P_BRK| + // |SHIFT| NONE|VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | . | / |SHIFT| NONE| UP | INS | + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | CTRL| LEFT| DOWN |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bl BL_TOG &rgb_ug RGB_TOG &trans + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &sys_reset &kp PSCRN + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &bootloader &kp PAUSE_BREAK + &trans &none &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &trans &trans &kp INS + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(HHKB) + default_layer { + // ------------------------------------------------------------------------------------------------ + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | HOME| + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | END | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | PGUP| + // | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL | PGDN| + // ------------------------------------------------------------------------------------------------ + bindings = < + + &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BKSP &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp HOME + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp END + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp PG_UP + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL &kp PG_DN + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | BL_TOG |RGB_TOG| + // | TAB | Q | UP | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | RESET | PSCRN| + // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | ; | ' | BOOT | P_BRK| + // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | . | / | SHIFT | INS | + // | BT_PRV | BT_NXT | ALT | SPACE | ALT | 1 | CTRL |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bl BL_TOG &rgb_ug RGB_TOG + &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &sys_reset &kp PSCRN + &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &bootloader &kp PAUSE_BREAK + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &kp INS + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #else + #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt65_v1.keymap" + #endif + + }; +}; diff --git a/app/boards/arm/ckp/bt65_v1.yaml b/app/boards/arm/ckp/bt65_v1.yaml new file mode 100644 index 00000000000..61edacce6c2 --- /dev/null +++ b/app/boards/arm/ckp/bt65_v1.yaml @@ -0,0 +1,15 @@ +identifier: bt65_v1 +name: BT65_V1 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/ckp/bt65_v1.zmk.yml b/app/boards/arm/ckp/bt65_v1.zmk.yml new file mode 100644 index 00000000000..f82253b094c --- /dev/null +++ b/app/boards/arm/ckp/bt65_v1.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: bt65_v1 +name: BT65 +type: board +arch: arm +features: + - keys + - encoder + - underglow + - backlight +outputs: + - usb + - ble +url: https://polarityworks.com/btckp diff --git a/app/boards/arm/ckp/bt65_v1_defconfig b/app/boards/arm/ckp/bt65_v1_defconfig new file mode 100644 index 00000000000..e40ae2dbb54 --- /dev/null +++ b/app/boards/arm/ckp/bt65_v1_defconfig @@ -0,0 +1,38 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BT65_V1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y +CONFIG_PINCTRL=y + +# encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_PWM=y +CONFIG_LED_PWM=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=y +CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=262 +CONFIG_WS2812_STRIP=y +CONFIG_SPI=y + +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y diff --git a/app/boards/arm/ckp/bt75_v1.dts b/app/boards/arm/ckp/bt75_v1.dts new file mode 100644 index 00000000000..42aaf351bb7 --- /dev/null +++ b/app/boards/arm/ckp/bt75_v1.dts @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2022 The ZMK Contributors +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include "ckp.dtsi" + + +/ { + model = "BT75_V1"; + compatible = "polarityworks,bt75_v1"; + + chosen { + zmk,matrix_transform = &ansi_transform; + }; + + + ansi_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(3,15) + RC(4,0) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) + >; + }; + + iso_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) RC(3,15) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) + >; + }; + + all_1u_transform: keymap_transform_2 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,15) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(3,15) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,15) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) RC(5,14) RC(5,15) + >; + }; +}; diff --git a/app/boards/arm/ckp/bt75_v1.keymap b/app/boards/arm/ckp/bt75_v1.keymap new file mode 100644 index 00000000000..5c95387adab --- /dev/null +++ b/app/boards/arm/ckp/bt75_v1.keymap @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include + +#define ANSI +//#define ISO +//#define ALL_1U + +/ { + chosen { + #ifdef ANSI + zmk,matrix_transform = &ansi_transform; + #elif defined(ISO) + zmk,matrix_transform = &iso_transform; + #elif defined(ALL_1U) + zmk,matrix_transform = &all_1u_transform; + #else + #error "Layout not defined, please define a layout using by uncommenting the appropriate line in bt75_v1.keymap" + #endif + }; + + keymap { + compatible = "zmk,keymap"; + #ifdef ANSI + default_layer { + // ------------------------------------------------------------------------------------------------ + // | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F9 | F9 | F10 | F11 | F12 |PSCRN|HOME| END | + // |GRAVE| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | INS | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | PGUP| + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | PGDN| + // | CTL | WIN | ALT | SPACE | ALT | 1 |RCTRL| LEFT| DOWN|RIGHT| + // ------------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp PSCRN &kp HOME &kp END + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BKSP &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp INS + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F9 | F9 | F10 | F11 | F12 |PSCRN| HOME| END | + // |GRAVE| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BL_TOG |RGB_TOG| + // | TAB | Q | W | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | RESET | P_BRK| + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | ; | ' | BOOT | PG_UP| + // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | . | / | SHIFT | UP | PG_DN| + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | CTRL | LEFT | DOWN |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bl BL_TOG &rgb_ug RGB_TOG + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &sys_reset &kp PAUSE_BREAK + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &bootloader &trans + &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ISO) + default_layer { + // ------------------------------------------------------------------------------------------------ + // | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F9 | F9 | F10 | F11 | F12 |PSCRN|HOME| END | + // |GRAVE| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | DEL | + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | INS | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | PGUP| + // |SHIFT | \ | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | PGDN| + // | CTL | WIN | ALT | SPACE | ALT | 1 |RCTRL| LEFT| DOWN|RIGHT| + // ------------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp PSCRN &kp HOME &kp END + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BKSP &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp INS + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET &kp PG_UP + &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp PG_DN + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F9 | F9 | F10 | F11 | F12 |PSCRN|HOME| END | + // |GRAVE| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BL_TOG |RGB_TOG| + // | TAB | Q | W | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | | P_BRK| + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | ; | ' |RESET| BOOT | PG_UP| + // |SHIFT | \ |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | . | / | SHIFT | UP | PG_DN| + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | CTRL | LEFT | DOWN |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bl BL_TOG &rgb_ug RGB_TOG + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &kp PAUSE_BREAK + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &trans + &trans &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #elif defined(ALL_1U) + default_layer { + // ------------------------------------------------------------------------------------------------- + // | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F9 | F9 | F10 | F11 | F12 |PSCRN| P_B | INS | + // |GRAVE| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP | DEL | HOME| + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | END | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | PGUP| + // |SHIFT|NONE | Z | X | C | V | B | N | M | , | . | / |SHIFT|NONE | UP | PGDN| + // | CTL | WIN | ALT | SPACE | ALT | 1 |RCTRL| LEFT| DOWN|RIGHT| + // ------------------------------------------------------------------------------------------------- + bindings = < + &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp PSCRN &kp PAUSE_BREAK &kp INS + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL &kp HOME + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp END + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET &kp PG_UP + &kp LSHFT &none &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &none &kp UP &kp PG_DN + &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp LALT &mo 1 &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + // -------------------------------------------------------------------------------------------------- + // | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F9 | F9 | F10 | F11 | F12 |PSCRN| P_B | INS | + // |GRAVE| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BL_TOG|RGB_TOG|HOME| + // | TAB | Q | W | E | HUI | HUD | Y | U | I | O | P | SLCK| ] | RESET | END | + // | CAPS | A | S | D | BRI | BRD | H | J | K | L | ; | ' | BOOT | PGUP | + // |SHIFT| NONE|VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | . | / |SHIFT| NONE| UP | PGDN | + // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | CTRL| LEFT| DOWN |BT_CLR| + // -------------------------------------------------------------------------------------------------- + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bl BL_TOG &rgb_ug RGB_TOG &trans + &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &trans &trans &trans &kp SLCK &trans &sys_reset &trans + &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &trans &trans &bootloader &trans + &trans &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &trans &trans &trans &trans &trans + &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + #else + #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt75.keymap" + #endif + + }; +}; diff --git a/app/boards/arm/ckp/bt75_v1.yaml b/app/boards/arm/ckp/bt75_v1.yaml new file mode 100644 index 00000000000..e4faa09f52c --- /dev/null +++ b/app/boards/arm/ckp/bt75_v1.yaml @@ -0,0 +1,15 @@ +identifier: bt75_v1 +name: BT75_V1 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/ckp/bt75_v1.zmk.yml b/app/boards/arm/ckp/bt75_v1.zmk.yml new file mode 100644 index 00000000000..76e300476fa --- /dev/null +++ b/app/boards/arm/ckp/bt75_v1.zmk.yml @@ -0,0 +1,14 @@ +file_format: "1" +id: bt75_v1 +name: BT75_V1 +type: board +arch: arm +features: + - keys + - encoder + - underglow + - backlight +outputs: + - usb + - ble +url: https://polarityworks.com/btckp diff --git a/app/boards/arm/ckp/bt75_v1_defconfig b/app/boards/arm/ckp/bt75_v1_defconfig new file mode 100644 index 00000000000..510d6994dc1 --- /dev/null +++ b/app/boards/arm/ckp/bt75_v1_defconfig @@ -0,0 +1,38 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BT75_V1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y +CONFIG_PINCTRL=y + +# encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_PWM=y +CONFIG_LED_PWM=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=y +CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=262 +CONFIG_WS2812_STRIP=y +CONFIG_SPI=y + +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y diff --git a/app/boards/arm/ckp/ckp-pinctrl.dtsi b/app/boards/arm/ckp/ckp-pinctrl.dtsi new file mode 100644 index 00000000000..87a8edc55ef --- /dev/null +++ b/app/boards/arm/ckp/ckp-pinctrl.dtsi @@ -0,0 +1,31 @@ + +/* + * Copyright (c) 2022 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/ckp/ckp.dtsi b/app/boards/arm/ckp/ckp.dtsi new file mode 100644 index 00000000000..6c52d620367 --- /dev/null +++ b/app/boards/arm/ckp/ckp.dtsi @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2022 The ZMK Contributors +* +* SPDX-License-Identifier: MIT +*/ + +/dts-v1/; +#include + +#include +#include + +#include "ckp-pinctrl.dtsi" + +/ { + model = "CKP"; + compatible = "polarityworks,ckp"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,underglow = &led_strip; + zmk,backlight = &backlight; + zmk,battery = &vbatt; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder_1>; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&gpio1 11 GPIO_ACTIVE_HIGH> + , <&gpio1 10 GPIO_ACTIVE_HIGH> + , <&gpio1 13 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio1 6 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + }; + + encoder_1: encoder_1 { + compatible = "alps,ec11"; + label = "ENCODER_ONE"; + a-gpios = <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + encoder_2: encoder_2 { + compatible = "alps,ec11"; + label = "ENCODER_TWO"; + a-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + encoder_3: encoder_3 { + compatible = "alps,ec11"; + label = "encoder_3"; + a-gpios = <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "okay"; + }; + + backlight: pwmleds { + compatible = "pwm-leds"; + label = "Backlight LEDs"; + pwm_led_0 { + pwms = <&pwm0 0 10000 PWM_POLARITY_NORMAL>; + }; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "VBATT"; + io-channels = <&adc 2>; + output-ohms = <100000>; + full-ohms = <(100000 + 100000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <12>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; From 9bd171ede44c6178068d1b3970474783fddc799f Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Mon, 24 Apr 2023 12:16:09 -0500 Subject: [PATCH 0658/1130] fix(docs): Add key to interconnect tabs Added a key property to interconnect tabs list items to fix a React warning. --- docs/src/components/interconnect-tabs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/components/interconnect-tabs.tsx b/docs/src/components/interconnect-tabs.tsx index c7912793810..3ef69ebf2a7 100644 --- a/docs/src/components/interconnect-tabs.tsx +++ b/docs/src/components/interconnect-tabs.tsx @@ -15,7 +15,7 @@ function mapInterconnect(interconnect: Interconnect) { let imageUrl = require(`@site/docs/assets/interconnects/${interconnect.id}/pinout.png`); return ( - + From a6787b08c762c8bbb5966464e944a09b50595774 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 8 Apr 2023 20:21:40 +0000 Subject: [PATCH 0659/1130] refactor(underglow): Tad more logging. --- app/src/rgb_underglow.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 048b58b4cb8..7b6491749e2 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -190,7 +190,10 @@ static void zmk_rgb_underglow_tick(struct k_work *work) { break; } - led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); + int err = led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); + if (err < 0) { + LOG_ERR("Failed to update the RGB strip (%d)", err); + } } K_WORK_DEFINE(underglow_work, zmk_rgb_underglow_tick); From ab65ffc11406cd693172d48d790ec5a43a9fc040 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 4 Nov 2022 15:50:41 -0700 Subject: [PATCH 0660/1130] refactor(boards): Fix Zen v2 DTS spacing inconsistencies --- app/boards/arm/corneish_zen/CMakeLists.txt | 4 +- app/boards/arm/corneish_zen/corneish_zen.dtsi | 5 +- .../arm/corneish_zen/corneish_zen.keymap | 71 ++++++++++--------- .../arm/corneish_zen/corneish_zen_v2_left.dts | 2 +- .../corneish_zen/corneish_zen_v2_right.dts | 13 ++-- 5 files changed, 47 insertions(+), 48 deletions(-) diff --git a/app/boards/arm/corneish_zen/CMakeLists.txt b/app/boards/arm/corneish_zen/CMakeLists.txt index 0982057792a..aedf38a7bef 100644 --- a/app/boards/arm/corneish_zen/CMakeLists.txt +++ b/app/boards/arm/corneish_zen/CMakeLists.txt @@ -4,7 +4,7 @@ if(CONFIG_ZMK_DISPLAY) target_sources_ifdef(CONFIG_CUSTOM_WIDGET_LAYER_STATUS app PRIVATE widgets/layer_status.c) target_sources_ifdef(CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS app PRIVATE widgets/peripheral_status.c) - add_subdirectory_ifdef(CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM widgets/icons) + add_subdirectory_ifdef(CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM widgets/icons) endif() zephyr_library() @@ -57,4 +57,4 @@ zephyr_library_include_directories(${ZEPHYR_BASE}/lib/gui/lvgl/) zephyr_library_sources_ifdef(CONFIG_ZMK_DISPLAY custom_status_screen.c) zephyr_library_sources(${ZEPHYR_BASE}/misc/empty_file.c) zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) \ No newline at end of file +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index 10be54cc697..fe2bfa92240 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -50,7 +50,7 @@ // | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | // | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | - map = < + map = < RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) @@ -60,7 +60,6 @@ }; - &adc { status = "okay"; }; @@ -123,4 +122,4 @@ reg = <0x000f4000 0x0000c000>; }; }; -}; \ No newline at end of file +}; diff --git a/app/boards/arm/corneish_zen/corneish_zen.keymap b/app/boards/arm/corneish_zen/corneish_zen.keymap index 2b9eeb14bcd..24c925e8233 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.keymap +++ b/app/boards/arm/corneish_zen/corneish_zen.keymap @@ -10,58 +10,59 @@ #include / { - chosen { - zmk,matrix_transform = &default_transform; - //zmk,matrix_transform = &five_column_transform; - }; + chosen { + zmk,matrix_transform = &default_transform; + // zmk,matrix_transform = &five_column_transform; + }; }; / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { - label = "QWERTY"; -// ----------------------------------------------------------------------------------------- + default_layer { + label = "QWERTY"; +// -------------------------------------------------------------------------------- // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHFT | Z | X | C | V | B | | N | M | , | . | / | ESC | // | GUI | LWR | SPC | | ENT | RSE | ALT | - bindings = < - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC - &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ESC - &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT - >; - }; - lower_layer { - label = "NUMBER"; + bindings = < +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC +&kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ESC + &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT + >; + }; + + lower_layer { + label = "NUMBER"; // ----------------------------------------------------------------------------------------- // | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | // | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | // | SHFT | | | | | | | | | | | | | // | GUI | | SPC | | ENT | | ALT | - bindings = < - &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC - &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans - &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT - >; - }; + bindings = < +&kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans +&kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; - raise_layer { - label = "SYMBOL"; + raise_layer { + label = "SYMBOL"; // ----------------------------------------------------------------------------------------- // | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | // | CTRL | | | | | | | - | = | [ | ] | \ | ` | // | SHFT | | | | | | | _ | + | { | } | "|" | ~ | // | GUI | | SPC | | ENT | | ALT | - bindings = < - &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC - &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE - &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE - &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT - >; - }; + bindings = < +&kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC +&kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE +&kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; }; -}; \ No newline at end of file + }; +}; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index 9f3dd73a819..d7b66ab775d 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -72,7 +72,7 @@ }; }; -&spi0 { +&spi0 { status = "okay"; compatible = "nordic,nrf-spim"; pinctrl-0 = <&spi0_default>; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts index 3cb7556f9be..4d444cae4f8 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -33,16 +33,15 @@ , <&gpio1 9 GPIO_ACTIVE_HIGH> , <&gpio0 7 GPIO_ACTIVE_HIGH> ; - }; leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; }; + }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; @@ -56,6 +55,7 @@ &default_transform { col-offset = <6>; }; + &five_column_transform { col-offset = <6>; }; @@ -98,7 +98,6 @@ busy-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; pwr = [03 00 26 26]; - //softstart = [17 17 17 17]; cdi = <0xd2>; tcon = <0x22>; }; From 2c70048beeec6da864836f4981a6a8f954be95af Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 6 Nov 2022 14:19:27 -0800 Subject: [PATCH 0661/1130] refactor(boards): Remove duplicated Zen v2 Kconfigs and unused font size --- app/boards/arm/corneish_zen/Kconfig.defconfig | 1 - app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig | 4 ---- app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig | 4 ---- 3 files changed, 9 deletions(-) diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig index a161230c1fb..28177f531a3 100644 --- a/app/boards/arm/corneish_zen/Kconfig.defconfig +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -44,7 +44,6 @@ endif # USB config ZMK_DISPLAY select LV_USE_CONT select LV_FONT_MONTSERRAT_26 - select LV_FONT_MONTSERRAT_20 select LV_FONT_MONTSERRAT_16 select LV_USE_LABEL select LV_USE_IMG diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig index 305ce72e0e4..3b7b4d9e276 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -6,7 +6,6 @@ CONFIG_SOC_SERIES_NRF52X=y CONFIG_SOC_NRF52840_QIAA=y CONFIG_BOARD_CORNEISH_ZEN_V2_LEFT=y -CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SLEEP=y CONFIG_ZMK_DISPLAY=y @@ -20,7 +19,6 @@ CONFIG_PINCTRL=y CONFIG_GPIO=y # Enable SPI -CONFIG_SPI=y CONFIG_SPI_NRFX=y # Enable writing to flash @@ -40,8 +38,6 @@ CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 -CONFIG_SSD1306=n -CONFIG_IL0323=y CONFIG_LV_Z_BITS_PER_PIXEL=1 CONFIG_LV_COLOR_DEPTH_1=y CONFIG_LV_DPI_DEF=145 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index 0fd0fd6cb0a..b361b08d9a0 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -6,7 +6,6 @@ CONFIG_SOC_SERIES_NRF52X=y CONFIG_SOC_NRF52840_QIAA=y CONFIG_BOARD_CORNEISH_ZEN_V2_RIGHT=y -CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SLEEP=y CONFIG_ZMK_DISPLAY=y @@ -20,7 +19,6 @@ CONFIG_PINCTRL=y CONFIG_GPIO=y # Enable SPI -CONFIG_SPI=y CONFIG_SPI_NRFX=y # Enable writing to flash @@ -40,8 +38,6 @@ CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 -CONFIG_SSD1306=n -CONFIG_IL0323=y CONFIG_LV_Z_BITS_PER_PIXEL=1 CONFIG_LV_COLOR_DEPTH_1=y CONFIG_LV_DPI_DEF=145 From 4a9c59317f33a1c29bce2f2d34eb3e653e43eb10 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 13 Nov 2022 21:47:13 -0800 Subject: [PATCH 0662/1130] refactor(boards): Add back default matrix transform to Zen v2 chosen node --- app/boards/arm/corneish_zen/corneish_zen.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index fe2bfa92240..daf58b3121b 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -22,6 +22,7 @@ zmk,display = &epd; zmk,battery = &vbatt; zephyr,console = &cdc_acm_uart; + zmk,matrix_transform = &default_transform; }; default_transform: keymap_transform_0 { From 39d7f86f7019b861fc6e84084a8ffd88ff63b064 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 16 Dec 2022 17:48:39 -0800 Subject: [PATCH 0663/1130] refactor(boards): Make Zen dtsi non-v2 specific --- app/boards/arm/corneish_zen/corneish_zen.dtsi | 5 ++--- app/boards/arm/corneish_zen/corneish_zen_v2_left.dts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index daf58b3121b..289c5e73711 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -11,8 +11,8 @@ #include / { - model = "corneish_zen_v2"; - compatible = "corneish_zen_v2"; + model = "Corne-ish Zen"; + compatible = "corneish_zen"; chosen { zephyr,code-partition = &code_partition; @@ -20,7 +20,6 @@ zephyr,flash = &flash0; zmk,kscan = &kscan0; zmk,display = &epd; - zmk,battery = &vbatt; zephyr,console = &cdc_acm_uart; zmk,matrix_transform = &default_transform; }; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index d7b66ab775d..14d82e87558 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -20,7 +20,7 @@ diode-direction = "col2row"; row-gpios = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; From 0239f18b6180bc604b432f3b48a0d29961dc0111 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 16 Dec 2022 17:39:24 -0800 Subject: [PATCH 0664/1130] feat(boards): Add Corne-ish Zen v1 --- app/boards/arm/corneish_zen/CMakeLists.txt | 2 +- app/boards/arm/corneish_zen/Kconfig | 10 ++ app/boards/arm/corneish_zen/Kconfig.board | 14 +- app/boards/arm/corneish_zen/Kconfig.defconfig | 15 +- .../arm/corneish_zen/corneish_zen_v1.zmk.yml | 15 ++ .../arm/corneish_zen/corneish_zen_v1_left.dts | 123 ++++++++++++++++ .../corneish_zen_v1_left_defconfig | 76 ++++++++++ .../corneish_zen/corneish_zen_v1_right.dts | 131 ++++++++++++++++++ .../corneish_zen_v1_right_defconfig | 75 ++++++++++ 9 files changed, 455 insertions(+), 6 deletions(-) create mode 100644 app/boards/arm/corneish_zen/Kconfig create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v1.zmk.yml create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v1_left.dts create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v1_right.dts create mode 100644 app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig diff --git a/app/boards/arm/corneish_zen/CMakeLists.txt b/app/boards/arm/corneish_zen/CMakeLists.txt index aedf38a7bef..afaaf6bf19b 100644 --- a/app/boards/arm/corneish_zen/CMakeLists.txt +++ b/app/boards/arm/corneish_zen/CMakeLists.txt @@ -47,7 +47,7 @@ if(CONFIG_ZMK_DISPLAY) zephyr_library_sources(widgets/icons/layers.c) zephyr_library_sources(widgets/icons/layers2.c) endif() - if(CONFIG_BOARD_CORNEISH_ZEN_V2_RIGHT) + if(NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL) zephyr_library_sources(widgets/icons/zenlogo.c) endif() endif() diff --git a/app/boards/arm/corneish_zen/Kconfig b/app/boards/arm/corneish_zen/Kconfig new file mode 100644 index 00000000000..33d926092ee --- /dev/null +++ b/app/boards/arm/corneish_zen/Kconfig @@ -0,0 +1,10 @@ +# +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config BOARD_CORNEISH_ZEN_LEFT + bool + +config BOARD_CORNEISH_ZEN_RIGHT + bool diff --git a/app/boards/arm/corneish_zen/Kconfig.board b/app/boards/arm/corneish_zen/Kconfig.board index ca82e33068b..ffb3ab1f4d5 100644 --- a/app/boards/arm/corneish_zen/Kconfig.board +++ b/app/boards/arm/corneish_zen/Kconfig.board @@ -3,10 +3,22 @@ # SPDX-License-Identifier: MIT # +config BOARD_CORNEISH_ZEN_V1_LEFT + bool "corneish zen left v1" + depends on SOC_NRF52840_QIAA + select BOARD_CORNEISH_ZEN_LEFT + +config BOARD_CORNEISH_ZEN_V1_RIGHT + bool "corneish zen right v1" + depends on SOC_NRF52840_QIAA + select BOARD_CORNEISH_ZEN_RIGHT + config BOARD_CORNEISH_ZEN_V2_LEFT bool "corneish zen left v2" depends on SOC_NRF52840_QIAA + select BOARD_CORNEISH_ZEN_LEFT config BOARD_CORNEISH_ZEN_V2_RIGHT bool "corneish zen right v2" - depends on SOC_NRF52840_QIAA \ No newline at end of file + depends on SOC_NRF52840_QIAA + select BOARD_CORNEISH_ZEN_RIGHT diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig index 28177f531a3..feab3eca773 100644 --- a/app/boards/arm/corneish_zen/Kconfig.defconfig +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT # -if BOARD_CORNEISH_ZEN_V2_LEFT +if BOARD_CORNEISH_ZEN_LEFT config ZMK_KEYBOARD_NAME default "Corne-ish Zen" @@ -11,10 +11,10 @@ config ZMK_KEYBOARD_NAME config ZMK_SPLIT_ROLE_CENTRAL default y -endif # BOARD_CORNEISH_ZEN_V2_LEFT +endif # BOARD_CORNEISH_ZEN_LEFT -if BOARD_CORNEISH_ZEN_V2_LEFT || BOARD_CORNEISH_ZEN_V2_RIGHT +if BOARD_CORNEISH_ZEN_LEFT || BOARD_CORNEISH_ZEN_RIGHT config BOARD default "corneish_zen" @@ -77,4 +77,11 @@ menuconfig CUSTOM_WIDGET_LAYER_STATUS menuconfig CUSTOM_WIDGET_PERIPHERAL_STATUS bool "custom peripheral status widget" -endif # BOARD_CORNEISH_ZEN_V2_LEFT || BOARD_CORNEISH_ZEN_V2_RIGHT +endif # BOARD_CORNEISH_ZEN_LEFT || BOARD_CORNEISH_ZEN_RIGHT + +if BOARD_CORNEISH_ZEN_V1_LEFT || BOARD_CORNEISH_ZEN_V1_RIGHT + +config BQ274XX + default y + +endif # BOARD_CORNEISH_ZEN_V1_LEFT || BOARD_CORNEISH_ZEN_V1_RIGHT diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1.zmk.yml b/app/boards/arm/corneish_zen/corneish_zen_v1.zmk.yml new file mode 100644 index 00000000000..1f6be20d36c --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v1.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: corneish_zen_v1 +name: Corneish Zen v1 +url: https://lowprokb.ca/collections/keyboards/products/corne-ish-zen +type: board +arch: arm +features: + - keys + - display +outputs: + - usb + - ble +siblings: + - corneish_zen_v1_left + - corneish_zen_v1_right diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts new file mode 100644 index 00000000000..399a564ff89 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts @@ -0,0 +1,123 @@ +/* +* +* Copyright (c) 2021 Darryl deHaan +* SPDX-License-Identifier: MIT +* +*/ + +#include "corneish_zen.dtsi" + +/{ + chosen { + zephyr,display = &epd; + zmk,battery = &fuelgauge; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio0 5 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; +}; + +&pinctrl { + spi2_default: spi2_default { + group1 { + psels = , + , + ; + }; + }; + + spi2_sleep: spi2_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&i2c0 { + status = "okay"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; + clock-frequency = <100000>; + + fuelgauge: bq274xx@55 { + compatible = "ti,bq274xx"; + label = "BATTERY"; + reg = <0x55>; + design-voltage = <3700>; //Battery Design Volatge in mV + design-capacity = <180>; //Battery Design Capacity in mAh + taper-current = <2>; //Battery Taper current in mAh + terminate-voltage = <2750>; //Battery Terminate Voltage in mV + int-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>; + }; +}; + +&spi2 { + status = "okay"; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi2_default>; + pinctrl-1 = <&spi2_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; + + epd: il0323@0 { + compatible = "gooddisplay,il0323"; + reg = <0>; + label = "DISPLAY"; + width = <80>; + height = <128>; + spi-max-frequency = <4000000>; + dc-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + busy-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + pwr = [03 00 26 26]; + cdi = <0xd2>; + tcon = <0x22>; + }; +}; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig new file mode 100644 index 00000000000..a71ac680bb6 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig @@ -0,0 +1,76 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_CORNEISH_ZEN_V1_LEFT=y +CONFIG_ZMK_SLEEP=y +CONFIG_ZMK_DISPLAY=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable pinctrl +CONFIG_PINCTRL=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable I2C +CONFIG_I2C=y +CONFIG_I2C_NRFX=y + +# Enable SPI +CONFIG_SPI_NRFX=y + +# Enable writing to flash +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y + +# enable display drivers +CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_LV_Z_BITS_PER_PIXEL=1 +CONFIG_LV_COLOR_DEPTH_1=y +CONFIG_LV_DPI_DEF=145 +CONFIG_LV_Z_VDB_SIZE=100 +CONFIG_LV_USE_THEME_MONO=y +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16=y +CONFIG_LV_FONT_MONTSERRAT_26=y +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y + +# custom status screens +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=n +CONFIG_CUSTOM_WIDGET_BATTERY_STATUS=y +CONFIG_ZMK_WIDGET_BATTERY_STATUS=n +CONFIG_CUSTOM_WIDGET_OUTPUT_STATUS=y +CONFIG_ZMK_WIDGET_OUTPUT_STATUS=n +CONFIG_CUSTOM_WIDGET_LAYER_STATUS=y +CONFIG_ZMK_WIDGET_LAYER_STATUS=n + +# Turn on logging, and set ZMK logging to debug output +#CONFIG_LOG=y +#CONFIG_ZMK_USB_LOGGING=y +#CONFIG_ZMK_LOG_LEVEL_DBG=y +#CONFIG_LOG_BUFFER_SIZE=65536 +#CONFIG_LOG_STRDUP_BUF_COUNT=160 +#CONFIG_I2C_LOG_LEVEL_DBG=y +#CONFIG_SPI_LOG_LEVEL_DBG=y +#CONFIG_DISPLAY_LOG_LEVEL_DBG=y +#CONFIG_LVGL_LOG_LEVEL_DBG=y +#CONFIG_LVGL_USE_DEBUG=y +#CONFIG_SENSOR_LOG_LEVEL_DBG=y diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts new file mode 100644 index 00000000000..d5f6e588444 --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts @@ -0,0 +1,131 @@ +/* +* +* Copyright (c) 2021 Darryl deHaan +* SPDX-License-Identifier: MIT +* +*/ + +#include "corneish_zen.dtsi" + +/{ + chosen { + zephyr,display = &epd; + zmk,battery = &fuelgauge; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&gpio0 19 GPIO_ACTIVE_HIGH> + , <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + ; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; +}; + +&default_transform { + col-offset = <6>; +}; + +&five_column_transform { + col-offset = <6>; +}; + +&pinctrl { + spi2_default: spi2_default { + group1 { + psels = , + , + ; + }; + }; + + spi2_sleep: spi2_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&i2c0 { + status = "okay"; + compatible = "nordic,nrf-twim"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; + clock-frequency = <100000>; + + fuelgauge: bq274xx@55 { + compatible = "ti,bq274xx"; + label = "BATTERY"; + reg = <0x55>; + design-voltage = <3700>; //Battery Design Volatge in mV + design-capacity = <180>; //Battery Design Capacity in mAh + taper-current = <2>; //Battery Taper current in mAh 2.1 + terminate-voltage = <2750>; //Battery Terminate Voltage in mV + int-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; + }; +}; + +&spi2 { + status = "okay"; + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi2_default>; + pinctrl-1 = <&spi2_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; + + epd: il0323@0 { + compatible = "gooddisplay,il0323"; + reg = <0>; + label = "DISPLAY"; + width = <80>; + height = <128>; + spi-max-frequency = <4000000>; + dc-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; + busy-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + pwr = [03 00 26 26]; + cdi = <0xd2>; + tcon = <0x22>; + }; +}; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig new file mode 100644 index 00000000000..f099392ff6a --- /dev/null +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig @@ -0,0 +1,75 @@ +# +# Copyright (c) 2022 Darryl deHaan +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_CORNEISH_ZEN_V1_RIGHT=y +CONFIG_ZMK_SLEEP=y +CONFIG_ZMK_DISPLAY=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable pinctrl +CONFIG_PINCTRL=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable I2C +CONFIG_I2C=y +CONFIG_I2C_NRFX=y + +# Enable SPI +CONFIG_SPI_NRFX=y + +# Enable writing to flash +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y + +# enable display drivers +CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_LV_Z_BITS_PER_PIXEL=1 +CONFIG_LV_COLOR_DEPTH_1=y +CONFIG_LV_DPI_DEF=145 +CONFIG_LV_Z_VDB_SIZE=100 +CONFIG_LV_USE_THEME_MONO=y +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16=y +CONFIG_LV_FONT_MONTSERRAT_26=y +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y + +# custom status screens +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=n +CONFIG_CUSTOM_WIDGET_BATTERY_STATUS=y +CONFIG_ZMK_WIDGET_BATTERY_STATUS=n +CONFIG_CUSTOM_WIDGET_PERIPHERAL_STATUS=y +CONFIG_ZMK_WIDGET_PERIPHERAL_STATUS=n + +# Turn on logging, and set ZMK logging to debug output +#CONFIG_LOG=y +#CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 +#CONFIG_ZMK_USB_LOGGING=y +#CONFIG_ZMK_LOG_LEVEL_DBG=y +#CONFIG_LOG_BUFFER_SIZE=20000 +#CONFIG_LOG_STRDUP_BUF_COUNT=60 +#CONFIG_I2C_LOG_LEVEL_DBG=y +#CONFIG_SPI_LOG_LEVEL_DBG=y +#CONFIG_DISPLAY_LOG_LEVEL_DBG=y +#CONFIG_LVGL_LOG_LEVEL_DBG=y +#CONFIG_LVGL_USE_DEBUG=y +#CONFIG_SENSOR_LOG_LEVEL_DBG=y From 94789a092c6d8ddf5ab5ad88eb011a4ece6b5cee Mon Sep 17 00:00:00 2001 From: Alexander Krikun Date: Wed, 3 May 2023 23:16:33 +0400 Subject: [PATCH 0665/1130] fix(boards): unify board I2C configuration, use TWI driver --- app/boards/arm/bluemicro840/bluemicro840_v1.dts | 3 ++- app/boards/arm/nrfmicro/nrfmicro_11.dts | 3 ++- app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 3 ++- app/boards/arm/nrfmicro/nrfmicro_13.dts | 3 ++- app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index f19526011a6..05849001eaf 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -63,7 +63,7 @@ }; &i2c0 { - compatible = "nordic,nrf-twim"; + compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; pinctrl-1 = <&i2c0_sleep>; pinctrl-names = "default", "sleep"; @@ -71,6 +71,7 @@ &uart0 { compatible = "nordic,nrf-uarte"; + current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-1 = <&uart0_sleep>; pinctrl-names = "default", "sleep"; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 68331edc692..14b9adb9670 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -48,7 +48,7 @@ }; &i2c0 { - compatible = "nordic,nrf-twim"; + compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; pinctrl-1 = <&i2c0_sleep>; pinctrl-names = "default", "sleep"; @@ -56,6 +56,7 @@ &uart0 { compatible = "nordic,nrf-uarte"; + current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-1 = <&uart0_sleep>; pinctrl-names = "default", "sleep"; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index 9977617c768..874b67e25de 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -48,7 +48,7 @@ }; &i2c0 { - compatible = "nordic,nrf-twim"; + compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; pinctrl-1 = <&i2c0_sleep>; pinctrl-names = "default", "sleep"; @@ -56,6 +56,7 @@ &uart0 { compatible = "nordic,nrf-uarte"; + current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-1 = <&uart0_sleep>; pinctrl-names = "default", "sleep"; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index 300838ff1ab..65674132f80 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -61,7 +61,7 @@ }; &i2c0 { - compatible = "nordic,nrf-twim"; + compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; pinctrl-1 = <&i2c0_sleep>; pinctrl-names = "default", "sleep"; @@ -69,6 +69,7 @@ &uart0 { compatible = "nordic,nrf-uarte"; + current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-1 = <&uart0_sleep>; pinctrl-names = "default", "sleep"; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index 86bcb5e5753..cfe77e37c82 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -61,7 +61,7 @@ }; &i2c0 { - compatible = "nordic,nrf-twim"; + compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; pinctrl-1 = <&i2c0_sleep>; pinctrl-names = "default", "sleep"; @@ -69,6 +69,7 @@ &uart0 { compatible = "nordic,nrf-uarte"; + current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-1 = <&uart0_sleep>; pinctrl-names = "default", "sleep"; From 48be2eedd09d4918d25d8bcb8bcb58e51eff6060 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Wed, 10 May 2023 12:21:24 +0800 Subject: [PATCH 0666/1130] fix(docs): Update QMK debounce references --- docs/docs/features/debouncing.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md index 9629131d7e7..40170739fcb 100644 --- a/docs/docs/features/debouncing.md +++ b/docs/docs/features/debouncing.md @@ -99,8 +99,6 @@ one millisecond of latency but protects against short noise spikes. ZMK's default debouncing is similar to QMK's `sym_defer_pk` algorithm. -Setting `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=0` for eager debouncing would be similar -to QMK's (unimplemented as of this writing) `asym_eager_defer_pk`. +Setting `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=0` for eager debouncing would be similar to QMK's `asym_eager_defer_pk`. -See [QMK's Debounce API documentation](https://beta.docs.qmk.fm/using-qmk/software-features/feature_debounce_type) -for more information. +See [QMK's Debounce API documentation](https://docs.qmk.fm/#/feature_debounce_type) for more information. From d53cd1992936dd5604b84cd4c02cfdfad4d9944a Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 22 Apr 2023 23:47:42 -0500 Subject: [PATCH 0667/1130] refactor: Add format on save for VS Code Added settings to format various file types on save in VS Code. Added some recommended VS Code extensions: - Prettier for formatting various file types - Python for formatting Python files - C/C++ for formatting C files - Devicetree for syntax highlighting - CMake for syntax highlighting --- .vscode/extensions.json | 9 +++++++++ .vscode/settings.json | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000000..0819f71e7a0 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "ms-python.python", + "ms-vscode.cpptools", + "plorefice.devicetree", + "twxs.cmake" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index aea29cf0097..8bbff533a11 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,21 @@ "*.overlay": "dts", "*.keymap": "dts" }, - "python.formatting.provider": "black" + "python.formatting.provider": "black", + "[c]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "ms-vscode.cpptools" + }, + "[javascript][javascriptreact][typescript][typescriptreact]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[python]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "ms-python.python" + }, + "[css][json][jsonc][html][markdown][yaml]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + } } From a1e0607a22deb72ce4ac64e442f0baa721e32b0b Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 14 May 2023 12:20:40 -0500 Subject: [PATCH 0668/1130] fix: Don't specify default C formatter Microsoft's C/C++ extension performs poorly on some systems, so this gives the option to use any other extension that supports formatting with clang-format. --- .vscode/settings.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8bbff533a11..924d83b1f25 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,8 +5,7 @@ }, "python.formatting.provider": "black", "[c]": { - "editor.formatOnSave": true, - "editor.defaultFormatter": "ms-vscode.cpptools" + "editor.formatOnSave": true }, "[javascript][javascriptreact][typescript][typescriptreact]": { "editor.formatOnSave": true, From b1ca9199de02dcb45d055a71807ff3894290fda7 Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Wed, 17 May 2023 12:42:57 +0800 Subject: [PATCH 0669/1130] fix(ci): Refactor prepare variable step * Refactor workflow variables * Use quotes to avoid word splitting --- .github/workflows/build-user-config.yml | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index b1e0602d54f..5891ddc1e26 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -39,8 +39,8 @@ jobs: - name: Fetch Build Matrix run: | - echo "build_matrix=$(yaml2json ${{ inputs.build_matrix_path }} | jq -c .)" >> $GITHUB_ENV - yaml2json ${{ inputs.build_matrix_path }} | jq + echo "build_matrix=$(yaml2json '${{ inputs.build_matrix_path }}' | jq -c .)" >> $GITHUB_ENV + yaml2json "${{ inputs.build_matrix_path }}" | jq build: runs-on: ubuntu-latest @@ -54,18 +54,13 @@ jobs: steps: - name: Prepare variables shell: sh -x {0} + env: + shield: ${{ matrix.shield }} run: | - if [ -n "${{ matrix.shield }}" ] - then - echo "extra_cmake_args=-DSHIELD=\"${{ matrix.shield }}\"" >> $GITHUB_ENV - echo "artifact_name=${{ matrix.shield }}-${{ matrix.board }}-zmk" >> $GITHUB_ENV - echo "display_name=${{ matrix.shield }} - ${{ matrix.board }}" >> $GITHUB_ENV - else - echo "extra_cmake_args=" >> $GITHUB_ENV - echo "artifact_name=${{ matrix.board }}-zmk" >> $GITHUB_ENV - echo "display_name=${{ matrix.board }}" >> $GITHUB_ENV - fi echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV + echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}" >> $GITHUB_ENV + echo "display_name=${shield:+$shield - }${{ matrix.board }}" >> $GITHUB_ENV + echo "artifact_name=${shield:+$shield-}${{ matrix.board }}-zmk" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 @@ -89,7 +84,7 @@ jobs: ${{ runner.os }}- - name: West Init - run: west init -l ${{ inputs.config_path }} + run: west init -l "${{ inputs.config_path }}" - name: West Update run: west update @@ -99,7 +94,7 @@ jobs: - name: West Build (${{ env.display_name }}) shell: sh -x {0} - run: west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} + run: west build -s zmk/app -b "${{ matrix.board }}" -- -DZMK_CONFIG="${GITHUB_WORKSPACE}/${{ inputs.config_path }}" ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file run: grep -v -e "^#" -e "^$" build/zephyr/.config | sort @@ -113,7 +108,7 @@ jobs: cp build/zephyr/zmk.uf2 "build/artifacts/${{ env.artifact_name }}.uf2" elif [ -f build/zephyr/zmk.${{ inputs.fallback_binary }} ] then - cp build/zephyr/zmk.${{ inputs.fallback_binary }} "build/artifacts/${{ env.artifact_name }}.${{ inputs.fallback_binary }}" + cp "build/zephyr/zmk.${{ inputs.fallback_binary }}" "build/artifacts/${{ env.artifact_name }}.${{ inputs.fallback_binary }}" fi - name: Archive (${{ env.display_name }}) From 89d71ed2c2c1af78c166a96dc65658e4f39743ab Mon Sep 17 00:00:00 2001 From: digger vermont Date: Thu, 18 May 2023 19:47:36 -0400 Subject: [PATCH 0670/1130] feat(boards): Add KBDfans Tofu65 2.0 board * Initial commit of Tofu65 2.0 board --------- Co-authored-by: Pete Johanson --- app/boards/arm/kbdfans_tofu65/Kconfig.board | 6 + .../arm/kbdfans_tofu65/Kconfig.defconfig | 15 +++ .../arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts | 125 ++++++++++++++++++ .../kbdfans_tofu65/kbdfans_tofu65_v2.keymap | 97 ++++++++++++++ .../arm/kbdfans_tofu65/kbdfans_tofu65_v2.yaml | 15 +++ .../kbdfans_tofu65/kbdfans_tofu65_v2.zmk.yml | 10 ++ .../kbdfans_tofu65_v2_defconfig | 20 +++ 7 files changed, 288 insertions(+) create mode 100644 app/boards/arm/kbdfans_tofu65/Kconfig.board create mode 100644 app/boards/arm/kbdfans_tofu65/Kconfig.defconfig create mode 100644 app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts create mode 100644 app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.keymap create mode 100644 app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.yaml create mode 100644 app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.zmk.yml create mode 100644 app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig diff --git a/app/boards/arm/kbdfans_tofu65/Kconfig.board b/app/boards/arm/kbdfans_tofu65/Kconfig.board new file mode 100644 index 00000000000..954166b715f --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_KBDFANS_TOFU65_V2 + bool "KBDfans Tofu65 2.0" + depends on SOC_RP2040 diff --git a/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig b/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig new file mode 100644 index 00000000000..993d51423b5 --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig @@ -0,0 +1,15 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_KBDFANS_TOFU65_V2 + +config ZMK_KEYBOARD_NAME + default "kbdfans tofu65" + +config RP2_FLASH_W25Q080 + default y + +config ZMK_USB + default y + +endif # BOARD_KBDFANS_TOFU65_V2 diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts new file mode 100644 index 00000000000..261ffbf4850 --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; + +#include +#include + +/ { + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zephyr,shell-uart = &cdc_acm_uart; + zephyr,code-partition = &code_partition; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + xtal_clk: xtal-clk { + compatible = "fixed-clock"; + clock-frequency = <12000000>; + #clock-cells = <0>; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + +// ------- Switch Matrix ---------- +// +// Column 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | +// ========================================================================================== +// Row 0 || S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10 | S11 | S12 | S13 | S14 | +// Row 1 || S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10 | S11 | S12 | S13 | S14 | +// Row 2 || S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10 | S11 | S12 | | S13 | +// Row 3 || S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10 | S11 | | S12 | S13 | +// Row 4 || S0 | S1 | S2 | | | | S3 | | S4 | S5 | S6 | | S7 | S8 | S9 | +// ----------------------------------------------------------------------------------- +// + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) RC(3,14) +RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,8) RC(4,9) RC(4,10) RC(4,12) RC(4,13) RC(4,14) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 29 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 28 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 27 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio0 25 GPIO_ACTIVE_HIGH> + , <&gpio0 24 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 1 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 20 GPIO_ACTIVE_HIGH> + , <&gpio0 19 GPIO_ACTIVE_HIGH> + , <&gpio0 18 GPIO_ACTIVE_HIGH> + , <&gpio0 17 GPIO_ACTIVE_HIGH> + , <&gpio0 16 GPIO_ACTIVE_HIGH> + , <&gpio0 15 GPIO_ACTIVE_HIGH> + , <&gpio0 14 GPIO_ACTIVE_HIGH> + , <&gpio0 13 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&flash0 { + reg = <0x10000000 DT_SIZE_M(16)>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Reserved memory for the second stage bootloader */ + second_stage_bootloader: partition@0 { + label = "second_stage_bootloader"; + reg = <0x00000000 0x100>; + read-only; + }; + + /* + * Usable flash. Starts at 0x100, after the bootloader. The partition + * size is 16MB minus the 0x100 bytes taken by the bootloader. + */ + code_partition: partition@100 { + label = "code"; + reg = <0x100 (DT_SIZE_M(16) - 0x100)>; + read-only; + }; + }; +}; + + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + }; +}; + + +&gpio0 { + status = "okay"; +}; + diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.keymap b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.keymap new file mode 100644 index 00000000000..7eca7919a4a --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.keymap @@ -0,0 +1,97 @@ +// Copyright (c) 2023 The ZMK Contributors +// SPDX-License-Identifier: MIT + +#include +#include + +#define BASE 0 +#define FUNC 1 + +// +// ---------- Tofu65 2.0 key switch positions ---------- +// +// ------------------------------------------------------------------------------------------------- +// | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | +// ------------------------------------------------------------------------------------------------- +// | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 24 | 26 | 27 | 28 | 29 | +// ------------------------------------------------------------------------------------------------- +// | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | +// ------------------------------------------------------------------------------------------------- +// | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | +// ------------------------------------------------------------------------------------------------- +// | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | +// ------------------------------------------------------------------------------------------------- +// + + +/ { + combos { + compatible = "zmk,combos"; + + // BACKSPACE + LCTRL + LALT = &sys_reset + combo_bootloader { + timeout-ms = <100>; + key-positions = <13 58 60>; + bindings = <&sys_reset>; + }; + + // RETURN + LCTRL + LALT = &bootloader + combo_sys_reset { + timeout-ms = <100>; + key-positions = <42 58 60>; + bindings = <&bootloader>; + }; + }; + + + keymap { + compatible = "zmk,keymap"; + + base { + +// --------- Default QWERTY Layout --------- +// Layer 0 BASE +// ------------------------------------------------------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSPC | HME | +// ------------------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | PGU | +// ------------------------------------------------------------------------------------------------- +// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | PGD | +// ------------------------------------------------------------------------------------------------- +// | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHFT | ↑ | END | +// ------------------------------------------------------------------------------------------------- +// | LCTL | LGUI | LALT | SPACE | RALT | RGUI | RCTL | <- | ↓ | -> | +// ------------------------------------------------------------------------------------------------- + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp HOME +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp PG_UP +&kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp ENTER &kp PG_DN +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &kp END +&kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT < FUNC K_APP &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT + >; + }; + + func { +// --------- Default QWERTY Layout --------- +// Layer 1 FUNC +// --------------------------------------------------------------------------------------------------- +// | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | HME | +// --------------------------------------------------------------------------------------------------- +// | --- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | scroll lock | pause | --- | PGU | +// --------------------------------------------------------------------------------------------------- +// | CAPS | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --- | PGD | +// --------------------------------------------------------------------------------------------------- +// | LSHIFT | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | ----- | VOL UP | MUTE | +// --------------------------------------------------------------------------------------------------- +// | ---- | ---- | ---- | ---- | -- | MO 1 | -- | PREV | VOL DN | NEXT | +// --------------------------------------------------------------------------------------------------- + bindings = < +&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp SLCK &kp PAUSE_BREAK &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_VOL_UP &kp C_MUTE +&trans &trans &trans &trans &trans &trans &trans &kp C_PREV &kp C_VOL_DN &kp C_NEXT + >; + }; + }; +}; diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.yaml b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.yaml new file mode 100644 index 00000000000..e1089766da2 --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.yaml @@ -0,0 +1,15 @@ +identifier: kbdfans_tofu65_v2 +name: KBDfans Tofu65 2.0 +type: mcu +arch: arm +flash: 16384 +ram: 264 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio + - usb_device + - hwinfo + - pwm diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.zmk.yml b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.zmk.yml new file mode 100644 index 00000000000..382e7dd3603 --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.zmk.yml @@ -0,0 +1,10 @@ +file_format: "1" +id: kbdfans_tofu65_v2 +name: KBDfans Tofu65 2.0 +type: board +arch: arm +features: + - keys +outputs: + - usb +url: https://kbdfans.com/collections/tofu65-2-0/products/tofu65-2-0 diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig new file mode 100644 index 00000000000..cf546683452 --- /dev/null +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig @@ -0,0 +1,20 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_RP2XXX=y +CONFIG_SOC_RP2040=y +CONFIG_BOARD_KBDFANS_TOFU65_V2=y + +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000 + +# Enable USB CDC ACM logging for debugging +# CONFIG_ZMK_USB_LOGGING=y + +# Enable reset by default +CONFIG_RESET=y + +# Code partition needed to target the correct flash range +CONFIG_USE_DT_CODE_PARTITION=y + +# Output UF2 by default, native bootloader supports it. +CONFIG_BUILD_OUTPUT_UF2=y From d799560985b40a7f9526cfdedd88546b60cf3182 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 00:10:58 -0500 Subject: [PATCH 0671/1130] chore: Update typescript, eslint, webpack --- docs/package-lock.json | 978 +++++++++++++++++++++-------------------- docs/package.json | 10 +- 2 files changed, 503 insertions(+), 485 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 2c8a7fba1e5..2d1e7a57d2e 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -31,18 +31,18 @@ "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.5", "@types/react-router-dom": "^5.1.7", - "eslint": "^8.0.0", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.39.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", - "eslint-plugin-react": "^7.30.0", + "eslint-plugin-react": "^7.32.2", "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", "prettier": "^2.8.7", "string-replace-loader": "^3.1.0", - "typescript": "^4.6.3", - "webpack": "^5.72.1" + "typescript": "^5.0.4", + "webpack": "^5.80.0" } }, "node_modules/@algolia/autocomplete-core": { @@ -2583,16 +2583,40 @@ "node": ">=16.14" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "devOptional": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "devOptional": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "devOptional": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.5.1", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2607,9 +2631,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -2633,6 +2657,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", + "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", + "devOptional": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "0.2.36", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", @@ -2692,14 +2725,14 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "devOptional": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" @@ -3706,133 +3739,133 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", + "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", + "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", + "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", + "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", + "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", + "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", + "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", + "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", + "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", + "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", + "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", + "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", + "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", + "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", + "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.5", "@xtuc/long": "4.2.2" } }, @@ -4117,15 +4150,15 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -4144,14 +4177,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -4161,6 +4194,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -5991,9 +6037,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", + "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6060,9 +6106,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, "node_modules/es-shim-unscopables": { "version": "1.0.0", @@ -6171,13 +6217,16 @@ } }, "node_modules/eslint": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", - "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", + "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", "devOptional": true, "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.2", + "@eslint/js": "8.39.0", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -6186,17 +6235,16 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.0", + "espree": "^9.5.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -6211,7 +6259,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -6227,9 +6274,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -6675,25 +6722,26 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" + "string.prototype.matchall": "^4.0.8" }, "engines": { "node": ">=4" @@ -6741,9 +6789,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "devOptional": true, "dependencies": { "esrecurse": "^4.3.0", @@ -6751,42 +6799,21 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "devOptional": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "devOptional": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "devOptional": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/glob-parent": { @@ -6802,9 +6829,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -6829,14 +6856,14 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "devOptional": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6858,9 +6885,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "devOptional": true, "dependencies": { "estraverse": "^5.1.0" @@ -11077,28 +11104,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -11108,27 +11135,27 @@ } }, "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "dependencies": { "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -12796,18 +12823,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", @@ -13572,9 +13587,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dependencies": { "randombytes": "^2.1.0" } @@ -14024,18 +14039,18 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { @@ -14311,9 +14326,9 @@ } }, "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -14328,15 +14343,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" }, "engines": { "node": ">= 10.13.0" @@ -14620,15 +14635,15 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/ua-parser-js": { @@ -15360,21 +15375,21 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.80.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", + "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.13.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -15383,9 +15398,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.1.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -15676,11 +15691,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -15721,9 +15731,9 @@ } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -17793,16 +17803,31 @@ "tslib": "^2.4.0" } }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "devOptional": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "devOptional": true + }, "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "devOptional": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.5.1", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -17811,9 +17836,9 @@ }, "dependencies": { "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "devOptional": true, "requires": { "type-fest": "^0.20.2" @@ -17827,6 +17852,12 @@ } } }, + "@eslint/js": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", + "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", + "devOptional": true + }, "@fortawesome/fontawesome-common-types": { "version": "0.2.36", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", @@ -17870,14 +17901,14 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "devOptional": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, "@humanwhocodes/module-importer": { @@ -18668,133 +18699,133 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", + "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", + "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", + "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", + "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", + "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", + "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", + "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" } }, "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", + "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", + "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", + "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", + "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", + "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", + "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", + "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", + "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", "requires": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.5", "@xtuc/long": "4.2.2" } }, @@ -19015,15 +19046,15 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" } }, @@ -19033,17 +19064,30 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" } }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -20352,9 +20396,9 @@ } }, "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", + "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -20406,9 +20450,9 @@ } }, "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, "es-shim-unscopables": { "version": "1.0.0", @@ -20495,13 +20539,16 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", - "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", + "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", "devOptional": true, "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.2", + "@eslint/js": "8.39.0", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -20510,17 +20557,16 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.0", + "espree": "^9.5.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -20535,7 +20581,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -20551,9 +20596,9 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "devOptional": true, "requires": { "type-fest": "^0.20.2" @@ -20568,9 +20613,9 @@ } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "requires": {} }, @@ -20881,25 +20926,26 @@ } }, "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" + "string.prototype.matchall": "^4.0.8" }, "dependencies": { "doctrine": { @@ -20931,47 +20977,30 @@ } }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "devOptional": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "devOptional": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "devOptional": true - } - } - }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "devOptional": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "devOptional": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.0" } }, "esprima": { @@ -20980,9 +21009,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "devOptional": true, "requires": { "estraverse": "^5.1.0" @@ -23944,46 +23973,46 @@ } }, "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "requires": { "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "obuf": { @@ -25136,12 +25165,6 @@ "functions-have-names": "^1.2.2" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true - }, "regexpu-core": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", @@ -25709,9 +25732,9 @@ } }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "requires": { "randombytes": "^2.1.0" } @@ -26067,18 +26090,18 @@ } }, "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" } }, @@ -26272,9 +26295,9 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -26290,15 +26313,15 @@ } }, "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "requires": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" }, "dependencies": { "jest-worker": { @@ -26500,9 +26523,9 @@ } }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" }, "ua-parser-js": { "version": "0.7.32", @@ -26996,21 +27019,21 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.80.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", + "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", "requires": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.13.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -27019,18 +27042,13 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.1.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -27059,9 +27077,9 @@ } }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", diff --git a/docs/package.json b/docs/package.json index 70105b54f64..dd4b3ff7c07 100644 --- a/docs/package.json +++ b/docs/package.json @@ -50,17 +50,17 @@ "@types/react": "^17.0.3", "@types/react-helmet": "^6.1.5", "@types/react-router-dom": "^5.1.7", - "eslint": "^8.0.0", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.39.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", - "eslint-plugin-react": "^7.30.0", + "eslint-plugin-react": "^7.32.2", "json-schema-to-typescript": "^10.1.5", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", "prettier": "^2.8.7", "string-replace-loader": "^3.1.0", - "typescript": "^4.6.3", - "webpack": "^5.72.1" + "typescript": "^5.0.4", + "webpack": "^5.80.0" } } From 4674215551b8c9bb0706e825742ba82b9d46ed3b Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 00:14:00 -0500 Subject: [PATCH 0672/1130] chore: Update json-schema-to-typescript --- docs/package-lock.json | 193 ++++++++++++++++++----------------------- docs/package.json | 2 +- 2 files changed, 85 insertions(+), 110 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 2d1e7a57d2e..ba968736b47 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -35,7 +35,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", "eslint-plugin-react": "^7.32.2", - "json-schema-to-typescript": "^10.1.5", + "json-schema-to-typescript": "^12.0.0", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", @@ -202,18 +202,6 @@ "node": ">=6.0.0" } }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "dev": true, - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -1984,6 +1972,24 @@ "node": ">=6.9.0" } }, + "node_modules/@bcherny/json-schema-ref-parser": { + "version": "10.0.5-fork", + "resolved": "https://registry.npmjs.org/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz", + "integrity": "sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -3487,9 +3493,9 @@ } }, "node_modules/@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -4609,9 +4615,9 @@ } }, "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", "dev": true }, "node_modules/callsites": { @@ -7711,18 +7717,22 @@ } }, "node_modules/glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", "dev": true, "dependencies": { - "@types/glob": "*" + "@types/glob": "^7.1.3" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" }, "peerDependencies": { - "glob": "*" + "glob": "^7.1.6" } }, "node_modules/glob-to-regexp": { @@ -9126,45 +9136,32 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/json-schema-to-typescript": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", - "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-12.0.0.tgz", + "integrity": "sha512-Uk/BDIAo8vqepPBhM86UhNMHgCv7JulicNj/BgnQPHE1fGCoej0UTtcEYzXU/uk6lSvbZCf7pccW+dnNMrr5rg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", - "@types/lodash": "^4.14.168", - "@types/prettier": "^2.1.5", - "cli-color": "^2.0.0", + "@bcherny/json-schema-ref-parser": "10.0.5-fork", + "@types/json-schema": "^7.0.11", + "@types/lodash": "^4.14.182", + "@types/prettier": "^2.6.1", + "cli-color": "^2.0.2", "get-stdin": "^8.0.0", "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "is-glob": "^4.0.1", - "json-schema-ref-parser": "^9.0.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.20", - "minimist": "^1.2.5", + "glob-promise": "^4.2.2", + "is-glob": "^4.0.3", + "lodash": "^4.17.21", + "minimist": "^1.2.6", "mkdirp": "^1.0.4", "mz": "^2.7.0", - "prettier": "^2.2.0" + "prettier": "^2.6.2" }, "bin": { "json2ts": "dist/src/cli.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/json-schema-traverse": { @@ -9178,12 +9175,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "devOptional": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -16152,18 +16143,6 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -17362,6 +17341,18 @@ "to-fast-properties": "^2.0.0" } }, + "@bcherny/json-schema-ref-parser": { + "version": "10.0.5-fork", + "resolved": "https://registry.npmjs.org/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz", + "integrity": "sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==", + "dev": true, + "requires": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -18447,9 +18438,9 @@ } }, "@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -19385,9 +19376,9 @@ } }, "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", "dev": true }, "callsites": { @@ -21622,12 +21613,12 @@ } }, "glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", "dev": true, "requires": { - "@types/glob": "*" + "@types/glob": "^7.1.3" } }, "glob-to-regexp": { @@ -22632,36 +22623,26 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "dev": true, - "requires": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - } - }, "json-schema-to-typescript": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz", - "integrity": "sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-12.0.0.tgz", + "integrity": "sha512-Uk/BDIAo8vqepPBhM86UhNMHgCv7JulicNj/BgnQPHE1fGCoej0UTtcEYzXU/uk6lSvbZCf7pccW+dnNMrr5rg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", - "@types/lodash": "^4.14.168", - "@types/prettier": "^2.1.5", - "cli-color": "^2.0.0", + "@bcherny/json-schema-ref-parser": "10.0.5-fork", + "@types/json-schema": "^7.0.11", + "@types/lodash": "^4.14.182", + "@types/prettier": "^2.6.1", + "cli-color": "^2.0.2", "get-stdin": "^8.0.0", "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "is-glob": "^4.0.1", - "json-schema-ref-parser": "^9.0.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.20", - "minimist": "^1.2.5", + "glob-promise": "^4.2.2", + "is-glob": "^4.0.3", + "lodash": "^4.17.21", + "minimist": "^1.2.6", "mkdirp": "^1.0.4", "mz": "^2.7.0", - "prettier": "^2.2.0" + "prettier": "^2.6.2" } }, "json-schema-traverse": { @@ -22675,12 +22656,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "devOptional": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", diff --git a/docs/package.json b/docs/package.json index dd4b3ff7c07..918fd173504 100644 --- a/docs/package.json +++ b/docs/package.json @@ -54,7 +54,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", "eslint-plugin-react": "^7.32.2", - "json-schema-to-typescript": "^10.1.5", + "json-schema-to-typescript": "^12.0.0", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", From da2599aa75875a67ea923b93d58b6591e0747a06 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 00:26:28 -0500 Subject: [PATCH 0673/1130] chore: Update docusaurus, react types --- docs/package-lock.json | 1568 +++++++++++++++++++++------------------- docs/package.json | 14 +- 2 files changed, 819 insertions(+), 763 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index ba968736b47..ac8c947e909 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,8 +8,8 @@ "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^2.1.0", - "@docusaurus/preset-classic": "^2.1.0", + "@docusaurus/core": "^2.4.0", + "@docusaurus/preset-classic": "^2.4.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.18", @@ -24,12 +24,12 @@ "web-tree-sitter": "^0.19.4" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.1.0", - "@docusaurus/types": "^2.1.0", - "@tsconfig/docusaurus": "^1.0.5", + "@docusaurus/module-type-aliases": "^2.4.0", + "@docusaurus/types": "^2.4.0", + "@tsconfig/docusaurus": "^1.0.7", "@types/js-yaml": "^4.0.5", - "@types/react": "^17.0.3", - "@types/react-helmet": "^6.1.5", + "@types/react": "^17.0.58", + "@types/react-helmet": "^6.1.6", "@types/react-router-dom": "^5.1.7", "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", @@ -46,19 +46,19 @@ } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", + "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", + "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -66,79 +66,79 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", + "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", - "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", + "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", "dependencies": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.17.0" } }, "node_modules/@algolia/cache-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", - "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", + "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", - "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", + "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", "dependencies": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.17.0" } }, "node_modules/@algolia/client-account": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", - "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", + "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "node_modules/@algolia/client-analytics": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", - "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", + "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "node_modules/@algolia/client-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", - "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", + "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", "dependencies": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", - "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", + "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "node_modules/@algolia/client-search": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", - "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", + "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "node_modules/@algolia/events": { @@ -147,47 +147,47 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", - "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", + "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" }, "node_modules/@algolia/logger-console": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", - "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", + "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", "dependencies": { - "@algolia/logger-common": "4.14.2" + "@algolia/logger-common": "4.17.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", - "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", + "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", "dependencies": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.17.0" } }, "node_modules/@algolia/requester-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", - "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", + "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", - "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", + "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", "dependencies": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.17.0" } }, "node_modules/@algolia/transporter": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", - "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", + "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", "dependencies": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" + "@algolia/cache-common": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/requester-common": "4.17.0" } }, "node_modules/@ampproject/remapping": { @@ -1904,11 +1904,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", - "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -2000,18 +2000,18 @@ } }, "node_modules/@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", + "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" }, "node_modules/@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", + "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", "dependencies": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", + "@algolia/autocomplete-core": "1.7.4", + "@algolia/autocomplete-preset-algolia": "1.7.4", + "@docsearch/css": "3.3.3", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -2032,9 +2032,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.1.0.tgz", - "integrity": "sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", + "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", "dependencies": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", @@ -2046,13 +2046,13 @@ "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/cssnano-preset": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", @@ -2073,7 +2073,7 @@ "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", - "eta": "^1.12.3", + "eta": "^2.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", @@ -2120,9 +2120,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz", - "integrity": "sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", + "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", "dependencies": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", @@ -2134,9 +2134,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.1.0.tgz", - "integrity": "sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.4.0" @@ -2146,14 +2146,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz", - "integrity": "sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", + "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", "dependencies": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -2177,12 +2177,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz", - "integrity": "sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz", + "integrity": "sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.1.0", + "@docusaurus/types": "2.4.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2196,17 +2196,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz", - "integrity": "sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz", + "integrity": "sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", @@ -2226,17 +2226,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz", - "integrity": "sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz", + "integrity": "sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", @@ -2256,15 +2256,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz", - "integrity": "sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz", + "integrity": "sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" @@ -2278,13 +2278,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz", - "integrity": "sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz", + "integrity": "sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" @@ -2298,13 +2298,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz", - "integrity": "sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz", + "integrity": "sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "tslib": "^2.4.0" }, "engines": { @@ -2316,13 +2316,31 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz", - "integrity": "sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", + "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz", + "integrity": "sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "tslib": "^2.4.0" }, "engines": { @@ -2334,16 +2352,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz", - "integrity": "sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz", + "integrity": "sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" @@ -2357,22 +2375,23 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz", - "integrity": "sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/plugin-debug": "2.1.0", - "@docusaurus/plugin-google-analytics": "2.1.0", - "@docusaurus/plugin-google-gtag": "2.1.0", - "@docusaurus/plugin-sitemap": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-search-algolia": "2.1.0", - "@docusaurus/types": "2.1.0" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz", + "integrity": "sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/plugin-debug": "2.4.0", + "@docusaurus/plugin-google-analytics": "2.4.0", + "@docusaurus/plugin-google-gtag": "2.4.0", + "@docusaurus/plugin-google-tag-manager": "2.4.0", + "@docusaurus/plugin-sitemap": "2.4.0", + "@docusaurus/theme-classic": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-search-algolia": "2.4.0", + "@docusaurus/types": "2.4.0" }, "engines": { "node": ">=16.14" @@ -2395,26 +2414,26 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz", - "integrity": "sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz", + "integrity": "sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-translations": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", + "infima": "0.2.0-alpha.43", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.14", @@ -2434,16 +2453,17 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.1.0.tgz", - "integrity": "sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag==", - "dependencies": { - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/utils": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.0.tgz", + "integrity": "sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==", + "dependencies": { + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2451,6 +2471,7 @@ "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", "utility-types": "^3.10.0" }, "engines": { @@ -2462,22 +2483,22 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz", - "integrity": "sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz", + "integrity": "sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==", "dependencies": { "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-translations": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", - "eta": "^1.12.3", + "eta": "^2.0.0", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "tslib": "^2.4.0", @@ -2492,9 +2513,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz", - "integrity": "sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz", + "integrity": "sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==", "dependencies": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" @@ -2504,9 +2525,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.1.0.tgz", - "integrity": "sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", + "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -2523,12 +2544,13 @@ } }, "node_modules/@docusaurus/utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.1.0.tgz", - "integrity": "sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", "dependencies": { - "@docusaurus/logger": "2.1.0", + "@docusaurus/logger": "2.4.0", "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", @@ -2556,9 +2578,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.1.0.tgz", - "integrity": "sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", + "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", "dependencies": { "tslib": "^2.4.0" }, @@ -2575,12 +2597,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz", - "integrity": "sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", + "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", "dependencies": { - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -3382,9 +3404,9 @@ } }, "node_modules/@tsconfig/docusaurus": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.6.tgz", - "integrity": "sha512-1QxDaP54hpzM6bq9E+yFEo4F9WbWHhsDe4vktZXF/iDlc9FqGr9qlg+3X/nuKQXx8QxHV7ue8NXFazzajsxFBA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", + "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", "dev": true }, "node_modules/@types/acorn": { @@ -3628,9 +3650,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "17.0.51", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.51.tgz", - "integrity": "sha512-YMddzAE+nSH04BiTJ5GydTxk0/3hckqyuOclg0s6zQYj/XzfRVNzHZAFwZb5SCSavkzTYUtcq/gwjLnvt2Y4cg==", + "version": "17.0.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", + "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3638,9 +3660,9 @@ } }, "node_modules/@types/react-helmet": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.5.tgz", - "integrity": "sha512-/ICuy7OHZxR0YCAZLNg9r7I9aijWUWvxaPR6uTuyxe8tAj5RL4Sw1+R6NhXUtOsarkGYPmaHdBDvuXh2DIN/uA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.6.tgz", + "integrity": "sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A==", "dev": true, "dependencies": { "@types/react": "*" @@ -4032,30 +4054,30 @@ } }, "node_modules/algoliasearch": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", - "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", + "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.17.0", + "@algolia/cache-common": "4.17.0", + "@algolia/cache-in-memory": "4.17.0", + "@algolia/client-account": "4.17.0", + "@algolia/client-analytics": "4.17.0", + "@algolia/client-common": "4.17.0", + "@algolia/client-personalization": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/logger-console": "4.17.0", + "@algolia/requester-browser-xhr": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/requester-node-http": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", + "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -4227,9 +4249,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "funding": [ { "type": "opencollective", @@ -4241,8 +4263,8 @@ } ], "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -4516,9 +4538,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -4530,10 +4552,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -4668,9 +4690,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001425", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz", - "integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==", + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", "funding": [ { "type": "opencollective", @@ -4679,6 +4701,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -5121,9 +5147,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", + "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", "engines": { "node": ">=12" }, @@ -5530,12 +5556,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz", - "integrity": "sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "dependencies": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.12", + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -5549,24 +5575,24 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dependencies": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -5574,11 +5600,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -6954,9 +6980,9 @@ } }, "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", + "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", "engines": { "node": ">=6.0.0" }, @@ -7398,9 +7424,9 @@ "devOptional": true }, "node_modules/flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", "dependencies": { "fbemitter": "^3.0.0", "fbjs": "^3.0.1" @@ -8300,9 +8326,9 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -8312,9 +8338,9 @@ ], "dependencies": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "node_modules/http-cache-semantics": { @@ -8495,9 +8521,9 @@ } }, "node_modules/infima": { - "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", "engines": { "node": ">=12" } @@ -10957,9 +10983,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -11394,9 +11420,9 @@ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "node_modules/parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dependencies": { "entities": "^4.4.0" }, @@ -11661,11 +11687,11 @@ } }, "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -11678,11 +11704,11 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dependencies": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -11787,12 +11813,12 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -11802,11 +11828,11 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -11849,11 +11875,11 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, @@ -12015,11 +12041,11 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -12088,11 +12114,11 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { @@ -12129,9 +12155,9 @@ } }, "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", "dependencies": { "sort-css-media-queries": "2.1.0" }, @@ -12690,11 +12716,11 @@ } }, "node_modules/react-textarea-autosize": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", - "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", + "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", "dependencies": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, @@ -12785,9 +12811,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.0", @@ -14160,11 +14186,11 @@ } }, "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { @@ -14532,7 +14558,8 @@ "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "deprecated": "Use String.prototype.trim() instead" }, "node_modules/trim-trailing-lines": { "version": "1.1.4", @@ -14638,9 +14665,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", "funding": [ { "type": "opencollective", @@ -15169,6 +15196,14 @@ } } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15994,95 +16029,95 @@ }, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", + "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", "requires": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", + "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", "requires": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" } }, "@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", + "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" }, "@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", - "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", + "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", "requires": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.17.0" } }, "@algolia/cache-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", - "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", + "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" }, "@algolia/cache-in-memory": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", - "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", + "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", "requires": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.17.0" } }, "@algolia/client-account": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", - "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", + "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "@algolia/client-analytics": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", - "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", + "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "@algolia/client-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", - "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", + "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", "requires": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "@algolia/client-personalization": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", - "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", + "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "@algolia/client-search": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", - "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", + "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "@algolia/events": { @@ -16091,47 +16126,47 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "@algolia/logger-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", - "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", + "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" }, "@algolia/logger-console": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", - "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", + "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", "requires": { - "@algolia/logger-common": "4.14.2" + "@algolia/logger-common": "4.17.0" } }, "@algolia/requester-browser-xhr": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", - "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", + "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", "requires": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.17.0" } }, "@algolia/requester-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", - "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", + "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" }, "@algolia/requester-node-http": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", - "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", + "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", "requires": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.17.0" } }, "@algolia/transporter": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", - "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", + "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", "requires": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" + "@algolia/cache-common": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/requester-common": "4.17.0" } }, "@ampproject/remapping": { @@ -17288,11 +17323,11 @@ } }, "@babel/runtime": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", - "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs3": { @@ -17360,25 +17395,25 @@ "optional": true }, "@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", + "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" }, "@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", + "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", "requires": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", + "@algolia/autocomplete-core": "1.7.4", + "@algolia/autocomplete-preset-algolia": "1.7.4", + "@docsearch/css": "3.3.3", "algoliasearch": "^4.0.0" } }, "@docusaurus/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.1.0.tgz", - "integrity": "sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", + "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", "requires": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", @@ -17390,13 +17425,13 @@ "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/cssnano-preset": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", @@ -17417,7 +17452,7 @@ "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", - "eta": "^1.12.3", + "eta": "^2.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", @@ -17454,9 +17489,9 @@ } }, "@docusaurus/cssnano-preset": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz", - "integrity": "sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", + "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", "requires": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", @@ -17465,23 +17500,23 @@ } }, "@docusaurus/logger": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.1.0.tgz", - "integrity": "sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", "requires": { "chalk": "^4.1.2", "tslib": "^2.4.0" } }, "@docusaurus/mdx-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz", - "integrity": "sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", + "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", "requires": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -17498,12 +17533,12 @@ } }, "@docusaurus/module-type-aliases": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz", - "integrity": "sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz", + "integrity": "sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==", "requires": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.1.0", + "@docusaurus/types": "2.4.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -17513,17 +17548,17 @@ } }, "@docusaurus/plugin-content-blog": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz", - "integrity": "sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz", + "integrity": "sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", @@ -17536,17 +17571,17 @@ } }, "@docusaurus/plugin-content-docs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz", - "integrity": "sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz", + "integrity": "sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", @@ -17559,88 +17594,100 @@ } }, "@docusaurus/plugin-content-pages": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz", - "integrity": "sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz", + "integrity": "sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" } }, "@docusaurus/plugin-debug": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz", - "integrity": "sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz", + "integrity": "sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==", "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz", - "integrity": "sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz", + "integrity": "sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==", "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz", - "integrity": "sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", + "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "tslib": "^2.4.0" + } + }, + "@docusaurus/plugin-google-tag-manager": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz", + "integrity": "sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "tslib": "^2.4.0" } }, "@docusaurus/plugin-sitemap": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz", - "integrity": "sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz", + "integrity": "sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" } }, "@docusaurus/preset-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz", - "integrity": "sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/plugin-debug": "2.1.0", - "@docusaurus/plugin-google-analytics": "2.1.0", - "@docusaurus/plugin-google-gtag": "2.1.0", - "@docusaurus/plugin-sitemap": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-search-algolia": "2.1.0", - "@docusaurus/types": "2.1.0" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz", + "integrity": "sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/plugin-debug": "2.4.0", + "@docusaurus/plugin-google-analytics": "2.4.0", + "@docusaurus/plugin-google-gtag": "2.4.0", + "@docusaurus/plugin-google-tag-manager": "2.4.0", + "@docusaurus/plugin-sitemap": "2.4.0", + "@docusaurus/theme-classic": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-search-algolia": "2.4.0", + "@docusaurus/types": "2.4.0" } }, "@docusaurus/react-loadable": { @@ -17653,26 +17700,26 @@ } }, "@docusaurus/theme-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz", - "integrity": "sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz", + "integrity": "sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==", + "requires": { + "@docusaurus/core": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-translations": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", + "infima": "0.2.0-alpha.43", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.14", @@ -17685,16 +17732,17 @@ } }, "@docusaurus/theme-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.1.0.tgz", - "integrity": "sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag==", - "requires": { - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/utils": "2.1.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.0.tgz", + "integrity": "sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==", + "requires": { + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -17702,26 +17750,27 @@ "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", "utility-types": "^3.10.0" } }, "@docusaurus/theme-search-algolia": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz", - "integrity": "sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz", + "integrity": "sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==", "requires": { "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-translations": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", - "eta": "^1.12.3", + "eta": "^2.0.0", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "tslib": "^2.4.0", @@ -17729,18 +17778,18 @@ } }, "@docusaurus/theme-translations": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz", - "integrity": "sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz", + "integrity": "sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==", "requires": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" } }, "@docusaurus/types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.1.0.tgz", - "integrity": "sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", + "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", "requires": { "@types/history": "^4.7.11", "@types/react": "*", @@ -17753,12 +17802,13 @@ } }, "@docusaurus/utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.1.0.tgz", - "integrity": "sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", "requires": { - "@docusaurus/logger": "2.1.0", + "@docusaurus/logger": "2.4.0", "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", @@ -17775,20 +17825,20 @@ } }, "@docusaurus/utils-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.1.0.tgz", - "integrity": "sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", + "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", "requires": { "tslib": "^2.4.0" } }, "@docusaurus/utils-validation": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz", - "integrity": "sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", + "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", "requires": { - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -18327,9 +18377,9 @@ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, "@tsconfig/docusaurus": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.6.tgz", - "integrity": "sha512-1QxDaP54hpzM6bq9E+yFEo4F9WbWHhsDe4vktZXF/iDlc9FqGr9qlg+3X/nuKQXx8QxHV7ue8NXFazzajsxFBA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", + "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", "dev": true }, "@types/acorn": { @@ -18573,9 +18623,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "17.0.51", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.51.tgz", - "integrity": "sha512-YMddzAE+nSH04BiTJ5GydTxk0/3hckqyuOclg0s6zQYj/XzfRVNzHZAFwZb5SCSavkzTYUtcq/gwjLnvt2Y4cg==", + "version": "17.0.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", + "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -18583,9 +18633,9 @@ } }, "@types/react-helmet": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.5.tgz", - "integrity": "sha512-/ICuy7OHZxR0YCAZLNg9r7I9aijWUWvxaPR6uTuyxe8tAj5RL4Sw1+R6NhXUtOsarkGYPmaHdBDvuXh2DIN/uA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.6.tgz", + "integrity": "sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A==", "dev": true, "requires": { "@types/react": "*" @@ -18935,30 +18985,30 @@ "requires": {} }, "algoliasearch": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", - "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", + "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "requires": { + "@algolia/cache-browser-local-storage": "4.17.0", + "@algolia/cache-common": "4.17.0", + "@algolia/cache-in-memory": "4.17.0", + "@algolia/client-account": "4.17.0", + "@algolia/client-analytics": "4.17.0", + "@algolia/client-common": "4.17.0", + "@algolia/client-personalization": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/logger-console": "4.17.0", + "@algolia/requester-browser-xhr": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/requester-node-http": "4.17.0", + "@algolia/transporter": "4.17.0" } }, "algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", + "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", "requires": { "@algolia/events": "^4.0.1" } @@ -19090,12 +19140,12 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -19312,14 +19362,14 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "buffer-from": { @@ -19417,9 +19467,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001425", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz", - "integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==" + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==" }, "ccount": { "version": "1.1.0", @@ -19744,9 +19794,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", + "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==" }, "copy-to-clipboard": { "version": "3.3.2", @@ -20002,12 +20052,12 @@ } }, "cssnano-preset-advanced": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz", - "integrity": "sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "requires": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.12", + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -20015,24 +20065,24 @@ } }, "cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "requires": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -20040,11 +20090,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -21043,9 +21093,9 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", + "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==" }, "etag": { "version": "1.8.1", @@ -21405,9 +21455,9 @@ "devOptional": true }, "flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", "requires": { "fbemitter": "^3.0.0", "fbjs": "^3.0.1" @@ -22059,14 +22109,14 @@ } }, "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "requires": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "http-cache-semantics": { @@ -22187,9 +22237,9 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infima": { - "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==" }, "inflight": { "version": "1.0.6", @@ -23858,9 +23908,9 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "normalize-path": { "version": "3.0.0", @@ -24161,9 +24211,9 @@ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "requires": { "entities": "^4.4.0" } @@ -24350,22 +24400,22 @@ } }, "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "requires": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -24421,20 +24471,20 @@ } }, "postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" } }, "postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -24459,11 +24509,11 @@ } }, "postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" } @@ -24555,11 +24605,11 @@ } }, "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -24598,11 +24648,11 @@ } }, "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" } }, @@ -24624,9 +24674,9 @@ } }, "postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", "requires": { "sort-css-media-queries": "2.1.0" } @@ -25047,11 +25097,11 @@ } }, "react-textarea-autosize": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", - "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", + "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", "requires": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" } @@ -25117,9 +25167,9 @@ } }, "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.0", @@ -26162,11 +26212,11 @@ } }, "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" } }, @@ -26503,9 +26553,9 @@ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" }, "ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==" }, "unbox-primitive": { "version": "1.0.2", @@ -26845,6 +26895,12 @@ "use-isomorphic-layout-effect": "^1.1.1" } }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/docs/package.json b/docs/package.json index 918fd173504..3374231173a 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^2.1.0", - "@docusaurus/preset-classic": "^2.1.0", + "@docusaurus/core": "^2.4.0", + "@docusaurus/preset-classic": "^2.4.0", "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.18", @@ -43,12 +43,12 @@ ] }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.1.0", - "@docusaurus/types": "^2.1.0", - "@tsconfig/docusaurus": "^1.0.5", + "@docusaurus/module-type-aliases": "^2.4.0", + "@docusaurus/types": "^2.4.0", + "@tsconfig/docusaurus": "^1.0.7", "@types/js-yaml": "^4.0.5", - "@types/react": "^17.0.3", - "@types/react-helmet": "^6.1.5", + "@types/react": "^17.0.58", + "@types/react-helmet": "^6.1.6", "@types/react-router-dom": "^5.1.7", "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", From c6bf95a901164e57d87d76cc65962434bba7b25d Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 00:41:08 -0500 Subject: [PATCH 0674/1130] chore: Update fontawesome --- docs/package-lock.json | 64 +++++++++++++++++++++--------------------- docs/package.json | 6 ++-- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index ac8c947e909..6f2ab304347 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -10,9 +10,9 @@ "dependencies": { "@docusaurus/core": "^2.4.0", "@docusaurus/preset-classic": "^2.4.0", - "@fortawesome/fontawesome-svg-core": "^1.2.32", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.18", + "@fortawesome/fontawesome-svg-core": "^6.4.0", + "@fortawesome/free-solid-svg-icons": "^6.4.0", + "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", "js-yaml": "^4.1.0", @@ -2695,48 +2695,48 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", - "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", + "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "1.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", - "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", + "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "@fortawesome/fontawesome-common-types": "6.4.0" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", - "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", + "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "@fortawesome/fontawesome-common-types": "6.4.0" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz", - "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "react": ">=16.x" + "react": ">=16.3" } }, "node_modules/@hapi/hoek": { @@ -17900,30 +17900,30 @@ "devOptional": true }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", - "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==" + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", + "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==" }, "@fortawesome/fontawesome-svg-core": { - "version": "1.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", - "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", + "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "@fortawesome/fontawesome-common-types": "6.4.0" } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", - "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", + "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "@fortawesome/fontawesome-common-types": "6.4.0" } }, "@fortawesome/react-fontawesome": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz", - "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", "requires": { "prop-types": "^15.8.1" } diff --git a/docs/package.json b/docs/package.json index 3374231173a..44274becbba 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,9 +17,9 @@ "dependencies": { "@docusaurus/core": "^2.4.0", "@docusaurus/preset-classic": "^2.4.0", - "@fortawesome/fontawesome-svg-core": "^1.2.32", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.18", + "@fortawesome/fontawesome-svg-core": "^6.4.0", + "@fortawesome/free-solid-svg-icons": "^6.4.0", + "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^1.6.22", "classnames": "^2.2.6", "js-yaml": "^4.1.0", From dae020787e5b29290e5cbd564fb5cdc4d29a0324 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 23 Apr 2023 16:55:01 -0500 Subject: [PATCH 0675/1130] docs: Update tree-sitter Updated web-tree-sitter and the devicetree grammar. web-tree-sitter now supports a custom function to locate its .wasm file, so performing a string replace is no longer necessary to get it to work with Docusaurus' Webpack configuration. We now check when tree-sitter is locating its .wasm file and provide the Webpack-adjusted URL. --- docs/package-lock.json | 14 ++++---- docs/package.json | 2 +- .../docusaurus-tree-sitter-plugin/index.js | 30 ------------------ docs/src/keymap-upgrade.js | 15 ++++++++- docs/static/tree-sitter-devicetree.wasm | Bin 34601 -> 40229 bytes 5 files changed, 22 insertions(+), 39 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 6f2ab304347..3183a51c144 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -21,7 +21,7 @@ "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.19.4" + "web-tree-sitter": "^0.20.8" }, "devDependencies": { "@docusaurus/module-type-aliases": "^2.4.0", @@ -15391,9 +15391,9 @@ } }, "node_modules/web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" + "version": "0.20.8", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", + "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==" }, "node_modules/webidl-conversions": { "version": "3.0.1", @@ -27040,9 +27040,9 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" + "version": "0.20.8", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", + "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==" }, "webidl-conversions": { "version": "3.0.1", diff --git a/docs/package.json b/docs/package.json index 44274becbba..15d5aa38eea 100644 --- a/docs/package.json +++ b/docs/package.json @@ -28,7 +28,7 @@ "react-copy-to-clipboard": "^5.0.3", "react-dom": "^17.0.2", "react-toastify": "^7.0.4", - "web-tree-sitter": "^0.19.4" + "web-tree-sitter": "^0.20.8" }, "browserslist": { "production": [ diff --git a/docs/src/docusaurus-tree-sitter-plugin/index.js b/docs/src/docusaurus-tree-sitter-plugin/index.js index e782aea8d4e..a6952ce7c54 100644 --- a/docs/src/docusaurus-tree-sitter-plugin/index.js +++ b/docs/src/docusaurus-tree-sitter-plugin/index.js @@ -16,36 +16,6 @@ module.exports = function () { test: /web-tree-sitter/, loader: "null-loader", }); - } else { - // The way web-tree-sitter loads tree-sitter.wasm isn't something that - // Docusaurus/Webpack identify as an asset. There is currently no way to - // set location of the file other than patching web-tree-sitter. - // (see https://github.com/tree-sitter/tree-sitter/issues/559) - rules.push({ - test: /tree-sitter\.js$/, - loader: "string-replace-loader", - options: { - multiple: [ - // Replace the path to tree-sitter.wasm with a "new URL()" to clue - // Webpack in that it is an asset. - { - search: '"tree-sitter.wasm"', - replace: '(new URL("tree-sitter.wasm", import.meta.url)).href', - strict: true, - }, - // Webpack replaces "new URL()" with the full URL to the asset, but - // web-tree-sitter will still add a prefix to it unless there is a - // Module.locateFile() function. - { - search: "var Module=void 0!==Module?Module:{};", - replace: `var Module = { - locateFile: (path, prefix) => path.startsWith('http') ? path : prefix + path, - };`, - strict: true, - }, - ], - }, - }); } return { diff --git a/docs/src/keymap-upgrade.js b/docs/src/keymap-upgrade.js index 19a5d8e32c6..788ab31ab54 100644 --- a/docs/src/keymap-upgrade.js +++ b/docs/src/keymap-upgrade.js @@ -2,10 +2,23 @@ import Parser from "web-tree-sitter"; import { Codes, Behaviors } from "./data/keymap-upgrade"; +const TREE_SITTER_WASM_URL = new URL( + "/node_modules/web-tree-sitter/tree-sitter.wasm", + import.meta.url +); + let Devicetree; export async function initParser() { - await Parser.init(); + await Parser.init({ + locateFile: (path, prefix) => { + // When locating tree-sitter.wasm, use a path that Webpack can map to the correct URL. + if (path == "tree-sitter.wasm") { + return TREE_SITTER_WASM_URL.href; + } + return prefix + path; + }, + }); Devicetree = await Parser.Language.load("/tree-sitter-devicetree.wasm"); } diff --git a/docs/static/tree-sitter-devicetree.wasm b/docs/static/tree-sitter-devicetree.wasm index fbcb0f18a70a75cc57c24aa7ae0a4b00aad5a95b..cce5ac9656c93720f1840dd7d89cb23b19d6e66b 100644 GIT binary patch literal 40229 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 J66B|X{s#)Tb{_x$ literal 34601 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 VuYJt0y Date: Mon, 24 Apr 2023 20:22:42 -0500 Subject: [PATCH 0676/1130] fix(docs): Fix typescript error See https://github.com/facebook/docusaurus/issues/8226#issuecomment-1420620198 --- docs/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 589217e26a0..a9844e97c53 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -3,7 +3,7 @@ "include": ["src/"], "compilerOptions": { "types": ["node", "@docusaurus/theme-classic"], - "moduleResolution": "Node", + "moduleResolution": "Node16", "esModuleInterop": true, "resolveJsonModule": true, "strict": true, From b021d19255122883c4ccd1887ffa0bba5df076b0 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 14 May 2023 12:12:59 -0700 Subject: [PATCH 0677/1130] fix(display): Imply LVGL mono theme when display is enabled All displays currently used with ZMK are monochrome so it makes sense to enable the mono theme by default, which can be disabled by the user since we use the "imply" statement. Without this theme setting, the small font size selection for widgets at the bottom of the stock status screen does not work. --- app/src/display/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 32be2a278f4..cb086b4cc1c 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -9,6 +9,7 @@ menuconfig ZMK_DISPLAY select LV_THEMES select LV_THEME_MONO select LV_CONF_MINIMAL + imply LV_USE_THEME_MONO if ZMK_DISPLAY From 7e29166c6ce4987de58de2e8a5545dca68312dfd Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 14 May 2023 12:40:11 -0700 Subject: [PATCH 0678/1130] refactor(display): Clean up unused theme Kconfig --- app/src/display/Kconfig | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index cb086b4cc1c..5f67bf114be 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -6,8 +6,6 @@ menuconfig ZMK_DISPLAY default n select DISPLAY select LVGL - select LV_THEMES - select LV_THEME_MONO select LV_CONF_MINIMAL imply LV_USE_THEME_MONO From 864394b40a7599a1560782226168cd6e40244c5a Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 14 May 2023 12:20:24 -0700 Subject: [PATCH 0679/1130] feat(display): Add setting to invert display colors Add CONFIG_ZMK_DISPLAY_INVERT Kconfig to invert colors (black-on-white to white-on-black) on monochrome screens. Currently applies only if CONFIG_LV_USE_THEME_MONO is selected, which is the default unless user overrides it. --- app/src/display/Kconfig | 7 +++++++ app/src/display/main.c | 3 ++- docs/docs/config/displays.md | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 5f67bf114be..63ba968b445 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -15,6 +15,13 @@ config ZMK_DISPLAY_BLANK_ON_IDLE bool "Blank display on idle" default y if SSD1306 +if LV_USE_THEME_MONO + +config ZMK_DISPLAY_INVERT + bool "Invert display colors" + +endif + choice LV_TXT_ENC default LV_TXT_ENC_UTF8 diff --git a/app/src/display/main.c b/app/src/display/main.c index e34f8a533cc..e15e2de0c9a 100644 --- a/app/src/display/main.c +++ b/app/src/display/main.c @@ -91,7 +91,8 @@ int zmk_display_is_initialized() { return initialized; } static void initialize_theme() { #if IS_ENABLED(CONFIG_LV_USE_THEME_MONO) lv_disp_t *disp = lv_disp_get_default(); - lv_theme_t *theme = lv_theme_mono_init(disp, false, CONFIG_LV_FONT_DEFAULT); + lv_theme_t *theme = + lv_theme_mono_init(disp, IS_ENABLED(CONFIG_ZMK_DISPLAY_INVERT), CONFIG_LV_FONT_DEFAULT); theme->font_small = CONFIG_ZMK_LV_FONT_DEFAULT_SMALL; disp->theme = theme; diff --git a/docs/docs/config/displays.md b/docs/docs/config/displays.md index d126e38aa1e..a68bf26a9b9 100644 --- a/docs/docs/config/displays.md +++ b/docs/docs/config/displays.md @@ -17,12 +17,15 @@ Definition files: | Config | Type | Description | Default | | -------------------------------------------------- | ---- | -------------------------------------------------------------- | ------- | | `CONFIG_ZMK_DISPLAY` | bool | Enable support for displays | n | +| `CONFIG_ZMK_DISPLAY_INVERT` | bool | Invert display colors from black-on-white to white-on-black | n | | `CONFIG_ZMK_WIDGET_LAYER_STATUS` | bool | Enable a widget to show the highest, active layer | y | | `CONFIG_ZMK_WIDGET_BATTERY_STATUS` | bool | Enable a widget to show battery charge information | y | | `CONFIG_ZMK_WIDGET_BATTERY_STATUS_SHOW_PERCENTAGE` | bool | If battery widget is enabled, show percentage instead of icons | n | | `CONFIG_ZMK_WIDGET_OUTPUT_STATUS` | bool | Enable a widget to show the current output (USB/BLE) | y | | `CONFIG_ZMK_WIDGET_WPM_STATUS` | bool | Enable a widget to show words per minute | n | +Note that `CONFIG_ZMK_DISPLAY_INVERT` setting might not work as expected with custom status screens that utilize images. + If `CONFIG_ZMK_DISPLAY` is enabled, exactly zero or one of the following options must be set to `y`. The first option is used if none are set. | Config | Description | From 5aac2743b10c69be000038cd03e51f5a284fa6cc Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 May 2023 22:56:58 -0700 Subject: [PATCH 0680/1130] fix(bluetooth): Improved checking for conn status. * Check the actual connection status before considering a discovered connection as connected. --- app/src/ble.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index a7037d0cfd8..c7bdc401b66 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -118,6 +118,7 @@ void set_profile_address(uint8_t index, const bt_addr_le_t *addr) { bool zmk_ble_active_profile_is_connected() { struct bt_conn *conn; + struct bt_conn_info info; bt_addr_le_t *addr = zmk_ble_active_profile_addr(); if (!bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) { return false; @@ -125,9 +126,11 @@ bool zmk_ble_active_profile_is_connected() { return false; } + bt_conn_get_info(conn, &info); + bt_conn_unref(conn); - return true; + return info.state == BT_CONN_STATE_CONNECTED; } #define CHECKED_ADV_STOP() \ From 1adfcf92bf96cd6453e6bb3ae8cc3b2d1fa8caa4 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Mon, 29 May 2023 00:28:45 -0400 Subject: [PATCH 0681/1130] refactor(split): fix inconsistency in Kconfig names --- app/include/zmk/ble.h | 2 +- app/src/keymap.c | 2 +- app/src/split/bluetooth/Kconfig | 4 ++-- app/src/split/bluetooth/central.c | 12 ++++++------ docs/docs/config/system.md | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 4380a33a901..1c84777d757 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -15,7 +15,7 @@ #if ZMK_BLE_IS_CENTRAL #define ZMK_BLE_PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - 1) -#define ZMK_BLE_SPLIT_PERIPHERAL_COUNT 1 +#define ZMK_SPLIT_BLE_PERIPHERAL_COUNT 1 #else #define ZMK_BLE_PROFILE_COUNT CONFIG_BT_MAX_PAIRED #endif diff --git a/app/src/keymap.c b/app/src/keymap.c index 909fd20de87..da25fc096ca 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -218,7 +218,7 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position #endif case BEHAVIOR_LOCALITY_GLOBAL: #if ZMK_BLE_IS_CENTRAL - for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { + for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { zmk_split_bt_invoke_behavior(i, &binding, event, pressed); } #endif diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index 53119d8247f..005d75fd43b 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -21,11 +21,11 @@ config ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE int "Max number of key position state events to queue when received from peripherals" default 5 -config ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE +config ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE int "BLE split central write thread stack size" default 512 -config ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE +config ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE int "Max number of behavior run events to queue to send to the peripheral(s)" default 5 diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index ac073c59869..a7c0d8a9964 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -47,7 +47,7 @@ struct peripheral_slot { uint8_t changed_positions[POSITION_STATE_DATA_LEN]; }; -static struct peripheral_slot peripherals[ZMK_BLE_SPLIT_PERIPHERAL_COUNT]; +static struct peripheral_slot peripherals[ZMK_SPLIT_BLE_PERIPHERAL_COUNT]; static const struct bt_uuid_128 split_service_uuid = BT_UUID_INIT_128(ZMK_SPLIT_BT_SERVICE_UUID); @@ -65,7 +65,7 @@ void peripheral_event_work_callback(struct k_work *work) { K_WORK_DEFINE(peripheral_event_work, peripheral_event_work_callback); int peripheral_slot_index_for_conn(struct bt_conn *conn) { - for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { + for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { if (peripherals[i].conn == conn) { return i; } @@ -84,7 +84,7 @@ struct peripheral_slot *peripheral_slot_for_conn(struct bt_conn *conn) { } int release_peripheral_slot(int index) { - if (index < 0 || index >= ZMK_BLE_SPLIT_PERIPHERAL_COUNT) { + if (index < 0 || index >= ZMK_SPLIT_BLE_PERIPHERAL_COUNT) { return -EINVAL; } @@ -131,7 +131,7 @@ int release_peripheral_slot(int index) { } int reserve_peripheral_slot() { - for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { + for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { if (peripherals[i].state == PERIPHERAL_SLOT_STATE_OPEN) { // Be sure the slot is fully reinitialized. release_peripheral_slot(i); @@ -504,7 +504,7 @@ static struct bt_conn_cb conn_callbacks = { }; K_THREAD_STACK_DEFINE(split_central_split_run_q_stack, - CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE); + CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE); struct k_work_q split_central_split_run_q; @@ -515,7 +515,7 @@ struct zmk_split_run_behavior_payload_wrapper { K_MSGQ_DEFINE(zmk_split_central_split_run_msgq, sizeof(struct zmk_split_run_behavior_payload_wrapper), - CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE, 4); + CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE, 4); void split_central_split_run_callback(struct k_work *work) { struct zmk_split_run_behavior_payload_wrapper payload_wrapper; diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index a5347b96a1b..5a5ae5a55a0 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -97,8 +97,8 @@ Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](htt | `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | | `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | -| `CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | -| `CONFIG_ZMK_BLE_SPLIT_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | | `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | | `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | | `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | From b276a3bfb074a869ca101bdaba924c936eeb04ec Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Tue, 6 Dec 2022 00:13:01 -0600 Subject: [PATCH 0682/1130] refactor(kscan): batch GPIO reads by port Changed the GPIO matrix and direct GPIO key scan drivers to do a single read per port instead of one read per pin. This is much more efficient for some types of GPIO drivers, such as I2C GPIO expanders. To accomplish this with minimal overhead, we now sort input pins by port at driver init. if we iterate through the pins in the sorted order, all pins on the same port are consecutive, so we only need to read each port once the first time we see it. --- app/drivers/kscan/CMakeLists.txt | 1 + app/drivers/kscan/kscan_gpio.c | 33 ++++++++ app/drivers/kscan/kscan_gpio.h | 61 ++++++++++++++ app/drivers/kscan/kscan_gpio_direct.c | 72 +++++++++-------- app/drivers/kscan/kscan_gpio_matrix.c | 110 +++++++++++++------------- 5 files changed, 188 insertions(+), 89 deletions(-) create mode 100644 app/drivers/kscan/kscan_gpio.c create mode 100644 app/drivers/kscan/kscan_gpio.h diff --git a/app/drivers/kscan/CMakeLists.txt b/app/drivers/kscan/CMakeLists.txt index ced31e6f67e..8fc7ed58d50 100644 --- a/app/drivers/kscan/CMakeLists.txt +++ b/app/drivers/kscan/CMakeLists.txt @@ -5,6 +5,7 @@ zephyr_library_named(zmk__drivers__kscan) zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER debounce.c) +zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_MATRIX kscan_gpio_matrix.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DIRECT kscan_gpio_direct.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DEMUX kscan_gpio_demux.c) diff --git a/app/drivers/kscan/kscan_gpio.c b/app/drivers/kscan/kscan_gpio.c new file mode 100644 index 00000000000..4963f6784f2 --- /dev/null +++ b/app/drivers/kscan/kscan_gpio.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "kscan_gpio.h" + +#include + +static int compare_ports(const void *a, const void *b) { + const struct kscan_gpio *gpio_a = a; + const struct kscan_gpio *gpio_b = b; + + return gpio_a->spec.port - gpio_b->spec.port; +} + +void kscan_gpio_list_sort_by_port(struct kscan_gpio_list *list) { + qsort(list->gpios, list->len, sizeof(list->gpios[0]), compare_ports); +} + +int kscan_gpio_pin_get(const struct kscan_gpio *gpio, struct kscan_gpio_port_state *state) { + if (gpio->spec.port != state->port) { + state->port = gpio->spec.port; + + const int err = gpio_port_get(state->port, &state->value); + if (err) { + return err; + } + } + + return (state->value & BIT(gpio->spec.pin)) != 0; +} diff --git a/app/drivers/kscan/kscan_gpio.h b/app/drivers/kscan/kscan_gpio.h new file mode 100644 index 00000000000..39343136d22 --- /dev/null +++ b/app/drivers/kscan/kscan_gpio.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +struct kscan_gpio { + struct gpio_dt_spec spec; + /** The index of the GPIO in the devicetree *-gpios array. */ + size_t index; +}; + +/** GPIO_DT_SPEC_GET_BY_IDX(), but for a struct kscan_gpio. */ +#define KSCAN_GPIO_GET_BY_IDX(node_id, prop, idx) \ + ((struct kscan_gpio){.spec = GPIO_DT_SPEC_GET_BY_IDX(node_id, prop, idx), .index = idx}) + +struct kscan_gpio_list { + struct kscan_gpio *gpios; + size_t len; +}; + +/** Define a kscan_gpio_list from a compile-time GPIO array. */ +#define KSCAN_GPIO_LIST(gpio_array) \ + ((struct kscan_gpio_list){.gpios = gpio_array, .len = ARRAY_SIZE(gpio_array)}) + +struct kscan_gpio_port_state { + const struct device *port; + gpio_port_value_t value; +}; + +/** + * Sorts a GPIO list by port so it can be used with kscan_gpio_pin_get(). + */ +void kscan_gpio_list_sort_by_port(struct kscan_gpio_list *list); + +/** + * Get logical level of an input pin. + * + * This is equivalent to gpio_pin_get() except that, when iterating through the + * pins in a list which is sorted by kscan_gpio_list_sort_by_port(), it only + * performs one read per port instead of one read per pin. + * + * @param gpio The input pin to read. + * @param state An object to track state between reads. Must be zero-initialized before the first + * use. + * + * @retval 1 If pin logical value is 1 / active. + * @retval 0 If pin logical value is 0 / inactive. + * @retval -EIO I/O error when accessing an external GPIO chip. + * @retval -EWOULDBLOCK if operation would block. + */ +int kscan_gpio_pin_get(const struct kscan_gpio *gpio, struct kscan_gpio_port_state *state); diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/drivers/kscan/kscan_gpio_direct.c index 586e0d95c79..d43d716bf64 100644 --- a/app/drivers/kscan/kscan_gpio_direct.c +++ b/app/drivers/kscan/kscan_gpio_direct.c @@ -5,6 +5,7 @@ */ #include "debounce.h" +#include "kscan_gpio.h" #include #include @@ -41,7 +42,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define INST_INPUTS_LEN(n) DT_INST_PROP_LEN(n, input_gpios) #define KSCAN_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), input_gpios, idx) + KSCAN_GPIO_GET_BY_IDX(DT_DRV_INST(inst_idx), input_gpios, idx) struct kscan_direct_irq_callback { const struct device *dev; @@ -50,6 +51,7 @@ struct kscan_direct_irq_callback { struct kscan_direct_data { const struct device *dev; + struct kscan_gpio_list inputs; kscan_callback_t callback; struct k_work_delayable work; #if USE_INTERRUPTS @@ -62,17 +64,7 @@ struct kscan_direct_data { struct debounce_state *pin_state; }; -struct kscan_gpio_list { - const struct gpio_dt_spec *gpios; - size_t len; -}; - -/** Define a kscan_gpio_list from a compile-time GPIO array. */ -#define KSCAN_GPIO_LIST(gpio_array) \ - ((struct kscan_gpio_list){.gpios = gpio_array, .len = ARRAY_SIZE(gpio_array)}) - struct kscan_direct_config { - struct kscan_gpio_list inputs; struct debounce_config debounce_config; int32_t debounce_scan_period_ms; int32_t poll_period_ms; @@ -81,10 +73,10 @@ struct kscan_direct_config { #if USE_INTERRUPTS static int kscan_direct_interrupt_configure(const struct device *dev, const gpio_flags_t flags) { - const struct kscan_direct_config *config = dev->config; + const struct kscan_direct_data *data = dev->data; - for (int i = 0; i < config->inputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->inputs.gpios[i]; + for (int i = 0; i < data->inputs.len; i++) { + const struct gpio_dt_spec *gpio = &data->inputs.gpios[i].spec; int err = gpio_pin_interrupt_configure_dt(gpio, flags); if (err) { @@ -134,16 +126,16 @@ static gpio_flags_t kscan_gpio_get_extra_flags(const struct gpio_dt_spec *gpio, static int kscan_inputs_set_flags(const struct kscan_gpio_list *inputs, const struct gpio_dt_spec *active_gpio) { - gpio_flags_t extra_flags; for (int i = 0; i < inputs->len; i++) { - extra_flags = GPIO_INPUT | kscan_gpio_get_extra_flags(&inputs->gpios[i], - &inputs->gpios[i] == active_gpio); + const bool active = &inputs->gpios[i].spec == active_gpio; + const gpio_flags_t extra_flags = + GPIO_INPUT | kscan_gpio_get_extra_flags(&inputs->gpios[i].spec, active); LOG_DBG("Extra flags equal to: %d", extra_flags); - int err = gpio_pin_configure_dt(&inputs->gpios[i], extra_flags); + int err = gpio_pin_configure_dt(&inputs->gpios[i].spec, extra_flags); if (err) { - LOG_ERR("Unable to configure flags on pin %d on %s", inputs->gpios[i].pin, - inputs->gpios[i].port->name); + LOG_ERR("Unable to configure flags on pin %d on %s", inputs->gpios[i].spec.pin, + inputs->gpios[i].spec.port->name); return err; } } @@ -179,28 +171,35 @@ static int kscan_direct_read(const struct device *dev) { const struct kscan_direct_config *config = dev->config; // Read the inputs. - for (int i = 0; i < config->inputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->inputs.gpios[i]; + struct kscan_gpio_port_state state = {0}; - const bool active = gpio_pin_get_dt(gpio); + for (int i = 0; i < data->inputs.len; i++) { + const struct kscan_gpio *gpio = &data->inputs.gpios[i]; - debounce_update(&data->pin_state[i], active, config->debounce_scan_period_ms, + const int active = kscan_gpio_pin_get(gpio, &state); + if (active < 0) { + LOG_ERR("Failed to read port %s: %i", gpio->spec.port->name, active); + return active; + } + + debounce_update(&data->pin_state[gpio->index], active, config->debounce_scan_period_ms, &config->debounce_config); } // Process the new state. bool continue_scan = false; - for (int i = 0; i < config->inputs.len; i++) { - struct debounce_state *state = &data->pin_state[i]; + for (int i = 0; i < data->inputs.len; i++) { + const struct kscan_gpio *gpio = &data->inputs.gpios[i]; + struct debounce_state *state = &data->pin_state[gpio->index]; if (debounce_get_changed(state)) { const bool pressed = debounce_is_pressed(state); - LOG_DBG("Sending event at 0,%i state %s", i, pressed ? "on" : "off"); - data->callback(dev, 0, i, pressed); + LOG_DBG("Sending event at 0,%i state %s", gpio->index, pressed ? "on" : "off"); + data->callback(dev, 0, gpio->index, pressed); if (config->toggle_mode && pressed) { - kscan_inputs_set_flags(&config->inputs, &config->inputs.gpios[i]); + kscan_inputs_set_flags(&data->inputs, &gpio->spec); } } @@ -289,10 +288,11 @@ static int kscan_direct_init_input_inst(const struct device *dev, const struct g } static int kscan_direct_init_inputs(const struct device *dev) { + const struct kscan_direct_data *data = dev->data; const struct kscan_direct_config *config = dev->config; - for (int i = 0; i < config->inputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->inputs.gpios[i]; + for (int i = 0; i < data->inputs.len; i++) { + const struct gpio_dt_spec *gpio = &data->inputs.gpios[i].spec; int err = kscan_direct_init_input_inst(dev, gpio, i, config->toggle_mode); if (err) { return err; @@ -307,6 +307,9 @@ static int kscan_direct_init(const struct device *dev) { data->dev = dev; + // Sort inputs by port so we can read each port just once per scan. + kscan_gpio_list_sort_by_port(&data->inputs); + kscan_direct_init_inputs(dev); k_work_init_delayable(&data->work, kscan_direct_work_handler); @@ -326,7 +329,7 @@ static const struct kscan_driver_api kscan_direct_api = { BUILD_ASSERT(INST_DEBOUNCE_RELEASE_MS(n) <= DEBOUNCE_COUNTER_MAX, \ "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ - static const struct gpio_dt_spec kscan_direct_inputs_##n[] = { \ + static struct kscan_gpio kscan_direct_inputs_##n[] = { \ LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (, ), n)}; \ \ static struct debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ @@ -335,10 +338,11 @@ static const struct kscan_driver_api kscan_direct_api = { (static struct kscan_direct_irq_callback kscan_direct_irqs_##n[INST_INPUTS_LEN(n)];)) \ \ static struct kscan_direct_data kscan_direct_data_##n = { \ - .pin_state = kscan_direct_state_##n, COND_INTERRUPTS((.irqs = kscan_direct_irqs_##n, ))}; \ + .inputs = KSCAN_GPIO_LIST(kscan_direct_inputs_##n), \ + .pin_state = kscan_direct_state_##n, \ + COND_INTERRUPTS((.irqs = kscan_direct_irqs_##n, ))}; \ \ static struct kscan_direct_config kscan_direct_config_##n = { \ - .inputs = KSCAN_GPIO_LIST(kscan_direct_inputs_##n), \ .debounce_config = \ { \ .debounce_press_ms = INST_DEBOUNCE_PRESS_MS(n), \ diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index d2121273724..b8e72044928 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -5,6 +5,7 @@ */ #include "debounce.h" +#include "kscan_gpio.h" #include #include @@ -50,9 +51,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, pollcode, intcode) #define KSCAN_GPIO_ROW_CFG_INIT(idx, inst_idx) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), row_gpios, idx) + KSCAN_GPIO_GET_BY_IDX(DT_DRV_INST(inst_idx), row_gpios, idx) #define KSCAN_GPIO_COL_CFG_INIT(idx, inst_idx) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), col_gpios, idx) + KSCAN_GPIO_GET_BY_IDX(DT_DRV_INST(inst_idx), col_gpios, idx) enum kscan_diode_direction { KSCAN_ROW2COL, @@ -66,6 +67,7 @@ struct kscan_matrix_irq_callback { struct kscan_matrix_data { const struct device *dev; + struct kscan_gpio_list inputs; kscan_callback_t callback; struct k_work_delayable work; #if USE_INTERRUPTS @@ -76,26 +78,16 @@ struct kscan_matrix_data { int64_t scan_time; /** * Current state of the matrix as a flattened 2D array of length - * (config->rows.len * config->cols.len) + * (config->rows * config->cols) */ struct debounce_state *matrix_state; }; -struct kscan_gpio_list { - const struct gpio_dt_spec *gpios; - size_t len; -}; - -/** Define a kscan_gpio_list from a compile-time GPIO array. */ -#define KSCAN_GPIO_LIST(gpio_array) \ - ((struct kscan_gpio_list){.gpios = gpio_array, .len = ARRAY_SIZE(gpio_array)}) - struct kscan_matrix_config { - struct kscan_gpio_list rows; - struct kscan_gpio_list cols; - struct kscan_gpio_list inputs; struct kscan_gpio_list outputs; struct debounce_config debounce_config; + size_t rows; + size_t cols; int32_t debounce_scan_period_ms; int32_t poll_period_ms; enum kscan_diode_direction diode_direction; @@ -105,10 +97,10 @@ struct kscan_matrix_config { * Get the index into a matrix state array from a row and column. */ static int state_index_rc(const struct kscan_matrix_config *config, const int row, const int col) { - __ASSERT(row < config->rows.len, "Invalid row %i", row); - __ASSERT(col < config->cols.len, "Invalid column %i", col); + __ASSERT(row < config->rows, "Invalid row %i", row); + __ASSERT(col < config->cols, "Invalid column %i", col); - return (col * config->rows.len) + row; + return (col * config->rows) + row; } /** @@ -125,7 +117,7 @@ static int kscan_matrix_set_all_outputs(const struct device *dev, const int valu const struct kscan_matrix_config *config = dev->config; for (int i = 0; i < config->outputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->outputs.gpios[i]; + const struct gpio_dt_spec *gpio = &config->outputs.gpios[i].spec; int err = gpio_pin_set_dt(gpio, value); if (err) { @@ -139,10 +131,10 @@ static int kscan_matrix_set_all_outputs(const struct device *dev, const int valu #if USE_INTERRUPTS static int kscan_matrix_interrupt_configure(const struct device *dev, const gpio_flags_t flags) { - const struct kscan_matrix_config *config = dev->config; + const struct kscan_matrix_data *data = dev->data; - for (int i = 0; i < config->inputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->inputs.gpios[i]; + for (int i = 0; i < data->inputs.len; i++) { + const struct gpio_dt_spec *gpio = &data->inputs.gpios[i].spec; int err = gpio_pin_interrupt_configure_dt(gpio, flags); if (err) { @@ -226,32 +218,37 @@ static int kscan_matrix_read(const struct device *dev) { const struct kscan_matrix_config *config = dev->config; // Scan the matrix. - for (int o = 0; o < config->outputs.len; o++) { - const struct gpio_dt_spec *out_gpio = &config->outputs.gpios[o]; + for (int i = 0; i < config->outputs.len; i++) { + const struct kscan_gpio *out_gpio = &config->outputs.gpios[i]; - int err = gpio_pin_set_dt(out_gpio, 1); + int err = gpio_pin_set_dt(&out_gpio->spec, 1); if (err) { - LOG_ERR("Failed to set output %i active: %i", o, err); + LOG_ERR("Failed to set output %i active: %i", out_gpio->index, err); return err; } #if CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS > 0 k_busy_wait(CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS); #endif + struct kscan_gpio_port_state state = {0}; - for (int i = 0; i < config->inputs.len; i++) { - const struct gpio_dt_spec *in_gpio = &config->inputs.gpios[i]; + for (int j = 0; j < data->inputs.len; j++) { + const struct kscan_gpio *in_gpio = &data->inputs.gpios[j]; - const int index = state_index_io(config, i, o); - const bool active = gpio_pin_get_dt(in_gpio); + const int index = state_index_io(config, in_gpio->index, out_gpio->index); + const int active = kscan_gpio_pin_get(in_gpio, &state); + if (active < 0) { + LOG_ERR("Failed to read port %s: %i", in_gpio->spec.port->name, active); + return active; + } debounce_update(&data->matrix_state[index], active, config->debounce_scan_period_ms, &config->debounce_config); } - err = gpio_pin_set_dt(out_gpio, 0); + err = gpio_pin_set_dt(&out_gpio->spec, 0); if (err) { - LOG_ERR("Failed to set output %i inactive: %i", o, err); + LOG_ERR("Failed to set output %i inactive: %i", out_gpio->index, err); return err; } @@ -263,8 +260,8 @@ static int kscan_matrix_read(const struct device *dev) { // Process the new state. bool continue_scan = false; - for (int r = 0; r < config->rows.len; r++) { - for (int c = 0; c < config->cols.len; c++) { + for (int r = 0; r < config->rows; r++) { + for (int c = 0; c < config->cols; c++) { const int index = state_index_rc(config, r, c); struct debounce_state *state = &data->matrix_state[index]; @@ -329,28 +326,28 @@ static int kscan_matrix_disable(const struct device *dev) { #endif } -static int kscan_matrix_init_input_inst(const struct device *dev, const struct gpio_dt_spec *gpio, - const int index) { - if (!device_is_ready(gpio->port)) { - LOG_ERR("GPIO is not ready: %s", gpio->port->name); +static int kscan_matrix_init_input_inst(const struct device *dev, const struct kscan_gpio *gpio) { + if (!device_is_ready(gpio->spec.port)) { + LOG_ERR("GPIO is not ready: %s", gpio->spec.port->name); return -ENODEV; } - int err = gpio_pin_configure_dt(gpio, GPIO_INPUT); + int err = gpio_pin_configure_dt(&gpio->spec, GPIO_INPUT); if (err) { - LOG_ERR("Unable to configure pin %u on %s for input", gpio->pin, gpio->port->name); + LOG_ERR("Unable to configure pin %u on %s for input", gpio->spec.pin, + gpio->spec.port->name); return err; } - LOG_DBG("Configured pin %u on %s for input", gpio->pin, gpio->port->name); + LOG_DBG("Configured pin %u on %s for input", gpio->spec.pin, gpio->spec.port->name); #if USE_INTERRUPTS struct kscan_matrix_data *data = dev->data; - struct kscan_matrix_irq_callback *irq = &data->irqs[index]; + struct kscan_matrix_irq_callback *irq = &data->irqs[gpio->index]; irq->dev = dev; - gpio_init_callback(&irq->callback, kscan_matrix_irq_callback_handler, BIT(gpio->pin)); - err = gpio_add_callback(gpio->port, &irq->callback); + gpio_init_callback(&irq->callback, kscan_matrix_irq_callback_handler, BIT(gpio->spec.pin)); + err = gpio_add_callback(gpio->spec.port, &irq->callback); if (err) { LOG_ERR("Error adding the callback to the input device: %i", err); return err; @@ -361,11 +358,11 @@ static int kscan_matrix_init_input_inst(const struct device *dev, const struct g } static int kscan_matrix_init_inputs(const struct device *dev) { - const struct kscan_matrix_config *config = dev->config; + const struct kscan_matrix_data *data = dev->data; - for (int i = 0; i < config->inputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->inputs.gpios[i]; - int err = kscan_matrix_init_input_inst(dev, gpio, i); + for (int i = 0; i < data->inputs.len; i++) { + const struct kscan_gpio *gpio = &data->inputs.gpios[i]; + int err = kscan_matrix_init_input_inst(dev, gpio); if (err) { return err; } @@ -396,7 +393,7 @@ static int kscan_matrix_init_outputs(const struct device *dev) { const struct kscan_matrix_config *config = dev->config; for (int i = 0; i < config->outputs.len; i++) { - const struct gpio_dt_spec *gpio = &config->outputs.gpios[i]; + const struct gpio_dt_spec *gpio = &config->outputs.gpios[i].spec; int err = kscan_matrix_init_output_inst(dev, gpio); if (err) { return err; @@ -411,6 +408,9 @@ static int kscan_matrix_init(const struct device *dev) { data->dev = dev; + // Sort inputs by port so we can read each port just once per scan. + kscan_gpio_list_sort_by_port(&data->inputs); + kscan_matrix_init_inputs(dev); kscan_matrix_init_outputs(dev); kscan_matrix_set_all_outputs(dev, 0); @@ -432,10 +432,10 @@ static const struct kscan_driver_api kscan_matrix_api = { BUILD_ASSERT(INST_DEBOUNCE_RELEASE_MS(n) <= DEBOUNCE_COUNTER_MAX, \ "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ - static const struct gpio_dt_spec kscan_matrix_rows_##n[] = { \ + static struct kscan_gpio kscan_matrix_rows_##n[] = { \ LISTIFY(INST_ROWS_LEN(n), KSCAN_GPIO_ROW_CFG_INIT, (, ), n)}; \ \ - static const struct gpio_dt_spec kscan_matrix_cols_##n[] = { \ + static struct kscan_gpio kscan_matrix_cols_##n[] = { \ LISTIFY(INST_COLS_LEN(n), KSCAN_GPIO_COL_CFG_INIT, (, ), n)}; \ \ static struct debounce_state kscan_matrix_state_##n[INST_MATRIX_LEN(n)]; \ @@ -444,14 +444,14 @@ static const struct kscan_driver_api kscan_matrix_api = { (static struct kscan_matrix_irq_callback kscan_matrix_irqs_##n[INST_INPUTS_LEN(n)];)) \ \ static struct kscan_matrix_data kscan_matrix_data_##n = { \ + .inputs = \ + KSCAN_GPIO_LIST(COND_DIODE_DIR(n, (kscan_matrix_cols_##n), (kscan_matrix_rows_##n))), \ .matrix_state = kscan_matrix_state_##n, \ COND_INTERRUPTS((.irqs = kscan_matrix_irqs_##n, ))}; \ \ static struct kscan_matrix_config kscan_matrix_config_##n = { \ - .rows = KSCAN_GPIO_LIST(kscan_matrix_rows_##n), \ - .cols = KSCAN_GPIO_LIST(kscan_matrix_cols_##n), \ - .inputs = \ - KSCAN_GPIO_LIST(COND_DIODE_DIR(n, (kscan_matrix_cols_##n), (kscan_matrix_rows_##n))), \ + .rows = ARRAY_SIZE(kscan_matrix_rows_##n), \ + .cols = ARRAY_SIZE(kscan_matrix_cols_##n), \ .outputs = \ KSCAN_GPIO_LIST(COND_DIODE_DIR(n, (kscan_matrix_rows_##n), (kscan_matrix_cols_##n))), \ .debounce_config = \ From a2af74f5ab4d2d7142791ae55cab11d59b29bc4d Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 29 May 2023 21:25:12 -0700 Subject: [PATCH 0683/1130] feat(docs): Add note on modifier functions to macros --- docs/docs/behaviors/macros.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 1648892e9f7..1628e0cb554 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -33,7 +33,7 @@ A macro definition looks like: :::note The text before the colon (`:`) in the declaration of the macro node is the "node label", and is the text -used to reference the macro in your keymap +used to reference the macro in your keymap. ::: The macro can then be bound in your keymap by referencing it by the label `&zed_em_kay`, e.g.: @@ -44,6 +44,11 @@ The macro can then be bound in your keymap by referencing it by the label `&zed_ }; ``` +:::note +For use cases involving sending a single keycode with modifiers, for instance ctrl+tab, the [key press behavior](key-press.md) +with [modifier functions](../codes/modifiers.mdx#modifier-functions) can be used instead of a macro. +::: + ### Bindings Like [hold-taps](/docs/behaviors/hold-tap), macros are created by composing other behaviors, and any of those behaviors can From 0508718d6ce8b40adbe932b0bd9bb30ee5e0bbf5 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 29 May 2023 21:52:16 -0700 Subject: [PATCH 0684/1130] feat(docs): Add behavior types section for hold-tap --- docs/docs/behaviors/hold-tap.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index f0096606938..2a8489a15ab 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -133,6 +133,23 @@ See the following example, which uses a hold-tap behavior definition, configured By default, `hold-trigger-key-positions` are evaluated upon the first _key press_ after the hold-tap. For homerow mods, this is not always ideal, because it prevents combining multiple modifiers unless they are included in `hold-trigger-key-positions`. To overwrite this behavior, one can set `hold-trigger-on-release`. If set to true, the evaluation of `hold-trigger-key-positions` gets delayed until _key release_. This allows combining multiple modifiers when the next key is _held_, while still deciding the hold-tap in favor of a tap when the next key is _tapped_. +#### Using different behavior types with hold-taps + +You can create instances of hold-taps invoking most [behavior types](../features/keymaps.md#behaviors) for hold or tap actions, by referencing their node labels in the `bindings` value. +The two parameters that are passed to the hold-tap in your keymap will be forwarded to the referred behaviors, first one to the hold behavior and second one to the tap. + +If you use behaviors that accept no parameters such as [mod-morphs](mod-morph.md) or [macros](macros.md), you can pass a dummy parameter value such as `0` to the hold-tap when you use it in your keymap. +For instance, a hold-tap with node label `caps` and `bindings = <&kp>, <&caps_word>;` can be used in the keymap as below to send the caps lock keycode on hold and invoke the [caps word behavior](caps-word.md) on tap: + +``` +&caps CAPS 0 +``` + +:::info +You cannot use behaviors that expect more than one parameter such as [`&bt`](bluetooth.md) and [`&rgb_ug`](underglow.md) with hold-taps, due to the limitations of the [devicetree keymap format](../config/index.md#devicetree-files). +One workaround is to create a [macro](macros.md) that invokes those behaviors and use the macro as the hold or tap action. +::: + ### Example Use-Cases Date: Mon, 29 May 2023 22:03:24 -0700 Subject: [PATCH 0685/1130] feat(docs): Add troubleshooting for Windows issue --- docs/docs/features/bluetooth.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index f1a3e2416fe..ff1823984b4 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -57,3 +57,18 @@ If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding 1. Remove the keyboard from macOS using the Bluetooth control panel. 1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the macOS device is active, by pressing the correct keys for your particular keymap. 1. Try connecting again from macOS. + +### Windows Connected But Not Working + +Occasionally pairing the keyboard to a Windows device might result in a state where the keyboard is connected but does not send any key strokes. +If this occurs: + +1. Remove the keyboard from Windows using the Bluetooth settings. +1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the Windows device is active, by pressing the correct keys for your particular keymap. +1. Turn off Bluetooth from Windows settings, then turn it back on. +1. Pair the keyboard to the Windows device. + +If this doesn't help, try following the procedure above but replace step 3 with one of the following: + +- Restart the Windows device +- Open "Device Manager," turn on "Show hidden devices" from the "View" menu, then find and delete the keyboard under the "Bluetooth" item From 30ba4b08aed896d77fb7ade96ef0334d8f30af5d Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 29 May 2023 22:06:09 -0700 Subject: [PATCH 0686/1130] feat(docs): Add pointer to Bluetooth page in troubleshooting --- docs/docs/troubleshooting.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 96f729b9631..e8a05b6bb46 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -5,6 +5,8 @@ sidebar_title: Troubleshooting The following page provides suggestions for common errors that may occur during firmware compilation or other issues with keyboard usage. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite). +Please also see [the troubleshooting section](features/bluetooth.md#troubleshooting) under the Bluetooth feature page. + ### File Transfer Error Variations of the warnings shown below occur when flashing the `.uf2` onto the microcontroller. This is because the microcontroller resets itself before the OS receives confirmation that the file transfer is complete. Errors like this are normal and can generally be ignored. Verification of a functional board can be done by attempting to pair your newly flashed keyboard to your computer via Bluetooth or plugging in a USB cable if `ZMK_USB` is enabled in your Kconfig.defconfig. From a9ad11f91e82e214d91cf9bf1586431060759f06 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 2 Jun 2023 18:42:50 -0700 Subject: [PATCH 0687/1130] refactor(docs): Move BT troubleshooting items to BT page --- docs/docs/features/bluetooth.md | 14 ++++++++++++++ docs/docs/troubleshooting.md | 16 +--------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index ff1823984b4..386ad70e7f0 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -38,6 +38,20 @@ Management of the bluetooth in ZMK is accomplished using the [`&bt` behavior](.. ## Troubleshooting +### Connectivity Issues + +Some users may experience a poor connection between the keyboard and the host. This might be due to poor quality BLE hardware, a metal enclosure on the keyboard or host, or the distance between them. Increasing the transmit power of the keyboard's BLE radio may reduce the severity of this problem. To do this, set the `CONFIG_BT_CTLR_TX_PWR_PLUS_8` configuration value in the `.conf` file of your user config directory as such: + +``` +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +``` + +For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/latest/kconfig.html#CONFIG_BT_CTLR_TX_PWR) + +### Using bluetooth output with USB power + +If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../docs/behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. + ## Known Issues There are a few known issues related to BLE and ZMK: diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index e8a05b6bb46..d47671bce36 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -5,7 +5,7 @@ sidebar_title: Troubleshooting The following page provides suggestions for common errors that may occur during firmware compilation or other issues with keyboard usage. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite). -Please also see [the troubleshooting section](features/bluetooth.md#troubleshooting) under the Bluetooth feature page. +Please also see [the troubleshooting section](features/bluetooth.md#troubleshooting) under the Bluetooth feature page for issues related to bluetooth. ### File Transfer Error @@ -102,17 +102,3 @@ Perform the following steps to reset both halves of your split keyboard: 1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half). After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. - -### Connectivity Issues - -Some users may experience a poor connection between the keyboard and the host. This might be due to poor quality BLE hardware, a metal enclosure on the keyboard or host, or the distance between them. Increasing the transmit power of the keyboard's BLE radio may reduce the severity of this problem. To do this, set the `CONFIG_BT_CTLR_TX_PWR_PLUS_8` configuration value in the `.conf` file of your user config directory as such: - -``` -CONFIG_BT_CTLR_TX_PWR_PLUS_8=y -``` - -For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/latest/kconfig.html#CONFIG_BT_CTLR_TX_PWR) - -### Other notes and warnings - -- If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../docs/behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. From 0682bc3aa6d9b9deac48b5aa6c781241075819b3 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 2 Jun 2023 18:45:15 -0700 Subject: [PATCH 0688/1130] feat(docs): Note split connectivity improvement with TX power --- docs/docs/features/bluetooth.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index 386ad70e7f0..9637c4d00c9 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -48,6 +48,10 @@ CONFIG_BT_CTLR_TX_PWR_PLUS_8=y For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/latest/kconfig.html#CONFIG_BT_CTLR_TX_PWR) +:::info +This setting can also improve the connection strength between the keyboard halves for split keyboards. +::: + ### Using bluetooth output with USB power If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../docs/behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. From ace11e327fbfb4c4c894bb66328156d4d0b7eda0 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 2 Jun 2023 20:46:13 -0700 Subject: [PATCH 0689/1130] fix(docs): Fix broken link in BT troubleshooting --- docs/docs/features/bluetooth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index 9637c4d00c9..b75b89537d4 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -54,7 +54,7 @@ This setting can also improve the connection strength between the keyboard halve ### Using bluetooth output with USB power -If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../docs/behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. +If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. ## Known Issues From 19d883cdfe679977023116dcf689ce67a6ce548d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 3 Jun 2023 02:53:20 +0000 Subject: [PATCH 0690/1130] fix(bluetooth): Passkey pairing improvements. * Capture the last 6 entered digits, and then require pressing Enter/Return to submit the entered digits. This matches the messaging shown on hosts regarding how to complete pairing. * Fix the wording on the Kconfig menu item to accurately describe the feature. --- app/Kconfig | 3 ++- app/src/ble.c | 47 +++++++++++++++++++++-------------- docs/docs/config/bluetooth.md | 7 +++--- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index d1b6682f507..1537bd61512 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -160,8 +160,9 @@ config BT_DEVICE_APPEARANCE default 961 config ZMK_BLE_PASSKEY_ENTRY - bool "Experimental: Requiring typing passkey from host to pair BLE connection" + bool "Require passkey entry on the keyboard to complete pairing" default n + select RING_BUFFER config BT_PERIPHERAL_PREF_MIN_INT default 6 diff --git a/app/src/ble.c b/app/src/ble.c index c7bdc401b66..383a727d268 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -42,8 +43,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define PASSKEY_DIGITS 6 static struct bt_conn *auth_passkey_entry_conn; -static uint8_t passkey_entries[PASSKEY_DIGITS] = {}; -static uint8_t passkey_digit = 0; +RING_BUF_DECLARE(passkey_entries, PASSKEY_DIGITS); #endif /* IS_ENABLED(CONFIG_ZMK_BLE_PASSKEY_ENTRY) */ @@ -469,7 +469,7 @@ static void auth_passkey_entry(struct bt_conn *conn) { bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); LOG_DBG("Passkey entry requested for %s", addr); - passkey_digit = 0; + ring_buf_reset(&passkey_entries); auth_passkey_entry_conn = bt_conn_ref(conn); } @@ -486,7 +486,7 @@ static void auth_cancel(struct bt_conn *conn) { auth_passkey_entry_conn = NULL; } - passkey_digit = 0; + ring_buf_reset(&passkey_entries); #endif LOG_DBG("Pairing cancelled: %s", addr); @@ -605,7 +605,7 @@ static int zmk_ble_init(const struct device *_arg) { #if IS_ENABLED(CONFIG_ZMK_BLE_PASSKEY_ENTRY) static bool zmk_ble_numeric_usage_to_value(const zmk_key_t key, const zmk_key_t one, - const zmk_key_t zero, uint32_t *value) { + const zmk_key_t zero, uint8_t *value) { if (key < one || key > zero) { return false; } @@ -634,29 +634,38 @@ static int zmk_ble_handle_key_user(struct zmk_keycode_state_changed *event) { return ZMK_EV_EVENT_HANDLED; } - uint32_t val; - if (!(zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION, - HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS, &val) || - zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYPAD_1_AND_END, - HID_USAGE_KEY_KEYPAD_0_AND_INSERT, &val))) { - LOG_DBG("Key not a number, ignoring"); - return ZMK_EV_EVENT_BUBBLE; - } - - passkey_entries[passkey_digit++] = val; - LOG_DBG("value entered: %d, digits collected so far: %d", val, passkey_digit); + if (key == HID_USAGE_KEY_KEYBOARD_RETURN || key == HID_USAGE_KEY_KEYBOARD_RETURN_ENTER) { + uint8_t digits[PASSKEY_DIGITS]; + uint32_t count = ring_buf_get(&passkey_entries, digits, PASSKEY_DIGITS); - if (passkey_digit == PASSKEY_DIGITS) { uint32_t passkey = 0; - for (int i = 0; i < PASSKEY_DIGITS; i++) { - passkey = (passkey * 10) + passkey_entries[i]; + for (int i = 0; i < count; i++) { + passkey = (passkey * 10) + digits[i]; } LOG_DBG("Final passkey: %d", passkey); bt_conn_auth_passkey_entry(auth_passkey_entry_conn, passkey); bt_conn_unref(auth_passkey_entry_conn); auth_passkey_entry_conn = NULL; + return ZMK_EV_EVENT_HANDLED; + } + + uint8_t val; + if (!(zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION, + HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS, &val) || + zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYPAD_1_AND_END, + HID_USAGE_KEY_KEYPAD_0_AND_INSERT, &val))) { + LOG_DBG("Key not a number, ignoring"); + return ZMK_EV_EVENT_BUBBLE; + } + + if (ring_buf_space_get(&passkey_entries) <= 0) { + uint8_t discard_val; + ring_buf_get(&passkey_entries, &discard_val, 1); } + ring_buf_put(&passkey_entries, &val, 1); + LOG_DBG("value entered: %d, digits collected so far: %d", val, + ring_buf_size_get(&passkey_entries)); return ZMK_EV_EVENT_HANDLED; } diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md index 420dd5c3627..d2ddefddbd1 100644 --- a/docs/docs/config/bluetooth.md +++ b/docs/docs/config/bluetooth.md @@ -9,6 +9,7 @@ See [Configuration Overview](index.md) for instructions on how to change these s ## Kconfig -| Option | Type | Description | Default | -| ------------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------- | ------- | -| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | +| Option | Type | Description | Default | +| ------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts) | n | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | From f08802eaa735b87fa089b81512a941a1bcc8ca4b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 5 Jun 2023 05:04:13 +0000 Subject: [PATCH 0691/1130] fix(boards): Proper i2c pinctrl for BlueMicro840 * Use the proper pin assignmets after the move to pinctrl for the Zephyr 3.2 migration. --- .../arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi index 15c48509202..868d3c27ad7 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi +++ b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi @@ -17,22 +17,22 @@ uart0_sleep: uart0_sleep { group1 { psels = , - ; + ; low-power-enable; }; }; i2c0_default: i2c0_default { group1 { - psels = , - ; + psels = , + ; }; }; i2c0_sleep: i2c0_sleep { group1 { - psels = , - ; + psels = , + ; low-power-enable; }; }; From 5d9ae8fffa869f36e3e0911bed92d41ed8640826 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Fri, 17 Jun 2022 17:44:31 -0400 Subject: [PATCH 0692/1130] feat(split): allow central to connect to multiple peripherals --- app/include/zmk/ble.h | 6 +- app/src/ble.c | 54 ++++++++---- app/src/split/bluetooth/Kconfig | 4 + app/src/split/bluetooth/central.c | 138 ++++++++++++++++++------------ 4 files changed, 130 insertions(+), 72 deletions(-) diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 1c84777d757..435fde49654 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -14,8 +14,8 @@ IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL)) #if ZMK_BLE_IS_CENTRAL -#define ZMK_BLE_PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - 1) -#define ZMK_SPLIT_BLE_PERIPHERAL_COUNT 1 +#define ZMK_BLE_PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS) +#define ZMK_SPLIT_BLE_PERIPHERAL_COUNT CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS #else #define ZMK_BLE_PROFILE_COUNT CONFIG_BT_MAX_PAIRED #endif @@ -34,5 +34,5 @@ char *zmk_ble_active_profile_name(); int zmk_ble_unpair_all(); #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) -void zmk_ble_set_peripheral_addr(bt_addr_le_t *addr); +int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr); #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ diff --git a/app/src/ble.c b/app/src/ble.c index 383a727d268..ff82f3cf40a 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -47,12 +47,6 @@ RING_BUF_DECLARE(passkey_entries, PASSKEY_DIGITS); #endif /* IS_ENABLED(CONFIG_ZMK_BLE_PASSKEY_ENTRY) */ -#if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) -#define PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - 1) -#else -#define PROFILE_COUNT CONFIG_BT_MAX_PAIRED -#endif - enum advertising_type { ZMK_ADV_NONE, ZMK_ADV_DIR, @@ -84,7 +78,7 @@ static const struct bt_data zmk_ble_ad[] = { #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) -static bt_addr_le_t peripheral_addr; +static bt_addr_le_t peripheral_addrs[ZMK_SPLIT_BLE_PERIPHERAL_COUNT]; #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ @@ -283,9 +277,34 @@ char *zmk_ble_active_profile_name() { return profiles[active_profile].name; } #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) -void zmk_ble_set_peripheral_addr(bt_addr_le_t *addr) { - memcpy(&peripheral_addr, addr, sizeof(bt_addr_le_t)); - settings_save_one("ble/peripheral_address", addr, sizeof(bt_addr_le_t)); +int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr) { + for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { + // If the address is recognized and already stored in settings, return + // index and no additional action is necessary. + if (!bt_addr_le_cmp(&peripheral_addrs[i], addr)) { + return i; + } + + // If the peripheral address slot is open, store new peripheral in the + // slot and return index. This compares against BT_ADDR_LE_ANY as that + // is the zero value. + if (!bt_addr_le_cmp(&peripheral_addrs[i], BT_ADDR_LE_ANY)) { + char addr_str[BT_ADDR_LE_STR_LEN]; + bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); + LOG_DBG("Storing peripheral %s in slot %d", addr_str, i); + bt_addr_le_copy(&peripheral_addrs[i], addr); + + char setting_name[32]; + sprintf(setting_name, "ble/peripheral_addresses/%d", i); + settings_save_one(setting_name, addr, sizeof(bt_addr_le_t)); + + return i; + } + } + + // The peripheral does not match a known peripheral and there is no + // available slot. + return -ENOMEM; } #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ @@ -340,15 +359,20 @@ static int ble_profiles_handle_set(const char *name, size_t len, settings_read_c } } #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) - else if (settings_name_steq(name, "peripheral_address", &next) && !next) { + else if (settings_name_steq(name, "peripheral_addresses", &next) && next) { if (len != sizeof(bt_addr_le_t)) { return -EINVAL; } - int err = read_cb(cb_arg, &peripheral_addr, sizeof(bt_addr_le_t)); - if (err <= 0) { - LOG_ERR("Failed to handle peripheral address from settings (err %d)", err); - return err; + int i = atoi(next); + if (i < 0 || i >= ZMK_SPLIT_BLE_PERIPHERAL_COUNT) { + LOG_ERR("Failed to store peripheral address in memory"); + } else { + int err = read_cb(cb_arg, &peripheral_addrs[i], sizeof(bt_addr_le_t)); + if (err <= 0) { + LOG_ERR("Failed to handle peripheral address from settings (err %d)", err); + return err; + } } } #endif diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index 005d75fd43b..e2c8d5c3395 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -17,6 +17,10 @@ config ZMK_SPLIT_ROLE_CENTRAL if ZMK_SPLIT_ROLE_CENTRAL +config ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS + int "Number of peripherals that will connect to the central." + default 1 + config ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE int "Max number of key position state events to queue when received from peripherals" default 5 diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index a7c0d8a9964..53e61be621a 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -26,7 +26,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -static int start_scan(void); +static int start_scanning(void); #define POSITION_STATE_DATA_LEN 16 @@ -49,6 +49,8 @@ struct peripheral_slot { static struct peripheral_slot peripherals[ZMK_SPLIT_BLE_PERIPHERAL_COUNT]; +static bool is_scanning = false; + static const struct bt_uuid_128 split_service_uuid = BT_UUID_INIT_128(ZMK_SPLIT_BT_SERVICE_UUID); K_MSGQ_DEFINE(peripheral_event_msgq, sizeof(struct zmk_position_state_changed), @@ -130,8 +132,9 @@ int release_peripheral_slot(int index) { return 0; } -int reserve_peripheral_slot() { - for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { +int reserve_peripheral_slot(const bt_addr_le_t *addr) { + int i = zmk_ble_put_peripheral_addr(addr); + if (i >= 0) { if (peripherals[i].state == PERIPHERAL_SLOT_STATE_OPEN) { // Be sure the slot is fully reinitialized. release_peripheral_slot(i); @@ -344,9 +347,54 @@ static void split_central_process_connection(struct bt_conn *conn) { LOG_DBG("New connection params: Interval: %d, Latency: %d, PHY: %d", info.le.interval, info.le.latency, info.le.phy->rx_phy); + + // Restart scanning if necessary. + start_scanning(); +} + +static int stop_scanning() { + LOG_DBG("Stopping peripheral scanning"); + is_scanning = false; + + int err = bt_le_scan_stop(); + if (err < 0) { + LOG_ERR("Stop LE scan failed (err %d)", err); + return err; + } + + return 0; } -static bool split_central_eir_found(struct bt_data *data, void *user_data) { +static bool split_central_eir_found(const bt_addr_le_t *addr) { + LOG_DBG("Found the split service"); + + // Stop scanning so we can connect to the peripheral device. + int err = stop_scanning(); + if (err < 0) { + return false; + } + + int slot_idx = reserve_peripheral_slot(addr); + if (slot_idx < 0) { + LOG_ERR("Failed to reserve peripheral slot (err %d)", slot_idx); + return false; + } + + struct peripheral_slot *slot = &peripherals[slot_idx]; + + LOG_DBG("Initiating new connnection"); + struct bt_le_conn_param *param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); + err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &slot->conn); + if (err < 0) { + LOG_ERR("Create conn failed (err %d) (create conn? 0x%04x)", err, BT_HCI_OP_LE_CREATE_CONN); + release_peripheral_slot(slot_idx); + start_scanning(); + } + + return false; +} + +static bool split_central_eir_parse(struct bt_data *data, void *user_data) { bt_addr_le_t *addr = user_data; int i; @@ -361,9 +409,7 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) { } for (i = 0; i < data->data_len; i += 16) { - struct bt_le_conn_param *param; struct bt_uuid_128 uuid; - int err; if (!bt_uuid_create(&uuid.uuid, &data->data[i], 16)) { LOG_ERR("Unable to load UUID"); @@ -381,46 +427,7 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) { continue; } - LOG_DBG("Found the split service"); - - zmk_ble_set_peripheral_addr(addr); - - err = bt_le_scan_stop(); - if (err) { - LOG_ERR("Stop LE scan failed (err %d)", err); - continue; - } - - uint8_t slot_idx = reserve_peripheral_slot(); - if (slot_idx < 0) { - LOG_ERR("Faild to reserve peripheral slot (err %d)", slot_idx); - continue; - } - - struct peripheral_slot *slot = &peripherals[slot_idx]; - - slot->conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr); - if (slot->conn) { - LOG_DBG("Found existing connection"); - split_central_process_connection(slot->conn); - err = bt_conn_le_phy_update(slot->conn, BT_CONN_LE_PHY_PARAM_2M); - if (err) { - LOG_ERR("Update phy conn failed (err %d)", err); - } - } else { - param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); - - LOG_DBG("Initiating new connnection"); - - err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &slot->conn); - if (err) { - LOG_ERR("Create conn failed (err %d) (create conn? 0x%04x)", err, - BT_HCI_OP_LE_CREATE_CONN); - start_scan(); - } - } - - return false; + return split_central_eir_found(addr); } } @@ -436,15 +443,34 @@ static void split_central_device_found(const bt_addr_le_t *addr, int8_t rssi, ui /* We're only interested in connectable events */ if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { - bt_data_parse(ad, split_central_eir_found, (void *)addr); + bt_data_parse(ad, split_central_eir_parse, (void *)addr); } } -static int start_scan(void) { - int err; +static int start_scanning(void) { + // No action is necessary if central is already scanning. + if (is_scanning) { + LOG_DBG("Scanning already running"); + return 0; + } - err = bt_le_scan_start(BT_LE_SCAN_PASSIVE, split_central_device_found); - if (err) { + // If all the devices are connected, there is no need to scan. + bool has_unconnected = false; + for (int i = 0; i < CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS; i++) { + if (peripherals[i].conn == NULL) { + has_unconnected = true; + break; + } + } + if (!has_unconnected) { + LOG_DBG("All devices are connected, scanning is unnecessary"); + return 0; + } + + // Start scanning otherwise. + is_scanning = true; + int err = bt_le_scan_start(BT_LE_SCAN_PASSIVE, split_central_device_found); + if (err < 0) { LOG_ERR("Scanning failed to start (err %d)", err); return err; } @@ -471,7 +497,7 @@ static void split_central_connected(struct bt_conn *conn, uint8_t conn_err) { release_peripheral_slot_for_conn(conn); - start_scan(); + start_scanning(); return; } @@ -495,7 +521,7 @@ static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { return; } - start_scan(); + start_scanning(); } static struct bt_conn_cb conn_callbacks = { @@ -527,6 +553,10 @@ void split_central_split_run_callback(struct k_work *work) { LOG_ERR("Source not connected"); continue; } + if (!peripherals[payload_wrapper.source].run_behavior_handle) { + LOG_ERR("Run behavior handle not found"); + continue; + } int err = bt_gatt_write_without_response( peripherals[payload_wrapper.source].conn, @@ -590,7 +620,7 @@ int zmk_split_bt_central_init(const struct device *_arg) { CONFIG_ZMK_BLE_THREAD_PRIORITY, NULL); bt_conn_cb_register(&conn_callbacks); - return start_scan(); + return start_scanning(); } SYS_INIT(zmk_split_bt_central_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); From a5c57fa224ba410100dde4e64222505bfb2b89ea Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Tue, 6 Jun 2023 13:22:39 +0800 Subject: [PATCH 0693/1130] feat(docs): Add an example for combining just modifiers (#1826) Co-authored-by: Cem Aksoylar --- docs/docs/codes/modifiers.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/codes/modifiers.mdx b/docs/docs/codes/modifiers.mdx index 483e34af026..db88ee926d2 100644 --- a/docs/docs/codes/modifiers.mdx +++ b/docs/docs/codes/modifiers.mdx @@ -38,6 +38,8 @@ These functions take the form: `XX(code)` - `&kp LS(A)` = `LEFT_SHIFT`+`A` (a capitalized **A**). - They can be combined: - `&kp LC(RA(B))` = `LEFT_CONTROL`+`RIGHT_ALT`+`B` +- They can be applied to a modifier keycode to create combined modifier keys: + - `&kp LS(LALT)` = `LEFT_SHIFT` + `LEFT_ALT` - Some basic codes already include a modifier function in their definition: - `DOLLAR` = `LS(NUMBER_4)` - There are left- and right-handed versions of each modifier (also see table above): From 98524a95671fe9d819a65d1515f9bc37895efc3d Mon Sep 17 00:00:00 2001 From: kadoyau <11990327+kadoyau@users.noreply.github.com> Date: Sun, 11 Jun 2023 04:32:50 +0900 Subject: [PATCH 0694/1130] fix(docs): Fix INT6 keycode description --- docs/src/data/hid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 00d48f3fe67..457671728f8 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -3477,7 +3477,7 @@ export default [ }, { names: ["INTERNATIONAL_6", "INT6", "INT_KPJPCOMMA"], - description: ", [カソマ] (International 6)", + description: ", [カンマ] (International 6)", context: "Keyboard", clarify: false, usages: [ From 9d39a87f67668b4c083e09b04adf006d6fd1385d Mon Sep 17 00:00:00 2001 From: pixls Date: Sat, 10 Jun 2023 20:49:30 -0400 Subject: [PATCH 0695/1130] fix(docs): Change user-setup.md order to agree with order in setup script Fixes #1281 Co-authored-by: Cem Aksoylar --- docs/docs/user-setup.md | 43 +++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index a2e491b8957..8faa72df85f 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -88,34 +88,39 @@ powershell -Command "iex ((New-Object System.Net.WebClient).DownloadString('http -### MCU Board Selection +### Keyboard Selection -When prompted, enter the number for the corresponding MCU board you would like to target: +When prompted, enter the number for the corresponding keyboard you would like to target: ``` -MCU Board Selection: -1) nice!nano -2) QMK Proton-C -3) Quit -Pick an MCU board: +Keyboard Selection: + 1) 2% Milk 19) Ferris 0.2 37) Nibble + 2) A. Dux 20) Fourier Rev. 1 38) nice!60 + 3) BAT43 21) Helix 39) Osprette + 4) BDN9 Rev2 22) Hummingbird 40) Pancake + 5) BFO-9000 23) Iris 41) Planck Rev6 + 6) Boardsource 3x4 Macropad 24) etc... +Pick an keyboard: ``` -### Keyboard Shield Selection - -:::note -If you are building firmware for a new keyboard shield that is not included in the built-in -list of shields, you can choose any shield from the list that is similar to yours to generate the repository, -and edit / add necessary files according to the [guide for adding new keyboard shield](development/new-shield.md). +:::note For a keyboard not in the included list: +If you are building firmware for a new keyboard that is not included in the built-in +list of keyboards, you can choose any keyboard from the list that is similar to yours (e.g. in terms of unibody/split and [onboard controller](hardware.mdx#onboard)/[composite](hardware.mdx#composite)) to generate the repository, +and edit / add necessary files. You can follow the [new shield guide](development/new-shield.md) if you are adding support for a composite keyboard. ::: -When prompted, enter the number for the corresponding keyboard shield you would like to target: +### MCU Board Selection + +If the keyboard selected uses an onboard controller you will skip this step. +When prompted, enter the number for the corresponding MCU board you would like to target: ``` -Keyboard Shield Selection: -1) Kyria -2) Lily58 -3) Quit -Pick an keyboard: +MCU Board Selection: +1) BlueMicro840 v1 5) nRF52840 M.2 Module 9) QMK Proton-C +2) Mikoto 5.20 6) nRFMicro 1.1 (flipped) 10) Seeeduino XIAO +3) nice!nano v1 7) nRFMicro 1.1/1.2 11) Seeeduino XIAO BLE +4) nice!nano v2 8) nRFMicro 1.3/1.4 12) Quit +Pick an MCU board: ``` ### Keymap Customization From 0be0d0763081de0c163dd26c29752d1085381dbb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Jun 2023 04:35:54 +0000 Subject: [PATCH 0696/1130] chore(deps): bump minimatch and serve-handler in /docs Bumps [minimatch](https://github.com/isaacs/minimatch) and [serve-handler](https://github.com/zeit/serve-handler). These dependencies needed to be updated together. Updates `minimatch` from 3.0.4 to 3.1.2 - [Release notes](https://github.com/isaacs/minimatch/releases) - [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2) Updates `serve-handler` from 6.1.3 to 6.1.5 - [Release notes](https://github.com/zeit/serve-handler/releases) - [Commits](https://github.com/zeit/serve-handler/compare/6.1.3...6.1.5) --- updated-dependencies: - dependency-name: minimatch dependency-type: indirect - dependency-name: serve-handler dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 3183a51c144..f0cd1fc88ae 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13612,31 +13612,20 @@ } }, "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", + "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "fast-url-parser": "1.1.3", "mime-types": "2.1.18", - "minimatch": "3.0.4", + "minimatch": "3.1.2", "path-is-inside": "1.0.2", "path-to-regexp": "2.2.1", "range-parser": "1.2.0" } }, - "node_modules/serve-handler/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/serve-handler/node_modules/path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", @@ -25765,28 +25754,20 @@ } }, "serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", + "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", "requires": { "bytes": "3.0.0", "content-disposition": "0.5.2", "fast-url-parser": "1.1.3", "mime-types": "2.1.18", - "minimatch": "3.0.4", + "minimatch": "3.1.2", "path-is-inside": "1.0.2", "path-to-regexp": "2.2.1", "range-parser": "1.2.0" }, "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, "path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", From 9d714c0b69fee2098a010d29e534051aeca26386 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Jun 2023 06:47:34 +0000 Subject: [PATCH 0697/1130] chore(deps-dev): bump webpack from 5.80.0 to 5.86.0 in /docs Bumps [webpack](https://github.com/webpack/webpack) from 5.80.0 to 5.86.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.80.0...v5.86.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 46 +++++++++++++++++++++--------------------- docs/package.json | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index f0cd1fc88ae..5badb07e389 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -42,7 +42,7 @@ "prettier": "^2.8.7", "string-replace-loader": "^3.1.0", "typescript": "^5.0.4", - "webpack": "^5.80.0" + "webpack": "^5.86.0" } }, "node_modules/@algolia/autocomplete-core": { @@ -3950,9 +3950,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peerDependencies": { "acorn": "^8" } @@ -6069,9 +6069,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", + "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -15390,9 +15390,9 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.80.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", - "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -15400,10 +15400,10 @@ "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.14.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -18899,9 +18899,9 @@ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" }, "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "requires": {} }, "acorn-jsx": { @@ -20426,9 +20426,9 @@ } }, "enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", + "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -27031,9 +27031,9 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.80.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", - "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -27041,10 +27041,10 @@ "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.14.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/docs/package.json b/docs/package.json index 15d5aa38eea..d82e54ec8c9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -61,6 +61,6 @@ "prettier": "^2.8.7", "string-replace-loader": "^3.1.0", "typescript": "^5.0.4", - "webpack": "^5.80.0" + "webpack": "^5.86.0" } } From 9ff1eaeb5a5f892d17ca87c38697466fd48fc301 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 14 May 2023 11:44:49 -0500 Subject: [PATCH 0698/1130] fix: Enable BT_TINYCRYPT_ECC when using HCI BT_TINYCRYPT_ECC is required for BT_SMP_SC_PAIR_ONLY to work on setups that use BT HCI like the nRF5340. --- app/Kconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 1537bd61512..18ee473d5db 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -120,6 +120,10 @@ menuconfig ZMK_BLE if ZMK_BLE +# BT_TINYCRYPT_ECC is required for BT_SMP_SC_PAIR_ONLY when using HCI +config BT_TINYCRYPT_ECC + default y if BT_HCI && !BT_CTLR + choice BT_LL_SW_LLCP_IMPL default BT_LL_SW_LLCP_LEGACY From dcf5e75fa674184d9615793882db1c3f4c4194b9 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 14 May 2023 13:08:33 -0500 Subject: [PATCH 0699/1130] fix(boards): Bump nRF5340 DK I2C buffer size Increased the I2C buffer size again, since it needs to be at least 641 to support 128x64 displays. --- app/boards/nrf5340dk_nrf5340_cpuapp.overlay | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/nrf5340dk_nrf5340_cpuapp.overlay b/app/boards/nrf5340dk_nrf5340_cpuapp.overlay index 66d2332f1a2..9427d9ca150 100644 --- a/app/boards/nrf5340dk_nrf5340_cpuapp.overlay +++ b/app/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -6,5 +6,5 @@ &arduino_i2c { // Default buffer size is too small for use with displays. - zephyr,concat-buf-size = <512>; + zephyr,concat-buf-size = <1024>; }; From 2244bd3d81931753dfd170e804a90a487a205aa1 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 1 Sep 2021 03:49:18 +0000 Subject: [PATCH 0700/1130] refactor(sensors): Sensor event channel data, resolution tweaks. * Refactor sensor events to include channel data, necessary for prop split encoders, and avoiding duplicate calls, to fetch channel data twice, etc. * More consistent behavior driver API. * Allow setting triggers per resolution at the behavior level optionally. --- app/Kconfig | 20 +++ app/dts/bindings/zmk,keymap-sensors.yaml | 12 +- app/include/drivers/behavior.h | 28 ++-- app/include/zmk/events/sensor_event.h | 17 ++- app/include/zmk/sensors.h | 14 ++ app/include/zmk/virtual_key_position.h | 5 + app/src/behaviors/behavior_sensor_rotate.c | 8 +- .../behaviors/behavior_sensor_rotate_common.c | 59 ++++++--- .../behaviors/behavior_sensor_rotate_common.h | 16 ++- .../behaviors/behavior_sensor_rotate_var.c | 6 +- app/src/keymap.c | 25 ++-- app/src/sensors.c | 123 +++++++++++++----- 12 files changed, 254 insertions(+), 79 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 18ee473d5db..1766bf07abe 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -194,6 +194,18 @@ rsource "src/split/Kconfig" #Basic Keyboard Setup endmenu +menu "Encoders" + +config ZMK_ENCODERS_DEFAULT_TRIGGERS_PER_ROTATION + int "Default behavior triggers per rotation" + help + Unless overridden for a specific behavior in the keymap/devicetree, this value + determines how many times to trigger the bound behavior per full rotation. + For tactile encoders with detents, this usually should match the number of + detents per rotation of the encoder. + default 30 + +endmenu menu "Display/LED Options" rsource "src/display/Kconfig" @@ -523,6 +535,14 @@ config ZMK_WPM config SENSOR default y +if ZMK_KEYMAP_SENSORS + +config ZMK_KEYMAP_SENSORS_DEFAULT_TRIGGERS_PER_ROTATION + int "Default triggers per rotation" + default 20 + +endif # ZMK_KEYMAP_SENSORS + choice CBPRINTF_IMPLEMENTATION default CBPRINTF_NANO diff --git a/app/dts/bindings/zmk,keymap-sensors.yaml b/app/dts/bindings/zmk,keymap-sensors.yaml index a879684f4f9..5282f25b04e 100644 --- a/app/dts/bindings/zmk,keymap-sensors.yaml +++ b/app/dts/bindings/zmk,keymap-sensors.yaml @@ -9,4 +9,14 @@ compatible: "zmk,keymap-sensors" properties: sensors: type: phandles - required: true + required: false + triggers-per-rotation: + type: int + required: false + +child-binding: + description: Per-sensor configuration settings + properties: + triggers-per-rotation: + type: int + required: false diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 380fc76f9ba..0aa5d85e79a 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -12,6 +12,7 @@ #include #include #include +#include #include /** @@ -24,9 +25,10 @@ typedef int (*behavior_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event); -typedef int (*behavior_sensor_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, - const struct device *sensor, - struct zmk_behavior_binding_event event); +typedef int (*behavior_sensor_keymap_binding_callback_t)( + struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, size_t channel_data_size, + const struct zmk_sensor_channel_data channel_data[channel_data_size]); enum behavior_locality { BEHAVIOR_LOCALITY_CENTRAL, @@ -158,14 +160,15 @@ static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_bi * @retval 0 If successful. * @retval Negative errno code if failure. */ -__syscall int behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, - const struct device *sensor, - struct zmk_behavior_binding_event event); - -static inline int -z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, - const struct device *sensor, - struct zmk_behavior_binding_event event) { +__syscall int behavior_sensor_keymap_binding_triggered( + struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data); + +static inline int z_impl_behavior_sensor_keymap_binding_triggered( + struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data) { const struct device *dev = device_get_binding(binding->behavior_dev); if (dev == NULL) { @@ -178,7 +181,8 @@ z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *bin return -ENOTSUP; } - return api->sensor_binding_triggered(binding, sensor, event); + return api->sensor_binding_triggered(binding, event, sensor_config, channel_data_size, + channel_data); } /** diff --git a/app/include/zmk/events/sensor_event.h b/app/include/zmk/events/sensor_event.h index 9398bcbb713..5a5aa3ac711 100644 --- a/app/include/zmk/events/sensor_event.h +++ b/app/include/zmk/events/sensor_event.h @@ -6,12 +6,21 @@ #pragma once -#include + +#include #include -#include +#include +#include + +// TODO: Move to Kconfig when we need more than one channel +#define ZMK_SENSOR_EVENT_MAX_CHANNELS 1 + struct zmk_sensor_event { - uint8_t sensor_number; - const struct device *sensor; + uint8_t sensor_position; + + size_t channel_data_size; + struct zmk_sensor_channel_data channel_data[ZMK_SENSOR_EVENT_MAX_CHANNELS]; + int64_t timestamp; }; diff --git a/app/include/zmk/sensors.h b/app/include/zmk/sensors.h index 9e54695fc19..41061127981 100644 --- a/app/include/zmk/sensors.h +++ b/app/include/zmk/sensors.h @@ -6,6 +6,9 @@ #pragma once +#include + +#define _SENSOR_CHILD_LEN(node) 1 + #define ZMK_KEYMAP_SENSORS_NODE DT_INST(0, zmk_keymap_sensors) #define ZMK_KEYMAP_HAS_SENSORS DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_NODE, okay) #define ZMK_KEYMAP_SENSORS_BY_IDX(idx) DT_PHANDLE_BY_IDX(ZMK_KEYMAP_SENSORS_NODE, sensors, idx) @@ -15,3 +18,14 @@ #else #define ZMK_KEYMAP_SENSORS_LEN 0 #endif + +const struct zmk_sensor_config *zmk_sensors_get_config_at_position(uint8_t sensor_position); + +struct zmk_sensor_config { + uint16_t triggers_per_rotation; +}; + +struct zmk_sensor_channel_data { + enum sensor_channel channel; + struct sensor_value value; +}; diff --git a/app/include/zmk/virtual_key_position.h b/app/include/zmk/virtual_key_position.h index 48deee5c6c8..b8f20683d7b 100644 --- a/app/include/zmk/virtual_key_position.h +++ b/app/include/zmk/virtual_key_position.h @@ -14,6 +14,11 @@ */ #define ZMK_VIRTUAL_KEY_POSITION_SENSOR(index) (ZMK_KEYMAP_LEN + (index)) +/** + * Gets the sensor number from the virtual key position. + */ +#define ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(vkp) ((vkp)-ZMK_KEYMAP_LEN) + /** * Gets the virtual key position to use for the combo with the given index. */ diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c index e12278bba1a..86846d5be0b 100644 --- a/app/src/behaviors/behavior_sensor_rotate.c +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -33,8 +33,10 @@ static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; .tap_ms = DT_INST_PROP_OR(n, tap_ms, 5), \ .override_params = false, \ }; \ - DEVICE_DT_INST_DEFINE( \ - n, behavior_sensor_rotate_init, NULL, NULL, &behavior_sensor_rotate_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sensor_rotate_driver_api); + static struct behavior_sensor_rotate_data behavior_sensor_rotate_data_##n = {}; \ + DEVICE_DT_INST_DEFINE(n, behavior_sensor_rotate_init, NULL, &behavior_sensor_rotate_data_##n, \ + &behavior_sensor_rotate_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_sensor_rotate_driver_api); DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_INST) diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index bd31170eda0..99e4e019ba1 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -5,48 +5,75 @@ #include #include +#include #include "behavior_sensor_rotate_common.h" LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *binding, - const struct device *sensor, - struct zmk_behavior_binding_event event) { + struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, + size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data) { const struct device *dev = device_get_binding(binding->behavior_dev); const struct behavior_sensor_rotate_config *cfg = dev->config; + struct behavior_sensor_rotate_data *data = dev->data; - struct sensor_value value; + const struct sensor_value value = channel_data[0].value; + int triggers; + int sensor_position = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); - const int err = sensor_channel_get(sensor, SENSOR_CHAN_ROTATION, &value); + // Some funky special casing for "old encoder behavior" where ticks where reported in val2 only, + // instead of rotational degrees in val1. + // REMOVE ME: Remove after a grace period of old ec11 sensor behavior + if (value.val1 == 0) { + triggers = value.val2; + } else { + struct sensor_value remainder = data->remainder[sensor_position]; - if (err < 0) { - LOG_WRN("Failed to get sensor rotation value: %d", err); - return err; + remainder.val1 += value.val1; + remainder.val2 += value.val2; + + if (remainder.val2 >= 1000000 || remainder.val2 <= 1000000) { + remainder.val1 += remainder.val2 / 1000000; + remainder.val2 %= 1000000; + } + + int trigger_degrees = 360 / sensor_config->triggers_per_rotation; + triggers = remainder.val1 / trigger_degrees; + remainder.val1 %= trigger_degrees; + + data->remainder[sensor_position] = remainder; } + LOG_DBG( + "val1: %d, val2: %d, remainder: %d/%d triggers: %d inc keycode 0x%02X dec keycode 0x%02X", + value.val1, value.val2, data->remainder[sensor_position].val1, + data->remainder[sensor_position].val2, triggers, binding->param1, binding->param2); + struct zmk_behavior_binding triggered_binding; - switch (value.val1) { - case 1: + if (triggers > 0) { triggered_binding = cfg->cw_binding; if (cfg->override_params) { triggered_binding.param1 = binding->param1; } - break; - case -1: + } else if (triggers < 0) { + triggers = -triggers; triggered_binding = cfg->ccw_binding; if (cfg->override_params) { triggered_binding.param1 = binding->param2; } - break; - default: - return -ENOTSUP; + } else { + return 0; } LOG_DBG("Sensor binding: %s", binding->behavior_dev); - zmk_behavior_queue_add(event.position, triggered_binding, true, cfg->tap_ms); - zmk_behavior_queue_add(event.position, triggered_binding, false, 0); + for (int i = 0; i < triggers; i++) { + zmk_behavior_queue_add(event.position, triggered_binding, true, cfg->tap_ms); + zmk_behavior_queue_add(event.position, triggered_binding, false, 0); + } return ZMK_BEHAVIOR_OPAQUE; } diff --git a/app/src/behaviors/behavior_sensor_rotate_common.h b/app/src/behaviors/behavior_sensor_rotate_common.h index 2d58218d8ad..eab443a3987 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.h +++ b/app/src/behaviors/behavior_sensor_rotate_common.h @@ -1,5 +1,11 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ #include +#include struct behavior_sensor_rotate_config { struct zmk_behavior_binding cw_binding; @@ -8,6 +14,12 @@ struct behavior_sensor_rotate_config { bool override_params; }; +struct behavior_sensor_rotate_data { + struct sensor_value remainder[ZMK_KEYMAP_SENSORS_LEN]; +}; + int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *binding, - const struct device *sensor, - struct zmk_behavior_binding_event event); \ No newline at end of file + struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, + size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data); \ No newline at end of file diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c index a82267a55e9..95bb99610ba 100644 --- a/app/src/behaviors/behavior_sensor_rotate_var.c +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -24,8 +24,10 @@ static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; .tap_ms = DT_INST_PROP(n, tap_ms), \ .override_params = true, \ }; \ + static struct behavior_sensor_rotate_data behavior_sensor_rotate_var_data_##n = {}; \ DEVICE_DT_INST_DEFINE( \ - n, behavior_sensor_rotate_var_init, NULL, NULL, &behavior_sensor_rotate_var_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sensor_rotate_var_driver_api); + n, behavior_sensor_rotate_var_init, NULL, &behavior_sensor_rotate_var_data_##n, \ + &behavior_sensor_rotate_var_config_##n, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_sensor_rotate_var_driver_api); DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_VAR_INST) diff --git a/app/src/keymap.c b/app/src/keymap.c index da25fc096ca..16543d37840 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -252,27 +252,34 @@ int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pr } #if ZMK_KEYMAP_HAS_SENSORS -int zmk_keymap_sensor_triggered(uint8_t sensor_number, const struct device *sensor, - int64_t timestamp) { +int zmk_keymap_sensor_triggered( + uint8_t sensor_position, size_t channel_data_size, + const struct zmk_sensor_channel_data channel_data[channel_data_size], int64_t timestamp) { for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= _zmk_keymap_layer_default; layer--) { if (zmk_keymap_layer_active(layer)) { - struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_number]; + struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_position]; const struct device *behavior; int ret; - LOG_DBG("layer: %d sensor_number: %d, binding name: %s", layer, sensor_number, + LOG_DBG("layer: %d sensor_position: %d, binding name: %s", layer, sensor_position, binding->behavior_dev); behavior = device_get_binding(binding->behavior_dev); if (!behavior) { - LOG_DBG("No behavior assigned to %d on layer %d", sensor_number, layer); + LOG_DBG("No behavior assigned to %d on layer %d", sensor_position, layer); continue; } struct zmk_behavior_binding_event event = { - .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_number), .timestamp = timestamp}; - ret = behavior_sensor_keymap_binding_triggered(binding, sensor, event); + .layer = layer, + .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_position), + .timestamp = timestamp, + }; + + ret = behavior_sensor_keymap_binding_triggered( + binding, event, zmk_sensors_get_config_at_position(sensor_position), + channel_data_size, channel_data); if (ret > 0) { LOG_DBG("behavior processing to continue to next layer"); @@ -301,8 +308,8 @@ int keymap_listener(const zmk_event_t *eh) { #if ZMK_KEYMAP_HAS_SENSORS const struct zmk_sensor_event *sensor_ev; if ((sensor_ev = as_zmk_sensor_event(eh)) != NULL) { - return zmk_keymap_sensor_triggered(sensor_ev->sensor_number, sensor_ev->sensor, - sensor_ev->timestamp); + return zmk_keymap_sensor_triggered(sensor_ev->sensor_position, sensor_ev->channel_data_size, + sensor_ev->channel_data, sensor_ev->timestamp); } #endif /* ZMK_KEYMAP_HAS_SENSORS */ diff --git a/app/src/sensors.c b/app/src/sensors.c index 1b92147f8ca..5f41c4f2f20 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -18,65 +18,128 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if ZMK_KEYMAP_HAS_SENSORS -struct sensors_data_item { - uint8_t sensor_number; +struct sensors_item_cfg { + uint8_t sensor_position; + const struct zmk_sensor_config *config; const struct device *dev; struct sensor_trigger trigger; }; -#define _SENSOR_ITEM(node) \ +#define _SENSOR_ITEM(idx, node) \ { \ - .dev = NULL, .trigger = {.type = SENSOR_TRIG_DELTA, .chan = SENSOR_CHAN_ROTATION } \ + .dev = DEVICE_DT_GET_OR_NULL(node), \ + .trigger = {.type = SENSOR_TRIG_DATA_READY, .chan = SENSOR_CHAN_ROTATION}, \ + .config = &configs[idx] \ } +#define SENSOR_ITEM(idx, _i) _SENSOR_ITEM(idx, ZMK_KEYMAP_SENSORS_BY_IDX(idx)) -#define SENSOR_ITEM(idx, _node) \ - COND_CODE_1(DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_BY_IDX(idx), okay), \ - (_SENSOR_ITEM(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), ({})) +#define PLUS_ONE(n) +1 +#define ZMK_KEYMAP_SENSORS_CHILD_COUNT (0 DT_FOREACH_CHILD(ZMK_KEYMAP_SENSORS_NODE, PLUS_ONE)) +#define SENSOR_CHILD_ITEM(node) \ + { \ + .triggers_per_rotation = \ + DT_PROP_OR(node, triggers_per_rotation, \ + DT_PROP_OR(ZMK_KEYMAP_SENSORS_NODE, triggers_per_rotation, \ + CONFIG_ZMK_KEYMAP_SENSORS_DEFAULT_TRIGGERS_PER_ROTATION)) \ + } +#define SENSOR_CHILD_DEFAULTS(idx, arg) \ + { .triggers_per_rotation = DT_PROP_OR(ZMK_KEYMAP_SENSORS_NODE, triggers_per_rotation, 20) } + +static struct zmk_sensor_config configs[] = { +#if ZMK_KEYMAP_SENSORS_CHILD_COUNT > 0 + DT_FOREACH_CHILD_SEP(ZMK_KEYMAP_SENSORS_NODE, SENSOR_CHILD_ITEM, (, )) +#else + LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_CHILD_DEFAULTS, (, ), 0) +#endif +}; -static struct sensors_data_item sensors[] = {LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_ITEM, (, ), 0)}; +static struct sensors_item_cfg sensors[] = {LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_ITEM, (, ), 0)}; -static void zmk_sensors_trigger_handler(const struct device *dev, - const struct sensor_trigger *trigger) { - int err; - const struct sensors_data_item *item = CONTAINER_OF(trigger, struct sensors_data_item, trigger); +static ATOMIC_DEFINE(pending_sensors, ZMK_KEYMAP_SENSORS_LEN); + +const struct zmk_sensor_config *zmk_sensors_get_config_at_position(uint8_t sensor_position) { + if (sensor_position > ARRAY_SIZE(configs)) { + return NULL; + } - LOG_DBG("sensor %d", item->sensor_number); + return &configs[sensor_position]; +} - err = sensor_sample_fetch(dev); +static void trigger_sensor_data_for_position(uint32_t sensor_position) { + int err; + const struct sensors_item_cfg *item = &sensors[sensor_position]; + + err = sensor_sample_fetch(item->dev); if (err) { LOG_WRN("Failed to fetch sample from device %d", err); return; } - ZMK_EVENT_RAISE(new_zmk_sensor_event((struct zmk_sensor_event){ - .sensor_number = item->sensor_number, .sensor = dev, .timestamp = k_uptime_get()})); + struct sensor_value value; + err = sensor_channel_get(item->dev, item->trigger.chan, &value); + + if (err) { + LOG_WRN("Failed to get channel data from device %d", err); + return; + } + + ZMK_EVENT_RAISE(new_zmk_sensor_event( + (struct zmk_sensor_event){.sensor_position = item->sensor_position, + .channel_data = {(struct zmk_sensor_channel_data){ + .value = value, .channel = item->trigger.chan}}, + .timestamp = k_uptime_get()})); } -static void zmk_sensors_init_item(const char *node, uint8_t i, uint8_t abs_i) { - LOG_DBG("Init %s at index %d with sensor_number %d", node, i, abs_i); +static void run_sensors_data_trigger(struct k_work *work) { + for (int i = 0; i < ARRAY_SIZE(sensors); i++) { + if (atomic_test_and_clear_bit(pending_sensors, i)) { + trigger_sensor_data_for_position(i); + } + } +} + +K_WORK_DEFINE(sensor_data_work, run_sensors_data_trigger); + +static void zmk_sensors_trigger_handler(const struct device *dev, + const struct sensor_trigger *trigger) { + const struct sensors_item_cfg *test_item = + CONTAINER_OF(trigger, struct sensors_item_cfg, trigger); + int sensor_index = test_item - sensors; + + if (sensor_index < 0 || sensor_index >= ARRAY_SIZE(sensors)) { + LOG_ERR("Invalid sensor item triggered our callback"); + return; + } - sensors[i].dev = device_get_binding(node); - sensors[i].sensor_number = abs_i; + if (k_is_in_isr()) { + atomic_set_bit(pending_sensors, sensor_index); + k_work_submit(&sensor_data_work); + } else { + trigger_sensor_data_for_position(sensor_index); + } +} + +static void zmk_sensors_init_item(uint8_t i) { + LOG_DBG("Init sensor at index %d", i); + + sensors[i].sensor_position = i; if (!sensors[i].dev) { - LOG_WRN("Failed to find device for %s", node); + LOG_DBG("No local device for %d", i); return; } - sensor_trigger_set(sensors[i].dev, &sensors[i].trigger, zmk_sensors_trigger_handler); + int err = sensor_trigger_set(sensors[i].dev, &sensors[i].trigger, zmk_sensors_trigger_handler); + if (err) { + LOG_WRN("Failed to set sensor trigger (%d)", err); + } } -#define _SENSOR_INIT(node) \ - zmk_sensors_init_item(DT_PROP(node, label), local_index++, absolute_index++); -#define SENSOR_INIT(idx, _i) \ - COND_CODE_1(DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_BY_IDX(idx), okay), \ - (_SENSOR_INIT(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), (absolute_index++;)) +#define SENSOR_INIT(idx, _t) zmk_sensors_init_item(idx); static int zmk_sensors_init(const struct device *_arg) { - int local_index = 0; - int absolute_index = 0; - LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_INIT, (), 0) + return 0; } From 295ed83409ab0bede761eb2e51f4e4670e4dbf08 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 2 Dec 2021 15:07:29 +0000 Subject: [PATCH 0701/1130] refactor(sensors): ec11 rotation sensor value in degrees. * Add new `steps` property to the `aips,ec11` binding, to make the driver properly report degrees in the rotation delta channel. * Handle old sensor values in sensor rotate behavior. --- app/drivers/sensor/ec11/Kconfig | 2 ++ app/drivers/sensor/ec11/ec11.c | 33 +++++++++++++++---- app/drivers/sensor/ec11/ec11.h | 1 + .../zephyr/dts/bindings/sensor/alps,ec11.yaml | 5 +++ app/include/zmk/events/sensor_event.h | 4 +-- app/include/zmk/sensors.h | 2 +- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/app/drivers/sensor/ec11/Kconfig b/app/drivers/sensor/ec11/Kconfig index e86d092a127..5da327280a8 100644 --- a/app/drivers/sensor/ec11/Kconfig +++ b/app/drivers/sensor/ec11/Kconfig @@ -3,6 +3,8 @@ menuconfig EC11 bool "EC11 Incremental Encoder Sensor" + default y + depends on DT_HAS_ALPS_EC11_ENABLED depends on GPIO help Enable driver for EC11 incremental encoder sensors. diff --git a/app/drivers/sensor/ec11/ec11.c b/app/drivers/sensor/ec11/ec11.c index 7091f73e739..ee8b41e74c8 100644 --- a/app/drivers/sensor/ec11/ec11.c +++ b/app/drivers/sensor/ec11/ec11.c @@ -16,6 +16,8 @@ #include "ec11.h" +#define FULL_ROTATION 360 + LOG_MODULE_REGISTER(EC11, CONFIG_SENSOR_LOG_LEVEL); static int ec11_get_ab_state(const struct device *dev) { @@ -59,9 +61,14 @@ static int ec11_sample_fetch(const struct device *dev, enum sensor_channel chan) drv_data->pulses += delta; drv_data->ab_state = val; - drv_data->ticks = drv_data->pulses / drv_cfg->resolution; - drv_data->delta = delta; - drv_data->pulses %= drv_cfg->resolution; + // TODO: Temporary code for backwards compatibility to support + // the sensor channel rotation reporting *ticks* instead of delta of degrees. + // REMOVE ME + if (drv_cfg->steps == 0) { + drv_data->ticks = drv_data->pulses / drv_cfg->resolution; + drv_data->delta = delta; + drv_data->pulses %= drv_cfg->resolution; + } return 0; } @@ -69,13 +76,26 @@ static int ec11_sample_fetch(const struct device *dev, enum sensor_channel chan) static int ec11_channel_get(const struct device *dev, enum sensor_channel chan, struct sensor_value *val) { struct ec11_data *drv_data = dev->data; + const struct ec11_config *drv_cfg = dev->config; + int32_t pulses = drv_data->pulses; if (chan != SENSOR_CHAN_ROTATION) { return -ENOTSUP; } - val->val1 = drv_data->ticks; - val->val2 = drv_data->delta; + drv_data->pulses = 0; + + if (drv_cfg->steps > 0) { + val->val1 = (pulses * FULL_ROTATION) / drv_cfg->steps; + val->val2 = (pulses * FULL_ROTATION) % drv_cfg->steps; + if (val->val2 != 0) { + val->val2 *= 1000000; + val->val2 /= drv_cfg->steps; + } + } else { + val->val1 = drv_data->ticks; + val->val2 = drv_data->delta; + } return 0; } @@ -132,7 +152,8 @@ int ec11_init(const struct device *dev) { const struct ec11_config ec11_cfg_##n = { \ .a = GPIO_DT_SPEC_INST_GET(n, a_gpios), \ .b = GPIO_DT_SPEC_INST_GET(n, b_gpios), \ - COND_CODE_0(DT_INST_NODE_HAS_PROP(n, resolution), (1), (DT_INST_PROP(n, resolution))), \ + .resolution = DT_INST_PROP_OR(n, resolution, 1), \ + .steps = DT_INST_PROP_OR(n, steps, 0), \ }; \ DEVICE_DT_INST_DEFINE(n, ec11_init, NULL, &ec11_data_##n, &ec11_cfg_##n, POST_KERNEL, \ CONFIG_SENSOR_INIT_PRIORITY, &ec11_driver_api); diff --git a/app/drivers/sensor/ec11/ec11.h b/app/drivers/sensor/ec11/ec11.h index 82c21572329..4e2e5d2641c 100644 --- a/app/drivers/sensor/ec11/ec11.h +++ b/app/drivers/sensor/ec11/ec11.h @@ -14,6 +14,7 @@ struct ec11_config { const struct gpio_dt_spec a; const struct gpio_dt_spec b; + const uint16_t steps; const uint8_t resolution; }; diff --git a/app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml b/app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml index 5cbe77a2ad0..3672ea30579 100644 --- a/app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml +++ b/app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml @@ -18,4 +18,9 @@ properties: resolution: type: int description: Number of pulses per tick + deprecated: true + required: false + steps: + type: int + description: Number of pulses in one full rotation required: false diff --git a/app/include/zmk/events/sensor_event.h b/app/include/zmk/events/sensor_event.h index 5a5aa3ac711..c5157447dd4 100644 --- a/app/include/zmk/events/sensor_event.h +++ b/app/include/zmk/events/sensor_event.h @@ -6,11 +6,11 @@ #pragma once - +#include #include + #include #include -#include // TODO: Move to Kconfig when we need more than one channel #define ZMK_SENSOR_EVENT_MAX_CHANNELS 1 diff --git a/app/include/zmk/sensors.h b/app/include/zmk/sensors.h index 41061127981..06fbc63e564 100644 --- a/app/include/zmk/sensors.h +++ b/app/include/zmk/sensors.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #define _SENSOR_CHILD_LEN(node) 1 + #define ZMK_KEYMAP_SENSORS_NODE DT_INST(0, zmk_keymap_sensors) From f0f7e2081b5a4aa5bc35d7d8855b0e73e962319b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 26 May 2022 16:53:41 +0000 Subject: [PATCH 0702/1130] refactor(config): Select SENSOR as needed. * Don't force on SENSOR Kconfig setting unless needed based on the detected DT. --- app/Kconfig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 1766bf07abe..5b313effcdc 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -532,8 +532,11 @@ config ZMK_WPM bool "Calculate WPM" default n -config SENSOR +config ZMK_KEYMAP_SENSORS + bool "Enable Keymap Sensors support" default y + depends on DT_HAS_ZMK_KEYMAP_SENSORS_ENABLED + select SENSOR if ZMK_KEYMAP_SENSORS From 621d946d2926f28aa866947f110182726fa9ca10 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 21 May 2023 21:27:41 -0700 Subject: [PATCH 0703/1130] refactor(bluetooth): Bump HoG stack size. * Bump the default stack size for the HoG processing thread to avoid issues w/ some pathways. --- app/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 5b313effcdc..a54ad38967d 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -135,7 +135,7 @@ config SYSTEM_WORKQUEUE_STACK_SIZE config ZMK_BLE_THREAD_STACK_SIZE int "BLE notify thread stack size" - default 512 + default 768 config ZMK_BLE_THREAD_PRIORITY int "BLE notify thread priority" From f8aaaff556e1c43c6646ea1c1ee7faa2907cdf51 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 16 Apr 2023 08:18:57 +0000 Subject: [PATCH 0704/1130] refactor(shields): Updated ZMK Uno encoder config. * Move to new steps/triggers-per-rotation config. * Leverage QDEC Nordic driver when used on Nordic DK. --- .../boards/nrf52840dk_nrf52840.overlay | 24 +++++++++ app/boards/shields/zmk_uno/zmk_uno.overlay | 49 ++++++++++--------- 2 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay new file mode 100644 index 00000000000..5ac7af7c532 --- /dev/null +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -0,0 +1,24 @@ + +/ { + // First, delete the existing basic GPIO based instance. + /delete-node/ encoder; +}; + +&pinctrl { + qdec_default: qdec_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; +}; + +// Set up the QDEC hardware based driver and give it the same label as the deleted node. +encoder: &qdec0 { + status = "okay"; + led-pre = <0>; + steps = <80>; + pinctrl-0 = <&qdec_default>; + pinctrl-names = "default"; +}; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 04332911e9b..78f3b4a7146 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -40,10 +40,10 @@ // Commented out until we add more powerful power domain support // external_power { - // compatible = "zmk,ext-power-generic"; - // label = "EXT_POWER"; - // init-delay-ms = <200>; - // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + // compatible = "zmk,ext-power-generic"; + // label = "EXT_POWER"; + // init-delay-ms = <200>; + // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; // }; rgb_power { @@ -128,14 +128,14 @@ diode-direction = "col2row"; col-gpios - = <&arduino_header 10 GPIO_ACTIVE_HIGH> - , <&arduino_header 9 GPIO_ACTIVE_HIGH> - ; + = <&arduino_header 10 GPIO_ACTIVE_HIGH> + , <&arduino_header 9 GPIO_ACTIVE_HIGH> + ; row-gpios - = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; + = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; }; @@ -144,11 +144,11 @@ status = "disabled"; input-gpios - = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; @@ -157,23 +157,26 @@ toggle-mode; input-gpios - = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; }; encoder: encoder { label = "ENCODER"; - resolution = <4>; + steps = <80>; compatible = "alps,ec11"; - a-gpios = <&arduino_header 14 GPIO_PULL_UP>; - b-gpios = <&arduino_header 15 GPIO_PULL_UP>; + a-gpios = <&arduino_header 15 GPIO_PULL_UP>; + b-gpios = <&arduino_header 14 GPIO_PULL_UP>; }; - sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; + triggers-per-rotation = <20>; + left { + triggers-per-rotation = <20>; + }; }; }; From d781ec795b9d9e053ce71c30450ba2b979eab43b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 18 Apr 2023 07:14:18 +0000 Subject: [PATCH 0705/1130] refactor(bluetooth): Add battery reporting config. * Add dedicated battery reporting Kconfig that is `imply`d by enabling ZMK_BLE. --- app/CMakeLists.txt | 4 ++-- app/Kconfig | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index a647e88363f..ea3b8f73364 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -77,8 +77,8 @@ endif() target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) -target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/battery_state_changed.c) -target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/battery.c) +target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/events/battery_state_changed.c) +target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c) target_sources_ifdef(CONFIG_ZMK_SPLIT app PRIVATE src/events/split_peripheral_status_changed.c) add_subdirectory(src/split) diff --git a/app/Kconfig b/app/Kconfig index a54ad38967d..9c0606b02fc 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -114,9 +114,9 @@ menuconfig ZMK_BLE select BT_SMP_APP_PAIRING_ACCEPT select BT_PERIPHERAL select BT_DIS - select BT_BAS select BT_SETTINGS select SETTINGS + imply ZMK_BATTERY_REPORTING if ZMK_BLE @@ -322,6 +322,12 @@ endmenu menu "Power Management" +config ZMK_BATTERY_REPORTING + bool "Battery level detection/reporting" + default n + select SENSOR + select BT_BAS if ZMK_BLE + config ZMK_IDLE_TIMEOUT int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" default 30000 From 8b29f6d34556d98df60f529e84ee66e49e6bf0c0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 4 May 2023 00:04:20 +0000 Subject: [PATCH 0706/1130] refactor(sensors): Split data handling from triggers. * All sensor behaviors should see sensor data, then selectively only have some trigger their behaviors. --- app/include/drivers/behavior.h | 59 ++++++++++++-- app/src/behaviors/behavior_sensor_rotate.c | 3 +- .../behaviors/behavior_sensor_rotate_common.c | 31 +++++-- .../behaviors/behavior_sensor_rotate_common.h | 13 ++- .../behaviors/behavior_sensor_rotate_var.c | 3 +- app/src/keymap.c | 81 +++++++++++-------- 6 files changed, 135 insertions(+), 55 deletions(-) diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 0aa5d85e79a..d7e57d02433 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -23,9 +23,17 @@ * (Internal use only.) */ +enum behavior_sensor_binding_process_mode { + BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER, + BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_DISCARD, +}; + typedef int (*behavior_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event); -typedef int (*behavior_sensor_keymap_binding_callback_t)( +typedef int (*behavior_sensor_keymap_binding_process_callback_t)( + struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + enum behavior_sensor_binding_process_mode mode); +typedef int (*behavior_sensor_keymap_binding_data_callback_t)( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data channel_data[channel_data_size]); @@ -41,7 +49,8 @@ __subsystem struct behavior_driver_api { behavior_keymap_binding_callback_t binding_convert_central_state_dependent_params; behavior_keymap_binding_callback_t binding_pressed; behavior_keymap_binding_callback_t binding_released; - behavior_sensor_keymap_binding_callback_t sensor_binding_triggered; + behavior_sensor_keymap_binding_data_callback_t sensor_binding_data; + behavior_sensor_keymap_binding_process_callback_t sensor_binding_process; }; /** * @endcond @@ -151,7 +160,7 @@ static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_bi } /** - * @brief Handle the a sensor keymap binding being triggered + * @brief Handle the a sensor keymap binding processing any incoming data from the sensor * @param binding Sensor keymap binding which was triggered. * @param sensor Pointer to the sensor device structure for the sensor driver instance. * @param virtual_key_position ZMK_KEYMAP_LEN + sensor number @@ -160,12 +169,12 @@ static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_bi * @retval 0 If successful. * @retval Negative errno code if failure. */ -__syscall int behavior_sensor_keymap_binding_triggered( +__syscall int behavior_sensor_keymap_binding_data( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data *channel_data); -static inline int z_impl_behavior_sensor_keymap_binding_triggered( +static inline int z_impl_behavior_sensor_keymap_binding_data( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data *channel_data) { @@ -177,12 +186,46 @@ static inline int z_impl_behavior_sensor_keymap_binding_triggered( const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; - if (api->sensor_binding_triggered == NULL) { + if (api->sensor_binding_data == NULL) { + return -ENOTSUP; + } + + return api->sensor_binding_data(binding, event, sensor_config, channel_data_size, channel_data); +} + +/** + * @brief Handle the keymap sensor binding being triggered after updating any local data + * @param dev Pointer to the device structure for the driver instance. + * @param param1 User parameter specified at time of behavior binding. + * @param param2 User parameter specified at time of behavior binding. + * + * @retval 0 If successful. + * @retval Negative errno code if failure. + */ +// clang-format off +__syscall int behavior_sensor_keymap_binding_process( + struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, + enum behavior_sensor_binding_process_mode mode); +// clang-format on + +static inline int +z_impl_behavior_sensor_keymap_binding_process(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, + enum behavior_sensor_binding_process_mode mode) { + const struct device *dev = device_get_binding(binding->behavior_dev); + + if (dev == NULL) { + return -EINVAL; + } + + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; + + if (api->sensor_binding_process == NULL) { return -ENOTSUP; } - return api->sensor_binding_triggered(binding, event, sensor_config, channel_data_size, - channel_data); + return api->sensor_binding_process(binding, event, mode); } /** diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c index 86846d5be0b..3b5bef62183 100644 --- a/app/src/behaviors/behavior_sensor_rotate.c +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -13,7 +13,8 @@ #include "behavior_sensor_rotate_common.h" static const struct behavior_driver_api behavior_sensor_rotate_driver_api = { - .sensor_binding_triggered = zmk_behavior_sensor_rotate_common_trigger}; + .sensor_binding_data = zmk_behavior_sensor_rotate_common_data, + .sensor_binding_process = zmk_behavior_sensor_rotate_common_process}; static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index 99e4e019ba1..0a2b619df81 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -11,13 +11,12 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *binding, - struct zmk_behavior_binding_event event, - const struct zmk_sensor_config *sensor_config, - size_t channel_data_size, - const struct zmk_sensor_channel_data *channel_data) { +int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, + size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data) { const struct device *dev = device_get_binding(binding->behavior_dev); - const struct behavior_sensor_rotate_config *cfg = dev->config; struct behavior_sensor_rotate_data *data = dev->data; const struct sensor_value value = channel_data[0].value; @@ -52,6 +51,26 @@ int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *bindi value.val1, value.val2, data->remainder[sensor_position].val1, data->remainder[sensor_position].val2, triggers, binding->param1, binding->param2); + data->triggers[sensor_position] = triggers; + return 0; +} + +int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, + enum behavior_sensor_binding_process_mode mode) { + const struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_sensor_rotate_config *cfg = dev->config; + struct behavior_sensor_rotate_data *data = dev->data; + + const int sensor_position = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); + + if (mode != BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER) { + data->triggers[sensor_position] = 0; + return 0; + } + + int triggers = data->triggers[sensor_position]; + struct zmk_behavior_binding triggered_binding; if (triggers > 0) { triggered_binding = cfg->cw_binding; diff --git a/app/src/behaviors/behavior_sensor_rotate_common.h b/app/src/behaviors/behavior_sensor_rotate_common.h index eab443a3987..d9d4d855dfa 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.h +++ b/app/src/behaviors/behavior_sensor_rotate_common.h @@ -4,6 +4,7 @@ * SPDX-License-Identifier: MIT */ +#include #include #include @@ -16,10 +17,14 @@ struct behavior_sensor_rotate_config { struct behavior_sensor_rotate_data { struct sensor_value remainder[ZMK_KEYMAP_SENSORS_LEN]; + int triggers[ZMK_KEYMAP_SENSORS_LEN]; }; -int zmk_behavior_sensor_rotate_common_trigger(struct zmk_behavior_binding *binding, +int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, + size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data); +int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, - const struct zmk_sensor_config *sensor_config, - size_t channel_data_size, - const struct zmk_sensor_channel_data *channel_data); \ No newline at end of file + enum behavior_sensor_binding_process_mode mode); \ No newline at end of file diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c index 95bb99610ba..3c2373b0048 100644 --- a/app/src/behaviors/behavior_sensor_rotate_var.c +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -13,7 +13,8 @@ #include "behavior_sensor_rotate_common.h" static const struct behavior_driver_api behavior_sensor_rotate_var_driver_api = { - .sensor_binding_triggered = zmk_behavior_sensor_rotate_common_trigger}; + .sensor_binding_data = zmk_behavior_sensor_rotate_common_data, + .sensor_binding_process = zmk_behavior_sensor_rotate_common_process}; static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; }; diff --git a/app/src/keymap.c b/app/src/keymap.c index 16543d37840..c8121176f62 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -252,48 +252,59 @@ int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pr } #if ZMK_KEYMAP_HAS_SENSORS -int zmk_keymap_sensor_triggered( - uint8_t sensor_position, size_t channel_data_size, - const struct zmk_sensor_channel_data channel_data[channel_data_size], int64_t timestamp) { - for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= _zmk_keymap_layer_default; layer--) { - if (zmk_keymap_layer_active(layer)) { - struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_position]; - const struct device *behavior; - int ret; +int zmk_keymap_sensor_event(uint8_t sensor_position, size_t channel_data_size, + const struct zmk_sensor_channel_data channel_data[channel_data_size], + int64_t timestamp) { + bool opaque_response = false; - LOG_DBG("layer: %d sensor_position: %d, binding name: %s", layer, sensor_position, - binding->behavior_dev); + for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= 0; layer--) { + struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_position]; + const struct device *behavior; + int ret; - behavior = device_get_binding(binding->behavior_dev); + LOG_DBG("layer: %d sensor_position: %d, binding name: %s", layer, sensor_position, + binding->behavior_dev); - if (!behavior) { - LOG_DBG("No behavior assigned to %d on layer %d", sensor_position, layer); - continue; - } + behavior = device_get_binding(binding->behavior_dev); - struct zmk_behavior_binding_event event = { - .layer = layer, - .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_position), - .timestamp = timestamp, - }; + if (!behavior) { + LOG_DBG("No behavior assigned to %d on layer %d", sensor_position, layer); + continue; + } - ret = behavior_sensor_keymap_binding_triggered( - binding, event, zmk_sensors_get_config_at_position(sensor_position), - channel_data_size, channel_data); + struct zmk_behavior_binding_event event = { + .layer = layer, + .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_position), + .timestamp = timestamp, + }; - if (ret > 0) { - LOG_DBG("behavior processing to continue to next layer"); - continue; - } else if (ret < 0) { - LOG_DBG("Behavior returned error: %d", ret); - return ret; - } else { - return ret; - } + ret = behavior_sensor_keymap_binding_data( + binding, event, zmk_sensors_get_config_at_position(sensor_position), channel_data_size, + channel_data); + + if (ret > 0) { + LOG_DBG("behavior processing to continue to next layer"); + continue; + } + + enum behavior_sensor_binding_process_mode mode = + (!opaque_response && layer >= _zmk_keymap_layer_default && + zmk_keymap_layer_active(layer)) + ? BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER + : BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_DISCARD; + + ret = behavior_sensor_keymap_binding_process(binding, event, mode); + + if (ret == ZMK_BEHAVIOR_OPAQUE) { + LOG_DBG("sensor event processing complete, behavior response was opaque"); + opaque_response = true; + } else if (ret < 0) { + LOG_DBG("Behavior returned error: %d", ret); + return ret; } } - return -ENOTSUP; + return 0; } #endif /* ZMK_KEYMAP_HAS_SENSORS */ @@ -308,8 +319,8 @@ int keymap_listener(const zmk_event_t *eh) { #if ZMK_KEYMAP_HAS_SENSORS const struct zmk_sensor_event *sensor_ev; if ((sensor_ev = as_zmk_sensor_event(eh)) != NULL) { - return zmk_keymap_sensor_triggered(sensor_ev->sensor_position, sensor_ev->channel_data_size, - sensor_ev->channel_data, sensor_ev->timestamp); + return zmk_keymap_sensor_event(sensor_ev->sensor_position, sensor_ev->channel_data_size, + sensor_ev->channel_data, sensor_ev->timestamp); } #endif /* ZMK_KEYMAP_HAS_SENSORS */ From 3a91b325138dfba8ede743aec28e2cdbc85d17d2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 16 May 2023 22:27:01 -0700 Subject: [PATCH 0707/1130] refactor(sensors): Use "sensor index" consistently --- app/include/drivers/behavior.h | 8 ++--- app/include/zmk/events/sensor_event.h | 4 +-- app/include/zmk/sensors.h | 3 +- .../behaviors/behavior_sensor_rotate_common.c | 18 +++++----- app/src/keymap.c | 33 +++++++++---------- app/src/sensors.c | 16 ++++----- 6 files changed, 40 insertions(+), 42 deletions(-) diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index d7e57d02433..bf2843bbe3e 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -33,7 +33,7 @@ typedef int (*behavior_keymap_binding_callback_t)(struct zmk_behavior_binding *b typedef int (*behavior_sensor_keymap_binding_process_callback_t)( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, enum behavior_sensor_binding_process_mode mode); -typedef int (*behavior_sensor_keymap_binding_data_callback_t)( +typedef int (*behavior_sensor_keymap_binding_accept_data_callback_t)( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data channel_data[channel_data_size]); @@ -49,7 +49,7 @@ __subsystem struct behavior_driver_api { behavior_keymap_binding_callback_t binding_convert_central_state_dependent_params; behavior_keymap_binding_callback_t binding_pressed; behavior_keymap_binding_callback_t binding_released; - behavior_sensor_keymap_binding_data_callback_t sensor_binding_data; + behavior_sensor_keymap_binding_accept_data_callback_t sensor_binding_data; behavior_sensor_keymap_binding_process_callback_t sensor_binding_process; }; /** @@ -169,12 +169,12 @@ static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_bi * @retval 0 If successful. * @retval Negative errno code if failure. */ -__syscall int behavior_sensor_keymap_binding_data( +__syscall int behavior_sensor_keymap_binding_accept_data( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data *channel_data); -static inline int z_impl_behavior_sensor_keymap_binding_data( +static inline int z_impl_behavior_sensor_keymap_binding_accept_data( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data *channel_data) { diff --git a/app/include/zmk/events/sensor_event.h b/app/include/zmk/events/sensor_event.h index c5157447dd4..f6d23ac71d9 100644 --- a/app/include/zmk/events/sensor_event.h +++ b/app/include/zmk/events/sensor_event.h @@ -16,12 +16,12 @@ #define ZMK_SENSOR_EVENT_MAX_CHANNELS 1 struct zmk_sensor_event { - uint8_t sensor_position; - size_t channel_data_size; struct zmk_sensor_channel_data channel_data[ZMK_SENSOR_EVENT_MAX_CHANNELS]; int64_t timestamp; + + uint8_t sensor_index; }; ZMK_EVENT_DECLARE(zmk_sensor_event); \ No newline at end of file diff --git a/app/include/zmk/sensors.h b/app/include/zmk/sensors.h index 06fbc63e564..8ac1c283cb6 100644 --- a/app/include/zmk/sensors.h +++ b/app/include/zmk/sensors.h @@ -8,7 +8,6 @@ #include -#define _SENSOR_CHILD_LEN(node) 1 + #define ZMK_KEYMAP_SENSORS_NODE DT_INST(0, zmk_keymap_sensors) #define ZMK_KEYMAP_HAS_SENSORS DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_NODE, okay) #define ZMK_KEYMAP_SENSORS_BY_IDX(idx) DT_PHANDLE_BY_IDX(ZMK_KEYMAP_SENSORS_NODE, sensors, idx) @@ -19,7 +18,7 @@ #define ZMK_KEYMAP_SENSORS_LEN 0 #endif -const struct zmk_sensor_config *zmk_sensors_get_config_at_position(uint8_t sensor_position); +const struct zmk_sensor_config *zmk_sensors_get_config_at_index(uint8_t sensor_index); struct zmk_sensor_config { uint16_t triggers_per_rotation; diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index 0a2b619df81..4ccfea0e4b3 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -21,7 +21,7 @@ int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, const struct sensor_value value = channel_data[0].value; int triggers; - int sensor_position = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); + int sensor_index = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); // Some funky special casing for "old encoder behavior" where ticks where reported in val2 only, // instead of rotational degrees in val1. @@ -29,7 +29,7 @@ int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, if (value.val1 == 0) { triggers = value.val2; } else { - struct sensor_value remainder = data->remainder[sensor_position]; + struct sensor_value remainder = data->remainder[sensor_index]; remainder.val1 += value.val1; remainder.val2 += value.val2; @@ -43,15 +43,15 @@ int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, triggers = remainder.val1 / trigger_degrees; remainder.val1 %= trigger_degrees; - data->remainder[sensor_position] = remainder; + data->remainder[sensor_index] = remainder; } LOG_DBG( "val1: %d, val2: %d, remainder: %d/%d triggers: %d inc keycode 0x%02X dec keycode 0x%02X", - value.val1, value.val2, data->remainder[sensor_position].val1, - data->remainder[sensor_position].val2, triggers, binding->param1, binding->param2); + value.val1, value.val2, data->remainder[sensor_index].val1, + data->remainder[sensor_index].val2, triggers, binding->param1, binding->param2); - data->triggers[sensor_position] = triggers; + data->triggers[sensor_index] = triggers; return 0; } @@ -62,14 +62,14 @@ int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *bindi const struct behavior_sensor_rotate_config *cfg = dev->config; struct behavior_sensor_rotate_data *data = dev->data; - const int sensor_position = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); + const int sensor_index = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); if (mode != BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER) { - data->triggers[sensor_position] = 0; + data->triggers[sensor_index] = 0; return 0; } - int triggers = data->triggers[sensor_position]; + int triggers = data->triggers[sensor_index]; struct zmk_behavior_binding triggered_binding; if (triggers > 0) { diff --git a/app/src/keymap.c b/app/src/keymap.c index c8121176f62..020faf3f2be 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -252,38 +252,37 @@ int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pr } #if ZMK_KEYMAP_HAS_SENSORS -int zmk_keymap_sensor_event(uint8_t sensor_position, size_t channel_data_size, - const struct zmk_sensor_channel_data channel_data[channel_data_size], - int64_t timestamp) { +int zmk_keymap_sensor_event(uint8_t sensor_index, + const struct zmk_sensor_channel_data *channel_data, + size_t channel_data_size, int64_t timestamp) { bool opaque_response = false; for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= 0; layer--) { - struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_position]; - const struct device *behavior; - int ret; + struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_index]; - LOG_DBG("layer: %d sensor_position: %d, binding name: %s", layer, sensor_position, + LOG_DBG("layer: %d sensor_index: %d, binding name: %s", layer, sensor_index, binding->behavior_dev); - behavior = device_get_binding(binding->behavior_dev); - + const struct device *behavior = device_get_binding(binding->behavior_dev); if (!behavior) { - LOG_DBG("No behavior assigned to %d on layer %d", sensor_position, layer); + LOG_DBG("No behavior assigned to %d on layer %d", sensor_index, layer); continue; } struct zmk_behavior_binding_event event = { .layer = layer, - .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_position), + .position = ZMK_VIRTUAL_KEY_POSITION_SENSOR(sensor_index), .timestamp = timestamp, }; - ret = behavior_sensor_keymap_binding_data( - binding, event, zmk_sensors_get_config_at_position(sensor_position), channel_data_size, + int ret = behavior_sensor_keymap_binding_accept_data( + binding, event, zmk_sensors_get_config_at_index(sensor_index), channel_data_size, channel_data); - if (ret > 0) { - LOG_DBG("behavior processing to continue to next layer"); + if (ret < 0) { + LOG_WRN("behavior data accept for behavior %s returned an error (%d). Processing to " + "continue to next layer", + binding->behavior_dev, ret); continue; } @@ -319,8 +318,8 @@ int keymap_listener(const zmk_event_t *eh) { #if ZMK_KEYMAP_HAS_SENSORS const struct zmk_sensor_event *sensor_ev; if ((sensor_ev = as_zmk_sensor_event(eh)) != NULL) { - return zmk_keymap_sensor_event(sensor_ev->sensor_position, sensor_ev->channel_data_size, - sensor_ev->channel_data, sensor_ev->timestamp); + return zmk_keymap_sensor_event(sensor_ev->sensor_index, sensor_ev->channel_data, + sensor_ev->channel_data_size, sensor_ev->timestamp); } #endif /* ZMK_KEYMAP_HAS_SENSORS */ diff --git a/app/src/sensors.c b/app/src/sensors.c index 5f41c4f2f20..3a34ca230f6 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -19,7 +19,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if ZMK_KEYMAP_HAS_SENSORS struct sensors_item_cfg { - uint8_t sensor_position; + uint8_t sensor_index; const struct zmk_sensor_config *config; const struct device *dev; struct sensor_trigger trigger; @@ -57,17 +57,17 @@ static struct sensors_item_cfg sensors[] = {LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENS static ATOMIC_DEFINE(pending_sensors, ZMK_KEYMAP_SENSORS_LEN); -const struct zmk_sensor_config *zmk_sensors_get_config_at_position(uint8_t sensor_position) { - if (sensor_position > ARRAY_SIZE(configs)) { +const struct zmk_sensor_config *zmk_sensors_get_config_at_index(uint8_t sensor_index) { + if (sensor_index > ARRAY_SIZE(configs)) { return NULL; } - return &configs[sensor_position]; + return &configs[sensor_index]; } -static void trigger_sensor_data_for_position(uint32_t sensor_position) { +static void trigger_sensor_data_for_position(uint32_t sensor_index) { int err; - const struct sensors_item_cfg *item = &sensors[sensor_position]; + const struct sensors_item_cfg *item = &sensors[sensor_index]; err = sensor_sample_fetch(item->dev); if (err) { @@ -84,7 +84,7 @@ static void trigger_sensor_data_for_position(uint32_t sensor_position) { } ZMK_EVENT_RAISE(new_zmk_sensor_event( - (struct zmk_sensor_event){.sensor_position = item->sensor_position, + (struct zmk_sensor_event){.sensor_index = item->sensor_index, .channel_data = {(struct zmk_sensor_channel_data){ .value = value, .channel = item->trigger.chan}}, .timestamp = k_uptime_get()})); @@ -122,7 +122,7 @@ static void zmk_sensors_trigger_handler(const struct device *dev, static void zmk_sensors_init_item(uint8_t i) { LOG_DBG("Init sensor at index %d", i); - sensors[i].sensor_position = i; + sensors[i].sensor_index = i; if (!sensors[i].dev) { LOG_DBG("No local device for %d", i); From 753802cd79ce12d2e5d86c72ced3a4cc76fe4564 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 18 Jun 2023 05:59:31 +0000 Subject: [PATCH 0708/1130] fix(sensors): Clean ups based on code review. --- app/Kconfig | 17 +++++------------ app/include/drivers/behavior.h | 7 ++++--- app/src/behaviors/behavior_sensor_rotate.c | 2 +- .../behaviors/behavior_sensor_rotate_common.c | 9 ++++----- .../behaviors/behavior_sensor_rotate_common.h | 9 ++++----- app/src/behaviors/behavior_sensor_rotate_var.c | 2 +- app/src/sensors.c | 9 +++++++-- 7 files changed, 26 insertions(+), 29 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 9c0606b02fc..92641c14ed0 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -194,18 +194,6 @@ rsource "src/split/Kconfig" #Basic Keyboard Setup endmenu -menu "Encoders" - -config ZMK_ENCODERS_DEFAULT_TRIGGERS_PER_ROTATION - int "Default behavior triggers per rotation" - help - Unless overridden for a specific behavior in the keymap/devicetree, this value - determines how many times to trigger the bound behavior per full rotation. - For tactile encoders with detents, this usually should match the number of - detents per rotation of the encoder. - default 30 - -endmenu menu "Display/LED Options" rsource "src/display/Kconfig" @@ -548,6 +536,11 @@ if ZMK_KEYMAP_SENSORS config ZMK_KEYMAP_SENSORS_DEFAULT_TRIGGERS_PER_ROTATION int "Default triggers per rotation" + help + Unless overridden for a sensor in the board/shield/devicetree, this value + determines how many times to trigger the bound behavior per full rotation. + For tactile encoders with detents, this usually should match the number of + detents per rotation of the encoder. default 20 endif # ZMK_KEYMAP_SENSORS diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index bf2843bbe3e..066cc723ece 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -49,7 +49,7 @@ __subsystem struct behavior_driver_api { behavior_keymap_binding_callback_t binding_convert_central_state_dependent_params; behavior_keymap_binding_callback_t binding_pressed; behavior_keymap_binding_callback_t binding_released; - behavior_sensor_keymap_binding_accept_data_callback_t sensor_binding_data; + behavior_sensor_keymap_binding_accept_data_callback_t sensor_binding_accept_data; behavior_sensor_keymap_binding_process_callback_t sensor_binding_process; }; /** @@ -186,11 +186,12 @@ static inline int z_impl_behavior_sensor_keymap_binding_accept_data( const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; - if (api->sensor_binding_data == NULL) { + if (api->sensor_binding_accept_data == NULL) { return -ENOTSUP; } - return api->sensor_binding_data(binding, event, sensor_config, channel_data_size, channel_data); + return api->sensor_binding_accept_data(binding, event, sensor_config, channel_data_size, + channel_data); } /** diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c index 3b5bef62183..822bc206b02 100644 --- a/app/src/behaviors/behavior_sensor_rotate.c +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -13,7 +13,7 @@ #include "behavior_sensor_rotate_common.h" static const struct behavior_driver_api behavior_sensor_rotate_driver_api = { - .sensor_binding_data = zmk_behavior_sensor_rotate_common_data, + .sensor_binding_accept_data = zmk_behavior_sensor_rotate_common_accept_data, .sensor_binding_process = zmk_behavior_sensor_rotate_common_process}; static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index 4ccfea0e4b3..eea7bf48476 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -11,11 +11,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, - struct zmk_behavior_binding_event event, - const struct zmk_sensor_config *sensor_config, - size_t channel_data_size, - const struct zmk_sensor_channel_data *channel_data) { +int zmk_behavior_sensor_rotate_common_accept_data( + struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data) { const struct device *dev = device_get_binding(binding->behavior_dev); struct behavior_sensor_rotate_data *data = dev->data; diff --git a/app/src/behaviors/behavior_sensor_rotate_common.h b/app/src/behaviors/behavior_sensor_rotate_common.h index d9d4d855dfa..d354b67937c 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.h +++ b/app/src/behaviors/behavior_sensor_rotate_common.h @@ -20,11 +20,10 @@ struct behavior_sensor_rotate_data { int triggers[ZMK_KEYMAP_SENSORS_LEN]; }; -int zmk_behavior_sensor_rotate_common_data(struct zmk_behavior_binding *binding, - struct zmk_behavior_binding_event event, - const struct zmk_sensor_config *sensor_config, - size_t channel_data_size, - const struct zmk_sensor_channel_data *channel_data); +int zmk_behavior_sensor_rotate_common_accept_data( + struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, + const struct zmk_sensor_config *sensor_config, size_t channel_data_size, + const struct zmk_sensor_channel_data *channel_data); int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, enum behavior_sensor_binding_process_mode mode); \ No newline at end of file diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c index 3c2373b0048..e6d20cab9d1 100644 --- a/app/src/behaviors/behavior_sensor_rotate_var.c +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -13,7 +13,7 @@ #include "behavior_sensor_rotate_common.h" static const struct behavior_driver_api behavior_sensor_rotate_var_driver_api = { - .sensor_binding_data = zmk_behavior_sensor_rotate_common_data, + .sensor_binding_accept_data = zmk_behavior_sensor_rotate_common_accept_data, .sensor_binding_process = zmk_behavior_sensor_rotate_common_process}; static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; }; diff --git a/app/src/sensors.c b/app/src/sensors.c index 3a34ca230f6..e339afe0437 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -19,10 +19,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if ZMK_KEYMAP_HAS_SENSORS struct sensors_item_cfg { - uint8_t sensor_index; const struct zmk_sensor_config *config; const struct device *dev; struct sensor_trigger trigger; + uint8_t sensor_index; }; #define _SENSOR_ITEM(idx, node) \ @@ -43,7 +43,11 @@ struct sensors_item_cfg { CONFIG_ZMK_KEYMAP_SENSORS_DEFAULT_TRIGGERS_PER_ROTATION)) \ } #define SENSOR_CHILD_DEFAULTS(idx, arg) \ - { .triggers_per_rotation = DT_PROP_OR(ZMK_KEYMAP_SENSORS_NODE, triggers_per_rotation, 20) } + { \ + .triggers_per_rotation = \ + DT_PROP_OR(ZMK_KEYMAP_SENSORS_NODE, triggers_per_rotation, \ + CONFIG_ZMK_KEYMAP_SENSORS_DEFAULT_TRIGGERS_PER_ROTATION) \ + } static struct zmk_sensor_config configs[] = { #if ZMK_KEYMAP_SENSORS_CHILD_COUNT > 0 @@ -85,6 +89,7 @@ static void trigger_sensor_data_for_position(uint32_t sensor_index) { ZMK_EVENT_RAISE(new_zmk_sensor_event( (struct zmk_sensor_event){.sensor_index = item->sensor_index, + .channel_data_size = 1, .channel_data = {(struct zmk_sensor_channel_data){ .value = value, .channel = item->trigger.chan}}, .timestamp = k_uptime_get()})); From 5763558a02154ab599775c770fcf954931816e52 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 30 May 2023 02:38:28 +0000 Subject: [PATCH 0709/1130] feat(blog): Add post about sensor refactor. * Document changed configuration, support for other Zephyr drivers, next steps. Co-authored-by: Cem Aksoylar --- docs/blog/2023-06-18-encoder-refactors.md | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 docs/blog/2023-06-18-encoder-refactors.md diff --git a/docs/blog/2023-06-18-encoder-refactors.md b/docs/blog/2023-06-18-encoder-refactors.md new file mode 100644 index 00000000000..26f9cee8176 --- /dev/null +++ b/docs/blog/2023-06-18-encoder-refactors.md @@ -0,0 +1,119 @@ +--- +title: "Major Encoder Refactor" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [firmware, zephyr, sensors, encoders] +--- + +Today, we merged a significant change to the low level sensor code that is used to support encoders. In particular, +this paves the way for completing the work on supporting split peripheral sensors/encoders, and other future sensors +like pointing devices. + +As part of the work, backwards compatibility for existing shields has been retained, but only for a grace period to allow out-of-tree shields to move to the new approach for encoders. + +Special thanks to [joelspadin] for the _thorough_ code review and testing throughout the development of the refactor. + +## Summary of Changes + +The following items have been merged: + +1. Split configuration of hardware details, and behavior configuration to allow more flexible functionality of sensors/encoders, in particular linear encoders that lack detents/"clicks" as they rotate. +2. Support for upstream Zephyr sensor drivers, including the NRFX QDEC driver that can be used on nRF52 based keyboards. +3. Sensor data handling changes that pave the way for split sensor handling easily. + +## Configuration Changes + +The major changes to configuration in the devicetree files relates to how the number of steps/triggers for a given encoder are set. In particular, the number of pulses/steps for a given encoder is configured first, allowing ZMK to determine the exact angular degrees of change that is represented by a single pulse on the data lines to that encoder. + +Once that angular degrees mapping is completed, now independently there is a configuration setting to control how many triggers of the behavior in the keymap should occur for each full rotation of the sensor. Another way to think of this is "how many degrees of rotation results in a triggering of the sensor behavior in your keymap layer". + +Splitting these two parts of the encoder configuration allows greater flexibility, and fine grained control of encoder behavior for linear encoders that don't have fixed detents. + +### Old Configuration + +Previously, an encoder configuration looked like: + +``` + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; +``` + +Here, the `resolution` property was used to indicate how many encoder pulses should trigger the sensor behavior one time. Next, the encoder is selected in the sensors node: + +``` + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +``` + +That was the entirety of the configuration for encoders. + +### New Configuration + +``` + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <80>; + }; +``` + +Here, the `steps` property is now used to indicate how many encoder pulses there are in a single complete rotation of the encoder. Next, the encoder is selected in the sensors node as before, but an additional configuration is used to indicate how many times the encoder should trigger the behavior in your keymap per rotation: + +``` + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; + }; +``` + +For tactile encoders that have detents, the `triggers-per-rotation` would match the number of detents on the encoder. For linear encoders, the value can be chosen to suit your needs. + +## Zephyr Sensor Drivers + +The configuration changes bring ZMK's code in line with how upstream Zephyr sensor drivers handle rotations. This has the added advantage of allowing us to leverage other sensor drivers. On Nordic MCUs, like nRF52840, the NRFX QDEC driver can be used, for example: + +``` +&pinctrl { + qdec_default: qdec_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; +}; + +// Set up the QDEC hardware based driver and give it the same label as the deleted node. +encoder: &qdec0 { + status = "okay"; + led-pre = <0>; + steps = <80>; + pinctrl-0 = <&qdec_default>; + pinctrl-names = "default"; +}; +``` + +The NRFX QDEC driver has the advantage of supporting optical encoders as well, and although it polls, it does so in hardware without waking the MCU core; initial basic power profiling is promising. + +## Split Sensor/Encoder Support + +In addition to the refactors for splitting the configuration, the changes merged included refactors designed to simplify and move forward with the long outstanding feature of supporting encoders on the peripheral side of split keyboards. That work is planned as a follow up. + +## Deprecation + +The old configuration will be supported for a period of one month, and then removed, giving users a grace period to complete the migration to the new separated configuration. + +[petejohanson]: https://github.com/petejohanson +[joelspadin]: https://github.com/joelspadin From e686fce4d917b708da7f2baba4115043d3f0deab Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Fri, 19 May 2023 18:41:08 -0400 Subject: [PATCH 0710/1130] refactor(split): allow central to define connection parameters Fixes #1614 --- app/src/split/bluetooth/Kconfig | 17 +++++++++++++++-- app/src/split/bluetooth/central.c | 4 +++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index e2c8d5c3395..0610b667a26 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -33,6 +33,18 @@ config ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE int "Max number of behavior run events to queue to send to the peripheral(s)" default 5 +config ZMK_SPLIT_BLE_PREF_INT + int "Connection interval to use for split central/peripheral connection" + default 6 + +config ZMK_SPLIT_BLE_PREF_LATENCY + int "Latency to use for split central/peripheral connection" + default 30 + +config ZMK_SPLIT_BLE_PREF_TIMEOUT + int "Supervision timeout to use for split central/peripheral connection" + default 400 + endif # ZMK_SPLIT_ROLE_CENTRAL if !ZMK_SPLIT_ROLE_CENTRAL @@ -58,8 +70,9 @@ config BT_MAX_PAIRED config BT_MAX_CONN default 1 -config BT_PERIPHERAL_PREF_MAX_INT - default 6 +# Allow central to specify connection parameters. +config BT_GAP_AUTO_UPDATE_CONN_PARAMS + default n #!ZMK_SPLIT_ROLE_CENTRAL endif diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 53e61be621a..147760ffae7 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -383,7 +383,9 @@ static bool split_central_eir_found(const bt_addr_le_t *addr) { struct peripheral_slot *slot = &peripherals[slot_idx]; LOG_DBG("Initiating new connnection"); - struct bt_le_conn_param *param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); + struct bt_le_conn_param *param = + BT_LE_CONN_PARAM(CONFIG_ZMK_SPLIT_BLE_PREF_INT, CONFIG_ZMK_SPLIT_BLE_PREF_INT, + CONFIG_ZMK_SPLIT_BLE_PREF_LATENCY, CONFIG_ZMK_SPLIT_BLE_PREF_TIMEOUT); err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &slot->conn); if (err < 0) { LOG_ERR("Create conn failed (err %d) (create conn? 0x%04x)", err, BT_HCI_OP_LE_CREATE_CONN); From 805dd4a53bc9ff7fe1f7eb5c9ea332a9affbc5f9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 8 Apr 2022 15:38:46 +0000 Subject: [PATCH 0711/1130] feat(behaviors): Support parameterized macros. * Add two new compatibles for macros that take one or two parameters when bound in a keymap. * Use `¯o_param_1to1`, `¯o_param_1to2`, `¯o_param_2to1`, and `¯o_param_2to2` control entries in the bindings for the macro to have the next binding entry have it's values substituted. Co-authored-by: Cem Aksoylar --- app/CMakeLists.txt | 2 +- app/Kconfig.behaviors | 7 +- app/dts/behaviors/macros.dtsi | 55 +++++++-- app/dts/bindings/behaviors/macro_base.yaml | 13 +++ .../zmk,behavior-macro-one-param.yaml | 8 ++ .../zmk,behavior-macro-two-param.yaml | 8 ++ .../behaviors/zmk,behavior-macro.yaml | 13 +-- .../bindings/macros/zmk,macro-param-1to1.yaml | 8 ++ .../bindings/macros/zmk,macro-param-1to2.yaml | 8 ++ .../bindings/macros/zmk,macro-param-2to1.yaml | 8 ++ .../bindings/macros/zmk,macro-param-2to2.yaml | 8 ++ app/src/behaviors/behavior_macro.c | 104 +++++++++++++----- .../place-holder-parameters/events.patterns | 1 + .../keycode_events.snapshot | 16 +++ .../native_posix_64.keymap | 63 +++++++++++ docs/docs/behaviors/macros.md | 40 +++++++ 16 files changed, 312 insertions(+), 50 deletions(-) create mode 100644 app/dts/bindings/behaviors/macro_base.yaml create mode 100644 app/dts/bindings/behaviors/zmk,behavior-macro-one-param.yaml create mode 100644 app/dts/bindings/behaviors/zmk,behavior-macro-two-param.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-param-1to1.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-param-1to2.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-param-2to1.yaml create mode 100644 app/dts/bindings/macros/zmk,macro-param-2to2.yaml create mode 100644 app/tests/macros/place-holder-parameters/events.patterns create mode 100644 app/tests/macros/place-holder-parameters/keycode_events.snapshot create mode 100644 app/tests/macros/place-holder-parameters/native_posix_64.keymap diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ea3b8f73364..4c1c63c2cfa 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -43,7 +43,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) target_sources(app PRIVATE src/behaviors/behavior_key_repeat.c) - target_sources(app PRIVATE src/behaviors/behavior_macro.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MACRO app PRIVATE src/behaviors/behavior_macro.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) target_sources(app PRIVATE src/behaviors/behavior_outputs.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 17850eae2ff..9e4a82b06e7 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -21,4 +21,9 @@ config ZMK_BEHAVIOR_SENSOR_ROTATE_VAR bool default y depends on DT_HAS_ZMK_BEHAVIOR_SENSOR_ROTATE_VAR_ENABLED - select ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON \ No newline at end of file + select ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON + +config ZMK_BEHAVIOR_MACRO + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_MACRO_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_ONE_PARAM_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_TWO_PARAM_ENABLED \ No newline at end of file diff --git a/app/dts/behaviors/macros.dtsi b/app/dts/behaviors/macros.dtsi index 757c046edd7..36b4a8d33f3 100644 --- a/app/dts/behaviors/macros.dtsi +++ b/app/dts/behaviors/macros.dtsi @@ -4,16 +4,33 @@ * SPDX-License-Identifier: MIT */ +#define MACRO_PLACEHOLDER 0 #define ZMK_MACRO_STRINGIFY(x) #x #define ZMK_MACRO(name,...) \ - name: name { \ - label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ - compatible = "zmk,behavior-macro"; \ - #binding-cells = <0>; \ - __VA_ARGS__ \ - }; +name: name { \ + label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ + compatible = "zmk,behavior-macro"; \ + #binding-cells = <0>; \ + __VA_ARGS__ \ +}; - / { +#define ZMK_MACRO1(name,...) \ +name: name { \ + label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ + compatible = "zmk,behavior-macro-one-param"; \ + #binding-cells = <1>; \ + __VA_ARGS__ \ +}; + +#define ZMK_MACRO2(name,...) \ +name: name { \ + label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ + compatible = "zmk,behavior-macro-two-param"; \ + #binding-cells = <2>; \ + __VA_ARGS__ \ +}; + +/ { behaviors { macro_tap: macro_control_mode_tap { compatible = "zmk,macro-control-mode-tap"; @@ -50,5 +67,29 @@ label = "MAC_WAIT_REL"; #binding-cells = <0>; }; + + macro_param_1to1: macro_param_1to1 { + compatible = "zmk,macro-param-1to1"; + label = "MAC_PARAM_1TO1"; + #binding-cells = <0>; + }; + + macro_param_1to2: macro_param_1to2 { + compatible = "zmk,macro-param-1to2"; + label = "MAC_PARAM_1TO2"; + #binding-cells = <0>; + }; + + macro_param_2to1: macro_param_2to1 { + compatible = "zmk,macro-param-2to1"; + label = "MAC_PARAM_2TO1"; + #binding-cells = <0>; + }; + + macro_param_2to2: macro_param_2to2 { + compatible = "zmk,macro-param-2to2"; + label = "MAC_PARAM_2TO2"; + #binding-cells = <0>; + }; }; }; diff --git a/app/dts/bindings/behaviors/macro_base.yaml b/app/dts/bindings/behaviors/macro_base.yaml new file mode 100644 index 00000000000..236ee33d3b2 --- /dev/null +++ b/app/dts/bindings/behaviors/macro_base.yaml @@ -0,0 +1,13 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +properties: + bindings: + type: phandle-array + required: true + wait-ms: + type: int + description: The default time to wait (in milliseconds) before triggering the next behavior in the macro bindings list. + tap-ms: + type: int + description: The default time to wait (in milliseconds) between the press and release events on a tapped macro behavior binding diff --git a/app/dts/bindings/behaviors/zmk,behavior-macro-one-param.yaml b/app/dts/bindings/behaviors/zmk,behavior-macro-one-param.yaml new file mode 100644 index 00000000000..4fe5a2fba1e --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-macro-one-param.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Behavior + +compatible: "zmk,behavior-macro-one-param" + +include: [one_param.yaml, macro_base.yaml] diff --git a/app/dts/bindings/behaviors/zmk,behavior-macro-two-param.yaml b/app/dts/bindings/behaviors/zmk,behavior-macro-two-param.yaml new file mode 100644 index 00000000000..ab6e32b48ec --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-macro-two-param.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Behavior + +compatible: "zmk,behavior-macro-two-param" + +include: [two_param.yaml, macro_base.yaml] diff --git a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml index e6f6757d49a..035dd943542 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-macro.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-macro.yaml @@ -5,15 +5,4 @@ description: Macro Behavior compatible: "zmk,behavior-macro" -include: zero_param.yaml - -properties: - bindings: - type: phandle-array - required: true - wait-ms: - type: int - description: The default time to wait (in milliseconds) before triggering the next behavior in the macro bindings list. - tap-ms: - type: int - description: The default time to wait (in milliseconds) between the press and release events on a tapped macro behavior binding +include: [zero_param.yaml, macro_base.yaml] diff --git a/app/dts/bindings/macros/zmk,macro-param-1to1.yaml b/app/dts/bindings/macros/zmk,macro-param-1to1.yaml new file mode 100644 index 00000000000..ae0d54dfbeb --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-param-1to1.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Parameter One Substituted Into Next Binding's First Parameter + +compatible: "zmk,macro-param-1to1" + +include: zero_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-param-1to2.yaml b/app/dts/bindings/macros/zmk,macro-param-1to2.yaml new file mode 100644 index 00000000000..1018526cbea --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-param-1to2.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Parameter One Substituted Into Next Binding's Second Parameter + +compatible: "zmk,macro-param-1to2" + +include: zero_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-param-2to1.yaml b/app/dts/bindings/macros/zmk,macro-param-2to1.yaml new file mode 100644 index 00000000000..3ebf8fc905d --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-param-2to1.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Parameter Two Substituted Into Next Binding's First Parameter + +compatible: "zmk,macro-param-2to1" + +include: zero_param.yaml diff --git a/app/dts/bindings/macros/zmk,macro-param-2to2.yaml b/app/dts/bindings/macros/zmk,macro-param-2to2.yaml new file mode 100644 index 00000000000..e3ebe40fb3a --- /dev/null +++ b/app/dts/bindings/macros/zmk,macro-param-2to2.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Macro Parameter Two Substituted Into Next Binding's Second Parameter + +compatible: "zmk,macro-param-2to2" + +include: zero_param.yaml diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index e84f1fc89bb..c47284531a7 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -4,8 +4,6 @@ * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT zmk_behavior_macro - #include #include #include @@ -15,20 +13,22 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - enum behavior_macro_mode { MACRO_MODE_TAP, MACRO_MODE_PRESS, MACRO_MODE_RELEASE, }; +enum param_source { PARAM_SOURCE_BINDING, PARAM_SOURCE_MACRO_1ST, PARAM_SOURCE_MACRO_2ND }; + struct behavior_macro_trigger_state { uint32_t wait_ms; uint32_t tap_ms; enum behavior_macro_mode mode; uint16_t start_index; uint16_t count; + enum param_source param1_source; + enum param_source param2_source; }; struct behavior_macro_state { @@ -52,6 +52,11 @@ struct behavior_macro_config { #define WAIT_TIME DT_PROP(DT_INST(0, zmk_macro_control_wait_time), label) #define WAIT_REL DT_PROP(DT_INST(0, zmk_macro_pause_for_release), label) +#define P1TO1 DT_PROP(DT_INST(0, zmk_macro_param_1to1), label) +#define P1TO2 DT_PROP(DT_INST(0, zmk_macro_param_1to2), label) +#define P2TO1 DT_PROP(DT_INST(0, zmk_macro_param_2to1), label) +#define P2TO2 DT_PROP(DT_INST(0, zmk_macro_param_2to2), label) + #define ZM_IS_NODE_MATCH(a, b) (strcmp(a, b) == 0) #define IS_TAP_MODE(dev) ZM_IS_NODE_MATCH(dev, TAP_MODE) #define IS_PRESS_MODE(dev) ZM_IS_NODE_MATCH(dev, PRESS_MODE) @@ -61,6 +66,11 @@ struct behavior_macro_config { #define IS_WAIT_TIME(dev) ZM_IS_NODE_MATCH(dev, WAIT_TIME) #define IS_PAUSE(dev) ZM_IS_NODE_MATCH(dev, WAIT_REL) +#define IS_P1TO1(dev) ZM_IS_NODE_MATCH(dev, P1TO1) +#define IS_P1TO2(dev) ZM_IS_NODE_MATCH(dev, P1TO2) +#define IS_P2TO1(dev) ZM_IS_NODE_MATCH(dev, P2TO1) +#define IS_P2TO2(dev) ZM_IS_NODE_MATCH(dev, P2TO2) + static bool handle_control_binding(struct behavior_macro_trigger_state *state, const struct zmk_behavior_binding *binding) { if (IS_TAP_MODE(binding->behavior_dev)) { @@ -78,6 +88,18 @@ static bool handle_control_binding(struct behavior_macro_trigger_state *state, } else if (IS_WAIT_TIME(binding->behavior_dev)) { state->wait_ms = binding->param1; LOG_DBG("macro wait time set: %d", state->wait_ms); + } else if (IS_P1TO1(binding->behavior_dev)) { + state->param1_source = PARAM_SOURCE_MACRO_1ST; + LOG_DBG("macro param: 1to1"); + } else if (IS_P1TO2(binding->behavior_dev)) { + state->param2_source = PARAM_SOURCE_MACRO_1ST; + LOG_DBG("macro param: 1to2"); + } else if (IS_P2TO1(binding->behavior_dev)) { + state->param1_source = PARAM_SOURCE_MACRO_2ND; + LOG_DBG("macro param: 2to1"); + } else if (IS_P2TO2(binding->behavior_dev)) { + state->param2_source = PARAM_SOURCE_MACRO_2ND; + LOG_DBG("macro param: 2to2"); } else { return false; } @@ -110,21 +132,47 @@ static int behavior_macro_init(const struct device *dev) { return 0; }; +static uint32_t select_param(enum param_source param_source, uint32_t source_binding, + const struct zmk_behavior_binding *macro_binding) { + switch (param_source) { + case PARAM_SOURCE_MACRO_1ST: + return macro_binding->param1; + case PARAM_SOURCE_MACRO_2ND: + return macro_binding->param2; + default: + return source_binding; + } +}; + +static void replace_params(struct behavior_macro_trigger_state *state, + struct zmk_behavior_binding *binding, + const struct zmk_behavior_binding *macro_binding) { + binding->param1 = select_param(state->param1_source, binding->param1, macro_binding); + binding->param2 = select_param(state->param2_source, binding->param2, macro_binding); + + state->param1_source = PARAM_SOURCE_BINDING; + state->param2_source = PARAM_SOURCE_BINDING; +} + static void queue_macro(uint32_t position, const struct zmk_behavior_binding bindings[], - struct behavior_macro_trigger_state state) { + struct behavior_macro_trigger_state state, + const struct zmk_behavior_binding *macro_binding) { LOG_DBG("Iterating macro bindings - starting: %d, count: %d", state.start_index, state.count); for (int i = state.start_index; i < state.start_index + state.count; i++) { if (!handle_control_binding(&state, &bindings[i])) { + struct zmk_behavior_binding binding = bindings[i]; + replace_params(&state, &binding, macro_binding); + switch (state.mode) { case MACRO_MODE_TAP: - zmk_behavior_queue_add(position, bindings[i], true, state.tap_ms); - zmk_behavior_queue_add(position, bindings[i], false, state.wait_ms); + zmk_behavior_queue_add(position, binding, true, state.tap_ms); + zmk_behavior_queue_add(position, binding, false, state.wait_ms); break; case MACRO_MODE_PRESS: - zmk_behavior_queue_add(position, bindings[i], true, state.wait_ms); + zmk_behavior_queue_add(position, binding, true, state.wait_ms); break; case MACRO_MODE_RELEASE: - zmk_behavior_queue_add(position, bindings[i], false, state.wait_ms); + zmk_behavior_queue_add(position, binding, false, state.wait_ms); break; default: LOG_ERR("Unknown macro mode: %d", state.mode); @@ -145,7 +193,7 @@ static int on_macro_binding_pressed(struct zmk_behavior_binding *binding, .start_index = 0, .count = state->press_bindings_count}; - queue_macro(event.position, cfg->bindings, trigger_state); + queue_macro(event.position, cfg->bindings, trigger_state, binding); return ZMK_BEHAVIOR_OPAQUE; } @@ -156,7 +204,7 @@ static int on_macro_binding_released(struct zmk_behavior_binding *binding, const struct behavior_macro_config *cfg = dev->config; struct behavior_macro_state *state = dev->data; - queue_macro(event.position, cfg->bindings, state->release_state); + queue_macro(event.position, cfg->bindings, state->release_state, binding); return ZMK_BEHAVIOR_OPAQUE; } @@ -166,22 +214,20 @@ static const struct behavior_driver_api behavior_macro_driver_api = { .binding_released = on_macro_binding_released, }; -#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, DT_DRV_INST(drv_inst)) - #define TRANSFORMED_BEHAVIORS(n) \ - {LISTIFY(DT_PROP_LEN(DT_DRV_INST(n), bindings), BINDING_WITH_COMMA, (, ), n)}, - -#define MACRO_INST(n) \ - static struct behavior_macro_state behavior_macro_state_##n = {}; \ - static struct behavior_macro_config behavior_macro_config_##n = { \ - .default_wait_ms = DT_INST_PROP_OR(n, wait_ms, CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS), \ - .default_tap_ms = DT_INST_PROP_OR(n, tap_ms, CONFIG_ZMK_MACRO_DEFAULT_TAP_MS), \ - .count = DT_INST_PROP_LEN(n, bindings), \ - .bindings = TRANSFORMED_BEHAVIORS(n)}; \ - DEVICE_DT_INST_DEFINE(n, behavior_macro_init, NULL, &behavior_macro_state_##n, \ - &behavior_macro_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); - -DT_INST_FOREACH_STATUS_OKAY(MACRO_INST) - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ + {LISTIFY(DT_PROP_LEN(n, bindings), ZMK_KEYMAP_EXTRACT_BINDING, (, ), n)}, + +#define MACRO_INST(inst) \ + static struct behavior_macro_state behavior_macro_state_##inst = {}; \ + static struct behavior_macro_config behavior_macro_config_##inst = { \ + .default_wait_ms = DT_PROP_OR(inst, wait_ms, CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS), \ + .default_tap_ms = DT_PROP_OR(inst, tap_ms, CONFIG_ZMK_MACRO_DEFAULT_TAP_MS), \ + .count = DT_PROP_LEN(inst, bindings), \ + .bindings = TRANSFORMED_BEHAVIORS(inst)}; \ + DEVICE_DT_DEFINE(inst, behavior_macro_init, NULL, &behavior_macro_state_##inst, \ + &behavior_macro_config_##inst, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); + +DT_FOREACH_STATUS_OKAY(zmk_behavior_macro, MACRO_INST) +DT_FOREACH_STATUS_OKAY(zmk_behavior_macro_one_param, MACRO_INST) +DT_FOREACH_STATUS_OKAY(zmk_behavior_macro_two_param, MACRO_INST) diff --git a/app/tests/macros/place-holder-parameters/events.patterns b/app/tests/macros/place-holder-parameters/events.patterns new file mode 100644 index 00000000000..3c9d3f838c6 --- /dev/null +++ b/app/tests/macros/place-holder-parameters/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/macros/place-holder-parameters/keycode_events.snapshot b/app/tests/macros/place-holder-parameters/keycode_events.snapshot new file mode 100644 index 00000000000..f198a49b81e --- /dev/null +++ b/app/tests/macros/place-holder-parameters/keycode_events.snapshot @@ -0,0 +1,16 @@ +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x38 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x38 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x34 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x34 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x34 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x34 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/place-holder-parameters/native_posix_64.keymap b/app/tests/macros/place-holder-parameters/native_posix_64.keymap new file mode 100644 index 00000000000..59d78b5e8fb --- /dev/null +++ b/app/tests/macros/place-holder-parameters/native_posix_64.keymap @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + macros { + slash_macro: slash_macro { + #binding-cells = <2>; + label = "ZM_SLASH"; + compatible = "zmk,behavior-macro-two-param"; + wait-ms = <40>; + tap-ms = <40>; + bindings = < + ¯o_param_1to1 &kp MACRO_PLACEHOLDER + &kp SLASH + ¯o_param_2to1 &kp MACRO_PLACEHOLDER>; + }; + + to_second_macro: to_second_macro { + #binding-cells = <2>; + label = "ZMK_TO_SECOND"; + compatible = "zmk,behavior-macro-two-param"; + wait-ms = <40>; + tap-ms = <40>; + bindings = < + ¯o_param_1to2 &mt LSHIFT MACRO_PLACEHOLDER + ¯o_param_2to2 &mt RSHIFT MACRO_PLACEHOLDER>; + }; + + quote_letter_macro: quote_letter_macro { + #binding-cells = <1>; + label = "ZMK_QLET"; + compatible = "zmk,behavior-macro-one-param"; + wait-ms = <40>; + tap-ms = <40>; + bindings = < + &kp QUOT + ¯o_param_1to1 &kp MACRO_PLACEHOLDER + &kp QUOT>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &slash_macro A B "e_letter_macro B + &to_second_macro E F &kp C>; + }; + }; +}; + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 1628e0cb554..40c333a9066 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -49,6 +49,22 @@ For use cases involving sending a single keycode with modifiers, for instance ct with [modifier functions](../codes/modifiers.mdx#modifier-functions) can be used instead of a macro. ::: +### Parameterized Macros + +Macros can also be "parameterized", allowing them to be bound in your keymap with unique values passed into them, e.g.: + +``` + raise_layer { + bindings = <&my_cool_macro A> + }; +``` + +When defining a parameterized macro, a different `compatible` value will be used depending on how many parameters are passed into it: + +- `zmk,behavior-macro` - a parameter that takes no parameters. +- `zmk,behavior-macro-one-param` - a parameter that takes one parameter when used. +- `zmk,behavior-macro-two-param` - a parameter that takes two parameters when used. + ### Bindings Like [hold-taps](/docs/behaviors/hold-tap), macros are created by composing other behaviors, and any of those behaviors can @@ -67,6 +83,30 @@ bindings There are a set of special macro controls that can be included in the `bindings` list to modify the way the macro is processed. +### Parameters + +When creating a macro that takes parameter(s), there are macro controls that change when the parameters passed to the macro are used +within the macro itself. All of the controls are "one shot" and will change how the passed in parameters are used for the very next non-macro control behavior in the `bindings` list of the macro. + +For example, to pass the first parameter from the macro into a `&kp` used in the macro, you would use: + +``` +bindings + = <¯o_param_1to1> + , <&kp MACRO_PLACEHOLDER> + ; +``` + +Because `kp` takes one parameter, you can't simply make the second entry `<&kp>` in the `bindings` list. Whatever value you do pass in will be replaced when the macro is triggered, so you can put _any_ value there, e.g. `0`, `A` keycode, etc. To make it very obvious that the parameter there is not actually going to be used, you can use `MACRO_PLACEHOLDER` which is simply an alias for `0`. + +The available parameter controls are: + +- `¯o_param_1to1` - pass the first parameter of the macro into the first parameter of the next behavior in the `bindings` list. +- `¯o_param_1to2` - pass the first parameter of the macro into the second parameter of the next behavior in the `bindings` list. + +* `¯o_param_2to1` - pass the second parameter of the macro into the first parameter of the next behavior in the `bindings` list. +* `¯o_param_2to2` - pass the second parameter of the macro into the second parameter of the next behavior in the `bindings` list. + ### Binding Activation Mode Bindings in a macro are activated differently, depending on the current "activation mode" of the macro. From b259d5a22e423458b94bd1aba70fd62f327528c0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Jun 2023 22:23:06 +0000 Subject: [PATCH 0712/1130] fix(sensors): Sensor rotate behavior fix for layers. * Properly return transparent value when processing mode for higher disabled layers means the processing is ignored. --- app/src/behaviors/behavior_sensor_rotate_common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index eea7bf48476..586cac3fdf2 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -65,7 +65,7 @@ int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *bindi if (mode != BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER) { data->triggers[sensor_index] = 0; - return 0; + return ZMK_BEHAVIOR_TRANSPARENT; } int triggers = data->triggers[sensor_index]; @@ -83,7 +83,7 @@ int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *bindi triggered_binding.param1 = binding->param2; } } else { - return 0; + return ZMK_BEHAVIOR_TRANSPARENT; } LOG_DBG("Sensor binding: %s", binding->behavior_dev); From 3772ecb04e777ec4d592711427211cfac26a712d Mon Sep 17 00:00:00 2001 From: Kyle McCreery Date: Wed, 5 Jul 2023 12:50:19 -0400 Subject: [PATCH 0713/1130] fix(boards): Update pillbug_defconfig to enable pinctrl --- app/boards/arm/pillbug/pillbug_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/boards/arm/pillbug/pillbug_defconfig b/app/boards/arm/pillbug/pillbug_defconfig index d71d9f62626..9781cf995cc 100644 --- a/app/boards/arm/pillbug/pillbug_defconfig +++ b/app/boards/arm/pillbug/pillbug_defconfig @@ -8,6 +8,9 @@ CONFIG_BOARD_PILLBUG=y # Enable MPU CONFIG_ARM_MPU=y +# Use pinctrl +CONFIG_PINCTRL=y + # enable GPIO CONFIG_GPIO=y From bbb27ac02769c7bf5f20b76605f2b4e0f811e6e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Fri, 7 Jul 2023 01:39:08 +0800 Subject: [PATCH 0714/1130] feat(docs): Note that UF2 drive unmounts after flashing (#1859) Add a note about the UF2 drive that automatically unmounts itself to restart, which may surprise some new users. --- docs/docs/development/build-flash.md | 4 ++-- docs/docs/user-setup.md | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index 6f4ba84d23e..f57c4b5caf9 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -130,8 +130,8 @@ The above build commands generate a UF2 file in `build/zephyr` (or `build/left|right/zephyr` if you followed the instructions for splits) and is by default named `zmk.uf2`. If your board supports USB Flashing Format (UF2), copy that file onto the root of the USB mass storage device for your board. The -controller should flash your built firmware and automatically restart once -flashing is complete. +controller should flash your built firmware, unmount the USB storage device and +automatically restart once flashing is complete. Alternatively, if your board supports flashing and you're not developing from within a Dockerized environment, enable Device Firmware Upgrade (DFU) mode on diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 8faa72df85f..9d04c347d58 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -198,8 +198,9 @@ To flash the firmware, first put your board into bootloader mode by double click or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass -storage device. Once the flash is complete, the controller should automatically restart, and load your newly flashed firmware. It is -recommended that you test your keyboard works over USB first to rule out hardware issues, before trying to connect to it wirelessly. +storage device. Once the flash is complete, the controller should unmount the USB storage, automatically restart and load your newly +flashed firmware. It is recommended that you test your keyboard works over USB first to rule out hardware issues, before trying to +connect to it wirelessly. :::caution Split keyboards From aaf9958d865ac28659d16e1ea1ba356f7e742ea8 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Mon, 17 Jul 2023 15:26:27 -0600 Subject: [PATCH 0715/1130] feat(boards): Leeloo v2 and V2 Zephyr 3.2 fixes * Add Leeloo v2 * Leeloo-Micro v1 updates to support Zephyr 3.2 * Refactored for new Encoder Configuration Co-authored-by: Cem Aksoylar --- app/boards/shields/leeloo/Kconfig.defconfig | 15 +- app/boards/shields/leeloo/Kconfig.shield | 15 +- app/boards/shields/leeloo/README.md | 120 +++++++++++--- .../leeloo/boards/nice_nano_v2.overlay | 47 ++++++ app/boards/shields/leeloo/leeloo.conf | 11 +- app/boards/shields/leeloo/leeloo.dtsi | 85 +--------- app/boards/shields/leeloo/leeloo.keymap | 37 +++-- app/boards/shields/leeloo/leeloo_common.dtsi | 90 +++++++++++ app/boards/shields/leeloo/leeloo_left.overlay | 6 +- app/boards/shields/leeloo/leeloo_rev2.conf | 43 +++++ app/boards/shields/leeloo/leeloo_rev2.dtsi | 6 + app/boards/shields/leeloo/leeloo_rev2.keymap | 79 +++++++++ app/boards/shields/leeloo/leeloo_rev2.zmk.yml | 15 ++ .../shields/leeloo/leeloo_rev2_left.overlay | 21 +++ .../shields/leeloo/leeloo_rev2_right.overlay | 25 +++ .../shields/leeloo/leeloo_right.overlay | 6 +- .../shields/leeloo_micro/Kconfig.defconfig | 49 ++++++ .../shields/leeloo_micro/Kconfig.shield | 13 ++ app/boards/shields/leeloo_micro/README.md | 89 +++++++++++ .../leeloo_micro/boards/nice_nano_v2.overlay | 47 ++++++ .../shields/leeloo_micro/leeloo_micro.conf | 38 +++++ .../shields/leeloo_micro/leeloo_micro.dtsi | 88 ++++++++++ .../shields/leeloo_micro/leeloo_micro.keymap | 151 ++++++++++++++++++ .../shields/leeloo_micro/leeloo_micro.zmk.yml | 15 ++ .../leeloo_micro/leeloo_micro_left.overlay | 20 +++ .../leeloo_micro/leeloo_micro_right.overlay | 24 +++ 26 files changed, 1027 insertions(+), 128 deletions(-) create mode 100644 app/boards/shields/leeloo/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/leeloo/leeloo_common.dtsi create mode 100644 app/boards/shields/leeloo/leeloo_rev2.conf create mode 100644 app/boards/shields/leeloo/leeloo_rev2.dtsi create mode 100644 app/boards/shields/leeloo/leeloo_rev2.keymap create mode 100644 app/boards/shields/leeloo/leeloo_rev2.zmk.yml create mode 100644 app/boards/shields/leeloo/leeloo_rev2_left.overlay create mode 100644 app/boards/shields/leeloo/leeloo_rev2_right.overlay create mode 100644 app/boards/shields/leeloo_micro/Kconfig.defconfig create mode 100644 app/boards/shields/leeloo_micro/Kconfig.shield create mode 100644 app/boards/shields/leeloo_micro/README.md create mode 100644 app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/leeloo_micro/leeloo_micro.conf create mode 100644 app/boards/shields/leeloo_micro/leeloo_micro.dtsi create mode 100644 app/boards/shields/leeloo_micro/leeloo_micro.keymap create mode 100644 app/boards/shields/leeloo_micro/leeloo_micro.zmk.yml create mode 100644 app/boards/shields/leeloo_micro/leeloo_micro_left.overlay create mode 100644 app/boards/shields/leeloo_micro/leeloo_micro_right.overlay diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig index 7388a4b9af0..046bd49a3dd 100644 --- a/app/boards/shields/leeloo/Kconfig.defconfig +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -1,6 +1,16 @@ -# Copyright (c) 2022 The ZMK Contributors +# Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT +if SHIELD_LEELOO_REV2_LEFT + +config ZMK_KEYBOARD_NAME + default "Leeloo v2" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif + if SHIELD_LEELOO_LEFT config ZMK_KEYBOARD_NAME @@ -11,7 +21,7 @@ config ZMK_SPLIT_ROLE_CENTRAL endif -if SHIELD_LEELOO_LEFT || SHIELD_LEELOO_RIGHT +if SHIELD_LEELOO config ZMK_SPLIT default y @@ -31,7 +41,6 @@ endif # ZMK_DISPLAY if LVGL - config LV_Z_VDB_SIZE default 64 diff --git a/app/boards/shields/leeloo/Kconfig.shield b/app/boards/shields/leeloo/Kconfig.shield index 46ea96400fb..1d7843957e5 100644 --- a/app/boards/shields/leeloo/Kconfig.shield +++ b/app/boards/shields/leeloo/Kconfig.shield @@ -1,8 +1,21 @@ -# Copyright (c) 2022 The ZMK Contributors +# Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT +config SHIELD_LEELOO + bool + config SHIELD_LEELOO_LEFT def_bool $(shields_list_contains,leeloo_left) + select SHIELD_LEELOO config SHIELD_LEELOO_RIGHT def_bool $(shields_list_contains,leeloo_right) + select SHIELD_LEELOO + +config SHIELD_LEELOO_REV2_LEFT + def_bool $(shields_list_contains,leeloo_rev2_left) + select SHIELD_LEELOO + +config SHIELD_LEELOO_REV2_RIGHT + def_bool $(shields_list_contains,leeloo_rev2_right) + select SHIELD_LEELOO \ No newline at end of file diff --git a/app/boards/shields/leeloo/README.md b/app/boards/shields/leeloo/README.md index a807843f08f..27d5e872b5a 100644 --- a/app/boards/shields/leeloo/README.md +++ b/app/boards/shields/leeloo/README.md @@ -1,41 +1,123 @@ -# Clickety Split | Leeloo +# Clickety Split | Leeloo v2 -![Leeloo](https://cdn.shopify.com/s/files/1/0599/3460/5491/files/Leeloo-rev1.0-w.jpg?v=1646798726) +![Leeloo v2](https://github.com/ClicketySplit/build-guides/blob/main/leeloo/images/gallery/Leeloo-v2-ZMK.jpg) Keyboard Designer: [clicketysplit.ca](https://clicketysplit.ca) GitHub: [ClicketySplit](https://github.com/ClicketySplit) -Hardware Supported: Pro Micro, Elite-C, nice!nano v2 +Hardware Supported: Pro Micro, Elite-C, and nice!nano v2 -Albeit, there is no doubt where Leeloo's heritage is derived from—Lily58, and Corne. It is not a copy-paste-modify implementation. +Leeloo v2 has been designed from scratch—again. Everything from the wiring schematic to its case. Leeloo v2 still keeps the column stagger that it's known for, along with its low profile design. -Leeloo has been designed from scratch; everything from the schematic to its PCB footprints, and column stagger. There are some subtle differences that may not be apparent; however, its subtle changes enable an interesting future. +## Features/Differences from Leeloo v1 -Features: +- Support for Kailh Low Profile Choc switches with 18mm x 18mm spacing. + - A version for Kailh Box/MX switches with 19.05mm x 19.05mm spacing will be available in the future. +- All switch locations are socketed. +- Rotary encoder locations are socketed. + - One of two locations on each side can be used for a rotary encoder. +- OLED Displays and nice!view Displays are natively supported, socketed, and no extra wiring is required. +- Support for per-switch RGB underglow. +- Better location for 110mAh or 700mAh batteries. + - Different location for soldering battery leads. +- Support for Alps Alpine Micro On/off switches. + +# Leeloo v1 + +![Leeloo](https://github.com/ClicketySplit/build-guides/blob/main/leeloo/images/gallery/Leeloo-v1.jpg) + +## Features - 4x6x5m Split Keyboard -- Support for MX/Box or Low Profile Choc switches. -- 90% of the switches are socketed; with the exception to the rotary encoder positions—6 positions require soldering. -- Support for 128x32 OLED Displays. -- The option to select one of three positions for an EC11 rotary encoder on each half. -- Support for Alps Alpine Micro Switch -- Support for 3.7v 301230 LiPo Battery +- Support for both Low Profile Choc switches, and Box/MX switches; 19.05mm x 19.05mm spacing. +- 90% of the switches are socketed; with the exception to the rotary encoder positions. +- Support for Alps Alpine EC11 Rotary Encoders—one on each side, in one of three locations. +- Support for OLED Displays or nice!view Displays. + - nice!view displays require a wire to be soldered from the CS Pin on nice!view display to P0.22 or D4 on the nice!nano. +- Support for both 110mAh or 700mAh batteries. +- Solder pads for battery leads. +- Support for Alps Alpine Micro On/off switches. -# Building Your Firmware +# Building Leeloo's ZMK Firmware ZMK Firmware: [Introduction to ZMK](https://zmk.dev/docs/) Installation: [Installing ZMK](https://zmk.dev/docs/user-setup) Customization: [Customizing ZMK](https://zmk.dev/docs/customization) Development Environment: [Basic Setup](https://zmk.dev/docs/development/setup) -Build command for the default keymap of Leeloo: +Build commands for the default keymap of Leeloo v1: + +``` +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_right +``` + +Build commands for the default keymap of Leeloo v2: + +``` +west build -d build/left_v2 -p -b nice_nano_v2 -- -DSHIELD=leeloo_rev2_left +west build -d build/right_v2 -p -b nice_nano_v2 -- -DSHIELD=leeloo_rev2_right +``` + +Build commands for your custom keymap of Leeloo v1: + +``` +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_right -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo/config" +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo/config" +``` + +Build commands for your custom keymap of Leeloo v2: + +``` +west build -d build/right_v2 -p -b nice_nano_v2 -- -DSHIELD=leeloo_rev2_right -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo_v2/config" +west build -d build/left_v2 -p -b nice_nano_v2 -- -DSHIELD=leeloo_rev2_left -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo_v2/config" +``` + +## Building Leeloo's ZMK Firmware with nice!view Displays + +There are a couple of files that need to be adjusted before the build commands can be run. + +### Edit the leeloo[_rev2].keymap File + +Near the top 3rd of the leeloo[_rev2].keymap file, locate the following code block: + +``` +//nice_view_spi: &spi0 { +// cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +//}; +``` + +Remove the forward slashes to resemble the following: + +``` +nice_view_spi: &spi0 { + cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +}; +``` + +Save your changes and close the file. + +### Sample Build Commands for nice!view Displays + +Build commands for the default keymap of Leeloo v1: + +``` +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD="leeloo_left nice_view_adapter nice_view" +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD="leeloo_right nice_view_adapter nice_view" +``` + +Build commands for the default keymap of Leeloo v2: - west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left - west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_right +``` +west build -d build/left_v2 -p -b nice_nano_v2 -- -DSHIELD="leeloo_rev2_left nice_view_adapter nice_view" +west build -d build/right_v2 -p -b nice_nano_v2 -- -DSHIELD="leeloo_rev2_right nice_view_adapter nice_view" +``` -Build command for your custom keymap of Leeloo: +Build commands for your custom keymap of Leeloo v2: - west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_right -DZMK_CONFIG="C:/dev/zmk/[yourNmae]/leeloo/config" - west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_left -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo/config" +``` +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD="leeloo_rev2_left nice_view_adapter nice_view" -DZMK_CONFIG="/workspaces/zmk-config/[yourName]/leeloo_v2/config" +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD="leeloo_rev2_right nice_view_adapter nice_view" -DZMK_CONFIG="/workspaces/zmk-config/[yourName]/leeloo_v2/config" +``` # Support diff --git a/app/boards/shields/leeloo/boards/nice_nano_v2.overlay b/app/boards/shields/leeloo/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..5c451b73eaf --- /dev/null +++ b/app/boards/shields/leeloo/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <37>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo.conf b/app/boards/shields/leeloo/leeloo.conf index a652bb65144..466279a33e3 100644 --- a/app/boards/shields/leeloo/leeloo.conf +++ b/app/boards/shields/leeloo/leeloo.conf @@ -1,9 +1,16 @@ -# Copyright (c) 2022 The ZMK Contributors +# Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT # Uncomment the following line to enable the OLED Display # CONFIG_ZMK_DISPLAY=y +# Uncomment to turn off WPM Status. +# CONFIG_ZMK_WIDGET_WPM_STATUS=n + +# Uncomment to invert colour when using nice!view Displays +# CONFIG_ZMK_DISPLAY_INVERT=y + + # Uncomment these two lines to add support for encoders # CONFIG_EC11=y -# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo.dtsi b/app/boards/shields/leeloo/leeloo.dtsi index 438f9a9d924..dad05c55c6e 100644 --- a/app/boards/shields/leeloo/leeloo.dtsi +++ b/app/boards/shields/leeloo/leeloo.dtsi @@ -1,87 +1,6 @@ /* - * Copyright (c) 2022 The ZMK Contributors - * + * Copyright (c) 2023 The ZMK Contributors * SPDX-License-Identifier: MIT */ -#include -/ { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <12>; - rows = <5>; -// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | -// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | -// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | -// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | SW29 | | SW29 | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | -// | SW25 | SW26 | SW27 | SW28 | | SW28 | SW27 | SW26 | SW25 | - map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) -RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) - >; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; - - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - }; - - right_encoder: encoder_right { - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; - }; - - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; -}; - -&pro_micro_i2c { - status = "okay"; - - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; -}; +#include "leeloo_common.dtsi" \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo.keymap b/app/boards/shields/leeloo/leeloo.keymap index fc3b25e03e2..bdbf8988cc8 100644 --- a/app/boards/shields/leeloo/leeloo.keymap +++ b/app/boards/shields/leeloo/leeloo.keymap @@ -1,17 +1,23 @@ /* - * Copyright (c) 2022 The ZMK Contributors - * + * Copyright (c) 2023 The ZMK Contributors * SPDX-License-Identifier: MIT */ + #include #include #include #include -// Layers -#define DEFAULT 0 // default_layer -#define LOWER 1 // lower_layer -#define RAISE 2 // raise_layer +/* + * Assign the cs-gpios pin to 4. + * Uncomment these next few lines if implementing nice!view Displays + * A wire from the nice!view CS display needs to be connected to the + * High Frequency P0.22, also known as D4 if you choose to refer to + * the pins with Arduino Labels. + */ +//nice_view_spi: &spi0 { +// cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +//}; / { @@ -19,40 +25,43 @@ compatible = "zmk,keymap"; default_layer { + label = " QWERTY"; bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSLH &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp GRAV &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT -&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LALT &kp LCTRL < 1 RET < 2 MINUS &kp LGUI &kp LGUI < 2 EQUAL < 1 SPACE &kp BSPC &kp DEL +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LGUI &kp LGUI &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LALT &kp LCTRL < 1 RET < 2 MINUS < 2 EQUAL < 1 SPACE &kp BSPC &kp DEL >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; }; lower_layer { + label = " Lower"; bindings = < &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans &trans &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &trans &kp F12 &trans &trans &trans &trans &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &trans &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; }; raise_layer { + label = " Raise"; bindings = < &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_CLR &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &bt BT_CLR &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; }; }; -}; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi new file mode 100644 index 00000000000..6ce93504b2d --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <5>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | SW29 | | SW29 | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | +// | SW25 | SW26 | SW27 | SW28 | | SW28 | SW27 | SW26 | SW25 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <120>; + }; + + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <120>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <30>; + }; + +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_left.overlay b/app/boards/shields/leeloo/leeloo_left.overlay index 59fce1b0e5b..4421e1124ef 100644 --- a/app/boards/shields/leeloo/leeloo_left.overlay +++ b/app/boards/shields/leeloo/leeloo_left.overlay @@ -1,8 +1,8 @@ /* - * Copyright (c) 2022 The ZMK Contributors - * + * Copyright (c) 2023 The ZMK Contributors * SPDX-License-Identifier: MIT */ + #include "leeloo.dtsi" &kscan0 { @@ -18,4 +18,4 @@ &left_encoder { status = "okay"; -}; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_rev2.conf b/app/boards/shields/leeloo/leeloo_rev2.conf new file mode 100644 index 00000000000..8c1cf3eed7b --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_rev2.conf @@ -0,0 +1,43 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment to turn off WPM Status. +# CONFIG_ZMK_WIDGET_WPM_STATUS=n + +# Uncomment to invert colour when using nice!view Displays +# CONFIG_ZMK_DISPLAY_INVERT=y + + +# Uncomment the following line to enable per-key lighting +# CONFIG_ZMK_RGB_UNDERGLOW=y + +# Use the STRIP config specific to the LEDs you're using +# CONFIG_WS2812_STRIP=y + +# Keep OLED or nice!view Displays on even when toggling off LEDs +# Change to y if you wish to toggle Displays on and off with LEDs +# CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=n + +# Turn off LEDs when idle. +# Change to n if you wish to keep LEDs on even when idle. +# CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y + +# When USB is disconnected, turn off LEDs +# Change to n if you wish to keep LEDs on even when USB is unpluged. +# CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB=y + +# Start LEDs off at 75% +# CONFIG_ZMK_RGB_UNDERGLOW_BRT_START=75 + + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + + +# Uncomment if you are experiencing connectivity issues; this +# configuration item boosts the BLE transmit power. +# CONFIG_BT_CTLR_TX_PWR_PLUS_8=y \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_rev2.dtsi b/app/boards/shields/leeloo/leeloo_rev2.dtsi new file mode 100644 index 00000000000..dad05c55c6e --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_rev2.dtsi @@ -0,0 +1,6 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include "leeloo_common.dtsi" \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_rev2.keymap b/app/boards/shields/leeloo/leeloo_rev2.keymap new file mode 100644 index 00000000000..a66205b64cc --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_rev2.keymap @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +// Short versions +#define RGBON &rgb_ug RGB_ON +#define RGBOFF &rgb_ug RGB_OFF +#define RGBTOG &rgb_ug RGB_TOG +#define RGBHUI &rgb_ug RGB_HUI +#define RGBHUD &rgb_ug RGB_HUD +#define RGBSAI &rgb_ug RGB_SAI +#define RGBSAD &rgb_ug RGB_SAD +#define RGBBRI &rgb_ug RGB_BRI +#define RGBBRD &rgb_ug RGB_BRD +#define RGBEFF &rgb_ug RGB_EFF + + +/* + * Assign the cs-gpios pin to 4. + * Uncomment these next few lines if implementing nice!view Displays + */ +//nice_view_spi: &spi0 { +// cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +//}; + + +/ { + + keymap { + compatible = "zmk,keymap"; + + default_layer { + label = " QWERTY"; + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSLH +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp GRAV +&kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LGUI &kp RGUI &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LALT &kp LCTRL < 1 RET < 2 MINUS < 2 EQUAL < 1 SPACE &kp BSPC &kp DEL + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + lower_layer { + label = " Lower"; + bindings = < +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&trans &trans &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &trans &kp F12 +&trans &trans &trans &trans &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + raise_layer { + label = " Raise"; + bindings = < +&trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader +RGBON RGBTOG RGBHUI RGBSAI RGBBRI &trans &trans &trans &trans &trans &trans &trans +RGBOFF RGBEFF RGBHUD RGBSAD RGBBRD &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &bt BT_CLR &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_rev2.zmk.yml b/app/boards/shields/leeloo/leeloo_rev2.zmk.yml new file mode 100644 index 00000000000..5e0a4db3dc5 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_rev2.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: leeloo_rev2 +name: Leeloo v2 +type: shield +url: https://clicketysplit.ca/pages/leeloo +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - leeloo_rev2_left + - leeloo_rev2_right diff --git a/app/boards/shields/leeloo/leeloo_rev2_left.overlay b/app/boards/shields/leeloo/leeloo_rev2_left.overlay new file mode 100644 index 00000000000..14ddc0eceb1 --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_rev2_left.overlay @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include "leeloo_rev2.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_rev2_right.overlay b/app/boards/shields/leeloo/leeloo_rev2_right.overlay new file mode 100644 index 00000000000..afca41b474b --- /dev/null +++ b/app/boards/shields/leeloo/leeloo_rev2_right.overlay @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include "leeloo_rev2.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo/leeloo_right.overlay b/app/boards/shields/leeloo/leeloo_right.overlay index 80e89529566..b860c2ca651 100644 --- a/app/boards/shields/leeloo/leeloo_right.overlay +++ b/app/boards/shields/leeloo/leeloo_right.overlay @@ -1,8 +1,8 @@ /* - * Copyright (c) 2022 The ZMK Contributors - * + * Copyright (c) 2023 The ZMK Contributors * SPDX-License-Identifier: MIT */ + #include "leeloo.dtsi" &default_transform { @@ -22,4 +22,4 @@ &right_encoder { status = "okay"; -}; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/Kconfig.defconfig b/app/boards/shields/leeloo_micro/Kconfig.defconfig new file mode 100644 index 00000000000..26256120a76 --- /dev/null +++ b/app/boards/shields/leeloo_micro/Kconfig.defconfig @@ -0,0 +1,49 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_LEELOO_MICRO_LEFT + +config ZMK_KEYBOARD_NAME + default "Leeloo-Micro" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif + +if SHIELD_LEELOO_MICRO + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LV_Z_VDB_SIZE + default 64 + +config LV_Z_DPI + default 148 + +config LV_Z_BITS_PER_PIXEL + default 1 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/leeloo_micro/Kconfig.shield b/app/boards/shields/leeloo_micro/Kconfig.shield new file mode 100644 index 00000000000..c622f16dfcd --- /dev/null +++ b/app/boards/shields/leeloo_micro/Kconfig.shield @@ -0,0 +1,13 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_LEELOO_MICRO + bool + +config SHIELD_LEELOO_MICRO_LEFT + def_bool $(shields_list_contains,leeloo_micro_left) + select SHIELD_LEELOO_MICRO + +config SHIELD_LEELOO_MICRO_RIGHT + def_bool $(shields_list_contains,leeloo_micro_right) + select SHIELD_LEELOO_MICRO \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/README.md b/app/boards/shields/leeloo_micro/README.md new file mode 100644 index 00000000000..c1827f82b72 --- /dev/null +++ b/app/boards/shields/leeloo_micro/README.md @@ -0,0 +1,89 @@ +# Clickety Split | Leeloo-Micro + +![Leeloo-Micro v1 Wireless](https://github.com/ClicketySplit/build-guides/blob/main/leeloo/images/gallery/Leeloo-Micro-v1-ZMK.jpg) + +Keyboard Designer: [clicketysplit.ca](https://clicketysplit.ca) +GitHub: [ClicketySplit](https://github.com/ClicketySplit) +Hardware Supported: nice!nano v2, nice!view v1 + +Leeloo-Micro is a 3x5x5m derivative of Leeloo v2; inheriting the column stagger and modifiers row, yet, reducing the number of switches by removing the top row and outside columns. With Leeloo-Micro's inaugural release being wireless, it leverages nice!nanos and nice!views for its microcontrollers and displays. + +## Features + +- 3x5x5m Split Keyboard +- Support for Kailh Low Profile Choc switches with 18mm x 18mm spacing. +- All switch locations are socketed. +- Support for Alps Alpine EC11 Rotary Encoders—one on each side, in one of two locations. + - Rotary encoder locations are socketed. +- nice!view Displays are inherently supported, socketed, and no extra wiring is required. +- Support for per-switch RGB underglow. +- Support for both 110mAh or 700mAh batteries. +- Support for Alps Alpine Micro On/off switches. + +# Building Leeloo-Micro ZMK Firmware + +ZMK Firmware: [Introduction to ZMK](https://zmk.dev/docs/) +Installation: [Installing ZMK](https://zmk.dev/docs/user-setup) +Customization: [Customizing ZMK](https://zmk.dev/docs/customization) +Development Environment: [Basic Setup](https://zmk.dev/docs/development/setup) + +Build commands for the default keymap of Leeloo-Micro: + +``` +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_micro_left +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_micro_right +``` + +Build commands for your custom keymap of Leeloo-Micro: + +``` +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD=leeloo_micro_right -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo_micro/config" +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD=leeloo_micro_left -DZMK_CONFIG="C:/dev/zmk/[yourName]/leeloo_micro/config" +``` + +## Building Leeloo-Micro's ZMK Firmware with nice!view Displays + +There are a couple of files that need to be adjusted before the build commands can be run. + +### Edit the leeloo_micro.keymap File + +Near the top 3rd of the leeloo_micro.keymap file, locate the following code block: + +``` +//nice_view_spi: &spi0 { +// cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +//}; +``` + +Remove the forward slashes to resemble the following: + +``` +nice_view_spi: &spi0 { + cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +}; +``` + +Save your changes and close the file. + +### Sample Build Commands for nice!view Displays + +Build commands for the default keymap of Leeloo-Micro: + +``` +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD="leeloo_micro_left nice_view_adapter nice_view" +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD="leeloo_micro_right nice_view_adapter nice_view" +``` + +Build commands for your custom keymap of Leeloo-Micro: + +``` +west build -d build/left -p -b nice_nano_v2 -- -DSHIELD="leeloo_micro_left nice_view_adapter nice_view" -DZMK_CONFIG="/workspaces/zmk-config/[yourName]/leeloo_micro/config" +west build -d build/right -p -b nice_nano_v2 -- -DSHIELD="leeloo_micro_right nice_view_adapter nice_view" -DZMK_CONFIG="/workspaces/zmk-config/[yourName]/leeloo_micro/config" +``` + +# Support + +If you have any questions with regards to Leeloo-Micro, please [Contact Us](https://clicketysplit.ca/pages/contact-us). + +Clickety Split +For the love of split keyboards. diff --git a/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay b/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..be5dc54ec29 --- /dev/null +++ b/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <20>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.conf b/app/boards/shields/leeloo_micro/leeloo_micro.conf new file mode 100644 index 00000000000..02c1d60587b --- /dev/null +++ b/app/boards/shields/leeloo_micro/leeloo_micro.conf @@ -0,0 +1,38 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment to turn off WPM Status. +# CONFIG_ZMK_WIDGET_WPM_STATUS=n + +# Uncomment to invert colour, if using nice!view Displays +# CONFIG_ZMK_DISPLAY_INVERT=y + + +# Uncomment the following line to enable per-key lighting +# CONFIG_ZMK_RGB_UNDERGLOW=y + +# Use the STRIP config specific to the LEDs you're using +# CONFIG_WS2812_STRIP=y + +# Keep OLED or nice!view Displays on even when toggling off LEDs +# Change to y if you wish to toggle Displays on and off with LEDs +# CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=n + +# Turn off LEDs when idle. +# Change to n if you wish to keep LEDs on even when idle. +# CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y + +# When USB is disconnected, turn off LEDs +# Change to n if you wish to keep LEDs on even when USB is unpluged. +# CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB=y + +# Start LEDs off at 75% +# CONFIG_ZMK_RGB_UNDERGLOW_BRT_START=75 + + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi new file mode 100644 index 00000000000..afe16dfa605 --- /dev/null +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// +// | SW1 | SW2 | SW3 | SW4 | SW5 | | SW15 | SW4 | SW3 | SW2 | SW1 | +// | SW6 | SW7 | SW8 | SW9 | SW10 | | SW10 | SW9 | SW8 | SW7 | SW6 | +// | SW11 | SW12 | SW13 | SW14 | SW15 | SW20 | | SW20 | SW15 | SW14 | SW13 | SW12 | SW11 | +// | SW16 | SW17 | SW18 | SW19 | | SW19 | SW18 | SW17 | SW16 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,6) RC(3,7) RC(3,8) RC(3,9) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <120>; + }; + + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <120>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <30>; + }; + +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.keymap b/app/boards/shields/leeloo_micro/leeloo_micro.keymap new file mode 100644 index 00000000000..8526f5ac2a8 --- /dev/null +++ b/app/boards/shields/leeloo_micro/leeloo_micro.keymap @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +// Layers +#define QW_M 0 // Main +#define QW_L 1 // Lower +#define QW_R 2 // Raise +#define QW_A 3 // Adjust + +#define QC_N 4 // Number Pad +#define QC_B 5 // Firmware + + +// Short versions +#define BT0 BT_SEL 0 +#define BT1 BT_SEL 1 +#define BT2 BT_SEL 2 +#define BT3 BT_SEL 3 +#define BT4 BT_SEL 4 + +#define BOOTLDR &bootloader + +#define RGBON &rgb_ug RGB_ON +#define RGBOFF &rgb_ug RGB_OFF +#define RGBTOG &rgb_ug RGB_TOG +#define RGBHUI &rgb_ug RGB_HUI +#define RGBHUD &rgb_ug RGB_HUD +#define RGBSAI &rgb_ug RGB_SAI +#define RGBSAD &rgb_ug RGB_SAD +#define RGBBRI &rgb_ug RGB_BRI +#define RGBBRD &rgb_ug RGB_BRD +#define RGBEFF &rgb_ug RGB_EFF + + +/* + * Assign the cs-gpios pin to 4. + * Uncomment these next few lines if implementing nice!view Displays. + */ +//nice_view_spi: &spi0 { +// cs-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH>; +//}; + + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + adjust_layer { + if-layers = ; + then-layer = ; + }; + }; + + combos { + compatible = "zmk,combos"; + + combo_esc { + timeout-ms = <50>; + key-positions = <0 1>; + layers = ; + bindings = <&kp ESC>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + label = " QWERTY"; + bindings = < +&kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P +&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI +&mt LSFT Z &kp X &kp C &kp V &kp B &mo QC_N &kp RGUI &kp N &kp M &kp COMMA &kp DOT &mt RSFT FSLH + &kp LALT &kp LCTRL < 1 RET < 2 MINUS < 2 EQUAL < 1 SPACE &kp BSPC &mo QC_B + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP>; + }; + + lower_layer { + label = " Lower"; + bindings = < +&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp QUOT +&kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp RSHFT + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP>; + }; + + raise_layer { + label = " Raise"; + bindings = < +&kp TAB &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &kp BSLH +&kp CAPS &trans &trans &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp GRAVE +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &mt RSFT TILDE + &trans &trans &trans &trans &trans &trans &kp DEL &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP>; + }; + + adjust_layer { + label = " Adjust"; + bindings = < + +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &trans &trans &trans &trans +&kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &trans &trans &trans &trans &trans +&kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP>; + }; + + numpad_layer { + label = " NumPad"; + bindings = < + +&trans &none &none &none &none &kp SLASH &kp N7 &kp N8 &kp N9 &kp MINUS +RGBON RGBTOG RGBHUI RGBSAI RGBBRI &kp ASTRK &kp N4 &kp N5 &kp N6 &kp PLUS +RGBOFF RGBEFF RGBHUD RGBSAD RGBBRD &trans &trans &none &kp N1 &kp N2 &kp N3 &kp EQUAL + &trans &trans &trans &trans &trans &kp N0 &kp DOT &none + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP>; + }; + + ble_layer { + label = " BLE"; + bindings = < + +&bt BT0 &bt BT1 &bt BT2 &bt BT3 &bt BT4 &bt BT0 &bt BT1 &bt BT2 &bt BT3 &bt BT4 +BOOTLDR &sys_reset &trans &trans &trans &trans &trans &trans &sys_reset BOOTLDR +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &bt BT_CLR &trans &trans &trans &trans &bt BT_CLR &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_DN C_VOL_UP>; + }; + + }; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.zmk.yml b/app/boards/shields/leeloo_micro/leeloo_micro.zmk.yml new file mode 100644 index 00000000000..e78ce0a3530 --- /dev/null +++ b/app/boards/shields/leeloo_micro/leeloo_micro.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: leeloo_micro +name: Leeloo-Micro +type: shield +url: https://clicketysplit.ca/pages/leeloo-micro +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - leeloo_micro_left + - leeloo_micro_right diff --git a/app/boards/shields/leeloo_micro/leeloo_micro_left.overlay b/app/boards/shields/leeloo_micro/leeloo_micro_left.overlay new file mode 100644 index 00000000000..d31fcf2c0fd --- /dev/null +++ b/app/boards/shields/leeloo_micro/leeloo_micro_left.overlay @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include "leeloo_micro.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; \ No newline at end of file diff --git a/app/boards/shields/leeloo_micro/leeloo_micro_right.overlay b/app/boards/shields/leeloo_micro/leeloo_micro_right.overlay new file mode 100644 index 00000000000..a3f347fb9c3 --- /dev/null +++ b/app/boards/shields/leeloo_micro/leeloo_micro_right.overlay @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +#include "leeloo_micro.dtsi" + +&default_transform { + col-offset = <5>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; \ No newline at end of file From f3110d1d1ea195725551b4c997c542a4003e1452 Mon Sep 17 00:00:00 2001 From: NAHO <90870942+trueNAHO@users.noreply.github.com> Date: Tue, 18 Jul 2023 00:23:22 +0200 Subject: [PATCH 0716/1130] fix(docs): Fix README punctuation and add license link --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 50cb2817b8f..f112b0f9705 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ [![Build](https://github.com/zmkfirmware/zmk/workflows/Build/badge.svg)](https://github.com/zmkfirmware/zmk/actions) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) -[ZMK Firmware](https://zmk.dev/) is an open source (MIT) keyboard firmware built on the [Zephyr™ Project](https://www.zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues. +[ZMK Firmware](https://zmk.dev/) is an open source ([MIT](LICENSE)) keyboard firmware built on the [Zephyr™ Project](https://www.zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues. -Check out the website to learn more: https://zmk.dev/ +Check out the website to learn more: https://zmk.dev/. -You can also come join our [ZMK Discord Server](https://zmk.dev/community/discord/invite) +You can also come join our [ZMK Discord Server](https://zmk.dev/community/discord/invite). To review features, check out the [feature overview](https://zmk.dev/docs/). ZMK is under active development, and new features are listed with the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature. From 18a2b76bf085249e9d650d6664d32931c56dc7b7 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Tue, 18 Jul 2023 16:43:30 -0500 Subject: [PATCH 0717/1130] feat(nice!view): Custom widgets --- app/boards/shields/nice_view/CMakeLists.txt | 13 + .../shields/nice_view/Kconfig.defconfig | 53 ++- app/boards/shields/nice_view/README.md | 14 +- .../shields/nice_view/custom_status_screen.c | 28 ++ app/boards/shields/nice_view/nice_view.conf | 3 +- app/boards/shields/nice_view/widgets/art.c | 229 ++++++++++++ app/boards/shields/nice_view/widgets/bolt.c | 45 +++ .../nice_view/widgets/peripheral_status.c | 128 +++++++ .../nice_view/widgets/peripheral_status.h | 22 ++ app/boards/shields/nice_view/widgets/status.c | 330 ++++++++++++++++++ app/boards/shields/nice_view/widgets/status.h | 24 ++ app/boards/shields/nice_view/widgets/util.c | 69 ++++ app/boards/shields/nice_view/widgets/util.h | 47 +++ 13 files changed, 986 insertions(+), 19 deletions(-) create mode 100644 app/boards/shields/nice_view/CMakeLists.txt create mode 100644 app/boards/shields/nice_view/custom_status_screen.c create mode 100644 app/boards/shields/nice_view/widgets/art.c create mode 100644 app/boards/shields/nice_view/widgets/bolt.c create mode 100644 app/boards/shields/nice_view/widgets/peripheral_status.c create mode 100644 app/boards/shields/nice_view/widgets/peripheral_status.h create mode 100644 app/boards/shields/nice_view/widgets/status.c create mode 100644 app/boards/shields/nice_view/widgets/status.h create mode 100644 app/boards/shields/nice_view/widgets/util.c create mode 100644 app/boards/shields/nice_view/widgets/util.h diff --git a/app/boards/shields/nice_view/CMakeLists.txt b/app/boards/shields/nice_view/CMakeLists.txt new file mode 100644 index 00000000000..694242b2ec1 --- /dev/null +++ b/app/boards/shields/nice_view/CMakeLists.txt @@ -0,0 +1,13 @@ +if(CONFIG_ZMK_DISPLAY AND CONFIG_NICE_VIEW_WIDGET_STATUS) + zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) + zephyr_library_sources(custom_status_screen.c) + zephyr_library_sources(widgets/bolt.c) + zephyr_library_sources(widgets/util.c) + + if(NOT CONFIG_ZMK_SPLIT OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + zephyr_library_sources(widgets/status.c) + else() + zephyr_library_sources(widgets/art.c) + zephyr_library_sources(widgets/peripheral_status.c) + endif() +endif() diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig index d2378409612..53edc1ccc7f 100644 --- a/app/boards/shields/nice_view/Kconfig.defconfig +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -1,21 +1,13 @@ -# Copyright (c) 2022 The ZMK Contributors +# Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT if SHIELD_NICE_VIEW -config ZMK_DISPLAY - select LV_FONT_MONTSERRAT_26 - -if ZMK_DISPLAY - -config SPI - default y - -config LS0XX - default y +config LV_Z_VDB_SIZE + default 100 -config ZMK_WIDGET_WPM_STATUS - default y if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL +config LV_Z_DPI + default 161 config LV_Z_BITS_PER_PIXEL default 1 @@ -24,6 +16,37 @@ choice LV_COLOR_DEPTH default LV_COLOR_DEPTH_1 endchoice -endif # ZMK_DISPLAY +choice ZMK_DISPLAY_WORK_QUEUE + default ZMK_DISPLAY_WORK_QUEUE_DEDICATED +endchoice + +choice ZMK_DISPLAY_STATUS_SCREEN + default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM +endchoice + +config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM + imply NICE_VIEW_WIDGET_STATUS + +config NICE_VIEW_WIDGET_STATUS + bool "Custom nice!view status widget" + select LV_FONT_MONTSERRAT_16 + select LV_USE_IMG + select LV_USE_CANVAS + +config NICE_VIEW_WIDGET_INVERTED + bool "Invert custom status widget colors" + +if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL + +config NICE_VIEW_WIDGET_STATUS + select LV_FONT_MONTSERRAT_18 + select LV_FONT_MONTSERRAT_14 + select LV_FONT_UNSCII_8 + select ZMK_WPM + +endif # !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL + +config ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN + select LV_FONT_MONTSERRAT_26 -endif +endif # SHIELD_NICE_VIEW diff --git a/app/boards/shields/nice_view/README.md b/app/boards/shields/nice_view/README.md index e3dffa3446e..00abfbfab1e 100644 --- a/app/boards/shields/nice_view/README.md +++ b/app/boards/shields/nice_view/README.md @@ -1,5 +1,15 @@ # nice!view -The nice!view is a low power, high refresh rate display meant to replace I2C OLEDs traditionally used. +The nice!view is a low-power, high refresh rate display meant to replace I2C OLEDs traditionally used. -This shield requires that an `&nice_view_spi` labelled SPI bus is provided with _at least_ MOSI, SCK, and CS pins defined. +This shield requires that an `&nice_view_spi` labeled SPI bus is provided with _at least_ MOSI, SCK, and CS pins defined. + +## Disable custom widget + +The nice!view shield includes a custom vertical widget. To use the built-in ZMK one, add the following item to your `.conf` file: + +``` +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=y +CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26=y +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y +``` diff --git a/app/boards/shields/nice_view/custom_status_screen.c b/app/boards/shields/nice_view/custom_status_screen.c new file mode 100644 index 00000000000..c08da0eb511 --- /dev/null +++ b/app/boards/shields/nice_view/custom_status_screen.c @@ -0,0 +1,28 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include "widgets/status.h" + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if IS_ENABLED(CONFIG_NICE_VIEW_WIDGET_STATUS) +static struct zmk_widget_status status_widget; +#endif + +lv_obj_t *zmk_display_status_screen() { + + lv_obj_t *screen; + screen = lv_obj_create(NULL); + +#if IS_ENABLED(CONFIG_NICE_VIEW_WIDGET_STATUS) + zmk_widget_status_init(&status_widget, screen); + lv_obj_align(zmk_widget_status_obj(&status_widget), LV_ALIGN_TOP_LEFT, 0, 0); +#endif + + return screen; +} diff --git a/app/boards/shields/nice_view/nice_view.conf b/app/boards/shields/nice_view/nice_view.conf index ff57c07c9aa..e6f9158f137 100644 --- a/app/boards/shields/nice_view/nice_view.conf +++ b/app/boards/shields/nice_view/nice_view.conf @@ -1,5 +1,4 @@ # Enable nice!view CONFIG_ZMK_DISPLAY=y -CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26=y -CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y +# Disable idle blanking CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE=n diff --git a/app/boards/shields/nice_view/widgets/art.c b/app/boards/shields/nice_view/widgets/art.c new file mode 100644 index 00000000000..56c8914629f --- /dev/null +++ b/app/boards/shields/nice_view/widgets/art.c @@ -0,0 +1,229 @@ +/* + * + * Copyright (c) 2023 Collin Hodge + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BALLOON +#define LV_ATTRIBUTE_IMG_BALLOON +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BALLOON uint8_t + balloon_map[] = { +#if CONFIG_NICE_VIEW_WIDGET_INVERTED + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ +#else + 0x00, 0x00, 0x00, 0xff, /*Color of index 0*/ + 0xff, 0xff, 0xff, 0xff, /*Color of index 1*/ +#endif + + 0xfe, 0xaa, 0x0a, 0x2a, 0x9f, 0xff, 0xff, 0xff, 0xfa, 0xea, 0xaa, 0xae, 0xba, 0xff, 0xff, + 0xfb, 0xff, 0xf0, 0xf1, 0x55, 0x05, 0x15, 0x47, 0xff, 0xff, 0xff, 0xf5, 0xd5, 0x55, 0x5f, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xa4, 0xaa, 0x8a, 0x8a, 0xa1, 0xff, 0xff, 0xfb, 0xea, + 0xaa, 0xaa, 0xbe, 0xbf, 0xef, 0xfb, 0xfb, 0xff, 0xf0, 0x54, 0x55, 0x05, 0x45, 0x54, 0xff, + 0xff, 0x7d, 0x55, 0xd5, 0x75, 0x7f, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xf0, 0xae, 0x2a, 0x82, + 0xa0, 0xaa, 0x3f, 0xff, 0xfe, 0xaa, 0xea, 0xbb, 0xfe, 0xbf, 0xff, 0xfb, 0xfb, 0xfe, 0xf0, + 0x5f, 0x55, 0x01, 0x50, 0x54, 0x1f, 0xff, 0x7f, 0x55, 0xd5, 0x7f, 0xff, 0x7f, 0xd7, 0xff, + 0xfd, 0xfd, 0xf0, 0x2f, 0xff, 0x20, 0x28, 0x00, 0x0f, 0xff, 0xae, 0xaa, 0xaa, 0xbf, 0xff, + 0xff, 0xeb, 0xfb, 0xff, 0xff, 0xf0, 0x0e, 0x01, 0x50, 0x14, 0x00, 0x3f, 0xff, 0x57, 0x55, + 0xd5, 0x7f, 0xff, 0x7f, 0xd7, 0xfd, 0xff, 0xfd, 0xf0, 0x1e, 0x01, 0xa8, 0x0a, 0x00, 0xff, + 0xff, 0xaf, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xaf, 0xfb, 0xff, 0xff, 0xf0, 0x1f, 0xf9, 0x50, + 0x01, 0x03, 0xff, 0xff, 0x57, 0x55, 0xd5, 0x7d, 0xff, 0x7f, 0xdf, 0xfd, 0xff, 0xfd, 0xf0, + 0x9f, 0xf9, 0xa8, 0x00, 0x8f, 0xff, 0xfe, 0xaf, 0xaa, 0xaa, 0xff, 0xff, 0xfd, 0xbf, 0xfb, + 0xff, 0xfb, 0xf0, 0x5a, 0x01, 0x54, 0x00, 0x3f, 0xff, 0xff, 0x7f, 0x5d, 0xd5, 0xfd, 0xff, + 0xfd, 0xdf, 0xfd, 0xff, 0xfd, 0xf0, 0x8e, 0x01, 0xaa, 0x00, 0x7f, 0xff, 0xfe, 0xbf, 0xae, + 0xef, 0xff, 0xff, 0xfb, 0xef, 0xfb, 0xff, 0xfa, 0xf0, 0xcf, 0xff, 0xf4, 0x00, 0xf7, 0xff, + 0xff, 0x7f, 0x5d, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfd, 0xf0, 0xae, 0x01, 0x2a, + 0x00, 0xfb, 0xff, 0xff, 0xbf, 0xae, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xfa, 0xf0, + 0xde, 0x01, 0x35, 0x01, 0xfb, 0xff, 0xff, 0x7f, 0x5d, 0xfd, 0xbf, 0xff, 0xff, 0xdf, 0xfd, + 0xff, 0xdd, 0xf0, 0xa7, 0xff, 0xea, 0x81, 0xfc, 0xff, 0x7f, 0xbe, 0xbe, 0xff, 0xe3, 0xff, + 0xff, 0xef, 0xff, 0xf9, 0x3e, 0xf0, 0x56, 0x01, 0x55, 0x41, 0xff, 0x7f, 0xff, 0xff, 0xfd, + 0xfd, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x7d, 0xf0, 0xa6, 0x01, 0x2a, 0x88, 0xfe, 0xff, + 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xfc, 0xfe, 0xf0, 0x52, 0x79, 0x15, + 0x44, 0x7d, 0xff, 0xff, 0xfd, 0x7f, 0xbd, 0xff, 0xff, 0xfc, 0x00, 0x07, 0xf8, 0xfd, 0xf0, + 0x22, 0x69, 0x2a, 0xa0, 0x3d, 0xff, 0xff, 0xfa, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xe2, 0x48, + 0xfa, 0xff, 0xf0, 0x42, 0x59, 0x15, 0x54, 0x1b, 0xff, 0xff, 0xf7, 0xff, 0xbd, 0xf7, 0xff, + 0xff, 0x95, 0x55, 0x37, 0x7d, 0xf0, 0x02, 0x69, 0x0a, 0xa2, 0x1f, 0xfe, 0xff, 0xee, 0xff, + 0xff, 0xfc, 0xff, 0xff, 0x2a, 0x4a, 0x9f, 0xff, 0xf0, 0x03, 0xff, 0x55, 0x11, 0x4f, 0xff, + 0xff, 0x55, 0x7f, 0xfd, 0xff, 0x00, 0xfc, 0x55, 0x55, 0x4f, 0xff, 0xf0, 0x02, 0x01, 0xaa, + 0x88, 0x8f, 0xde, 0xff, 0xaa, 0xbf, 0xfe, 0xff, 0xff, 0x00, 0xa8, 0x02, 0xa7, 0xff, 0xf0, + 0x02, 0x01, 0x55, 0x55, 0x47, 0xff, 0x7f, 0xd5, 0x5f, 0xff, 0xff, 0xff, 0xc8, 0x47, 0x5c, + 0x53, 0xff, 0xf0, 0x82, 0x49, 0xaa, 0x8a, 0xa7, 0xfe, 0xff, 0xea, 0xbf, 0xff, 0xff, 0xff, + 0xb0, 0x3f, 0x5f, 0x89, 0xff, 0xf0, 0xc2, 0x49, 0x55, 0x45, 0x53, 0xff, 0xff, 0xf5, 0x5f, + 0xff, 0xff, 0xfe, 0x70, 0x7f, 0x5f, 0xe5, 0xff, 0xf0, 0xe2, 0x41, 0xa2, 0xa2, 0xab, 0xfe, + 0xfb, 0xfa, 0xaf, 0xef, 0xff, 0xf9, 0xe2, 0xbf, 0x5f, 0xfa, 0xff, 0xf0, 0xe2, 0x41, 0x51, + 0x51, 0x51, 0xff, 0x77, 0xfd, 0x57, 0xf9, 0xff, 0xe7, 0x85, 0x7f, 0x5f, 0xfc, 0xff, 0xf0, + 0xe3, 0xff, 0xf2, 0xa0, 0xa8, 0xff, 0xfb, 0xbe, 0xaf, 0xfe, 0x1e, 0x80, 0x6a, 0x80, 0x00, + 0x7e, 0xff, 0xb0, 0xe2, 0x60, 0x11, 0x50, 0x54, 0x7f, 0xff, 0xfd, 0x57, 0xff, 0xe0, 0x1f, + 0xc4, 0x15, 0x55, 0x06, 0x7f, 0x70, 0xee, 0x60, 0x18, 0xa8, 0x2a, 0x1f, 0xff, 0xfe, 0xaf, + 0xff, 0xe8, 0xf0, 0x00, 0x0a, 0x4a, 0xa8, 0x7f, 0xf0, 0xdf, 0xff, 0xf1, 0x54, 0x15, 0x43, + 0xff, 0xff, 0x5f, 0xff, 0xe8, 0x7b, 0xc0, 0x05, 0x55, 0x55, 0x7f, 0x70, 0xff, 0x81, 0x28, + 0xaa, 0x0a, 0xa1, 0xff, 0xfe, 0xbf, 0xf7, 0xea, 0x09, 0xe0, 0x0a, 0x4a, 0xaa, 0x7f, 0xf0, + 0xff, 0x81, 0x50, 0x54, 0x05, 0x54, 0x7f, 0xff, 0x7f, 0xfc, 0xe8, 0x4b, 0xc0, 0x05, 0x55, + 0x55, 0x7f, 0x70, 0xfe, 0x7f, 0x28, 0xaa, 0x00, 0xa8, 0xff, 0xfe, 0xbf, 0xff, 0x0a, 0xf0, + 0x00, 0x02, 0x4a, 0xa8, 0x7e, 0xb0, 0xfe, 0x7f, 0x14, 0x55, 0x00, 0x03, 0xff, 0xf7, 0x5f, + 0x7f, 0xe0, 0x1f, 0xc4, 0x01, 0x55, 0x06, 0x7f, 0x70, 0xff, 0x81, 0x08, 0x2a, 0x80, 0x07, + 0xff, 0xf6, 0xaf, 0xff, 0xfe, 0x80, 0x6a, 0x80, 0x00, 0x7e, 0xff, 0xb0, 0x7f, 0x81, 0x14, + 0x55, 0x40, 0x0f, 0xff, 0xed, 0x57, 0x7f, 0xff, 0xe7, 0x85, 0x55, 0x5f, 0xfc, 0xff, 0x70, + 0xbf, 0xff, 0xe8, 0x2a, 0xa8, 0x1f, 0xff, 0xf6, 0xae, 0xff, 0xff, 0xf9, 0xea, 0xaa, 0x5f, + 0xfa, 0xff, 0xf0, 0x5e, 0x01, 0x24, 0x15, 0x54, 0x3f, 0xff, 0xf5, 0x57, 0x7f, 0xfb, 0xfe, + 0xf0, 0x55, 0x5f, 0xe5, 0xff, 0x70, 0xbe, 0x01, 0x22, 0x2a, 0xa0, 0xff, 0xff, 0xba, 0xae, + 0xff, 0xfe, 0x1f, 0x30, 0x2a, 0x0f, 0x89, 0xbf, 0xf0, 0x5f, 0xff, 0xe5, 0x15, 0x41, 0xff, + 0xff, 0xd5, 0x57, 0x7f, 0xff, 0xe0, 0x48, 0x05, 0x54, 0x53, 0xff, 0xf0, 0xbe, 0x01, 0xa2, + 0x02, 0x03, 0xff, 0xff, 0xea, 0xaa, 0xbf, 0xff, 0xff, 0x80, 0x00, 0x02, 0xa7, 0xbf, 0xf0, + 0x5e, 0x01, 0x41, 0x00, 0x06, 0xfd, 0xff, 0xd5, 0x55, 0x5f, 0xff, 0xff, 0xfc, 0x00, 0x40, + 0x4f, 0xff, 0xf0, 0xbe, 0x49, 0x20, 0x80, 0x0f, 0x7f, 0xfe, 0xea, 0xaa, 0xbe, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x1f, 0xbf, 0xf0, 0x7e, 0x49, 0x50, 0x00, 0x0f, 0x7f, 0xff, 0xd5, 0x55, + 0x5f, 0x83, 0xff, 0xff, 0x80, 0x40, 0x3f, 0xff, 0xf0, 0xfe, 0x41, 0x28, 0x00, 0x0f, 0xbf, + 0xff, 0xeb, 0xaa, 0xbf, 0xfc, 0x00, 0x03, 0xe0, 0x00, 0xff, 0xbf, 0xf0, 0xfe, 0x41, 0x14, + 0x00, 0x1f, 0xdf, 0xff, 0xd5, 0xd5, 0x57, 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xdf, 0xf0, + 0xff, 0xff, 0x08, 0x00, 0x1f, 0x3f, 0xdf, 0xeb, 0xaa, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xbf, 0xf0, 0xfe, 0x01, 0x14, 0x40, 0x3e, 0xff, 0xbf, 0xf5, 0x55, 0x57, 0xdf, 0xff, + 0xf9, 0xff, 0xff, 0xff, 0xdf, 0xf0, 0xfe, 0x01, 0x0a, 0x20, 0x3f, 0xff, 0xdf, 0xfa, 0xaa, + 0xab, 0xbf, 0xff, 0xf3, 0xff, 0xff, 0xdf, 0xbf, 0xf0, 0xde, 0x7f, 0x05, 0x10, 0x7f, 0xff, + 0xff, 0xfd, 0x55, 0x55, 0xdf, 0xff, 0xe4, 0xff, 0xff, 0xbf, 0x7f, 0xf0, 0xee, 0x7e, 0x02, + 0x88, 0x7f, 0xff, 0xff, 0xfa, 0xaa, 0xab, 0xbf, 0xff, 0xe3, 0xff, 0xbf, 0xbf, 0xbf, 0xf0, + 0xde, 0x05, 0x41, 0x54, 0x3f, 0xff, 0xff, 0xdd, 0x55, 0x55, 0xff, 0xff, 0xd7, 0xff, 0xdf, + 0x7f, 0x7f, 0xf0, 0xee, 0x06, 0xa2, 0xaa, 0x3f, 0xff, 0xff, 0xbe, 0xaa, 0xab, 0xbf, 0xff, + 0xf7, 0xff, 0xbf, 0x3f, 0xbf, 0xf0, 0xde, 0x7d, 0x55, 0x55, 0x1f, 0xfb, 0xff, 0xff, 0x55, + 0x55, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xff, 0xf0, 0xfe, 0x7f, 0xaa, 0xaa, 0x8f, 0xff, + 0xff, 0xba, 0xaa, 0xab, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xbf, 0xf0, 0xfe, 0x01, 0x55, + 0x55, 0x47, 0xff, 0xff, 0xf7, 0xd5, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xfe, 0x01, 0xaa, 0xaa, 0xa1, 0xff, 0xff, 0xbf, 0xea, 0xab, 0xff, 0xff, 0xff, 0xff, 0xbf, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0x55, 0x55, 0x54, 0xff, 0xff, 0x5f, 0xf5, 0x57, 0xff, 0xfd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xda, 0xaa, 0xaa, 0xaa, 0x7f, 0xff, 0xbf, 0xfa, + 0xab, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0x9d, 0x55, 0x55, 0x00, 0xff, + 0xff, 0x7f, 0xfd, 0x57, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xbf, 0xa2, + 0xa8, 0x03, 0xff, 0xfb, 0xbf, 0xfa, 0xaa, 0xbf, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0x3f, 0xc0, 0x00, 0x07, 0xff, 0xff, 0x5f, 0xfd, 0x57, 0x57, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0x3f, 0x80, 0x00, 0x0f, 0xff, 0xfb, 0xaf, 0xfe, 0xae, 0xaa, 0xfb, + 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0xf6, 0x7f, 0xc0, 0x00, 0x0f, 0xff, 0xff, 0x57, 0xfd, + 0x55, 0x55, 0x77, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, +}; + +const lv_img_dsc_t balloon = { + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .header.always_zero = 0, + .header.reserved = 0, + .header.w = 140, + .header.h = 68, + .data_size = 1232, + .data = balloon_map, +}; + +#ifndef LV_ATTRIBUTE_IMG_MOUNTAIN +#define LV_ATTRIBUTE_IMG_MOUNTAIN +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_MOUNTAIN uint8_t + mountain_map[] = { +#if CONFIG_NICE_VIEW_WIDGET_INVERTED + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ +#else + 0x00, 0x00, 0x00, 0xff, /*Color of index 0*/ + 0xff, 0xff, 0xff, 0xff, /*Color of index 1*/ +#endif + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xa0, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x10, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf4, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0x10, 0x80, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x01, 0xfe, 0x03, 0xe0, 0x0f, 0x9e, 0x01, 0x90, + 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x00, 0xff, 0x07, 0xe0, 0x1f, + 0x9e, 0x00, 0x90, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x80, 0x00, 0x00, 0x7f, + 0x8f, 0xe0, 0x1f, 0xbe, 0x00, 0x90, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, + 0x00, 0x00, 0x3f, 0xcf, 0xf0, 0x1f, 0xbc, 0x00, 0x90, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xcf, 0xf0, 0x3f, 0xbc, 0x00, 0x90, 0x80, 0x7f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x1f, 0xe7, 0xf0, 0x7f, 0x3c, 0x00, 0x90, + 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x0f, 0xe7, 0xf8, 0x7f, + 0x78, 0x01, 0xb0, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x00, 0x00, 0x00, 0x07, + 0xf3, 0xf8, 0x3f, 0x78, 0x03, 0xd0, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc0, 0x00, + 0x00, 0x00, 0x07, 0xfb, 0xf8, 0x3f, 0xf8, 0x0f, 0x90, 0xc0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xec, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfd, 0xfc, 0x3f, 0xf8, 0x0f, 0x10, 0xc0, 0x1e, 0xff, + 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x3f, 0xf0, 0x0e, 0x10, + 0xc0, 0x0c, 0x27, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x7f, + 0xf0, 0x1e, 0x30, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xfe, 0x7f, 0xf3, 0xfc, 0x50, 0xe0, 0x00, 0x3f, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xf7, 0xf8, 0x90, 0xe0, 0x00, 0x7f, 0xfe, 0xb0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x7f, 0xe7, 0xf1, 0x90, 0xe0, 0x00, 0x7f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x7f, 0xef, 0xe3, 0x90, + 0xf0, 0x00, 0x7f, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x7f, + 0xff, 0xe7, 0x90, 0xb0, 0x10, 0xff, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xff, 0xbf, 0xff, 0xcf, 0x90, 0xf0, 0x30, 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xff, 0xf9, 0xff, 0x9f, 0x90, 0xb0, 0x30, 0xff, 0xff, 0xff, 0xf2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf6, 0xff, 0x3e, 0x90, 0xf8, 0x70, 0xff, + 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf6, 0xfe, 0x7c, 0x90, + 0xf8, 0x78, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf9, + 0xfe, 0xf8, 0x90, 0xa8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xfd, 0xf3, 0x90, 0xdc, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfb, 0xef, 0x90, 0xf5, 0xac, 0xff, 0xff, 0xff, 0xfe, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x90, 0xff, 0xd6, 0x7f, + 0xff, 0xff, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x90, + 0xff, 0xfa, 0x7f, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0x90, 0xdd, 0xff, 0x7f, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0xea, 0xbf, 0x3f, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x10, 0xff, 0x4f, 0xbf, 0xf5, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x10, 0xff, 0xff, 0x9f, + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, + 0xff, 0xb0, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xff, 0xff, 0x90, 0xcd, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x1f, 0xff, 0xff, 0x90, 0xb2, 0xe0, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x7f, 0xff, 0xff, 0x90, 0xff, 0xc0, 0x3f, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xff, 0xff, 0xff, 0x90, 0xfe, 0xc0, 0x7f, + 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xff, 0xff, 0x7c, 0x90, + 0xfd, 0x80, 0xff, 0xfd, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xff, + 0xff, 0xb8, 0x90, 0xff, 0x80, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x87, 0xff, 0xff, 0xc8, 0x90, 0x9f, 0x01, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0x1f, 0xff, 0xff, 0xe0, 0x90, 0x86, 0x01, 0xff, 0xff, 0xd0, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xfe, 0x3f, 0xff, 0xff, 0xe0, 0x90, 0x80, 0x01, 0xff, + 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x83, 0xfe, 0x7f, 0xff, 0xff, 0xf0, 0x90, + 0x80, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x7f, 0xc7, 0xee, 0x7f, 0xff, + 0xff, 0xf8, 0x90, 0x80, 0x1a, 0xbf, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x98, 0xff, 0xff, + 0xc6, 0x7f, 0xff, 0xff, 0xfc, 0x90, 0x80, 0x3f, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xf1, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xfe, 0x90, 0x80, 0x3f, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xe3, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x90, 0x80, 0x7f, 0xfe, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc7, 0xff, 0xfe, 0x18, 0xff, 0xef, 0xff, 0xff, 0x90, + 0x80, 0x7f, 0xff, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x8f, 0xff, 0xfc, 0x7f, 0xff, 0xef, + 0xfd, 0xff, 0x90, 0x80, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x9f, 0xff, 0xf8, + 0xff, 0xff, 0xef, 0xfc, 0xf7, 0x90, 0x80, 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x3f, + 0x1f, 0xff, 0xf1, 0xff, 0xff, 0xcf, 0xfc, 0xe1, 0x90, 0x80, 0xff, 0xff, 0xff, 0xf4, 0x00, + 0x00, 0x00, 0x7f, 0x3f, 0xff, 0xe3, 0xff, 0xff, 0xcf, 0xfe, 0x60, 0x90, 0x81, 0xff, 0xff, + 0xff, 0xfe, 0x80, 0x00, 0x00, 0x7f, 0x3f, 0xff, 0xc7, 0xff, 0xff, 0xdf, 0xfe, 0x40, 0x90, + 0x81, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xfe, 0x3f, 0xff, 0xcf, 0xbf, 0xff, 0xdf, + 0xfe, 0x00, 0x90, 0x81, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x07, 0xfe, 0x7f, 0xff, 0x8f, + 0x7f, 0xff, 0x9f, 0xfe, 0x00, 0x90, 0x80, 0xff, 0xff, 0xff, 0xe6, 0x00, 0x00, 0x1f, 0xfe, + 0x7f, 0xff, 0x1e, 0xff, 0xff, 0x91, 0xfe, 0x00, 0x90, 0x80, 0xff, 0xff, 0xfe, 0xc0, 0x00, + 0x00, 0x3f, 0xfc, 0x7f, 0xfe, 0x3c, 0xff, 0xff, 0x81, 0xff, 0x00, 0x90, 0x80, 0x7f, 0xff, + 0xec, 0x00, 0x00, 0x3c, 0xff, 0xf8, 0xff, 0xfc, 0x79, 0xfd, 0xff, 0x80, 0xff, 0x00, 0x90, + 0x80, 0x27, 0xff, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xf9, 0xff, 0xfc, 0xf3, 0xfb, 0xff, 0x00, + 0xff, 0x00, 0x90, 0x80, 0x5f, 0xff, 0xd8, 0x00, 0x00, 0xff, 0xff, 0xf1, 0xff, 0xc8, 0xe7, + 0xf3, 0xff, 0x00, 0x7f, 0x00, 0x90, 0x80, 0xff, 0xff, 0xfd, 0x80, 0x01, 0xff, 0xff, 0xe3, + 0xff, 0x81, 0xcf, 0xf7, 0xff, 0x00, 0x7f, 0x00, 0x90, 0x80, 0xff, 0xff, 0xff, 0xd8, 0x03, + 0xff, 0xff, 0x87, 0xff, 0x03, 0x8f, 0xe7, 0xff, 0x00, 0x3f, 0x81, 0x90, 0x81, 0xff, 0xff, + 0xff, 0xfe, 0x83, 0xff, 0xfe, 0x0f, 0xfe, 0x3f, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x80, 0x00, 0x00, 0x00, 0x2f, 0xc6, 0x00, 0x00, 0x38, 0x00, 0x60, 0x00, 0x48, 0x00, 0x00, + 0x00, 0x00, 0x10, 0xc0, 0x00, 0x00, 0x00, 0x17, 0xf4, 0x00, 0x00, 0xe0, 0x00, 0xc0, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, +}; + +const lv_img_dsc_t mountain = { + .header.cf = LV_IMG_CF_INDEXED_1BIT, + .header.always_zero = 0, + .header.reserved = 0, + .header.w = 140, + .header.h = 68, + .data_size = 1232, + .data = mountain_map, +}; diff --git a/app/boards/shields/nice_view/widgets/bolt.c b/app/boards/shields/nice_view/widgets/bolt.c new file mode 100644 index 00000000000..74dcc2b00c6 --- /dev/null +++ b/app/boards/shields/nice_view/widgets/bolt.c @@ -0,0 +1,45 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BOLT +#define LV_ATTRIBUTE_IMG_BOLT +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BOLT uint8_t bolt_map[] = { +#if CONFIG_NICE_VIEW_WIDGET_INVERTED + 0x00, 0x00, 0x00, 0x00, /*Color of index 0*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ + 0xff, 0xff, 0xff, 0xff, /*Color of index 2*/ + 0x00, 0x00, 0x00, 0x00, /*Color of index 3*/ +#else + 0x00, 0x00, 0x00, 0x00, /*Color of index 0*/ + 0xff, 0xff, 0xff, 0xff, /*Color of index 1*/ + 0x00, 0x00, 0x00, 0xff, /*Color of index 2*/ + 0x00, 0x00, 0x00, 0x00, /*Color of index 3*/ +#endif + + 0x00, 0x14, 0x00, 0x00, 0x64, 0x00, 0x00, 0x64, 0x00, 0x01, 0xa4, 0x00, 0x01, 0xa4, + 0x00, 0x06, 0xa4, 0x00, 0x06, 0xa4, 0x00, 0x1a, 0xa5, 0x54, 0x1a, 0xaa, 0xa4, 0x6a, + 0xaa, 0x90, 0x55, 0x6a, 0x90, 0x00, 0x6a, 0x40, 0x00, 0x6a, 0x40, 0x00, 0x69, 0x00, + 0x00, 0x69, 0x00, 0x00, 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x50, 0x00, +}; + +const lv_img_dsc_t bolt = { + .header.cf = LV_IMG_CF_INDEXED_2BIT, + .header.always_zero = 0, + .header.reserved = 0, + .header.w = 11, + .header.h = 18, + .data_size = 70, + .data = bolt_map, +}; diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.c b/app/boards/shields/nice_view/widgets/peripheral_status.c new file mode 100644 index 00000000000..85c2a1d8793 --- /dev/null +++ b/app/boards/shields/nice_view/widgets/peripheral_status.c @@ -0,0 +1,128 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include "peripheral_status.h" +#include +#include +#include +#include +#include +#include +#include + +LV_IMG_DECLARE(balloon); +LV_IMG_DECLARE(mountain); + +static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); + +struct peripheral_status_state { + bool connected; +}; + +static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { + lv_obj_t *canvas = lv_obj_get_child(widget, 0); + + lv_draw_label_dsc_t label_dsc; + init_label_dsc(&label_dsc, LVGL_FOREGROUND, &lv_font_montserrat_16, LV_TEXT_ALIGN_RIGHT); + lv_draw_rect_dsc_t rect_black_dsc; + init_rect_dsc(&rect_black_dsc, LVGL_BACKGROUND); + + // Fill background + lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc); + + // Draw battery + draw_battery(canvas, state); + + // Draw output status + lv_canvas_draw_text(canvas, 0, 0, CANVAS_SIZE, &label_dsc, + state.connected ? LV_SYMBOL_WIFI : LV_SYMBOL_CLOSE); + + // Rotate canvas + rotate_canvas(canvas, cbuf); +} + +static void set_battery_status(struct zmk_widget_status *widget, + struct battery_status_state state) { +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + widget->state.charging = state.usb_present; +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + + widget->state.battery = state.level; + + draw_top(widget->obj, widget->cbuf, widget->state); +} + +static void battery_status_update_cb(struct battery_status_state state) { + struct zmk_widget_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_battery_status(widget, state); } +} + +static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + return (struct battery_status_state) { + .level = bt_bas_get_battery_level(), +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + .usb_present = zmk_usb_is_powered(), +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + }; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_battery_status, struct battery_status_state, + battery_status_update_cb, battery_status_get_state) + +ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) +ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + +static struct peripheral_status_state get_state(const zmk_event_t *_eh) { + return (struct peripheral_status_state){.connected = zmk_split_bt_peripheral_is_connected()}; +} + +static void set_connection_status(struct zmk_widget_status *widget, + struct peripheral_status_state state) { + widget->state.connected = state.connected; + + draw_top(widget->obj, widget->cbuf, widget->state); +} + +static void output_status_update_cb(struct peripheral_status_state state) { + struct zmk_widget_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_connection_status(widget, state); } +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_peripheral_status, struct peripheral_status_state, + output_status_update_cb, get_state) +ZMK_SUBSCRIPTION(widget_peripheral_status, zmk_split_peripheral_status_changed); + +int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent) { + widget->obj = lv_obj_create(parent); + lv_obj_set_size(widget->obj, 160, 68); + lv_obj_t *top = lv_canvas_create(widget->obj); + lv_obj_align(top, LV_ALIGN_TOP_RIGHT, 0, 0); + lv_canvas_set_buffer(top, widget->cbuf, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR); + + lv_obj_t *art = lv_img_create(widget->obj); + bool random = sys_rand32_get() & 1; + lv_img_set_src(art, random ? &balloon : &mountain); + lv_obj_align(art, LV_ALIGN_TOP_LEFT, 0, 0); + + sys_slist_append(&widgets, &widget->node); + widget_battery_status_init(); + widget_peripheral_status_init(); + + return 0; +} + +lv_obj_t *zmk_widget_status_obj(struct zmk_widget_status *widget) { return widget->obj; } diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.h b/app/boards/shields/nice_view/widgets/peripheral_status.h new file mode 100644 index 00000000000..815963572b4 --- /dev/null +++ b/app/boards/shields/nice_view/widgets/peripheral_status.h @@ -0,0 +1,22 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include +#include +#include "util.h" + +struct zmk_widget_status { + sys_snode_t node; + lv_obj_t *obj; + lv_color_t cbuf[CANVAS_SIZE * CANVAS_SIZE]; + struct status_state state; +}; + +int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent); +lv_obj_t *zmk_widget_status_obj(struct zmk_widget_status *widget); diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c new file mode 100644 index 00000000000..1ad9e9207d7 --- /dev/null +++ b/app/boards/shields/nice_view/widgets/status.c @@ -0,0 +1,330 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include "status.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); + +struct output_status_state { + enum zmk_endpoint selected_endpoint; + bool active_profile_connected; + bool active_profile_bonded; + uint8_t active_profile_index; +}; + +struct layer_status_state { + uint8_t index; + const char *label; +}; + +struct wpm_status_state { + uint8_t wpm; +}; + +static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { + lv_obj_t *canvas = lv_obj_get_child(widget, 0); + + lv_draw_label_dsc_t label_dsc; + init_label_dsc(&label_dsc, LVGL_FOREGROUND, &lv_font_montserrat_16, LV_TEXT_ALIGN_RIGHT); + lv_draw_label_dsc_t label_dsc_wpm; + init_label_dsc(&label_dsc_wpm, LVGL_FOREGROUND, &lv_font_unscii_8, LV_TEXT_ALIGN_RIGHT); + lv_draw_rect_dsc_t rect_black_dsc; + init_rect_dsc(&rect_black_dsc, LVGL_BACKGROUND); + lv_draw_rect_dsc_t rect_white_dsc; + init_rect_dsc(&rect_white_dsc, LVGL_FOREGROUND); + lv_draw_line_dsc_t line_dsc; + init_line_dsc(&line_dsc, LVGL_FOREGROUND, 1); + + // Fill background + lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc); + + // Draw battery + draw_battery(canvas, state); + + // Draw output status + char output_text[10] = {}; + + switch (state.selected_endpoint) { + case ZMK_ENDPOINT_USB: + strcat(output_text, LV_SYMBOL_USB); + break; + case ZMK_ENDPOINT_BLE: + if (state.active_profile_bonded) { + if (state.active_profile_connected) { + strcat(output_text, LV_SYMBOL_WIFI); + } else { + strcat(output_text, LV_SYMBOL_CLOSE); + } + } else { + strcat(output_text, LV_SYMBOL_SETTINGS); + } + break; + } + + lv_canvas_draw_text(canvas, 0, 0, CANVAS_SIZE, &label_dsc, output_text); + + // Draw WPM + lv_canvas_draw_rect(canvas, 0, 21, 68, 42, &rect_white_dsc); + lv_canvas_draw_rect(canvas, 1, 22, 66, 40, &rect_black_dsc); + + char wpm_text[6] = {}; + snprintf(wpm_text, sizeof(wpm_text), "%d", state.wpm[9]); + lv_canvas_draw_text(canvas, 42, 52, 24, &label_dsc_wpm, wpm_text); + + int max = 0; + int min = 256; + + for (int i = 0; i < 10; i++) { + if (state.wpm[i] > max) { + max = state.wpm[i]; + } + if (state.wpm[i] < min) { + min = state.wpm[i]; + } + } + + int range = max - min; + if (range == 0) { + range = 1; + } + + lv_point_t points[10]; + for (int i = 0; i < 10; i++) { + points[i].x = 2 + i * 7; + points[i].y = 60 - (state.wpm[i] - min) * 36 / range; + } + lv_canvas_draw_line(canvas, points, 10, &line_dsc); + + // Rotate canvas + rotate_canvas(canvas, cbuf); +} + +static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { + lv_obj_t *canvas = lv_obj_get_child(widget, 1); + + lv_draw_rect_dsc_t rect_black_dsc; + init_rect_dsc(&rect_black_dsc, LVGL_BACKGROUND); + lv_draw_rect_dsc_t rect_white_dsc; + init_rect_dsc(&rect_white_dsc, LVGL_FOREGROUND); + lv_draw_arc_dsc_t arc_dsc; + init_arc_dsc(&arc_dsc, LVGL_FOREGROUND, 2); + lv_draw_arc_dsc_t arc_dsc_filled; + init_arc_dsc(&arc_dsc_filled, LVGL_FOREGROUND, 9); + lv_draw_label_dsc_t label_dsc; + init_label_dsc(&label_dsc, LVGL_FOREGROUND, &lv_font_montserrat_18, LV_TEXT_ALIGN_CENTER); + lv_draw_label_dsc_t label_dsc_black; + init_label_dsc(&label_dsc_black, LVGL_BACKGROUND, &lv_font_montserrat_18, LV_TEXT_ALIGN_CENTER); + + // Fill background + lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc); + + // Draw circles + int circle_offsets[5][2] = { + {13, 13}, {55, 13}, {34, 34}, {13, 55}, {55, 55}, + }; + + for (int i = 0; i < 5; i++) { + bool selected = state.active_profile_index == i; + + lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 359, + &arc_dsc); + + if (selected) { + lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 9, 0, 359, + &arc_dsc_filled); + } + + char label[2]; + snprintf(label, sizeof(label), "%d", i + 1); + lv_canvas_draw_text(canvas, circle_offsets[i][0] - 8, circle_offsets[i][1] - 10, 16, + (selected ? &label_dsc_black : &label_dsc), label); + } + + // Rotate canvas + rotate_canvas(canvas, cbuf); +} + +static void draw_bottom(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { + lv_obj_t *canvas = lv_obj_get_child(widget, 2); + + lv_draw_rect_dsc_t rect_black_dsc; + init_rect_dsc(&rect_black_dsc, LVGL_BACKGROUND); + lv_draw_label_dsc_t label_dsc; + init_label_dsc(&label_dsc, LVGL_FOREGROUND, &lv_font_montserrat_14, LV_TEXT_ALIGN_CENTER); + + // Fill background + lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc); + + // Draw layer + if (state.layer_label == NULL) { + char text[9] = {}; + + sprintf(text, "LAYER %i", state.layer_index); + + lv_canvas_draw_text(canvas, 0, 5, 68, &label_dsc, text); + } else { + lv_canvas_draw_text(canvas, 0, 5, 68, &label_dsc, state.layer_label); + } + + // Rotate canvas + rotate_canvas(canvas, cbuf); +} + +static void set_battery_status(struct zmk_widget_status *widget, + struct battery_status_state state) { +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + widget->state.charging = state.usb_present; +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + + widget->state.battery = state.level; + + draw_top(widget->obj, widget->cbuf, widget->state); +} + +static void battery_status_update_cb(struct battery_status_state state) { + struct zmk_widget_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_battery_status(widget, state); } +} + +static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + return (struct battery_status_state) { + .level = bt_bas_get_battery_level(), +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + .usb_present = zmk_usb_is_powered(), +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + }; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_battery_status, struct battery_status_state, + battery_status_update_cb, battery_status_get_state) + +ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) +ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); +#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ + +static void set_output_status(struct zmk_widget_status *widget, struct output_status_state state) { + widget->state.selected_endpoint = state.selected_endpoint; + widget->state.active_profile_connected = state.active_profile_connected; + widget->state.active_profile_bonded = state.active_profile_bonded; + widget->state.active_profile_index = state.active_profile_index; + + draw_top(widget->obj, widget->cbuf, widget->state); + draw_middle(widget->obj, widget->cbuf2, widget->state); +} + +static void output_status_update_cb(struct output_status_state state) { + struct zmk_widget_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_output_status(widget, state); } +} + +static struct output_status_state output_status_get_state(const zmk_event_t *_eh) { + return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), + .active_profile_connected = + zmk_ble_active_profile_is_connected(), + .active_profile_bonded = !zmk_ble_active_profile_is_open(), + .active_profile_index = zmk_ble_active_profile_index()}; + ; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, + output_status_update_cb, output_status_get_state) +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); + +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) +ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); +#endif +#if defined(CONFIG_ZMK_BLE) +ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); +#endif + +static void set_layer_status(struct zmk_widget_status *widget, struct layer_status_state state) { + widget->state.layer_index = state.index; + widget->state.layer_label = state.label; + + draw_bottom(widget->obj, widget->cbuf3, widget->state); +} + +static void layer_status_update_cb(struct layer_status_state state) { + struct zmk_widget_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_layer_status(widget, state); } +} + +static struct layer_status_state layer_status_get_state(const zmk_event_t *eh) { + uint8_t index = zmk_keymap_highest_layer_active(); + return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_label(index)}; +} + +ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, layer_status_update_cb, + layer_status_get_state) + +ZMK_SUBSCRIPTION(widget_layer_status, zmk_layer_state_changed); + +static void set_wpm_status(struct zmk_widget_status *widget, struct wpm_status_state state) { + for (int i = 0; i < 9; i++) { + widget->state.wpm[i] = widget->state.wpm[i + 1]; + } + widget->state.wpm[9] = state.wpm; + + draw_top(widget->obj, widget->cbuf, widget->state); +} + +static void wpm_status_update_cb(struct wpm_status_state state) { + struct zmk_widget_status *widget; + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_wpm_status(widget, state); } +} + +struct wpm_status_state wpm_status_get_state(const zmk_event_t *eh) { + return (struct wpm_status_state){.wpm = zmk_wpm_get_state()}; +}; + +ZMK_DISPLAY_WIDGET_LISTENER(widget_wpm_status, struct wpm_status_state, wpm_status_update_cb, + wpm_status_get_state) +ZMK_SUBSCRIPTION(widget_wpm_status, zmk_wpm_state_changed); + +int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent) { + widget->obj = lv_obj_create(parent); + lv_obj_set_size(widget->obj, 160, 68); + lv_obj_t *top = lv_canvas_create(widget->obj); + lv_obj_align(top, LV_ALIGN_TOP_RIGHT, 0, 0); + lv_canvas_set_buffer(top, widget->cbuf, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR); + lv_obj_t *middle = lv_canvas_create(widget->obj); + lv_obj_align(middle, LV_ALIGN_TOP_LEFT, 24, 0); + lv_canvas_set_buffer(middle, widget->cbuf2, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR); + lv_obj_t *bottom = lv_canvas_create(widget->obj); + lv_obj_align(bottom, LV_ALIGN_TOP_LEFT, -44, 0); + lv_canvas_set_buffer(bottom, widget->cbuf3, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR); + + sys_slist_append(&widgets, &widget->node); + widget_battery_status_init(); + widget_output_status_init(); + widget_layer_status_init(); + widget_wpm_status_init(); + + return 0; +} + +lv_obj_t *zmk_widget_status_obj(struct zmk_widget_status *widget) { return widget->obj; } diff --git a/app/boards/shields/nice_view/widgets/status.h b/app/boards/shields/nice_view/widgets/status.h new file mode 100644 index 00000000000..53a22518d73 --- /dev/null +++ b/app/boards/shields/nice_view/widgets/status.h @@ -0,0 +1,24 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include +#include +#include "util.h" + +struct zmk_widget_status { + sys_snode_t node; + lv_obj_t *obj; + lv_color_t cbuf[CANVAS_SIZE * CANVAS_SIZE]; + lv_color_t cbuf2[CANVAS_SIZE * CANVAS_SIZE]; + lv_color_t cbuf3[CANVAS_SIZE * CANVAS_SIZE]; + struct status_state state; +}; + +int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent); +lv_obj_t *zmk_widget_status_obj(struct zmk_widget_status *widget); diff --git a/app/boards/shields/nice_view/widgets/util.c b/app/boards/shields/nice_view/widgets/util.c new file mode 100644 index 00000000000..9655f837f6e --- /dev/null +++ b/app/boards/shields/nice_view/widgets/util.c @@ -0,0 +1,69 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include +#include "util.h" + +LV_IMG_DECLARE(bolt); + +void rotate_canvas(lv_obj_t *canvas, lv_color_t cbuf[]) { + static lv_color_t cbuf_tmp[CANVAS_SIZE * CANVAS_SIZE]; + memcpy(cbuf_tmp, cbuf, sizeof(cbuf_tmp)); + lv_img_dsc_t img; + img.data = (void *)cbuf_tmp; + img.header.cf = LV_IMG_CF_TRUE_COLOR; + img.header.w = CANVAS_SIZE; + img.header.h = CANVAS_SIZE; + + lv_canvas_fill_bg(canvas, LVGL_BACKGROUND, LV_OPA_COVER); + lv_canvas_transform(canvas, &img, 900, LV_IMG_ZOOM_NONE, -1, 0, CANVAS_SIZE / 2, + CANVAS_SIZE / 2, true); +} + +void draw_battery(lv_obj_t *canvas, struct status_state state) { + lv_draw_rect_dsc_t rect_black_dsc; + init_rect_dsc(&rect_black_dsc, LVGL_BACKGROUND); + lv_draw_rect_dsc_t rect_white_dsc; + init_rect_dsc(&rect_white_dsc, LVGL_FOREGROUND); + + lv_canvas_draw_rect(canvas, 0, 2, 29, 12, &rect_white_dsc); + lv_canvas_draw_rect(canvas, 1, 3, 27, 10, &rect_black_dsc); + lv_canvas_draw_rect(canvas, 2, 4, (state.battery + 2) / 4, 8, &rect_white_dsc); + lv_canvas_draw_rect(canvas, 30, 5, 3, 6, &rect_white_dsc); + lv_canvas_draw_rect(canvas, 31, 6, 1, 4, &rect_black_dsc); + + if (state.charging) { + lv_draw_img_dsc_t img_dsc; + lv_draw_img_dsc_init(&img_dsc); + lv_canvas_draw_img(canvas, 9, -1, &bolt, &img_dsc); + } +} + +void init_label_dsc(lv_draw_label_dsc_t *label_dsc, lv_color_t color, const lv_font_t *font, + lv_text_align_t align) { + lv_draw_label_dsc_init(label_dsc); + label_dsc->color = color; + label_dsc->font = font; + label_dsc->align = align; +} + +void init_rect_dsc(lv_draw_rect_dsc_t *rect_dsc, lv_color_t bg_color) { + lv_draw_rect_dsc_init(rect_dsc); + rect_dsc->bg_color = bg_color; +} + +void init_line_dsc(lv_draw_line_dsc_t *line_dsc, lv_color_t color, uint8_t width) { + lv_draw_line_dsc_init(line_dsc); + line_dsc->color = color; + line_dsc->width = width; +} + +void init_arc_dsc(lv_draw_arc_dsc_t *arc_dsc, lv_color_t color, uint8_t width) { + lv_draw_arc_dsc_init(arc_dsc); + arc_dsc->color = color; + arc_dsc->width = width; +} diff --git a/app/boards/shields/nice_view/widgets/util.h b/app/boards/shields/nice_view/widgets/util.h new file mode 100644 index 00000000000..e48c1082ce9 --- /dev/null +++ b/app/boards/shields/nice_view/widgets/util.h @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + * + */ + +#include +#include + +#define CANVAS_SIZE 68 + +#define LVGL_BACKGROUND \ + IS_ENABLED(CONFIG_NICE_VIEW_WIDGET_INVERTED) ? lv_color_black() : lv_color_white() +#define LVGL_FOREGROUND \ + IS_ENABLED(CONFIG_NICE_VIEW_WIDGET_INVERTED) ? lv_color_white() : lv_color_black() + +struct status_state { + uint8_t battery; + bool charging; +#if !IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + enum zmk_endpoint selected_endpoint; + bool active_profile_connected; + bool active_profile_bonded; + uint8_t active_profile_index; + uint8_t layer_index; + const char *layer_label; + uint8_t wpm[10]; +#else + bool connected; +#endif +}; + +struct battery_status_state { + uint8_t level; +#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) + bool usb_present; +#endif +}; + +void rotate_canvas(lv_obj_t *canvas, lv_color_t cbuf[]); +void draw_battery(lv_obj_t *canvas, struct status_state state); +void init_label_dsc(lv_draw_label_dsc_t *label_dsc, lv_color_t color, const lv_font_t *font, + lv_text_align_t align); +void init_rect_dsc(lv_draw_rect_dsc_t *rect_dsc, lv_color_t bg_color); +void init_line_dsc(lv_draw_line_dsc_t *line_dsc, lv_color_t color, uint8_t width); +void init_arc_dsc(lv_draw_arc_dsc_t *arc_dsc, lv_color_t color, uint8_t width); From 51a4be89355550ccdc00833c18ceaba5ddabcb51 Mon Sep 17 00:00:00 2001 From: Nick Winans Date: Tue, 18 Jul 2023 16:55:32 -0500 Subject: [PATCH 0718/1130] fix(displays): Don't enable built-in widget configs by default --- app/src/display/Kconfig | 6 +++++- app/src/display/widgets/Kconfig | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 63ba968b445..a2029481080 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -7,7 +7,6 @@ menuconfig ZMK_DISPLAY select DISPLAY select LVGL select LV_CONF_MINIMAL - imply LV_USE_THEME_MONO if ZMK_DISPLAY @@ -42,6 +41,11 @@ choice ZMK_DISPLAY_STATUS_SCREEN config ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN bool "Built in status screen" select LV_OBJ_LABEL + imply LV_USE_THEME_MONO + imply ZMK_WIDGET_LAYER_STATUS + imply ZMK_WIDGET_BATTERY_STATUS + imply ZMK_WIDGET_OUTPUT_STATUS + imply ZMK_WIDGET_PERIPHERAL_STATUS config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM bool "Custom status screen" diff --git a/app/src/display/widgets/Kconfig b/app/src/display/widgets/Kconfig index 4c056cf5e00..7ec20c1fe4d 100644 --- a/app/src/display/widgets/Kconfig +++ b/app/src/display/widgets/Kconfig @@ -5,14 +5,12 @@ menu "ZMK Display Widgets" config ZMK_WIDGET_LAYER_STATUS bool "Widget for highest, active layer using small icons" - default y depends on !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL select LV_USE_LABEL config ZMK_WIDGET_BATTERY_STATUS bool "Widget for battery charge information, using small icons" depends on BT - default y if BT select LV_USE_LABEL if ZMK_WIDGET_BATTERY_STATUS @@ -25,13 +23,11 @@ endif config ZMK_WIDGET_OUTPUT_STATUS bool "Widget for keyboard output status icons" depends on BT && (!ZMK_SPLIT_BLE || ZMK_SPLIT_ROLE_CENTRAL) - default y if BT && (!ZMK_SPLIT_BLE || ZMK_SPLIT_ROLE_CENTRAL) select LV_USE_LABEL config ZMK_WIDGET_PERIPHERAL_STATUS bool "Widget for split peripheral status icons" depends on BT && ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL - default y if BT && ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL select LV_USE_LABEL config ZMK_WIDGET_WPM_STATUS From ee1e13510410e9b482fd20acf112bc3f1466c362 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 18 Jul 2023 23:21:09 -0700 Subject: [PATCH 0719/1130] fix: Proper battery sensor Kconfig dependencies. Properly make the battery sensor Kconfig symbols depend on `SENSOR` config, and minor battery reporting Kconfig symbol dependency fix. --- app/Kconfig | 2 +- app/drivers/sensor/battery/Kconfig | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 92641c14ed0..fe019918cbb 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -500,7 +500,7 @@ config ZMK_SETTINGS_SAVE_DEBOUNCE endif config ZMK_BATTERY_REPORT_INTERVAL - depends on ZMK_BLE + depends on ZMK_BATTERY_REPORTING int "Battery level report interval in seconds" default 60 diff --git a/app/drivers/sensor/battery/Kconfig b/app/drivers/sensor/battery/Kconfig index a9d7189e58a..703adebd44e 100644 --- a/app/drivers/sensor/battery/Kconfig +++ b/app/drivers/sensor/battery/Kconfig @@ -14,6 +14,7 @@ config ZMK_BATTERY_NRF_VDDH default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BATTERY_NRF_VDDH)) select ADC select ZMK_BATTERY + depends on SENSOR help Enable ZMK nRF VDDH voltage driver for battery monitoring. @@ -22,5 +23,6 @@ config ZMK_BATTERY_VOLTAGE_DIVIDER default $(dt_compat_enabled,$(DT_COMPAT_ZMK_BATTERY_VOLTAGE_DIVIDER)) select ADC select ZMK_BATTERY + depends on SENSOR help Enable ZMK battery voltage divider driver for battery monitoring. From cec2061dada6b18580ce20f0c1c70df38aa2a379 Mon Sep 17 00:00:00 2001 From: Maciej Konieczny aka narf Date: Wed, 19 Jul 2023 21:59:29 +0200 Subject: [PATCH 0720/1130] fix(docs): Fix typos in parameterized macros docs. --- docs/docs/behaviors/macros.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 40c333a9066..279d135697c 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -61,9 +61,9 @@ Macros can also be "parameterized", allowing them to be bound in your keymap wit When defining a parameterized macro, a different `compatible` value will be used depending on how many parameters are passed into it: -- `zmk,behavior-macro` - a parameter that takes no parameters. -- `zmk,behavior-macro-one-param` - a parameter that takes one parameter when used. -- `zmk,behavior-macro-two-param` - a parameter that takes two parameters when used. +- `zmk,behavior-macro` - a macro that takes no parameters. +- `zmk,behavior-macro-one-param` - a macro that takes one parameter when used. +- `zmk,behavior-macro-two-param` - a macro that takes two parameters when used. ### Bindings From b945ffe943f1639bfe992ddb4bc12f968d3858f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:07:59 +0000 Subject: [PATCH 0721/1130] chore(deps): bump semver from 5.7.1 to 5.7.2 in /docs Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2) --- updated-dependencies: - dependency-name: semver dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 156 ++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 5badb07e389..b990f53c3dc 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -251,9 +251,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -325,9 +325,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -384,9 +384,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1634,9 +1634,9 @@ } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1846,9 +1846,9 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -2959,9 +2959,9 @@ } }, "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -4366,9 +4366,9 @@ } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -6812,9 +6812,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -9456,9 +9456,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -11353,9 +11353,9 @@ } }, "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -13008,9 +13008,9 @@ } }, "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -13522,9 +13522,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -13547,9 +13547,9 @@ } }, "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -16203,9 +16203,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -16260,9 +16260,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -16303,9 +16303,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -17113,9 +17113,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -17270,9 +17270,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -18097,9 +18097,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "source-map": { "version": "0.5.7", @@ -19210,9 +19210,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -20999,9 +20999,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -22887,9 +22887,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -24147,9 +24147,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -25310,9 +25310,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "source-map": { "version": "0.5.7", @@ -25676,9 +25676,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -25692,9 +25692,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, From 73e1b526d56376be09908a3726fbe9553052e447 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 19 Jul 2023 14:59:40 +0000 Subject: [PATCH 0722/1130] fix(bluetooth): Properly clear peripheral slots * When the clear bonds Kconfig is set, also clear peripheral address slots addresses from settings as well. --- app/src/ble.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index ff82f3cf40a..6607574cc44 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -606,7 +606,7 @@ static int zmk_ble_init(const struct device *_arg) { bt_unpair(BT_ID_DEFAULT, NULL); - for (int i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { + for (int i = 0; i < 8; i++) { char setting_name[15]; sprintf(setting_name, "ble/profiles/%d", i); @@ -615,7 +615,20 @@ static int zmk_ble_init(const struct device *_arg) { LOG_ERR("Failed to delete setting: %d", err); } } -#endif + + // Hardcoding a reasonable hardcoded value of peripheral addresses + // to clear so we properly clear a split central as well. + for (int i = 0; i < 8; i++) { + char setting_name[32]; + sprintf(setting_name, "ble/peripheral_addresses/%d", i); + + err = settings_delete(setting_name); + if (err) { + LOG_ERR("Failed to delete setting: %d", err); + } + } + +#endif // IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) bt_conn_cb_register(&conn_callbacks); bt_conn_auth_cb_register(&zmk_ble_auth_cb_display); From ed400c4feb7955bdc839fbf33b463a73c898a033 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 19 Jul 2023 16:21:06 +0000 Subject: [PATCH 0723/1130] fix(bluetooth): Corrected use of `bt_addr_le_cmp` * Properly compare to zero when comparing LE addresses. --- app/src/ble.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index 6607574cc44..38a9833c991 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -281,14 +281,14 @@ int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr) { for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { // If the address is recognized and already stored in settings, return // index and no additional action is necessary. - if (!bt_addr_le_cmp(&peripheral_addrs[i], addr)) { + if (bt_addr_le_cmp(&peripheral_addrs[i], addr) == 0) { return i; } // If the peripheral address slot is open, store new peripheral in the // slot and return index. This compares against BT_ADDR_LE_ANY as that // is the zero value. - if (!bt_addr_le_cmp(&peripheral_addrs[i], BT_ADDR_LE_ANY)) { + if (bt_addr_le_cmp(&peripheral_addrs[i], BT_ADDR_LE_ANY) == 0) { char addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); LOG_DBG("Storing peripheral %s in slot %d", addr_str, i); From 54c2e8e155e9be71026251946c98e8e45c989388 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 20 Jul 2023 06:35:41 +0000 Subject: [PATCH 0724/1130] feat: Add more logging to peripheral settings. --- app/src/ble.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/ble.c b/app/src/ble.c index 38a9833c991..483bc9d79c1 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -282,7 +282,12 @@ int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr) { // If the address is recognized and already stored in settings, return // index and no additional action is necessary. if (bt_addr_le_cmp(&peripheral_addrs[i], addr) == 0) { + LOG_DBG("Found existing peripheral address in slot %d", i); return i; + } else { + char addr_str[BT_ADDR_LE_STR_LEN]; + bt_addr_le_to_str(&peripheral_addrs[i], addr_str, sizeof(addr_str)); + LOG_DBG("peripheral slot %d occupied by %s", i, addr_str); } // If the peripheral address slot is open, store new peripheral in the From 5f6a13413bba84eeb1eb89c4ff2a5710ca552e6b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 20 Jul 2023 23:34:09 -0700 Subject: [PATCH 0725/1130] fix(bluetooth): Split improvements * Proper usage of bt_uuid_cmp. * Central's don't start scanning for peripherals if `ZMK_BLE_CLEAR_BONDS_ON_START` is enabled. * Split peripherals don't advertize if `ZMK_BLE_CLEAR_BONDS_ON_START` is enabled. --- app/src/split/bluetooth/central.c | 15 ++++++++------- app/src/split/bluetooth/peripheral.c | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 147760ffae7..8a5e9d35c5a 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -251,8 +251,8 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); - if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, - BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID))) { + if (bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID)) == 0) { LOG_DBG("Found position state characteristic"); slot->discover_params.uuid = NULL; slot->discover_params.start_handle = attr->handle + 2; @@ -264,8 +264,8 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, slot->subscribe_params.notify = split_central_notify_func; slot->subscribe_params.value = BT_GATT_CCC_NOTIFY; split_central_subscribe(conn); - } else if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, - BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID))) { + } else if (bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID)) == 0) { LOG_DBG("Found run behavior handle"); slot->run_behavior_handle = bt_gatt_attr_value_handle(attr); } @@ -292,7 +292,8 @@ static uint8_t split_central_service_discovery_func(struct bt_conn *conn, return BT_GATT_ITER_STOP; } - if (bt_uuid_cmp(slot->discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { + if (bt_uuid_cmp(slot->discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID)) != + 0) { LOG_DBG("Found other service"); return BT_GATT_ITER_CONTINUE; } @@ -418,7 +419,7 @@ static bool split_central_eir_parse(struct bt_data *data, void *user_data) { continue; } - if (bt_uuid_cmp(&uuid.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { + if (bt_uuid_cmp(&uuid.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID)) != 0) { char uuid_str[BT_UUID_STR_LEN]; char service_uuid_str[BT_UUID_STR_LEN]; @@ -622,7 +623,7 @@ int zmk_split_bt_central_init(const struct device *_arg) { CONFIG_ZMK_BLE_THREAD_PRIORITY, NULL); bt_conn_cb_register(&conn_callbacks); - return start_scanning(); + return IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) ? 0 : start_scanning(); } SYS_INIT(zmk_split_bt_central_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index 6b767baa7c1..e053db8a61a 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -116,11 +116,11 @@ static int zmk_peripheral_ble_init(const struct device *_arg) { LOG_WRN("Clearing all existing BLE bond information from the keyboard"); bt_unpair(BT_ID_DEFAULT, NULL); -#endif - +#else bt_conn_cb_register(&conn_callbacks); start_advertising(); +#endif return 0; } From 147f7f23dca7a2eb5d7433d399948cfd51e068a9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 20 Jul 2023 23:53:38 -0700 Subject: [PATCH 0726/1130] fix(shields): Make settings_reset more flexible. * Don't reference `pro_micro` nexus node in settings_reset so it can be used with other controllers. * Use mock kscan node instead. --- app/boards/shields/settings_reset/settings_reset.keymap | 4 +--- app/boards/shields/settings_reset/settings_reset.overlay | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/boards/shields/settings_reset/settings_reset.keymap b/app/boards/shields/settings_reset/settings_reset.keymap index 0afdcc2bf35..1206ef1e363 100644 --- a/app/boards/shields/settings_reset/settings_reset.keymap +++ b/app/boards/shields/settings_reset/settings_reset.keymap @@ -12,9 +12,7 @@ compatible = "zmk,keymap"; default_layer { - bindings = < - &sys_reset - >; + bindings = <&sys_reset>; }; }; }; diff --git a/app/boards/shields/settings_reset/settings_reset.overlay b/app/boards/shields/settings_reset/settings_reset.overlay index 77a9d85871d..48a5f223b65 100644 --- a/app/boards/shields/settings_reset/settings_reset.overlay +++ b/app/boards/shields/settings_reset/settings_reset.overlay @@ -12,12 +12,12 @@ }; kscan0: kscan { - compatible = "zmk,kscan-gpio-direct"; + compatible = "zmk,kscan-mock"; label = "KSCAN"; + columns = <1>; + rows = <0>; - input-gpios - = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; + events = <>; }; }; From f743d57ff1d4d68f51fb11b99fc0217eeca42919 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 10 Jul 2023 22:44:44 -0700 Subject: [PATCH 0727/1130] feat(shields): Add splitkb.com Aurora Sofle * Add new shield for splitkb.com Aurora Sofle, supporting keys, encoder(s), displays, and RGB. Co-authored-by: Cem Aksoylar --- .../splitkb_aurora_sofle/Kconfig.defconfig | 53 +++++++++++++ .../splitkb_aurora_sofle/Kconfig.shield | 8 ++ .../boards/nice_nano.overlay | 46 +++++++++++ .../boards/nice_nano_v2.overlay | 46 +++++++++++ .../splitkb_aurora_sofle.conf | 9 +++ .../splitkb_aurora_sofle.dtsi | 79 +++++++++++++++++++ .../splitkb_aurora_sofle.keymap | 78 ++++++++++++++++++ .../splitkb_aurora_sofle.zmk.yml | 15 ++++ .../splitkb_aurora_sofle_left.overlay | 43 ++++++++++ .../splitkb_aurora_sofle_right.overlay | 45 +++++++++++ 10 files changed, 422 insertions(+) create mode 100644 app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig create mode 100644 app/boards/shields/splitkb_aurora_sofle/Kconfig.shield create mode 100644 app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay create mode 100644 app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.conf create mode 100644 app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi create mode 100644 app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.keymap create mode 100644 app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.zmk.yml create mode 100644 app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay create mode 100644 app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay diff --git a/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig new file mode 100644 index 00000000000..b53c4c8dc16 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig @@ -0,0 +1,53 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SPLITKB_AURORA_SOFLE_LEFT + +config ZMK_KEYBOARD_NAME + default "Aurora Sofle" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # SHIELD_SPLITKB_AURORA_SOFLE_LEFT + +if SHIELD_SPLITKB_AURORA_SOFLE_LEFT || SHIELD_SPLITKB_AURORA_SOFLE_RIGHT + +config ZMK_SPLIT + default y + +config ZMK_RGB_UNDERGLOW + select WS2812_STRIP + select SPI + +if ZMK_DISPLAY + +config SSD1306 + default y + +config I2C + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LV_Z_VDB_SIZE + default 64 + +config LV_DPI_DEF + default 148 + +config LV_Z_BITS_PER_PIXEL + default 1 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif # SHIELD_SPLITKB_AURORA_SOFLE_LEFT || SHIELD_SPLITKB_AURORA_SOFLE_RIGHT diff --git a/app/boards/shields/splitkb_aurora_sofle/Kconfig.shield b/app/boards/shields/splitkb_aurora_sofle/Kconfig.shield new file mode 100644 index 00000000000..c72e95d9d0f --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITKB_AURORA_SOFLE_LEFT + def_bool $(shields_list_contains,splitkb_aurora_sofle_left) + +config SHIELD_SPLITKB_AURORA_SOFLE_RIGHT + def_bool $(shields_list_contains,splitkb_aurora_sofle_right) diff --git a/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay new file mode 100644 index 00000000000..8f1629ced14 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay @@ -0,0 +1,46 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..8f1629ced14 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay @@ -0,0 +1,46 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.conf b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.conf new file mode 100644 index 00000000000..d456100ab74 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.conf @@ -0,0 +1,9 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi new file mode 100644 index 00000000000..798cd84e5f3 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW30 | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | SW30 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) + >; + }; + + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "L_ENCODER"; + steps = <144>; + status = "disabled"; + + a-gpios = <&pro_micro 16 GPIO_PULL_UP>; + b-gpios = <&pro_micro 10 GPIO_PULL_UP>; + }; + + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "R_ENCODER"; + steps = <144>; + status = "disabled"; + + a-gpios = <&pro_micro 16 GPIO_PULL_UP>; + b-gpios = <&pro_micro 10 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <36>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.keymap b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.keymap new file mode 100644 index 00000000000..23127416762 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.keymap @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/* Uncomment this block if using RGB +&led_strip { + chain-length = <6>; + // chain-length = <35>; // Uncomment if using both per-key and underglow LEDs + // chain-length = <29>; // Uncomment if using only per-key LEDs. +}; + */ + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// |CTRL | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | RALT | + bindings = < +&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp GRAVE +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp BSPC &kp RGUI &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp TILDE +&trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | v | ^ | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KP_PLUS &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.zmk.yml b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.zmk.yml new file mode 100644 index 00000000000..d832d3e1053 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: splitkb_aurora_sofle +name: splitkb.com Aurora Sofle +type: shield +url: https://splitkb.com/products/aurora-sofle-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - splitkb_aurora_sofle_left + - splitkb_aurora_sofle_right diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay new file mode 100644 index 00000000000..1adaf401563 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_sofle.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 19 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&left_encoder { + status = "okay"; +}; + + diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay new file mode 100644 index 00000000000..3249b94193c --- /dev/null +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_sofle.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 19 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&right_encoder { + status = "okay"; +}; + +&default_transform { + col-offset = <6>; +}; From 9a963abfc8b27c6fdfb5b6b4b38e5905d6a360a7 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Mon, 17 Jul 2023 17:16:04 -0400 Subject: [PATCH 0728/1130] refactor: use low priority workqueue for underglow and battery reporting Blocking operations on the high priority system workqueue may result in deadlocks, particularly when Bluetooth is in use. --- app/CMakeLists.txt | 1 + app/Kconfig | 8 ++++++++ app/include/zmk/workqueue.h | 1 + app/src/battery.c | 14 +++++--------- app/src/rgb_underglow.c | 3 ++- app/src/workqueue.c | 27 +++++++++++++++++++++++++++ 6 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 app/include/zmk/workqueue.h create mode 100644 app/src/workqueue.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 4c1c63c2cfa..efa349052cf 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -87,6 +87,7 @@ target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/usb.c) target_sources_ifdef(CONFIG_ZMK_USB app PRIVATE src/usb_hid.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/backlight.c) +target_sources(app PRIVATE src/workqueue.c) target_sources(app PRIVATE src/main.c) add_subdirectory(src/display/) diff --git a/app/Kconfig b/app/Kconfig index fe019918cbb..89a128b5a27 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -504,6 +504,14 @@ config ZMK_BATTERY_REPORT_INTERVAL int "Battery level report interval in seconds" default 60 +config ZMK_LOW_PRIORITY_THREAD_STACK_SIZE + int "Low priority thread stack size" + default 768 + +config ZMK_LOW_PRIORITY_THREAD_PRIORITY + int "Low priority thread priority" + default 10 + #Advanced endmenu diff --git a/app/include/zmk/workqueue.h b/app/include/zmk/workqueue.h new file mode 100644 index 00000000000..41e94580846 --- /dev/null +++ b/app/include/zmk/workqueue.h @@ -0,0 +1 @@ +struct k_work_q *zmk_workqueue_lowprio_work_q(); diff --git a/app/src/battery.c b/app/src/battery.c index 540f7c3eab0..87a25e08a2d 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -18,6 +18,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include static uint8_t last_state_of_charge = 0; @@ -77,7 +78,9 @@ static void zmk_battery_work(struct k_work *work) { K_WORK_DEFINE(battery_work, zmk_battery_work); -static void zmk_battery_timer(struct k_timer *timer) { k_work_submit(&battery_work); } +static void zmk_battery_timer(struct k_timer *timer) { + k_work_submit_to_queue(zmk_workqueue_lowprio_work_q(), &battery_work); +} K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL); @@ -97,14 +100,7 @@ static int zmk_battery_init(const struct device *_arg) { return -ENODEV; } - int rc = zmk_battery_update(battery); - - if (rc != 0) { - LOG_DBG("Failed to update battery value: %d.", rc); - return rc; - } - - k_timer_start(&battery_timer, K_MINUTES(1), K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL)); + k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL)); return 0; } diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 7b6491749e2..08ba2fb233e 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -24,6 +24,7 @@ #include #include #include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -203,7 +204,7 @@ static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) { return; } - k_work_submit(&underglow_work); + k_work_submit_to_queue(zmk_workqueue_lowprio_work_q(), &underglow_work); } K_TIMER_DEFINE(underglow_tick, zmk_rgb_underglow_tick_handler, NULL); diff --git a/app/src/workqueue.c b/app/src/workqueue.c new file mode 100644 index 00000000000..a9a8bce5202 --- /dev/null +++ b/app/src/workqueue.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include + +K_THREAD_STACK_DEFINE(lowprio_q_stack, CONFIG_ZMK_LOW_PRIORITY_THREAD_STACK_SIZE); + +static struct k_work_q lowprio_work_q; + +struct k_work_q *zmk_workqueue_lowprio_work_q() { + return &lowprio_work_q; +} + +static int workqueue_init() { + static const struct k_work_queue_config queue_config = {.name = "Low Priority Work Queue"}; + k_work_queue_start(&lowprio_work_q, lowprio_q_stack, K_THREAD_STACK_SIZEOF(lowprio_q_stack), + CONFIG_ZMK_LOW_PRIORITY_THREAD_PRIORITY, &queue_config); + return 0; +} + +SYS_INIT(workqueue_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); From cb9c573b534dcb52ee8cf6b2cec6cb880e841301 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Mon, 17 Jul 2023 17:32:14 -0400 Subject: [PATCH 0729/1130] refactor(underglow): turn underglow off in low priority work queue --- app/src/rgb_underglow.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 08ba2fb233e..b80d403953f 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -197,14 +197,14 @@ static void zmk_rgb_underglow_tick(struct k_work *work) { } } -K_WORK_DEFINE(underglow_work, zmk_rgb_underglow_tick); +K_WORK_DEFINE(underglow_tick_work, zmk_rgb_underglow_tick); static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) { if (!state.on) { return; } - k_work_submit_to_queue(zmk_workqueue_lowprio_work_q(), &underglow_work); + k_work_submit_to_queue(zmk_workqueue_lowprio_work_q(), &underglow_tick_work); } K_TIMER_DEFINE(underglow_tick, zmk_rgb_underglow_tick_handler, NULL); @@ -323,6 +323,16 @@ int zmk_rgb_underglow_on() { return zmk_rgb_underglow_save_state(); } +static void zmk_rgb_underglow_off_handler(struct k_work *work) { + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + pixels[i] = (struct led_rgb){r : 0, g : 0, b : 0}; + } + + led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); +} + +K_WORK_DEFINE(underglow_off_work, zmk_rgb_underglow_off_handler); + int zmk_rgb_underglow_off() { if (!led_strip) return -ENODEV; @@ -336,11 +346,7 @@ int zmk_rgb_underglow_off() { } #endif - for (int i = 0; i < STRIP_NUM_PIXELS; i++) { - pixels[i] = (struct led_rgb){r : 0, g : 0, b : 0}; - } - - led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); + k_work_submit_to_queue(zmk_workqueue_lowprio_work_q(), &underglow_off_work); k_timer_stop(&underglow_tick); state.on = false; From e65a7e3075a7a153ea478d4fd293ae65b31e33ed Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Thu, 20 Jul 2023 16:48:02 -0400 Subject: [PATCH 0730/1130] fix(battery): change nRF52 ADC gain With ADC pin, maximum 3.6V input needs gain 1/6 to be less than the 0.6V reference. With VDDHDIV5, maximum 6V input corresponds to 1.2V so gain 1/2 will be less than the 0.6V reference and be slightly more precise. --- app/drivers/sensor/battery/battery_nrf_vddh.c | 2 +- app/drivers/sensor/battery/battery_voltage_divider.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/drivers/sensor/battery/battery_nrf_vddh.c b/app/drivers/sensor/battery/battery_nrf_vddh.c index 3f230812f4b..32c7c61eb82 100644 --- a/app/drivers/sensor/battery/battery_nrf_vddh.c +++ b/app/drivers/sensor/battery/battery_nrf_vddh.c @@ -93,7 +93,7 @@ static int vddh_init(const struct device *dev) { #ifdef CONFIG_ADC_NRFX_SAADC drv_data->acc = (struct adc_channel_cfg){ - .gain = ADC_GAIN_1_5, + .gain = ADC_GAIN_1_2, .reference = ADC_REF_INTERNAL, .acquisition_time = ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 40), .input_positive = SAADC_CH_PSELN_PSELN_VDDHDIV5, diff --git a/app/drivers/sensor/battery/battery_voltage_divider.c b/app/drivers/sensor/battery/battery_voltage_divider.c index 655af3dbd74..62a02e9c3df 100644 --- a/app/drivers/sensor/battery/battery_voltage_divider.c +++ b/app/drivers/sensor/battery/battery_voltage_divider.c @@ -140,7 +140,7 @@ static int bvd_init(const struct device *dev) { #ifdef CONFIG_ADC_NRFX_SAADC drv_data->acc = (struct adc_channel_cfg){ - .gain = ADC_GAIN_1_5, + .gain = ADC_GAIN_1_6, .reference = ADC_REF_INTERNAL, .acquisition_time = ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 40), .input_positive = SAADC_CH_PSELP_PSELP_AnalogInput0 + drv_cfg->io_channel.channel, From d17c473d45b3bd01d80b8a5eab417986be0281da Mon Sep 17 00:00:00 2001 From: Jorge Villalobos Date: Wed, 2 Aug 2023 12:57:00 -0400 Subject: [PATCH 0731/1130] feat(docs): Improve parameterized macros docs --- docs/docs/behaviors/macros.md | 150 +++++++++++++++++++++++----------- docs/docs/config/behaviors.md | 37 +++++---- 2 files changed, 122 insertions(+), 65 deletions(-) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 279d135697c..0757e735285 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -49,22 +49,6 @@ For use cases involving sending a single keycode with modifiers, for instance ct with [modifier functions](../codes/modifiers.mdx#modifier-functions) can be used instead of a macro. ::: -### Parameterized Macros - -Macros can also be "parameterized", allowing them to be bound in your keymap with unique values passed into them, e.g.: - -``` - raise_layer { - bindings = <&my_cool_macro A> - }; -``` - -When defining a parameterized macro, a different `compatible` value will be used depending on how many parameters are passed into it: - -- `zmk,behavior-macro` - a macro that takes no parameters. -- `zmk,behavior-macro-one-param` - a macro that takes one parameter when used. -- `zmk,behavior-macro-two-param` - a macro that takes two parameters when used. - ### Bindings Like [hold-taps](/docs/behaviors/hold-tap), macros are created by composing other behaviors, and any of those behaviors can @@ -83,30 +67,6 @@ bindings There are a set of special macro controls that can be included in the `bindings` list to modify the way the macro is processed. -### Parameters - -When creating a macro that takes parameter(s), there are macro controls that change when the parameters passed to the macro are used -within the macro itself. All of the controls are "one shot" and will change how the passed in parameters are used for the very next non-macro control behavior in the `bindings` list of the macro. - -For example, to pass the first parameter from the macro into a `&kp` used in the macro, you would use: - -``` -bindings - = <¯o_param_1to1> - , <&kp MACRO_PLACEHOLDER> - ; -``` - -Because `kp` takes one parameter, you can't simply make the second entry `<&kp>` in the `bindings` list. Whatever value you do pass in will be replaced when the macro is triggered, so you can put _any_ value there, e.g. `0`, `A` keycode, etc. To make it very obvious that the parameter there is not actually going to be used, you can use `MACRO_PLACEHOLDER` which is simply an alias for `0`. - -The available parameter controls are: - -- `¯o_param_1to1` - pass the first parameter of the macro into the first parameter of the next behavior in the `bindings` list. -- `¯o_param_1to2` - pass the first parameter of the macro into the second parameter of the next behavior in the `bindings` list. - -* `¯o_param_2to1` - pass the second parameter of the macro into the first parameter of the next behavior in the `bindings` list. -* `¯o_param_2to2` - pass the second parameter of the macro into the second parameter of the next behavior in the `bindings` list. - ### Binding Activation Mode Bindings in a macro are activated differently, depending on the current "activation mode" of the macro. @@ -185,6 +145,70 @@ Macros use an internal queue to invoke each behavior in the bindings list when t To prevent issues with longer macros, you can change the size of this queue via the `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE` setting in your configuration, [typically through your `.conf` file](../config/index.md). For example, `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE=512` would allow your macro to type about 256 characters. +## Parameterized Macros + +Macros can also be "parameterized", allowing them to be bound in your keymap with unique values passed into them, e.g.: + +``` + raise_layer { + bindings = <&my_one_param_macro A> + }; +``` + +### Defining Parameterized Macros + +Parameterized macros must be defined using specific values for the `compatible` and `#binding-cells` properties, depending on how many parameters they require (up to a maximum of two): + +```dts +/ { + macros { + // 0 params macro + my_macro: my_macro { + // ... + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; // Must be 0 + bindings = /* ... */; + }; + + // 1 param macro + my_one_param_macro: my_one_param_macro { + // ... + compatible = "zmk,behavior-macro-one-param"; + #binding-cells = <1>; // Must be 1 + bindings = /* ... */; + }; + + // 2 params macro + my_two_param_macro: my_two_param_macro { + // ... + compatible = "zmk,behavior-macro-two-param"; + #binding-cells = <2>; // Must be 2 + bindings = /* ... */; + }; + }; +}; +``` + +### Parameters, Bindings and Controls + +There are special macro controls which must be used in order to forward received parameters to the macro's `bindings`. These controls are "one shot" and will determine how received parameters are used on the very next (non-macro control) behavior in the macro's `bindings` list. + +For example, to pass the first parameter received into a `&kp` binding, you would use: + +```dts +bindings = <¯o_param_1to1>, <&kp MACRO_PLACEHOLDER>; +``` + +Because `kp` takes one parameter, you can't simply make the second entry `<&kp>` in the `bindings` list. Whatever value you do pass in will be replaced when the macro is triggered, so you can put _any_ value there, e.g. `0`, `A` keycode, etc. To make it very obvious that the parameter there is not actually going to be used, you can use `MACRO_PLACEHOLDER` which is simply an alias for `0`. + +The available parameter controls are: + +- `¯o_param_1to1` - pass the first parameter of the macro into the first parameter of the next behavior in the `bindings` list. +- `¯o_param_1to2` - pass the first parameter of the macro into the second parameter of the next behavior in the `bindings` list. + +* `¯o_param_2to1` - pass the second parameter of the macro into the first parameter of the next behavior in the `bindings` list. +* `¯o_param_2to2` - pass the second parameter of the macro into the second parameter of the next behavior in the `bindings` list. + ## Common Patterns Below are some examples of how the macro behavior can be used for various useful functionality. @@ -198,12 +222,36 @@ To achieve this, a combination of a 0ms wait time and splitting the press and re #### Layer + Modifier -``` -wait-ms = <0>; -bindings - = <¯o_press &mo 1 &kp LSHFT> - , <¯o_pause_for_release> - , <¯o_release &mo 1 &kp LSHFT>; +```dts +/** + * Temporarily switches to a layer (`&mo`) while a modifier is held. + * Analogous to QMK's `LM()`, using a parameterized macro. + * + * Params: + * 1. Layer to switch to + * 2. Modifier to press while layer is active + * + * Example: + * `&lm NUM_LAYER LSHIFT` + */ +lm: lm { + label = "LAYER_MOD"; + compatible = "zmk,behavior-macro-two-param"; + wait-ms = <0>; + tap-ms = <0>; + #binding-cells = <2>; + bindings + = <¯o_param_1to1> + , <¯o_press &mo MACRO_PLACEHOLDER> + , <¯o_param_2to1> + , <¯o_press &kp MACRO_PLACEHOLDER> + , <¯o_pause_for_release> + , <¯o_param_2to1> + , <¯o_release &kp MACRO_PLACEHOLDER> + , <¯o_param_1to1> + , <¯o_release &mo MACRO_PLACEHOLDER> + ; +}; ``` #### Layer + Underglow Color @@ -252,20 +300,24 @@ bindings ## Convenience C Macro -To avoid repetition or possible typos when declaring a macro, a convenience _C_ macro, named `ZMK_MACRO(name, props)` can be used to simplify things: +To avoid repetition or possible typos when declaring a **zero parameter macro**, a convenience _C_ macro, named `ZMK_MACRO(name, props)` can be used to simplify things: ``` - ZMK_MACRO(my_macro, + ZMK_MACRO(my_zero_param_macro, wait-ms = <30>; tap-ms = <40>; bindings = <&kp Z &kp M &kp K>; ) ``` +:::note +`ZMK_MACRO()` **only supports declaring non-parameterized (zero parameter) macros**; parameterized declarations are not currently supported. +::: + This can be used instead of a complete macro definition. During the firmware build process, the example above would produce the complete macro definition below: ``` - my_macro: my_macro { + my_zero_param_macro: my_zero_param_macro { compatible = "zmk,behavior-macro"; label = "ZM_my_macro"; #binding-cells = <0>; diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 2ff99d58cbb..60e8b72abca 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -131,26 +131,31 @@ See the [macro behavior](../behaviors/macros.md) documentation for more details Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro.yaml) -Applies to: `compatible = "zmk,behavior-macro"` +| Property | Type | Description | Default | +| ---------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| `label` | string | Unique label for the node | | +| `compatible` | string | Macro type, **must be _one_ of**:
    • `"zmk,behavior-macro"`
    • `"zmk,behavior-macro-one-param"`
    • `"zmk,behavior-macro-two-param"` | | +| `#binding-cells` | int | Number of params accepted (depends on `compatible` property), **must be _one_ of**:
    • `<0>`
    • `<1>`
    • `<2>` | | +| `bindings` | phandle array | List of behaviors to trigger | | +| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | +| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | -| Property | Type | Description | Default | -| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------- | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<0>` | | -| `bindings` | phandle array | List of behaviors to trigger | | -| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | -| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | +### Macro Control Behaviors The following macro-specific behaviors can be added at any point in the `bindings` list to change how the macro triggers subsequent behaviors. -| Behavior | Description | -| -------------------------- | ----------------------------------------------------------------------------------------------------- | -| `¯o_tap` | Switches to tap mode | -| `¯o_press` | Switches to press mode | -| `¯o_release` | Switches to release mode | -| `¯o_pause_for_release` | Pauses the macro until the macro key itself is released | -| `¯o_wait_time TIME` | Changes the time to wait (in milliseconds) before triggering the next behavior. | -| `¯o_tap_time TIME` | Changes the time to wait (in milliseconds) between the press and release events of a tapped behavior. | +| Behavior | Description | +| -------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `¯o_tap` | Switches to tap mode | +| `¯o_press` | Switches to press mode | +| `¯o_release` | Switches to release mode | +| `¯o_pause_for_release` | Pauses the macro until the macro key itself is released | +| `¯o_wait_time TIME` | Changes the time to wait (in milliseconds) before triggering the next behavior. | +| `¯o_tap_time TIME` | Changes the time to wait (in milliseconds) between the press and release events of a tapped behavior. | +| `¯o_param_1to1` | Forward the first parameter received by the macro to the first parameter of the next (non-macro control) behavior. | +| `¯o_param_1to2` | Forward the first parameter received by the macro to the second parameter of the next (non-macro control) behavior. | +| `¯o_param_2to1` | Forward the second parameter received by the macro to the first parameter of the next (non-macro control) behavior. | +| `¯o_param_2to2` | Forward the second parameter received by the macro to the second parameter of the next (non-macro control) behavior. | ## Mod-Morph From c957348e6187ffde3c073e8c367a60a7ee16b12c Mon Sep 17 00:00:00 2001 From: Seth Milliken Date: Tue, 8 Aug 2023 15:12:46 -0700 Subject: [PATCH 0732/1130] fix(docs): detail overriding the `led_strip` `chain-length` property Quite a few people have struggled with setting the correct `chain-length` for their `led_strip`. For some, this is their first time needing to change a pre-defined devicetree property, and so they aren't familiar with the technique. I commonly see folks adding a duplicate of the entire `*.overlay` file with only the `chain-length` value changed. Having clear documentation for this specific application of the property override technique could help forestall these problems, and give those of us helping out in Discord something to easily reference. --- docs/docs/features/underglow.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index 00d3aa0ab8a..2b1400fc7e8 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -39,6 +39,20 @@ use Kconfig. If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). +### Modifying the number of LEDs + +A common issue when enabling underglow is that some of the installed LEDs do not illuminate. This can happen when a board's default underglow configuration accounts only for either the downward facing LEDs or the upward facing LEDs under each key. On a split keyboard, a good sign that this may be the problem is that the unilluminated LEDs on each half are symmetrical. + +The number of underglow LEDs is controlled by the `chain-length` property in the `led_strip` node. You can [change the value of this property](../config/index.md#changing-devicetree-properties) in the `.keymap` file by adding a stanza like this one outside of any other node (i.e. above or below the `/` node): + +``` +&led_strip { + chain-length = <21>; +}; +``` + +where the value is the total count of LEDs (per half, for split keyboards). + ## Configuring RGB Underglow See [RGB underglow configuration](/docs/config/underglow). From 9d4422980088fb6d2130ac9a3119809984762267 Mon Sep 17 00:00:00 2001 From: Stephen Wan Date: Mon, 15 Mar 2021 12:26:18 -0700 Subject: [PATCH 0733/1130] feature(split): add support for sensors from peripheral This commit adds a new GATT characteristics on the peripheral side and wires it up to read sensor values. The central side subscribes to this new characteristics and replays sensor values on its side. Co-authored-by: Peter Johanson --- app/include/zmk/sensors.h | 6 +- app/include/zmk/split/bluetooth/service.h | 15 +++- app/include/zmk/split/bluetooth/uuid.h | 1 + app/src/sensors.c | 6 +- app/src/split/bluetooth/central.c | 92 +++++++++++++++++++---- app/src/split/bluetooth/service.c | 78 ++++++++++++++++++- app/src/split/bluetooth/split_listener.c | 26 +++++-- 7 files changed, 196 insertions(+), 28 deletions(-) diff --git a/app/include/zmk/sensors.h b/app/include/zmk/sensors.h index 8ac1c283cb6..1919d4ce647 100644 --- a/app/include/zmk/sensors.h +++ b/app/include/zmk/sensors.h @@ -24,7 +24,9 @@ struct zmk_sensor_config { uint16_t triggers_per_rotation; }; +// This struct is also used for data transfer for splits, so any changes to the size, layout, etc +// is a breaking change for the split GATT service protocol. struct zmk_sensor_channel_data { - enum sensor_channel channel; struct sensor_value value; -}; + enum sensor_channel channel; +} __packed; diff --git a/app/include/zmk/split/bluetooth/service.h b/app/include/zmk/split/bluetooth/service.h index f0c1d79ff7d..112cd552942 100644 --- a/app/include/zmk/split/bluetooth/service.h +++ b/app/include/zmk/split/bluetooth/service.h @@ -6,8 +6,18 @@ #pragma once +#include +#include + #define ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN 9 +struct sensor_event { + uint8_t sensor_index; + + uint8_t channel_data_size; + struct zmk_sensor_channel_data channel_data[ZMK_SENSOR_EVENT_MAX_CHANNELS]; +} __packed; + struct zmk_split_run_behavior_data { uint8_t position; uint8_t state; @@ -21,4 +31,7 @@ struct zmk_split_run_behavior_payload { } __packed; int zmk_split_bt_position_pressed(uint8_t position); -int zmk_split_bt_position_released(uint8_t position); \ No newline at end of file +int zmk_split_bt_position_released(uint8_t position); +int zmk_split_bt_sensor_triggered(uint8_t sensor_index, + const struct zmk_sensor_channel_data channel_data[], + size_t channel_data_size); diff --git a/app/include/zmk/split/bluetooth/uuid.h b/app/include/zmk/split/bluetooth/uuid.h index cbdb17723cd..c38131dd83e 100644 --- a/app/include/zmk/split/bluetooth/uuid.h +++ b/app/include/zmk/split/bluetooth/uuid.h @@ -16,3 +16,4 @@ #define ZMK_SPLIT_BT_SERVICE_UUID ZMK_BT_SPLIT_UUID(0x00000000) #define ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000001) #define ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID ZMK_BT_SPLIT_UUID(0x00000002) +#define ZMK_SPLIT_BT_CHAR_SENSOR_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000003) diff --git a/app/src/sensors.c b/app/src/sensors.c index e339afe0437..60f2bd2a33f 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -29,7 +29,7 @@ struct sensors_item_cfg { { \ .dev = DEVICE_DT_GET_OR_NULL(node), \ .trigger = {.type = SENSOR_TRIG_DATA_READY, .chan = SENSOR_CHAN_ROTATION}, \ - .config = &configs[idx] \ + .config = &configs[idx], .sensor_index = idx \ } #define SENSOR_ITEM(idx, _i) _SENSOR_ITEM(idx, ZMK_KEYMAP_SENSORS_BY_IDX(idx)) @@ -112,7 +112,7 @@ static void zmk_sensors_trigger_handler(const struct device *dev, int sensor_index = test_item - sensors; if (sensor_index < 0 || sensor_index >= ARRAY_SIZE(sensors)) { - LOG_ERR("Invalid sensor item triggered our callback"); + LOG_ERR("Invalid sensor item triggered our callback (%d)", sensor_index); return; } @@ -127,8 +127,6 @@ static void zmk_sensors_trigger_handler(const struct device *dev, static void zmk_sensors_init_item(uint8_t i) { LOG_DBG("Init sensor at index %d", i); - sensors[i].sensor_index = i; - if (!sensors[i].dev) { LOG_DBG("No local device for %d", i); return; diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 8a5e9d35c5a..b70d79e3a3a 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -21,10 +21,12 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include #include #include #include #include +#include static int start_scanning(void); @@ -41,6 +43,7 @@ struct peripheral_slot { struct bt_conn *conn; struct bt_gatt_discover_params discover_params; struct bt_gatt_subscribe_params subscribe_params; + struct bt_gatt_subscribe_params sensor_subscribe_params; struct bt_gatt_discover_params sub_discover_params; uint16_t run_behavior_handle; uint8_t position_state[POSITION_STATE_DATA_LEN]; @@ -165,6 +168,52 @@ int confirm_peripheral_slot_conn(struct bt_conn *conn) { return 0; } +#if ZMK_KEYMAP_HAS_SENSORS +K_MSGQ_DEFINE(peripheral_sensor_event_msgq, sizeof(struct zmk_sensor_event), + CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE, 4); + +void peripheral_sensor_event_work_callback(struct k_work *work) { + struct zmk_sensor_event ev; + while (k_msgq_get(&peripheral_sensor_event_msgq, &ev, K_NO_WAIT) == 0) { + LOG_DBG("Trigger sensor change for %d", ev.sensor_index); + ZMK_EVENT_RAISE(new_zmk_sensor_event(ev)); + } +} + +K_WORK_DEFINE(peripheral_sensor_event_work, peripheral_sensor_event_work_callback); + +static uint8_t split_central_sensor_notify_func(struct bt_conn *conn, + struct bt_gatt_subscribe_params *params, + const void *data, uint16_t length) { + if (!data) { + LOG_DBG("[UNSUBSCRIBED]"); + params->value_handle = 0U; + return BT_GATT_ITER_STOP; + } + + LOG_DBG("[SENSOR NOTIFICATION] data %p length %u", data, length); + + if (length < offsetof(struct sensor_event, channel_data)) { + LOG_WRN("Ignoring sensor notify with insufficient data length (%d)", length); + return BT_GATT_ITER_STOP; + } + + struct sensor_event sensor_event; + memcpy(&sensor_event, data, MIN(length, sizeof(sensor_event))); + struct zmk_sensor_event ev = { + .sensor_index = sensor_event.sensor_index, + .channel_data_size = MIN(sensor_event.channel_data_size, ZMK_SENSOR_EVENT_MAX_CHANNELS), + .timestamp = k_uptime_get()}; + + memcpy(ev.channel_data, sensor_event.channel_data, + sizeof(struct zmk_sensor_channel_data) * sensor_event.channel_data_size); + k_msgq_put(&peripheral_sensor_event_msgq, &ev, K_NO_WAIT); + k_work_submit(&peripheral_sensor_event_work); + + return BT_GATT_ITER_CONTINUE; +} +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + static uint8_t split_central_notify_func(struct bt_conn *conn, struct bt_gatt_subscribe_params *params, const void *data, uint16_t length) { @@ -209,14 +258,8 @@ static uint8_t split_central_notify_func(struct bt_conn *conn, return BT_GATT_ITER_CONTINUE; } -static void split_central_subscribe(struct bt_conn *conn) { - struct peripheral_slot *slot = peripheral_slot_for_conn(conn); - if (slot == NULL) { - LOG_ERR("No peripheral state found for connection"); - return; - } - - int err = bt_gatt_subscribe(conn, &slot->subscribe_params); +static int split_central_subscribe(struct bt_conn *conn, struct bt_gatt_subscribe_params *params) { + int err = bt_gatt_subscribe(conn, params); switch (err) { case -EALREADY: LOG_DBG("[ALREADY SUBSCRIBED]"); @@ -228,6 +271,8 @@ static void split_central_subscribe(struct bt_conn *conn) { LOG_ERR("Subscribe failed (err %d)", err); break; } + + return err; } static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, @@ -250,9 +295,9 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, } LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); + const struct bt_uuid *chrc_uuid = ((struct bt_gatt_chrc *)attr->user_data)->uuid; - if (bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, - BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID)) == 0) { + if (bt_uuid_cmp(chrc_uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID)) == 0) { LOG_DBG("Found position state characteristic"); slot->discover_params.uuid = NULL; slot->discover_params.start_handle = attr->handle + 2; @@ -263,14 +308,33 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, slot->subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); slot->subscribe_params.notify = split_central_notify_func; slot->subscribe_params.value = BT_GATT_CCC_NOTIFY; - split_central_subscribe(conn); - } else if (bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, - BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID)) == 0) { + split_central_subscribe(conn, &slot->subscribe_params); +#if ZMK_KEYMAP_HAS_SENSORS + } else if (bt_uuid_cmp(chrc_uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_SENSOR_STATE_UUID)) == + 0) { + slot->discover_params.uuid = NULL; + slot->discover_params.start_handle = attr->handle + 2; + slot->discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + + slot->sensor_subscribe_params.disc_params = &slot->sub_discover_params; + slot->sensor_subscribe_params.end_handle = slot->discover_params.end_handle; + slot->sensor_subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + slot->sensor_subscribe_params.notify = split_central_sensor_notify_func; + slot->sensor_subscribe_params.value = BT_GATT_CCC_NOTIFY; + split_central_subscribe(conn, &slot->sensor_subscribe_params); +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + } else if (bt_uuid_cmp(chrc_uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID)) == + 0) { LOG_DBG("Found run behavior handle"); + slot->discover_params.uuid = NULL; + slot->discover_params.start_handle = attr->handle + 2; slot->run_behavior_handle = bt_gatt_attr_value_handle(attr); } - bool subscribed = (slot->run_behavior_handle && slot->subscribe_params.value_handle); + bool subscribed = slot->run_behavior_handle && slot->subscribe_params.value_handle; +#if ZMK_KEYMAP_HAS_SENSORS + subscribed = subscribed && slot->sensor_subscribe_params.value_handle; +#endif /* ZMK_KEYMAP_HAS_SENSORS */ return subscribed ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; } diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index f7b0d587b26..620df53e11c 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: MIT */ +#include #include #include #include @@ -20,6 +21,22 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include +#include + +#if ZMK_KEYMAP_HAS_SENSORS +static struct sensor_event last_sensor_event; + +static ssize_t split_svc_sensor_state(struct bt_conn *conn, const struct bt_gatt_attr *attrs, + void *buf, uint16_t len, uint16_t offset) { + return bt_gatt_attr_read(conn, attrs, buf, len, offset, &last_sensor_event, + sizeof(last_sensor_event)); +} + +static void split_svc_sensor_state_ccc(const struct bt_gatt_attr *attr, uint16_t value) { + LOG_DBG("value %d", value); +} +#endif /* ZMK_KEYMAP_HAS_SENSORS */ #define POS_STATE_LEN 16 @@ -98,7 +115,14 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE_ENCRYPT, NULL, split_svc_run_behavior, &behavior_run_payload), BT_GATT_DESCRIPTOR(BT_UUID_NUM_OF_DIGITALS, BT_GATT_PERM_READ, split_svc_num_of_positions, NULL, - &num_of_positions), ); + &num_of_positions), +#if ZMK_KEYMAP_HAS_SENSORS + BT_GATT_CHARACTERISTIC(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_SENSOR_STATE_UUID), + BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, + split_svc_sensor_state, NULL, &last_sensor_event), + BT_GATT_CCC(split_svc_sensor_state_ccc, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), +#endif /* ZMK_KEYMAP_HAS_SENSORS */ +); K_THREAD_STACK_DEFINE(service_q_stack, CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE); @@ -151,6 +175,58 @@ int zmk_split_bt_position_released(uint8_t position) { return send_position_state(); } +#if ZMK_KEYMAP_HAS_SENSORS +K_MSGQ_DEFINE(sensor_state_msgq, sizeof(struct sensor_event), + CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE, 4); + +void send_sensor_state_callback(struct k_work *work) { + while (k_msgq_get(&sensor_state_msgq, &last_sensor_event, K_NO_WAIT) == 0) { + int err = bt_gatt_notify(NULL, &split_svc.attrs[8], &last_sensor_event, + sizeof(last_sensor_event)); + if (err) { + LOG_DBG("Error notifying %d", err); + } + } +}; + +K_WORK_DEFINE(service_sensor_notify_work, send_sensor_state_callback); + +int send_sensor_state(struct sensor_event ev) { + int err = k_msgq_put(&sensor_state_msgq, &ev, K_MSEC(100)); + if (err) { + // retry... + switch (err) { + case -EAGAIN: { + LOG_WRN("Sensor state message queue full, popping first message and queueing again"); + struct sensor_event discarded_state; + k_msgq_get(&sensor_state_msgq, &discarded_state, K_NO_WAIT); + return send_sensor_state(ev); + } + default: + LOG_WRN("Failed to queue sensor state to send (%d)", err); + return err; + } + } + + k_work_submit_to_queue(&service_work_q, &service_sensor_notify_work); + return 0; +} + +int zmk_split_bt_sensor_triggered(uint8_t sensor_index, + const struct zmk_sensor_channel_data channel_data[], + size_t channel_data_size) { + if (channel_data_size > ZMK_SENSOR_EVENT_MAX_CHANNELS) { + return -EINVAL; + } + + struct sensor_event ev = + (struct sensor_event){.sensor_index = sensor_index, .channel_data_size = channel_data_size}; + memcpy(ev.channel_data, channel_data, + channel_data_size * sizeof(struct zmk_sensor_channel_data)); + return send_sensor_state(ev); +} +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + int service_init(const struct device *_arg) { static const struct k_work_queue_config queue_config = { .name = "Split Peripheral Notification Queue"}; diff --git a/app/src/split/bluetooth/split_listener.c b/app/src/split/bluetooth/split_listener.c index eb5398c42d6..9b680d2c89c 100644 --- a/app/src/split/bluetooth/split_listener.c +++ b/app/src/split/bluetooth/split_listener.c @@ -13,21 +13,35 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include #include +#include #include int split_listener(const zmk_event_t *eh) { LOG_DBG(""); - const struct zmk_position_state_changed *ev = as_zmk_position_state_changed(eh); - if (ev != NULL) { - if (ev->state) { - return zmk_split_bt_position_pressed(ev->position); + const struct zmk_position_state_changed *pos_ev; + if ((pos_ev = as_zmk_position_state_changed(eh)) != NULL) { + if (pos_ev->state) { + return zmk_split_bt_position_pressed(pos_ev->position); } else { - return zmk_split_bt_position_released(ev->position); + return zmk_split_bt_position_released(pos_ev->position); } } + +#if ZMK_KEYMAP_HAS_SENSORS + const struct zmk_sensor_event *sensor_ev; + if ((sensor_ev = as_zmk_sensor_event(eh)) != NULL) { + return zmk_split_bt_sensor_triggered(sensor_ev->sensor_index, sensor_ev->channel_data, + sensor_ev->channel_data_size); + } +#endif /* ZMK_KEYMAP_HAS_SENSORS */ return ZMK_EV_EVENT_BUBBLE; } ZMK_LISTENER(split_listener, split_listener); -ZMK_SUBSCRIPTION(split_listener, zmk_position_state_changed); \ No newline at end of file +ZMK_SUBSCRIPTION(split_listener, zmk_position_state_changed); + +#if ZMK_KEYMAP_HAS_SENSORS +ZMK_SUBSCRIPTION(split_listener, zmk_sensor_event); +#endif /* ZMK_KEYMAP_HAS_SENSORS */ From dcb1f8f13528effc3e2ee3dadf9b385bf2394037 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 23 Jun 2023 07:28:27 +0000 Subject: [PATCH 0734/1130] fix(docs): Update docs about split encoder support --- docs/docs/features/encoders.md | 4 ---- docs/docs/intro.md | 9 ++++----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 29906c909de..0c493330cc6 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -5,10 +5,6 @@ sidebar_label: Encoders Existing support for encoders in ZMK is focused around the five pin EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. -:::note -Encoders are currently only support on the left/central sides of splits. For progress on this, see [#728](https://github.com/zmkfirmware/zmk/pull/728). -::: - ## Enabling EC11 Encoders To enable encoders for boards that have existing encoder support, uncomment the `CONFIG_EC11=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware. diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 142dcafc97e..d65ac46e405 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -23,11 +23,11 @@ ZMK is currently missing some features found in other popular firmware. This tab | Split Keyboard Support | ✅ | ✅ | ✅ | | [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | | [Hold-Tap](behaviors/hold-tap.md) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md/#layer-tap)) | ✅ | ✅ | ✅ | -| [Tap-Dance](behaviors/tap-dance.md) | ✅ | ✅[^3] | ✅ | +| [Tap-Dance](behaviors/tap-dance.md) | ✅ | ✅[^2] | ✅ | | [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | | [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | -| [Encoders](features/encoders.md)[^1] | ✅ | ✅ | ✅ | -| [Display Support](features/displays.md)[^2] | 🚧 | 🚧 | ✅ | +| [Encoders](features/encoders.md) | ✅ | ✅ | ✅ | +| [Display Support](features/displays.md)[^1] | 🚧 | 🚧 | ✅ | | [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | | [Backlight](features/backlight.md) | ✅ | ✅ | ✅ | | One Shot Keys | ✅ | ✅ | ✅ | @@ -43,8 +43,7 @@ ZMK is currently missing some features found in other popular firmware. This tab | AVR/8 Bit | | | ✅ | | [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | -[^3]: Tap-Dances are limited to single and double-tap on BlueMicro -[^2]: Encoders are not currently supported on peripheral side splits. +[^2]: Tap-Dances are limited to single and double-tap on BlueMicro [^1]: OLEDs are currently proof of concept in ZMK. ## Code Of Conduct From a92a4967aa85f4ab19d36bcb81afc0420f2775d2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 28 Jun 2023 19:26:33 +0000 Subject: [PATCH 0735/1130] fix(sensors): Only accept data once per behavior. * Don't accept data for the same behavior on multiple layers more than once, to avoid duplicate/extraneous triggers. --- app/include/zmk/keymap.h | 4 ++++ app/src/behaviors/behavior_sensor_rotate_common.c | 15 ++++++++------- app/src/behaviors/behavior_sensor_rotate_common.h | 5 +++-- app/src/keymap.c | 4 ---- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index a47cd505643..9ce140bfa27 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -8,6 +8,10 @@ #include +#define ZMK_LAYER_CHILD_LEN_PLUS_ONE(node) 1 + +#define ZMK_KEYMAP_LAYERS_LEN \ + (DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE) 0) + typedef uint32_t zmk_keymap_layers_state_t; uint8_t zmk_keymap_layer_default(); diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index 586cac3fdf2..98b4aec1267 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -28,7 +28,7 @@ int zmk_behavior_sensor_rotate_common_accept_data( if (value.val1 == 0) { triggers = value.val2; } else { - struct sensor_value remainder = data->remainder[sensor_index]; + struct sensor_value remainder = data->remainder[sensor_index][event.layer]; remainder.val1 += value.val1; remainder.val2 += value.val2; @@ -42,15 +42,16 @@ int zmk_behavior_sensor_rotate_common_accept_data( triggers = remainder.val1 / trigger_degrees; remainder.val1 %= trigger_degrees; - data->remainder[sensor_index] = remainder; + data->remainder[sensor_index][event.layer] = remainder; } LOG_DBG( "val1: %d, val2: %d, remainder: %d/%d triggers: %d inc keycode 0x%02X dec keycode 0x%02X", - value.val1, value.val2, data->remainder[sensor_index].val1, - data->remainder[sensor_index].val2, triggers, binding->param1, binding->param2); + value.val1, value.val2, data->remainder[sensor_index][event.layer].val1, + data->remainder[sensor_index][event.layer].val2, triggers, binding->param1, + binding->param2); - data->triggers[sensor_index] = triggers; + data->triggers[sensor_index][event.layer] = triggers; return 0; } @@ -64,11 +65,11 @@ int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *bindi const int sensor_index = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position); if (mode != BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER) { - data->triggers[sensor_index] = 0; + data->triggers[sensor_index][event.layer] = 0; return ZMK_BEHAVIOR_TRANSPARENT; } - int triggers = data->triggers[sensor_index]; + int triggers = data->triggers[sensor_index][event.layer]; struct zmk_behavior_binding triggered_binding; if (triggers > 0) { diff --git a/app/src/behaviors/behavior_sensor_rotate_common.h b/app/src/behaviors/behavior_sensor_rotate_common.h index d354b67937c..c92ac3d5e5f 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.h +++ b/app/src/behaviors/behavior_sensor_rotate_common.h @@ -6,6 +6,7 @@ #include #include +#include #include struct behavior_sensor_rotate_config { @@ -16,8 +17,8 @@ struct behavior_sensor_rotate_config { }; struct behavior_sensor_rotate_data { - struct sensor_value remainder[ZMK_KEYMAP_SENSORS_LEN]; - int triggers[ZMK_KEYMAP_SENSORS_LEN]; + struct sensor_value remainder[ZMK_KEYMAP_SENSORS_LEN][ZMK_KEYMAP_LAYERS_LEN]; + int triggers[ZMK_KEYMAP_SENSORS_LEN][ZMK_KEYMAP_LAYERS_LEN]; }; int zmk_behavior_sensor_rotate_common_accept_data( diff --git a/app/src/keymap.c b/app/src/keymap.c index 020faf3f2be..bda694276c8 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -31,10 +31,6 @@ static uint8_t _zmk_keymap_layer_default = 0; #define DT_DRV_COMPAT zmk_keymap -#define LAYER_CHILD_LEN(node) 1 + -#define ZMK_KEYMAP_NODE DT_DRV_INST(0) -#define ZMK_KEYMAP_LAYERS_LEN (DT_INST_FOREACH_CHILD(0, LAYER_CHILD_LEN) 0) - #define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) #define TRANSFORMED_LAYER(node) \ From 185457bc1169176037aa281edb0a9bf485a70dbd Mon Sep 17 00:00:00 2001 From: Mikhail Stralenia Date: Tue, 29 Aug 2023 18:53:30 +0300 Subject: [PATCH 0736/1130] fix(shields): leeloo - proper encoder status for split encoders. --- app/boards/shields/leeloo/leeloo_common.dtsi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi index 6ce93504b2d..ef775cfbe61 100644 --- a/app/boards/shields/leeloo/leeloo_common.dtsi +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -51,6 +51,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <120>; + status = "disabled"; }; right_encoder: right_encoder { @@ -59,6 +60,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <120>; + status = "disabled"; }; sensors { @@ -87,4 +89,4 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) com-sequential; prechargep = <0x22>; }; -}; \ No newline at end of file +}; From fd4796583810b6fa42edcee7aa33fa9db4ba4a44 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 13:49:18 -0700 Subject: [PATCH 0737/1130] fix(docs): Remove diode-direction from direct GPIO driver --- docs/docs/config/kscan.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 787d513661f..d240d79fe67 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -72,16 +72,15 @@ Applies to: `compatible = "zmk,kscan-gpio-direct"` Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-direct.yaml) -| Property | Type | Description | Default | -| ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ----------- | -| `label` | string | Unique label for the node | | -| `input-gpios` | GPIO array | Input GPIOs (one per key) | | -| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | -| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | -| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | -| `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | -| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `CONFIG_ZMK_KSCAN_DIRECT_POLLING` is enabled. | 10 | -| `toggle-mode` | bool | Use toggle switch mode. | n | +| Property | Type | Description | Default | +| ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ------- | +| `label` | string | Unique label for the node | | +| `input-gpios` | GPIO array | Input GPIOs (one per key) | | +| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | +| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | +| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | +| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `CONFIG_ZMK_KSCAN_DIRECT_POLLING` is enabled. | 10 | +| `toggle-mode` | bool | Use toggle switch mode. | n | By default, a switch will drain current through the internal pull up/down resistor whenever it is pressed. This is not ideal for a toggle switch, where the switch may be left in the "pressed" state for a long time. Enabling `toggle-mode` will make the driver flip between pull up and down as the switch is toggled to optimize for power. From 1e11e84d0d367a90d155df1d13824077f61bf158 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 14:44:37 -0700 Subject: [PATCH 0738/1130] fix(docs): Fix row/col comments in matrix examples --- docs/docs/config/kscan.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index d240d79fe67..5c70f4ba1b1 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -296,9 +296,7 @@ Any keyboard which is not a grid of 1 unit keys will likely have some unused pos kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - rows = <5>; - columns = <4>; - // define the matrix... + // define row-gpios with 5 elements and col-gpios with 4... }; default_transform: matrix_transform { @@ -358,9 +356,7 @@ Consider a keyboard with a [duplex matrix](https://wiki.ai03.com/books/pcb-desig kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - rows = <12>; - columns = <8>; - // define the matrix... + // define row-gpios with 12 elements and col-gpios with 8... }; default_transform: matrix_transform { From 3d938033b002c78ce24245e3cf37b7ba55876145 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 14:45:25 -0700 Subject: [PATCH 0739/1130] feat(docs): Note GPIO flags and add examples --- docs/docs/config/kscan.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 5c70f4ba1b1..296cb4a179c 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -86,6 +86,18 @@ By default, a switch will drain current through the internal pull up/down resist `toggle-mode` applies to all switches handled by the instance of the driver. To use a toggle switch with other, non-toggle, direct GPIO switches, create two instances of the direct GPIO driver, one with `toggle-mode` and the other without. Then, use a [composite driver](#composite-driver) to combine them. +Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/gpio.html#api-reference) for the elements in `input-gpios` should be `(GPIO_ACTIVE_LOW | GPIO_PULL_UP)`: + +```devicetree + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + input-gpios + = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; +``` + ## Matrix Driver Keyboard scan driver where keys are arranged on a matrix with one GPIO per row and column. @@ -122,6 +134,24 @@ The `diode-direction` property must be one of: | `"row2col"` | Diodes point from rows to columns (cathodes are connected to columns) | | `"col2row"` | Diodes point from columns to rows (cathodes are connected to rows) | +Given the `diode-direction`, the [GPIO flags](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/gpio.html#api-reference) for the elements in `row-` and `col-gpios` should be set appropriately. +The output pins (e.g. columns for `col2row`) should have the flag `GPIO_ACTIVE_HIGH`, and input pins (e.g. rows for `col2row`) should have the flags `(GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)`: + +```devicetree + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + diode-direction = "col2row"; + col-gpios + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + ; + row-gpios + = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +``` + ## Composite Driver Keyboard scan driver which combines multiple other keyboard scan drivers. From 369c7c1721861c9a0e5e47c6b1090abe8cfb0566 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 14:10:59 -0700 Subject: [PATCH 0740/1130] fix(docs): Correct default macro wait/tap ms --- docs/docs/behaviors/macros.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 0757e735285..4836c205e41 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -111,7 +111,8 @@ bindings ### Wait Time -The wait time setting controls how long of a delay is introduced between behaviors in the `bindings` list. The initial wait time for a macro, 100ms by default, can +The wait time setting controls how long of a delay is introduced between behaviors in the `bindings` list. The initial wait time for a macro, +which is equal to the value of [`CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS`](../config/behaviors.md#macro) by default, can be set by assigning a value to the `wait-ms` property of the macro, e.g. `wait-ms = <20>;`. If you want to update the wait time at any point in the macro bindings list, use `¯o_wait_time`, e.g. `¯o_wait_time 30`. A full example: @@ -126,7 +127,8 @@ bindings ### Tap Time -The tap time setting controls how long a tapped behavior is held in the `bindings` list. The initial tap time for a macro, 100ms by default, can +The tap time setting controls how long a tapped behavior is held in the `bindings` list. The initial tap time for a macro, +which is equal to the value of [`CONFIG_ZMK_MACRO_DEFAULT_TAP_MS`](../config/behaviors.md#macro) by default, can be set by assigning a value to the `tap-ms` property of the macro, e.g. `tap-ms = <20>;`. If you want to update the tap time at any point in a macro bindings list, use `¯o_tap_time`, e.g. `¯o_tap_time 30`. A full example: From b20d3178b9d681f2b959cc7980d7252cda415189 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 14:11:30 -0700 Subject: [PATCH 0741/1130] feat(docs): Note devicetree limits re: macro bindings --- docs/docs/behaviors/macros.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 4836c205e41..377ce7fecdb 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -147,6 +147,8 @@ Macros use an internal queue to invoke each behavior in the bindings list when t To prevent issues with longer macros, you can change the size of this queue via the `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE` setting in your configuration, [typically through your `.conf` file](../config/index.md). For example, `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE=512` would allow your macro to type about 256 characters. +Another limit worth noting is that the maximum number of bindings you can pass to a `bindings` field in the [Devicetree](../config/index.md#devicetree-files) is 256, which also constrains how many behaviors can be invoked by a macro. + ## Parameterized Macros Macros can also be "parameterized", allowing them to be bound in your keymap with unique values passed into them, e.g.: From 4e18b879bdeab047e901856cf6a0cbf3a4855adc Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 15:26:00 -0700 Subject: [PATCH 0742/1130] feat(docs): Document persisted settings and debouncing --- docs/docs/behaviors/backlight.md | 6 ++++++ docs/docs/behaviors/bluetooth.md | 5 +++++ docs/docs/behaviors/outputs.md | 5 +++++ docs/docs/behaviors/power.md | 5 +++++ docs/docs/behaviors/underglow.md | 6 ++++++ 5 files changed, 27 insertions(+) diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index cb9a85a830e..8c613fe6bd1 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -36,6 +36,12 @@ Here is a table describing the action for each define: - Parameter #1: The backlight action define, e.g. `BL_TOG` or `BL_INC` - Parameter #2: Only applies to `BL_SET`and is the brightness value +:::note Backlight settings persistence +The backlight settings that are changed via the `&bl` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. +They will also override the start values set by [`CONFIG_ZMK_BACKLIGHT_*_START` settings](../config/backlight.md#kconfig). +However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. +::: + ### Examples 1. Toggle backlight on/off diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 7c77c4ad2b7..89496948d50 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -35,6 +35,11 @@ Here is a table describing the command for each define: | `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | | `BT_SEL` | Select the 0-indexed profile by number. Please note: this definition must include a number as an argument in the keymap to work correctly. eg. `BT_SEL 0` | +:::note Selected profile persistence +The profile that is selected by the `BT_SEL`/`BT_PRV`/`BT_NXT` actions will be saved to flash storage and hence persist across restarts and firmware flashes. +However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. +::: + ## Bluetooth Behavior The bluetooth behavior completes an bluetooth action given on press. diff --git a/docs/docs/behaviors/outputs.md b/docs/docs/behaviors/outputs.md index 198d9acc617..dad52be2ccb 100644 --- a/docs/docs/behaviors/outputs.md +++ b/docs/docs/behaviors/outputs.md @@ -44,6 +44,11 @@ The output selection behavior changes the preferred output on press. - Reference: `&out` - Parameter #1: Command, e.g. `OUT_BLE` +:::note External power state persistence +The endpoint that is selected by the `&out` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. +However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. +::: + ### Examples 1. Behavior binding to prefer sending keyboard output to USB diff --git a/docs/docs/behaviors/power.md b/docs/docs/behaviors/power.md index 805806095ac..11f920845a3 100644 --- a/docs/docs/behaviors/power.md +++ b/docs/docs/behaviors/power.md @@ -43,6 +43,11 @@ Here is a table describing the command for each define: - Reference: `&ext_power` - Parameter#1: Command, e.g `EP_ON` +:::note External power state persistence +The on/off state that is set by the `&ext_power` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. +However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. +::: + ### Example: 1. Behavior binding to enable the external power diff --git a/docs/docs/behaviors/underglow.md b/docs/docs/behaviors/underglow.md index 52429e69987..29f34c2ab0b 100644 --- a/docs/docs/behaviors/underglow.md +++ b/docs/docs/behaviors/underglow.md @@ -55,6 +55,12 @@ Value Limits: ::: +:::note RGB settings persistence +The RGB settings that are changed via the `&rgb_ug` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. +They will also override the start values set by [`CONFIG_ZMK_RGB_*_START` settings](../config/underglow.md#kconfig). +However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. +::: + ## Examples 1. Toggle underglow on/off From 544612c8c0929ff3089bcdb86f9ea8a2f77081eb Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Fri, 1 Sep 2023 23:32:17 -0400 Subject: [PATCH 0743/1130] fix(split): reserve peripheral slot before stopping scanning In the event that the peripheral MAC address does not match, this allows scanning to continue. --- app/src/split/bluetooth/central.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index b70d79e3a3a..ccf1cc28ced 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -433,20 +433,22 @@ static int stop_scanning() { static bool split_central_eir_found(const bt_addr_le_t *addr) { LOG_DBG("Found the split service"); - // Stop scanning so we can connect to the peripheral device. - int err = stop_scanning(); - if (err < 0) { - return false; - } - + // Reserve peripheral slot. Once the central has bonded to its peripherals, + // the peripheral MAC addresses will be validated internally and the slot + // reservation will fail if there is a mismatch. int slot_idx = reserve_peripheral_slot(addr); if (slot_idx < 0) { - LOG_ERR("Failed to reserve peripheral slot (err %d)", slot_idx); + LOG_INF("Unable to reserve peripheral slot (err %d)", slot_idx); return false; } - struct peripheral_slot *slot = &peripherals[slot_idx]; + // Stop scanning so we can connect to the peripheral device. + int err = stop_scanning(); + if (err < 0) { + return false; + } + LOG_DBG("Initiating new connnection"); struct bt_le_conn_param *param = BT_LE_CONN_PARAM(CONFIG_ZMK_SPLIT_BLE_PREF_INT, CONFIG_ZMK_SPLIT_BLE_PREF_INT, From ac0691471f1adb8336fb7eb5d01f18c988c5bad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:26:34 +0800 Subject: [PATCH 0744/1130] feat(shields): Add Bluetooth bindings to kyria keymaps Bluetooth bindings are useful for handling pairings with hosts. This change adds the header and a few default commands as template for new users to work with. --- app/boards/shields/kyria/kyria.keymap | 20 +++++++++++++++-- app/boards/shields/kyria/kyria_rev2.keymap | 20 +++++++++++++++-- app/boards/shields/kyria/kyria_rev3.keymap | 26 +++++++++++++++++----- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index 9a2163db549..a11c13259e1 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -5,6 +5,7 @@ */ #include +#include #include / { @@ -15,15 +16,30 @@ // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | LAYER 1 | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &mo 1 &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + function_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | | +// | | | |BTSEL3|BTSEL4| | | | | | | | | +// | | | | | | | | | | | | | | | | | | | +// | | | | | | | | | | | | | + bindings = < + &trans &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans + &trans &trans &trans &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; }; }; diff --git a/app/boards/shields/kyria/kyria_rev2.keymap b/app/boards/shields/kyria/kyria_rev2.keymap index 9a2163db549..a11c13259e1 100644 --- a/app/boards/shields/kyria/kyria_rev2.keymap +++ b/app/boards/shields/kyria/kyria_rev2.keymap @@ -5,6 +5,7 @@ */ #include +#include #include / { @@ -15,15 +16,30 @@ // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | LAYER 1 | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &mo 1 &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + function_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | | +// | | | |BTSEL3|BTSEL4| | | | | | | | | +// | | | | | | | | | | | | | | | | | | | +// | | | | | | | | | | | | | + bindings = < + &trans &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans + &trans &trans &trans &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; }; }; diff --git a/app/boards/shields/kyria/kyria_rev3.keymap b/app/boards/shields/kyria/kyria_rev3.keymap index d74757cad7d..ac2fc044e73 100644 --- a/app/boards/shields/kyria/kyria_rev3.keymap +++ b/app/boards/shields/kyria/kyria_rev3.keymap @@ -5,6 +5,7 @@ */ #include +#include #include /* Uncomment this block if using RGB @@ -23,13 +24,28 @@ // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | - // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | + // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | LAYER 1 | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &kp LSHFT &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL - &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT &mo 1 &kp LSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + function_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | | + // | | | |BTSEL3|BTSEL4| | | | | | | | | + // | | | | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | + bindings = < + &trans &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans + &trans &trans &trans &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; From 3de23938d687badb346cd97f2e4003bc4357508c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 08:51:44 +0000 Subject: [PATCH 0745/1130] chore(deps): bump word-wrap from 1.2.3 to 1.2.4 in /docs Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/jonschlinkert/word-wrap/releases) - [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4) --- updated-dependencies: - dependency-name: word-wrap dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index b990f53c3dc..3aec8dd5014 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -15859,9 +15859,9 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "devOptional": true, "engines": { "node": ">=0.10.0" @@ -27353,9 +27353,9 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "devOptional": true }, "wrap-ansi": { From 8984e12f0d0442b15e6fd18dfd48666bc4cbceb2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 05:10:14 +0000 Subject: [PATCH 0746/1130] chore(deps-dev): bump json-schema-to-typescript in /docs Bumps [json-schema-to-typescript](https://github.com/bcherny/json-schema-to-typescript) from 12.0.0 to 13.1.1. - [Changelog](https://github.com/bcherny/json-schema-to-typescript/blob/master/CHANGELOG.md) - [Commits](https://github.com/bcherny/json-schema-to-typescript/commits) --- updated-dependencies: - dependency-name: json-schema-to-typescript dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 14 +++++++------- docs/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 3aec8dd5014..38eae2b7dc8 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -35,7 +35,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", "eslint-plugin-react": "^7.32.2", - "json-schema-to-typescript": "^12.0.0", + "json-schema-to-typescript": "^13.1.1", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", @@ -9163,9 +9163,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-to-typescript": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-12.0.0.tgz", - "integrity": "sha512-Uk/BDIAo8vqepPBhM86UhNMHgCv7JulicNj/BgnQPHE1fGCoej0UTtcEYzXU/uk6lSvbZCf7pccW+dnNMrr5rg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.1.tgz", + "integrity": "sha512-F3CYhtA7F3yPbb8vF7sFchk/2dnr1/yTKf8RcvoNpjnh67ZS/ZMH1ElLt5KHAtf2/bymiejLQQszszPWEeTdSw==", "dev": true, "dependencies": { "@bcherny/json-schema-ref-parser": "10.0.5-fork", @@ -22663,9 +22663,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-to-typescript": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-12.0.0.tgz", - "integrity": "sha512-Uk/BDIAo8vqepPBhM86UhNMHgCv7JulicNj/BgnQPHE1fGCoej0UTtcEYzXU/uk6lSvbZCf7pccW+dnNMrr5rg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.1.tgz", + "integrity": "sha512-F3CYhtA7F3yPbb8vF7sFchk/2dnr1/yTKf8RcvoNpjnh67ZS/ZMH1ElLt5KHAtf2/bymiejLQQszszPWEeTdSw==", "dev": true, "requires": { "@bcherny/json-schema-ref-parser": "10.0.5-fork", diff --git a/docs/package.json b/docs/package.json index d82e54ec8c9..9b38bef8b67 100644 --- a/docs/package.json +++ b/docs/package.json @@ -54,7 +54,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", "eslint-plugin-react": "^7.32.2", - "json-schema-to-typescript": "^12.0.0", + "json-schema-to-typescript": "^13.1.1", "mustache": "^4.2.0", "null-loader": "^4.0.0", "prebuild-webpack-plugin": "^1.1.1", From 647945d9f8c80b7de8df8f9dc54bdcf865d531ad Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 17 Jul 2023 07:20:45 -0700 Subject: [PATCH 0747/1130] feat(shields): Add splitkb.com Aurora Helix * Add new shield for splitkb.com Aurora Helix, supporting keys, encoder(s), displays, and RGB. --- .../splitkb_aurora_helix/Kconfig.defconfig | 53 ++++++++++ .../splitkb_aurora_helix/Kconfig.shield | 8 ++ .../boards/nice_nano.overlay | 46 +++++++++ .../boards/nice_nano_v2.overlay | 46 +++++++++ .../splitkb_aurora_helix.conf | 9 ++ .../splitkb_aurora_helix.dtsi | 79 +++++++++++++++ .../splitkb_aurora_helix.keymap | 96 +++++++++++++++++++ .../splitkb_aurora_helix.zmk.yml | 15 +++ .../splitkb_aurora_helix_left.overlay | 42 ++++++++ .../splitkb_aurora_helix_right.overlay | 46 +++++++++ 10 files changed, 440 insertions(+) create mode 100644 app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig create mode 100644 app/boards/shields/splitkb_aurora_helix/Kconfig.shield create mode 100644 app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay create mode 100644 app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.conf create mode 100644 app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi create mode 100644 app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.keymap create mode 100644 app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.zmk.yml create mode 100644 app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay create mode 100644 app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay diff --git a/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig new file mode 100644 index 00000000000..6d7a55691e2 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig @@ -0,0 +1,53 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SPLITKB_AURORA_HELIX_LEFT + +config ZMK_KEYBOARD_NAME + default "Aurora Helix" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # SHIELD_SPLITKB_AURORA_HELIX_LEFT + +if SHIELD_SPLITKB_AURORA_HELIX_LEFT || SHIELD_SPLITKB_AURORA_HELIX_RIGHT + +config ZMK_SPLIT + default y + +config ZMK_RGB_UNDERGLOW + select WS2812_STRIP + select SPI + +if ZMK_DISPLAY + +config SSD1306 + default y + +config I2C + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LV_Z_VDB_SIZE + default 64 + +config LV_DPI_DEF + default 148 + +config LV_Z_BITS_PER_PIXEL + default 1 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif # SHIELD_SPLITKB_AURORA_HELIX_LEFT || SHIELD_SPLITKB_AURORA_HELIX_RIGHT diff --git a/app/boards/shields/splitkb_aurora_helix/Kconfig.shield b/app/boards/shields/splitkb_aurora_helix/Kconfig.shield new file mode 100644 index 00000000000..c64ef8798e1 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITKB_AURORA_HELIX_LEFT + def_bool $(shields_list_contains,splitkb_aurora_helix_left) + +config SHIELD_SPLITKB_AURORA_HELIX_RIGHT + def_bool $(shields_list_contains,splitkb_aurora_helix_right) diff --git a/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay new file mode 100644 index 00000000000..8f1629ced14 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay @@ -0,0 +1,46 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..8f1629ced14 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay @@ -0,0 +1,46 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.conf b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.conf new file mode 100644 index 00000000000..af482abcc4b --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.conf @@ -0,0 +1,9 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following line to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi new file mode 100644 index 00000000000..e580e87daba --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + + chosen { + zephyr,display = &oled; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; + // | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | + // | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | + // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | + // | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | SW25 | | SW25 | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | + // | SW26 | SW27 | SW28 | SW29 | SW30 | SW31 | SW32 | | SW32 | SW31 | SW30 | SW29 | SW28 | SW27 | SW26 | + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + left_encoder: left_encoder { + compatible = "alps,ec11"; + label = "L_ENCODER"; + steps = <144>; + status = "disabled"; + + a-gpios = <&pro_micro 7 GPIO_PULL_UP>; + b-gpios = <&pro_micro 8 GPIO_PULL_UP>; + }; + + right_encoder: right_encoder { + compatible = "alps,ec11"; + label = "R_ENCODER"; + steps = <144>; + status = "disabled"; + + a-gpios = <&pro_micro 16 GPIO_PULL_UP>; + b-gpios = <&pro_micro 14 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <36>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.keymap b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.keymap new file mode 100644 index 00000000000..edec8fec306 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.keymap @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 +#define ADJUST 3 + +/* Uncomment this block if using RGB +&led_strip { + chain-length = <6>; + // chain-length = <38>; // Uncomment if using both per-key and underglow LEDs + // chain-length = <32>; // Uncomment if using only per-key LEDs. +}; + */ + +/* NOTE: At the time of the creation of this keymap, there are no specified codes for 'eisuu' and 'kana' input in ZMK. +However, 'LANG1' and 'LANG2' are fully-functioning candidates for 'kana' and 'eisuu' input respectively. +As such, those are in use within the default layer at this time.*/ + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | GRAVE | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | + // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC | + // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | + // | SHIFT | Z | X | C | V | B | LBKT | | RBKT | N | M | , | . | / | RET | + // | ADJUST | ESC | ALT | LGUI | EISUU | LOWER | SPACE | | SPACE | RAISE | KANA | LEFT | DOWN | UP | RIGHT | + bindings = < + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp COMMA &kp PERIOD &kp SLASH &kp RET + &mo ADJUST &kp ESC &kp LALT &kp LGUI &kp LANG2 &mo LOWER &kp SPACE &kp SPACE &mo RAISE &kp LANG1 &kp LEFT &kp DOWN &kp UP &kp RIGHT + >; + }; + lower_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | | | | | | | | | | | | | | + // | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | + // | | | | | | | | | _ | + | { | } | PIPE | + // | | | | | | | ( | | ) | | | | HOME | END | | + // | | | | | | | | | | | | | | | | + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &trans + &trans &trans &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE + &trans &trans &trans &trans &trans &trans &kp LPAR &kp RPAR &trans &trans &trans &kp HOME &kp END &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + raise_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | | | | | | | | | | | | | | + // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | + // | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | + // | | F7 | F8 | F9 | F10 | F11 | | | | F12 | | PSCRN | PG_DN | PG_UP | | + // | | | | | | | | | | | | NEXT | VOL- | VOL+ | PLAY | + bindings = < + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL + &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans &trans &kp F12 &trans &kp PSCRN &kp PG_DN &kp PG_UP &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP + >; + }; + adjust_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | EP TOG | + // | BT CLR | BT SEL0 | BT SEL1 | BT SEL2 | BGT SEL3 | BT SEL4 | | RGB EFF+ | RGB HUE+ | RGB SAT+ | RGB SPD+ | RGB BRI+ | RGB TOG | + // | BT NXT | OUT TOG | OUT USB | OUT BLE | | | | RGB EFF- | RGB HUE- | RGB SAT- | RGB SPD- | RGB BRI- | | + // | BT PRV | | | | | | { | | } | | | | | | | + // | | | | | | | | | | | | | | | | + bindings = < + &kp GRAVE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &ext_power EP_TOG + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &rgb_ug RGB_EFF &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_SPI &rgb_ug RGB_BRI &rgb_ug RGB_TOG + &bt BT_NXT &out OUT_TOG &out OUT_USB &out OUT_BLE &trans &trans &rgb_ug RGB_EFR &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_SPD &rgb_ug RGB_BRD &trans + &bt BT_PRV &trans &trans &trans &trans &trans &kp LBRC &kp RBRC &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.zmk.yml b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.zmk.yml new file mode 100644 index 00000000000..d83c74ecca8 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.zmk.yml @@ -0,0 +1,15 @@ +file_format: "1" +id: splitkb_aurora_helix +name: splitkb.com Aurora Helix +type: shield +url: https://splitkb.com/products/aurora-helix-pcb-kit +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - encoder + - underglow +siblings: + - splitkb_aurora_helix_left + - splitkb_aurora_helix_right diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay new file mode 100644 index 00000000000..c9830658b00 --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_helix.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 21 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay new file mode 100644 index 00000000000..48572de902d --- /dev/null +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "splitkb_aurora_helix.dtsi" + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro 21 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 19 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + , <&pro_micro 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)> + ; + + col-gpios + = <&pro_micro 10 GPIO_ACTIVE_HIGH> + , <&pro_micro 9 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 4 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&right_encoder { + status = "okay"; +}; + +&default_transform { + col-offset = <7>; +}; From 3936298260699d88f8fb8c839991128ed0edfafa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 05:18:02 +0000 Subject: [PATCH 0748/1130] chore(deps-dev): bump eslint-plugin-react from 7.32.2 to 7.33.2 in /docs Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.32.2 to 7.33.2. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.32.2...v7.33.2) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 1004 ++++++++++++++++++++++++++++++++++++---- docs/package.json | 2 +- 2 files changed, 914 insertions(+), 92 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 38eae2b7dc8..ded7bf838cb 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -34,7 +34,7 @@ "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", - "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react": "^7.33.2", "json-schema-to-typescript": "^13.1.1", "mustache": "^4.2.0", "null-loader": "^4.0.0", @@ -4172,6 +4172,19 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -4235,11 +4248,40 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4280,6 +4322,18 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", @@ -5750,9 +5804,9 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -6100,35 +6154,50 @@ } }, "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -6137,11 +6206,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-iterator-helpers": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, "node_modules/es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -6754,15 +6859,16 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -6772,7 +6878,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -7454,6 +7560,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -7651,12 +7766,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -7831,6 +7947,21 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", @@ -7862,6 +7993,18 @@ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -7986,6 +8129,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -8553,12 +8707,12 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -8612,11 +8766,40 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -8771,6 +8954,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -8779,6 +8974,21 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -8814,6 +9024,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -8941,6 +9160,15 @@ "node": ">=6" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -8994,11 +9222,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9011,6 +9263,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -9063,6 +9328,18 @@ "node": ">=0.10.0" } }, + "node_modules/iterator.prototype": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.3" + } + }, "node_modules/jest-util": { "version": "29.2.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz", @@ -11088,9 +11365,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12794,6 +13071,26 @@ "node": ">=6.0.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -12824,14 +13121,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -13424,6 +13721,30 @@ "node": ">=6" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -14063,29 +14384,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14619,18 +14957,83 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">= 0.6" + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" }, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typedarray-to-buffer": { @@ -15839,6 +16242,72 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -19070,6 +19539,16 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -19118,11 +19597,34 @@ "get-intrinsic": "^1.1.3" } }, + "arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -19141,6 +19643,12 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", @@ -20186,9 +20694,9 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -20448,35 +20956,72 @@ } }, "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + } + }, + "es-iterator-helpers": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "dev": true, + "requires": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" } }, "es-module-lexer": { @@ -20484,6 +21029,17 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -20956,15 +21512,16 @@ } }, "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -20974,7 +21531,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "dependencies": { @@ -21457,6 +22014,15 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -21587,12 +22153,13 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -21713,6 +22280,15 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, "globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", @@ -21738,6 +22314,15 @@ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -21837,6 +22422,11 @@ "get-intrinsic": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -22255,12 +22845,12 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -22297,11 +22887,31 @@ "is-decimal": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -22392,11 +23002,29 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -22419,6 +23047,12 @@ "is-path-inside": "^3.0.2" } }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -22498,6 +23132,12 @@ "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -22530,11 +23170,26 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -22544,6 +23199,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -22582,6 +23247,18 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, + "iterator.prototype": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "dev": true, + "requires": { + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.3" + } + }, "jest-util": { "version": "29.2.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz", @@ -23966,9 +24643,9 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-keys": { "version": "1.1.1", @@ -25142,6 +25819,20 @@ "minimatch": "^3.0.5" } }, + "reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -25169,14 +25860,14 @@ } }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" } }, "regexpu-core": { @@ -25608,6 +26299,26 @@ "mri": "^1.1.0" } }, + "safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -26111,26 +26822,37 @@ "side-channel": "^1.0.4" } }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "stringify-entities": { @@ -26520,6 +27242,53 @@ } } }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -27339,6 +28108,59 @@ "is-symbol": "^1.0.3" } }, + "which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", diff --git a/docs/package.json b/docs/package.json index 9b38bef8b67..a3c3481d672 100644 --- a/docs/package.json +++ b/docs/package.json @@ -53,7 +53,7 @@ "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-mdx": "^2.0.5", - "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react": "^7.33.2", "json-schema-to-typescript": "^13.1.1", "mustache": "^4.2.0", "null-loader": "^4.0.0", From 718500543b6d087ce8aac00caac173030b75be16 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 2 Sep 2023 01:45:12 -0700 Subject: [PATCH 0749/1130] feat(split): Use directed advertising. * Split centrals to scan with their identity so they receive direct advertising packets. * Split peripherals to use direct advertising if they have an existing bond to a split central. --- app/src/split/bluetooth/Kconfig | 1 + app/src/split/bluetooth/central.c | 4 ++- app/src/split/bluetooth/peripheral.c | 44 ++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index 0610b667a26..5919010ba31 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -14,6 +14,7 @@ config ZMK_SPLIT_ROLE_CENTRAL select BT_CENTRAL select BT_GATT_CLIENT select BT_GATT_AUTO_DISCOVER_CCC + select BT_SCAN_WITH_IDENTITY if ZMK_SPLIT_ROLE_CENTRAL diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index ccf1cc28ced..860e89a5f3e 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -511,8 +511,10 @@ static void split_central_device_found(const bt_addr_le_t *addr, int8_t rssi, ui LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", dev, type, ad->len, rssi); /* We're only interested in connectable events */ - if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { + if (type == BT_GAP_ADV_TYPE_ADV_IND) { bt_data_parse(ad, split_central_eir_parse, (void *)addr); + } else if (type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { + split_central_eir_found(addr); } } diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index e053db8a61a..1d649f71221 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -43,15 +43,49 @@ static const struct bt_data zmk_ble_ad[] = { static bool is_connected = false; -static int start_advertising() { - return bt_le_adv_start(BT_LE_ADV_CONN, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); +static void each_bond(const struct bt_bond_info *info, void *user_data) { + bt_addr_le_t *addr = (bt_addr_le_t *)user_data; + + if (bt_addr_le_cmp(&info->addr, BT_ADDR_LE_NONE) != 0) { + bt_addr_le_copy(addr, &info->addr); + } +} + +static int start_advertising(bool low_duty) { + bt_addr_le_t central_addr = bt_addr_le_none; + + bt_foreach_bond(BT_ID_DEFAULT, each_bond, ¢ral_addr); + + if (bt_addr_le_cmp(¢ral_addr, BT_ADDR_LE_NONE) != 0) { + struct bt_le_adv_param adv_param = low_duty ? *BT_LE_ADV_CONN_DIR_LOW_DUTY(¢ral_addr) + : *BT_LE_ADV_CONN_DIR(¢ral_addr); + return bt_le_adv_start(&adv_param, NULL, 0, NULL, 0); + } else { + return bt_le_adv_start(BT_LE_ADV_CONN, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); + } }; +static bool low_duty_advertising = false; + +static void advertising_cb(struct k_work *work) { + const int err = start_advertising(low_duty_advertising); + if (err < 0) { + LOG_ERR("Failed to start advertising (%d)", err); + } +} + +K_WORK_DEFINE(advertising_work, advertising_cb); + static void connected(struct bt_conn *conn, uint8_t err) { is_connected = (err == 0); ZMK_EVENT_RAISE(new_zmk_split_peripheral_status_changed( (struct zmk_split_peripheral_status_changed){.connected = is_connected})); + + if (err == BT_HCI_ERR_ADV_TIMEOUT) { + low_duty_advertising = true; + k_work_submit(&advertising_work); + } } static void disconnected(struct bt_conn *conn, uint8_t reason) { @@ -65,6 +99,9 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) { ZMK_EVENT_RAISE(new_zmk_split_peripheral_status_changed( (struct zmk_split_peripheral_status_changed){.connected = is_connected})); + + low_duty_advertising = false; + k_work_submit(&advertising_work); } static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_security_err err) { @@ -119,7 +156,8 @@ static int zmk_peripheral_ble_init(const struct device *_arg) { #else bt_conn_cb_register(&conn_callbacks); - start_advertising(); + low_duty_advertising = false; + k_work_submit(&advertising_work); #endif return 0; From 693875675fec96b46c687540ef46a17fa4132779 Mon Sep 17 00:00:00 2001 From: Nate Eagleson Date: Mon, 4 Sep 2023 19:59:59 -0400 Subject: [PATCH 0750/1130] fix(docs): Fix typo in caps-word.md (#1924) --- docs/docs/behaviors/caps-word.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index e85d7ecae98..e5d862d785b 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -7,7 +7,7 @@ sidebar_label: Caps Word The caps word behavior behaves similar to a caps lock, but will automatically deactivate when any key not in a continue list is pressed, or if the caps word key is pressed again. For smaller keyboards using [mod-taps](/docs/behaviors/mod-tap), this can help avoid repeated alternating holds when typing words in all caps. -The modifiers are applied only to to the alphabetic (`A` to `Z`) keycodes, to avoid automatically appliying them to numeric values, etc. +The modifiers are applied only to to the alphabetic (`A` to `Z`) keycodes, to avoid automatically applying them to numeric values, etc. ### Behavior Binding From 8087fa3b2b8bb0590e7cf5de6d22b03acd9411a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Sep 2023 05:12:55 +0000 Subject: [PATCH 0751/1130] chore(deps): bump @fortawesome/fontawesome-svg-core in /docs Bumps [@fortawesome/fontawesome-svg-core](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2. - [Release notes](https://github.com/FortAwesome/Font-Awesome/releases) - [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2) --- updated-dependencies: - dependency-name: "@fortawesome/fontawesome-svg-core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 34 +++++++++++++++++++++++++--------- docs/package.json | 2 +- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index ded7bf838cb..f17adc4bde9 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@docusaurus/core": "^2.4.0", "@docusaurus/preset-classic": "^2.4.0", - "@fortawesome/fontawesome-svg-core": "^6.4.0", + "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^1.6.22", @@ -2704,17 +2704,26 @@ } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", + "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" + "@fortawesome/fontawesome-common-types": "6.4.2" }, "engines": { "node": ">=6" } }, + "node_modules/@fortawesome/fontawesome-svg-core/node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", + "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@fortawesome/free-solid-svg-icons": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", @@ -18363,11 +18372,18 @@ "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==" }, "@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", + "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", "requires": { - "@fortawesome/fontawesome-common-types": "6.4.0" + "@fortawesome/fontawesome-common-types": "6.4.2" + }, + "dependencies": { + "@fortawesome/fontawesome-common-types": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", + "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==" + } } }, "@fortawesome/free-solid-svg-icons": { diff --git a/docs/package.json b/docs/package.json index a3c3481d672..aa48af24d3c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,7 +17,7 @@ "dependencies": { "@docusaurus/core": "^2.4.0", "@docusaurus/preset-classic": "^2.4.0", - "@fortawesome/fontawesome-svg-core": "^6.4.0", + "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^1.6.22", From f442776fe2bea2a3644d0767a2cf1e975c6d9b38 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 10 Jun 2023 17:41:22 -0700 Subject: [PATCH 0752/1130] feat(docs): Detail logging and note extra useful options --- docs/docs/development/usb-logging.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.md index 9a2980ae6c8..87cd0e7d853 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.md @@ -20,13 +20,16 @@ It is recommended to only enable logging when needed, and not leaving it on by d ## Kconfig -The `CONFIG_ZMK_USB_LOGGING` KConfig value needs to be set, either by copy and pasting into the `app/prj.conf` file, or by running -`west build -t menuconfig` and manually enabling the setting in that UI at `ZMK -> Advanced -> USB Logging`. +The `CONFIG_ZMK_USB_LOGGING` Kconfig enables USB logging. This can be set at the keyboard level, typically in the `config/.conf` +file if you are using a [user config repository](user-setup.md). It can also be enabled at the ZMK level using the `app/prj.conf` file, or other +search locations described in the [configuration overview](config/index.md#config-file-locations). + +Logging can be further configured using Kconfig described in [the Zephyr documentation](https://docs.zephyrproject.org/3.2.0/services/logging/index.html). +For instance, setting `CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS` to a large value such as `8000` might help catch issues that happen near keyboard +boot, before you can connect to view the logs. :::note -If you are debugging your own keyboard in your [user config repository](user-setup.md), use -`config/boards/shields//.conf` instead of `app/prj.conf`. In Github -Actions, you can search the `Kconfig file` build log to verify the options above have been enabled +In Github Actions, you can check the ` Kconfig file` step output to verify the options above have been enabled for you successfully. ::: From 7f9e9f8c64f3128c2c3e7af3f22ced665fe1b873 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 5 Sep 2023 22:23:44 -0700 Subject: [PATCH 0753/1130] fix(boards): Disable QSPI for Xiao BLE The GD25Q16 flash connected via QSPI seems to be causing issues with excessive battery use and inability to sleep. Since ZMK doesn't use it, disable it. Resolves #1901 --- app/boards/seeeduino_xiao_ble.overlay | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index 51671a803b4..e6a5b62c738 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -32,3 +32,6 @@ }; }; +&qspi { + status = "disabled"; +}; From eaeea4bdfa2d67c7faea8e5f77b638723ebfe5e9 Mon Sep 17 00:00:00 2001 From: Jeppe Klitgaard Date: Tue, 12 Sep 2023 08:32:09 +0200 Subject: [PATCH 0754/1130] feat(docs): Add missing `&kp` tip for `devicetree_unfixed.h` error --- docs/docs/troubleshooting.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index d47671bce36..1418f327feb 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -58,10 +58,14 @@ A `devicetree_unfixed.h` error that follows with an "undeclared here" string ind In this example, the error string `DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label` indicates a problem with the key binding in position `12` in the `symbol_layer` of the keymap. -:::note +:::info Key positions are numbered starting from `0` at the top left key on the keymap, incrementing horizontally, row by row. ::: +:::tip +A common mistake that leads to this error is to use [key press keycodes](behaviors/key-press.md) without the leading `&kp` binding. That is, having entries such as `SPACE` that should have been `&kp SPACE`. +::: + ### Split Keyboard Halves Unable to Pair Split keyboard halves pairing issue can be resolved by flashing a settings reset firmware to both controllers. You will first need to acquire the reset UF2 image file with one of the following options: From 690bc1bb44b1b62228900906cb308dc6f1a05eb8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 2 Sep 2023 20:07:31 -0700 Subject: [PATCH 0755/1130] refactor: Move drivers into properly module. * Align our driver module layout to properly match Zephyr conventions, allowing proper CMake setup to amend the library for each type of driver. --- app/CMakeLists.txt | 2 +- app/Kconfig | 10 +++++++--- app/drivers/CMakeLists.txt | 7 ------- app/drivers/display/CMakeLists.txt | 4 ---- app/include/dt-bindings/zmk/kscan-mock.h | 9 --------- app/module/CMakeLists.txt | 3 +++ app/module/Kconfig | 2 ++ app/module/drivers/CMakeLists.txt | 7 +++++++ app/{ => module}/drivers/Kconfig | 0 app/module/drivers/display/CMakeLists.txt | 6 ++++++ app/{ => module}/drivers/display/Kconfig | 6 +++++- app/{ => module}/drivers/display/Kconfig.il0323 | 0 app/{ => module}/drivers/display/il0323.c | 0 app/{ => module}/drivers/display/il0323_regs.h | 0 app/{ => module}/drivers/gpio/CMakeLists.txt | 3 +-- app/{ => module}/drivers/gpio/Kconfig | 6 ++++-- app/{ => module}/drivers/gpio/Kconfig.595 | 1 - app/{ => module}/drivers/gpio/Kconfig.max7318 | 1 - app/{ => module}/drivers/gpio/gpio_595.c | 0 app/{ => module}/drivers/gpio/gpio_max7318.c | 0 app/{ => module}/drivers/kscan/CMakeLists.txt | 3 +-- app/{ => module}/drivers/kscan/Kconfig | 14 +++++++++----- app/{ => module}/drivers/kscan/debounce.c | 0 app/{ => module}/drivers/kscan/debounce.h | 0 app/{ => module}/drivers/kscan/kscan_composite.c | 0 app/{ => module}/drivers/kscan/kscan_gpio.c | 0 app/{ => module}/drivers/kscan/kscan_gpio.h | 0 app/{ => module}/drivers/kscan/kscan_gpio_demux.c | 0 app/{ => module}/drivers/kscan/kscan_gpio_direct.c | 0 app/{ => module}/drivers/kscan/kscan_gpio_matrix.c | 0 app/{ => module}/drivers/kscan/kscan_mock.c | 0 app/{ => module}/drivers/sensor/CMakeLists.txt | 0 app/{ => module}/drivers/sensor/Kconfig | 6 +++++- .../drivers/sensor/battery/CMakeLists.txt | 0 app/{ => module}/drivers/sensor/battery/Kconfig | 0 .../drivers/sensor/battery/battery_common.c | 0 .../drivers/sensor/battery/battery_common.h | 0 .../drivers/sensor/battery/battery_nrf_vddh.c | 0 .../sensor/battery/battery_voltage_divider.c | 0 .../drivers/sensor/ec11/CMakeLists.txt | 0 app/{ => module}/drivers/sensor/ec11/Kconfig | 0 app/{ => module}/drivers/sensor/ec11/ec11.c | 0 app/{ => module}/drivers/sensor/ec11/ec11.h | 0 .../drivers/sensor/ec11/ec11_trigger.c | 0 .../dts/bindings/display/gooddisplay,il0323.yaml | 0 .../dts/bindings/gpio/maxim,max7318.yaml | 0 .../dts/bindings/gpio/zmk,gpio-595.yaml | 0 .../dts/bindings/kscan/zmk,kscan-gpio-demux.yaml | 0 .../dts/bindings/kscan/zmk,kscan-gpio-direct.yaml | 0 .../dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml | 0 .../dts/bindings/sensor/alps,ec11.yaml | 0 .../dts/bindings/sensor/zmk,battery-nrf-vddh.yaml | 0 .../sensor/zmk,battery-voltage-divider.yaml | 0 .../include/dt-bindings/zmk/kscan_mock.h | 0 app/{drivers => module}/zephyr/module.yml | 2 ++ 55 files changed, 53 insertions(+), 39 deletions(-) delete mode 100644 app/drivers/CMakeLists.txt delete mode 100644 app/drivers/display/CMakeLists.txt delete mode 100644 app/include/dt-bindings/zmk/kscan-mock.h create mode 100644 app/module/CMakeLists.txt create mode 100644 app/module/Kconfig create mode 100644 app/module/drivers/CMakeLists.txt rename app/{ => module}/drivers/Kconfig (100%) create mode 100644 app/module/drivers/display/CMakeLists.txt rename app/{ => module}/drivers/display/Kconfig (58%) rename app/{ => module}/drivers/display/Kconfig.il0323 (100%) rename app/{ => module}/drivers/display/il0323.c (100%) rename app/{ => module}/drivers/display/il0323_regs.h (100%) rename app/{ => module}/drivers/gpio/CMakeLists.txt (65%) rename app/{ => module}/drivers/gpio/Kconfig (52%) rename app/{ => module}/drivers/gpio/Kconfig.595 (95%) rename app/{ => module}/drivers/gpio/Kconfig.max7318 (95%) rename app/{ => module}/drivers/gpio/gpio_595.c (100%) rename app/{ => module}/drivers/gpio/gpio_max7318.c (100%) rename app/{ => module}/drivers/kscan/CMakeLists.txt (85%) rename app/{ => module}/drivers/kscan/Kconfig (94%) rename app/{ => module}/drivers/kscan/debounce.c (100%) rename app/{ => module}/drivers/kscan/debounce.h (100%) rename app/{ => module}/drivers/kscan/kscan_composite.c (100%) rename app/{ => module}/drivers/kscan/kscan_gpio.c (100%) rename app/{ => module}/drivers/kscan/kscan_gpio.h (100%) rename app/{ => module}/drivers/kscan/kscan_gpio_demux.c (100%) rename app/{ => module}/drivers/kscan/kscan_gpio_direct.c (100%) rename app/{ => module}/drivers/kscan/kscan_gpio_matrix.c (100%) rename app/{ => module}/drivers/kscan/kscan_mock.c (100%) rename app/{ => module}/drivers/sensor/CMakeLists.txt (100%) rename app/{ => module}/drivers/sensor/Kconfig (67%) rename app/{ => module}/drivers/sensor/battery/CMakeLists.txt (100%) rename app/{ => module}/drivers/sensor/battery/Kconfig (100%) rename app/{ => module}/drivers/sensor/battery/battery_common.c (100%) rename app/{ => module}/drivers/sensor/battery/battery_common.h (100%) rename app/{ => module}/drivers/sensor/battery/battery_nrf_vddh.c (100%) rename app/{ => module}/drivers/sensor/battery/battery_voltage_divider.c (100%) rename app/{ => module}/drivers/sensor/ec11/CMakeLists.txt (100%) rename app/{ => module}/drivers/sensor/ec11/Kconfig (100%) rename app/{ => module}/drivers/sensor/ec11/ec11.c (100%) rename app/{ => module}/drivers/sensor/ec11/ec11.h (100%) rename app/{ => module}/drivers/sensor/ec11/ec11_trigger.c (100%) rename app/{ => module}/dts/bindings/display/gooddisplay,il0323.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/gpio/maxim,max7318.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/gpio/zmk,gpio-595.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/sensor/alps,ec11.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml (100%) rename app/{drivers/zephyr => module}/dts/bindings/sensor/zmk,battery-voltage-divider.yaml (100%) rename app/{ => module}/include/dt-bindings/zmk/kscan_mock.h (100%) rename app/{drivers => module}/zephyr/module.yml (56%) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index efa349052cf..29944753f80 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -8,7 +8,7 @@ list(APPEND DTS_ROOT ${CMAKE_SOURCE_DIR}/drivers/zephyr) set(ZephyrBuildConfiguration_ROOT ${CMAKE_SOURCE_DIR}/cmake) list(APPEND ZEPHYR_EXTRA_MODULES - ${CMAKE_CURRENT_SOURCE_DIR}/drivers + ${CMAKE_CURRENT_SOURCE_DIR}/module ) # Find Zephyr. This also loads Zephyr's build system. diff --git a/app/Kconfig b/app/Kconfig index 89a128b5a27..0dd9316a2a7 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -403,14 +403,18 @@ endif #Initialization Priorities endmenu -menu "KSCAN Settings" +menuconfig ZMK_KSCAN + bool "ZMK KScan Integration" + default y + select KSCAN + +if ZMK_KSCAN config ZMK_KSCAN_EVENT_QUEUE_SIZE int "Size of the event queue for KSCAN events to buffer events" default 4 -#KSCAN Settings -endmenu +endif # ZMK_KSCAN menu "Logging" diff --git a/app/drivers/CMakeLists.txt b/app/drivers/CMakeLists.txt deleted file mode 100644 index 44d69ac37a2..00000000000 --- a/app/drivers/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2020 The ZMK Contributors -# SPDX-License-Identifier: MIT - -add_subdirectory_ifdef(CONFIG_ZMK_DRIVERS_GPIO gpio) -add_subdirectory(kscan) -add_subdirectory(sensor) -add_subdirectory(display) diff --git a/app/drivers/display/CMakeLists.txt b/app/drivers/display/CMakeLists.txt deleted file mode 100644 index d5e83c1dc4e..00000000000 --- a/app/drivers/display/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Copyright (c) 2021 The ZMK Contributors -# SPDX-License-Identifier: MIT - -zephyr_sources_ifdef(CONFIG_IL0323 il0323.c) \ No newline at end of file diff --git a/app/include/dt-bindings/zmk/kscan-mock.h b/app/include/dt-bindings/zmk/kscan-mock.h deleted file mode 100644 index 4ed666c61ca..00000000000 --- a/app/include/dt-bindings/zmk/kscan-mock.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#warning "kscan-mock.h has been deprecated and superseded by kscan_mock.h" - -#include "kscan_mock.h" \ No newline at end of file diff --git a/app/module/CMakeLists.txt b/app/module/CMakeLists.txt new file mode 100644 index 00000000000..1c140d33d4a --- /dev/null +++ b/app/module/CMakeLists.txt @@ -0,0 +1,3 @@ +zephyr_include_directories(include) + +add_subdirectory(drivers) \ No newline at end of file diff --git a/app/module/Kconfig b/app/module/Kconfig new file mode 100644 index 00000000000..cb2ae20cd7c --- /dev/null +++ b/app/module/Kconfig @@ -0,0 +1,2 @@ + +rsource "drivers/Kconfig" \ No newline at end of file diff --git a/app/module/drivers/CMakeLists.txt b/app/module/drivers/CMakeLists.txt new file mode 100644 index 00000000000..5281c3dcb21 --- /dev/null +++ b/app/module/drivers/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +add_subdirectory_ifdef(CONFIG_GPIO gpio) +add_subdirectory_ifdef(CONFIG_KSCAN kscan) +add_subdirectory_ifdef(CONFIG_SENSOR sensor) +add_subdirectory_ifdef(CONFIG_DISPLAY display) diff --git a/app/drivers/Kconfig b/app/module/drivers/Kconfig similarity index 100% rename from app/drivers/Kconfig rename to app/module/drivers/Kconfig diff --git a/app/module/drivers/display/CMakeLists.txt b/app/module/drivers/display/CMakeLists.txt new file mode 100644 index 00000000000..6fc98c95a9d --- /dev/null +++ b/app/module/drivers/display/CMakeLists.txt @@ -0,0 +1,6 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +zephyr_library_amend() + +zephyr_library_sources_ifdef(CONFIG_IL0323 il0323.c) \ No newline at end of file diff --git a/app/drivers/display/Kconfig b/app/module/drivers/display/Kconfig similarity index 58% rename from app/drivers/display/Kconfig rename to app/module/drivers/display/Kconfig index efa064d4f6b..d70aff7c40a 100644 --- a/app/drivers/display/Kconfig +++ b/app/module/drivers/display/Kconfig @@ -1,4 +1,8 @@ # Copyright (c) 2021 The ZMK Contributors # SPDX-License-Identifier: MIT -rsource "Kconfig.il0323" \ No newline at end of file +if DISPLAY + +rsource "Kconfig.il0323" + +endif # DISPLAY \ No newline at end of file diff --git a/app/drivers/display/Kconfig.il0323 b/app/module/drivers/display/Kconfig.il0323 similarity index 100% rename from app/drivers/display/Kconfig.il0323 rename to app/module/drivers/display/Kconfig.il0323 diff --git a/app/drivers/display/il0323.c b/app/module/drivers/display/il0323.c similarity index 100% rename from app/drivers/display/il0323.c rename to app/module/drivers/display/il0323.c diff --git a/app/drivers/display/il0323_regs.h b/app/module/drivers/display/il0323_regs.h similarity index 100% rename from app/drivers/display/il0323_regs.h rename to app/module/drivers/display/il0323_regs.h diff --git a/app/drivers/gpio/CMakeLists.txt b/app/module/drivers/gpio/CMakeLists.txt similarity index 65% rename from app/drivers/gpio/CMakeLists.txt rename to app/module/drivers/gpio/CMakeLists.txt index 0756ed386b4..b5647e87bd7 100644 --- a/app/drivers/gpio/CMakeLists.txt +++ b/app/module/drivers/gpio/CMakeLists.txt @@ -1,8 +1,7 @@ # Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT -zephyr_library_named(zmk__drivers__gpio) -zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) +zephyr_library_amend() zephyr_library_sources_ifdef(CONFIG_GPIO_595 gpio_595.c) zephyr_library_sources_ifdef(CONFIG_GPIO_MAX7318 gpio_max7318.c) diff --git a/app/drivers/gpio/Kconfig b/app/module/drivers/gpio/Kconfig similarity index 52% rename from app/drivers/gpio/Kconfig rename to app/module/drivers/gpio/Kconfig index 54b30590e1c..a6c7b4a19ef 100644 --- a/app/drivers/gpio/Kconfig +++ b/app/module/drivers/gpio/Kconfig @@ -1,5 +1,7 @@ -menuconfig ZMK_DRIVERS_GPIO - bool "GPIO" + +if GPIO rsource "Kconfig.max7318" rsource "Kconfig.595" + +endif # GPIO \ No newline at end of file diff --git a/app/drivers/gpio/Kconfig.595 b/app/module/drivers/gpio/Kconfig.595 similarity index 95% rename from app/drivers/gpio/Kconfig.595 rename to app/module/drivers/gpio/Kconfig.595 index b4b6bdcc2d8..7ebdc0cc54c 100644 --- a/app/drivers/gpio/Kconfig.595 +++ b/app/module/drivers/gpio/Kconfig.595 @@ -10,7 +10,6 @@ menuconfig GPIO_595 default $(dt_compat_enabled,$(DT_COMPAT_ZMK_GPIO_595)) depends on SPI select HAS_DTS_GPIO - select ZMK_DRIVERS_GPIO help Enable driver for 595 shift register chip using SPI. diff --git a/app/drivers/gpio/Kconfig.max7318 b/app/module/drivers/gpio/Kconfig.max7318 similarity index 95% rename from app/drivers/gpio/Kconfig.max7318 rename to app/module/drivers/gpio/Kconfig.max7318 index d572b97090f..b54e1dba465 100644 --- a/app/drivers/gpio/Kconfig.max7318 +++ b/app/module/drivers/gpio/Kconfig.max7318 @@ -10,7 +10,6 @@ menuconfig GPIO_MAX7318 default $(dt_compat_enabled,$(DT_COMPAT_MAXIM_MAX7318)) depends on I2C select HAS_DTS_GPIO - select ZMK_DRIVERS_GPIO help Enable driver for MAX7318 I2C-based GPIO chip. diff --git a/app/drivers/gpio/gpio_595.c b/app/module/drivers/gpio/gpio_595.c similarity index 100% rename from app/drivers/gpio/gpio_595.c rename to app/module/drivers/gpio/gpio_595.c diff --git a/app/drivers/gpio/gpio_max7318.c b/app/module/drivers/gpio/gpio_max7318.c similarity index 100% rename from app/drivers/gpio/gpio_max7318.c rename to app/module/drivers/gpio/gpio_max7318.c diff --git a/app/drivers/kscan/CMakeLists.txt b/app/module/drivers/kscan/CMakeLists.txt similarity index 85% rename from app/drivers/kscan/CMakeLists.txt rename to app/module/drivers/kscan/CMakeLists.txt index 8fc7ed58d50..0bdcd90ea72 100644 --- a/app/drivers/kscan/CMakeLists.txt +++ b/app/module/drivers/kscan/CMakeLists.txt @@ -1,8 +1,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -zephyr_library_named(zmk__drivers__kscan) -zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) +zephyr_library_amend() zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER debounce.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio.c) diff --git a/app/drivers/kscan/Kconfig b/app/module/drivers/kscan/Kconfig similarity index 94% rename from app/drivers/kscan/Kconfig rename to app/module/drivers/kscan/Kconfig index 1d1656694dc..e67c9aa8894 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/module/drivers/kscan/Kconfig @@ -7,6 +7,8 @@ DT_COMPAT_ZMK_KSCAN_GPIO_DIRECT := zmk,kscan-gpio-direct DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX := zmk,kscan-gpio-matrix DT_COMPAT_ZMK_KSCAN_MOCK := zmk,kscan-mock +if KSCAN + config ZMK_KSCAN_COMPOSITE_DRIVER bool default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_COMPOSITE)) @@ -87,8 +89,10 @@ config ZMK_KSCAN_DEBOUNCE_RELEASE_MS endif -config ZMK_KSCAN_INIT_PRIORITY - int "Keyboard scan driver init priority" - default 40 - help - Keyboard scan device driver initialization priority. +# config ZMK_KSCAN_INIT_PRIORITY +# int "Keyboard scan driver init priority" +# default 40 +# help +# Keyboard scan device driver initialization priority. + +endif # KSCAN diff --git a/app/drivers/kscan/debounce.c b/app/module/drivers/kscan/debounce.c similarity index 100% rename from app/drivers/kscan/debounce.c rename to app/module/drivers/kscan/debounce.c diff --git a/app/drivers/kscan/debounce.h b/app/module/drivers/kscan/debounce.h similarity index 100% rename from app/drivers/kscan/debounce.h rename to app/module/drivers/kscan/debounce.h diff --git a/app/drivers/kscan/kscan_composite.c b/app/module/drivers/kscan/kscan_composite.c similarity index 100% rename from app/drivers/kscan/kscan_composite.c rename to app/module/drivers/kscan/kscan_composite.c diff --git a/app/drivers/kscan/kscan_gpio.c b/app/module/drivers/kscan/kscan_gpio.c similarity index 100% rename from app/drivers/kscan/kscan_gpio.c rename to app/module/drivers/kscan/kscan_gpio.c diff --git a/app/drivers/kscan/kscan_gpio.h b/app/module/drivers/kscan/kscan_gpio.h similarity index 100% rename from app/drivers/kscan/kscan_gpio.h rename to app/module/drivers/kscan/kscan_gpio.h diff --git a/app/drivers/kscan/kscan_gpio_demux.c b/app/module/drivers/kscan/kscan_gpio_demux.c similarity index 100% rename from app/drivers/kscan/kscan_gpio_demux.c rename to app/module/drivers/kscan/kscan_gpio_demux.c diff --git a/app/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c similarity index 100% rename from app/drivers/kscan/kscan_gpio_direct.c rename to app/module/drivers/kscan/kscan_gpio_direct.c diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c similarity index 100% rename from app/drivers/kscan/kscan_gpio_matrix.c rename to app/module/drivers/kscan/kscan_gpio_matrix.c diff --git a/app/drivers/kscan/kscan_mock.c b/app/module/drivers/kscan/kscan_mock.c similarity index 100% rename from app/drivers/kscan/kscan_mock.c rename to app/module/drivers/kscan/kscan_mock.c diff --git a/app/drivers/sensor/CMakeLists.txt b/app/module/drivers/sensor/CMakeLists.txt similarity index 100% rename from app/drivers/sensor/CMakeLists.txt rename to app/module/drivers/sensor/CMakeLists.txt diff --git a/app/drivers/sensor/Kconfig b/app/module/drivers/sensor/Kconfig similarity index 67% rename from app/drivers/sensor/Kconfig rename to app/module/drivers/sensor/Kconfig index a828f6c63ab..6a8ac07ea3e 100644 --- a/app/drivers/sensor/Kconfig +++ b/app/module/drivers/sensor/Kconfig @@ -1,5 +1,9 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT +if SENSOR + rsource "battery/Kconfig" -rsource "ec11/Kconfig" \ No newline at end of file +rsource "ec11/Kconfig" + +endif # SENSOR \ No newline at end of file diff --git a/app/drivers/sensor/battery/CMakeLists.txt b/app/module/drivers/sensor/battery/CMakeLists.txt similarity index 100% rename from app/drivers/sensor/battery/CMakeLists.txt rename to app/module/drivers/sensor/battery/CMakeLists.txt diff --git a/app/drivers/sensor/battery/Kconfig b/app/module/drivers/sensor/battery/Kconfig similarity index 100% rename from app/drivers/sensor/battery/Kconfig rename to app/module/drivers/sensor/battery/Kconfig diff --git a/app/drivers/sensor/battery/battery_common.c b/app/module/drivers/sensor/battery/battery_common.c similarity index 100% rename from app/drivers/sensor/battery/battery_common.c rename to app/module/drivers/sensor/battery/battery_common.c diff --git a/app/drivers/sensor/battery/battery_common.h b/app/module/drivers/sensor/battery/battery_common.h similarity index 100% rename from app/drivers/sensor/battery/battery_common.h rename to app/module/drivers/sensor/battery/battery_common.h diff --git a/app/drivers/sensor/battery/battery_nrf_vddh.c b/app/module/drivers/sensor/battery/battery_nrf_vddh.c similarity index 100% rename from app/drivers/sensor/battery/battery_nrf_vddh.c rename to app/module/drivers/sensor/battery/battery_nrf_vddh.c diff --git a/app/drivers/sensor/battery/battery_voltage_divider.c b/app/module/drivers/sensor/battery/battery_voltage_divider.c similarity index 100% rename from app/drivers/sensor/battery/battery_voltage_divider.c rename to app/module/drivers/sensor/battery/battery_voltage_divider.c diff --git a/app/drivers/sensor/ec11/CMakeLists.txt b/app/module/drivers/sensor/ec11/CMakeLists.txt similarity index 100% rename from app/drivers/sensor/ec11/CMakeLists.txt rename to app/module/drivers/sensor/ec11/CMakeLists.txt diff --git a/app/drivers/sensor/ec11/Kconfig b/app/module/drivers/sensor/ec11/Kconfig similarity index 100% rename from app/drivers/sensor/ec11/Kconfig rename to app/module/drivers/sensor/ec11/Kconfig diff --git a/app/drivers/sensor/ec11/ec11.c b/app/module/drivers/sensor/ec11/ec11.c similarity index 100% rename from app/drivers/sensor/ec11/ec11.c rename to app/module/drivers/sensor/ec11/ec11.c diff --git a/app/drivers/sensor/ec11/ec11.h b/app/module/drivers/sensor/ec11/ec11.h similarity index 100% rename from app/drivers/sensor/ec11/ec11.h rename to app/module/drivers/sensor/ec11/ec11.h diff --git a/app/drivers/sensor/ec11/ec11_trigger.c b/app/module/drivers/sensor/ec11/ec11_trigger.c similarity index 100% rename from app/drivers/sensor/ec11/ec11_trigger.c rename to app/module/drivers/sensor/ec11/ec11_trigger.c diff --git a/app/dts/bindings/display/gooddisplay,il0323.yaml b/app/module/dts/bindings/display/gooddisplay,il0323.yaml similarity index 100% rename from app/dts/bindings/display/gooddisplay,il0323.yaml rename to app/module/dts/bindings/display/gooddisplay,il0323.yaml diff --git a/app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml b/app/module/dts/bindings/gpio/maxim,max7318.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/gpio/maxim,max7318.yaml rename to app/module/dts/bindings/gpio/maxim,max7318.yaml diff --git a/app/drivers/zephyr/dts/bindings/gpio/zmk,gpio-595.yaml b/app/module/dts/bindings/gpio/zmk,gpio-595.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/gpio/zmk,gpio-595.yaml rename to app/module/dts/bindings/gpio/zmk,gpio-595.yaml diff --git a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml b/app/module/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml rename to app/module/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml diff --git a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml b/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml rename to app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml diff --git a/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml b/app/module/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml rename to app/module/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml diff --git a/app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml b/app/module/dts/bindings/sensor/alps,ec11.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml rename to app/module/dts/bindings/sensor/alps,ec11.yaml diff --git a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml b/app/module/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml rename to app/module/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml diff --git a/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-voltage-divider.yaml b/app/module/dts/bindings/sensor/zmk,battery-voltage-divider.yaml similarity index 100% rename from app/drivers/zephyr/dts/bindings/sensor/zmk,battery-voltage-divider.yaml rename to app/module/dts/bindings/sensor/zmk,battery-voltage-divider.yaml diff --git a/app/include/dt-bindings/zmk/kscan_mock.h b/app/module/include/dt-bindings/zmk/kscan_mock.h similarity index 100% rename from app/include/dt-bindings/zmk/kscan_mock.h rename to app/module/include/dt-bindings/zmk/kscan_mock.h diff --git a/app/drivers/zephyr/module.yml b/app/module/zephyr/module.yml similarity index 56% rename from app/drivers/zephyr/module.yml rename to app/module/zephyr/module.yml index 0b6605945e5..219b2cfd201 100644 --- a/app/drivers/zephyr/module.yml +++ b/app/module/zephyr/module.yml @@ -1,3 +1,5 @@ build: cmake: . kconfig: Kconfig + settings: + dts_root: . From c28ef1b61e9feb748ff0823f7f226d67e14fd3aa Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 2 Sep 2023 20:28:47 -0700 Subject: [PATCH 0756/1130] refactor(drivers): Use proper init stage/priority. * Avoid APPLICATION stage and use the proper earlier stage for kscan drivers. --- app/module/drivers/kscan/Kconfig | 6 ------ app/module/drivers/kscan/kscan_composite.c | 2 +- app/module/drivers/kscan/kscan_gpio_demux.c | 2 +- app/module/drivers/kscan/kscan_gpio_direct.c | 2 +- app/module/drivers/kscan/kscan_gpio_matrix.c | 2 +- app/module/drivers/kscan/kscan_mock.c | 4 ++-- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/module/drivers/kscan/Kconfig b/app/module/drivers/kscan/Kconfig index e67c9aa8894..60b5df3b6ad 100644 --- a/app/module/drivers/kscan/Kconfig +++ b/app/module/drivers/kscan/Kconfig @@ -89,10 +89,4 @@ config ZMK_KSCAN_DEBOUNCE_RELEASE_MS endif -# config ZMK_KSCAN_INIT_PRIORITY -# int "Keyboard scan driver init priority" -# default 40 -# help -# Keyboard scan device driver initialization priority. - endif # KSCAN diff --git a/app/module/drivers/kscan/kscan_composite.c b/app/module/drivers/kscan/kscan_composite.c index 9909a4cfcfa..97311ef8e52 100644 --- a/app/module/drivers/kscan/kscan_composite.c +++ b/app/module/drivers/kscan/kscan_composite.c @@ -109,4 +109,4 @@ static const struct kscan_composite_config kscan_composite_config = {}; static struct kscan_composite_data kscan_composite_data; DEVICE_DT_INST_DEFINE(0, kscan_composite_init, NULL, &kscan_composite_data, &kscan_composite_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api); + POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, &mock_driver_api); diff --git a/app/module/drivers/kscan/kscan_gpio_demux.c b/app/module/drivers/kscan/kscan_gpio_demux.c index 812a899d89c..2cbe116d9f2 100644 --- a/app/module/drivers/kscan/kscan_gpio_demux.c +++ b/app/module/drivers/kscan/kscan_gpio_demux.c @@ -201,7 +201,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); }; \ \ DEVICE_DT_INST_DEFINE(n, kscan_gpio_init_##n, NULL, &kscan_gpio_data_##n, \ - &kscan_gpio_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ + &kscan_gpio_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ &gpio_driver_api_##n); DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index d43d716bf64..c0990887083 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -354,7 +354,7 @@ static const struct kscan_driver_api kscan_direct_api = { }; \ \ DEVICE_DT_INST_DEFINE(n, &kscan_direct_init, NULL, &kscan_direct_data_##n, \ - &kscan_direct_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ + &kscan_direct_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ &kscan_direct_api); DT_INST_FOREACH_STATUS_OKAY(KSCAN_DIRECT_INIT); diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index b8e72044928..309da204b13 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -465,7 +465,7 @@ static const struct kscan_driver_api kscan_matrix_api = { }; \ \ DEVICE_DT_INST_DEFINE(n, &kscan_matrix_init, NULL, &kscan_matrix_data_##n, \ - &kscan_matrix_config_##n, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, \ + &kscan_matrix_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ &kscan_matrix_api); DT_INST_FOREACH_STATUS_OKAY(KSCAN_MATRIX_INIT); diff --git a/app/module/drivers/kscan/kscan_mock.c b/app/module/drivers/kscan/kscan_mock.c index 57862b0d6f4..604e164cbc5 100644 --- a/app/module/drivers/kscan/kscan_mock.c +++ b/app/module/drivers/kscan/kscan_mock.c @@ -89,7 +89,7 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb static const struct kscan_mock_config_##n kscan_mock_config_##n = { \ .events = DT_INST_PROP(n, events), .exit_after = DT_INST_PROP(n, exit_after)}; \ DEVICE_DT_INST_DEFINE(n, kscan_mock_init_##n, NULL, &kscan_mock_data_##n, \ - &kscan_mock_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api_##n); + &kscan_mock_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ + &mock_driver_api_##n); DT_INST_FOREACH_STATUS_OKAY(MOCK_INST_INIT) From 0ca7f69b6d21f0e24555d635a017459a8ed0fe43 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 11 Sep 2023 21:56:37 -0700 Subject: [PATCH 0757/1130] refactor: Promote debounce to exposed mod lib. * Promote previously local debounce code from kscan drivers to exposed module lib, for use with other drivers as needed. * Refactor existing kscan driver to new "public" API. --- app/module/CMakeLists.txt | 3 ++- app/module/Kconfig | 3 ++- app/module/drivers/kscan/CMakeLists.txt | 1 - app/module/drivers/kscan/Kconfig | 1 + app/module/drivers/kscan/kscan_gpio_direct.c | 21 ++++++++++--------- app/module/drivers/kscan/kscan_gpio_matrix.c | 21 ++++++++++--------- .../{drivers/kscan => include/zmk}/debounce.h | 14 ++++++------- app/module/lib/CMakeLists.txt | 2 ++ app/module/lib/Kconfig | 2 ++ app/module/lib/zmk_debounce/CMakeLists.txt | 3 +++ app/module/lib/zmk_debounce/Kconfig | 3 +++ .../kscan => lib/zmk_debounce}/debounce.c | 20 +++++++++--------- 12 files changed, 54 insertions(+), 40 deletions(-) rename app/module/{drivers/kscan => include/zmk}/debounce.h (73%) create mode 100644 app/module/lib/CMakeLists.txt create mode 100644 app/module/lib/Kconfig create mode 100644 app/module/lib/zmk_debounce/CMakeLists.txt create mode 100644 app/module/lib/zmk_debounce/Kconfig rename app/module/{drivers/kscan => lib/zmk_debounce}/debounce.c (62%) diff --git a/app/module/CMakeLists.txt b/app/module/CMakeLists.txt index 1c140d33d4a..db886ac6987 100644 --- a/app/module/CMakeLists.txt +++ b/app/module/CMakeLists.txt @@ -1,3 +1,4 @@ zephyr_include_directories(include) -add_subdirectory(drivers) \ No newline at end of file +add_subdirectory(drivers) +add_subdirectory(lib) \ No newline at end of file diff --git a/app/module/Kconfig b/app/module/Kconfig index cb2ae20cd7c..52c013151a9 100644 --- a/app/module/Kconfig +++ b/app/module/Kconfig @@ -1,2 +1,3 @@ -rsource "drivers/Kconfig" \ No newline at end of file +rsource "drivers/Kconfig" +rsource "lib/Kconfig" \ No newline at end of file diff --git a/app/module/drivers/kscan/CMakeLists.txt b/app/module/drivers/kscan/CMakeLists.txt index 0bdcd90ea72..7ae9524c75f 100644 --- a/app/module/drivers/kscan/CMakeLists.txt +++ b/app/module/drivers/kscan/CMakeLists.txt @@ -3,7 +3,6 @@ zephyr_library_amend() -zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER debounce.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_MATRIX kscan_gpio_matrix.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DIRECT kscan_gpio_direct.c) diff --git a/app/module/drivers/kscan/Kconfig b/app/module/drivers/kscan/Kconfig index 60b5df3b6ad..6f60b3f919f 100644 --- a/app/module/drivers/kscan/Kconfig +++ b/app/module/drivers/kscan/Kconfig @@ -16,6 +16,7 @@ config ZMK_KSCAN_COMPOSITE_DRIVER config ZMK_KSCAN_GPIO_DRIVER bool select GPIO + select ZMK_DEBOUNCE config ZMK_KSCAN_GPIO_DEMUX bool diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index c0990887083..5b227784dad 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -4,7 +4,6 @@ * SPDX-License-Identifier: MIT */ -#include "debounce.h" #include "kscan_gpio.h" #include @@ -15,6 +14,8 @@ #include #include +#include + LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define DT_DRV_COMPAT zmk_kscan_gpio_direct @@ -61,11 +62,11 @@ struct kscan_direct_data { /** Timestamp of the current or scheduled scan. */ int64_t scan_time; /** Current state of the inputs as an array of length config->inputs.len */ - struct debounce_state *pin_state; + struct zmk_debounce_state *pin_state; }; struct kscan_direct_config { - struct debounce_config debounce_config; + struct zmk_debounce_config debounce_config; int32_t debounce_scan_period_ms; int32_t poll_period_ms; bool toggle_mode; @@ -182,8 +183,8 @@ static int kscan_direct_read(const struct device *dev) { return active; } - debounce_update(&data->pin_state[gpio->index], active, config->debounce_scan_period_ms, - &config->debounce_config); + zmk_debounce_update(&data->pin_state[gpio->index], active, config->debounce_scan_period_ms, + &config->debounce_config); } // Process the new state. @@ -191,10 +192,10 @@ static int kscan_direct_read(const struct device *dev) { for (int i = 0; i < data->inputs.len; i++) { const struct kscan_gpio *gpio = &data->inputs.gpios[i]; - struct debounce_state *state = &data->pin_state[gpio->index]; + struct zmk_debounce_state *state = &data->pin_state[gpio->index]; - if (debounce_get_changed(state)) { - const bool pressed = debounce_is_pressed(state); + if (zmk_debounce_get_changed(state)) { + const bool pressed = zmk_debounce_is_pressed(state); LOG_DBG("Sending event at 0,%i state %s", gpio->index, pressed ? "on" : "off"); data->callback(dev, 0, gpio->index, pressed); @@ -203,7 +204,7 @@ static int kscan_direct_read(const struct device *dev) { } } - continue_scan = continue_scan || debounce_is_active(state); + continue_scan = continue_scan || zmk_debounce_is_active(state); } if (continue_scan) { @@ -332,7 +333,7 @@ static const struct kscan_driver_api kscan_direct_api = { static struct kscan_gpio kscan_direct_inputs_##n[] = { \ LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (, ), n)}; \ \ - static struct debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ + static struct zmk_debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ \ COND_INTERRUPTS( \ (static struct kscan_direct_irq_callback kscan_direct_irqs_##n[INST_INPUTS_LEN(n)];)) \ diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index 309da204b13..0d8a3190659 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -4,7 +4,6 @@ * SPDX-License-Identifier: MIT */ -#include "debounce.h" #include "kscan_gpio.h" #include @@ -16,6 +15,8 @@ #include #include +#include + LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define DT_DRV_COMPAT zmk_kscan_gpio_matrix @@ -80,12 +81,12 @@ struct kscan_matrix_data { * Current state of the matrix as a flattened 2D array of length * (config->rows * config->cols) */ - struct debounce_state *matrix_state; + struct zmk_debounce_state *matrix_state; }; struct kscan_matrix_config { struct kscan_gpio_list outputs; - struct debounce_config debounce_config; + struct zmk_debounce_config debounce_config; size_t rows; size_t cols; int32_t debounce_scan_period_ms; @@ -242,8 +243,8 @@ static int kscan_matrix_read(const struct device *dev) { return active; } - debounce_update(&data->matrix_state[index], active, config->debounce_scan_period_ms, - &config->debounce_config); + zmk_debounce_update(&data->matrix_state[index], active, config->debounce_scan_period_ms, + &config->debounce_config); } err = gpio_pin_set_dt(&out_gpio->spec, 0); @@ -263,16 +264,16 @@ static int kscan_matrix_read(const struct device *dev) { for (int r = 0; r < config->rows; r++) { for (int c = 0; c < config->cols; c++) { const int index = state_index_rc(config, r, c); - struct debounce_state *state = &data->matrix_state[index]; + struct zmk_debounce_state *state = &data->matrix_state[index]; - if (debounce_get_changed(state)) { - const bool pressed = debounce_is_pressed(state); + if (zmk_debounce_get_changed(state)) { + const bool pressed = zmk_debounce_is_pressed(state); LOG_DBG("Sending event at %i,%i state %s", r, c, pressed ? "on" : "off"); data->callback(dev, r, c, pressed); } - continue_scan = continue_scan || debounce_is_active(state); + continue_scan = continue_scan || zmk_debounce_is_active(state); } } @@ -438,7 +439,7 @@ static const struct kscan_driver_api kscan_matrix_api = { static struct kscan_gpio kscan_matrix_cols_##n[] = { \ LISTIFY(INST_COLS_LEN(n), KSCAN_GPIO_COL_CFG_INIT, (, ), n)}; \ \ - static struct debounce_state kscan_matrix_state_##n[INST_MATRIX_LEN(n)]; \ + static struct zmk_debounce_state kscan_matrix_state_##n[INST_MATRIX_LEN(n)]; \ \ COND_INTERRUPTS( \ (static struct kscan_matrix_irq_callback kscan_matrix_irqs_##n[INST_INPUTS_LEN(n)];)) \ diff --git a/app/module/drivers/kscan/debounce.h b/app/module/include/zmk/debounce.h similarity index 73% rename from app/module/drivers/kscan/debounce.h rename to app/module/include/zmk/debounce.h index 6e9faa66818..afa775a023d 100644 --- a/app/module/drivers/kscan/debounce.h +++ b/app/module/include/zmk/debounce.h @@ -13,13 +13,13 @@ #define DEBOUNCE_COUNTER_BITS 14 #define DEBOUNCE_COUNTER_MAX BIT_MASK(DEBOUNCE_COUNTER_BITS) -struct debounce_state { +struct zmk_debounce_state { bool pressed : 1; bool changed : 1; uint16_t counter : DEBOUNCE_COUNTER_BITS; }; -struct debounce_config { +struct zmk_debounce_config { /** Duration a switch must be pressed to latch as pressed. */ uint32_t debounce_press_ms; /** Duration a switch must be released to latch as released. */ @@ -34,23 +34,23 @@ struct debounce_config { * @param elapsed_ms Time elapsed since the previous update in milliseconds. * @param config Debounce settings. */ -void debounce_update(struct debounce_state *state, const bool active, const int elapsed_ms, - const struct debounce_config *config); +void zmk_debounce_update(struct zmk_debounce_state *state, const bool active, const int elapsed_ms, + const struct zmk_debounce_config *config); /** * @returns whether the switch is either latched as pressed or it is potentially * pressed but the debouncer has not yet made a decision. If this returns true, * the kscan driver should continue to poll quickly. */ -bool debounce_is_active(const struct debounce_state *state); +bool zmk_debounce_is_active(const struct zmk_debounce_state *state); /** * @returns whether the switch is latched as pressed. */ -bool debounce_is_pressed(const struct debounce_state *state); +bool zmk_debounce_is_pressed(const struct zmk_debounce_state *state); /** * @returns whether the pressed state of the switch changed in the last call to * debounce_update. */ -bool debounce_get_changed(const struct debounce_state *state); +bool zmk_debounce_get_changed(const struct zmk_debounce_state *state); diff --git a/app/module/lib/CMakeLists.txt b/app/module/lib/CMakeLists.txt new file mode 100644 index 00000000000..146b3637b68 --- /dev/null +++ b/app/module/lib/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_subdirectory_ifdef(CONFIG_ZMK_DEBOUNCE zmk_debounce) \ No newline at end of file diff --git a/app/module/lib/Kconfig b/app/module/lib/Kconfig new file mode 100644 index 00000000000..8f2f06017d3 --- /dev/null +++ b/app/module/lib/Kconfig @@ -0,0 +1,2 @@ + +rsource "zmk_debounce/Kconfig" \ No newline at end of file diff --git a/app/module/lib/zmk_debounce/CMakeLists.txt b/app/module/lib/zmk_debounce/CMakeLists.txt new file mode 100644 index 00000000000..0a65dde1109 --- /dev/null +++ b/app/module/lib/zmk_debounce/CMakeLists.txt @@ -0,0 +1,3 @@ + +zephyr_library() +zephyr_library_sources(debounce.c) \ No newline at end of file diff --git a/app/module/lib/zmk_debounce/Kconfig b/app/module/lib/zmk_debounce/Kconfig new file mode 100644 index 00000000000..cd0321e8569 --- /dev/null +++ b/app/module/lib/zmk_debounce/Kconfig @@ -0,0 +1,3 @@ + +config ZMK_DEBOUNCE + bool "Debounce Support" \ No newline at end of file diff --git a/app/module/drivers/kscan/debounce.c b/app/module/lib/zmk_debounce/debounce.c similarity index 62% rename from app/module/drivers/kscan/debounce.c rename to app/module/lib/zmk_debounce/debounce.c index b38782267e8..6f4885b745c 100644 --- a/app/module/drivers/kscan/debounce.c +++ b/app/module/lib/zmk_debounce/debounce.c @@ -4,14 +4,14 @@ * SPDX-License-Identifier: MIT */ -#include "debounce.h" +#include -static uint32_t get_threshold(const struct debounce_state *state, - const struct debounce_config *config) { +static uint32_t get_threshold(const struct zmk_debounce_state *state, + const struct zmk_debounce_config *config) { return state->pressed ? config->debounce_release_ms : config->debounce_press_ms; } -static void increment_counter(struct debounce_state *state, const int elapsed_ms) { +static void increment_counter(struct zmk_debounce_state *state, const int elapsed_ms) { if (state->counter + elapsed_ms > DEBOUNCE_COUNTER_MAX) { state->counter = DEBOUNCE_COUNTER_MAX; } else { @@ -19,7 +19,7 @@ static void increment_counter(struct debounce_state *state, const int elapsed_ms } } -static void decrement_counter(struct debounce_state *state, const int elapsed_ms) { +static void decrement_counter(struct zmk_debounce_state *state, const int elapsed_ms) { if (state->counter < elapsed_ms) { state->counter = 0; } else { @@ -27,8 +27,8 @@ static void decrement_counter(struct debounce_state *state, const int elapsed_ms } } -void debounce_update(struct debounce_state *state, const bool active, const int elapsed_ms, - const struct debounce_config *config) { +void zmk_debounce_update(struct zmk_debounce_state *state, const bool active, const int elapsed_ms, + const struct zmk_debounce_config *config) { // This uses a variation of the integrator debouncing described at // https://www.kennethkuhn.com/electronics/debounce.c // Every update where "active" does not match the current state, we increment @@ -53,10 +53,10 @@ void debounce_update(struct debounce_state *state, const bool active, const int state->changed = true; } -bool debounce_is_active(const struct debounce_state *state) { +bool zmk_debounce_is_active(const struct zmk_debounce_state *state) { return state->pressed || state->counter > 0; } -bool debounce_is_pressed(const struct debounce_state *state) { return state->pressed; } +bool zmk_debounce_is_pressed(const struct zmk_debounce_state *state) { return state->pressed; } -bool debounce_get_changed(const struct debounce_state *state) { return state->changed; } \ No newline at end of file +bool zmk_debounce_get_changed(const struct zmk_debounce_state *state) { return state->changed; } \ No newline at end of file From 28ce23d4891eee3a1ef0a0d8187afe233d05cf81 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 14 Sep 2023 23:43:47 -0700 Subject: [PATCH 0758/1130] chore(tests): Move to proper header name. --- app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap | 2 +- app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap | 2 +- app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap | 2 +- app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap | 2 +- app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap | 2 +- app/tests/combo/layer-filter-0/native_posix_64.keymap | 2 +- app/tests/combo/layer-filter-1/native_posix_64.keymap | 2 +- app/tests/combo/multiple-timeouts/native_posix_64.keymap | 2 +- app/tests/combo/overlapping-combos-0/native_posix_64.keymap | 2 +- app/tests/combo/overlapping-combos-1/native_posix_64.keymap | 2 +- app/tests/combo/overlapping-combos-2/native_posix_64.keymap | 2 +- app/tests/combo/overlapping-combos-3/native_posix_64.keymap | 2 +- .../combo/partially-overlapping-combos/native_posix_64.keymap | 2 +- .../press-release-long-combo-complete/native_posix_64.keymap | 2 +- .../press-release-long-combo-incomplete/native_posix_64.keymap | 2 +- .../native_posix_64.keymap | 2 +- app/tests/combo/press-release/native_posix_64.keymap | 2 +- app/tests/combo/press-timeout/native_posix_64.keymap | 2 +- .../press1-press2-release1-release2/native_posix_64.keymap | 2 +- .../press1-press2-release2-release1/native_posix_64.keymap | 2 +- .../press1-release1-press2-release2/native_posix_64.keymap | 2 +- app/tests/combo/slowrelease-disabled/native_posix_64.keymap | 2 +- app/tests/combo/slowrelease-enabled/native_posix_64.keymap | 2 +- app/tests/gresc/gresc-press-release/native_posix_64.keymap | 2 +- app/tests/gresc/gresc-two-instances/native_posix_64.keymap | 2 +- .../kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap | 2 +- app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap | 2 +- .../sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap | 2 +- app/tests/to-layer/behavior_keymap.dtsi | 2 +- app/tests/to-layer/normal/native_posix_64.keymap | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap index e6754b71128..3438f9bc77d 100644 --- a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include &mt { flavor = "hold-preferred"; diff --git a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap index 9538243291c..9120e8c3b4a 100644 --- a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include &mt { flavor = "hold-preferred"; diff --git a/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap index d6d187e2046..a227fe4c91f 100644 --- a/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include &mt { flavor = "hold-preferred"; diff --git a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap index f1c7eee7087..4fbf24071e6 100644 --- a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include &mt { flavor = "hold-preferred"; diff --git a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap index 134b77dfa34..59f4391f288 100644 --- a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include #define ZMK_COMBO(name, combo_bindings, keypos, combo_term) \ diff --git a/app/tests/combo/layer-filter-0/native_posix_64.keymap b/app/tests/combo/layer-filter-0/native_posix_64.keymap index 8d94872b658..68077849a34 100644 --- a/app/tests/combo/layer-filter-0/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-0/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* it is useful to set timeout to a large value when attaching a debugger. */ #define TIMEOUT (60*60*1000) diff --git a/app/tests/combo/layer-filter-1/native_posix_64.keymap b/app/tests/combo/layer-filter-1/native_posix_64.keymap index 96eccea4ea8..a11b86ad4d9 100644 --- a/app/tests/combo/layer-filter-1/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-1/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* it is useful to set timeout to a large value when attaching a debugger. */ #define TIMEOUT (60*60*1000) diff --git a/app/tests/combo/multiple-timeouts/native_posix_64.keymap b/app/tests/combo/multiple-timeouts/native_posix_64.keymap index d2176390403..a2edc32fcc3 100644 --- a/app/tests/combo/multiple-timeouts/native_posix_64.keymap +++ b/app/tests/combo/multiple-timeouts/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap index e82846652d3..e89a3f22d33 100644 --- a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* combo 0 timeout inf diff --git a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap index a695a388c66..4b0166bee15 100644 --- a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* combo 01 timeout 50 diff --git a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap index 6bf0e7100cd..5c38bcfc403 100644 --- a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* combo 01 timeout 100 diff --git a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap index 0a2f5ee137f..48e3397f4a6 100644 --- a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* combo 12 timeout 100 diff --git a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap index 900c4af3f1e..55e8f1e77b6 100644 --- a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap +++ b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap index dac0bd5ca4c..da2e9483ff7 100644 --- a/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap index 19bad1d0d1d..b1494cecf20 100644 --- a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap index 2eb6271e2f0..8769286413b 100644 --- a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press-release/native_posix_64.keymap b/app/tests/combo/press-release/native_posix_64.keymap index 6bd432f9c86..26cd241b0bb 100644 --- a/app/tests/combo/press-release/native_posix_64.keymap +++ b/app/tests/combo/press-release/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press-timeout/native_posix_64.keymap b/app/tests/combo/press-timeout/native_posix_64.keymap index 6ca6487ba93..a71de45a7d2 100644 --- a/app/tests/combo/press-timeout/native_posix_64.keymap +++ b/app/tests/combo/press-timeout/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap index 9a395a41468..2e0a67a3e7f 100644 --- a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap index 86ca3931dce..8d4838eb511 100644 --- a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap index 650895784ae..9c75e5705b1 100644 --- a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap index 832e9705897..46b35be02ee 100644 --- a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap index 7fdb012ed15..d64876da557 100644 --- a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { diff --git a/app/tests/gresc/gresc-press-release/native_posix_64.keymap b/app/tests/gresc/gresc-press-release/native_posix_64.keymap index 5e3fac42c72..c472dd6d4ad 100644 --- a/app/tests/gresc/gresc-press-release/native_posix_64.keymap +++ b/app/tests/gresc/gresc-press-release/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { keymap { diff --git a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap index 18f94da5771..14adcf45c8e 100644 --- a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap +++ b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* This test checks nothing breaks if two grave-escapes are pressed at the same time. diff --git a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap index 621945a8218..72b218f510f 100644 --- a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include &kscan { diff --git a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap index 23ceeeb6161..bafdbe38d39 100644 --- a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* sticky layers should quick-release. diff --git a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap index 390207515dd..38c8fb4c91c 100644 --- a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include /* sticky layers should quick-release. diff --git a/app/tests/to-layer/behavior_keymap.dtsi b/app/tests/to-layer/behavior_keymap.dtsi index 663e897d74b..7dc857fe143 100644 --- a/app/tests/to-layer/behavior_keymap.dtsi +++ b/app/tests/to-layer/behavior_keymap.dtsi @@ -1,6 +1,6 @@ #include #include -#include +#include / { keymap { diff --git a/app/tests/to-layer/normal/native_posix_64.keymap b/app/tests/to-layer/normal/native_posix_64.keymap index 4cb23809452..6ccc9088bb2 100644 --- a/app/tests/to-layer/normal/native_posix_64.keymap +++ b/app/tests/to-layer/normal/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include #include "../behavior_keymap.dtsi" // Press key A From 8abc449cc29ef35ffd5770e9f7680348b8c708f7 Mon Sep 17 00:00:00 2001 From: zhiayang <500236+zhiayang@users.noreply.github.com> Date: Mon, 25 Sep 2023 21:04:03 -0400 Subject: [PATCH 0759/1130] feat(drivers): add driver for MAX17048 fuel gauge Add driver for MAX17048 fuel gauge for battery reporting. --- app/module/drivers/sensor/CMakeLists.txt | 3 +- app/module/drivers/sensor/Kconfig | 3 +- .../drivers/sensor/max17048/CMakeLists.txt | 9 + app/module/drivers/sensor/max17048/Kconfig | 23 ++ app/module/drivers/sensor/max17048/max17048.c | 222 ++++++++++++++++++ app/module/drivers/sensor/max17048/max17048.h | 41 ++++ .../dts/bindings/sensor/maxim,max17048.yml | 12 + 7 files changed, 311 insertions(+), 2 deletions(-) create mode 100644 app/module/drivers/sensor/max17048/CMakeLists.txt create mode 100644 app/module/drivers/sensor/max17048/Kconfig create mode 100644 app/module/drivers/sensor/max17048/max17048.c create mode 100644 app/module/drivers/sensor/max17048/max17048.h create mode 100644 app/module/dts/bindings/sensor/maxim,max17048.yml diff --git a/app/module/drivers/sensor/CMakeLists.txt b/app/module/drivers/sensor/CMakeLists.txt index b549320f121..9654600a756 100644 --- a/app/module/drivers/sensor/CMakeLists.txt +++ b/app/module/drivers/sensor/CMakeLists.txt @@ -2,4 +2,5 @@ # SPDX-License-Identifier: MIT add_subdirectory_ifdef(CONFIG_ZMK_BATTERY battery) -add_subdirectory_ifdef(CONFIG_EC11 ec11) \ No newline at end of file +add_subdirectory_ifdef(CONFIG_EC11 ec11) +add_subdirectory_ifdef(CONFIG_MAX17048 max17048) diff --git a/app/module/drivers/sensor/Kconfig b/app/module/drivers/sensor/Kconfig index 6a8ac07ea3e..ad570c58c94 100644 --- a/app/module/drivers/sensor/Kconfig +++ b/app/module/drivers/sensor/Kconfig @@ -5,5 +5,6 @@ if SENSOR rsource "battery/Kconfig" rsource "ec11/Kconfig" +rsource "max17048/Kconfig" -endif # SENSOR \ No newline at end of file +endif # SENSOR diff --git a/app/module/drivers/sensor/max17048/CMakeLists.txt b/app/module/drivers/sensor/max17048/CMakeLists.txt new file mode 100644 index 00000000000..e895fa11fb8 --- /dev/null +++ b/app/module/drivers/sensor/max17048/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +zephyr_include_directories(.) + +zephyr_library() + +zephyr_library_sources_ifdef(CONFIG_MAX17048 max17048.c) +zephyr_library_sources_ifndef(CONFIG_MAX17048 ${ZEPHYR_BASE}/misc/empty_file.c) diff --git a/app/module/drivers/sensor/max17048/Kconfig b/app/module/drivers/sensor/max17048/Kconfig new file mode 100644 index 00000000000..8a7ec16e85d --- /dev/null +++ b/app/module/drivers/sensor/max17048/Kconfig @@ -0,0 +1,23 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +DT_COMPAT_MAXIM_MAX17048 := maxim,max17048 + +menuconfig MAX17048 + bool "MAX17048/9 I2C-based Fuel Gauge" + default $(dt_compat_enabled,$(DT_COMPAT_MAXIM_MAX17048)) + depends on I2C + select ZMK_BATTERY + help + Enable driver for MAX17048/9 I2C-based Fuel Gauge. Supports measuring + battery voltage and state-of-charge. + +if MAX17048 + +config SENSOR_MAX17048_INIT_PRIORITY + int "Init priority" + default 75 + help + Device driver initialization priority. + +endif #MAX17048 diff --git a/app/module/drivers/sensor/max17048/max17048.c b/app/module/drivers/sensor/max17048/max17048.c new file mode 100644 index 00000000000..24cfe093f4a --- /dev/null +++ b/app/module/drivers/sensor/max17048/max17048.c @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT maxim_max17048 + +#include +#include +#include +#include +#include +#include + +#include "max17048.h" + +#define LOG_LEVEL CONFIG_SENSOR_LOG_LEVEL +#include +LOG_MODULE_REGISTER(sensor_max17048); + +static int read_register(const struct device *dev, uint8_t reg, uint16_t *value) { + + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + struct max17048_config *config = (struct max17048_config *)dev->config; + + uint8_t data[2] = {0}; + int ret = i2c_burst_read_dt(&config->i2c_bus, reg, &data[0], sizeof(data)); + if (ret != 0) { + LOG_DBG("i2c_write_read FAIL %d\n", ret); + return ret; + } + + // the register values are returned in big endian (MSB first) + *value = sys_get_be16(data); + return 0; +} + +static int write_register(const struct device *dev, uint8_t reg, uint16_t value) { + + if (k_is_in_isr()) { + return -EWOULDBLOCK; + } + + struct max17048_config *config = (struct max17048_config *)dev->config; + + uint8_t data[2] = {0}; + sys_put_be16(value, &data[0]); + + return i2c_burst_write_dt(&config->i2c_bus, reg, &data[0], sizeof(data)); +} + +static int set_rcomp_value(const struct device *dev, uint8_t rcomp_value) { + + struct max17048_drv_data *const drv_data = (struct max17048_drv_data *const)dev->data; + k_sem_take(&drv_data->lock, K_FOREVER); + + uint16_t tmp = 0; + int err = read_register(dev, REG_CONFIG, &tmp); + if (err != 0) { + goto done; + } + + tmp = ((uint16_t)rcomp_value << 8) | (tmp & 0xFF); + err = write_register(dev, REG_CONFIG, tmp); + if (err != 0) { + goto done; + } + + LOG_DBG("set RCOMP to %d", rcomp_value); + +done: + k_sem_give(&drv_data->lock); + return err; +} + +static int set_sleep_enabled(const struct device *dev, bool sleep) { + + struct max17048_drv_data *const drv_data = (struct max17048_drv_data *const)dev->data; + k_sem_take(&drv_data->lock, K_FOREVER); + + uint16_t tmp = 0; + int err = read_register(dev, REG_CONFIG, &tmp); + if (err != 0) { + goto done; + } + + if (sleep) { + tmp |= 0x80; + } else { + tmp &= ~0x0080; + } + + err = write_register(dev, REG_CONFIG, tmp); + if (err != 0) { + goto done; + } + + LOG_DBG("sleep mode %s", sleep ? "enabled" : "disabled"); + +done: + k_sem_give(&drv_data->lock); + return err; +} + +static int max17048_sample_fetch(const struct device *dev, enum sensor_channel chan) { + + struct max17048_drv_data *const drv_data = dev->data; + k_sem_take(&drv_data->lock, K_FOREVER); + + int err = 0; + + if (chan == SENSOR_CHAN_GAUGE_STATE_OF_CHARGE || chan == SENSOR_CHAN_ALL) { + err = read_register(dev, REG_STATE_OF_CHARGE, &drv_data->raw_state_of_charge); + if (err != 0) { + LOG_WRN("failed to read state-of-charge: %d", err); + goto done; + } + LOG_DBG("read soc: %d", drv_data->raw_state_of_charge); + + } else if (chan == SENSOR_CHAN_GAUGE_VOLTAGE || chan == SENSOR_CHAN_ALL) { + err = read_register(dev, REG_VCELL, &drv_data->raw_vcell); + if (err != 0) { + LOG_WRN("failed to read vcell: %d", err); + goto done; + } + LOG_DBG("read vcell: %d", drv_data->raw_vcell); + + } else { + LOG_DBG("unsupported channel %d", chan); + err = -ENOTSUP; + } + +done: + k_sem_give(&drv_data->lock); + return err; +} + +static int max17048_channel_get(const struct device *dev, enum sensor_channel chan, + struct sensor_value *val) { + int err = 0; + + struct max17048_drv_data *const drv_data = dev->data; + k_sem_take(&drv_data->lock, K_FOREVER); + + struct max17048_drv_data *const data = dev->data; + unsigned int tmp = 0; + + switch (chan) { + case SENSOR_CHAN_GAUGE_VOLTAGE: + // 1250 / 16 = 78.125 + tmp = data->raw_vcell * 1250 / 16; + val->val1 = tmp / 1000000; + val->val2 = tmp % 1000000; + break; + + case SENSOR_CHAN_GAUGE_STATE_OF_CHARGE: + val->val1 = (data->raw_state_of_charge >> 8); + val->val2 = (data->raw_state_of_charge & 0xFF) * 1000000 / 256; + break; + + default: + err = -ENOTSUP; + break; + } + + k_sem_give(&drv_data->lock); + return err; +} + +static int max17048_init(const struct device *dev) { + struct max17048_drv_data *drv_data = dev->data; + const struct max17048_config *config = dev->config; + + if (!device_is_ready(config->i2c_bus.bus)) { + LOG_WRN("i2c bus not ready!"); + return -EINVAL; + } + + uint16_t ic_version = 0; + int err = read_register(dev, REG_VERSION, &ic_version); + if (err != 0) { + LOG_WRN("could not get IC version!"); + return err; + } + + // the functions below need the semaphore, so initialise it here + k_sem_init(&drv_data->lock, 1, 1); + + // bring the device out of sleep + set_sleep_enabled(dev, false); + + // set the default rcomp value -- 0x97, as stated in the datasheet + set_rcomp_value(dev, 0x97); + + LOG_INF("device initialised at 0x%x (version %d)", config->i2c_bus.addr, ic_version); + + return 0; +} + +static const struct sensor_driver_api max17048_api_table = {.sample_fetch = max17048_sample_fetch, + .channel_get = max17048_channel_get}; + +#define MAX17048_INIT(inst) \ + static struct max17048_config max17048_##inst##_config = {.i2c_bus = \ + I2C_DT_SPEC_INST_GET(inst)}; \ + \ + static struct max17048_drv_data max17048_##inst##_drvdata = { \ + .raw_state_of_charge = 0, \ + .raw_charge_rate = 0, \ + .raw_vcell = 0, \ + }; \ + \ + /* This has to init after SPI master */ \ + DEVICE_DT_INST_DEFINE(inst, max17048_init, NULL, &max17048_##inst##_drvdata, \ + &max17048_##inst##_config, POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, \ + &max17048_api_table); + +DT_INST_FOREACH_STATUS_OKAY(MAX17048_INIT) diff --git a/app/module/drivers/sensor/max17048/max17048.h b/app/module/drivers/sensor/max17048/max17048.h new file mode 100644 index 00000000000..984f5c70f4e --- /dev/null +++ b/app/module/drivers/sensor/max17048/max17048.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define REG_VCELL 0x02 +#define REG_STATE_OF_CHARGE 0x04 +#define REG_MODE 0x06 +#define REG_VERSION 0x08 +#define REG_HIBERNATE 0x0A +#define REG_CONFIG 0x0C +#define REG_VALERT 0x14 +#define REG_CHARGE_RATE 0x16 +#define REG_VRESET 0x18 +#define REG_STATUS 0x1A + +struct max17048_config { + struct i2c_dt_spec i2c_bus; +}; + +struct max17048_drv_data { + struct k_sem lock; + + uint16_t raw_state_of_charge; + uint16_t raw_charge_rate; + uint16_t raw_vcell; +}; + +#ifdef __cplusplus +} +#endif diff --git a/app/module/dts/bindings/sensor/maxim,max17048.yml b/app/module/dts/bindings/sensor/maxim,max17048.yml new file mode 100644 index 00000000000..786f4b8686d --- /dev/null +++ b/app/module/dts/bindings/sensor/maxim,max17048.yml @@ -0,0 +1,12 @@ +# +# Copyright (c) 2022 The ZMK Contributors +# +# SPDX-License-Identifier: MIT +# + +description: > + This is a representation of the Maxim max17048 I2C Fuel Gauge. + +compatible: "maxim,max17048" + +include: [i2c-device.yaml] From 07c82836e032ee4db64098e3b0aa26295b29b989 Mon Sep 17 00:00:00 2001 From: ClicketySplit <101202583+ClicketySplit@users.noreply.github.com> Date: Thu, 28 Sep 2023 09:54:08 -0600 Subject: [PATCH 0760/1130] fix(shields): Leeloo-Micro set status disabled for encoders. --- app/boards/shields/leeloo_micro/leeloo_micro.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi index afe16dfa605..ab68a6153f1 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -48,7 +48,8 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - steps = <120>; + status = "disabled"; + steps = <60>; }; right_encoder: right_encoder { @@ -56,7 +57,8 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - steps = <120>; + status = "disabled"; + steps = <60>; }; sensors { From 9b3d2cb99fe806db5897063e372a5ae45a58b0ec Mon Sep 17 00:00:00 2001 From: zhiayang <500236+zhiayang@users.noreply.github.com> Date: Thu, 28 Sep 2023 12:19:14 -0400 Subject: [PATCH 0761/1130] fix(driver): Fix broken compilation for MAX7318 driver --- app/module/drivers/gpio/gpio_max7318.c | 15 +++++++-------- app/module/dts/bindings/gpio/maxim,max7318.yaml | 3 --- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/module/drivers/gpio/gpio_max7318.c b/app/module/drivers/gpio/gpio_max7318.c index 04424b48b09..1842ce7b2d6 100644 --- a/app/module/drivers/gpio/gpio_max7318.c +++ b/app/module/drivers/gpio/gpio_max7318.c @@ -12,16 +12,15 @@ #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #define LOG_LEVEL CONFIG_GPIO_LOG_LEVEL -#include +#include LOG_MODULE_REGISTER(gpio_max7318); diff --git a/app/module/dts/bindings/gpio/maxim,max7318.yaml b/app/module/dts/bindings/gpio/maxim,max7318.yaml index 94952813edd..6c309768d44 100644 --- a/app/module/dts/bindings/gpio/maxim,max7318.yaml +++ b/app/module/dts/bindings/gpio/maxim,max7318.yaml @@ -12,9 +12,6 @@ compatible: "maxim,max7318" include: [gpio-controller.yaml, i2c-device.yaml] properties: - label: - required: true - "#gpio-cells": const: 2 From c1ebadcd2a1b7cad47c2224a4fb6130cda80b7e3 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Fri, 29 Sep 2023 21:14:31 +0100 Subject: [PATCH 0762/1130] feat(hid): Add apple globe keycode * feat(hid): Add apple globe keycode * Update docs/src/data/hid.js Co-authored-by: Cem Aksoylar Co-authored-by: Pete Johanson Co-authored-by: Nick Coutsos --- app/include/dt-bindings/zmk/keys.h | 4 ++++ docs/src/data/groups.js | 1 + docs/src/data/hid.js | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index 3e67c402470..364ffa8647a 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -1439,3 +1439,7 @@ #define C_KEYBOARD_INPUT_ASSIST_CANCEL \ (ZMK_HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_CANCEL)) #define C_KBIA_CANCEL (C_KEYBOARD_INPUT_ASSIST_CANCEL) + +/* Apple Globe key */ +#define C_AC_NEXT_KEYBOARD_LAYOUT_SELECT (ZMK_HID_USAGE(HID_USAGE_CONSUMER, 0x029D)) +#define GLOBE (C_AC_NEXT_KEYBOARD_LAYOUT_SELECT) diff --git a/docs/src/data/groups.js b/docs/src/data/groups.js index 0eb15d27fc5..5a8dc3cfe75 100644 --- a/docs/src/data/groups.js +++ b/docs/src/data/groups.js @@ -49,6 +49,7 @@ export default { "C_AC_DESKTOP_SHOW_ALL_WINDOWS", "C_AC_DESKTOP_SHOW_ALL_APPLICATIONS", "C_VOICE_COMMAND", + "C_AC_NEXT_KEYBOARD_LAYOUT_SELECT", ], applications: [ "C_AL_NEXT_TASK", diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 457671728f8..fc61555c8eb 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -7865,4 +7865,25 @@ export default [ }, footnotes: {}, }, + { + names: ["C_AC_NEXT_KEYBOARD_LAYOUT_SELECT", "GLOBE"], + description: "AC Next Keyboard Layout Select (Apple Globe)", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x29d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=153", + os: { + windows: null, + linux: null, + android: null, + macos: true, + ios: true, + }, + footnotes: {}, + }, ]; From 933e369d7cacd2680cd8c1355eb7e4a35b4e34f9 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Mon, 29 May 2023 22:48:38 -0400 Subject: [PATCH 0763/1130] feat(core): Adding pre-release for keys that were already pressed. This fixes #1207 and #1076 (and maybe more?). --- app/src/hid_listener.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c index 3a11101d54f..796ec19b7a4 100644 --- a/app/src/hid_listener.c +++ b/app/src/hid_listener.c @@ -19,6 +19,20 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *ev) { int err, explicit_mods_changed, implicit_mods_changed; + if (zmk_hid_is_pressed(ZMK_HID_USAGE(ev->usage_page, ev->keycode))) { + LOG_DBG("unregistering usage_page 0x%02X keycode 0x%02X since it was already pressed", + ev->usage_page, ev->keycode); + err = zmk_hid_release(ZMK_HID_USAGE(ev->usage_page, ev->keycode)); + if (err < 0) { + LOG_DBG("Unable to pre-release keycode (%d)", err); + return err; + } + err = zmk_endpoints_send_report(ev->usage_page); + if (err < 0) { + LOG_ERR("Failed to send key report for pre-releasing keycode (%d)", err); + } + } + LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X", ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers); err = zmk_hid_press(ZMK_HID_USAGE(ev->usage_page, ev->keycode)); From dffdb2365e1ff977020a1c62967512b196edee2c Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Tue, 6 Jun 2023 20:42:52 -0400 Subject: [PATCH 0764/1130] test(core): Adding coverage for key pre-releasing. Added cases for the two use cases I know of: 1. Rolling with key-repeat behavior 2. Rolling symbols that have the same base key, eg `+=` --- .../tap-when-rolling/events.patterns | 2 ++ .../tap-when-rolling/keycode_events.snapshot | 9 +++++++ .../tap-when-rolling/native_posix.keymap | 13 +++++++++ .../tap-when-rolling/native_posix_64.keymap | 13 +++++++++ .../events.patterns | 4 +++ .../keycode_events.snapshot | 9 +++++++ .../native_posix_64.keymap | 27 +++++++++++++++++++ 7 files changed, 77 insertions(+) create mode 100644 app/tests/key-repeat/tap-when-rolling/events.patterns create mode 100644 app/tests/key-repeat/tap-when-rolling/keycode_events.snapshot create mode 100644 app/tests/key-repeat/tap-when-rolling/native_posix.keymap create mode 100644 app/tests/key-repeat/tap-when-rolling/native_posix_64.keymap create mode 100644 app/tests/modifiers/implicit/kp-rolling-symbols-same-key/events.patterns create mode 100644 app/tests/modifiers/implicit/kp-rolling-symbols-same-key/keycode_events.snapshot create mode 100644 app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap diff --git a/app/tests/key-repeat/tap-when-rolling/events.patterns b/app/tests/key-repeat/tap-when-rolling/events.patterns new file mode 100644 index 00000000000..794719239fc --- /dev/null +++ b/app/tests/key-repeat/tap-when-rolling/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*hid_implicit_modifiers_//p \ No newline at end of file diff --git a/app/tests/key-repeat/tap-when-rolling/keycode_events.snapshot b/app/tests/key-repeat/tap-when-rolling/keycode_events.snapshot new file mode 100644 index 00000000000..7d54e9de9b2 --- /dev/null +++ b/app/tests/key-repeat/tap-when-rolling/keycode_events.snapshot @@ -0,0 +1,9 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +pressed: unregistering usage_page 0x07 keycode 0x04 since it was already pressed +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +press: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +release: Modifiers set to 0x00 diff --git a/app/tests/key-repeat/tap-when-rolling/native_posix.keymap b/app/tests/key-repeat/tap-when-rolling/native_posix.keymap new file mode 100644 index 00000000000..bb129d14c7a --- /dev/null +++ b/app/tests/key-repeat/tap-when-rolling/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/key-repeat/tap-when-rolling/native_posix_64.keymap b/app/tests/key-repeat/tap-when-rolling/native_posix_64.keymap new file mode 100644 index 00000000000..a947f7ab0ed --- /dev/null +++ b/app/tests/key-repeat/tap-when-rolling/native_posix_64.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,9000) + ZMK_MOCK_PRESS(0,0,30) + ZMK_MOCK_RELEASE(0,1,30) + ZMK_MOCK_RELEASE(0,0,3000) + >; +}; diff --git a/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/events.patterns b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/events.patterns new file mode 100644 index 00000000000..cbf21aff278 --- /dev/null +++ b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/keycode_events.snapshot b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/keycode_events.snapshot new file mode 100644 index 00000000000..0b06bd91d88 --- /dev/null +++ b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/keycode_events.snapshot @@ -0,0 +1,9 @@ +pressed: usage_page 0x07 keycode 0x2E implicit_mods 0x02 explicit_mods 0x00 +mods: Modifiers set to 0x02 +pressed: unregistering usage_page 0x07 keycode 0x2E since it was already pressed +pressed: usage_page 0x07 keycode 0x2E implicit_mods 0x00 explicit_mods 0x00 +mods: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x2E implicit_mods 0x02 explicit_mods 0x00 +mods: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x2E implicit_mods 0x00 explicit_mods 0x00 +mods: Modifiers set to 0x00 diff --git a/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap new file mode 100644 index 00000000000..3926eb57a29 --- /dev/null +++ b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp PLUS &kp EQUAL + &none &none + >; + }; + }; +}; From 2f05ad55ca9734f1cc890dcd659d0691ce327658 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Sat, 16 Sep 2023 17:24:39 -0400 Subject: [PATCH 0765/1130] fix(core): Prevent pre-releasing explicit mods. --- app/src/hid_listener.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c index 796ec19b7a4..2b8470820a1 100644 --- a/app/src/hid_listener.c +++ b/app/src/hid_listener.c @@ -19,7 +19,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *ev) { int err, explicit_mods_changed, implicit_mods_changed; - if (zmk_hid_is_pressed(ZMK_HID_USAGE(ev->usage_page, ev->keycode))) { + if (!is_mod(ev->usage_page, ev->keycode) && + zmk_hid_is_pressed(ZMK_HID_USAGE(ev->usage_page, ev->keycode))) { LOG_DBG("unregistering usage_page 0x%02X keycode 0x%02X since it was already pressed", ev->usage_page, ev->keycode); err = zmk_hid_release(ZMK_HID_USAGE(ev->usage_page, ev->keycode)); From 651ed05e9aab061703fb6e3736c974702310a9e1 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 14 May 2023 11:55:21 -0500 Subject: [PATCH 0766/1130] refactor: Split endpoint to transport and instance Changed the endpoints code to rename the existing endpoint types to "transport" and add the concept of "endpoint instances". A transport is the method by which data is sent, while instances allow describing multiple endpoints that use the same transport (e.g. bluetooth profiles) Also added new APIs to get the total number of possible endpoint instances and assign each instance a unique index, which can be used for tracking separate state for each endpoint in other code files. --- .../arm/corneish_zen/widgets/output_status.c | 33 ++- app/include/zmk/endpoints.h | 62 ++++- app/include/zmk/endpoints_types.h | 32 ++- ...selection_changed.h => endpoint_changed.h} | 6 +- app/src/behaviors/behavior_outputs.c | 6 +- app/src/display/widgets/output_status.c | 29 +-- app/src/endpoints.c | 220 ++++++++++++------ app/src/events/endpoint_selection_changed.c | 4 +- 8 files changed, 268 insertions(+), 124 deletions(-) rename app/include/zmk/events/{endpoint_selection_changed.h => endpoint_changed.h} (61%) diff --git a/app/boards/arm/corneish_zen/widgets/output_status.c b/app/boards/arm/corneish_zen/widgets/output_status.c index ad0c2b1a8fb..bdf90cc3d7f 100644 --- a/app/boards/arm/corneish_zen/widgets/output_status.c +++ b/app/boards/arm/corneish_zen/widgets/output_status.c @@ -14,9 +14,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include "output_status.h" #include -#include #include -#include +#include #include #include #include @@ -39,31 +38,31 @@ LV_IMG_DECLARE(USB_connected); static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); struct output_status_state { - enum zmk_endpoint selected_endpoint; + struct zmk_endpoint_instance selected_endpoint; bool active_profile_connected; bool active_profile_bonded; uint8_t active_profile_index; }; static struct output_status_state get_state(const zmk_event_t *_eh) { - return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), - .active_profile_connected = - zmk_ble_active_profile_is_connected(), - .active_profile_bonded = !zmk_ble_active_profile_is_open(), - .active_profile_index = zmk_ble_active_profile_index()}; + return (struct output_status_state){ + .selected_endpoint = zmk_endpoints_selected(), + .active_profile_connected = zmk_ble_active_profile_is_connected(), + .active_profile_bonded = !zmk_ble_active_profile_is_open(), + }; ; } static void set_status_symbol(lv_obj_t *icon, struct output_status_state state) { - switch (state.selected_endpoint) { - case ZMK_ENDPOINT_USB: + switch (state.selected_endpoint.transport) { + case ZMK_TRANSPORT_USB: lv_img_set_src(icon, &USB_connected); break; - case ZMK_ENDPOINT_BLE: + case ZMK_TRANSPORT_BLE: if (state.active_profile_bonded) { if (state.active_profile_connected) { // sprintf(text, LV_SYMBOL_BLUETOOTH "%i " LV_SYMBOL_OK, active_profile_index); - switch (state.active_profile_index) { + switch (state.selected_endpoint.ble.profile_index) { case 0: lv_img_set_src(icon, &bluetooth_connected_1); break; @@ -84,7 +83,7 @@ static void set_status_symbol(lv_obj_t *icon, struct output_status_state state) lv_img_set_src(icon, &bluetooth_disconnected_right); } } else { - switch (state.active_profile_index) { + switch (state.selected_endpoint.ble.profile_index) { case 0: lv_img_set_src(icon, &bluetooth_advertising_1); break; @@ -113,11 +112,9 @@ static void output_status_update_cb(struct output_status_state state) { ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, output_status_update_cb, get_state) -ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); - -#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) -ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); -#endif +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_changed); +// We don't get an endpoint changed event when the active profile connects/disconnects +// but there wasn't another endpoint to switch from/to, so update on BLE events too. #if defined(CONFIG_ZMK_BLE) ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); #endif diff --git a/app/include/zmk/endpoints.h b/app/include/zmk/endpoints.h index c8860533e1d..c5964ff8535 100644 --- a/app/include/zmk/endpoints.h +++ b/app/include/zmk/endpoints.h @@ -6,10 +6,66 @@ #pragma once +#include #include -int zmk_endpoints_select(enum zmk_endpoint endpoint); -int zmk_endpoints_toggle(); -enum zmk_endpoint zmk_endpoints_selected(); +/** + * Recommended length of string buffer for printing endpoint identifiers. + */ +#define ZMK_ENDPOINT_STR_LEN 10 + +#ifdef CONFIG_ZMK_USB +#define ZMK_ENDPOINT_USB_COUNT 1 +#else +#define ZMK_ENDPOINT_USB_COUNT 0 +#endif + +#ifdef CONFIG_ZMK_BLE +#define ZMK_ENDPOINT_BLE_COUNT ZMK_BLE_PROFILE_COUNT +#else +#define ZMK_ENDPOINT_BLE_COUNT 0 +#endif + +/** + * The total number of different (struct zmk_endpoint_instance) values that can + * be selected. + * + * Note that this value may change between firmware versions, so it should not + * be used in any persistent storage. + */ +#define ZMK_ENDPOINT_COUNT (ZMK_ENDPOINT_USB_COUNT + ZMK_ENDPOINT_BLE_COUNT) + +bool zmk_endpoint_instance_eq(struct zmk_endpoint_instance a, struct zmk_endpoint_instance b); + +/** + * Writes a string identifying an endpoint instance. + * + * @param str Address of output string buffer + * @param len Length of string buffer. See ZMK_ENDPOINT_STR_LEN for recommended length. + * + * @returns Number of characters written. + */ +int zmk_endpoint_instance_to_str(struct zmk_endpoint_instance endpoint, char *str, size_t len); + +/** + * Gets a unique index for an endpoint instance. This can be used together with + * ZMK_ENDPOINT_COUNT to manage separate state for each endpoint instance. + * + * Note that the index for a specific instance may change between firmware versions, + * so it should not be used in any persistent storage. + */ +int zmk_endpoint_instance_to_index(struct zmk_endpoint_instance endpoint); + +/** + * Sets the preferred endpoint transport to use. (If the preferred endpoint is + * not available, a different one may automatically be selected.) + */ +int zmk_endpoints_select_transport(enum zmk_transport transport); +int zmk_endpoints_toggle_transport(void); + +/** + * Gets the currently-selected endpoint. + */ +struct zmk_endpoint_instance zmk_endpoints_selected(void); int zmk_endpoints_send_report(uint16_t usage_page); diff --git a/app/include/zmk/endpoints_types.h b/app/include/zmk/endpoints_types.h index 70804a613d8..ea51c8aa93d 100644 --- a/app/include/zmk/endpoints_types.h +++ b/app/include/zmk/endpoints_types.h @@ -6,7 +6,33 @@ #pragma once -enum zmk_endpoint { - ZMK_ENDPOINT_USB, - ZMK_ENDPOINT_BLE, +/** + * The method by which data is sent. + */ +enum zmk_transport { + ZMK_TRANSPORT_USB, + ZMK_TRANSPORT_BLE, +}; + +/** + * Configuration to select an endpoint on ZMK_TRANSPORT_USB. + */ +struct zmk_transport_usb_data {}; + +/** + * Configuration to select an endpoint on ZMK_TRANSPORT_BLE. + */ +struct zmk_transport_ble_data { + int profile_index; +}; + +/** + * A specific endpoint to which data may be sent. + */ +struct zmk_endpoint_instance { + enum zmk_transport transport; + union { + struct zmk_transport_usb_data usb; // ZMK_TRANSPORT_USB + struct zmk_transport_ble_data ble; // ZMK_TRANSPORT_BLE + }; }; diff --git a/app/include/zmk/events/endpoint_selection_changed.h b/app/include/zmk/events/endpoint_changed.h similarity index 61% rename from app/include/zmk/events/endpoint_selection_changed.h rename to app/include/zmk/events/endpoint_changed.h index 198fe5a1688..2147009b84b 100644 --- a/app/include/zmk/events/endpoint_selection_changed.h +++ b/app/include/zmk/events/endpoint_changed.h @@ -11,8 +11,8 @@ #include #include -struct zmk_endpoint_selection_changed { - enum zmk_endpoint endpoint; +struct zmk_endpoint_changed { + struct zmk_endpoint_instance endpoint; }; -ZMK_EVENT_DECLARE(zmk_endpoint_selection_changed); +ZMK_EVENT_DECLARE(zmk_endpoint_changed); diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index 7aab8ee32c0..6ae81a0fdd7 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -24,11 +24,11 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { case OUT_TOG: - return zmk_endpoints_toggle(); + return zmk_endpoints_toggle_transport(); case OUT_USB: - return zmk_endpoints_select(ZMK_ENDPOINT_USB); + return zmk_endpoints_select_transport(ZMK_TRANSPORT_USB); case OUT_BLE: - return zmk_endpoints_select(ZMK_ENDPOINT_BLE); + return zmk_endpoints_select_transport(ZMK_TRANSPORT_BLE); default: LOG_ERR("Unknown output command: %d", binding->param1); } diff --git a/app/src/display/widgets/output_status.c b/app/src/display/widgets/output_status.c index 1c6da4b9034..da29a95f393 100644 --- a/app/src/display/widgets/output_status.c +++ b/app/src/display/widgets/output_status.c @@ -12,9 +12,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include -#include #include -#include +#include #include #include #include @@ -22,40 +21,38 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); struct output_status_state { - enum zmk_endpoint selected_endpoint; + struct zmk_endpoint_instance selected_endpoint; bool active_profile_connected; bool active_profile_bonded; - uint8_t active_profile_index; }; static struct output_status_state get_state(const zmk_event_t *_eh) { return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), .active_profile_connected = zmk_ble_active_profile_is_connected(), - .active_profile_bonded = !zmk_ble_active_profile_is_open(), - .active_profile_index = zmk_ble_active_profile_index()}; + .active_profile_bonded = !zmk_ble_active_profile_is_open()}; ; } static void set_status_symbol(lv_obj_t *label, struct output_status_state state) { char text[10] = {}; - switch (state.selected_endpoint) { - case ZMK_ENDPOINT_USB: + switch (state.selected_endpoint.transport) { + case ZMK_TRANSPORT_USB: strcat(text, LV_SYMBOL_USB); break; - case ZMK_ENDPOINT_BLE: + case ZMK_TRANSPORT_BLE: if (state.active_profile_bonded) { if (state.active_profile_connected) { snprintf(text, sizeof(text), LV_SYMBOL_WIFI " %i " LV_SYMBOL_OK, - state.active_profile_index + 1); + state.selected_endpoint.ble.profile_index + 1); } else { snprintf(text, sizeof(text), LV_SYMBOL_WIFI " %i " LV_SYMBOL_CLOSE, - state.active_profile_index + 1); + state.selected_endpoint.ble.profile_index + 1); } } else { snprintf(text, sizeof(text), LV_SYMBOL_WIFI " %i " LV_SYMBOL_SETTINGS, - state.active_profile_index + 1); + state.selected_endpoint.ble.profile_index + 1); } break; } @@ -70,11 +67,9 @@ static void output_status_update_cb(struct output_status_state state) { ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, output_status_update_cb, get_state) -ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); - -#if IS_ENABLED(CONFIG_USB_DEVICE_STACK) -ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); -#endif +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_changed); +// We don't get an endpoint changed event when the active profile connects/disconnects +// but there wasn't another endpoint to switch from/to, so update on BLE events too. #if defined(CONFIG_ZMK_BLE) ZMK_SUBSCRIPTION(widget_output_status, zmk_ble_active_profile_changed); #endif diff --git a/app/src/endpoints.c b/app/src/endpoints.c index dbd1a3e6c0e..e208a36a312 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -16,29 +16,29 @@ #include #include #include -#include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#define DEFAULT_ENDPOINT \ - COND_CODE_1(IS_ENABLED(CONFIG_ZMK_BLE), (ZMK_ENDPOINT_BLE), (ZMK_ENDPOINT_USB)) +#define DEFAULT_TRANSPORT \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_BLE), (ZMK_TRANSPORT_BLE), (ZMK_TRANSPORT_USB)) -static enum zmk_endpoint current_endpoint = DEFAULT_ENDPOINT; -static enum zmk_endpoint preferred_endpoint = - ZMK_ENDPOINT_USB; /* Used if multiple endpoints are ready */ +static struct zmk_endpoint_instance current_instance = {}; +static enum zmk_transport preferred_transport = + ZMK_TRANSPORT_USB; /* Used if multiple endpoints are ready */ -static void update_current_endpoint(); +static void update_current_endpoint(void); #if IS_ENABLED(CONFIG_SETTINGS) static void endpoints_save_preferred_work(struct k_work *work) { - settings_save_one("endpoints/preferred", &preferred_endpoint, sizeof(preferred_endpoint)); + settings_save_one("endpoints/preferred", &preferred_transport, sizeof(preferred_transport)); } static struct k_work_delayable endpoints_save_work; #endif -static int endpoints_save_preferred() { +static int endpoints_save_preferred(void) { #if IS_ENABLED(CONFIG_SETTINGS) return k_work_reschedule(&endpoints_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else @@ -46,14 +46,60 @@ static int endpoints_save_preferred() { #endif } -int zmk_endpoints_select(enum zmk_endpoint endpoint) { - LOG_DBG("Selected endpoint %d", endpoint); +bool zmk_endpoint_instance_eq(struct zmk_endpoint_instance a, struct zmk_endpoint_instance b) { + if (a.transport != b.transport) { + return false; + } + + switch (a.transport) { + case ZMK_TRANSPORT_USB: + return true; + + case ZMK_TRANSPORT_BLE: + return a.ble.profile_index == b.ble.profile_index; + } + + LOG_ERR("Invalid transport %d", a.transport); + return false; +} + +int zmk_endpoint_instance_to_str(struct zmk_endpoint_instance endpoint, char *str, size_t len) { + switch (endpoint.transport) { + case ZMK_TRANSPORT_USB: + return snprintf(str, len, "USB"); + + case ZMK_TRANSPORT_BLE: + return snprintf(str, len, "BLE:%d", endpoint.ble.profile_index); + + default: + return snprintf(str, len, "Invalid"); + } +} + +#define INSTANCE_INDEX_OFFSET_USB 0 +#define INSTANCE_INDEX_OFFSET_BLE ZMK_ENDPOINT_USB_COUNT + +int zmk_endpoint_instance_to_index(struct zmk_endpoint_instance endpoint) { + switch (endpoint.transport) { + case ZMK_TRANSPORT_USB: + return INSTANCE_INDEX_OFFSET_USB; + + case ZMK_TRANSPORT_BLE: + return INSTANCE_INDEX_OFFSET_BLE + endpoint.ble.profile_index; + } + + LOG_ERR("Invalid transport %d", endpoint.transport); + return 0; +} - if (preferred_endpoint == endpoint) { +int zmk_endpoints_select_transport(enum zmk_transport transport) { + LOG_DBG("Selected endpoint transport %d", transport); + + if (preferred_transport == transport) { return 0; } - preferred_endpoint = endpoint; + preferred_transport = transport; endpoints_save_preferred(); @@ -62,20 +108,22 @@ int zmk_endpoints_select(enum zmk_endpoint endpoint) { return 0; } -enum zmk_endpoint zmk_endpoints_selected() { return current_endpoint; } +int zmk_endpoints_toggle_transport(void) { + enum zmk_transport new_transport = + (preferred_transport == ZMK_TRANSPORT_USB) ? ZMK_TRANSPORT_BLE : ZMK_TRANSPORT_USB; + return zmk_endpoints_select_transport(new_transport); +} -int zmk_endpoints_toggle() { - enum zmk_endpoint new_endpoint = - (preferred_endpoint == ZMK_ENDPOINT_USB) ? ZMK_ENDPOINT_BLE : ZMK_ENDPOINT_USB; - return zmk_endpoints_select(new_endpoint); +struct zmk_endpoint_instance zmk_endpoints_selected(void) { + return current_instance; } -static int send_keyboard_report() { +static int send_keyboard_report(void) { struct zmk_hid_keyboard_report *keyboard_report = zmk_hid_get_keyboard_report(); - switch (current_endpoint) { + switch (current_instance.transport) { #if IS_ENABLED(CONFIG_ZMK_USB) - case ZMK_ENDPOINT_USB: { + case ZMK_TRANSPORT_USB: { int err = zmk_usb_hid_send_report((uint8_t *)keyboard_report, sizeof(*keyboard_report)); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); @@ -85,7 +133,7 @@ static int send_keyboard_report() { #endif /* IS_ENABLED(CONFIG_ZMK_USB) */ #if IS_ENABLED(CONFIG_ZMK_BLE) - case ZMK_ENDPOINT_BLE: { + case ZMK_TRANSPORT_BLE: { int err = zmk_hog_send_keyboard_report(&keyboard_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); @@ -93,19 +141,18 @@ static int send_keyboard_report() { return err; } #endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ - - default: - LOG_ERR("Unsupported endpoint %d", current_endpoint); - return -ENOTSUP; } + + LOG_ERR("Unsupported endpoint transport %d", current_instance.transport); + return -ENOTSUP; } -static int send_consumer_report() { +static int send_consumer_report(void) { struct zmk_hid_consumer_report *consumer_report = zmk_hid_get_consumer_report(); - switch (current_endpoint) { + switch (current_instance.transport) { #if IS_ENABLED(CONFIG_ZMK_USB) - case ZMK_ENDPOINT_USB: { + case ZMK_TRANSPORT_USB: { int err = zmk_usb_hid_send_report((uint8_t *)consumer_report, sizeof(*consumer_report)); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); @@ -115,7 +162,7 @@ static int send_consumer_report() { #endif /* IS_ENABLED(CONFIG_ZMK_USB) */ #if IS_ENABLED(CONFIG_ZMK_BLE) - case ZMK_ENDPOINT_BLE: { + case ZMK_TRANSPORT_BLE: { int err = zmk_hog_send_consumer_report(&consumer_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); @@ -123,11 +170,10 @@ static int send_consumer_report() { return err; } #endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ - - default: - LOG_ERR("Unsupported endpoint %d", current_endpoint); - return -ENOTSUP; } + + LOG_ERR("Unsupported endpoint transport %d", current_instance.transport); + return -ENOTSUP; } int zmk_endpoints_send_report(uint16_t usage_page) { @@ -136,12 +182,13 @@ int zmk_endpoints_send_report(uint16_t usage_page) { switch (usage_page) { case HID_USAGE_KEY: return send_keyboard_report(); + case HID_USAGE_CONSUMER: return send_consumer_report(); - default: - LOG_ERR("Unsupported usage page %d", usage_page); - return -ENOTSUP; } + + LOG_ERR("Unsupported usage page %d", usage_page); + return -ENOTSUP; } #if IS_ENABLED(CONFIG_SETTINGS) @@ -151,12 +198,12 @@ static int endpoints_handle_set(const char *name, size_t len, settings_read_cb r LOG_DBG("Setting endpoint value %s", name); if (settings_name_steq(name, "preferred", NULL)) { - if (len != sizeof(enum zmk_endpoint)) { - LOG_ERR("Invalid endpoint size (got %d expected %d)", len, sizeof(enum zmk_endpoint)); + if (len != sizeof(enum zmk_transport)) { + LOG_ERR("Invalid endpoint size (got %d expected %d)", len, sizeof(enum zmk_transport)); return -EINVAL; } - int err = read_cb(cb_arg, &preferred_endpoint, sizeof(enum zmk_endpoint)); + int err = read_cb(cb_arg, &preferred_transport, sizeof(enum zmk_transport)); if (err <= 0) { LOG_ERR("Failed to read preferred endpoint from settings (err %d)", err); return err; @@ -171,25 +218,7 @@ static int endpoints_handle_set(const char *name, size_t len, settings_read_cb r struct settings_handler endpoints_handler = {.name = "endpoints", .h_set = endpoints_handle_set}; #endif /* IS_ENABLED(CONFIG_SETTINGS) */ -static int zmk_endpoints_init(const struct device *_arg) { -#if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - - int err = settings_register(&endpoints_handler); - if (err) { - LOG_ERR("Failed to register the endpoints settings handler (err %d)", err); - return err; - } - - k_work_init_delayable(&endpoints_save_work, endpoints_save_preferred_work); - - settings_load_subtree("endpoints"); -#endif - - return 0; -} - -static bool is_usb_ready() { +static bool is_usb_ready(void) { #if IS_ENABLED(CONFIG_ZMK_USB) return zmk_usb_is_hid_ready(); #else @@ -197,7 +226,7 @@ static bool is_usb_ready() { #endif } -static bool is_ble_ready() { +static bool is_ble_ready(void) { #if IS_ENABLED(CONFIG_ZMK_BLE) return zmk_ble_active_profile_is_connected(); #else @@ -205,24 +234,62 @@ static bool is_ble_ready() { #endif } -static enum zmk_endpoint get_selected_endpoint() { +static enum zmk_transport get_selected_transport(void) { if (is_ble_ready()) { if (is_usb_ready()) { - LOG_DBG("Both endpoints are ready. Using %d", preferred_endpoint); - return preferred_endpoint; + LOG_DBG("Both endpoint transports are ready. Using %d", preferred_transport); + return preferred_transport; } LOG_DBG("Only BLE is ready."); - return ZMK_ENDPOINT_BLE; + return ZMK_TRANSPORT_BLE; } if (is_usb_ready()) { LOG_DBG("Only USB is ready."); - return ZMK_ENDPOINT_USB; + return ZMK_TRANSPORT_USB; + } + + LOG_DBG("No endpoint transports are ready."); + return DEFAULT_TRANSPORT; +} + +static struct zmk_endpoint_instance get_selected_instance(void) { + struct zmk_endpoint_instance instance = {.transport = get_selected_transport()}; + + switch (instance.transport) { +#if IS_ENABLED(CONFIG_ZMK_BLE) + case ZMK_TRANSPORT_BLE: + instance.ble.profile_index = zmk_ble_active_profile_index(); + break; +#endif // IS_ENABLED(CONFIG_ZMK_BLE) + + default: + // No extra data for this transport. + break; + } + + return instance; +} + +static int zmk_endpoints_init(const struct device *_arg) { +#if IS_ENABLED(CONFIG_SETTINGS) + settings_subsys_init(); + + int err = settings_register(&endpoints_handler); + if (err) { + LOG_ERR("Failed to register the endpoints settings handler (err %d)", err); + return err; } - LOG_DBG("No endpoints are ready."); - return DEFAULT_ENDPOINT; + k_work_init_delayable(&endpoints_save_work, endpoints_save_preferred_work); + + settings_load_subtree("endpoints"); +#endif + + current_instance = get_selected_instance(); + + return 0; } static void disconnect_current_endpoint() { @@ -233,18 +300,21 @@ static void disconnect_current_endpoint() { zmk_endpoints_send_report(HID_USAGE_CONSUMER); } -static void update_current_endpoint() { - enum zmk_endpoint new_endpoint = get_selected_endpoint(); +static void update_current_endpoint(void) { + struct zmk_endpoint_instance new_instance = get_selected_instance(); - if (new_endpoint != current_endpoint) { - /* Cancel all current keypresses so keys don't stay held on the old endpoint. */ + if (!zmk_endpoint_instance_eq(new_instance, current_instance)) { + // Cancel all current keypresses so keys don't stay held on the old endpoint. disconnect_current_endpoint(); - current_endpoint = new_endpoint; - LOG_INF("Endpoint changed: %d", current_endpoint); + current_instance = new_instance; + + char endpoint_str[ZMK_ENDPOINT_STR_LEN]; + zmk_endpoint_instance_to_str(current_instance, endpoint_str, sizeof(endpoint_str)); + LOG_INF("Endpoint changed: %s", endpoint_str); - ZMK_EVENT_RAISE(new_zmk_endpoint_selection_changed( - (struct zmk_endpoint_selection_changed){.endpoint = current_endpoint})); + ZMK_EVENT_RAISE( + new_zmk_endpoint_changed((struct zmk_endpoint_changed){.endpoint = current_instance})); } } diff --git a/app/src/events/endpoint_selection_changed.c b/app/src/events/endpoint_selection_changed.c index 34bc39dd2ab..6b152156feb 100644 --- a/app/src/events/endpoint_selection_changed.c +++ b/app/src/events/endpoint_selection_changed.c @@ -5,6 +5,6 @@ */ #include -#include +#include -ZMK_EVENT_IMPL(zmk_endpoint_selection_changed); +ZMK_EVENT_IMPL(zmk_endpoint_changed); From b17d896c5c30dbb038de36e7ed540318f9b048a1 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 27 Aug 2023 18:03:06 -0500 Subject: [PATCH 0767/1130] fix: Address review comments --- app/CMakeLists.txt | 2 +- app/boards/arm/corneish_zen/widgets/output_status.c | 2 -- app/src/endpoints.c | 2 ++ .../events/{endpoint_selection_changed.c => endpoint_changed.c} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename app/src/events/{endpoint_selection_changed.c => endpoint_changed.c} (100%) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 29944753f80..793f386dbe3 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -59,7 +59,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/behavior_queue.c) target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/endpoints.c) - target_sources(app PRIVATE src/events/endpoint_selection_changed.c) + target_sources(app PRIVATE src/events/endpoint_changed.c) target_sources(app PRIVATE src/hid_listener.c) target_sources(app PRIVATE src/keymap.c) target_sources(app PRIVATE src/events/layer_state_changed.c) diff --git a/app/boards/arm/corneish_zen/widgets/output_status.c b/app/boards/arm/corneish_zen/widgets/output_status.c index bdf90cc3d7f..8e9457ebefe 100644 --- a/app/boards/arm/corneish_zen/widgets/output_status.c +++ b/app/boards/arm/corneish_zen/widgets/output_status.c @@ -41,7 +41,6 @@ struct output_status_state { struct zmk_endpoint_instance selected_endpoint; bool active_profile_connected; bool active_profile_bonded; - uint8_t active_profile_index; }; static struct output_status_state get_state(const zmk_event_t *_eh) { @@ -50,7 +49,6 @@ static struct output_status_state get_state(const zmk_event_t *_eh) { .active_profile_connected = zmk_ble_active_profile_is_connected(), .active_profile_bonded = !zmk_ble_active_profile_is_open(), }; - ; } static void set_status_symbol(lv_obj_t *icon, struct output_status_state state) { diff --git a/app/src/endpoints.c b/app/src/endpoints.c index e208a36a312..138e790fe72 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -7,6 +7,8 @@ #include #include +#include + #include #include #include diff --git a/app/src/events/endpoint_selection_changed.c b/app/src/events/endpoint_changed.c similarity index 100% rename from app/src/events/endpoint_selection_changed.c rename to app/src/events/endpoint_changed.c From 6a3cc914fcc0ecc01f33f81413080b882c3022c5 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 27 Aug 2023 18:33:29 -0500 Subject: [PATCH 0768/1130] fix: Fix nice_view display widgets --- .../nice_view/widgets/peripheral_status.c | 8 +- app/boards/shields/nice_view/widgets/status.c | 76 +++++++++---------- app/boards/shields/nice_view/widgets/util.c | 6 +- app/boards/shields/nice_view/widgets/util.h | 5 +- 4 files changed, 46 insertions(+), 49 deletions(-) diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.c b/app/boards/shields/nice_view/widgets/peripheral_status.c index 85c2a1d8793..4c0c22637be 100644 --- a/app/boards/shields/nice_view/widgets/peripheral_status.c +++ b/app/boards/shields/nice_view/widgets/peripheral_status.c @@ -31,7 +31,7 @@ struct peripheral_status_state { bool connected; }; -static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { +static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], const struct status_state *state) { lv_obj_t *canvas = lv_obj_get_child(widget, 0); lv_draw_label_dsc_t label_dsc; @@ -47,7 +47,7 @@ static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state st // Draw output status lv_canvas_draw_text(canvas, 0, 0, CANVAS_SIZE, &label_dsc, - state.connected ? LV_SYMBOL_WIFI : LV_SYMBOL_CLOSE); + state->connected ? LV_SYMBOL_WIFI : LV_SYMBOL_CLOSE); // Rotate canvas rotate_canvas(canvas, cbuf); @@ -61,7 +61,7 @@ static void set_battery_status(struct zmk_widget_status *widget, widget->state.battery = state.level; - draw_top(widget->obj, widget->cbuf, widget->state); + draw_top(widget->obj, widget->cbuf, &widget->state); } static void battery_status_update_cb(struct battery_status_state state) { @@ -94,7 +94,7 @@ static void set_connection_status(struct zmk_widget_status *widget, struct peripheral_status_state state) { widget->state.connected = state.connected; - draw_top(widget->obj, widget->cbuf, widget->state); + draw_top(widget->obj, widget->cbuf, &widget->state); } static void output_status_update_cb(struct peripheral_status_state state) { diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 1ad9e9207d7..c629be50f59 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -17,7 +17,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include -#include +#include #include #include #include @@ -29,10 +29,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); struct output_status_state { - enum zmk_endpoint selected_endpoint; + struct zmk_endpoint_instance selected_endpoint; bool active_profile_connected; bool active_profile_bonded; - uint8_t active_profile_index; }; struct layer_status_state { @@ -44,7 +43,7 @@ struct wpm_status_state { uint8_t wpm; }; -static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { +static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], const struct status_state *state) { lv_obj_t *canvas = lv_obj_get_child(widget, 0); lv_draw_label_dsc_t label_dsc; @@ -67,13 +66,13 @@ static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state st // Draw output status char output_text[10] = {}; - switch (state.selected_endpoint) { - case ZMK_ENDPOINT_USB: + switch (state->selected_endpoint.transport) { + case ZMK_TRANSPORT_USB: strcat(output_text, LV_SYMBOL_USB); break; - case ZMK_ENDPOINT_BLE: - if (state.active_profile_bonded) { - if (state.active_profile_connected) { + case ZMK_TRANSPORT_BLE: + if (state->active_profile_bonded) { + if (state->active_profile_connected) { strcat(output_text, LV_SYMBOL_WIFI); } else { strcat(output_text, LV_SYMBOL_CLOSE); @@ -91,18 +90,18 @@ static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state st lv_canvas_draw_rect(canvas, 1, 22, 66, 40, &rect_black_dsc); char wpm_text[6] = {}; - snprintf(wpm_text, sizeof(wpm_text), "%d", state.wpm[9]); + snprintf(wpm_text, sizeof(wpm_text), "%d", state->wpm[9]); lv_canvas_draw_text(canvas, 42, 52, 24, &label_dsc_wpm, wpm_text); int max = 0; int min = 256; for (int i = 0; i < 10; i++) { - if (state.wpm[i] > max) { - max = state.wpm[i]; + if (state->wpm[i] > max) { + max = state->wpm[i]; } - if (state.wpm[i] < min) { - min = state.wpm[i]; + if (state->wpm[i] < min) { + min = state->wpm[i]; } } @@ -114,7 +113,7 @@ static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state st lv_point_t points[10]; for (int i = 0; i < 10; i++) { points[i].x = 2 + i * 7; - points[i].y = 60 - (state.wpm[i] - min) * 36 / range; + points[i].y = 60 - (state->wpm[i] - min) * 36 / range; } lv_canvas_draw_line(canvas, points, 10, &line_dsc); @@ -122,7 +121,7 @@ static void draw_top(lv_obj_t *widget, lv_color_t cbuf[], struct status_state st rotate_canvas(canvas, cbuf); } -static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { +static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], const struct status_state *state) { lv_obj_t *canvas = lv_obj_get_child(widget, 1); lv_draw_rect_dsc_t rect_black_dsc; @@ -147,7 +146,7 @@ static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], struct status_state }; for (int i = 0; i < 5; i++) { - bool selected = state.active_profile_index == i; + bool selected = state->selected_endpoint.ble.profile_index == i; lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 359, &arc_dsc); @@ -167,7 +166,7 @@ static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], struct status_state rotate_canvas(canvas, cbuf); } -static void draw_bottom(lv_obj_t *widget, lv_color_t cbuf[], struct status_state state) { +static void draw_bottom(lv_obj_t *widget, lv_color_t cbuf[], const struct status_state *state) { lv_obj_t *canvas = lv_obj_get_child(widget, 2); lv_draw_rect_dsc_t rect_black_dsc; @@ -179,14 +178,14 @@ static void draw_bottom(lv_obj_t *widget, lv_color_t cbuf[], struct status_state lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc); // Draw layer - if (state.layer_label == NULL) { + if (state->layer_label == NULL) { char text[9] = {}; - sprintf(text, "LAYER %i", state.layer_index); + sprintf(text, "LAYER %i", state->layer_index); lv_canvas_draw_text(canvas, 0, 5, 68, &label_dsc, text); } else { - lv_canvas_draw_text(canvas, 0, 5, 68, &label_dsc, state.layer_label); + lv_canvas_draw_text(canvas, 0, 5, 68, &label_dsc, state->layer_label); } // Rotate canvas @@ -201,7 +200,7 @@ static void set_battery_status(struct zmk_widget_status *widget, widget->state.battery = state.level; - draw_top(widget->obj, widget->cbuf, widget->state); + draw_top(widget->obj, widget->cbuf, &widget->state); } static void battery_status_update_cb(struct battery_status_state state) { @@ -226,33 +225,32 @@ ZMK_SUBSCRIPTION(widget_battery_status, zmk_battery_state_changed); ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ -static void set_output_status(struct zmk_widget_status *widget, struct output_status_state state) { - widget->state.selected_endpoint = state.selected_endpoint; - widget->state.active_profile_connected = state.active_profile_connected; - widget->state.active_profile_bonded = state.active_profile_bonded; - widget->state.active_profile_index = state.active_profile_index; +static void set_output_status(struct zmk_widget_status *widget, + const struct output_status_state *state) { + widget->state.selected_endpoint = state->selected_endpoint; + widget->state.active_profile_connected = state->active_profile_connected; + widget->state.active_profile_bonded = state->active_profile_bonded; - draw_top(widget->obj, widget->cbuf, widget->state); - draw_middle(widget->obj, widget->cbuf2, widget->state); + draw_top(widget->obj, widget->cbuf, &widget->state); + draw_middle(widget->obj, widget->cbuf2, &widget->state); } static void output_status_update_cb(struct output_status_state state) { struct zmk_widget_status *widget; - SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_output_status(widget, state); } + SYS_SLIST_FOR_EACH_CONTAINER(&widgets, widget, node) { set_output_status(widget, &state); } } static struct output_status_state output_status_get_state(const zmk_event_t *_eh) { - return (struct output_status_state){.selected_endpoint = zmk_endpoints_selected(), - .active_profile_connected = - zmk_ble_active_profile_is_connected(), - .active_profile_bonded = !zmk_ble_active_profile_is_open(), - .active_profile_index = zmk_ble_active_profile_index()}; - ; + return (struct output_status_state){ + .selected_endpoint = zmk_endpoints_selected(), + .active_profile_connected = zmk_ble_active_profile_is_connected(), + .active_profile_bonded = !zmk_ble_active_profile_is_open(), + }; } ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, output_status_update_cb, output_status_get_state) -ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_selection_changed); +ZMK_SUBSCRIPTION(widget_output_status, zmk_endpoint_changed); #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) ZMK_SUBSCRIPTION(widget_output_status, zmk_usb_conn_state_changed); @@ -265,7 +263,7 @@ static void set_layer_status(struct zmk_widget_status *widget, struct layer_stat widget->state.layer_index = state.index; widget->state.layer_label = state.label; - draw_bottom(widget->obj, widget->cbuf3, widget->state); + draw_bottom(widget->obj, widget->cbuf3, &widget->state); } static void layer_status_update_cb(struct layer_status_state state) { @@ -289,7 +287,7 @@ static void set_wpm_status(struct zmk_widget_status *widget, struct wpm_status_s } widget->state.wpm[9] = state.wpm; - draw_top(widget->obj, widget->cbuf, widget->state); + draw_top(widget->obj, widget->cbuf, &widget->state); } static void wpm_status_update_cb(struct wpm_status_state state) { diff --git a/app/boards/shields/nice_view/widgets/util.c b/app/boards/shields/nice_view/widgets/util.c index 9655f837f6e..b4915ab767f 100644 --- a/app/boards/shields/nice_view/widgets/util.c +++ b/app/boards/shields/nice_view/widgets/util.c @@ -24,7 +24,7 @@ void rotate_canvas(lv_obj_t *canvas, lv_color_t cbuf[]) { CANVAS_SIZE / 2, true); } -void draw_battery(lv_obj_t *canvas, struct status_state state) { +void draw_battery(lv_obj_t *canvas, const struct status_state *state) { lv_draw_rect_dsc_t rect_black_dsc; init_rect_dsc(&rect_black_dsc, LVGL_BACKGROUND); lv_draw_rect_dsc_t rect_white_dsc; @@ -32,11 +32,11 @@ void draw_battery(lv_obj_t *canvas, struct status_state state) { lv_canvas_draw_rect(canvas, 0, 2, 29, 12, &rect_white_dsc); lv_canvas_draw_rect(canvas, 1, 3, 27, 10, &rect_black_dsc); - lv_canvas_draw_rect(canvas, 2, 4, (state.battery + 2) / 4, 8, &rect_white_dsc); + lv_canvas_draw_rect(canvas, 2, 4, (state->battery + 2) / 4, 8, &rect_white_dsc); lv_canvas_draw_rect(canvas, 30, 5, 3, 6, &rect_white_dsc); lv_canvas_draw_rect(canvas, 31, 6, 1, 4, &rect_black_dsc); - if (state.charging) { + if (state->charging) { lv_draw_img_dsc_t img_dsc; lv_draw_img_dsc_init(&img_dsc); lv_canvas_draw_img(canvas, 9, -1, &bolt, &img_dsc); diff --git a/app/boards/shields/nice_view/widgets/util.h b/app/boards/shields/nice_view/widgets/util.h index e48c1082ce9..e2d2782a3f9 100644 --- a/app/boards/shields/nice_view/widgets/util.h +++ b/app/boards/shields/nice_view/widgets/util.h @@ -19,10 +19,9 @@ struct status_state { uint8_t battery; bool charging; #if !IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) - enum zmk_endpoint selected_endpoint; + struct zmk_endpoint_instance selected_endpoint; bool active_profile_connected; bool active_profile_bonded; - uint8_t active_profile_index; uint8_t layer_index; const char *layer_label; uint8_t wpm[10]; @@ -39,7 +38,7 @@ struct battery_status_state { }; void rotate_canvas(lv_obj_t *canvas, lv_color_t cbuf[]); -void draw_battery(lv_obj_t *canvas, struct status_state state); +void draw_battery(lv_obj_t *canvas, const struct status_state *state); void init_label_dsc(lv_draw_label_dsc_t *label_dsc, lv_color_t color, const lv_font_t *font, lv_text_align_t align); void init_rect_dsc(lv_draw_rect_dsc_t *rect_dsc, lv_color_t bg_color); From aa4cb143bf2de89f06039fd9ba0b259f6d38fc5d Mon Sep 17 00:00:00 2001 From: Flo Kempenich Date: Tue, 3 Oct 2023 09:03:59 +0100 Subject: [PATCH 0769/1130] fix(combos)Fix bug with overlapping combos timeouts (#1945) * Fix bug with overlapping combos timeouts * Fix trailing whitespace * Fix log format --- app/src/combo.c | 26 +++-- .../events.patterns | 1 + .../keycode_events.snapshot | 8 ++ .../native_posix_64.keymap | 98 +++++++++++++++++++ 4 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 app/tests/combo/overlapping-combos-4-different-timeouts/events.patterns create mode 100644 app/tests/combo/overlapping-combos-4-different-timeouts/keycode_events.snapshot create mode 100644 app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap diff --git a/app/src/combo.c b/app/src/combo.c index 90c89c15e73..87a931439a1 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -204,22 +204,34 @@ static inline bool candidate_is_completely_pressed(struct combo_cfg *candidate) static int cleanup(); static int filter_timed_out_candidates(int64_t timestamp) { - int num_candidates = 0; + int remaining_candidates = 0; for (int i = 0; i < CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY; i++) { struct combo_candidate *candidate = &candidates[i]; if (candidate->combo == NULL) { break; } if (candidate->timeout_at > timestamp) { - // reorder candidates so they're contiguous - candidates[num_candidates].combo = candidate->combo; - candidates[num_candidates].timeout_at = candidate->timeout_at; - num_candidates++; + bool need_to_bubble_up = remaining_candidates != i; + if (need_to_bubble_up) { + // bubble up => reorder candidates so they're contiguous + candidates[remaining_candidates].combo = candidate->combo; + candidates[remaining_candidates].timeout_at = candidate->timeout_at; + // clear the previous location + candidates[i].combo = NULL; + candidates[i].timeout_at = 0; + } + + remaining_candidates++; } else { candidate->combo = NULL; } } - return num_candidates; + + LOG_DBG( + "after filtering out timed out combo candidates: remaining_candidates=%d timestamp=%lld", + remaining_candidates, timestamp); + + return remaining_candidates; } static int clear_candidates() { @@ -449,7 +461,7 @@ static void combo_timeout_handler(struct k_work *item) { // timer was cancelled or rescheduled. return; } - if (filter_timed_out_candidates(timeout_task_timeout_at) < 2) { + if (filter_timed_out_candidates(timeout_task_timeout_at) == 0) { cleanup(); } update_timeout_task(); diff --git a/app/tests/combo/overlapping-combos-4-different-timeouts/events.patterns b/app/tests/combo/overlapping-combos-4-different-timeouts/events.patterns new file mode 100644 index 00000000000..89015deee06 --- /dev/null +++ b/app/tests/combo/overlapping-combos-4-different-timeouts/events.patterns @@ -0,0 +1 @@ +s/.*\(hid_listener_keycode_pressed\|filter_timed_out_candidates\): //p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-4-different-timeouts/keycode_events.snapshot b/app/tests/combo/overlapping-combos-4-different-timeouts/keycode_events.snapshot new file mode 100644 index 00000000000..8fe441ff46e --- /dev/null +++ b/app/tests/combo/overlapping-combos-4-different-timeouts/keycode_events.snapshot @@ -0,0 +1,8 @@ +after filtering out timed out combo candidates: remaining_candidates=2 timestamp=71 +after filtering out timed out combo candidates: remaining_candidates=1 timestamp=81 +after filtering out timed out combo candidates: remaining_candidates=0 timestamp=91 +usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +after filtering out timed out combo candidates: remaining_candidates=2 timestamp=143 +after filtering out timed out combo candidates: remaining_candidates=1 timestamp=153 +after filtering out timed out combo candidates: remaining_candidates=1 timestamp=159 +usage_page 0x07 keycode 0x1D implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap b/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap new file mode 100644 index 00000000000..8967207987b --- /dev/null +++ b/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap @@ -0,0 +1,98 @@ +#include +#include +#include + +#define kA 0 +#define kB 1 +#define kC 2 +#define kD 3 + +/ { + combos { + compatible = "zmk,combos"; + + // Intentionally out of order in the config, to make sure 'combo.c' handles it properly + combo_40 { + timeout-ms = <40>; + key-positions = ; + bindings = <&kp Z>; + }; + combo_20 { + timeout-ms = <20>; + key-positions = ; + bindings = <&kp X>; + }; + combo_30 { + timeout-ms = <30>; + key-positions = ; + bindings = <&kp Y>; + }; + + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; +}; + +#define press_A_and_wait(delay_next) \ + ZMK_MOCK_PRESS(0,0,delay_next) +#define press_B_and_wait(delay_next) \ + ZMK_MOCK_PRESS(0,1,delay_next) +#define press_C_and_wait(delay_next) \ + ZMK_MOCK_PRESS(1,0,delay_next) +#define press_D_and_wait(delay_next) \ + ZMK_MOCK_PRESS(1,1,delay_next) + +#define release_A_and_wait(delay_next) \ + ZMK_MOCK_RELEASE(0,0,delay_next) +#define release_D_and_wait(delay_next) \ + ZMK_MOCK_RELEASE(1,1,delay_next) + +&kscan { + events = < + /* Note: This starts at T+50 because the ZMK_MOCK_PRESS seems to launch the first event at T+(first wait duration). So in our case T+50 */ + + + + /*** First Phase: All 3 combos expire ***/ + + /* T+50+0= T+50: Press A and wait 50ms */ + press_A_and_wait(50) + + /* T+50+20= T+70: 'combo_20' should expire */ + /* T+50+30= T+80: 'combo_30' should expire */ + /* T+50+40= T+90: 'combo_40' should expire, and we should send the keycode 'A' */ + + /* T+50+50= T+100: We release A and wait 20ms */ + release_A_and_wait(20) + + + + /*** Second Phase: 2 combo expire, 1 combo triggers ***/ + + /* T+120+0= T+120: Press A and wait 35ms */ + press_A_and_wait(35) + + /* T+120+20= T+140: 'combo_20' should expire */ + /* T+120+30= T+150: 'combo_30' should expire */ + + /* T+120+35= T+155: We press 'D', this should trigger 'combo_40' and send the keycode 'Z'. We wait 15ms */ + press_D_and_wait(15) + + + + /*** Cleanup ***/ + /* T+120+50= T+170: We release both keys */ + release_A_and_wait(20) + release_D_and_wait(0) + >; +}; \ No newline at end of file From 2f6abff3bcb4f157d7b0d8eaa53faf2afebe7878 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Sat, 16 Jul 2022 21:51:25 -0700 Subject: [PATCH 0770/1130] refactor(behaviors): Giving global-quick-tap its own term Detaching the global-quick-tap functionality from the quick-tap term. This makes way for two improvements: 1. This functionality can be added to combos under a unified name 'global-quick-tap-ms'. 2. This allows users to set a lower term for the 'global-quick-tap' (typically ~100ms), and a higher term for the regular quick-tap (typically ~200ms) This deprecates the global-quick-tap option, however if it is set, the quick-tap-ms value will be copied to global-quick-tap-ms. --- .../behaviors/zmk,behavior-hold-tap.yaml | 5 ++++- app/src/behaviors/behavior_hold_tap.c | 17 +++++++++++------ .../1-basic/native_posix_64.keymap | 2 +- .../8-global-quick-tap/behavior_keymap.dtsi | 2 +- .../1-basic/native_posix_64.keymap | 2 +- .../8-global-quick-tap/behavior_keymap.dtsi | 2 +- .../1-basic/native_posix_64.keymap | 2 +- .../2-double-hold/native_posix_64.keymap | 2 +- .../8-global-quick-tap/behavior_keymap.dtsi | 2 +- .../1-basic/native_posix_64.keymap | 2 +- .../6-global-quick-tap/behavior_keymap.dtsi | 2 +- 11 files changed, 24 insertions(+), 16 deletions(-) diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index a2affbf2147..cca0e96951a 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -20,8 +20,11 @@ properties: default: -1 quick_tap_ms: # deprecated type: int - global-quick-tap: + global-quick-tap: # deprecated type: boolean + global-quick-tap-ms: + type: int + default: -1 flavor: type: string required: false diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 30350ef24ce..1f172e44c46 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -57,7 +57,7 @@ struct behavior_hold_tap_config { char *hold_behavior_dev; char *tap_behavior_dev; int quick_tap_ms; - bool global_quick_tap; + int global_quick_tap_ms; enum flavor flavor; bool retro_tap; bool hold_trigger_on_release; @@ -97,7 +97,9 @@ struct last_tapped { int64_t timestamp; }; -struct last_tapped last_tapped = {INT32_MIN, INT64_MIN}; +// Set time stamp to large negative number initially for test suites, but not +// int64 min since it will overflow if -1 is added +struct last_tapped last_tapped = {INT32_MIN, INT32_MIN}; static void store_last_tapped(int64_t timestamp) { if (timestamp > last_tapped.timestamp) { @@ -112,10 +114,11 @@ static void store_last_hold_tapped(struct active_hold_tap *hold_tap) { } static bool is_quick_tap(struct active_hold_tap *hold_tap) { - if (hold_tap->config->global_quick_tap || last_tapped.position == hold_tap->position) { - return (last_tapped.timestamp + hold_tap->config->quick_tap_ms) > hold_tap->timestamp; + if ((last_tapped.timestamp + hold_tap->config->global_quick_tap_ms) > hold_tap->timestamp) { + return true; } else { - return false; + return (last_tapped.position == hold_tap->position) && + (last_tapped.timestamp + hold_tap->config->quick_tap_ms) > hold_tap->timestamp; } } @@ -703,7 +706,9 @@ static int behavior_hold_tap_init(const struct device *dev) { .hold_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label), \ .tap_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label), \ .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ - .global_quick_tap = DT_INST_PROP(n, global_quick_tap), \ + .global_quick_tap_ms = DT_INST_PROP(n, global_quick_tap) \ + ? DT_INST_PROP(n, quick_tap_ms) \ + : DT_INST_PROP(n, global_quick_tap_ms), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ .hold_trigger_on_release = DT_INST_PROP(n, hold_trigger_on_release), \ diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap index 5af001f6be1..cdbe51bfe3c 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < /* tap */ ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,250) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi index ef8efd437d7..8fa363a22e6 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi @@ -11,8 +11,8 @@ flavor = "balanced"; tapping-term-ms = <300>; quick-tap-ms = <300>; + global-quick-tap-ms = <100>; bindings = <&kp>, <&kp>; - global-quick-tap; }; }; diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap index e28eb4c37e8..a7ba7304c35 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < /* tap */ ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,250) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi index 392a5f83435..8b162bd6a10 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi @@ -11,8 +11,8 @@ flavor = "hold-preferred"; tapping-term-ms = <300>; quick-tap-ms = <300>; + global-quick-tap-ms = <100>; bindings = <&kp>, <&kp>; - global-quick-tap; }; }; diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap index 5af001f6be1..cdbe51bfe3c 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < /* tap */ ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,250) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap index 69d691cee8e..068ae81a8c6 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap @@ -6,7 +6,7 @@ &kscan { events = < /* hold the first mod tap */ - ZMK_MOCK_PRESS(0,0,400) + ZMK_MOCK_PRESS(0,0,10) /* hold the second mod tap */ ZMK_MOCK_PRESS(0,1,400) /* press the normal key */ diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi index 02362ef2b09..9268da077a4 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi @@ -11,8 +11,8 @@ flavor = "tap-preferred"; tapping-term-ms = <300>; quick-tap-ms = <300>; + global-quick-tap-ms = <100>; bindings = <&kp>, <&kp>; - global-quick-tap; }; }; diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap index 5af001f6be1..cdbe51bfe3c 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap @@ -7,7 +7,7 @@ events = < /* tap */ ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,0,250) /* normal quick tap */ ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(0,0,400) diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi index 029a8128292..0ee84a0d908 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi @@ -11,8 +11,8 @@ flavor = "tap-unless-interrupted"; tapping-term-ms = <300>; quick-tap-ms = <300>; + global-quick-tap-ms = <100>; bindings = <&kp>, <&kp>; - global-quick-tap; }; }; From 77eb44ba9b14d0c47eb81001d6a90a3ec4e82b19 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Mon, 18 Jul 2022 18:27:44 -0700 Subject: [PATCH 0771/1130] feat(behaviors): Adding global-quick-tap-ms for combos This brings the 'global-quick-tap' functionality to combos by filtering out candidate combos that fell within their own quick tap term. I also replaced `return 0` with `return ZMK_EV_EVENT_BUBBLE` where appropriate. (I assume this was done in past as it is similar to errno returning, but being that this is to signify an event type I find this more clear) --- app/dts/bindings/zmk,combos.yaml | 3 + app/src/combo.c | 50 +++++++++++++-- .../combo/global-quick-tap/events.patterns | 1 + .../global-quick-tap/keycode_events.snapshot | 14 ++++ .../global-quick-tap/native_posix_64.keymap | 64 +++++++++++++++++++ 5 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 app/tests/combo/global-quick-tap/events.patterns create mode 100644 app/tests/combo/global-quick-tap/keycode_events.snapshot create mode 100644 app/tests/combo/global-quick-tap/native_posix_64.keymap diff --git a/app/dts/bindings/zmk,combos.yaml b/app/dts/bindings/zmk,combos.yaml index d094b5c42af..6f6794baa49 100644 --- a/app/dts/bindings/zmk,combos.yaml +++ b/app/dts/bindings/zmk,combos.yaml @@ -18,6 +18,9 @@ child-binding: timeout-ms: type: int default: 50 + global-quick-tap-ms: + type: int + default: -1 slow-release: type: boolean layers: diff --git a/app/src/combo.c b/app/src/combo.c index 87a931439a1..0d6de4f11b3 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -30,6 +31,7 @@ struct combo_cfg { int32_t key_position_len; struct zmk_behavior_binding behavior; int32_t timeout_ms; + int32_t global_quick_tap_ms; // if slow release is set, the combo releases when the last key is released. // otherwise, the combo releases when the first key is released. bool slow_release; @@ -72,6 +74,17 @@ int active_combo_count = 0; struct k_work_delayable timeout_task; int64_t timeout_task_timeout_at; +// this keeps track of the last non-combo, non-mod key tap +int64_t last_tapped_timestamp = INT32_MIN; +// this keeps track of the last time a combo was pressed +int64_t last_combo_timestamp = INT32_MIN; + +static void store_last_tapped(int64_t timestamp) { + if (timestamp > last_combo_timestamp) { + last_tapped_timestamp = timestamp; + } +} + // Store the combo key pointer in the combos array, one pointer for each key position // The combos are sorted shortest-first, then by virtual-key-position. static int initialize_combo(struct combo_cfg *new_combo) { @@ -122,6 +135,10 @@ static bool combo_active_on_layer(struct combo_cfg *combo, uint8_t layer) { return false; } +static bool is_quick_tap(struct combo_cfg *combo, int64_t timestamp) { + return (last_tapped_timestamp + combo->global_quick_tap_ms) > timestamp; +} + static int setup_candidates_for_first_keypress(int32_t position, int64_t timestamp) { int number_of_combo_candidates = 0; uint8_t highest_active_layer = zmk_keymap_highest_layer_active(); @@ -130,7 +147,7 @@ static int setup_candidates_for_first_keypress(int32_t position, int64_t timesta if (combo == NULL) { return number_of_combo_candidates; } - if (combo_active_on_layer(combo, highest_active_layer)) { + if (combo_active_on_layer(combo, highest_active_layer) && !is_quick_tap(combo, timestamp)) { candidates[number_of_combo_candidates].combo = combo; candidates[number_of_combo_candidates].timeout_at = timestamp + combo->timeout_ms; number_of_combo_candidates++; @@ -252,7 +269,7 @@ static int capture_pressed_key(const zmk_event_t *ev) { pressed_keys[i] = ev; return ZMK_EV_EVENT_CAPTURED; } - return 0; + return ZMK_EV_EVENT_BUBBLE; } const struct zmk_listener zmk_listener_combo; @@ -284,6 +301,8 @@ static inline int press_combo_behavior(struct combo_cfg *combo, int32_t timestam .timestamp = timestamp, }; + last_combo_timestamp = timestamp; + return behavior_keymap_binding_pressed(&combo->behavior, event); } @@ -413,7 +432,7 @@ static int position_state_down(const zmk_event_t *ev, struct zmk_position_state_ if (candidates[0].combo == NULL) { num_candidates = setup_candidates_for_first_keypress(data->position, data->timestamp); if (num_candidates == 0) { - return 0; + return ZMK_EV_EVENT_BUBBLE; } } else { filter_timed_out_candidates(data->timestamp); @@ -453,7 +472,7 @@ static int position_state_up(const zmk_event_t *ev, struct zmk_position_state_ch ZMK_EVENT_RAISE(ev); return ZMK_EV_EVENT_CAPTURED; } - return 0; + return ZMK_EV_EVENT_BUBBLE; } static void combo_timeout_handler(struct k_work *item) { @@ -470,7 +489,7 @@ static void combo_timeout_handler(struct k_work *item) { static int position_state_changed_listener(const zmk_event_t *ev) { struct zmk_position_state_changed *data = as_zmk_position_state_changed(ev); if (data == NULL) { - return 0; + return ZMK_EV_EVENT_BUBBLE; } if (data->state) { // keydown @@ -480,12 +499,31 @@ static int position_state_changed_listener(const zmk_event_t *ev) { } } -ZMK_LISTENER(combo, position_state_changed_listener); +static int keycode_state_changed_listener(const zmk_event_t *eh) { + struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); + if (ev->state && !is_mod(ev->usage_page, ev->keycode)) { + store_last_tapped(ev->timestamp); + } + return ZMK_EV_EVENT_BUBBLE; +} + +int behavior_combo_listener(const zmk_event_t *eh) { + if (as_zmk_position_state_changed(eh) != NULL) { + return position_state_changed_listener(eh); + } else if (as_zmk_keycode_state_changed(eh) != NULL) { + return keycode_state_changed_listener(eh); + } + return ZMK_EV_EVENT_BUBBLE; +} + +ZMK_LISTENER(combo, behavior_combo_listener); ZMK_SUBSCRIPTION(combo, zmk_position_state_changed); +ZMK_SUBSCRIPTION(combo, zmk_keycode_state_changed); #define COMBO_INST(n) \ static struct combo_cfg combo_config_##n = { \ .timeout_ms = DT_PROP(n, timeout_ms), \ + .global_quick_tap_ms = DT_PROP(n, global_quick_tap_ms), \ .key_positions = DT_PROP(n, key_positions), \ .key_position_len = DT_PROP_LEN(n, key_positions), \ .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, n), \ diff --git a/app/tests/combo/global-quick-tap/events.patterns b/app/tests/combo/global-quick-tap/events.patterns new file mode 100644 index 00000000000..833100f6ac4 --- /dev/null +++ b/app/tests/combo/global-quick-tap/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/global-quick-tap/keycode_events.snapshot b/app/tests/combo/global-quick-tap/keycode_events.snapshot new file mode 100644 index 00000000000..ee4dd064c61 --- /dev/null +++ b/app/tests/combo/global-quick-tap/keycode_events.snapshot @@ -0,0 +1,14 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1B implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1C implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/global-quick-tap/native_posix_64.keymap b/app/tests/combo/global-quick-tap/native_posix_64.keymap new file mode 100644 index 00000000000..92b5a8ae88e --- /dev/null +++ b/app/tests/combo/global-quick-tap/native_posix_64.keymap @@ -0,0 +1,64 @@ +#include +#include +#include + +/ { + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <50>; + key-positions = <0 1>; + bindings = <&kp X>; + global-quick-tap-ms = <100>; + }; + + combo_two { + timeout-ms = <50>; + key-positions = <0 2>; + bindings = <&kp Y>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; +}; + +&kscan { + events = < + /* Tap A */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,60) + /* Quick Tap A and B */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,200) + /* Combo One */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + /* Combo One Again (shouldn't quick tap) */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + /* Tap A */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,60) + /* Combo 2 */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; From 1e84e265b144602431d723e1080ebe32d87871e6 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Sun, 28 May 2023 15:35:51 -0400 Subject: [PATCH 0772/1130] feat(docs): Adding global-quick-tap-ms docs --- docs/docs/behaviors/hold-tap.md | 10 +++++----- docs/docs/config/combos.md | 15 ++++++++------- docs/docs/features/combos.md | 1 + 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 2a8489a15ab..66cf5958224 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -49,11 +49,11 @@ Defines how long a key must be pressed to trigger Hold behavior. If you press a tapped hold-tap again within `quick-tap-ms` milliseconds, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). -#### `global-quick-tap` +#### `global-quick-tap-ms` -If `global-quick-tap` is enabled, then `quick-tap-ms` will apply not only when the given hold-tap is tapped, but for any key tapped before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. +If `global-quick-tap-ms` is like `quick-tap-ms` however it will apply for _any_ key tapped before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. -For example, the following hold-tap configuration enables `global-quick-tap` with a 125 millisecond `quick-tap-ms` term. +For example, the following hold-tap configuration enables `global-quick-tap-ms` with a 125 millisecond term, alongside a regular `quick-tap-ms` with a 200 millisecond term. ``` gqt: global-quick-tap { @@ -62,8 +62,8 @@ gqt: global-quick-tap { #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; - quick-tap-ms = <125>; - global-quick-tap; + quick-tap-ms = <200>; + global-quick-tap-ms = <125>; bindings = <&kp>, <&kp>; }; ``` diff --git a/docs/docs/config/combos.md b/docs/docs/config/combos.md index cd351125450..ca80245019e 100644 --- a/docs/docs/config/combos.md +++ b/docs/docs/config/combos.md @@ -31,12 +31,13 @@ The `zmk,combos` node itself has no properties. It should have one child node pe Each child node can have the following properties: -| Property | Type | Description | Default | -| --------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ------- | -| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | -| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | -| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | -| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | -| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | +| Property | Type | Description | Default | +| --------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------- | ------- | +| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | +| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | +| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | +| `global-quick-tap-ms` | int | If any key is tapped within `global-quick-tap-ms` before a key in the combo, the key will not be considered for the combo | -1 | +| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | +| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | The `key-positions` array must not be longer than the `CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO` setting, which defaults to 4. If you want a combo that triggers when pressing 5 keys, then you must change the setting to 5. diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 44313cc1dac..263c1a5383c 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -30,6 +30,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. - (advanced) you can specify `slow-release` if you want the combo binding to be released when all key-positions are released. The default is to release the combo as soon as any of the keys in the combo is released. +- (advanced) you can specify `global-quick-tap-ms` much like in [hold-taps](behaviors/hold-tap.md#global-quick-tap-ms). If any key is tapped within `global-quick-tap-ms` before a key in the combo, the key will not be considered for the combo. :::info From 49c393e8f80701a8736b3e07bf7479c5b9a6592c Mon Sep 17 00:00:00 2001 From: Andrew Rae <56003701+andrewjrae@users.noreply.github.com> Date: Sun, 28 May 2023 21:35:02 -0400 Subject: [PATCH 0773/1130] refactor(docs): Applying suggestions for gqt from @caksoylar Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/hold-tap.md | 4 ++-- docs/docs/config/behaviors.md | 22 +++++++++++----------- docs/docs/config/combos.md | 16 ++++++++-------- docs/docs/features/combos.md | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 66cf5958224..e1b1059508a 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -47,11 +47,11 @@ Defines how long a key must be pressed to trigger Hold behavior. #### `quick-tap-ms` -If you press a tapped hold-tap again within `quick-tap-ms` milliseconds, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). +If you press a tapped hold-tap again within `quick-tap-ms` milliseconds of the first press, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). #### `global-quick-tap-ms` -If `global-quick-tap-ms` is like `quick-tap-ms` however it will apply for _any_ key tapped before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. +`global-quick-tap-ms` is like `quick-tap-ms` however it will apply for _any_ non-modifier key pressed before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. For example, the following hold-tap configuration enables `global-quick-tap-ms` with a 125 millisecond term, alongside a regular `quick-tap-ms` with a 200 millisecond term. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 60e8b72abca..172a0f13fee 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -58,17 +58,17 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml](htt Applies to: `compatible = "zmk,behavior-hold-tap"` -| Property | Type | Description | Default | -| ---------------------------- | ------------- | ----------------------------------------------------------------------------------------- | ------------------ | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<2>` | | -| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | -| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | -| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | -| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | -| `global-quick-tap` | bool | If enabled, `quick-tap-ms` also applies when tapping another key and then this one. | false | -| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | -| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | +| Property | Type | Description | Default | +| ---------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------ | ------------------ | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<2>` | | +| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | +| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | +| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | +| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | +| `global-quick-tap-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `global-quick-tap-ms` of the hold-tap. | -1 (disabled) | +| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | +| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | The `flavor` property may be one of: diff --git a/docs/docs/config/combos.md b/docs/docs/config/combos.md index ca80245019e..33622a7a869 100644 --- a/docs/docs/config/combos.md +++ b/docs/docs/config/combos.md @@ -31,13 +31,13 @@ The `zmk,combos` node itself has no properties. It should have one child node pe Each child node can have the following properties: -| Property | Type | Description | Default | -| --------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------- | ------- | -| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | -| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | -| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | -| `global-quick-tap-ms` | int | If any key is tapped within `global-quick-tap-ms` before a key in the combo, the key will not be considered for the combo | -1 | -| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | -| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | +| Property | Type | Description | Default | +| --------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | +| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | +| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | +| `global-quick-tap-ms` | int | If any non-modifier key is pressed within `global-quick-tap-ms` before a key in the combo, the key will not be considered for the combo | -1 (disabled) | +| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | +| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | The `key-positions` array must not be longer than the `CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO` setting, which defaults to 4. If you want a combo that triggers when pressing 5 keys, then you must change the setting to 5. diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 263c1a5383c..5ad061686a2 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -30,7 +30,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. - (advanced) you can specify `slow-release` if you want the combo binding to be released when all key-positions are released. The default is to release the combo as soon as any of the keys in the combo is released. -- (advanced) you can specify `global-quick-tap-ms` much like in [hold-taps](behaviors/hold-tap.md#global-quick-tap-ms). If any key is tapped within `global-quick-tap-ms` before a key in the combo, the key will not be considered for the combo. +- (advanced) you can specify a `global-quick-tap-ms` value much like for [hold-taps](behaviors/hold-tap.md#global-quick-tap-ms). If any non-modifier key is pressed within `global-quick-tap-ms` before a key in the combo, the combo will not trigger. :::info From b85ffa4b6cfb5e2a8c735534ac1b46dc52f8ad86 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Sun, 24 Sep 2023 09:38:45 -0400 Subject: [PATCH 0774/1130] refactor(behaviors): global-quick-tap -> require-prior-idle Renaming global-quick-tap-ms to require-prior-idle. --- .../behaviors/zmk,behavior-hold-tap.yaml | 2 +- app/dts/bindings/zmk,combos.yaml | 2 +- app/src/behaviors/behavior_hold_tap.c | 10 ++++----- app/src/combo.c | 6 ++--- .../events.patterns | 0 .../keycode_events.snapshot | 0 .../native_posix_64.keymap | 2 +- .../1-basic/events.patterns | 0 .../1-basic/keycode_events.snapshot | 0 .../1-basic/native_posix_64.keymap | 0 .../2-double-hold/events.patterns | 0 .../2-double-hold/keycode_events.snapshot | 0 .../2-double-hold/native_posix_64.keymap | 0 .../behavior_keymap.dtsi | 2 +- .../1-basic/events.patterns | 0 .../1-basic/keycode_events.snapshot | 0 .../1-basic/native_posix_64.keymap | 0 .../2-double-hold/events.patterns | 0 .../2-double-hold/keycode_events.snapshot | 0 .../2-double-hold/native_posix_64.keymap | 0 .../behavior_keymap.dtsi | 2 +- .../1-basic/events.patterns | 0 .../1-basic/keycode_events.snapshot | 0 .../1-basic/native_posix_64.keymap | 0 .../2-double-hold/events.patterns | 0 .../2-double-hold/keycode_events.snapshot | 0 .../2-double-hold/native_posix_64.keymap | 0 .../behavior_keymap.dtsi | 2 +- .../1-basic/events.patterns | 0 .../1-basic/keycode_events.snapshot | 0 .../1-basic/native_posix_64.keymap | 0 .../2-double-hold/events.patterns | 0 .../2-double-hold/keycode_events.snapshot | 0 .../2-double-hold/native_posix_64.keymap | 0 .../behavior_keymap.dtsi | 2 +- docs/docs/behaviors/hold-tap.md | 12 +++++----- docs/docs/config/behaviors.md | 22 +++++++++---------- docs/docs/config/combos.md | 16 +++++++------- docs/docs/features/combos.md | 2 +- 39 files changed, 41 insertions(+), 41 deletions(-) rename app/tests/combo/{global-quick-tap => require-prior-idle}/events.patterns (100%) rename app/tests/combo/{global-quick-tap => require-prior-idle}/keycode_events.snapshot (100%) rename app/tests/combo/{global-quick-tap => require-prior-idle}/native_posix_64.keymap (97%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/1-basic/events.patterns (100%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/1-basic/keycode_events.snapshot (100%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/1-basic/native_posix_64.keymap (100%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/events.patterns (100%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/keycode_events.snapshot (100%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/native_posix_64.keymap (100%) rename app/tests/hold-tap/balanced/{8-global-quick-tap => 8-require-prior-idle}/behavior_keymap.dtsi (94%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/1-basic/events.patterns (100%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/1-basic/keycode_events.snapshot (100%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/1-basic/native_posix_64.keymap (100%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/events.patterns (100%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/keycode_events.snapshot (100%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/native_posix_64.keymap (100%) rename app/tests/hold-tap/hold-preferred/{8-global-quick-tap => 8-require-prior-idle}/behavior_keymap.dtsi (94%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/1-basic/events.patterns (100%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/1-basic/keycode_events.snapshot (100%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/1-basic/native_posix_64.keymap (100%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/events.patterns (100%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/keycode_events.snapshot (100%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/2-double-hold/native_posix_64.keymap (100%) rename app/tests/hold-tap/tap-preferred/{8-global-quick-tap => 8-require-prior-idle}/behavior_keymap.dtsi (93%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/1-basic/events.patterns (100%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/1-basic/keycode_events.snapshot (100%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/1-basic/native_posix_64.keymap (100%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/2-double-hold/events.patterns (100%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/2-double-hold/keycode_events.snapshot (100%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/2-double-hold/native_posix_64.keymap (100%) rename app/tests/hold-tap/tap-unless-interrupted/{6-global-quick-tap => 6-require-prior-idle}/behavior_keymap.dtsi (94%) diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index cca0e96951a..7a140f9134d 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -22,7 +22,7 @@ properties: type: int global-quick-tap: # deprecated type: boolean - global-quick-tap-ms: + require-prior-idle-ms: type: int default: -1 flavor: diff --git a/app/dts/bindings/zmk,combos.yaml b/app/dts/bindings/zmk,combos.yaml index 6f6794baa49..f146ab7a230 100644 --- a/app/dts/bindings/zmk,combos.yaml +++ b/app/dts/bindings/zmk,combos.yaml @@ -18,7 +18,7 @@ child-binding: timeout-ms: type: int default: 50 - global-quick-tap-ms: + require-prior-idle-ms: type: int default: -1 slow-release: diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 1f172e44c46..d4aa0dce036 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -57,7 +57,7 @@ struct behavior_hold_tap_config { char *hold_behavior_dev; char *tap_behavior_dev; int quick_tap_ms; - int global_quick_tap_ms; + int require_prior_idle_ms; enum flavor flavor; bool retro_tap; bool hold_trigger_on_release; @@ -114,7 +114,7 @@ static void store_last_hold_tapped(struct active_hold_tap *hold_tap) { } static bool is_quick_tap(struct active_hold_tap *hold_tap) { - if ((last_tapped.timestamp + hold_tap->config->global_quick_tap_ms) > hold_tap->timestamp) { + if ((last_tapped.timestamp + hold_tap->config->require_prior_idle_ms) > hold_tap->timestamp) { return true; } else { return (last_tapped.position == hold_tap->position) && @@ -706,9 +706,9 @@ static int behavior_hold_tap_init(const struct device *dev) { .hold_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label), \ .tap_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label), \ .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ - .global_quick_tap_ms = DT_INST_PROP(n, global_quick_tap) \ - ? DT_INST_PROP(n, quick_tap_ms) \ - : DT_INST_PROP(n, global_quick_tap_ms), \ + .require_prior_idle_ms = DT_INST_PROP(n, global_quick_tap) \ + ? DT_INST_PROP(n, quick_tap_ms) \ + : DT_INST_PROP(n, require_prior_idle_ms), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ .hold_trigger_on_release = DT_INST_PROP(n, hold_trigger_on_release), \ diff --git a/app/src/combo.c b/app/src/combo.c index 0d6de4f11b3..0d5c2a6e237 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -31,7 +31,7 @@ struct combo_cfg { int32_t key_position_len; struct zmk_behavior_binding behavior; int32_t timeout_ms; - int32_t global_quick_tap_ms; + int32_t require_prior_idle_ms; // if slow release is set, the combo releases when the last key is released. // otherwise, the combo releases when the first key is released. bool slow_release; @@ -136,7 +136,7 @@ static bool combo_active_on_layer(struct combo_cfg *combo, uint8_t layer) { } static bool is_quick_tap(struct combo_cfg *combo, int64_t timestamp) { - return (last_tapped_timestamp + combo->global_quick_tap_ms) > timestamp; + return (last_tapped_timestamp + combo->require_prior_idle_ms) > timestamp; } static int setup_candidates_for_first_keypress(int32_t position, int64_t timestamp) { @@ -523,7 +523,7 @@ ZMK_SUBSCRIPTION(combo, zmk_keycode_state_changed); #define COMBO_INST(n) \ static struct combo_cfg combo_config_##n = { \ .timeout_ms = DT_PROP(n, timeout_ms), \ - .global_quick_tap_ms = DT_PROP(n, global_quick_tap_ms), \ + .require_prior_idle_ms = DT_PROP(n, require_prior_idle_ms), \ .key_positions = DT_PROP(n, key_positions), \ .key_position_len = DT_PROP_LEN(n, key_positions), \ .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, n), \ diff --git a/app/tests/combo/global-quick-tap/events.patterns b/app/tests/combo/require-prior-idle/events.patterns similarity index 100% rename from app/tests/combo/global-quick-tap/events.patterns rename to app/tests/combo/require-prior-idle/events.patterns diff --git a/app/tests/combo/global-quick-tap/keycode_events.snapshot b/app/tests/combo/require-prior-idle/keycode_events.snapshot similarity index 100% rename from app/tests/combo/global-quick-tap/keycode_events.snapshot rename to app/tests/combo/require-prior-idle/keycode_events.snapshot diff --git a/app/tests/combo/global-quick-tap/native_posix_64.keymap b/app/tests/combo/require-prior-idle/native_posix_64.keymap similarity index 97% rename from app/tests/combo/global-quick-tap/native_posix_64.keymap rename to app/tests/combo/require-prior-idle/native_posix_64.keymap index 92b5a8ae88e..206b230a7fa 100644 --- a/app/tests/combo/global-quick-tap/native_posix_64.keymap +++ b/app/tests/combo/require-prior-idle/native_posix_64.keymap @@ -9,7 +9,7 @@ timeout-ms = <50>; key-positions = <0 1>; bindings = <&kp X>; - global-quick-tap-ms = <100>; + require-prior-idle-ms = <100>; }; combo_two { diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/events.patterns b/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/events.patterns similarity index 100% rename from app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/events.patterns rename to app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/events.patterns diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/keycode_events.snapshot b/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/keycode_events.snapshot rename to app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/keycode_events.snapshot diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/8-global-quick-tap/1-basic/native_posix_64.keymap rename to app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/events.patterns b/app/tests/hold-tap/balanced/8-require-prior-idle/2-double-hold/events.patterns similarity index 100% rename from app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/events.patterns rename to app/tests/hold-tap/balanced/8-require-prior-idle/2-double-hold/events.patterns diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/keycode_events.snapshot b/app/tests/hold-tap/balanced/8-require-prior-idle/2-double-hold/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/keycode_events.snapshot rename to app/tests/hold-tap/balanced/8-require-prior-idle/2-double-hold/keycode_events.snapshot diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-require-prior-idle/2-double-hold/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/balanced/8-global-quick-tap/2-double-hold/native_posix_64.keymap rename to app/tests/hold-tap/balanced/8-require-prior-idle/2-double-hold/native_posix_64.keymap diff --git a/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi similarity index 94% rename from app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi rename to app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi index 8fa363a22e6..670bdcc2650 100644 --- a/app/tests/hold-tap/balanced/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi @@ -11,7 +11,7 @@ flavor = "balanced"; tapping-term-ms = <300>; quick-tap-ms = <300>; - global-quick-tap-ms = <100>; + require-prior-idle-ms = <100>; bindings = <&kp>, <&kp>; }; }; diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/events.patterns b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/events.patterns similarity index 100% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/events.patterns rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/events.patterns diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/keycode_events.snapshot rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/keycode_events.snapshot diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/events.patterns b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/2-double-hold/events.patterns similarity index 100% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/events.patterns rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/2-double-hold/events.patterns diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/2-double-hold/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/keycode_events.snapshot rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/2-double-hold/keycode_events.snapshot diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/2-double-hold/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/2-double-hold/native_posix_64.keymap diff --git a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi similarity index 94% rename from app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi rename to app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi index 8b162bd6a10..a99eb3f56f8 100644 --- a/app/tests/hold-tap/hold-preferred/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi @@ -11,7 +11,7 @@ flavor = "hold-preferred"; tapping-term-ms = <300>; quick-tap-ms = <300>; - global-quick-tap-ms = <100>; + require-prior-idle-ms = <100>; bindings = <&kp>, <&kp>; }; }; diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/events.patterns b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/events.patterns similarity index 100% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/events.patterns rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/events.patterns diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/keycode_events.snapshot rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/keycode_events.snapshot diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/1-basic/native_posix_64.keymap rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/events.patterns b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/2-double-hold/events.patterns similarity index 100% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/events.patterns rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/2-double-hold/events.patterns diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/2-double-hold/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/keycode_events.snapshot rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/2-double-hold/keycode_events.snapshot diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/2-double-hold/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/2-double-hold/native_posix_64.keymap rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/2-double-hold/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi similarity index 93% rename from app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi rename to app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi index 9268da077a4..c66dc934092 100644 --- a/app/tests/hold-tap/tap-preferred/8-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi @@ -11,7 +11,7 @@ flavor = "tap-preferred"; tapping-term-ms = <300>; quick-tap-ms = <300>; - global-quick-tap-ms = <100>; + require-prior-idle-ms = <100>; bindings = <&kp>, <&kp>; }; }; diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/events.patterns similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/events.patterns rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/events.patterns diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/keycode_events.snapshot rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/keycode_events.snapshot diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/1-basic/native_posix_64.keymap rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/events.patterns b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/2-double-hold/events.patterns similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/events.patterns rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/2-double-hold/events.patterns diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/keycode_events.snapshot b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/2-double-hold/keycode_events.snapshot similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/keycode_events.snapshot rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/2-double-hold/keycode_events.snapshot diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/2-double-hold/native_posix_64.keymap similarity index 100% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/2-double-hold/native_posix_64.keymap rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/2-double-hold/native_posix_64.keymap diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi similarity index 94% rename from app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi rename to app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi index 0ee84a0d908..7aa3940833f 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-global-quick-tap/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi @@ -11,7 +11,7 @@ flavor = "tap-unless-interrupted"; tapping-term-ms = <300>; quick-tap-ms = <300>; - global-quick-tap-ms = <100>; + require-prior-idle-ms = <100>; bindings = <&kp>, <&kp>; }; }; diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index e1b1059508a..e8192f684b1 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -49,11 +49,11 @@ Defines how long a key must be pressed to trigger Hold behavior. If you press a tapped hold-tap again within `quick-tap-ms` milliseconds of the first press, it will always trigger the tap behavior. This is useful for things like a backspace, where a quick tap+hold holds backspace pressed. Set this to a negative value to disable. The default is -1 (disabled). -#### `global-quick-tap-ms` +#### `require-prior-idle-ms` -`global-quick-tap-ms` is like `quick-tap-ms` however it will apply for _any_ non-modifier key pressed before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. +`require-prior-idle-ms` is like `quick-tap-ms` however it will apply for _any_ non-modifier key pressed before it. This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly. -For example, the following hold-tap configuration enables `global-quick-tap-ms` with a 125 millisecond term, alongside a regular `quick-tap-ms` with a 200 millisecond term. +For example, the following hold-tap configuration enables `require-prior-idle-ms` with a 125 millisecond term, alongside `quick-tap-ms` with a 200 millisecond term. ``` gqt: global-quick-tap { @@ -63,14 +63,14 @@ gqt: global-quick-tap { flavor = "tap-preferred"; tapping-term-ms = <200>; quick-tap-ms = <200>; - global-quick-tap-ms = <125>; + require-prior-idle-ms = <125>; bindings = <&kp>, <&kp>; }; ``` -If you press `&kp A` and then `&gqt LEFT_SHIFT B` **within** 125 ms, then `ab` will be output. Importantly, `b` will be output immediately since it was within the `quick-tap-ms`. This quick-tap behavior will work for any key press, whether it is within a behavior like hold-tap, or a simple `&kp`. This means the `&gqt LEFT_SHIFT B` binding will only have its underlying hold-tap behavior if it is pressed 125 ms **after** a key press. +If you press `&kp A` and then `&gqt LEFT_SHIFT B` **within** 125 ms, then `ab` will be output. Importantly, `b` will be output immediately since it was within the `require-prior-idle-ms`. This "quick-tap" behavior will work for any key press, whether it is within a behavior like hold-tap, or a simple `&kp`. This means the `&gqt LEFT_SHIFT B` binding will only have its underlying hold-tap behavior if it is pressed 125 ms **after** a key press. -Note that the greater the value of `quick-tap-ms` is, the harder it will be to invoke the hold behavior, making this feature less applicable for use-cases like capitalizing letters while typing normally. However, if the hold behavior isn't used during fast typing, then it can be an effective way to mitigate misfires. +Note that the greater the value of `require-prior-idle-ms` is, the harder it will be to invoke the hold behavior, making this feature less applicable for use-cases like capitalizing letters while typing normally. However, if the hold behavior isn't used during fast typing, then it can be an effective way to mitigate misfires. #### `retro-tap` diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 172a0f13fee..f3f1f563ec8 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -58,17 +58,17 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml](htt Applies to: `compatible = "zmk,behavior-hold-tap"` -| Property | Type | Description | Default | -| ---------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------ | ------------------ | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<2>` | | -| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | -| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | -| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | -| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | -| `global-quick-tap-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `global-quick-tap-ms` of the hold-tap. | -1 (disabled) | -| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | -| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | +| Property | Type | Description | Default | +| ---------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ------------------ | +| `label` | string | Unique label for the node | | +| `#binding-cells` | int | Must be `<2>` | | +| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | +| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | +| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | +| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | +| `require-prior-idle-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `require-prior-idle-ms` of the hold-tap. | -1 (disabled) | +| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | +| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | The `flavor` property may be one of: diff --git a/docs/docs/config/combos.md b/docs/docs/config/combos.md index 33622a7a869..4f5ebba3d34 100644 --- a/docs/docs/config/combos.md +++ b/docs/docs/config/combos.md @@ -31,13 +31,13 @@ The `zmk,combos` node itself has no properties. It should have one child node pe Each child node can have the following properties: -| Property | Type | Description | Default | -| --------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | -| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | -| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | -| `global-quick-tap-ms` | int | If any non-modifier key is pressed within `global-quick-tap-ms` before a key in the combo, the key will not be considered for the combo | -1 (disabled) | -| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | -| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | +| Property | Type | Description | Default | +| ----------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | +| `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | +| `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | +| `require-prior-idle-ms` | int | If any non-modifier key is pressed within `require-prior-idle-ms` before a key in the combo, the key will not be considered for the combo | -1 (disabled) | +| `slow-release` | bool | Releases the combo when all keys are released instead of when any key is released | false | +| `layers` | array | A list of layers on which the combo may be triggered. `-1` allows all layers. | `<-1>` | The `key-positions` array must not be longer than the `CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO` setting, which defaults to 4. If you want a combo that triggers when pressing 5 keys, then you must change the setting to 5. diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 5ad061686a2..bc1353b416e 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -30,7 +30,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. - (advanced) you can specify `slow-release` if you want the combo binding to be released when all key-positions are released. The default is to release the combo as soon as any of the keys in the combo is released. -- (advanced) you can specify a `global-quick-tap-ms` value much like for [hold-taps](behaviors/hold-tap.md#global-quick-tap-ms). If any non-modifier key is pressed within `global-quick-tap-ms` before a key in the combo, the combo will not trigger. +- (advanced) you can specify a `require-prior-idle-ms` value much like for [hold-taps](behaviors/hold-tap.md#require-prior-idle-ms). If any non-modifier key is pressed within `require-prior-idle-ms` before a key in the combo, the combo will not trigger. :::info From f0f6d61e794633a06b04246ee31e276c9fbf3040 Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Sun, 24 Sep 2023 10:19:58 -0400 Subject: [PATCH 0775/1130] fix(tests): Updating old tests includes --- app/tests/combo/require-prior-idle/native_posix_64.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/tests/combo/require-prior-idle/native_posix_64.keymap b/app/tests/combo/require-prior-idle/native_posix_64.keymap index 206b230a7fa..fcd94056c4d 100644 --- a/app/tests/combo/require-prior-idle/native_posix_64.keymap +++ b/app/tests/combo/require-prior-idle/native_posix_64.keymap @@ -1,6 +1,6 @@ #include #include -#include +#include / { combos { From 2234be0871cdab4c0d8bfc6abee3013716e5601a Mon Sep 17 00:00:00 2001 From: Andrew Rae <56003701+andrewjrae@users.noreply.github.com> Date: Mon, 25 Sep 2023 09:15:57 -0400 Subject: [PATCH 0776/1130] refactor(docs): Apply suggestions from @caksoylar Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/hold-tap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index e8192f684b1..d9d86cea4a5 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -56,7 +56,7 @@ If you press a tapped hold-tap again within `quick-tap-ms` milliseconds of the f For example, the following hold-tap configuration enables `require-prior-idle-ms` with a 125 millisecond term, alongside `quick-tap-ms` with a 200 millisecond term. ``` -gqt: global-quick-tap { +rpi: require_prior_idle { compatible = "zmk,behavior-hold-tap"; label = "GLOBAL_QUICK_TAP"; #binding-cells = <2>; @@ -68,7 +68,7 @@ gqt: global-quick-tap { }; ``` -If you press `&kp A` and then `&gqt LEFT_SHIFT B` **within** 125 ms, then `ab` will be output. Importantly, `b` will be output immediately since it was within the `require-prior-idle-ms`. This "quick-tap" behavior will work for any key press, whether it is within a behavior like hold-tap, or a simple `&kp`. This means the `&gqt LEFT_SHIFT B` binding will only have its underlying hold-tap behavior if it is pressed 125 ms **after** a key press. +If you press `&kp A` and then `&rpi LEFT_SHIFT B` **within** 125 ms, then `ab` will be output. Importantly, `b` will be output immediately since it was within the `require-prior-idle-ms`, without waiting for a timeout or an interrupting key. In other words, the `&rpi LEFT_SHIFT B` binding will only have its underlying hold-tap behavior if it is pressed 125 ms **after** the previous key press; otherwise it will act like `&kp B`. Note that the greater the value of `require-prior-idle-ms` is, the harder it will be to invoke the hold behavior, making this feature less applicable for use-cases like capitalizing letters while typing normally. However, if the hold behavior isn't used during fast typing, then it can be an effective way to mitigate misfires. From 11996ff7f05bdbe0d5ee59dc3b695d5e9d8c5c8d Mon Sep 17 00:00:00 2001 From: Andrew Rae Date: Tue, 26 Sep 2023 22:00:23 -0400 Subject: [PATCH 0777/1130] refactor(behaviors): Final global-quick-tap deprecation. --- app/boards/shields/cradio/cradio.keymap | 2 +- app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml | 9 ++++++--- .../8-require-prior-idle/1-basic/native_posix_64.keymap | 2 +- .../8-require-prior-idle/1-basic/native_posix_64.keymap | 2 +- .../8-require-prior-idle/1-basic/native_posix_64.keymap | 2 +- .../6-require-prior-idle/1-basic/native_posix_64.keymap | 2 +- docs/docs/behaviors/hold-tap.md | 2 +- 7 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/boards/shields/cradio/cradio.keymap b/app/boards/shields/cradio/cradio.keymap index 3f6670da725..47bf0422a5a 100644 --- a/app/boards/shields/cradio/cradio.keymap +++ b/app/boards/shields/cradio/cradio.keymap @@ -18,7 +18,7 @@ flavor = "tap-preferred"; tapping-term-ms = <220>; quick-tap-ms = <150>; - global-quick-tap; + require-prior-idle-ms = <100>; bindings = <&kp>, <&kp>; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index 7a140f9134d..575754116b1 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -13,15 +13,18 @@ properties: required: true tapping-term-ms: type: int - tapping_term_ms: # deprecated + tapping_term_ms: type: int + deprecated: true quick-tap-ms: type: int default: -1 - quick_tap_ms: # deprecated + quick_tap_ms: type: int - global-quick-tap: # deprecated + deprecated: true + global-quick-tap: type: boolean + deprecated: true require-prior-idle-ms: type: int default: -1 diff --git a/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/native_posix_64.keymap b/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/native_posix_64.keymap index cdbe51bfe3c..aa629498073 100644 --- a/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/8-require-prior-idle/1-basic/native_posix_64.keymap @@ -16,7 +16,7 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ + /* require-prior-idle */ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(1,0,10) diff --git a/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap index a7ba7304c35..6db79abc381 100644 --- a/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap @@ -16,7 +16,7 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ + /* require-prior-idle */ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(1,0,10) diff --git a/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap index cdbe51bfe3c..aa629498073 100644 --- a/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/1-basic/native_posix_64.keymap @@ -16,7 +16,7 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ + /* require-prior-idle */ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(1,0,10) diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/native_posix_64.keymap b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/native_posix_64.keymap index cdbe51bfe3c..aa629498073 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/1-basic/native_posix_64.keymap @@ -16,7 +16,7 @@ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_RELEASE(1,0,10) ZMK_MOCK_RELEASE(0,0,400) - /* global quick tap */ + /* require-prior-idle */ ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,0,400) ZMK_MOCK_RELEASE(1,0,10) diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index d9d86cea4a5..ec66b34f2af 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -58,7 +58,7 @@ For example, the following hold-tap configuration enables `require-prior-idle-ms ``` rpi: require_prior_idle { compatible = "zmk,behavior-hold-tap"; - label = "GLOBAL_QUICK_TAP"; + label = "REQUIRE_PRIOR_IDLE"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; From df92b0e37d5c53e23ffe60c7a8005eb311cff785 Mon Sep 17 00:00:00 2001 From: Seth Milliken Date: Wed, 4 Oct 2023 08:48:46 -0700 Subject: [PATCH 0778/1130] feat(shields): sofle: add underglow support with `&pinctrl` update * Sofle Shield: Add underglow support --------- Co-authored-by: Kim Streich Co-authored-by: Seth Milliken --- app/boards/shields/sofle/Kconfig.defconfig | 6 ++ .../shields/sofle/boards/nice_nano.overlay | 51 +++++++++++++ .../shields/sofle/boards/nice_nano_v2.overlay | 51 +++++++++++++ .../shields/sofle/boards/nrfmicro_11.overlay | 51 +++++++++++++ .../shields/sofle/boards/nrfmicro_13.overlay | 51 +++++++++++++ app/boards/shields/sofle/sofle.conf | 8 ++ app/boards/shields/sofle/sofle.keymap | 76 ++++++++++++++----- app/boards/shields/sofle/sofle.zmk.yml | 1 + 8 files changed, 276 insertions(+), 19 deletions(-) create mode 100644 app/boards/shields/sofle/boards/nice_nano.overlay create mode 100644 app/boards/shields/sofle/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/sofle/boards/nrfmicro_11.overlay create mode 100644 app/boards/shields/sofle/boards/nrfmicro_13.overlay diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index cc598d6720f..4e7bf88488e 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -46,4 +46,10 @@ endchoice endif # LVGL +if ZMK_RGB_UNDERGLOW + +config WS2812_STRIP + default y +endif + endif diff --git a/app/boards/shields/sofle/boards/nice_nano.overlay b/app/boards/shields/sofle/boards/nice_nano.overlay new file mode 100644 index 00000000000..336be4b0d96 --- /dev/null +++ b/app/boards/shields/sofle/boards/nice_nano.overlay @@ -0,0 +1,51 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <36>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = < + LED_COLOR_ID_GREEN + LED_COLOR_ID_RED + LED_COLOR_ID_BLUE + >; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/sofle/boards/nice_nano_v2.overlay b/app/boards/shields/sofle/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..336be4b0d96 --- /dev/null +++ b/app/boards/shields/sofle/boards/nice_nano_v2.overlay @@ -0,0 +1,51 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <36>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = < + LED_COLOR_ID_GREEN + LED_COLOR_ID_RED + LED_COLOR_ID_BLUE + >; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/sofle/boards/nrfmicro_11.overlay b/app/boards/shields/sofle/boards/nrfmicro_11.overlay new file mode 100644 index 00000000000..336be4b0d96 --- /dev/null +++ b/app/boards/shields/sofle/boards/nrfmicro_11.overlay @@ -0,0 +1,51 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <36>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = < + LED_COLOR_ID_GREEN + LED_COLOR_ID_RED + LED_COLOR_ID_BLUE + >; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/sofle/boards/nrfmicro_13.overlay b/app/boards/shields/sofle/boards/nrfmicro_13.overlay new file mode 100644 index 00000000000..336be4b0d96 --- /dev/null +++ b/app/boards/shields/sofle/boards/nrfmicro_13.overlay @@ -0,0 +1,51 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <36>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = < + LED_COLOR_ID_GREEN + LED_COLOR_ID_RED + LED_COLOR_ID_BLUE + >; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/sofle/sofle.conf b/app/boards/shields/sofle/sofle.conf index fe3f0f4f8a7..1f74aa339fc 100644 --- a/app/boards/shields/sofle/sofle.conf +++ b/app/boards/shields/sofle/sofle.conf @@ -7,3 +7,11 @@ # Uncomment these two lines to add support for encoders # CONFIG_EC11=y # CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment this line below to add rgb underglow / backlight support +# CONFIG_ZMK_RGB_UNDERGLOW=y + +# Uncomment the line below to disable external power toggling by the underglow. +# By default toggling the underglow on and off also toggles external power +# on and off. This also causes the display to turn off. +# CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=n diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index 395ecf1ddd7..fbb0af7fb00 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -7,34 +7,53 @@ #include #include #include +#include +#include + +#define BASE 0 +#define LOWER 1 +#define RAISE 2 +#define ADJUST 3 / { + + // Activate ADJUST layer by pressing raise and lower + conditional_layers { + compatible = "zmk,conditional-layers"; + adjust_layer { + if-layers = ; + then-layer = ; + }; + }; + keymap { compatible = "zmk,keymap"; default_layer { + label = "default"; // ------------------------------------------------------------------------------------------------------------ -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | ESC | Q | W | E | R | T | | Y | U | I | O | P | BKSPC | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | MUTE | | | N | M | , | . | / | SHIFT | // | GUI | ALT | CTRL | LOWER| ENTER | | SPACE | RAISE| CTRL | ALT | GUI | bindings = < -&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &none -&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC -&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT -&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp C_MUTE &none &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LGUI &kp LALT &kp LCTRL &mo 1 &kp RET &kp SPACE &mo 2 &kp RCTRL &kp RALT &kp RGUI +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &none +&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC +&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp C_MUTE &none &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &kp LGUI &kp LALT &kp LCTRL &mo LOWER &kp RET &kp SPACE &mo RAISE &kp RCTRL &kp RALT &kp RGUI >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; }; lower_layer { + label = "lower"; // TODO: Some binds are waiting for shifted keycode support. // ------------------------------------------------------------------------------------------------------------ // | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | // | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | // | | = | - | + | { | } | | | | [ | ] | ; | : | \ | | // | | | | | | | | | | | | @@ -42,29 +61,48 @@ &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp F12 &trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp PIPE -&trans &kp EQUAL &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp COLON &kp BSLH &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp EQUAL &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp COLON &kp BSLH &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; }; raise_layer { + label = "raise"; // ------------------------------------------------------------------------------------------------------------ -// |BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | -// | | INS | PSCR | GUI | | | | PGUP | | ^ | | | | -// | | ALT | CTRL | SHIFT | | CAPS | | PGDN | <- | v | -> | DEL | BKSPC | -// | | UNDO | CUT | COPY | PASTE | | | | | | | | | | | -// | | | | | | | | | | | | +// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | | INS | PSCR | GUI | | | | PGUP | | ^ | | | | +// | | ALT | CTRL | SHIFT | | CAPS | | PGDN | <- | v | -> | DEL | BKSPC | +// | | UNDO | CUT | COPY | PASTE | | | | | | | | | | | +// | | | | | | | | | | | | bindings = < -&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans -&trans &kp INS &kp PSCRN &kp K_CMENU &trans &trans &kp PG_UP &trans &kp UP &trans &kp N0 &trans -&trans &kp LALT &kp LCTRL &kp LSHFT &trans &kp CLCK &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC -&trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &trans &trans &trans &trans &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&trans &kp INS &kp PSCRN &kp K_CMENU &trans &trans &kp PG_UP &trans &kp UP &trans &kp N0 &trans +&trans &kp LALT &kp LCTRL &kp LSHFT &trans &kp CLCK &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC +&trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; }; + + adjust_layer { +// ---------------------------------------------------------------------------------------------------------------------------- +// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | EXTPWR | RGB_HUD | RGB_HUI | RGB_SAD | RGB_SAI | RGB_EFF | | | | | | | | +// | | RGB_BRD | RGB_BRI | | | | | | | | | | | +// | | | | | | | RGB_TOG | | | | | | | | | +// | | | | | | | | | | | | + label = "adjust"; + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &none &none &none &none &none &none +&ext_power EP_TOG &rgb_ug RGB_HUD &rgb_ug RGB_HUI &rgb_ug RGB_SAD &rgb_ug RGB_SAI &rgb_ug RGB_EFF &none &none &none &none &none &none +&none &rgb_ug RGB_BRD &rgb_ug RGB_BRI &none &none &none &none &none &none &none &none &none +&none &none &none &none &none &none &rgb_ug RGB_TOG &none &none &none &none &none &none &none + &none &none &none &none &none &none &none &none &none &none + >; + }; + }; }; diff --git a/app/boards/shields/sofle/sofle.zmk.yml b/app/boards/shields/sofle/sofle.zmk.yml index 5f6f99c3fed..47b66d6777c 100644 --- a/app/boards/shields/sofle/sofle.zmk.yml +++ b/app/boards/shields/sofle/sofle.zmk.yml @@ -9,6 +9,7 @@ features: - keys - display - encoder + - underglow siblings: - sofle_left - sofle_right From 913fdb831e4445bf26df74881fa74666a590020b Mon Sep 17 00:00:00 2001 From: Amettler Thierry Date: Wed, 4 Oct 2023 22:29:06 +0200 Subject: [PATCH 0779/1130] feat(docs): Add configuration snippet for layer-taps --- docs/docs/behaviors/layers.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index cf793089be6..7d7901568f9 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -57,6 +57,22 @@ Example: < LOWER SPACE ``` +### Configuration + +You can configure a different tapping term or tweak other properties noted in the [hold-tap](hold-tap.md#advanced-configuration) documentation page in your keymap: + +``` +< { + tapping-term-ms = <200>; +}; + +/ { + keymap { + ... + }; +}; +``` + :::info Functionally, the layer-tap is a [hold-tap](hold-tap.md) of the ["tap-preferred" flavor](hold-tap.md/#flavors) and a [`tapping-term-ms`](hold-tap.md/#tapping-term-ms) of 200 that takes in a [`momentary layer`](#momentary-layer) and a [keypress](key-press.md) as its "hold" and "tap" parameters, respectively. From ca5c9b4ae6b7008b81c9f9cb02fb7d295b3290b0 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Thu, 5 Oct 2023 19:53:15 -0700 Subject: [PATCH 0780/1130] feat(blog): Add SOTF #6 (#1943) Co-authored-by: Pete Johanson --- docs/blog/2023-10-05-zmk-sotf-6.md | 295 +++++++++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 docs/blog/2023-10-05-zmk-sotf-6.md diff --git a/docs/blog/2023-10-05-zmk-sotf-6.md b/docs/blog/2023-10-05-zmk-sotf-6.md new file mode 100644 index 00000000000..18a52a859fd --- /dev/null +++ b/docs/blog/2023-10-05-zmk-sotf-6.md @@ -0,0 +1,295 @@ +--- +title: "ZMK State Of The Firmware #6" +author: Cem Aksoylar +author_title: Documentation maintainer +author_url: https://github.com/caksoylar +author_image_url: https://avatars.githubusercontent.com/u/7876996 +tags: [SOTF, keyboards, firmware, oss, ble] +--- + +Welcome to the sixth ZMK "State Of The Firmware" (SOTF)! + +This update will cover all the major activity since [SOTF #5](/blog/2022/04/10/zmk-sotf-5). That was over a year ago (again!), so there are many new exciting features and plenty of improvements to cover! + +## Recent Activity + +Here's a summary of the various major changes since last time, broken down by theme: + +### Keymaps/Behaviors + +#### Hold-tap improvements + +[andrewjrae] added the [`require-prior-idle-ms` property](/docs/behaviors/hold-tap#require-prior-idle-ms) to the hold-tap behavior in [#1187](https://github.com/zmkfirmware/zmk/pull/1187) and [#1387](https://github.com/zmkfirmware/zmk/pull/1387), which prevents the hold behavior from triggering if it hasn't been a certain duration since the last key press. This is a useful feature to prevent accidental hold activations during quick typing and made its way into many keymaps! The same property was added to [combos](/docs/features/combos#configuration) as well to help prevent false combo activations. + +Note that an earlier iteration of this feature was supported with the `global-quick-tap` property, which did not allow customizing the timeout and used the value of `tapping-term-ms` for it. This property is now deprecated and users are encouraged to use `require-prior-idle-ms` instead. + +[urob] added the [`hold-trigger-on-release` property](/docs/behaviors/hold-tap#positional-hold-tap-and-hold-trigger-key-positions) in [#1423](https://github.com/zmkfirmware/zmk/pull/1423). This significantly increases the usefulness of positional constraints on hold-taps, since it allows combining multiple holds such as different modifiers for home row mods usage. + +#### Masking mods in mod-morphs + +[aumuell](https://github.com/aumuell), [vrinek](https://github.com/vrinek) and [urob] contributed to improving the behavior of [mod-morphs](/docs/behaviors/mod-morph) by masking the triggering modifiers and added `keep-mods` property in [#1412](https://github.com/zmkfirmware/zmk/pull/1412). This unlocks more use cases for mod-morphs, since you are no longer constrained to emitting keycodes that work well with the triggering modifier keycodes. + +As an example, you can now define a mod-morph that swaps `;` and `:` so that the former is the shifted version of the latter, which wasn't previously possible: + +```dts + col_semi: colon_semicolon { + compatible = "zmk,behavior-mod-morph"; + label = "COLON_SEMICOLON"; + #binding-cells = <0>; + bindings = <&kp COLON>, <&kp SEMI>; + mods = <(MOD_LSFT|MOD_RSFT)>; + }; +``` + +#### Parameterized macros + +[petejohanson] added [macros that can be parameterized](/docs/behaviors/macros#parameterized-macros) with one or two parameters in [#1232](https://github.com/zmkfirmware/zmk/pull/1232). This allows users to define macros in a more modular way and is a nice quality-of-life improvement. + +As a simple example, you could define a macro that puts any keycode provided between double quotes as below, then use it like `&ql A` in your keymap: + +```dts + ql: quoted_letter_macro { + #binding-cells = <1>; + label = "QUOTED_LETTER"; + compatible = "zmk,behavior-macro-one-param"; + bindings = + <&kp DQT>, + <¯o_param_1to1 &kp MACRO_PLACEHOLDER>, + <&kp DQT>; + }; +``` + +Please see the documentation page linked above for usage and more examples. + +#### Arbitrary behaviors on encoder rotation + +[nickconway](https://github.com/nickconway) and [petejohanson] added [sensor rotation behaviors](/docs/behaviors/sensor-rotate) to allow invoking arbitrary behaviors from encoders [#1758](https://github.com/zmkfirmware/zmk/pull/1758). Previously encoder rotations could only invoke the key-press behavior `&kp` through the `&inc_dec_kp` binding, whereas now you can define new sensor rotation behaviors to invoke others. + +(Note that currently behaviors that have "locality" such as `&rgb_ug` do not work as expected via encoder rotation bindings in split keyboards, due to issue [#1494](https://github.com/zmkfirmware/zmk/issues/1494).) + +#### Pre-releasing already pressed keys + +[andrewjrae] contributed a tweak to emitting keycodes in [#1828](https://github.com/zmkfirmware/zmk/pull/1828), where rolling multiple keys that involve the same keycode now releases the keycode before sending a press event again. While this might sound like a technical distinction, it leads to more correct behavior when quickly typing sequences like `+=` and makes the [key repeat behavior](/docs/behaviors/key-repeat) work properly when it is pressed before the previous key is released. + +#### Key toggle behavior + +[cgoates](https://github.com/cgoates) added the [key toggle behavior](/docs/behaviors/key-toggle) in [#1278](https://github.com/zmkfirmware/zmk/pull/1278), which can be used via its `&kt` binding to toggle the state of a keycode between pressed and released. + +#### Apple Globe key + +[ReFil] added support for the `C_AC_NEXT_KEYBOARD_LAYOUT_SELECT` keycode with alias `GLOBE` which acts as the Globe key in macOS and iOS in [#1938](https://github.com/zmkfirmware/zmk/pull/1938). Note that this keycode doesn't exactly behave like a Globe key that is present on an Apple keyboard and its limitations are documented in [this comment](https://github.com/zmkfirmware/zmk/pull/1938#issuecomment-1744579039) thanks to testing by [SethMilliken](https://github.com/SethMilliken). These limitations will be noted in the official [keycodes documentation](/docs/codes/applications) shortly. + +#### Bug fixes and other improvements + +[petejohanson], [andrewjrae] and [okke-formsma] tracked down and fixed an issue causing stuck keys when there are combos on key positions involving hold-tap behaviors in [#1411](https://github.com/zmkfirmware/zmk/pull/1411). This was an elusive bug that took a lot of effort from the community to nail down and fix! + +[nguyendown](https://github.com/nguyendown) and [joelspadin] tracked down and fixed a couple issues causing stuck keys with [sticky keys](/docs/behaviors/sticky-key) in [#1586](https://github.com/zmkfirmware/zmk/pull/1586), [#1745](https://github.com/zmkfirmware/zmk/pull/1745). + +[okke-formsma] fixed an issue allowing tap dances to be invoked by combos in [#1518](https://github.com/zmkfirmware/zmk/pull/1518). + +[petejohanson] tweaked the caps word behavior to ignore modifiers in [#1330](https://github.com/zmkfirmware/zmk/pull/1330). + +[HelloThisIsFlo](https://github.com/HelloThisIsFlo) documented a bug with combos involving overlapping keys and different timeouts, produced a reproducing unit test, then proceeded to fix it in [#1945](https://github.com/zmkfirmware/zmk/pull/1945). + +### Bluetooth and Split Improvements + +#### Multiple peripherals + +[xudongzheng] contributed to add support for more than one peripheral per keyboard in [#836](https://github.com/zmkfirmware/zmk/pull/836). This allows setups such as split keyboards with more than two halves, or enable a BLE-based "dongle mode" via a third device running ZMK that can stay connected to a computer via USB. + +Note that documentation is still lacking for utilizing more than one peripheral and there will potentially be future changes in the build system to allow for more seamless configuration. + +#### Pairing passkey requirement + +[petejohanson] added [the option to require passkey input](/docs/config/bluetooth) while pairing to new devices in [#1822](https://github.com/zmkfirmware/zmk/pull/1822). Enabling this will require you to enter a six digit passcode via the number keys on your keymap and press enter when pairing to a new device, enhancing security during the pairing procedure. + +#### Split keyboard improvements + +[petejohanson] contributed a fix to release held keys on peripheral disconnect [#1340](https://github.com/zmkfirmware/zmk/pull/1340), which makes scenarios where a split disconnects unexpectedly less painful. + +[petejohanson] also improved [the `settings_reset` shield](/docs/troubleshooting#split-keyboard-halves-unable-to-pair) by making it clear bonds more reliably, and allow it to build for all boards in [#1879](https://github.com/zmkfirmware/zmk/pull/1879). + +[petejohanson] and [xudongzheng] contributed additional split connectivity improvements, via using directed advertising in [#1913](https://github.com/zmkfirmware/zmk/pull/1913) and improving the robustness of central scanning in [#1912](https://github.com/zmkfirmware/zmk/pull/1912). + +### Hardware Support + +#### Encoders + +[petejohanson] contributed a major refactor of encoder (and more generally sensor) functionality in [#1039](https://github.com/zmkfirmware/zmk/pull/1039). While the documentation for these changes are still in progress, check out the [dedicated blog post](/blog/2023/06/18/encoder-refactors) for more details. + +This refactor paved way to implementing a long-awaited feature, encoder support in peripheral halves of split keyboards! Building upon the work by [stephen](https://github.com/stephen) in [#728](https://github.com/zmkfirmware/zmk/pull/728), [petejohanson] implemented support in [#1841](https://github.com/zmkfirmware/zmk/pull/1841). + +#### Direct GPIO driver + +[joelspadin] extended the comprehensive debouncing framework used for matrix scan driver to the [direct GPIO driver](/docs/config/kscan#direct-gpio-driver) in [#1288](https://github.com/zmkfirmware/zmk/pull/1288). + +[kurtis-lew] added toggle mode support for direct GPIO driver in [#1305](https://github.com/zmkfirmware/zmk/pull/1305). This allows for adding toggle switches to a keyboard, by properly reading their initial state on boot and making sure the power use is efficient. + +#### IO peripheral drivers + +[petejohanson] added support for the 595 shift register commonly used with smaller controllers like Seeeduino Xiaos, in [#1325](https://github.com/zmkfirmware/zmk/pull/1325). + +[zhiayang](https://github.com/zhiayang) added the driver for the MAX7318 GPIO expander in [#1295](https://github.com/zmkfirmware/zmk/pull/1295). + +#### Underglow auto-off options + +[ReFil] added two [new RGB auto off options](/docs/config/underglow), one using an idle timeout and the other USB status in [#1010](https://github.com/zmkfirmware/zmk/pull/1010). + +#### nice!view support + +[nicell] added support for nice!view, a memory display optimized for low power use in [#1462](https://github.com/zmkfirmware/zmk/pull/1462). +He also contributed a custom vertically-oriented status screen that is automatically enabled when the `nice_view` shield is used in [#1768](https://github.com/zmkfirmware/zmk/pull/1768), since the default status screen has a horizontal orientation. +Please see the instructions in the [nice!view README](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/nice_view/README.md) if you would like to restore the stock status screen. + +#### E-paper display initialization + +[petejohanson] contributed EPD initialization improvements in [#1098](https://github.com/zmkfirmware/zmk/pull/1098), which makes the keyboards using slow refresh displays such as the Corne-ish Zen much more responsive during initial boot. + +#### Xiao BLE improvements + +Various improvements were made for the Seeeduino Xiao BLE board in [#1293](https://github.com/zmkfirmware/zmk/pull/1293), [d0176f36](https://github.com/zmkfirmware/zmk/commit/d0176f36), [#1545](https://github.com/zmkfirmware/zmk/pull/1545) and [#1927](https://github.com/zmkfirmware/zmk/pull/1927) by [petejohanson] and [caksoylar], enabling features necessary for ZMK and improving its power use. + +### Zephyr 3.2 Upgrade + +[petejohanson] once again contributed the massive work necessary for upgrading ZMK to Zephyr 3.2 in [#1499](https://github.com/zmkfirmware/zmk/pull/1499), with review help from [joelspadin] and testing by the community. This Zephyr release brings with it upgrades to the display library LVGL, adds official support for the RP2040 controllers and many internal refactors to help future development. +Check out the [dedicated blog post](/blog/2023/04/06/zephyr-3-2) for more details! + +### Documentation + +#### Configuration docs + +[joelspadin], through a massive amount of work in [#722](https://github.com/zmkfirmware/zmk/pull/722), contributed a whole new section to the documentation: [configuration](/docs/config)! It enumerates the configuration options for each ZMK feature that might be relevant to users in dedicated pages, making it a very handy reference. + +In addition, the [overview page](/docs/config) presents an overview of how configuration works in Zephyr in the context of ZMK, in terms of devicetree files (like the keymap files or shield overlays), and Kconfig ones (like the `.conf` files). It is very helpful in de-mystifying what the various files do and what syntax is expected in them. + +#### New behavior guide + +For users or future contributors that might want to dive into writing their own ZMK behaviors, [kurtis-lew] wrote a useful [guide on how to create new behaviors](/docs/development/new-behavior) in [#1268](https://github.com/zmkfirmware/zmk/pull/1268). + +#### Tap dance and hold-tap documentation improvements + +[kurtis-lew] also improved the documentation for these two behaviors in [#1298](https://github.com/zmkfirmware/zmk/pull/1298), by updating the diagrams to better clarify how their timings work and adding examples for scenarios that are frequently asked by users. + +#### Battery sensor documentation + +[joelspadin] also added documentation for setting up battery sensors, typically required for new boards, in [#868](https://github.com/zmkfirmware/zmk/pull/868). + +#### Shield interconnects + +[petejohanson] updated the [new shield guide](/docs/development/new-shield) for non-Pro Micro interconnects including Xiao, Arduino Uno and Blackpill in [#1607](https://github.com/zmkfirmware/zmk/pull/1607). + +#### Bluetooth feature page + +[petejohanson] and [caksoylar] added a new [Bluetooth feature page](/docs/features/bluetooth) as part of [#1499](https://github.com/zmkfirmware/zmk/pull/1499) and in [#1818](https://github.com/zmkfirmware/zmk/pull/1499), detailing ZMK's Bluetooth implementation and troubleshooting for common problems. + +In addition to the specific contributions listed above, various improvements and fixes to documentation are made by many users from the community, including but not limited to [kurtis-lew], [joelspadin], [filterpaper], [byran.tech](https://github.com/byran.tech), [dxmh] and [caksoylar]. These contributions are are all very appreciated! + +### Miscellaneous + +#### Reusable GitHub build workflow + +[elagil](https://github.com/elagil) helped switch the build workflow used by the [user config repos](/docs/user-setup) to a reusable one in [#1183](https://github.com/zmkfirmware/zmk/pull/1183) and it was further tweaked by [filterpaper] in [#1258](https://github.com/zmkfirmware/zmk/pull/1258). This allows any changes in the workflow to be propagated automatically to users, rather than requiring them to make the updates. The build workflow can be customized by the users [using input parameters](https://github.com/zmkfirmware/zmk/blob/main/.github/workflows/build-user-config.yml#L5) if desired. + +#### Pre-commit hooks + +[joelspadin] added various [pre-commit](https://pre-commit.com/) hooks and added checks to the repo to run them for each commit in [#1651](https://github.com/zmkfirmware/zmk/pull/1651). These hooks and resulting updates standardize formatting across devicetree and other source files, reducing busywork on both contributors and reviewers. + +#### Zephyr usage and other refactors + +[joelspadin] also contributed a few refactor PRs such as [#1269](https://github.com/zmkfirmware/zmk/pull/1269), [#1255](https://github.com/zmkfirmware/zmk/pull/1255) and [#1803](https://github.com/zmkfirmware/zmk/pull/1803), generally improving code quality and bringing the codebase in line with the latest Zephyr conventions. + +[petejohanson] refactored the drivers structure to bring it in line with the current Zephyr conventions for out-of-tree drivers in [#1919](https://github.com/zmkfirmware/zmk/pull/1919). + +#### Updated USB polling interval default + +USB HID polling interval now defaults to 1 ms, i.e. a 1000Hz polling rate, thanks to [joelspadin]'s tweak in [#1271](https://github.com/zmkfirmware/zmk/pull/1271). + +#### Additional display config options + +[caksoylar] added a couple configuration options for displays, including a setting to invert display colors in [#1754](https://github.com/zmkfirmware/zmk/pull/1754) and an option to display the battery percentage for the stock status screen in [#1563](https://github.com/zmkfirmware/zmk/pull/1563). + +## New Shields + +- Eternal keypad [#1136](https://github.com/zmkfirmware/zmk/pull/1136) - [halcyonCorsair](https://github.com/halcyonCorsair) +- nullbits SNAP [#1319](https://github.com/zmkfirmware/zmk/pull/1319) - [jaygreco](https://github.com/jaygreco) +- Aurora Sweep [#1504](https://github.com/zmkfirmware/zmk/pull/1504), Corne [#1520](https://github.com/zmkfirmware/zmk/pull/1520), Lily58 [#1553](https://github.com/zmkfirmware/zmk/pull/1553), Sofle [#1864](https://github.com/zmkfirmware/zmk/pull/1864), and Helix [#1873](https://github.com/zmkfirmware/zmk/pull/1873) - [petejohanson] +- ZMK Uno shield [#1576](https://github.com/zmkfirmware/zmk/pull/1576) - [petejohanson] +- Waterfowl [#1554](https://github.com/zmkfirmware/zmk/pull/1554) - [JW2586](https://github.com/JW2586) +- Kyria Rev 3 [#1627](https://github.com/zmkfirmware/zmk/pull/1627) - [petejohanson] +- Leeloo v2 and Leeloo-Micro [#1762](https://github.com/zmkfirmware/zmk/pull/1762) - [ClicketySplit](https://github.com/ClicketySplit) +- Spaceman Pancake [#1400](https://github.com/zmkfirmware/zmk/pull/1400) - [jasonhazel](https://github.com/jasonhazel) +- Reviung5 [#1548](https://github.com/zmkfirmware/zmk/pull/1548) - [zblesk](https://github.com/zblesk) + +## New Boards + +- RP2040 boards, including Sparkfun Pro Micro, Adafruit KB2040 and Seeeduino Xiao RP2040 were added as part of the Zephyr 3.2 upgrade in [#1499](https://github.com/zmkfirmware/zmk/pull/1499) - [petejohanson] +- Puchi BLE [#1445](https://github.com/zmkfirmware/zmk/pull/1445) - [BenRoe](https://github.com/BenRoe) +- nRFMicro 1.3/1.4 (nRF52833) [#912](https://github.com/zmkfirmware/zmk/pull/912) - [pashutk](https://github.com/pashutk) +- nRF5340 DK [#1562](https://github.com/zmkfirmware/zmk/pull/1562) - [joelspadin] +- PillBug [#1530](https://github.com/zmkfirmware/zmk/pull/1530) - [kylemccreery](https://github.com/kylemccreery) +- Preonic Rev 3 [#1575](https://github.com/zmkfirmware/zmk/pull/1575) - [jeromeOlivier](https://github.com/jeromeOlivier) +- Corne-ish Zen v2 [#1498](https://github.com/zmkfirmware/zmk/pull/1498) and v1 [#1593](https://github.com/zmkfirmware/zmk/pull/1593) - [LOWPROKB](https://github.com/LOWPROKB) and [caksoylar] +- Polarity Works CKP family of boards [#1547](https://github.com/zmkfirmware/zmk/pull/1547) - [ReFil] + +## Coming Soon! + +Some items listed in the last coming soon section are still under active development and other new exciting items are in progress: + +- Automatic/simple BLE profile management +- Soft off support for turning the keyboard "off" through firmware +- Improved automatic power management for devices with multiple peripherals, e.g. OLED displays and RGB LEDs +- Caps/Scroll/Num Lock LED support +- Mouse keys +- Wired split support +- More modular approach to external boards/shields, custom code, user keymaps, etc. +- More shields and boards + +## Statistics + +Some statistics of interest for ZMK: + +- GitHub (lifetime stats) + - 166 Contributors + - 1256 Closed PRs + - 1883 Stars + - 1949 Forks +- Discord Chat + - 8055 total registered (130% up from last SOTF!) +- Website (last 30 days) + - 52K page views + - 4.7K new users + +## Sponsorship + +While ZMK is an open source project that uses the permissive MIT license, below are opportunities for anyone who would like to show their support to the project financially. + +### Open Collective + +The ZMK project has an [Open Collective sponsorship](https://opencollective.com/zmkfirmware) that has been going for two and a half years. +This fund helps pay for project costs like domain registration or development of hardware such as the [ZMK Uno shield](https://github.com/zmkfirmware/zmk-uno). +Note that donations to this fund do _not_ pay for the work of any individual contributor directly. + +### Contributor sponsorships + +Project creator and lead Pete Johanson has a [GitHub sponsorship](https://github.com/sponsors/petejohanson) set up that you can contribute to, in order to directly support his time and efforts in developing and maintaining ZMK. +He has also been traveling full time while focusing on ZMK and keyboard hardware design for more than a year now! +If you are curious, you can check out [his blog post](https://petejohanson.dev/blog/new-journey-2022) on deciding to embark on this adventure, in addition to his thoughts on contributor vs. project sponsorship, and sustainability of open source projects in general. + +## Thanks! + +As the first person to author a State Of The Firmware post besides Pete, I'd like to take the opportunity to thank him for his efforts on leading and developing ZMK, along with fostering a great community of contributors and users around it. + +Also a big thank you to contributors that submit patches and perform reviews, testers that help validate changes, and users that take time out of their day to help out folks with ZMK usage on [Discord channels](https://zmk.dev/community/discord/invite), GitHub issues and other communities. + +[okke-formsma]: https://github.com/okke-formsma +[andrewjrae]: https://github.com/andrewjrae +[xudongzheng]: https://github.com/xudongzheng +[nicell]: https://github.com/Nicell +[petejohanson]: https://github.com/petejohanson +[kurtis-lew]: https://github.com/kurtis-lew +[joelspadin]: https://github.com/joelspadin +[dxmh]: https://github.com/dxmh +[caksoylar]: https://github.com/caksoylar +[urob]: https://github.com/urob +[filterpaper]: https://github.com/filterpaper +[ReFil]: https://github.com/ReFil From fd05478897567bff34d607229636ae4d4507ef0f Mon Sep 17 00:00:00 2001 From: Alex Kang Date: Fri, 6 Oct 2023 12:27:38 -0700 Subject: [PATCH 0781/1130] feat(shields): Microdox V2 shield definition * Refactor common parts of the Microdox sheild into a separate file. This is in preparation for adding Microdox V2 as another shield in the same directory. * Refactor Microdox keymap into a common file in preparation for Microdox V2 * Add Microdox V2 shield definition * Added a README to explain v1/v2 differences. --- app/boards/shields/microdox/Kconfig.defconfig | 4 +- app/boards/shields/microdox/Kconfig.shield | 6 +++ app/boards/shields/microdox/README.md | 8 +++ app/boards/shields/microdox/microdox.dtsi | 46 +---------------- .../shields/microdox/microdox_common.dtsi | 51 +++++++++++++++++++ app/boards/shields/microdox/microdox_v2.conf | 6 +++ app/boards/shields/microdox/microdox_v2.dtsi | 15 ++++++ .../shields/microdox/microdox_v2.zmk.yml | 13 +++++ .../shields/microdox/microdox_v2_left.conf | 0 .../shields/microdox/microdox_v2_left.overlay | 23 +++++++++ .../shields/microdox/microdox_v2_right.conf | 0 .../microdox/microdox_v2_right.overlay | 32 ++++++++++++ 12 files changed, 157 insertions(+), 47 deletions(-) create mode 100644 app/boards/shields/microdox/README.md create mode 100644 app/boards/shields/microdox/microdox_common.dtsi create mode 100644 app/boards/shields/microdox/microdox_v2.conf create mode 100644 app/boards/shields/microdox/microdox_v2.dtsi create mode 100644 app/boards/shields/microdox/microdox_v2.zmk.yml create mode 100644 app/boards/shields/microdox/microdox_v2_left.conf create mode 100644 app/boards/shields/microdox/microdox_v2_left.overlay create mode 100644 app/boards/shields/microdox/microdox_v2_right.conf create mode 100644 app/boards/shields/microdox/microdox_v2_right.overlay diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index d05ae045803..e355c6411ee 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -1,7 +1,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -if SHIELD_MICRODOX_LEFT +if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_V2_LEFT config ZMK_KEYBOARD_NAME default "Microdox" @@ -11,7 +11,7 @@ config ZMK_SPLIT_ROLE_CENTRAL endif -if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_RIGHT +if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_RIGHT || SHIELD_MICRODOX_V2_LEFT || SHIELD_MICRODOX_V2_RIGHT config ZMK_SPLIT default y diff --git a/app/boards/shields/microdox/Kconfig.shield b/app/boards/shields/microdox/Kconfig.shield index 47543760b6a..e0f461ff56f 100644 --- a/app/boards/shields/microdox/Kconfig.shield +++ b/app/boards/shields/microdox/Kconfig.shield @@ -6,3 +6,9 @@ config SHIELD_MICRODOX_LEFT config SHIELD_MICRODOX_RIGHT def_bool $(shields_list_contains,microdox_right) + +config SHIELD_MICRODOX_V2_LEFT + def_bool $(shields_list_contains,microdox_v2_left) + +config SHIELD_MICRODOX_V2_RIGHT + def_bool $(shields_list_contains,microdox_v2_right) diff --git a/app/boards/shields/microdox/README.md b/app/boards/shields/microdox/README.md new file mode 100644 index 00000000000..f92807bb7eb --- /dev/null +++ b/app/boards/shields/microdox/README.md @@ -0,0 +1,8 @@ +# Microdox + +Microdox is a 36 key split keyboard by Boardsource. + +Two variants are defined for this shield – V1 and V2. The layout is exactly the same between the +two. Per [help documentation](https://www.boardsource.xyz/help/6129be4a9c85c6050be190d2), if you +purchased your PCB before April 2022, use `microdox_left`/`microdox_right`. Otherwise, use +`microdox_v2_left`/`microdox_v2_right`. diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index e02aa5546f4..57247e68159 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -4,35 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include +#include "microdox_common.dtsi" / { - chosen { - zephyr,display = &oled; - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <10>; - rows = <4>; -// | SW1 | SW2 | SW3 | SW4 | SW5 | | SW5 | SW4 | SW3 | SW2 | SW1 | -// | SW6 | SW7 | SW8 | SW9 | SW10 | | SW10 | SW9 | SW8 | SW7 | SW6 | -// | SW11 | SW12 | SW13 | SW14 | SW15 | | SW15 | SW14 | SW13 | SW12 | SW11 | -// | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | - map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) - RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) - >; - }; - kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; label = "KSCAN"; - diode-direction = "col2row"; row-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> @@ -40,26 +17,5 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - - }; - - // TODO: per-key RGB node(s)? -}; - -&pro_micro_i2c { - status = "okay"; - - oled: ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - com-sequential; - prechargep = <0x22>; }; }; diff --git a/app/boards/shields/microdox/microdox_common.dtsi b/app/boards/shields/microdox/microdox_common.dtsi new file mode 100644 index 00000000000..0460e012287 --- /dev/null +++ b/app/boards/shields/microdox/microdox_common.dtsi @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW6 | SW7 | SW8 | SW9 | SW10 | | SW10 | SW9 | SW8 | SW7 | SW6 | +// | SW11 | SW12 | SW13 | SW14 | SW15 | | SW15 | SW14 | SW13 | SW12 | SW11 | +// | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) + >; + }; + + // TODO: per-key RGB node(s)? +}; + +&pro_micro_i2c { + status = "okay"; + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/microdox/microdox_v2.conf b/app/boards/shields/microdox/microdox_v2.conf new file mode 100644 index 00000000000..0d38398c029 --- /dev/null +++ b/app/boards/shields/microdox/microdox_v2.conf @@ -0,0 +1,6 @@ +# Uncomment the following lines to enable the Microdox RGB Underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y + +# Uncomment the following line to enable the Microdox OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/microdox/microdox_v2.dtsi b/app/boards/shields/microdox/microdox_v2.dtsi new file mode 100644 index 00000000000..93fa44459db --- /dev/null +++ b/app/boards/shields/microdox/microdox_v2.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "microdox_common.dtsi" + +/ { + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + }; +}; diff --git a/app/boards/shields/microdox/microdox_v2.zmk.yml b/app/boards/shields/microdox/microdox_v2.zmk.yml new file mode 100644 index 00000000000..1b9b65b33e4 --- /dev/null +++ b/app/boards/shields/microdox/microdox_v2.zmk.yml @@ -0,0 +1,13 @@ +file_format: "1" +id: microdox_v2 +name: Microdox V2 +type: shield +url: https://boardsource.xyz/store/5f2e7e4a2902de7151494f92 +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display +siblings: + - microdox_v2_left + - microdox_v2_right diff --git a/app/boards/shields/microdox/microdox_v2_left.conf b/app/boards/shields/microdox/microdox_v2_left.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/microdox/microdox_v2_left.overlay b/app/boards/shields/microdox/microdox_v2_left.overlay new file mode 100644 index 00000000000..83326f6fdc2 --- /dev/null +++ b/app/boards/shields/microdox/microdox_v2_left.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "microdox_v2.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + ; + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; +}; diff --git a/app/boards/shields/microdox/microdox_v2_right.conf b/app/boards/shields/microdox/microdox_v2_right.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/boards/shields/microdox/microdox_v2_right.overlay b/app/boards/shields/microdox/microdox_v2_right.overlay new file mode 100644 index 00000000000..412c42f63f4 --- /dev/null +++ b/app/boards/shields/microdox/microdox_v2_right.overlay @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "microdox.dtsi" + +&default_transform { + col-offset = <5>; +}; + +&oled { + segment-remap; + com-invdir; +}; + +&kscan0 { + col-gpios + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; + row-gpios + = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; +}; From 8a84b7dd5b843e69c8a2e74409c282cd3056c4ce Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 8 Oct 2023 18:30:23 -0500 Subject: [PATCH 0782/1130] fix(shields): Fix incorrect union access in nice view Fixed an error in a previous commit where a member of the selected endpoint was used without checking if it was the correct transport type. The nice!view status screen displays the active BLE profile regardless of whether BLE is active, so we have to get that data directly from the BLE code instead of from the selected endpoint. --- app/boards/shields/nice_view/widgets/status.c | 5 ++++- app/boards/shields/nice_view/widgets/util.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index c629be50f59..453fd650039 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -30,6 +30,7 @@ static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); struct output_status_state { struct zmk_endpoint_instance selected_endpoint; + int active_profile_index; bool active_profile_connected; bool active_profile_bonded; }; @@ -146,7 +147,7 @@ static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], const struct status }; for (int i = 0; i < 5; i++) { - bool selected = state->selected_endpoint.ble.profile_index == i; + bool selected = i == state->active_profile_index; lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 359, &arc_dsc); @@ -228,6 +229,7 @@ ZMK_SUBSCRIPTION(widget_battery_status, zmk_usb_conn_state_changed); static void set_output_status(struct zmk_widget_status *widget, const struct output_status_state *state) { widget->state.selected_endpoint = state->selected_endpoint; + widget->state.active_profile_index = state->active_profile_index; widget->state.active_profile_connected = state->active_profile_connected; widget->state.active_profile_bonded = state->active_profile_bonded; @@ -243,6 +245,7 @@ static void output_status_update_cb(struct output_status_state state) { static struct output_status_state output_status_get_state(const zmk_event_t *_eh) { return (struct output_status_state){ .selected_endpoint = zmk_endpoints_selected(), + .active_profile_index = zmk_ble_active_profile_index(), .active_profile_connected = zmk_ble_active_profile_is_connected(), .active_profile_bonded = !zmk_ble_active_profile_is_open(), }; diff --git a/app/boards/shields/nice_view/widgets/util.h b/app/boards/shields/nice_view/widgets/util.h index e2d2782a3f9..fbcb616fad3 100644 --- a/app/boards/shields/nice_view/widgets/util.h +++ b/app/boards/shields/nice_view/widgets/util.h @@ -20,6 +20,7 @@ struct status_state { bool charging; #if !IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) struct zmk_endpoint_instance selected_endpoint; + int active_profile_index; bool active_profile_connected; bool active_profile_bonded; uint8_t layer_index; From 791711b5556adee55ff9f9c68cdf4ab7fa0be117 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 2 Sep 2023 14:22:18 -0700 Subject: [PATCH 0783/1130] feat(docs): Note how to use GPIO outside interconnect definition --- docs/docs/development/new-shield.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 186169234f2..055afcf6ec7 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -120,6 +120,10 @@ endif +To use GPIO pins that are not part of the interconnects as described above, you can use the GPIO labels that are specific to each controller type. +For instance, pins numbered `PX.Y` in nRF52840-based boards can be referred to via `&gpioX Y` labels. +An example is `&gpio1 7` for the `P1.07` pin that the nice!nano exposes in the middle of the board. + Date: Tue, 21 Mar 2023 14:36:53 +0100 Subject: [PATCH 0784/1130] feat(shields): add right encoders support to waterfowl --- app/boards/shields/waterfowl/waterfowl.dtsi | 43 +++++++++++++++---- app/boards/shields/waterfowl/waterfowl.keymap | 30 ++++++++++--- .../shields/waterfowl/waterfowl_left.overlay | 6 ++- .../shields/waterfowl/waterfowl_right.overlay | 5 ++- 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index 7f4929b3451..3d9140941b4 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -40,28 +40,53 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; + }; + roller_left_encoder: encoder_left_roller { + compatible = "alps,ec11"; + label = "ROLLER_LEFT_ENCODER"; + a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <80>; + status = "disabled"; + }; + + dial_left_encoder: encoder_left_dial { + compatible = "alps,ec11"; + label = "DIAL_LEFT_ENCODER"; + a-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <80>; + status = "disabled"; }; - left_encoder: encoder_left { //roller + roller_right_encoder: encoder_right_roller { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; + label = "ROLLER_RIGHT_ENCODER"; a-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; + status = "disabled"; }; - right_encoder: encoder_right { //Standard encoder on left half + dial_right_encoder: encoder_right_dial { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; + label = "DIAL_RIGHT_ENCODER"; + a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + steps = <80>; + status = "disabled"; }; sensors { compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; + sensors = < + &roller_left_encoder + &dial_left_encoder + &dial_right_encoder + &roller_right_encoder + >; }; // TODO: RGB node(s) diff --git a/app/boards/shields/waterfowl/waterfowl.keymap b/app/boards/shields/waterfowl/waterfowl.keymap index c47f188b07e..197a34fa182 100644 --- a/app/boards/shields/waterfowl/waterfowl.keymap +++ b/app/boards/shields/waterfowl/waterfowl.keymap @@ -33,7 +33,12 @@ &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + sensor-bindings = < + &inc_dec_kp PAGE_DOWN PAGE_UP + &inc_dec_kp C_VOL_DN C_VOL_UP + &inc_dec_kp DOWN UP + &inc_dec_kp LEFT RIGHT + >; }; navnum_layer { @@ -57,7 +62,12 @@ &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + sensor-bindings = < + &inc_dec_kp PAGE_DOWN PAGE_UP + &inc_dec_kp C_VOL_DN C_VOL_UP + &inc_dec_kp DOWN UP + &inc_dec_kp LEFT RIGHT + >; }; symbol_layer { @@ -81,7 +91,12 @@ &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + sensor-bindings = < + &inc_dec_kp PAGE_DOWN PAGE_UP + &inc_dec_kp C_VOL_DN C_VOL_UP + &inc_dec_kp DOWN UP + &inc_dec_kp LEFT RIGHT + >; }; function_layer { @@ -105,8 +120,13 @@ &kp N1 < 3 DEL < 1 SPACE &kp TAB &kp N2 &kp N3 &kp ESC &kp BSPC < 2 RET &kp N4 >; - sensor-bindings = <&inc_dec_kp PAGE_UP PAGE_DOWN &inc_dec_kp TAB LS(TAB)>; + sensor-bindings = < + &inc_dec_kp PAGE_DOWN PAGE_UP + &inc_dec_kp C_VOL_DN C_VOL_UP + &inc_dec_kp DOWN UP + &inc_dec_kp LEFT RIGHT + >; }; }; -}; \ No newline at end of file +}; diff --git a/app/boards/shields/waterfowl/waterfowl_left.overlay b/app/boards/shields/waterfowl/waterfowl_left.overlay index 3b9fd42d404..d58c2876374 100644 --- a/app/boards/shields/waterfowl/waterfowl_left.overlay +++ b/app/boards/shields/waterfowl/waterfowl_left.overlay @@ -16,6 +16,10 @@ ; }; -&left_encoder { +&roller_left_encoder { + status = "okay"; +}; + +&dial_left_encoder { status = "okay"; }; diff --git a/app/boards/shields/waterfowl/waterfowl_right.overlay b/app/boards/shields/waterfowl/waterfowl_right.overlay index bf8f3a446b1..cb23b29ac9f 100644 --- a/app/boards/shields/waterfowl/waterfowl_right.overlay +++ b/app/boards/shields/waterfowl/waterfowl_right.overlay @@ -20,7 +20,10 @@ ; }; +&roller_right_encoder { + status = "okay"; +}; -&right_encoder { +&dial_right_encoder { status = "okay"; }; From 4a339093cebd9e89e531f78dc218907a292cbb1b Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 6 Oct 2023 22:02:23 -0500 Subject: [PATCH 0785/1130] docs: Add highlighting for devicetree and kconfig Added syntax highlighting for devicetree and kconfig files. The PrismJS project is not accepting contributions right now as they work on a version 2 of the library, so the new language files are added directly here. Also enabled syntax highlighting for various languages that are used in the docs but aren't enabled in Docusaurus by default. --- docs/docusaurus.config.js | 15 ++++ docs/src/theme/prism-include-languages.js | 23 ++++++ .../prism/components/prism-devicetree.js | 41 +++++++++++ .../theme/prism/components/prism-kconfig.js | 44 +++++++++++ .../theme/prism/themes/github-dark-dimmed.js | 73 +++++++++++++++++++ docs/src/theme/prism/themes/github.js | 73 +++++++++++++++++++ 6 files changed, 269 insertions(+) create mode 100644 docs/src/theme/prism-include-languages.js create mode 100644 docs/src/theme/prism/components/prism-devicetree.js create mode 100644 docs/src/theme/prism/components/prism-kconfig.js create mode 100644 docs/src/theme/prism/themes/github-dark-dimmed.js create mode 100644 docs/src/theme/prism/themes/github.js diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index e039d3691f6..701b5b997bb 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -1,4 +1,6 @@ const path = require("path"); +const theme = require("./src/theme/prism/themes/github"); +const darkTheme = require("./src/theme/prism/themes/github-dark-dimmed"); module.exports = { title: "ZMK Firmware", @@ -20,6 +22,19 @@ module.exports = { colorMode: { respectPrefersColorScheme: true, }, + prism: { + additionalLanguages: [ + "bash", + "c", + "cmake", + "ini", + "linker-script", + "log", + "powershell", + ], + theme, + darkTheme, + }, // sidebarCollapsible: false, navbar: { title: "ZMK Firmware", diff --git a/docs/src/theme/prism-include-languages.js b/docs/src/theme/prism-include-languages.js new file mode 100644 index 00000000000..c073923b92a --- /dev/null +++ b/docs/src/theme/prism-include-languages.js @@ -0,0 +1,23 @@ +import siteConfig from "@generated/docusaurus.config"; +export default function prismIncludeLanguages(PrismObject) { + const { + themeConfig: { prism }, + } = siteConfig; + const { additionalLanguages } = prism; + // Prism components work on the Prism instance on the window, while prism- + // react-renderer uses its own Prism instance. We temporarily mount the + // instance onto window, import components to enhance it, then remove it to + // avoid polluting global namespace. + // You can mutate PrismObject: registering plugins, deleting languages... As + // long as you don't re-assign it + globalThis.Prism = PrismObject; + additionalLanguages.forEach((lang) => { + // eslint-disable-next-line global-require + require(`prismjs/components/prism-${lang}`); + }); + + require("./prism/components/prism-devicetree.js"); + require("./prism/components/prism-kconfig.js"); + + delete globalThis.Prism; +} diff --git a/docs/src/theme/prism/components/prism-devicetree.js b/docs/src/theme/prism/components/prism-devicetree.js new file mode 100644 index 00000000000..22e638c6ae4 --- /dev/null +++ b/docs/src/theme/prism/components/prism-devicetree.js @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/* eslint-disable no-undef */ + +Prism.languages.devicetree = { + comment: Prism.languages.c["comment"], + string: Prism.languages.c["string"], + keyword: + /\/(?:bits|delete-node|delete-property|dts-v1|incbin|include|memreserve|omit-if-no-ref|plugin)\//, + label: { + pattern: /\b(?:[a-z_]\w*):/i, + alias: "symbol", + }, + reference: { + pattern: /&(?:[a-z_]\w*|\{[\w,.+*#?@/-]*\})/i, + alias: "variable", + }, + node: { + pattern: /(?:\/|\b[\w,.+\-@]+)(?=\s*\{)/, + alias: "class-name", + inside: { + // Node address + number: { + pattern: /(@)[0-9a-f,]/i, + lookbehind: true, + }, + }, + }, + function: Prism.languages.c["function"], + "attr-name": /\\?[\w,.+*#?@-]+(?=\s*[=;])/, + number: [/\b[0-9a-f]{2}\b/i, /\b(?:0[xX][0-9a-fA-F]+|\d+)(?:ULL|UL|LL|U|L)?/], + macro: Prism.languages.c["macro"], + operator: /<<|>>|[<>]=?|[!=]=?|&&?|\|\|?|[+\-*/%~?^]/, + punctuation: /[{}[\];(),.]/, +}; + +Prism.languages.dts = Prism.languages.devicetree; diff --git a/docs/src/theme/prism/components/prism-kconfig.js b/docs/src/theme/prism/components/prism-kconfig.js new file mode 100644 index 00000000000..f911d6e32be --- /dev/null +++ b/docs/src/theme/prism/components/prism-kconfig.js @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/* eslint-disable no-undef */ + +Prism.languages.kconfig = { + comment: { + pattern: /(^|[^\\])#.*/, + lookbehind: true, + greedy: true, + }, + string: /"(?:\\.|[^\\\r\n"])*"/, + helptext: { + // help text ends at the first line at a lower level of indentation than the + // first line of text. + pattern: /(^\s*)(?:help|---help---)\s*^(\s+)(?:.+)(?:\s*^\2[^\n]*)*/m, + lookbehind: true, + alias: "string", + inside: { + keyword: /^(?:help|---help---)/, + }, + }, + keyword: + /\b(?:allnoconfig_y|bool|boolean|choice|comment|config|def_bool|def_hex|def_int|def_string|def_tristate|default|defconfig_list|depends|endchoice|endif|endmenu|env|hex|if|imply|int|mainmenu|menu|menuconfig|modules|on|option|optional|orsource|osource|prompt|range|rsource|select|source|string|tristate|visible)\b/, + expansion: { + pattern: /\$\([\s\S]+\)/, + alias: "variable", + inside: { + function: /\$\(|\)/, + punctuation: /,/, + }, + }, + number: /\b(?:0[xX][0-9a-fA-F]+|\d+)/, + boolean: { + pattern: /\b(?:y|n|m)\b/, + alias: "number", + }, + variable: /\b[A-Z_]+\b/, + operator: /[<>]=?|[!=]=?|&&|\|\|/, + punctuation: /[()]/, +}; diff --git a/docs/src/theme/prism/themes/github-dark-dimmed.js b/docs/src/theme/prism/themes/github-dark-dimmed.js new file mode 100644 index 00000000000..210742bba0b --- /dev/null +++ b/docs/src/theme/prism/themes/github-dark-dimmed.js @@ -0,0 +1,73 @@ +/* + Converted from https://github.com/highlightjs/highlight.js/blob/main/src/styles/github-dark-dimmed.css + + BSD 3-Clause License + + Copyright (c) 2006, Ivan Sagalaev. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** @type {import("prism-react-renderer").PrismTheme} */ +const theme = { + plain: { color: "#adbac7", backgroundColor: "#22272e" }, + styles: [ + { types: ["keyword", "atrule"], style: { color: "#f47067" } }, + { types: ["class-name", "function"], style: { color: "#dcbdfb" } }, + { + types: [ + "attr-name", + "boolean", + "important", + "doctype", + "prolog", + "cdata", + "number", + "operator", + "variable", + "selector", + ], + style: { color: "#6cb6ff" }, + }, + { types: ["regex", "string", "char", "url"], style: { color: "#96d0ff" } }, + { types: ["builtin", "symbol", "entity"], style: { color: "#f69d50" } }, + { types: ["comment"], style: { color: "#768390" } }, + { types: ["italic"], style: { color: "#adbac7", fontStyle: "italic" } }, + { types: ["bold"], style: { color: "#adbac7", fontWeight: "bold" } }, + { + types: ["inserted"], + style: { color: "#b4f1b4", backgroundColor: "#1b4721" }, + }, + { + types: ["deleted"], + style: { color: "#ffd8d3", backgroundColor: "#78191b" }, + }, + { types: ["property", "punctuation", "tag"], style: {} }, + ], +}; + +module.exports = theme; diff --git a/docs/src/theme/prism/themes/github.js b/docs/src/theme/prism/themes/github.js new file mode 100644 index 00000000000..b0be14c35ab --- /dev/null +++ b/docs/src/theme/prism/themes/github.js @@ -0,0 +1,73 @@ +/* + Converted from https://github.com/highlightjs/highlight.js/blob/main/src/styles/github.css + + BSD 3-Clause License + + Copyright (c) 2006, Ivan Sagalaev. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** @type {import("prism-react-renderer").PrismTheme} */ +const theme = { + plain: { color: "#24292e", backgroundColor: "#f9f9f9" }, + styles: [ + { types: ["keyword", "atrule"], style: { color: "#d73a49" } }, + { types: ["class-name", "function"], style: { color: "#6f42c1" } }, + { + types: [ + "attr-name", + "boolean", + "important", + "doctype", + "prolog", + "cdata", + "number", + "operator", + "variable", + "selector", + ], + style: { color: "#005cc5" }, + }, + { types: ["regex", "string", "char", "url"], style: { color: "#032f62" } }, + { types: ["builtin", "symbol", "entity"], style: { color: "#e36209" } }, + { types: ["comment"], style: { color: "#6a737d" } }, + { types: ["italic"], style: { color: "#24292e", fontStyle: "italic" } }, + { types: ["bold"], style: { color: "#24292e", fontWeight: "bold" } }, + { + types: ["inserted"], + style: { color: "#22863a", backgroundColor: "#f0fff4" }, + }, + { + types: ["deleted"], + style: { color: "#b31d28", backgroundColor: "#ffeef0" }, + }, + { types: ["property", "punctuation", "tag"], style: {} }, + ], +}; + +module.exports = theme; From 65667b863ad380955da60d38ac2ae81b4dab06f5 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 6 Oct 2023 22:05:49 -0500 Subject: [PATCH 0786/1130] docs: Add syntax highlighting to more code blocks Added language tags to more code blocks in the documentation to enable syntax highlighting. --- docs/README.md | 6 ++-- docs/blog/2020-10-03-bootloader-fix.md | 6 ++-- docs/blog/2020-11-09-zmk-sotf-3.md | 4 +-- docs/blog/2021-01-27-zmk-sotf-4.md | 8 ++--- docs/blog/2022-04-02-zephyr-3-0.md | 26 +++++++------- docs/blog/2022-04-10-zmk-sotf-5.md | 10 +++--- docs/blog/2023-04-06-zephyr-3-2.md | 30 ++++++++-------- docs/blog/2023-06-18-encoder-refactors.md | 10 +++--- docs/docs/behaviors/backlight.md | 6 ++-- docs/docs/behaviors/bluetooth.md | 10 +++--- docs/docs/behaviors/caps-word.md | 8 ++--- docs/docs/behaviors/hold-tap.md | 18 +++++----- docs/docs/behaviors/key-press.md | 4 +-- docs/docs/behaviors/key-repeat.md | 4 +-- docs/docs/behaviors/key-toggle.md | 2 +- docs/docs/behaviors/layers.md | 14 ++++---- docs/docs/behaviors/macros.md | 26 +++++++------- docs/docs/behaviors/misc.md | 4 +-- docs/docs/behaviors/mod-morph.md | 8 ++--- docs/docs/behaviors/mod-tap.md | 4 +-- docs/docs/behaviors/outputs.md | 8 ++--- docs/docs/behaviors/power.md | 8 ++--- docs/docs/behaviors/reset.md | 4 +-- docs/docs/behaviors/sensor-rotate.md | 4 +-- docs/docs/behaviors/sticky-key.md | 8 ++--- docs/docs/behaviors/sticky-layer.md | 4 +-- docs/docs/behaviors/tap-dance.md | 4 +-- docs/docs/behaviors/underglow.md | 6 ++-- docs/docs/config/index.md | 16 ++++----- docs/docs/config/kscan.md | 12 +++---- docs/docs/customization.md | 4 +-- docs/docs/development/build-flash.md | 10 +++--- docs/docs/development/ide-integration.md | 2 +- docs/docs/development/new-behavior.md | 4 +-- docs/docs/development/new-shield.md | 44 ++++++++++------------- docs/docs/development/posix-board.md | 4 +-- docs/docs/development/usb-logging.md | 6 ++-- docs/docs/features/backlight.md | 24 ++++++------- docs/docs/features/battery.md | 2 +- docs/docs/features/beta-testing.md | 6 ++-- docs/docs/features/bluetooth.md | 4 +-- docs/docs/features/combos.md | 2 +- docs/docs/features/conditional-layers.md | 2 +- docs/docs/features/debouncing.md | 4 +-- docs/docs/features/encoders.md | 4 +-- docs/docs/features/keymaps.md | 10 +++--- docs/docs/features/underglow.md | 12 +++---- docs/docs/keymap-example-file.md | 2 +- docs/docs/keymap-example.md | 2 +- docs/docs/user-setup.md | 6 ++-- 50 files changed, 215 insertions(+), 221 deletions(-) diff --git a/docs/README.md b/docs/README.md index fab8b874e03..1fd6775d534 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,13 +8,13 @@ The ZMK Documentation is licensed [CC-BY-NC-SA](http://creativecommons.org/licen ### Installation -``` +```sh $ npm ci ``` ### Local Development -``` +```sh $ npm start ``` @@ -22,7 +22,7 @@ This command starts a local development server and open up a browser window. Mos ### Build -``` +```sh $ npm build ``` diff --git a/docs/blog/2020-10-03-bootloader-fix.md b/docs/blog/2020-10-03-bootloader-fix.md index ec1d7b0ba72..435034cfbfb 100644 --- a/docs/blog/2020-10-03-bootloader-fix.md +++ b/docs/blog/2020-10-03-bootloader-fix.md @@ -77,7 +77,7 @@ So first I enabled logging of the NVS module by adding `CONFIG_NVS_LOG_LEVEL_DBG=y` to my `.conf` file. I repeated the same test of spamming RGB underglow effect cycle and the resulting logs I got were this: -``` +```log [00:00:00.000,671] fs_nvs: 8 Sectors of 4096 bytes [00:00:00.000,671] fs_nvs: alloc wra: 3, f70 [00:00:00.000,671] fs_nvs: data wra: 3, f40 @@ -130,7 +130,7 @@ and [Dan Halbert](https://github.com/dhalbert) pointed me towards the [linker map](https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/master/linker/nrf52840.ld) of the nRF52840. Let's take a look. -``` +```linker-script FLASH (rx) : ORIGIN = 0xF4000, LENGTH = 0xFE000-0xF4000-2048 /* 38 KB */ BOOTLOADER_CONFIG (r): ORIGIN = 0xFE000 - 2048, LENGTH = 2048 @@ -166,7 +166,7 @@ Now that we've found the issue, we can pretty easily fix this. We'll need to move the settings flash area back so that it doesn't overlap with the bootloader. First we calculate the size of the of flash area the bootloader is using. -``` +```linker-script 0x100000 (end of flash) - 0x0F4000 (start of bootloader) = 0xC000 (48KB) ``` diff --git a/docs/blog/2020-11-09-zmk-sotf-3.md b/docs/blog/2020-11-09-zmk-sotf-3.md index 9e250a99c86..11d67040346 100644 --- a/docs/blog/2020-11-09-zmk-sotf-3.md +++ b/docs/blog/2020-11-09-zmk-sotf-3.md @@ -30,7 +30,7 @@ This also laid the foundation for the other keymap related changes that are now [okke-formsma] added the ability to apply modifiers to a code, e.g.: -``` +```dts &kp LC(C) ``` @@ -63,7 +63,7 @@ and nice!nano that have specialized hardware for this purpose. With this change, you can add -``` +```dts &ext_power EP_TOG ``` diff --git a/docs/blog/2021-01-27-zmk-sotf-4.md b/docs/blog/2021-01-27-zmk-sotf-4.md index e7ff3232b51..fbb53e4031e 100644 --- a/docs/blog/2021-01-27-zmk-sotf-4.md +++ b/docs/blog/2021-01-27-zmk-sotf-4.md @@ -25,7 +25,7 @@ The initial [combos](/docs/features/combos) work has landed! The amazing [okke-f An example, that would send the `ESC` keycode when pressing both the first and second positions on your keyboard: -``` +```dts / { combos { compatible = "zmk,combos"; @@ -46,13 +46,13 @@ Combos currently are "global", and not scoped to a given active layer. There is [okke-formsma] also contributed the initial "sticky keys" behavior, which can be used for functionality sometimes called "one shot mods" or "one shot layers". In your keymap, this would like like: -``` +```dts &sk LEFT_CONTROL ``` for a sticky key/modifier, or: -``` +```dts &sl NAV ``` @@ -68,7 +68,7 @@ This is most frequently used when using multiple core base layers with different [okke-formsma] added an implementation of the "Grave Escape" behavior, developing a more generic "mod-morph" behavior to do so. Adding -``` +```dts &gresc ``` diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md index 103573c663c..6ec4c904f87 100644 --- a/docs/blog/2022-04-02-zephyr-3-0.md +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -29,12 +29,12 @@ Existing user config repositories using Github Actions to build will pull down Z - Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found - Locate and delete the lines for the DTS output step, which is no longer needed: - ``` - - name: ${{ steps.variables.outputs.display-name }} DTS File - if: ${{ always() }} - run: | - if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi - if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + ```yaml + - name: ${{ steps.variables.outputs.display-name }} DTS File + if: ${{ always() }} + run: | + if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi + if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi ``` :::note @@ -76,7 +76,7 @@ The following changes have [already been completed](https://github.com/zmkfirmwa Zephyr's WS2812 `led_strip` driver added a new required property. When adding [underglow](/docs/features/underglow#adding-rgb-underglow-to-a-board) to a board, you now must also add the additional include `#include ` at the top of your devicetree file, and add a `color-mapping` property like: -``` +```dts led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; label = "WS2812"; @@ -108,7 +108,7 @@ Zephyr moved to using a `chosen` node named `zephyr,display` to select the displ For example, for a shield with: -``` +```dts &pro_micro_i2c { status = "okay"; @@ -132,7 +132,7 @@ For example, for a shield with: You would add a `chosen` node like: -``` +```dts / { chosen { zephyr,display = &oled; @@ -148,7 +148,7 @@ two sections of the `.dts` file need updating. Underneath the USB device, add the CDC ACM node: -``` +```dts &usbd { status = "okay"; cdc_acm_uart: cdc_acm_uart { @@ -160,7 +160,7 @@ Underneath the USB device, add the CDC ACM node: Then, an additional `chosen` node (near the top of the file) will mark the CDC ACM device as the console: -``` +```dts / { chosen { ... @@ -175,7 +175,7 @@ Then, an additional `chosen` node (near the top of the file) will mark the CDC A Previously, to get ZMK to build a UF2 image to flash to a given board required adding a `CMakeLists.txt` file that added a custom post build command. Now, the only thing necessary to have Zephyr build a UF2 is to add the following to your `_defconfig` file: -``` +```ini CONFIG_BUILD_OUTPUT_UF2=y ``` @@ -187,7 +187,7 @@ For more details on the implementation, see [zephyr#31066](https://github.com/ze Clock configuration moved to devicetree as well, out of the Kconfig files. Here is a sample config for a board that uses the HSI for the PLL source: -``` +```dts &clk_hsi { status = "okay"; }; diff --git a/docs/blog/2022-04-10-zmk-sotf-5.md b/docs/blog/2022-04-10-zmk-sotf-5.md index b0dd6310354..4ea62a31b87 100644 --- a/docs/blog/2022-04-10-zmk-sotf-5.md +++ b/docs/blog/2022-04-10-zmk-sotf-5.md @@ -32,7 +32,7 @@ to the host capitalized until a non-alpha, non-"continue list" keycode is sent. [petejohanson], taking heavy inspiration on the initial work from [okke-formsma], added [macro support](/docs/behaviors/macros) in [#1168](https://github.com/zmkfirmware/zmk/pull/1166). Several [common patterns](/docs/behaviors/macros#common-patterns) are documented, but one example, changing the underglow color as you activate/deactivate a layer, looks like: -``` +```dts ZMK_MACRO(layer_color_macro, wait-ms = <0>; tap-ms = <0>; @@ -50,7 +50,7 @@ ZMK_MACRO(layer_color_macro, [kurtis-lew] worked diligently to add the [tap-dance behavior](/docs/behaviors/tap-dance) in [#1139](https://github.com/zmkfirmware/zmk/pull/1139), allowing different behaviors to be invoked based on the number of times a user taps a single key in their keymap, e.g. -``` +```dts / { behaviors { td0: tap_dance_0 { @@ -80,7 +80,7 @@ a user taps a single key in their keymap, e.g. Example: -``` +```dts / { conditional_layers { compatible = "zmk,conditional-layers"; @@ -164,7 +164,7 @@ using "high voltage mode" with that SoC. [petejohanson]'s work on the HID foundation also included adding support for full NKRO HID in [#726](https://github.com/zmkfirmware/zmk/pull/726) that can be enabled by adding the following to your `.conf` file for your config: -``` +```ini CONFIG_ZMK_HID_REPORT_TYPE_NKRO=y ``` @@ -176,7 +176,7 @@ It's been live for a while, but [nicell] added an amazing [power profiler](/powe [malinges](https://github.com/malinges) added support for configuring min/max underglow brightness in [#944](https://github.com/zmkfirmware/zmk/pull/944) by setting the values in your `.conf` file as percentages of full: -``` +```ini CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN=20 CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX=80 ``` diff --git a/docs/blog/2023-04-06-zephyr-3-2.md b/docs/blog/2023-04-06-zephyr-3-2.md index 693d93dc828..69ecb6dd032 100644 --- a/docs/blog/2023-04-06-zephyr-3-2.md +++ b/docs/blog/2023-04-06-zephyr-3-2.md @@ -26,7 +26,7 @@ Existing user config repositories using Github Actions to build will pull down Z 1. Replace the contents of your `.github/workflows/build.yml` with: - ``` + ```yaml on: [push, pull_request, workflow_dispatch] jobs: @@ -36,7 +36,7 @@ Existing user config repositories using Github Actions to build will pull down Z 1. If it doesn't exist already, add a new file to your repository named `build.yaml`: - ``` + ```yaml # This file generates the GitHub Actions matrix # For simple board + shield combinations, add them # to the top level board and shield arrays, for more @@ -63,12 +63,12 @@ If you have a custom GitHub Actions workflow you need to maintain for some reaso - Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found - Locate and delete the lines for the DTS output step, which is no longer needed: - ``` - - name: ${{ steps.variables.outputs.display-name }} DTS File - if: ${{ always() }} - run: | - if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi - if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi + ```yaml + - name: ${{ steps.variables.outputs.display-name }} DTS File + if: ${{ always() }} + run: | + if [ -f "build/zephyr/${{ matrix.board }}.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.pre.tmp; fi + if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi ``` ### VS Code & Docker (Dev Container) @@ -107,7 +107,7 @@ A few testers have reported inconsistent issues with bluetooth connections on Wi Zephyr 3.2 introduced [a new Kconfig setting](https://github.com/zephyrproject-rtos/zephyr/pull/48929) that can be used to work around a bug in Windows related to battery reporting. Check out our [bluetooth config](/docs/config/bluetooth) for the full details. The key new configuration that can be set if using Windows is: -``` +```ini CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n ``` @@ -133,7 +133,7 @@ The main area this affects existing shields is those with board specific overrid Previously in ZMK, we relied on per-driver devicetree source properties to set the alternate pin functions for things like SPI or I2C. For example, here is the I2C bus setup as it was previously on the `nice_nano` board: -``` +```dts &i2c0 { compatible = "nordic,nrf-twi"; sda-pin = <17>; @@ -143,7 +143,7 @@ Previously in ZMK, we relied on per-driver devicetree source properties to set t With the move to the `pinctrl` system, this setup now look like: -``` +```dts &i2c0 { compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; @@ -154,7 +154,7 @@ With the move to the `pinctrl` system, this setup now look like: which references the `pinctrl` configuration: -``` +```dts &pinctrl { i2c0_default: i2c0_default { group1 { @@ -185,7 +185,7 @@ The approach is the following when updating a _board_: 1. Add a new file with the naming convention `-pinctrl.dtsi` to your board directory. 1. In the new file, add your `pinctrl` entries that set up different pin control configurations for whatever peripherals/buses are needed. Here's the nice!nano file as an example: - ``` + ```dts /* * Copyright (c) 2022 The ZMK Contributors * SPDX-License-Identifier: MIT @@ -230,7 +230,7 @@ The approach is the following when updating a _board_: 1. From the main `.dts` file, add an `#include "-pinctrl.dtsi"` to have the C-preprocessor combine the files. 1. Update the various peripheral nodes to use the new `pinctrl` configurations. For example, the following old configuration: - ``` + ```dts &i2c0 { compatible = "nordic,nrf-twi"; sda-pin = <15>; @@ -240,7 +240,7 @@ The approach is the following when updating a _board_: would be changed to: - ``` + ```dts &i2c0 { compatible = "nordic,nrf-twi"; pinctrl-0 = <&i2c0_default>; diff --git a/docs/blog/2023-06-18-encoder-refactors.md b/docs/blog/2023-06-18-encoder-refactors.md index 26f9cee8176..14be81c8700 100644 --- a/docs/blog/2023-06-18-encoder-refactors.md +++ b/docs/blog/2023-06-18-encoder-refactors.md @@ -35,7 +35,7 @@ Splitting these two parts of the encoder configuration allows greater flexibilit Previously, an encoder configuration looked like: -``` +```dts left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; @@ -47,7 +47,7 @@ Previously, an encoder configuration looked like: Here, the `resolution` property was used to indicate how many encoder pulses should trigger the sensor behavior one time. Next, the encoder is selected in the sensors node: -``` +```dts sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; @@ -58,7 +58,7 @@ That was the entirety of the configuration for encoders. ### New Configuration -``` +```dts left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; @@ -70,7 +70,7 @@ That was the entirety of the configuration for encoders. Here, the `steps` property is now used to indicate how many encoder pulses there are in a single complete rotation of the encoder. Next, the encoder is selected in the sensors node as before, but an additional configuration is used to indicate how many times the encoder should trigger the behavior in your keymap per rotation: -``` +```dts sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; @@ -84,7 +84,7 @@ For tactile encoders that have detents, the `triggers-per-rotation` would match The configuration changes bring ZMK's code in line with how upstream Zephyr sensor drivers handle rotations. This has the added advantage of allowing us to leverage other sensor drivers. On Nordic MCUs, like nRF52840, the NRFX QDEC driver can be used, for example: -``` +```dts &pinctrl { qdec_default: qdec_default { group1 { diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index 8c613fe6bd1..322530e3763 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -12,7 +12,7 @@ This page contains [backlight](../features/backlight.md) behaviors supported by Backlight actions defines are provided through the [`dt-bindings/zmk/backlight.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/backlight.h) header, which is added at the top of the keymap file: -``` +```dts #include ``` @@ -46,13 +46,13 @@ However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNC 1. Toggle backlight on/off - ``` + ```dts &bl BL_TOG ``` 1. Sets a specific brightness - ``` + ```dts &bl BL_SET 50 ``` diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 89496948d50..1d461722f5c 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -20,7 +20,7 @@ A ZMK device may show as "connected" on multiple hosts at the same time. This is Bluetooth command defines are provided through the [`dt-bindings/zmk/bt.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/bt.h) header, which is added at the top of the keymap file: -``` +```dts #include ``` @@ -54,25 +54,25 @@ The bluetooth behavior completes an bluetooth action given on press. 1. Behavior binding to clear the paired host for the selected profile: - ``` + ```dts &bt BT_CLR ``` 1. Behavior binding to select the next profile: - ``` + ```dts &bt BT_NXT ``` 1. Behavior binding to select the previous profile: - ``` + ```dts &bt BT_PRV ``` 1. Behavior binding to select the 2nd profile (passed parameters are [zero based](https://en.wikipedia.org/wiki/Zero-based_numbering)): - ``` + ```dts &bt BT_SEL 1 ``` diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index e5d862d785b..0233de526b6 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -15,7 +15,7 @@ The modifiers are applied only to to the alphabetic (`A` to `Z`) keycodes, to av Example: -``` +```dts &caps_word ``` @@ -25,7 +25,7 @@ Example: By default, the caps word will remain active when any alphanumeric character or underscore (`UNDERSCORE`), backspace (`BACKSPACE`), or delete (`DELETE`) characters are pressed. Any other non-modifier keycode sent will turn off caps word. If you would like to override this, you can set a new array of keys in the `continue-list` property in your keymap: -``` +```dts &caps_word { continue-list = ; }; @@ -41,7 +41,7 @@ By default, the caps word will remain active when any alphanumeric character or In addition, if you would like _multiple_ modifiers, instead of just `MOD_LSFT`, you can override the `mods` property: -``` +```dts &caps_word { mods = <(MOD_LSFT | MOD_LALT)>; }; @@ -57,7 +57,7 @@ In addition, if you would like _multiple_ modifiers, instead of just `MOD_LSFT`, If you want to use multiple caps breaks with different codes to break the caps, you can add additional caps words instances to use in your keymap: -``` +```dts / { prog_caps: behavior_prog_caps_word { compatible = "zmk,behavior-caps-word"; diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index ec66b34f2af..96e03a0e397 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -55,7 +55,7 @@ If you press a tapped hold-tap again within `quick-tap-ms` milliseconds of the f For example, the following hold-tap configuration enables `require-prior-idle-ms` with a 125 millisecond term, alongside `quick-tap-ms` with a 200 millisecond term. -``` +```dts rpi: require_prior_idle { compatible = "zmk,behavior-hold-tap"; label = "REQUIRE_PRIOR_IDLE"; @@ -78,7 +78,7 @@ If `retro-tap` is enabled, the tap behavior is triggered when releasing the hold For example, if you press `&mt LEFT_SHIFT A` and then release it without pressing another key, it will output `a`. -``` +```dts &mt { retro-tap; }; @@ -96,7 +96,7 @@ Note that `hold-trigger-key-positions` is an array of key position indexes. Key See the following example, which uses a hold-tap behavior definition, configured with the `hold-preferred` flavor, and with positional hold-tap enabled: -``` +```dts #include #include @@ -141,7 +141,7 @@ The two parameters that are passed to the hold-tap in your keymap will be forwar If you use behaviors that accept no parameters such as [mod-morphs](mod-morph.md) or [macros](macros.md), you can pass a dummy parameter value such as `0` to the hold-tap when you use it in your keymap. For instance, a hold-tap with node label `caps` and `bindings = <&kp>, <&caps_word>;` can be used in the keymap as below to send the caps lock keycode on hold and invoke the [caps word behavior](caps-word.md) on tap: -``` +```dts &caps CAPS 0 ``` @@ -166,7 +166,7 @@ The following are suggested hold-tap configurations that work well with home row ##### Option 1: cross-hand only modifiers, using `tap-unless-interrupted` and positional hold-tap (`hold-trigger-key-positions`) -```dtsi title="Homerow Mods: Cross-hand Example" +```dts title="Homerow Mods: Cross-hand Example" #include #include @@ -198,7 +198,7 @@ The following are suggested hold-tap configurations that work well with home row ##### Option 2: `tap-preferred` -```dtsi title="Homerow Mods: Tap-Preferred Example" +```dts title="Homerow Mods: Tap-Preferred Example" #include #include @@ -228,7 +228,7 @@ The following are suggested hold-tap configurations that work well with home row ##### Option 3: `balanced` -```dtsi title="Homerow Mods: Balanced Example" +```dts title="Homerow Mods: Balanced Example" #include #include @@ -262,7 +262,7 @@ The following are suggested hold-tap configurations that work well with home row A popular method of implementing Autoshift in ZMK involves a C-preprocessor macro, commonly defined as `AS(keycode)`. This macro applies the `LSHIFT` modifier to the specified `keycode` when `AS(keycode)` is held, and simply performs a [keypress](key-press.md), `&kp keycode`, when the `AS(keycode)` binding is tapped. This simplifies the use of Autoshift in a keymap, as the complete hold-tap bindings for each desired Autoshift key, as in `&as LS() &as LS() ... &as LS() `, can be quite cumbersome to use when applied to a large portion of the keymap. -```dtsi title="Hold-Tap Example: Autoshift" +```dts title="Hold-Tap Example: Autoshift" #include #include @@ -298,7 +298,7 @@ A popular method of implementing Autoshift in ZMK involves a C-preprocessor macr This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) when the keybind is held and a [toggle-layer](layers.md/#toggle-layer) when it is tapped. Similar to the Autoshift and Sticky Hold use-cases, a `MO_TOG(layer)` macro is defined such that the `&mo` and `&tog` behaviors can target a single layer. -```dtsi title="Hold-Tap Example: Momentary layer on Hold, Toggle layer on Tap" +```dts title="Hold-Tap Example: Momentary layer on Hold, Toggle layer on Tap" #include #include diff --git a/docs/docs/behaviors/key-press.md b/docs/docs/behaviors/key-press.md index e8304d7733d..a298d040b45 100644 --- a/docs/docs/behaviors/key-press.md +++ b/docs/docs/behaviors/key-press.md @@ -27,7 +27,7 @@ To make it easier to encode the HID keycode numeric values, most keymaps include the [`dt-bindings/zmk/keys.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/keys.h) header provided by ZMK near the top: -``` +```dts #include ``` @@ -44,6 +44,6 @@ The "key press" behavior sends standard keycodes on press/release. Example: -``` +```dts &kp A ``` diff --git a/docs/docs/behaviors/key-repeat.md b/docs/docs/behaviors/key-repeat.md index 5217bce8b5b..9772fdb4e0a 100644 --- a/docs/docs/behaviors/key-repeat.md +++ b/docs/docs/behaviors/key-repeat.md @@ -13,7 +13,7 @@ The key repeat behavior when triggered will send whatever keycode was last sent/ Example: -``` +```dts &key_repeat ``` @@ -25,7 +25,7 @@ By default, the key repeat will only track the last pressed key from the HID "Ke If you'd rather have the repeat also capture and send Consumer page usages, you can update the existing behavior: -``` +```dts &key_repeat { usage-pages = ; }; diff --git a/docs/docs/behaviors/key-toggle.md b/docs/docs/behaviors/key-toggle.md index 85b328f849b..080b5b53aa6 100644 --- a/docs/docs/behaviors/key-toggle.md +++ b/docs/docs/behaviors/key-toggle.md @@ -18,7 +18,7 @@ Example uses for key toggle include shift lock, or `ALT-TAB` window switching wi Example: -``` +```dts &kt LALT ``` diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 7d7901568f9..162b792fcd4 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -16,7 +16,7 @@ add a set of `#define`s at the top of your keymap file, and use those layer in y For example, if you have three layers, you can add the following to the top of your keymap: -``` +```dts #define DEFAULT 0 #define LOWER 1 #define RAISE 2 @@ -37,7 +37,7 @@ again. Example: -``` +```dts &mo LOWER ``` @@ -53,7 +53,7 @@ The "layer-tap" behavior enables a layer when a key is held, and outputs a [keyp Example: -``` +```dts < LOWER SPACE ``` @@ -61,7 +61,7 @@ Example: You can configure a different tapping term or tweak other properties noted in the [hold-tap](hold-tap.md#advanced-configuration) documentation page in your keymap: -``` +```dts < { tapping-term-ms = <200>; }; @@ -93,7 +93,7 @@ The "to layer" behavior enables a layer and disables _all_ other layers _except_ Example: -``` +```dts &to 3 ``` @@ -108,13 +108,13 @@ The "toggle layer" behavior enables a layer until the layer is manually disabled Example: -``` +```dts &tog LOWER ``` "Toggle layer" for a : -``` +```dts #define DEFAULT 0 #define NAVI 1 diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 377ce7fecdb..7ce968e9b9a 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -14,7 +14,7 @@ Each macro you want to use in your keymap gets defined first, then bound in your A macro definition looks like: -``` +```dts / { macros { zed_em_kay: zed_em_kay { @@ -38,7 +38,7 @@ used to reference the macro in your keymap. The macro can then be bound in your keymap by referencing it by the label `&zed_em_kay`, e.g.: -``` +```dts raise_layer { bindings = <&zed_em_kay>; }; @@ -54,7 +54,7 @@ with [modifier functions](../codes/modifiers.mdx#modifier-functions) can be used Like [hold-taps](/docs/behaviors/hold-tap), macros are created by composing other behaviors, and any of those behaviors can be added to the `bindings` list, e.g.: -``` +```dts bindings = <&to 1> , <&bl BL_ON> @@ -86,7 +86,7 @@ To modify the activation mode, macro controls can be added at any point in the ` A concrete example, used to hold a modifier, tap multiple keys, then release the modifier, would look like: -``` +```dts bindings = <¯o_press &kp LSHFT> , <¯o_tap &kp Z &kp M &kp K> @@ -101,7 +101,7 @@ the macro itself is released. To pause the macro until release, use `¯o_pause_for_release`. For example, this macro will press a modifier and activate a layer when the macro is pressed. Once the macro is released, it will release the modifier and deactivate the layer by releasing the `&mo`: -``` +```dts bindings = <¯o_press &mo 1 &kp LSHFT> , <¯o_pause_for_release> @@ -116,7 +116,7 @@ which is equal to the value of [`CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS`](../config/be be set by assigning a value to the `wait-ms` property of the macro, e.g. `wait-ms = <20>;`. If you want to update the wait time at any point in the macro bindings list, use `¯o_wait_time`, e.g. `¯o_wait_time 30`. A full example: -``` +```dts wait-ms = <10>; bindings = <&kp F &kp A &kp S &kp T> @@ -132,7 +132,7 @@ which is equal to the value of [`CONFIG_ZMK_MACRO_DEFAULT_TAP_MS`](../config/beh be set by assigning a value to the `tap-ms` property of the macro, e.g. `tap-ms = <20>;`. If you want to update the tap time at any point in a macro bindings list, use `¯o_tap_time`, e.g. `¯o_tap_time 30`. A full example: -``` +```dts bindings = <¯o_tap_time 10> , <&kp S &kp H &kp O &kp R &kp T> @@ -153,7 +153,7 @@ Another limit worth noting is that the maximum number of bindings you can pass t Macros can also be "parameterized", allowing them to be bound in your keymap with unique values passed into them, e.g.: -``` +```dts raise_layer { bindings = <&my_one_param_macro A> }; @@ -262,7 +262,7 @@ lm: lm { To trigger a different underglow when the macro is pressed, and when it is released, we use the macro "press" activation mode whenever triggering the `&rgb_ug` behavior: -``` +```dts wait-ms = <0>; tap-ms = <0>; bindings @@ -278,7 +278,7 @@ bindings The other common use case for macros is to sending sequences of keycodes to the connected host. Here, a wait and tap time of at least 30ms is recommended to avoid having HID notifications grouped at the BLE protocol level and then processed out of order: -``` +```dts wait-ms = <40>; tap-ms = <40>; bindings @@ -292,7 +292,7 @@ bindings Many operating systems allow a special sequence to input unicode characters, e.g. [Windows alt codes](https://support.microsoft.com/en-us/office/insert-ascii-or-unicode-latin-based-symbols-and-characters-d13f58d3-7bcb-44a7-a4d5-972ee12e50e0). You can use macros to automate inputting the sequences, e.g. below macro inserts `£` on Windows: -``` +```dts wait-ms = <40>; tap-ms = <40>; bindings @@ -306,7 +306,7 @@ bindings To avoid repetition or possible typos when declaring a **zero parameter macro**, a convenience _C_ macro, named `ZMK_MACRO(name, props)` can be used to simplify things: -``` +```dts ZMK_MACRO(my_zero_param_macro, wait-ms = <30>; tap-ms = <40>; @@ -320,7 +320,7 @@ To avoid repetition or possible typos when declaring a **zero parameter macro**, This can be used instead of a complete macro definition. During the firmware build process, the example above would produce the complete macro definition below: -``` +```dts my_zero_param_macro: my_zero_param_macro { compatible = "zmk,behavior-macro"; label = "ZM_my_macro"; diff --git a/docs/docs/behaviors/misc.md b/docs/docs/behaviors/misc.md index 446ba33c3e4..c71f87c061b 100644 --- a/docs/docs/behaviors/misc.md +++ b/docs/docs/behaviors/misc.md @@ -21,7 +21,7 @@ passed down to the next active layer in the stack. Example: -``` +```dts &trans ``` @@ -37,6 +37,6 @@ be passed down to the next active layer in the stack. Example: -``` +```dts &none ``` diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index 33d18e33a2e..6099b4281fd 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -18,7 +18,7 @@ The Mod-Morph behavior acts as one of two keycodes, depending on if the required An example of how to implement the mod-morph "Grave Escape": -``` +```dts / { behaviors { gresc: grave_escape { @@ -41,7 +41,7 @@ Note that this specific mod-morph exists in ZMK by default using code `&gresc`. Example: -``` +```dts &gresc ``` @@ -62,7 +62,7 @@ Available Modifiers: Example: -``` +```dts mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; ``` @@ -74,7 +74,7 @@ When a modifier specified in `mods` is being held, it won't be sent along with t For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into `DELETE`, and morphs `RIGHT_SHIFT` + `BACKSPACE` into `RIGHT_SHIFT` + `DELETE`. -``` +```dts / { behaviors { bspc_del: backspace_delete { diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index 5f4fa50653a..d789a8b723c 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -24,7 +24,7 @@ The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode. Example: -``` +```dts &mt LSHIFT A ``` @@ -32,7 +32,7 @@ Example: You can configure a different tapping term in your keymap: -``` +```dts &mt { tapping-term-ms = <400>; }; diff --git a/docs/docs/behaviors/outputs.md b/docs/docs/behaviors/outputs.md index dad52be2ccb..46b567cfdfc 100644 --- a/docs/docs/behaviors/outputs.md +++ b/docs/docs/behaviors/outputs.md @@ -23,7 +23,7 @@ to select the BLE output through below behavior to be able to send keystrokes to Output command defines are provided through the [`dt-bindings/zmk/outputs.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/outputs.h) header, which is added at the top of the keymap file: -``` +```dts #include ``` @@ -53,18 +53,18 @@ However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../con 1. Behavior binding to prefer sending keyboard output to USB - ``` + ```dts &out OUT_USB ``` 1. Behavior binding to prefer sending keyboard output to the current bluetooth profile - ``` + ```dts &out OUT_BLE ``` 1. Behavior binding to toggle between preferring USB and BLE - ``` + ```dts &out OUT_TOG ``` diff --git a/docs/docs/behaviors/power.md b/docs/docs/behaviors/power.md index 11f920845a3..5251d76cb13 100644 --- a/docs/docs/behaviors/power.md +++ b/docs/docs/behaviors/power.md @@ -24,7 +24,7 @@ The following boards currently support this feature: External power control command defines are provided through the [`dt-bindings/zmk/ext_power.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/ext_power.h) header, which is added at the top of the keymap file: -``` +```dts #include ``` @@ -52,19 +52,19 @@ However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../con 1. Behavior binding to enable the external power - ``` + ```dts &ext_power EP_ON ``` 1. Behavior binding to disable the external power - ``` + ```dts &ext_power EP_OFF ``` 1. Behavior binding to toggle the external power - ``` + ```dts &ext_power EP_TOG ``` diff --git a/docs/docs/behaviors/reset.md b/docs/docs/behaviors/reset.md index 0fc62b2f4e9..b7850eca77d 100644 --- a/docs/docs/behaviors/reset.md +++ b/docs/docs/behaviors/reset.md @@ -22,7 +22,7 @@ to the device Example: -``` +```dts &sys_reset ``` @@ -38,7 +38,7 @@ you to flash a new firmware. Example: -``` +```dts &bootloader ``` diff --git a/docs/docs/behaviors/sensor-rotate.md b/docs/docs/behaviors/sensor-rotate.md index 02e56924bad..3ff69dc6d02 100644 --- a/docs/docs/behaviors/sensor-rotate.md +++ b/docs/docs/behaviors/sensor-rotate.md @@ -19,7 +19,7 @@ The standard sensor rotation behavior allows fully binding behaviors to be invok Here is an example that binds the [RGB Underglow Behavior](/docs/behaviors/underglow.md) to change the RGB brightness: -``` +```dts / { behaviors { rgb_encoder: rgb_encoder { @@ -55,7 +55,7 @@ Here is an example, showing how send key presses on rotation: First, defining the sensor rotation itself, binding the [Key Press Behavior](/docs/behaviors/key-press.md) twice, then binding it in the `sensor-bindings` property of a keymap layer: -``` +```dts / { behaviors { rot_kp: behavior_sensor_rotate_kp { diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index d881e6b0b83..8b003f55e39 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -14,13 +14,13 @@ A sticky key stays pressed until another key is pressed. It is often used for 's Example: -``` +```dts &sk LSHIFT ``` You can use any keycode that works for `&kp` as parameter to `&sk`: -``` +```dts &sk LG(LS(LA(LCTRL))) ``` @@ -40,7 +40,7 @@ This setting is enabled by default. It ensures that if a sticky key modifier is #### Example -``` +```dts &sk { release-after-ms = <2000>; quick-release; @@ -56,7 +56,7 @@ This setting is enabled by default. It ensures that if a sticky key modifier is This configuration would apply to all sticky keys. This may not be appropriate if using `quick-release` as you'll lose the ability to chain sticky key modifiers. A better approach for this use case would be to create a new behavior: -``` +```dts / { behaviors { skq: sticky_key_quick_release { diff --git a/docs/docs/behaviors/sticky-layer.md b/docs/docs/behaviors/sticky-layer.md index ac341f7737d..41c2ccf55d7 100644 --- a/docs/docs/behaviors/sticky-layer.md +++ b/docs/docs/behaviors/sticky-layer.md @@ -16,7 +16,7 @@ By default, sticky layers stay pressed for a second if you don't press any other Example: -``` +```dts &sl 1 ``` @@ -24,7 +24,7 @@ Example: You can configure a different `release-after-ms` in your keymap: -``` +```dts &sl { release-after-ms = <2000>; }; diff --git a/docs/docs/behaviors/tap-dance.md b/docs/docs/behaviors/tap-dance.md index c68b51dcd44..ac85b3dab6f 100644 --- a/docs/docs/behaviors/tap-dance.md +++ b/docs/docs/behaviors/tap-dance.md @@ -37,7 +37,7 @@ values={[ This example configures a tap-dance named `td0` that outputs the number of times its binding is pressed from 1-3. -```title="Basic Tap-Dance Example: Counter" +```dts title="Basic Tap-Dance Example: Counter" #include #include @@ -78,7 +78,7 @@ Alphanumeric [`key press`](key-press.md) bindings, like those used for `td0`, wi This example configures a mod-tap inside a tap-dance named `td_mt` that outputs `CAPSLOCK` on a single tap, `LSHIFT` on a single press and hold, and `LCTRL` when the tap-dance is pressed twice. -```title="Advanced Tap-Dance Example: Nested Mod-Tap" +```dts title="Advanced Tap-Dance Example: Nested Mod-Tap" #include #include diff --git a/docs/docs/behaviors/underglow.md b/docs/docs/behaviors/underglow.md index 29f34c2ab0b..f94d9008c04 100644 --- a/docs/docs/behaviors/underglow.md +++ b/docs/docs/behaviors/underglow.md @@ -12,7 +12,7 @@ This page contains [RGB Underglow](../features/underglow.md) behaviors supported RGB actions defines are provided through the [`dt-bindings/zmk/rgb.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/rgb.h) header, which is added at the top of the keymap file: -``` +```dts #include ``` @@ -65,13 +65,13 @@ However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNC 1. Toggle underglow on/off - ``` + ```dts &rgb_ug RGB_TOG ``` 1. Set a specific HSB color (green) - ``` + ```dts &rgb_ug RGB_COLOR_HSB(128,100,100) ``` diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 1ff1bfa094e..3d7aeb48bc2 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -71,7 +71,7 @@ Kconfig is used to configure global settings such as the keyboard name and enabl Kconfig files look like this: -``` +```ini CONFIG_ZMK_SLEEP=y CONFIG_EC11=y CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y @@ -114,7 +114,7 @@ Devicetree files use various file extensions. These indicate the purpose of the Devicetree files look like this: -```devicetree +```dts / { chosen { zmk,kscan = &kscan0; @@ -138,7 +138,7 @@ search through the `.dts` file for your board, `.overlay` file for your shield, A Devicetree node looks like this: -```devicetree +```dts kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; // more properties and/or nodes... @@ -157,7 +157,7 @@ followed by the node's label, an opening curly brace (`{`), one or more new prop For example, to adjust the debouncing of the `zmk,kscan-gpio-matrix` node shown above, you could add this to your keymap: -```devicetree +```dts &kscan0 { debounce-press-ms = <0>; }; @@ -165,7 +165,7 @@ For example, to adjust the debouncing of the `zmk,kscan-gpio-matrix` node shown If the node you want to edit doesn't have a label, you can also write a new tree and it will be merged with the existing tree, overriding any properties. Adding this to your keymap would be equivalent to the previous example. -```devicetree +```dts / { kscan { debounce-press-ms = <0>; @@ -185,7 +185,7 @@ Example: `property;` If a property has already been set to true and you need to override it to false, use the following command to delete the existing property: -```devicetree +```dts /delete-property/ the-property-name; ``` @@ -240,7 +240,7 @@ Each item in the array should be a label for a GPIO node (the names of which dif Example: -```devicetree +```dts some-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>, <&gpio0 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> @@ -253,7 +253,7 @@ A path to a node, either as a node reference or as a string. Examples: -``` +```dts property = &label; property = "/path/to/some/node"; ``` diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 296cb4a179c..67c3765298a 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -88,7 +88,7 @@ By default, a switch will drain current through the internal pull up/down resist Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/gpio.html#api-reference) for the elements in `input-gpios` should be `(GPIO_ACTIVE_LOW | GPIO_PULL_UP)`: -```devicetree +```dts kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; input-gpios @@ -137,7 +137,7 @@ The `diode-direction` property must be one of: Given the `diode-direction`, the [GPIO flags](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/gpio.html#api-reference) for the elements in `row-` and `col-gpios` should be set appropriately. The output pins (e.g. columns for `col2row`) should have the flag `GPIO_ACTIVE_HIGH`, and input pins (e.g. rows for `col2row`) should have the flags `(GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)`: -```devicetree +```dts kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; diode-direction = "col2row"; @@ -229,7 +229,7 @@ One possible way to do this is a 3x4 matrix where the direct GPIO keys are shift ...which can be configured with the following Devicetree code: -```devicetree +```dts / { chosen { zmk,kscan = &kscan0; @@ -316,7 +316,7 @@ The `map` array should be defined using the `RC()` macro from [dt-bindings/zmk/m Any keyboard which is not a grid of 1 unit keys will likely have some unused positions in the matrix. A matrix transform can be used to skip the unused positions so users don't have to set them to `&none` in keymaps. -```devicetree +```dts // numpad.overlay / { chosen { @@ -355,7 +355,7 @@ Any keyboard which is not a grid of 1 unit keys will likely have some unused pos }; ``` -```devicetree +```dts // numpad.keymap / { keymap { @@ -377,7 +377,7 @@ Any keyboard which is not a grid of 1 unit keys will likely have some unused pos Consider a keyboard with a [duplex matrix](https://wiki.ai03.com/books/pcb-design/page/matrices-and-duplex-matrix), where the matrix has twice as many rows and half as many columns as the keyboard has keys. A matrix transform can be used to correct for this so that keymaps can match the layout of the keys, not the layout of the matrix. -```devicetree +```dts / { chosen { zmk,kscan = &kscan0; diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 6fb39f85015..4f75e743a66 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -48,7 +48,7 @@ default keyboard settings. For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: -``` +```bash west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" ``` @@ -63,7 +63,7 @@ More troubleshooting information for split keyboards can be found [here](trouble You can build additional keyboards with GitHub actions by appending them to `build.yml` in your `zmk-config` folder. For instance assume that we have set up a Corne shield with nice!nano during [initial setup](user-setup.md) and we want to add a Lily58 shield with nice!nano v2. The following is an example `build.yaml` file that would accomplish that: -``` +```yaml include: - board: nice_nano shield: corne_left diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index f57c4b5caf9..94bbcdf93a8 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -76,13 +76,13 @@ For split keyboards, you will have to build and flash each side separately the f By default, the `build` command outputs a single .uf2 file named `zmk.uf2` so building left and then right immediately after will overwrite your left firmware. In addition, you will need to pristine build each side to ensure the correct files are used. To avoid having to pristine build every time and separate the left and right build files, we recommend setting up separate build directories for each half. You can do this by using the `-d` parameter and first building left into `build/left`: -``` +```sh west build -d build/left -b nice_nano -- -DSHIELD=kyria_left ``` and then building right into `build/right`: -``` +```sh west build -d build/right -b nice_nano -- -DSHIELD=kyria_right ``` @@ -99,7 +99,7 @@ Instead of building .uf2 files using the default keymap and config files, you ca For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: -``` +```sh west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" ``` @@ -117,7 +117,7 @@ volume automatically -- we need to delete the default volume before binding it t Then you can bind the `zmk-config` volume to the correct path pointing to your local [zmk-config](customization.md) folder: -``` +```sh docker volume create --driver local -o o=bind -o type=none -o \ device="/full/path/to/your/zmk-config/" zmk-config ``` @@ -137,7 +137,7 @@ Alternatively, if your board supports flashing and you're not developing from within a Dockerized environment, enable Device Firmware Upgrade (DFU) mode on your board and run the following command to flash: -``` +```sh west flash ``` diff --git a/docs/docs/development/ide-integration.md b/docs/docs/development/ide-integration.md index bfcd5def4da..f0403dbba36 100644 --- a/docs/docs/development/ide-integration.md +++ b/docs/docs/development/ide-integration.md @@ -71,7 +71,7 @@ If you are developing inside a Docker container, set the IntelliSense mode to `l Open VS Code's integrated terminal and run the following command: -``` +```sh cmake -P zephyr/cmake/verify-toolchain.cmake ``` diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index 0d70aa3b2a2..aab056c1a93 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -357,7 +357,7 @@ For behaviors that do not require central locality, the following options for up For the purpose of this section, we will discuss the structure of `app/dts/behaviors/gresc.dtsi` below. -```dtsi title="app/dts/behaviors/gresc.dtsi" +```dts title="app/dts/behaviors/gresc.dtsi" /* * Copyright (c) 2020 The ZMK Contributors * @@ -383,7 +383,7 @@ The format of a behavior's `.dtsi` file is identical to declaring an instance of After creating the `.dtsi` from above, update `app/dts/behaviors.dtsi` to include your newly predefined behavior instance, making it accessible by the devicetree. -```dtsi title="app/dts/behaviors.dtsi" +```dts title="app/dts/behaviors.dtsi" #include #include #include diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 055afcf6ec7..fa30ca38abf 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -53,7 +53,7 @@ shield to get it picked up for ZMK, `Kconfig.shield` and `Kconfig.defconfig`. The `Kconfig.shield` file defines any additional Kconfig settings that may be relevant when using this keyboard. For most keyboards, there is just one additional configuration value for the shield itself. -``` +```kconfig config SHIELD_MY_BOARD def_bool $(shields_list_contains,my_board) ``` @@ -62,7 +62,7 @@ This will make sure that a new configuration value named `SHIELD_MY_BOARD` is se **For split boards**, you will need to add configurations for the left and right sides. For example, if your split halves are named `my_board_left` and `my_board_right`, it would look like this: -``` +```kconfig config SHIELD_MY_BOARD_LEFT def_bool $(shields_list_contains,my_board_left) @@ -83,7 +83,7 @@ The updated new default values should always be wrapped inside a conditional on The keyboard name must be less than or equal to 16 characters in length, otherwise the bluetooth advertising might fail and you will not be able to find your keyboard from your device. ::: -``` +```kconfig if SHIELD_MY_BOARD config ZMK_KEYBOARD_NAME @@ -97,7 +97,7 @@ You'll also want to set which half is the central side. Most boards set it to th Then on the peripheral half, you'll want to turn USB on so that it shows USB status on displays properly. Finally, you'll want to turn on the split option for both sides. This can all be seen below. -``` +```kconfig if SHIELD_MY_BOARD_LEFT config ZMK_KEYBOARD_NAME @@ -136,7 +136,7 @@ values={[ The `.overlay` is the devicetree description of the keyboard shield that is merged with the primary board devicetree description before the build. For ZMK, this file at a minimum should include the chosen node named `zmk,kscan` that references a KSCAN driver instance. For a simple 3x3 macropad matrix, this might look something like: -``` +```dts / { chosen { zmk,kscan = &kscan0; @@ -174,7 +174,7 @@ Unlike unibody keyboards, split keyboards have a core .dtsi file with shield ove It is preferred to define only the `col-gpios` or `row-gpios` in the common shield .dtsi, depending on the `diode-direction` value. For `col2row` directed boards like the iris, the shared .dtsi file may look like this: -``` +```dts #include / { @@ -228,9 +228,7 @@ Furthermore, the column offset for the [matrix transform](#optional-matrix-trans because the keyboard's switch matrix is read from left to right, top to bottom. This is exemplified with the iris .overlay files. -``` -// iris_left.overlay - +```dts title=iris_left.overlay #include "iris.dtsi" // Notice that the main dtsi files are included in the overlay. &kscan0 { @@ -245,9 +243,7 @@ This is exemplified with the iris .overlay files. }; ``` -``` -// iris_right.overlay - +```dts title=iris_right.overlay #include "iris.dtsi" &default_transform { // The matrix transform for this board is 6 columns over because the left half is 6 columns wide according to the matrix. @@ -281,9 +277,7 @@ For example, a split board called `my_awesome_split_board` would have the follow In most case you'll only need to use the .conf file that affects both halves of a split board. It's used for adding features like deep-sleep or rotary encoders. -``` -// my_awesome_split_board.conf - +```ini title=my_awesome_split_board.conf CONFIG_ZMK_SLEEP=y ``` @@ -306,7 +300,7 @@ the logical key location as perceived by the end user. All _keymap_ mappings act _Without_ a matrix transform, that intentionally map each key position to the row/column pair that position corresponds to, the default equation to determine that is: -``` +```c ($row * NUMBER_OF_COLUMNS) + $column ``` @@ -316,7 +310,7 @@ Whenever that default key position mapping is insufficient, the `.o Here is an example for the [nice60](https://github.com/Nicell/nice60), which uses an efficient 8x8 GPIO matrix, and uses a transform: -``` +```dts #include / { @@ -419,7 +413,7 @@ values={[ In your configuration file you will need to add the following lines so that the encoders can be enabled/disabled: -``` +```ini # Uncomment to enable encoder # CONFIG_EC11=y # CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y @@ -435,7 +429,7 @@ If building locally for split boards, you may need to add these lines to the spe In your device tree file you will need to add the following lines to define the encoder sensor: -``` +```dts left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; @@ -452,8 +446,8 @@ Add additional encoders as necessary by duplicating the above lines, replacing ` Once you have defined the encoder sensors, you will have to add them to the list of sensors: -``` -sensors { +```dts + sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; }; @@ -465,7 +459,7 @@ In this example, a left_encoder and right_encoder are both added. Additional enc Add the following lines to your overlay file(s) to enable the encoder: -``` +```dts &left_encoder { status = "okay"; }; @@ -479,7 +473,7 @@ For split keyboards, make sure to add left hand encoders to the left .overlay fi Add the following line to your keymap file to add default encoder behavior bindings: -``` +```dts sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; ``` @@ -493,7 +487,7 @@ Add additional bindings as necessary to match the default number of encoders on Once you've fully created the new keyboard shield definition, you should be able to test with a build command like: -``` +```sh west build --pristine -b proton_c -- -DSHIELD=my_board ``` @@ -506,7 +500,7 @@ Alternatively, if your board supports flashing and you're not developing from within a Dockerized environment, enable Device Firmware Upgrade (DFU) mode on your board and run the following command to test your build: -``` +```sh west flash ``` diff --git a/docs/docs/development/posix-board.md b/docs/docs/development/posix-board.md index d0ad571a0e2..5a809c02cca 100644 --- a/docs/docs/development/posix-board.md +++ b/docs/docs/development/posix-board.md @@ -14,7 +14,7 @@ with a compiler that can target 32-bit POSIX. On Debian, you can do this with: -``` +```sh apt install -y gcc-multilib ``` @@ -23,7 +23,7 @@ apt install -y gcc-multilib To do this, you can build ZMK targeting the `native_posix_64` board. -``` +```sh west build --pristine --board native_posix_64 -- -DZMK_CONFIG=tests/none/normal/ ``` diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.md index 87cd0e7d853..e50e78241a6 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.md @@ -33,7 +33,7 @@ In Github Actions, you can check the ` Kconfig file` step output to ve for you successfully. ::: -``` +```ini # Turn on logging, and set ZMK logging to debug output CONFIG_ZMK_USB_LOGGING=y ``` @@ -53,7 +53,7 @@ values={[ On Linux, this should be a device like `/dev/ttyACM0` and you can connect with `minicom` or `tio` as usual, e.g.: -``` +```sh sudo tio /dev/ttyACM0 ``` @@ -74,7 +74,7 @@ If you already have the Ardunio IDE installed you can also use its built-in Seri On macOS, the device name is something like `/dev/tty.usbmodemXXXXX` where `XXXXX` is some numerical ID. You can connect to the device with [tio](https://tio.github.io/) (can be installed via [Homebrew](https://formulae.brew.sh/formula/tio)): -``` +```sh sudo tio /dev/tty.usbmodem14401 ``` diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index 717361a2085..c1b5db5dd9b 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -16,7 +16,7 @@ Unlike [RGB Underglow](underglow.md), backlight can only control single color LE To enable backlight on your board or shield, add the following line to your `.conf` file of your user config directory as such: -``` +```ini CONFIG_ZMK_BACKLIGHT=y ``` @@ -46,7 +46,7 @@ values={[ First, you must enable PWM by adding the following lines to your `Kconfig.defconfig` file: -``` +```kconfig if ZMK_BACKLIGHT config PWM @@ -60,7 +60,7 @@ endif # ZMK_BACKLIGHT Then you have to add the following lines to your `.dts` file: -``` +```dts &pwm0 { status = "okay"; ch0-pin = <45>; @@ -77,7 +77,7 @@ If your board uses a P-channel MOSFET to control backlight instead of a N-channe Then you have to add the following lines inside the root devicetree node on the same file as before: -``` +```dts / { backlight: pwmleds { compatible = "pwm-leds"; @@ -98,7 +98,7 @@ Note that every LED inside of the backlight node will be treated as a backlight Finally you need to add backlight to the `chosen` element of the root devicetree node: -``` +```dts / { chosen { zmk,backlight = &backlight; @@ -113,7 +113,7 @@ You must first add a `boards/` directory within your shield folder. For each boa Inside your `.defconfig` file, add the following lines: -``` +```kconfig if ZMK_BACKLIGHT config PWM @@ -127,7 +127,7 @@ endif # ZMK_BACKLIGHT Then add the following lines to your `.overlay` file: -``` +```dts &pwm0 { status = "okay"; ch0-pin = <45>; @@ -144,7 +144,7 @@ If your shield uses a P-channel MOSFET to control backlight instead of a N-chann Then you have to add the following lines inside the root devicetree node on the same file: -``` +```dts / { backlight: pwmleds { compatible = "pwm-leds"; @@ -165,7 +165,7 @@ Note that every LED inside of the backlight node will be treated as a backlight Finally you need to add backlight to the `chosen` element of the root devicetree node: -``` +```dts / { chosen { zmk,backlight = &backlight; @@ -175,7 +175,7 @@ Finally you need to add backlight to the `chosen` element of the root devicetree Optionally, on Pro Micro compatible shields you can add a LED GPIO node to your devicetree, this could be useful if you want your shield to be compatible with newer or untested boards. To do that you have to enable `CONFIG_LED_GPIO` in your `.conf` file and then add the following lines inside the root devicetree node of your `.dtsi` or `.dts` file: -``` +```dts / { backlight: gpioleds { compatible = "gpio-leds"; @@ -199,7 +199,7 @@ It is possible to control multiple backlight LEDs at the same time. This is usef In order to do that, first you need to enable PWM for each pin: -``` +```dts &pwm0 { status = "okay"; ch0-pin = <45>; /* LED 0 */ @@ -213,7 +213,7 @@ This part may vary based on your MCU as different MCUs may have a different numb Then you can simply add each of your LED to the backlight node: -``` +```dts backlight: pwmleds { compatible = "pwm-leds"; label = "Backlight LEDs"; diff --git a/docs/docs/features/battery.md b/docs/docs/features/battery.md index 42ba6d40f26..8bf7820799c 100644 --- a/docs/docs/features/battery.md +++ b/docs/docs/features/battery.md @@ -26,7 +26,7 @@ Zephyr also provides some drivers for fuel gauge ICs such as the TI bq274xx seri Once you have the sensor driver defined, add a `zmk,battery` property to the `chosen` node and set it to reference the sensor node. For example: -``` +```dts / { chosen { zmk,battery = &vbatt; diff --git a/docs/docs/features/beta-testing.md b/docs/docs/features/beta-testing.md index 4328ccbf68d..4a159362f13 100644 --- a/docs/docs/features/beta-testing.md +++ b/docs/docs/features/beta-testing.md @@ -44,7 +44,7 @@ values={[ ]}> -``` +```yaml manifest: remotes: - name: zmkfirmware @@ -61,7 +61,7 @@ manifest: -``` +```yaml manifest: remotes: - name: zmkfirmware @@ -80,7 +80,7 @@ manifest: -``` +```yaml manifest: remotes: - name: zmkfirmware diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index b75b89537d4..e58e16735ef 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -42,7 +42,7 @@ Management of the bluetooth in ZMK is accomplished using the [`&bt` behavior](.. Some users may experience a poor connection between the keyboard and the host. This might be due to poor quality BLE hardware, a metal enclosure on the keyboard or host, or the distance between them. Increasing the transmit power of the keyboard's BLE radio may reduce the severity of this problem. To do this, set the `CONFIG_BT_CTLR_TX_PWR_PLUS_8` configuration value in the `.conf` file of your user config directory as such: -``` +```ini CONFIG_BT_CTLR_TX_PWR_PLUS_8=y ``` @@ -64,7 +64,7 @@ There are a few known issues related to BLE and ZMK: There is a known issue with Windows failing to update the battery information after connecting to a ZMK keyboard. You can work around this Windows bug by overriding a [Bluetooth config variable](../config/bluetooth.md) to force battery notifications even if a host neglects to subscribe to them: -``` +```ini CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n ``` diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index bc1353b416e..f4664c546f1 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -10,7 +10,7 @@ Combo keys are a way to combine multiple keypresses to output a different key. F Combos configured in your `.keymap` file, but are separate from the `keymap` node found there, since they are processed before the normal keymap. They are specified like this: -``` +```dts / { combos { compatible = "zmk,combos"; diff --git a/docs/docs/features/conditional-layers.md b/docs/docs/features/conditional-layers.md index a685bcabd93..7ccfdf2338a 100644 --- a/docs/docs/features/conditional-layers.md +++ b/docs/docs/features/conditional-layers.md @@ -14,7 +14,7 @@ Another way to think of this feature is as a simple combo system for layers, jus Conditional layers are configured via a `conditional_layers` node in your `.keymap` file as follows: -``` +```dts / { conditional_layers { compatible = "zmk,conditional-layers"; diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md index 40170739fcb..cbea7092884 100644 --- a/docs/docs/features/debouncing.md +++ b/docs/docs/features/debouncing.md @@ -56,7 +56,7 @@ per-driver option. For example, if your board/shield has a kscan driver labeled `kscan0` in its `.overlay`, `.dts`, or `.dtsi` files, -```devicetree +```dts kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; ... @@ -65,7 +65,7 @@ kscan0: kscan { then you could add this to your `.keymap`: -```devicetree +```dts &kscan0 { debounce-press-ms = <3>; debounce-release-ms = <3>; diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 0c493330cc6..105757634b1 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -21,7 +21,7 @@ Keyboards and macropads with encoder support will typically take the two EC11 pi Rotation is handled separately as a type of sensor. The behavior for this is set in `sensor-bindings`. See [Sensor Rotation](../behaviors/sensor-rotate.md) for customizing this behavior. -``` +```dts sensor-bindings = ; ``` @@ -33,7 +33,7 @@ Additional encoders can be configured by adding more bindings immediately after As an example, a complete `sensor-bindings` for a Kyria with two encoders could look like: -``` +```dts sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; ``` diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.md index 93c2c8250fa..9778ecbab18 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.md @@ -61,7 +61,7 @@ alter the behavior when that specific key position is activated/deactivated. For the "key press" (`kp`) behavior at a certain key position, you must specify _which_ keycode should be used for that key position. -``` +```dts &kp A ``` @@ -69,7 +69,7 @@ In this case, the `A` is actually a define for the raw HID keycode, to make keym For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound: -``` +```dts &mt LSHIFT D ``` @@ -87,7 +87,7 @@ for what would otherwise be cryptic integer keycodes, etc. This also allows brin The top two lines of most keymaps should include: -``` +```dts #include #include ``` @@ -100,7 +100,7 @@ The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, ` All the remaining keymap nodes will be nested inside of the root devicetree node, like so: -```devicetree +```dts / { // Everything else goes here! }; @@ -111,7 +111,7 @@ All the remaining keymap nodes will be nested inside of the root devicetree node Nested under the devicetree root, is the keymap node. The node _name_ itself is not critical, but the node **MUST** have a property `compatible = "zmk,keymap"` in order to be used by ZMK. -``` +```dts keymap { compatible = "zmk,keymap"; diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index 2b1400fc7e8..b5c4c70392e 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -28,7 +28,7 @@ Here you can see the RGB underglow feature in action using WS2812 LEDs. To enable RGB underglow on your board or shield, simply enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `CONFIG_*_STRIP` configuration values in the `.conf` file for your board or shield. For example: -``` +```ini CONFIG_ZMK_RGB_UNDERGLOW=y # Use the STRIP config specific to the LEDs you're using CONFIG_WS2812_STRIP=y @@ -45,7 +45,7 @@ A common issue when enabling underglow is that some of the installed LEDs do not The number of underglow LEDs is controlled by the `chain-length` property in the `led_strip` node. You can [change the value of this property](../config/index.md#changing-devicetree-properties) in the `.keymap` file by adding a stanza like this one outside of any other node (i.e. above or below the `/` node): -``` +```dts &led_strip { chain-length = <21>; }; @@ -70,7 +70,7 @@ With nRF52 boards, you can just use `&spi3` and define the pins you want to use. Here's an example on a definition that uses P0.06: -``` +```dts #include &pinctrl { @@ -135,7 +135,7 @@ For other boards, you must select an SPI definition that has the `MOSI` pin as y Here's another example for a non-nRF52 board on `spi3`: -``` +```dts #include &spi3 { @@ -161,7 +161,7 @@ Here's another example for a non-nRF52 board on `spi3`: Once you have your `led_strip` properly defined you need to add it to the root devicetree node `chosen` element: -``` +```dts / { chosen { zmk,underglow = &led_strip; @@ -171,7 +171,7 @@ Once you have your `led_strip` properly defined you need to add it to the root d Finally you need to enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `CONFIG_*_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): -``` +```ini CONFIG_ZMK_RGB_UNDERGLOW=y # Use the STRIP config specific to the LEDs you're using CONFIG_WS2812_STRIP=y diff --git a/docs/docs/keymap-example-file.md b/docs/docs/keymap-example-file.md index d8d201aff93..91213f1510b 100644 --- a/docs/docs/keymap-example-file.md +++ b/docs/docs/keymap-example-file.md @@ -1,4 +1,4 @@ -``` +```dts #include #include diff --git a/docs/docs/keymap-example.md b/docs/docs/keymap-example.md index 47d1c06bca6..e526d5427a9 100644 --- a/docs/docs/keymap-example.md +++ b/docs/docs/keymap-example.md @@ -1,4 +1,4 @@ -``` +```dts keymap { compatible = "zmk,keymap"; diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 9d04c347d58..2532fe8b128 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -67,21 +67,21 @@ values={[ ]}> -``` +```bash bash -c "$(curl -fsSL https://zmk.dev/setup.sh)" ``` -``` +```bash bash -c "$(wget https://zmk.dev/setup.sh -O -)" '' --wget ``` -``` +```powershell powershell -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://zmk.dev/setup.ps1'))" ``` From 6c75d6986c3dfaf7562783476059349c0814792a Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 9 Oct 2023 15:08:45 +0100 Subject: [PATCH 0787/1130] feat(docs): Document globe key specific quirks --- docs/docs/codes/_footnotes/globe.mdx | 1 + docs/src/data/footnotes.js | 2 ++ docs/src/data/hid.js | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 docs/docs/codes/_footnotes/globe.mdx diff --git a/docs/docs/codes/_footnotes/globe.mdx b/docs/docs/codes/_footnotes/globe.mdx new file mode 100644 index 00000000000..f267a0ee0d3 --- /dev/null +++ b/docs/docs/codes/_footnotes/globe.mdx @@ -0,0 +1 @@ +Does not exactly replicate original key behavior on macOS, works for Globe+key modifiers but not Fn+key ([#1938](https://github.com/zmkfirmware/zmk/pull/1938#issuecomment-1744579039)). diff --git a/docs/src/data/footnotes.js b/docs/src/data/footnotes.js index cf91ecdb431..ab7f27243e8 100644 --- a/docs/src/data/footnotes.js +++ b/docs/src/data/footnotes.js @@ -8,10 +8,12 @@ import example from "@site/docs/codes/_footnotes/example.mdx"; import iosApplication from "@site/docs/codes/_footnotes/ios-application.mdx"; import iosPower from "@site/docs/codes/_footnotes/ios-power.mdx"; import macosPower from "@site/docs/codes/_footnotes/macos-power.mdx"; +import globe from "@site/docs/codes/_footnotes/globe.mdx"; export default { example, iosApplication, iosPower, macosPower, + globe, }; diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index fc61555c8eb..96697beebb6 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -7884,6 +7884,8 @@ export default [ macos: true, ios: true, }, - footnotes: {}, + footnotes: { + macos: ["globe"], + }, }, ]; From 0c06023ca03fe2e7e7d5f7abe24b3f5d835b5b5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 22:58:15 +0000 Subject: [PATCH 0788/1130] chore(deps): bump postcss from 8.4.18 to 8.4.31 in /docs Bumps [postcss](https://github.com/postcss/postcss) from 8.4.18 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.18...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index f17adc4bde9..6e5973726bf 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -11189,9 +11189,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11938,9 +11944,9 @@ } }, "node_modules/postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -11949,10 +11955,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -24533,9 +24543,9 @@ } }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" }, "natural-compare": { "version": "1.4.0", @@ -25063,11 +25073,11 @@ } }, "postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } From a9f677007bccc3d2c0d988d3b1f45bb7d79d6131 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 10 Oct 2023 20:09:15 -0700 Subject: [PATCH 0789/1130] fix(blog): Correct incorrect info re: global-quick-tap --- docs/blog/2023-10-05-zmk-sotf-6.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2023-10-05-zmk-sotf-6.md b/docs/blog/2023-10-05-zmk-sotf-6.md index 18a52a859fd..5aa1567a90a 100644 --- a/docs/blog/2023-10-05-zmk-sotf-6.md +++ b/docs/blog/2023-10-05-zmk-sotf-6.md @@ -21,7 +21,7 @@ Here's a summary of the various major changes since last time, broken down by th [andrewjrae] added the [`require-prior-idle-ms` property](/docs/behaviors/hold-tap#require-prior-idle-ms) to the hold-tap behavior in [#1187](https://github.com/zmkfirmware/zmk/pull/1187) and [#1387](https://github.com/zmkfirmware/zmk/pull/1387), which prevents the hold behavior from triggering if it hasn't been a certain duration since the last key press. This is a useful feature to prevent accidental hold activations during quick typing and made its way into many keymaps! The same property was added to [combos](/docs/features/combos#configuration) as well to help prevent false combo activations. -Note that an earlier iteration of this feature was supported with the `global-quick-tap` property, which did not allow customizing the timeout and used the value of `tapping-term-ms` for it. This property is now deprecated and users are encouraged to use `require-prior-idle-ms` instead. +Note that an earlier iteration of this feature was supported with the `global-quick-tap` property, which did not allow customizing the timeout and used the value of `quick-tap-ms` for it. This property is now deprecated and users are encouraged to use `require-prior-idle-ms` instead. [urob] added the [`hold-trigger-on-release` property](/docs/behaviors/hold-tap#positional-hold-tap-and-hold-trigger-key-positions) in [#1423](https://github.com/zmkfirmware/zmk/pull/1423). This significantly increases the usefulness of positional constraints on hold-taps, since it allows combining multiple holds such as different modifiers for home row mods usage. From 3ab922822c0b1bbf99e9ea50f17fe15dcef6c3f3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 2 Oct 2023 22:05:24 -0700 Subject: [PATCH 0790/1130] feat(shields): Add ZMK Uno nice!view support. Export the `nice_view_spi` node properly from the ZMK Uno overlay to ensure the shield will work when built along with the `nice_view` shield. --- app/boards/shields/zmk_uno/zmk_uno.overlay | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 78f3b4a7146..02bb4ad8e81 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -11,9 +11,17 @@ status = "okay"; }; -&arduino_spi { +nice_view_spi: &arduino_spi { status = "okay"; + cs-gpios = <&arduino_header 16 GPIO_ACTIVE_HIGH>; + + // Needed so the nice_view shield will enhance the existing node which falls *first* + // on the bus, properly picking up the first `cs-gpios` specifier. + ls0xx@0 { + reg = <0>; + }; + led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; From a9a53e6da490e319bae5efa85c221010a2578b15 Mon Sep 17 00:00:00 2001 From: Alex Kang Date: Sat, 14 Oct 2023 19:39:42 -0700 Subject: [PATCH 0791/1130] feat(shields): Reviung34 shield definition * Initial implementation of REVIUNG34 shield. * Add copyright information to files * Added a README with instructions on how to enable the 1x2u layout. * Add a default chosen matrix transform in the default keymap, alongside a commented out version for the alternate layout. --------- Co-authored-by: Peter Johanson Co-authored-by: Cem Aksoylar --- .../shields/reviung34/Kconfig.defconfig | 9 +++ app/boards/shields/reviung34/Kconfig.shield | 5 ++ app/boards/shields/reviung34/README.md | 13 ++++ .../reviung34/boards/nice_nano_v2.overlay | 48 ++++++++++++ app/boards/shields/reviung34/reviung34.conf | 3 + app/boards/shields/reviung34/reviung34.keymap | 77 +++++++++++++++++++ .../shields/reviung34/reviung34.overlay | 63 +++++++++++++++ .../shields/reviung34/reviung34.zmk.yml | 9 +++ 8 files changed, 227 insertions(+) create mode 100644 app/boards/shields/reviung34/Kconfig.defconfig create mode 100644 app/boards/shields/reviung34/Kconfig.shield create mode 100644 app/boards/shields/reviung34/README.md create mode 100644 app/boards/shields/reviung34/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/reviung34/reviung34.conf create mode 100644 app/boards/shields/reviung34/reviung34.keymap create mode 100644 app/boards/shields/reviung34/reviung34.overlay create mode 100644 app/boards/shields/reviung34/reviung34.zmk.yml diff --git a/app/boards/shields/reviung34/Kconfig.defconfig b/app/boards/shields/reviung34/Kconfig.defconfig new file mode 100644 index 00000000000..5dc26b4f065 --- /dev/null +++ b/app/boards/shields/reviung34/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_REVIUNG34 + +config ZMK_KEYBOARD_NAME + default "REVIUNG34" + +endif diff --git a/app/boards/shields/reviung34/Kconfig.shield b/app/boards/shields/reviung34/Kconfig.shield new file mode 100644 index 00000000000..f3c63a157c1 --- /dev/null +++ b/app/boards/shields/reviung34/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_REVIUNG34 + def_bool $(shields_list_contains,reviung34) diff --git a/app/boards/shields/reviung34/README.md b/app/boards/shields/reviung34/README.md new file mode 100644 index 00000000000..e62c52d65e3 --- /dev/null +++ b/app/boards/shields/reviung34/README.md @@ -0,0 +1,13 @@ +# REVIUNG34 + +REVIUNG34 is a 33-34 key unibody split keyboard by [gtips](https://github.com/gtips). An in-stock version can be found at [Little Keyboards](https://www.littlekeyboards.com/products/reviung34-analyst-keyboard-kit). + +By default, the 2x1u layout is used. To use to the 1x2u layout, add the following to your keymap: + +``` +/ { + chosen { + zmk,matrix_transform = &single_2u_transform; + }; +}; +``` diff --git a/app/boards/shields/reviung34/boards/nice_nano_v2.overlay b/app/boards/shields/reviung34/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..b8d21398448 --- /dev/null +++ b/app/boards/shields/reviung34/boards/nice_nano_v2.overlay @@ -0,0 +1,48 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <9>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/reviung34/reviung34.conf b/app/boards/shields/reviung34/reviung34.conf new file mode 100644 index 00000000000..289f070ba3f --- /dev/null +++ b/app/boards/shields/reviung34/reviung34.conf @@ -0,0 +1,3 @@ +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/reviung34/reviung34.keymap b/app/boards/shields/reviung34/reviung34.keymap new file mode 100644 index 00000000000..eefc510a1c4 --- /dev/null +++ b/app/boards/shields/reviung34/reviung34.keymap @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + chosen { + // 34 keys. + zmk,matrix_transform = &dual_1u_transform; + + // 33 keys. Center two thumb keys replaced by a single 2u key. Remember to adjust your + // keymap accordingly! + // zmk,matrix_transform = &single_2u_transform; + }; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + + base { + label = "Base"; + bindings = < +&kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P +&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI +&mt LSHFT Z &mt LCTRL X &mt LALT C &kp V &kp B &kp N &kp M &mt RALT COMMA &mt RCTRL DOT &mt RSHFT SLASH + &kp LGUI < 1 BSPC < 2 SPACE &mo 3 + >; + }; + + lower { + label = "Lower"; + bindings = < +&kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR +&trans &kp TILDE &kp DQT &kp PIPE &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &mo 4 &trans + >; + }; + + upper { + label = "Upper"; + bindings = < +&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 +&trans &kp GRAVE &kp SQT &kp BSLH &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &mo 4 &trans &trans + >; + }; + + function { + label = "Function"; + bindings = < +&kp TAB &trans &kp C_VOL_UP &trans &trans &trans &trans &trans &trans &kp ENTER +&kp ESC &kp C_BRI_DN &kp C_VOL_DN &kp C_BRI_UP &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &kp C_PWR &trans &trans + >; + }; + + meta { + label = "Meta"; + bindings = < +&rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &none &none &none &none &none +&rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 +&none &none &rgb_ug RGB_TOG &none &none &none &none &bt BT_CLR &none &none + &none &trans &trans &none + >; + }; + }; +}; diff --git a/app/boards/shields/reviung34/reviung34.overlay b/app/boards/shields/reviung34/reviung34.overlay new file mode 100644 index 00000000000..46d85996738 --- /dev/null +++ b/app/boards/shields/reviung34/reviung34.overlay @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &dual_1u_transform; + }; + + dual_1u_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <9>; + rows = <4>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(3,5) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(3,6) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(3,7) + RC(3,2) RC(3,3) RC(3,4) RC(3,8) + >; + }; + + single_2u_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <9>; + rows = <4>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(3,5) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(3,6) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(3,7) + RC(3,2) RC(3,4) RC(3,8) + >; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 4 GPIO_ACTIVE_HIGH> + , <&pro_micro 5 GPIO_ACTIVE_HIGH> + , <&pro_micro 6 GPIO_ACTIVE_HIGH> + , <&pro_micro 7 GPIO_ACTIVE_HIGH> + , <&pro_micro 8 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/app/boards/shields/reviung34/reviung34.zmk.yml b/app/boards/shields/reviung34/reviung34.zmk.yml new file mode 100644 index 00000000000..76ed745d979 --- /dev/null +++ b/app/boards/shields/reviung34/reviung34.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: reviung34 +name: REVIUNG34 +type: shield +url: https://github.com/gtips/reviung/tree/master/reviung34 +requires: [pro_micro] +features: + - keys + - underglow From 3b1d04372b0a013ec2738019166c1c2e85bf0ba7 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 13 Oct 2023 14:58:27 -0500 Subject: [PATCH 0792/1130] feat: Print Kconfig and DTS for failed builds Added the combined devicetree file to the user config build action. Set it and the Kconfig output to run even on a failed build. --- .github/workflows/build-user-config.yml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 5891ddc1e26..c1a97b4d6e0 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -97,7 +97,27 @@ jobs: run: west build -s zmk/app -b "${{ matrix.board }}" -- -DZMK_CONFIG="${GITHUB_WORKSPACE}/${{ inputs.config_path }}" ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file - run: grep -v -e "^#" -e "^$" build/zephyr/.config | sort + run: | + if [ -f build/zephyr/.config ] + then + grep -v -e "^#" -e "^$" build/zephyr/.config | sort + else + echo "No Kconfig output" + fi + if: ${{ !cancelled() }} + + - name: ${{ env.display_name }} Devicetree file + run: | + if [ -f build/zephyr/zephyr.dts ] + then + cat build/zephyr/zephyr.dts + elif [ -f build/zephyr/zephyr.dts.pre ] + then + cat -s build/zephyr/zephyr.dts.pre + else + echo "No Devicetree output" + fi + if: ${{ !cancelled() }} - name: Rename artifacts shell: sh -x {0} From 7fe9ecd87f086fe6fcf253559e751fab575faa5c Mon Sep 17 00:00:00 2001 From: Khalid Aj Date: Wed, 18 Oct 2023 05:43:50 +0700 Subject: [PATCH 0793/1130] feat(shields): Add Reviung53 shield. * Initial Reviung53 shield --------- Co-authored-by: Cem Aksoylar --- .../shields/reviung53/Kconfig.defconfig | 9 ++ app/boards/shields/reviung53/Kconfig.shield | 5 + .../reviung53/boards/nice_nano.overlay | 47 ++++++++ .../reviung53/boards/nice_nano_v2.overlay | 47 ++++++++ app/boards/shields/reviung53/reviung53.conf | 3 + app/boards/shields/reviung53/reviung53.keymap | 109 ++++++++++++++++++ .../shields/reviung53/reviung53.overlay | 56 +++++++++ .../shields/reviung53/reviung53.zmk.yml | 9 ++ 8 files changed, 285 insertions(+) create mode 100644 app/boards/shields/reviung53/Kconfig.defconfig create mode 100644 app/boards/shields/reviung53/Kconfig.shield create mode 100644 app/boards/shields/reviung53/boards/nice_nano.overlay create mode 100644 app/boards/shields/reviung53/boards/nice_nano_v2.overlay create mode 100644 app/boards/shields/reviung53/reviung53.conf create mode 100644 app/boards/shields/reviung53/reviung53.keymap create mode 100644 app/boards/shields/reviung53/reviung53.overlay create mode 100644 app/boards/shields/reviung53/reviung53.zmk.yml diff --git a/app/boards/shields/reviung53/Kconfig.defconfig b/app/boards/shields/reviung53/Kconfig.defconfig new file mode 100644 index 00000000000..efac69b7f40 --- /dev/null +++ b/app/boards/shields/reviung53/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_REVIUNG53 + +config ZMK_KEYBOARD_NAME + default "Reviung53" + +endif diff --git a/app/boards/shields/reviung53/Kconfig.shield b/app/boards/shields/reviung53/Kconfig.shield new file mode 100644 index 00000000000..0b0613e2331 --- /dev/null +++ b/app/boards/shields/reviung53/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_REVIUNG53 + def_bool $(shields_list_contains,reviung53) diff --git a/app/boards/shields/reviung53/boards/nice_nano.overlay b/app/boards/shields/reviung53/boards/nice_nano.overlay new file mode 100644 index 00000000000..4df91903c68 --- /dev/null +++ b/app/boards/shields/reviung53/boards/nice_nano.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/reviung53/boards/nice_nano_v2.overlay b/app/boards/shields/reviung53/boards/nice_nano_v2.overlay new file mode 100644 index 00000000000..4df91903c68 --- /dev/null +++ b/app/boards/shields/reviung53/boards/nice_nano_v2.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/reviung53/reviung53.conf b/app/boards/shields/reviung53/reviung53.conf new file mode 100644 index 00000000000..289f070ba3f --- /dev/null +++ b/app/boards/shields/reviung53/reviung53.conf @@ -0,0 +1,3 @@ +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/reviung53/reviung53.keymap b/app/boards/shields/reviung53/reviung53.keymap new file mode 100644 index 00000000000..d00ca6b975b --- /dev/null +++ b/app/boards/shields/reviung53/reviung53.keymap @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + conditional_layers { + compatible = "zmk,conditional-layers"; + tri_layer { + if-layers = <1 2>; + then-layer = <3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ---------------------------------------------------------------------------------------- +// | | | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | DEL | +// | TAB | Q | W | E | R | T | Y | U | I | O | P | BKSP | +// | CAPS | A | S | D | F | G | H | J | K | L | ; | RET | +// | SHFT | Z | X | C | V | B | N | M | , | . | SHFT(/) | +// | CTRL | GUI | ALT | LOWER(SPACE) | RAISE(SPACE)| ALT | GUI | CTRL(\) | +// | + bindings = < + &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp DEL + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp RET + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &mt RSHFT FSLH + &kp LCTRL &kp LCMD &kp LALT < 1 SPACE < 2 SPACE &kp RALT &kp RCMD &mt RCTRL BSLH + >; + }; + + lower_layer { +// -------------------------------------------------------------------------------------------- +// | | | | F9 | F10 | F11 | F12 | INS | PAU | SCR | PSCR | | +// | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | +// | NAV | | | | | | | _ | + | { | } | " | +// | | | | | | | | | | | ? | +// | | | | | | | | | | +// | + bindings = < + &trans &kp F9 &kp F10 &kp F11 &kp F12 &kp INS &kp PAUSE_BREAK &kp SLCK &kp PSCRN &trans + &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &trans + &mo 4 &none &none &none &none &none &none &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp DQT + &trans &none &none &none &none &none &none &none &none &none &kp QMARK + &trans &trans &trans &trans &trans &trans &trans &kp PIPE + >; + }; + + raise_layer { +// -------------------------------------------------------------------------------------- +// | | | | F9 | F10 | F11 | F12 | MUTE | VOL+ | VOL- | PLAY | | +// | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | +// | NAV | | | | | | | - | = | [ | ] | ' | +// | | | | | | | | + | < | > | : | +// | | | | | | | | | | +// | + bindings = < + &trans &kp F9 &kp F10 &kp F11 &kp F12 &kp C_MUTE &kp C_VOL_UP &kp C_VOL_DN &kp C_PLAY &trans + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans + &mo 4 &none &none &none &none &none &none &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp SQT + &trans &none &none &none &none &none &none &kp PLUS &kp LT &kp GT &kp COLON + &trans &trans &trans &trans &trans &trans &trans &kp PIPE + >; + }; + + adjust_layer { +// ------------------------------------------------------------------------------------------------------------------------ +// | | | BT CLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | BT CLR | +// | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | | | | | | +// | RGB BRI- | RGB SAT- | RGB HUE- | RGB ANI- | | | | | | | | | +// | | | | | | | BOOT | | | | | +// | | | | | | | | | +// | + bindings = < + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &none &none &none &bt BT_CLR + &rgb_ug RGB_BRI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_EFF &none &rgb_ug RGB_TOG &none &none &none &none &none &none + &rgb_ug RGB_BRD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_EFR &none &none &none &none &none &none &none &none + &trans &none &none &none &none &none &bootloader &none &none &none &none + &trans &trans &trans &trans &trans &none &none &none + >; + }; + + nav_layer { +// ------------------------------------------------------------------------------------------------------------------------ +// | | | ESC | | | | | | | | | DEL | +// | TAB | | UP | | | | | | | | | BSPC | +// | NAV | LEFT | DOWN | RIGHT | | | LEFT | DOWN | UP | RIGHT | | ENTER | +// | SHIFT | | | | | | HOME | END | PGUP | PGDN | SHIFT | +// | CTRL | GUI | ALT | SPACE | SPACE | ALT | GUI | CTRL | +// | + bindings = < + &kp ESC &none &none &none &none &none &none &none &none &kp DEL + &kp TAB &none &kp UP &none &none &none &none &none &none &none &none &kp BSPC + &trans &kp LEFT &kp DOWN &kp RIGHT &none &none &kp LEFT &kp DOWN &kp UP &kp RIGHT &none &kp RET + &kp LSHFT &none &none &none &none &none &kp HOME &kp END &kp PG_UP &kp PG_DN &kp RSHFT + &kp LCTRL &kp LCMD &kp LALT &kp SPACE &kp SPACE &kp LALT &kp RCMD &kp RCTRL + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/reviung53/reviung53.overlay b/app/boards/shields/reviung53/reviung53.overlay new file mode 100644 index 00000000000..213b3b81c72 --- /dev/null +++ b/app/boards/shields/reviung53/reviung53.overlay @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <8>; + rows = <7>; + + map = < + RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(4,0) RC(4,1) RC(4,2) RC(4,3) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(4,4) RC(4,5) RC(4,6) RC(4,7) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(5,0) RC(5,1) RC(5,2) RC(5,3) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(5,4) RC(5,5) RC(5,6) +RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) RC(6,6) RC(6,7) + >; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 10 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; +}; diff --git a/app/boards/shields/reviung53/reviung53.zmk.yml b/app/boards/shields/reviung53/reviung53.zmk.yml new file mode 100644 index 00000000000..e670755c774 --- /dev/null +++ b/app/boards/shields/reviung53/reviung53.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: reviung53 +name: REVIUNG53 +type: shield +url: https://github.com/gtips/reviung/tree/master/reviung53 +requires: [pro_micro] +features: + - keys + - underglow From 82e85699edd7261500ea2feb0697f8a6a5bbd42c Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Thu, 19 Oct 2023 22:04:04 +0100 Subject: [PATCH 0794/1130] feat(docs): Document ZMK_BATTERY_REPORTING config (#1971) `CONFIG_ZMK_BATTERY_REPORTING` is currently undocumented, A new KConfig section for battery has been added in line with the other sections in the configuration section of the docs, `CONFIG_ZMK_BATTERY_REPORT_INTERVAL` has been moved from system to battery for consistency --- docs/docs/config/battery.md | 15 +++++++++++++++ docs/docs/config/system.md | 13 ++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 73b4ee92933..7b7e9436503 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -7,6 +7,21 @@ See the [battery level feature page](../features/battery.md) for more details on See [Configuration Overview](index.md) for instructions on how to change these settings. +### Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Config | Type | Description | Default | +| ------------------------------------ | ---- | ------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BATTERY_REPORTING` | bool | Enables/disables all battery level detection/reporting | n | +| `CONFIG_ZMK_BATTERY_REPORT_INTERVAL` | int | Battery level report interval in seconds | 60 | + +:::note Default setting + +While `CONFIG_ZMK_BATTERY_REPORTING` is disabled by default it is implied by `CONFIG_ZMK_BLE`, thus any board with BLE enabled will have this automatically enabled unless explicitly overriden. + +::: + ### Devicetree Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/intro.html#aliases-and-chosen-nodes) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 5a5ae5a55a0..25d51940afb 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -13,13 +13,12 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ### General -| Config | Type | Description | Default | -| ------------------------------------ | ------ | ----------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | | -| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | -| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | -| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | -| `CONFIG_ZMK_BATTERY_REPORT_INTERVAL` | int | Battery level report interval in seconds | 60 | +| Config | Type | Description | Default | +| ----------------------------------- | ------ | ----------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | | +| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | +| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | +| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | ### HID From 9e8ee8684252aecca36c1e6f2403b0a9fd3ebf4f Mon Sep 17 00:00:00 2001 From: Nick Coutsos Date: Sun, 22 Oct 2023 12:05:49 -0400 Subject: [PATCH 0795/1130] chore(docs): Fix links to relocated files (#1975) --- docs/docs/config/battery.md | 2 +- docs/docs/config/displays.md | 4 ++-- docs/docs/config/encoders.md | 4 ++-- docs/docs/config/kscan.md | 14 +++++++------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 7b7e9436503..c56a30efd67 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -48,7 +48,7 @@ Driver for reading the voltage of a battery using a Nordic nRF52's VDDH pin. Thi Applies to: `compatible = "zmk,battery-nrf-vddh"` -Definition file: [zmk/app/drivers/zephyr/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/sensor/zmk%2Cbattery-nrf-vddh.yaml) +Definition file: [zmk/app/module/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/sensor/zmk%2Cbattery-nrf-vddh.yaml) | Property | Type | Description | | -------- | ------ | ------------------------- | diff --git a/docs/docs/config/displays.md b/docs/docs/config/displays.md index a68bf26a9b9..e22f0da8fbb 100644 --- a/docs/docs/config/displays.md +++ b/docs/docs/config/displays.md @@ -49,7 +49,7 @@ Using a dedicated thread requires more memory but prevents displays with slow up You must also configure the driver for your display. ZMK provides the following display drivers: -- [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/display/Kconfig.il0323) +- [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/display/Kconfig.il0323) Zephyr provides several display drivers as well. Search for the name of your display in [Zephyr's Kconfig options](https://docs.zephyrproject.org/latest/kconfig.html) documentation. @@ -57,7 +57,7 @@ Zephyr provides several display drivers as well. Search for the name of your dis See the Devicetree bindings for your display. Here are the bindings for common displays: -- [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/display/gooddisplay%2Cil0323.yaml) +- [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/display/gooddisplay%2Cil0323.yaml) - [SSD1306 (i2c)](https://docs.zephyrproject.org/latest/build/dts/api/bindings/display/solomon,ssd1306fb-i2c.html) - [SSD1306 (spi)](https://docs.zephyrproject.org/latest/build/dts/api/bindings/display/solomon,ssd1306fb-spi.html) diff --git a/docs/docs/config/encoders.md b/docs/docs/config/encoders.md index f6bd6de1495..97a0cc38e95 100644 --- a/docs/docs/config/encoders.md +++ b/docs/docs/config/encoders.md @@ -11,7 +11,7 @@ See [Configuration Overview](index.md) for instructions on how to change these s ### Kconfig -Definition file: [zmk/app/drivers/sensor/ec11/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/sensor/ec11/Kconfig) +Definition file: [zmk/app/module/drivers/sensor/ec11/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/sensor/ec11/Kconfig) | Config | Type | Description | Default | | ------------------------------- | ---- | -------------------------------- | ------- | @@ -31,7 +31,7 @@ If `CONFIG_EC11` is enabled, exactly one of the following options must be set to Applies to: `compatible = "alps,ec11"` -Definition file: [zmk/app/drivers/zephyr/dts/bindings/sensor/alps,ec11.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/sensor/alps%2Cec11.yaml) +Definition file: [zmk/app/module/dts/bindings/sensor/alps,ec11.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/sensor/alps%2Cec11.yaml) | Property | Type | Description | Default | | ------------ | ---------- | ------------------------------------- | ------- | diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 67c3765298a..00360c46978 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -12,7 +12,7 @@ See [Configuration Overview](index.md) for instructions on how to change these s Definition files: - [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) -- [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) +- [zmk/app/module/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/kscan/Kconfig) | Config | Type | Description | Default | | -------------------------------------- | ---- | ---------------------------------------------------- | ------- | @@ -44,7 +44,7 @@ Currently this driver does not honor the `CONFIG_ZMK_KSCAN_DEBOUNCE_*` settings. Applies to: `compatible = "zmk,kscan-gpio-demux"` -Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-demux.yaml) +Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/kscan/zmk%2Ckscan-gpio-demux.yaml) | Property | Type | Description | Default | | ----------------------- | ---------- | -------------------------------- | ------- | @@ -60,7 +60,7 @@ Keyboard scan driver where each key has a dedicated GPIO. ### Kconfig -Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) +Definition file: [zmk/app/module/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/kscan/Kconfig) | Config | Type | Description | Default | | --------------------------------- | ---- | ------------------------------------------------ | ------- | @@ -70,7 +70,7 @@ Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/ Applies to: `compatible = "zmk,kscan-gpio-direct"` -Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-direct.yaml) +Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/kscan/zmk%2Ckscan-gpio-direct.yaml) | Property | Type | Description | Default | | ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ------- | @@ -102,7 +102,7 @@ Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](http Keyboard scan driver where keys are arranged on a matrix with one GPIO per row and column. -Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/kscan/Kconfig) +Definition file: [zmk/app/module/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/kscan/Kconfig) | Config | Type | Description | Default | | ---------------------------------------------- | ----------- | ------------------------------------------------------------------------- | ------- | @@ -114,7 +114,7 @@ Definition file: [zmk/app/drivers/kscan/Kconfig](https://github.com/zmkfirmware/ Applies to: `compatible = "zmk,kscan-gpio-matrix"` -Definition file: [zmk/app/drivers/zephyr/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/kscan/zmk%2Ckscan-gpio-matrix.yaml) +Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/kscan/zmk%2Ckscan-gpio-matrix.yaml) | Property | Type | Description | Default | | ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ----------- | @@ -284,7 +284,7 @@ Definition file: [zmk/app/dts/bindings/zmk,kscan-mock.yaml](https://github.com/z | `cols` | int | The number of columns in the composite matrix | | | `exit-after` | bool | Exit the program after running all events | false | -The `events` array should be defined using the macros from [dt-bindings/zmk/kscan_mock.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/kscan_mock.h). +The `events` array should be defined using the macros from [app/module/include/dt-bindings/zmk/kscan_mock.h](https://github.com/zmkfirmware/zmk/blob/main/app/module/include/dt-bindings/zmk/kscan_mock.h). ## Matrix Transform From 8d09809ef0cfb29c4481e1b31327e0866c2fb902 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 18 Oct 2023 01:19:14 +0000 Subject: [PATCH 0796/1130] fix(docs): Updated encoder config docs. * Update new shield guide for new sensor/encoder settings. * Add DTS section to encoder config docs. Co-authored-by: Cem Aksoylar --- docs/docs/config/encoders.md | 54 +++++++++++++++++++++++++---- docs/docs/development/new-shield.md | 13 ++++--- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/docs/docs/config/encoders.md b/docs/docs/config/encoders.md index 97a0cc38e95..3044b392943 100644 --- a/docs/docs/config/encoders.md +++ b/docs/docs/config/encoders.md @@ -29,13 +29,55 @@ If `CONFIG_EC11` is enabled, exactly one of the following options must be set to ### Devicetree +#### Keymap Sensor Config + +For shields/boards that export a `sensors` node configuration label, both global and per-sensor settings can be set by overriding the properties there. + +To override the general settings, update them on the exported `sensors` node, e.g.: + +``` +&sensors { + triggers-per-rotation = <18>; +}; +``` + +Per sensor overrides can be added with ordered nested nodes with the correct overrides, e.g.: + +``` +&sensors { + left_config { + triggers-per-rotation = <18>; + }; + + right_config { + triggers-per-rotation = <24>; + }; +}; +``` + +:::note + +The names of the child nodes are not important, and are applied in order to the sensors listed in the `sensors` property of the sensors node. + +::: + +Applies to the node and child nodes of: `compatible = "zmk,keymap-sensors"` + +Definition file: [zmk/app/drivers/zephyr/dts/bindings/zmk,keymap-sensors.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/zmk%2Ckeymap-sensors.yaml) + +| Property | Type | Description | Default | +| ----------------------- | ---- | --------------------------------------------------------------- | ------- | +| `triggers-per-rotation` | int | Number of times to trigger the bound behavior per full rotation | | + +#### EC11 Nodes + Applies to: `compatible = "alps,ec11"` Definition file: [zmk/app/module/dts/bindings/sensor/alps,ec11.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/sensor/alps%2Cec11.yaml) -| Property | Type | Description | Default | -| ------------ | ---------- | ------------------------------------- | ------- | -| `label` | string | Unique label for the node | | -| `a-gpios` | GPIO array | GPIO connected to the encoder's A pin | | -| `b-gpios` | GPIO array | GPIO connected to the encoder's B pin | | -| `resolution` | int | Number of encoder pulses per tick | 1 | +| Property | Type | Description | Default | +| --------- | ---------- | ---------------------------------------------- | ------- | +| `label` | string | Unique label for the node | | +| `a-gpios` | GPIO array | GPIO connected to the encoder's A pin | | +| `b-gpios` | GPIO array | GPIO connected to the encoder's B pin | | +| `steps` | int | Number of encoder pulses per complete rotation | | diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index fa30ca38abf..0771122985b 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -430,31 +430,36 @@ If building locally for split boards, you may need to add these lines to the spe In your device tree file you will need to add the following lines to define the encoder sensor: ```dts -left_encoder: encoder_left { + left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; a-gpios = ; b-gpios = ; - resolution = <4>; + steps = <80>; status = "disabled"; }; ``` -Here you will have to replace PIN_A and PIN_B with the appropriate pins that your PCB utilizes for the encoder(s). For keyboards that use the Pro Micro or any of the Pro Micro replacements, Sparkfun's [Pro Micro Hookup Guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro) has a pinout diagram that can be useful to determine the right pins. Reference either the blue numbers labeled "Arduino" (digital pins) or the green numbers labeled "Analog" (analog pins). For pins that are labeled as both digital and analog, refer to your specific board's .dtsi file to determine how you should refer to that pin. +Here you need to replace `PIN_A` and `PIN_B` with the appropriate pins that your PCB utilizes for the encoder(s). See [shield overlays section above](#shield-overlays) on the appropriate node label and pin number to use for GPIOs. + +The `steps` property should corresponded to the documented pulses per rotation for the encoders used on the keyboard, typically found on the datasheet of the component. If users use different encoders when they build, the value can be overridden in their keymap. Add additional encoders as necessary by duplicating the above lines, replacing `left` with whatever you would like to call your encoder, and updating the pins. Note that support for peripheral (right) side sensors over BLE is still in progress. Once you have defined the encoder sensors, you will have to add them to the list of sensors: ```dts - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; ``` In this example, a left_encoder and right_encoder are both added. Additional encoders can be added with spaces separating each, and the order they are added here determines the order in which you define their behavior in your keymap. +In addition, a default value for the number of times the sensors trigger the bound behavior per full rotation is set via the `triggers-per-rotation` property. See [Encoders Config](../config/encoders.md#devicetree) for more details. + Add the following lines to your overlay file(s) to enable the encoder: From 34c8b3f1e30725d2711d5a75cd2da8e60da7b995 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 18 Oct 2023 02:33:03 +0000 Subject: [PATCH 0797/1130] refactor: Update boards/shields for encoders. * Update existing boards/shields for new `steps` and `triggers-per-rotation` set up. --- app/boards/arm/bdn9/bdn9_rev2.dts | 7 ++++--- app/boards/arm/bt60/bt60.dtsi | 5 +++-- app/boards/arm/ckp/ckp.dtsi | 9 +++++---- app/boards/shields/knob_goblin/knob_goblin.overlay | 7 ++++--- app/boards/shields/kyria/kyria_common.dtsi | 7 ++++--- app/boards/shields/lily58/lily58.dtsi | 5 +++-- app/boards/shields/lotus58/lotus58.dtsi | 7 ++++--- app/boards/shields/murphpad/murphpad.keymap | 1 + app/boards/shields/murphpad/murphpad.overlay | 4 ++-- app/boards/shields/nibble/nibble.keymap | 1 + app/boards/shields/nibble/nibble.overlay | 2 +- app/boards/shields/reviung5/reviung5.overlay | 5 +++-- app/boards/shields/romac_plus/romac_plus.dtsi | 5 +++-- app/boards/shields/snap/snap.dtsi | 4 ++-- app/boards/shields/snap/snap.keymap | 1 + app/boards/shields/sofle/sofle.dtsi | 7 ++++--- .../splitkb_aurora_corne/splitkb_aurora_corne.dtsi | 7 ++++--- .../splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi | 7 ++++--- .../splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi | 11 ++++++----- app/boards/shields/tidbit/tidbit.dtsi | 10 +++++----- app/boards/shields/tidbit/tidbit.keymap | 1 + app/boards/shields/zodiark/zodiark.dtsi | 7 ++++--- 22 files changed, 69 insertions(+), 51 deletions(-) diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index d2d1c65cb8f..1b85067ce13 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -43,7 +43,7 @@ label = "LEFT_ENCODER"; a-gpios = <&gpioa 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; mid_encoder: encoder_mid { @@ -51,7 +51,7 @@ label = "MID_ENCODER"; a-gpios = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; right_encoder: encoder_right { @@ -59,7 +59,7 @@ label = "RIGHT_ENCODER"; a-gpios = <&gpioa 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpiob 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -67,6 +67,7 @@ compatible = "zmk,keymap-sensors"; status = "disabled"; sensors = <>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index 6e4900af53c..8a270250957 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -22,9 +22,10 @@ zmk,matrix_transform = &default_transform; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder>; + triggers-per-rotation = <20>; }; @@ -34,7 +35,7 @@ label = "LEFT_ENCODER"; a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; diff --git a/app/boards/arm/ckp/ckp.dtsi b/app/boards/arm/ckp/ckp.dtsi index 6c52d620367..ec2bd6a87b6 100644 --- a/app/boards/arm/ckp/ckp.dtsi +++ b/app/boards/arm/ckp/ckp.dtsi @@ -26,9 +26,10 @@ zmk,battery = &vbatt; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1>; + triggers-per-rotation = <20>; }; kscan0: kscan_0 { @@ -76,7 +77,7 @@ label = "ENCODER_ONE"; a-gpios = <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; @@ -85,7 +86,7 @@ label = "ENCODER_TWO"; a-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; @@ -94,7 +95,7 @@ label = "encoder_3"; a-gpios = <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; diff --git a/app/boards/shields/knob_goblin/knob_goblin.overlay b/app/boards/shields/knob_goblin/knob_goblin.overlay index d3ba8c5be79..03051ce5820 100644 --- a/app/boards/shields/knob_goblin/knob_goblin.overlay +++ b/app/boards/shields/knob_goblin/knob_goblin.overlay @@ -39,7 +39,7 @@ label = "TOP_ENCODER"; a-gpios = <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; @@ -48,13 +48,14 @@ label = "BOTTOM_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&top_encoder &bottom_encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index 2e10cd37df4..1056794d584 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -23,20 +23,21 @@ left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; }; right_encoder: encoder_right { compatible = "alps,ec11"; label = "RIGHT_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; // TODO: RGB node(s) diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index ec520f6bb8a..eb427a581ba 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -51,12 +51,13 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index e24d75e70d4..8b1c66f98df 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -50,7 +50,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -59,13 +59,14 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap index ccdff9f7a71..74a852a8719 100644 --- a/app/boards/shields/murphpad/murphpad.keymap +++ b/app/boards/shields/murphpad/murphpad.keymap @@ -48,6 +48,7 @@ sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1 &encoder_2>; + triggers-per-rotation = <20>; }; diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index 13905092e64..f175c55e1c0 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -39,7 +39,7 @@ label = "Encoder 1"; a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -48,7 +48,7 @@ label = "Encoder 2"; a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; diff --git a/app/boards/shields/nibble/nibble.keymap b/app/boards/shields/nibble/nibble.keymap index 5b90f6c19ae..4cb6f5b021a 100644 --- a/app/boards/shields/nibble/nibble.keymap +++ b/app/boards/shields/nibble/nibble.keymap @@ -12,6 +12,7 @@ sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1>; + triggers-per-rotation = <20>; }; keymap { diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index cd1176401b7..43be6c766fc 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -18,7 +18,7 @@ label = "Encoder 1"; a-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; diff --git a/app/boards/shields/reviung5/reviung5.overlay b/app/boards/shields/reviung5/reviung5.overlay index 24b0f582b0e..8b885245485 100644 --- a/app/boards/shields/reviung5/reviung5.overlay +++ b/app/boards/shields/reviung5/reviung5.overlay @@ -43,12 +43,13 @@ label = "encoder"; a-gpios = <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "okay"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; + triggers-per-rotation = <20>; }; }; \ No newline at end of file diff --git a/app/boards/shields/romac_plus/romac_plus.dtsi b/app/boards/shields/romac_plus/romac_plus.dtsi index 71ec87b2b94..5324174b54f 100644 --- a/app/boards/shields/romac_plus/romac_plus.dtsi +++ b/app/boards/shields/romac_plus/romac_plus.dtsi @@ -43,13 +43,14 @@ RC(3,0) RC(3,1) RC(3,2) label = "LEFT_ENCODER"; a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder>; + triggers-per-rotation = <20>; }; // TODO: per-key RGB node(s)? diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi index a374ad1768b..7523f35b06c 100644 --- a/app/boards/shields/snap/snap.dtsi +++ b/app/boards/shields/snap/snap.dtsi @@ -16,14 +16,14 @@ left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; }; right_encoder: encoder_right { compatible = "alps,ec11"; label = "RIGHT_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; }; diff --git a/app/boards/shields/snap/snap.keymap b/app/boards/shields/snap/snap.keymap index 7c750f9f14c..febaff97bba 100644 --- a/app/boards/shields/snap/snap.keymap +++ b/app/boards/shields/snap/snap.keymap @@ -13,6 +13,7 @@ sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; keymap { diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 71dc04d87a1..4917ca321ed 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -50,7 +50,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -59,13 +59,14 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi index a1b7b64382c..3eefdc6aeed 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi @@ -48,7 +48,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 left_encoder: left_encoder { compatible = "alps,ec11"; label = "L_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; a-gpios = <&pro_micro 4 GPIO_PULL_UP>; @@ -58,16 +58,17 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 right_encoder: right_encoder { compatible = "alps,ec11"; label = "R_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; a-gpios = <&pro_micro 19 GPIO_PULL_UP>; b-gpios = <&pro_micro 18 GPIO_PULL_UP>; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi index 908356c757b..06b3ef3955c 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi @@ -34,7 +34,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) left_encoder: left_encoder { compatible = "alps,ec11"; label = "L_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; a-gpios = <&pro_micro 5 GPIO_PULL_UP>; @@ -44,16 +44,17 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) right_encoder: right_encoder { compatible = "alps,ec11"; label = "R_ENCODER"; - resolution = <4>; + steps = <80>; status = "disabled"; a-gpios = <&pro_micro 18 GPIO_PULL_UP>; b-gpios = <&pro_micro 19 GPIO_PULL_UP>; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi index ab568a0986d..c5483af5476 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi @@ -28,34 +28,35 @@ left_encoder1: left_encoder1 { compatible = "alps,ec11"; label = "L_ENCODER1"; - resolution = <4>; + steps = <80>; status = "disabled"; }; left_encoder2: left_encoder2 { compatible = "alps,ec11"; label = "L_ENCODER2"; - resolution = <4>; + steps = <80>; status = "disabled"; }; right_encoder1: right_encoder1 { compatible = "alps,ec11"; label = "R_ENCODER1"; - resolution = <4>; + steps = <80>; status = "disabled"; }; right_encoder2: right_encoder2 { compatible = "alps,ec11"; label = "R_ENCODER2"; - resolution = <4>; + steps = <80>; status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder1 &right_encoder1>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index fb84c89ed41..c7af200137d 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -49,7 +49,7 @@ label = "Top Row Encoder"; a-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -58,7 +58,7 @@ label = "Encoder 1"; a-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -67,7 +67,7 @@ label = "Encoder 2"; a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -76,7 +76,7 @@ label = "Encoder 3"; a-gpios = <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -85,7 +85,7 @@ label = "Encoder 4"; a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; diff --git a/app/boards/shields/tidbit/tidbit.keymap b/app/boards/shields/tidbit/tidbit.keymap index 2e415bf8f4d..a98a2eaa28e 100644 --- a/app/boards/shields/tidbit/tidbit.keymap +++ b/app/boards/shields/tidbit/tidbit.keymap @@ -17,6 +17,7 @@ sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1_top_row>; + triggers-per-rotation = <20>; }; keymap { diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi index cda0b1a6dae..66ebb7b47f9 100644 --- a/app/boards/shields/zodiark/zodiark.dtsi +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -50,7 +50,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R label = "LEFT_ENCODER"; a-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; @@ -59,13 +59,14 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + steps = <80>; status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; + triggers-per-rotation = <20>; }; }; From c2d220fbdf2c9ae6957d080a47545aa28e3ec275 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 8 Nov 2023 22:05:53 +0000 Subject: [PATCH 0798/1130] refactor(hid): Use proper defines for HID values. * Add report ID defines and use them consistently. * Add defines for main item value flags to avoid magic constants. --- app/include/zmk/hid.h | 51 ++++++++++++++++++++++++++++++++----------- app/src/hid.c | 5 +++-- app/src/hog.c | 4 ++-- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index ab42adaa13e..da6bfa65a68 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -15,13 +15,43 @@ #define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL -#define COLLECTION_REPORT 0x03 +// See https://www.usb.org/sites/default/files/hid1_11.pdf section 6.2.2.4 Main Items + +#define ZMK_HID_MAIN_VAL_DATA (0x00 << 0) +#define ZMK_HID_MAIN_VAL_CONST (0x01 << 0) + +#define ZMK_HID_MAIN_VAL_ARRAY (0x00 << 1) +#define ZMK_HID_MAIN_VAL_VAR (0x01 << 1) + +#define ZMK_HID_MAIN_VAL_ABS (0x00 << 2) +#define ZMK_HID_MAIN_VAL_REL (0x01 << 2) + +#define ZMK_HID_MAIN_VAL_NO_WRAP (0x00 << 3) +#define ZMK_HID_MAIN_VAL_WRAP (0x01 << 3) + +#define ZMK_HID_MAIN_VAL_LIN (0x00 << 4) +#define ZMK_HID_MAIN_VAL_NON_LIN (0x01 << 4) + +#define ZMK_HID_MAIN_VAL_PREFERRED (0x00 << 5) +#define ZMK_HID_MAIN_VAL_NO_PREFERRED (0x01 << 5) + +#define ZMK_HID_MAIN_VAL_NO_NULL (0x00 << 6) +#define ZMK_HID_MAIN_VAL_NULL (0x01 << 6) + +#define ZMK_HID_MAIN_VAL_NON_VOL (0x00 << 7) +#define ZMK_HID_MAIN_VAL_VOL (0x01 << 7) + +#define ZMK_HID_MAIN_VAL_BIT_FIELD (0x00 << 8) +#define ZMK_HID_MAIN_VAL_BUFFERED_BYTES (0x01 << 8) + +#define ZMK_HID_REPORT_ID_KEYBOARD 0x01 +#define ZMK_HID_REPORT_ID_CONSUMER 0x02 static const uint8_t zmk_hid_report_desc[] = { HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), HID_USAGE(HID_USAGE_GD_KEYBOARD), HID_COLLECTION(HID_COLLECTION_APPLICATION), - HID_REPORT_ID(0x01), + HID_REPORT_ID(ZMK_HID_REPORT_ID_KEYBOARD), HID_USAGE_PAGE(HID_USAGE_KEY), HID_USAGE_MIN8(HID_USAGE_KEY_KEYBOARD_LEFTCONTROL), HID_USAGE_MAX8(HID_USAGE_KEY_KEYBOARD_RIGHT_GUI), @@ -30,14 +60,12 @@ static const uint8_t zmk_hid_report_desc[] = { HID_REPORT_SIZE(0x01), HID_REPORT_COUNT(0x08), - /* INPUT (Data,Var,Abs) */ - HID_INPUT(0x02), + HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), HID_USAGE_PAGE(HID_USAGE_KEY), HID_REPORT_SIZE(0x08), HID_REPORT_COUNT(0x01), - /* INPUT (Cnst,Var,Abs) */ - HID_INPUT(0x03), + HID_INPUT(ZMK_HID_MAIN_VAL_CONST | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), HID_USAGE_PAGE(HID_USAGE_KEY), @@ -48,8 +76,7 @@ static const uint8_t zmk_hid_report_desc[] = { HID_USAGE_MAX8(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE), HID_REPORT_SIZE(0x01), HID_REPORT_COUNT(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1), - /* INPUT (Data,Ary,Abs) */ - HID_INPUT(0x02), + HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), #elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) HID_LOGICAL_MIN8(0x00), HID_LOGICAL_MAX16(0xFF, 0x00), @@ -57,8 +84,7 @@ static const uint8_t zmk_hid_report_desc[] = { HID_USAGE_MAX8(0xFF), HID_REPORT_SIZE(0x08), HID_REPORT_COUNT(CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE), - /* INPUT (Data,Ary,Abs) */ - HID_INPUT(0x00), + HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_ARRAY | ZMK_HID_MAIN_VAL_ABS), #else #error "A proper HID report type must be selected" #endif @@ -67,7 +93,7 @@ static const uint8_t zmk_hid_report_desc[] = { HID_USAGE_PAGE(HID_USAGE_CONSUMER), HID_USAGE(HID_USAGE_CONSUMER_CONSUMER_CONTROL), HID_COLLECTION(HID_COLLECTION_APPLICATION), - HID_REPORT_ID(0x02), + HID_REPORT_ID(ZMK_HID_REPORT_ID_CONSUMER), HID_USAGE_PAGE(HID_USAGE_CONSUMER), #if IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC) @@ -86,8 +112,7 @@ static const uint8_t zmk_hid_report_desc[] = { #error "A proper consumer HID report usage range must be selected" #endif HID_REPORT_COUNT(CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE), - /* INPUT (Data,Ary,Abs) */ - HID_INPUT(0x00), + HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_ARRAY | ZMK_HID_MAIN_VAL_ABS), HID_END_COLLECTION, }; diff --git a/app/src/hid.c b/app/src/hid.c index 2a6b5d39da2..58e5824d2e4 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -12,9 +12,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static struct zmk_hid_keyboard_report keyboard_report = { - .report_id = 1, .body = {.modifiers = 0, ._reserved = 0, .keys = {0}}}; + .report_id = ZMK_HID_REPORT_ID_KEYBOARD, .body = {.modifiers = 0, ._reserved = 0, .keys = {0}}}; -static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = {.keys = {0}}}; +static struct zmk_hid_consumer_report consumer_report = {.report_id = ZMK_HID_REPORT_ID_CONSUMER, + .body = {.keys = {0}}}; // Keep track of how often a modifier was pressed. // Only release the modifier if the count is 0. diff --git a/app/src/hog.c b/app/src/hog.c index 930714b092a..9ccfd9d2c0e 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -47,12 +47,12 @@ enum { }; static struct hids_report input = { - .id = 0x01, + .id = ZMK_HID_REPORT_ID_KEYBOARD, .type = HIDS_INPUT, }; static struct hids_report consumer_input = { - .id = 0x02, + .id = ZMK_HID_REPORT_ID_CONSUMER, .type = HIDS_INPUT, }; From 5b49bc10cd7251bb9a90c018410abfc557fa0e9c Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 3 Nov 2023 23:20:42 -0700 Subject: [PATCH 0799/1130] feat(blog): Show all posts on sidebar --- docs/docusaurus.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 701b5b997bb..20e6a75c90f 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -146,6 +146,7 @@ module.exports = { showReadingTime: true, // Please change this to your repo. editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/", + blogSidebarCount: "ALL", }, theme: { customCss: [ From b80c0be0cedf42b58be2fc431b2a673ab9760c64 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 3 Nov 2023 23:20:23 -0700 Subject: [PATCH 0800/1130] feat(blog): Add keymap editor post for spotlight series Co-authored-by: Nick Coutsos --- docs/blog/2023-11-09-keymap-editor.md | 109 ++++++++++++++++++ .../editor-screenshot-dark.png | Bin 0 -> 74997 bytes .../editor-screenshot-light.png | Bin 0 -> 75097 bytes 3 files changed, 109 insertions(+) create mode 100644 docs/blog/2023-11-09-keymap-editor.md create mode 100644 docs/blog/assets/2023-11-09-keymap-editor/editor-screenshot-dark.png create mode 100644 docs/blog/assets/2023-11-09-keymap-editor/editor-screenshot-light.png diff --git a/docs/blog/2023-11-09-keymap-editor.md b/docs/blog/2023-11-09-keymap-editor.md new file mode 100644 index 00000000000..1fe3b86772d --- /dev/null +++ b/docs/blog/2023-11-09-keymap-editor.md @@ -0,0 +1,109 @@ +--- +title: "Community Spotlight Series #1: Keymap Editor" +author: Cem Aksoylar +author_title: Documentation maintainer +author_url: https://github.com/caksoylar +author_image_url: https://avatars.githubusercontent.com/u/7876996 +tags: [keyboards, firmware, community] +--- + +import ThemedImage from '@theme/ThemedImage'; + + + +This blog post is the first in a series of posts where we highlight projects within the ZMK ecosystem that we think are cool and that the users might benefit from knowing about them. We are starting the series with a big one, [Keymap Editor] by [Nick Coutsos](https://github.com/nickcoutsos)! + +In the rest of the post we leave it to Nick himself to introduce the project, detail his goals and motivation in developing such a tool, and talk about the future of the project. Stay tuned for future installments in the series! + +## What is Keymap Editor? + +_[Keymap Editor]_ is a web based graphical editor for ZMK keymaps. It provides a visual way to manage the contents of your keymap and if nothing else offers two critical features: + +1. Automatic formatting of the keymap file, so that bindings arrays remain readable +2. Searchable behaviors, keycodes, commands, etc, so you won't have to remember if it's `LCTL` or `LCTRL` (I just had to double check myself and I guessed wrong, apparently) + +## What can Keymap Editor do? + +- Render [devicetree keymaps](/docs/features/keymaps) using pre-defined, auto-generated, or side-loadable keyboard layouts +- Integrate with a GitHub repo to streamline firmware builds, or FileSystem/Clipboard if you'd still rather build locally +- Edit [combos](/docs/features/combos), [behaviors](/docs/behaviors/key-press), [macros](/docs/behaviors/macros), [conditional layers](/docs/features/conditional-layers) and [rotary encoder bindings](/docs/behaviors/sensor-rotate) +- Manage references: moving a layer or renaming a behavior will look for references throughout your keymap and update them. + +But check back regularly, because I update pretty often. A recent significant achievement was enabling [parameterized macros](/docs/behaviors/macros#parameterized-macros) and tying it in with my existing parameter type resolution so, yeah, you can finally create that reusable macro combining bluetooth profile selection with RGB backlight colour. Or use it for an actual useful thing, even. _(See also: [Using Parameterized Macros in Keymap Editor](https://github.com/nickcoutsos/keymap-editor/wiki/Using-Parameterized-Macros-in-Keymap-Editor))_ + +My goals are, broadly: + +- **Treat code as a first-class entity:** as long as ZMK keymaps are described in devicetree code then an editor needs to produce readable devicetree code. +- **Flexibly support ZMK features:** use of any ZMK keymap feature should theoretically be achievable within the app. In some cases this can mean more initial setup _(See also: [my thoughts on implementing "autoshift"](https://github.com/nickcoutsos/keymap-editor/wiki/Autoshift-using-ZMK-behaviors))_ but having that foundation makes its easier to add shortcuts and niceties — something I do quite often now. +- **Don't get in the way of not-yet-supported features:** If a new ZMK feature is released and the app isn't able to add it natively, you can always edit your keymap file directly. While the app may not _recognize_ the new features, further changes through the app should not break your keymap. + +## History of Keymap Editor + +When I started writing Keymap Editor I had a handwired Dactyl variant running QMK. Manually editing keymap code was fine, but keeping things readable was important to me, and automating that was the best way to ensure consistency. Programmatically modifying source code was beyond me at the time so the first version persisted keymap data in JSON and spat out formatted versions of both the JSON and C keymaps. + +After switching to ZMK I added a few more features, I guess as a pandemic project, and then gradually migrated from generating a templated keymap file to manipulating devicetree syntax directly, and that has made a big difference in adding new ZMK features. + +## Why am I doing this? + +It started out as a useful tool for me. I shared it with the ZMK community and gained a little traction, and then apparently quite a bit of traction — turns out it's useful for a lot of people. + +I'm a software developer because I enjoy building things. Much of my day-to-day work isn't user facing, so seeing how helpful the keymap editor has been for people in the ZMK community is a big motivator to keep improving it. + +## Future plans + +### Runtime updates + +Streamlining the keymap update process is probably top of mind for most users, but that involves a really big _firmware_ feature, and I'm the wrong person to tackle it. + +That said, once there's a protocol I would _absolutely_ be down to integrate it as an additional keymap source. Being able to pull data directly from the keyboard should unlock a lot of possibilities and ease some of the constraints imposed by using devicetree code as a medium. + +### Simplifying behavior use + +I think a lot of people would like to see the concept of behaviors abstracted away for new users and to prompt them with + +- _"When the key is tapped..."_, +- _"When the key is held..."_, +- _"When the key is double-tapped..."_ and so on. + +Users who are less familiar with ZMK's behaviors and how they are composed may find these prompts to be more intuitive, and their answers could be mapped to an appropriate combination of behaviors managed internally by an editor. + +### Uh, what else? + +This has been long enough already, if you're looking for a feature I haven't mentioned don't assume I won't add it. Feel free to make feature requests on the GitHub repo, and I'd be happy to discuss it! + +## About Me And My Keebs + +I like computers and write software. Many in this field enjoy using mechanical +keyboards for their feel or aesthetics, but what piqued my interest was the +Dactyl keyboard. I think, ergonomics aside, I'm more interested in the DIY/maker +aspect than the collecting of keyboards and switches. + +So [I made a Dactyl](https://github.com/nickcoutsos/dactyl-flatpacked/), and +then [I made another Dactyl](https://github.com/nickcoutsos/dactyl-deskmount/) +and I made a third Dactyl that isn't interesting enough to photograph, but now +I'm using ZMK so I left room for 18650 cells. + +That last Dactyl (with MX browns and a cheap blank XDA keycap set) serves me +well the eight or so hours a day I'll spend at my desk, but I also spend a good +deal of time computing on my couch where I'll use... my Macbook's built-in +keyboard. + +In case that's not surprising enough I'll leave you with this: despite all of +the work and testing I've put into the keymap editor project, I've only updated +an actual keymap once in the last year. + +Thank you and good night. + +## More information + +- [Keymap Editor Wiki](https://github.com/nickcoutsos/keymap-editor/wiki) +- [Keymap Editor Discussions](https://github.com/nickcoutsos/keymap-editor/discussions) +- (YouTube video) [Ben Frain's overview of the Keymap Editor](https://www.youtube.com/watch?v=Vy7IoQAe3oU) + +[Keymap Editor]: http://nickcoutsos.github.io/keymap-editor diff --git a/docs/blog/assets/2023-11-09-keymap-editor/editor-screenshot-dark.png b/docs/blog/assets/2023-11-09-keymap-editor/editor-screenshot-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..166edf8ae806520abd95ab0eb7889e3b64fcc1c1 GIT binary patch literal 74997 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
    ~y{` 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

    n{U;|*<63&-Enc$9Bc{ia~fEJN>9 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 literal 0 HcmV?d00001 diff --git a/docs/blog/assets/2023-11-09-keymap-editor/editor-screenshot-light.png b/docs/blog/assets/2023-11-09-keymap-editor/editor-screenshot-light.png new file mode 100644 index 0000000000000000000000000000000000000000..cdaae5c799da8f63a5a4d1af865e63441c949049 GIT binary patch literal 75097 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 +knUbIx+ui8%&y{z+C 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 I^qph>14ln7O8@`> literal 0 HcmV?d00001 From 91aa3378f32f5688329a663fdaba4772e069d548 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Tue, 14 Nov 2023 03:04:04 +0900 Subject: [PATCH 0801/1130] feat(usb): Add boot protocol support * USB boot protocol support * Use a single definition of a boot report, used for regular reports in non-6KRO, and for rollover in all branches. * Handle gaps in the zmk report when producing a boot report in HKRO mode. For .example, if it was 8KRO, it would be possible to have the state 0 0 0 0 0 0 0 17 (by pressing 8 keys, and letting go of the first 7). Copying the first 6 bytes would not show up the single pressed key. * Disable usb status change and callback on SOF events: SOF events were introduced by the boot protocol changes, and required internally by Zephyr's idle support, but are unused within ZMK itself. Ignore them in the usb status callback. --------- Co-authored-by: Andrew Childs --- app/Kconfig | 6 ++- app/include/zmk/hid.h | 28 +++++++++--- app/include/zmk/usb_hid.h | 6 ++- app/src/endpoints.c | 10 ++--- app/src/hid.c | 92 +++++++++++++++++++++++++++++++++++++++ app/src/usb.c | 14 ++++++ app/src/usb_hid.c | 88 ++++++++++++++++++++++++++++++++++++- 7 files changed, 229 insertions(+), 15 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 0dd9316a2a7..798cb7855d5 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -103,6 +103,11 @@ config USB_NUMOF_EP_WRITE_RETRIES config USB_HID_POLL_INTERVAL_MS default 1 +config ZMK_USB_BOOT + bool "USB Boot Protocol Support" + default y + select USB_HID_BOOT_PROTOCOL + select USB_DEVICE_SOF #ZMK_USB endif @@ -575,4 +580,3 @@ osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield" source "Kconfig.zephyr" - diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index da6bfa65a68..afe9210199f 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -116,12 +116,24 @@ static const uint8_t zmk_hid_report_desc[] = { HID_END_COLLECTION, }; -// struct zmk_hid_boot_report -// { -// uint8_t modifiers; -// uint8_t _unused; -// uint8_t keys[6]; -// } __packed; +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + +#define HID_ERROR_ROLLOVER 0x1 +#define HID_BOOT_KEY_LEN 6 + +#if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) && \ + CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE == HID_BOOT_KEY_LEN +typedef struct zmk_hid_keyboard_report_body zmk_hid_boot_report_t; +#else +struct zmk_hid_boot_report { + zmk_mod_flags_t modifiers; + uint8_t _reserved; + uint8_t keys[HID_BOOT_KEY_LEN]; +} __packed; + +typedef struct zmk_hid_boot_report zmk_hid_boot_report_t; +#endif +#endif struct zmk_hid_keyboard_report_body { zmk_mod_flags_t modifiers; @@ -179,3 +191,7 @@ bool zmk_hid_is_pressed(uint32_t usage); struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(); struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); + +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) +zmk_hid_boot_report_t *zmk_hid_get_boot_report(); +#endif diff --git a/app/include/zmk/usb_hid.h b/app/include/zmk/usb_hid.h index 1748835eef2..777f2b48a03 100644 --- a/app/include/zmk/usb_hid.h +++ b/app/include/zmk/usb_hid.h @@ -6,4 +6,8 @@ #pragma once -int zmk_usb_hid_send_report(const uint8_t *report, size_t len); \ No newline at end of file +#include + +int zmk_usb_hid_send_keyboard_report(); +int zmk_usb_hid_send_consumer_report(); +void zmk_usb_hid_set_protocol(uint8_t protocol); diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 138e790fe72..10357d4e02d 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -121,12 +121,10 @@ struct zmk_endpoint_instance zmk_endpoints_selected(void) { } static int send_keyboard_report(void) { - struct zmk_hid_keyboard_report *keyboard_report = zmk_hid_get_keyboard_report(); - switch (current_instance.transport) { #if IS_ENABLED(CONFIG_ZMK_USB) case ZMK_TRANSPORT_USB: { - int err = zmk_usb_hid_send_report((uint8_t *)keyboard_report, sizeof(*keyboard_report)); + int err = zmk_usb_hid_send_keyboard_report(); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); } @@ -136,6 +134,7 @@ static int send_keyboard_report(void) { #if IS_ENABLED(CONFIG_ZMK_BLE) case ZMK_TRANSPORT_BLE: { + struct zmk_hid_keyboard_report *keyboard_report = zmk_hid_get_keyboard_report(); int err = zmk_hog_send_keyboard_report(&keyboard_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); @@ -150,12 +149,10 @@ static int send_keyboard_report(void) { } static int send_consumer_report(void) { - struct zmk_hid_consumer_report *consumer_report = zmk_hid_get_consumer_report(); - switch (current_instance.transport) { #if IS_ENABLED(CONFIG_ZMK_USB) case ZMK_TRANSPORT_USB: { - int err = zmk_usb_hid_send_report((uint8_t *)consumer_report, sizeof(*consumer_report)); + int err = zmk_usb_hid_send_consumer_report(); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); } @@ -165,6 +162,7 @@ static int send_consumer_report(void) { #if IS_ENABLED(CONFIG_ZMK_BLE) case ZMK_TRANSPORT_BLE: { + struct zmk_hid_consumer_report *consumer_report = zmk_hid_get_consumer_report(); int err = zmk_hog_send_consumer_report(&consumer_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); diff --git a/app/src/hid.c b/app/src/hid.c index 58e5824d2e4..689a2361e13 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -17,6 +17,13 @@ static struct zmk_hid_keyboard_report keyboard_report = { static struct zmk_hid_consumer_report consumer_report = {.report_id = ZMK_HID_REPORT_ID_CONSUMER, .body = {.keys = {0}}}; +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + +static zmk_hid_boot_report_t boot_report = {.modifiers = 0, ._reserved = 0, .keys = {0}}; +static uint8_t keys_held = 0; + +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + // Keep track of how often a modifier was pressed. // Only release the modifier if the count is 0. static int explicit_modifier_counts[8] = {0, 0, 0, 0, 0, 0, 0, 0}; @@ -85,15 +92,58 @@ int zmk_hid_unregister_mods(zmk_mod_flags_t modifiers) { return ret; } +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + +static zmk_hid_boot_report_t *boot_report_rollover(uint8_t modifiers) { + boot_report.modifiers = modifiers; + for (int i = 0; i < HID_BOOT_KEY_LEN; i++) { + boot_report.keys[i] = HID_ERROR_ROLLOVER; + } + return &boot_report; +} + +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + #if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) #define TOGGLE_KEYBOARD(code, val) WRITE_BIT(keyboard_report.body.keys[code / 8], code % 8, val) +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) +zmk_hid_boot_report_t *zmk_hid_get_boot_report() { + if (keys_held > HID_BOOT_KEY_LEN) { + return boot_report_rollover(keyboard_report.body.modifiers); + } + + boot_report.modifiers = keyboard_report.body.modifiers; + memset(&boot_report.keys, 0, HID_BOOT_KEY_LEN); + int ix = 0; + uint8_t base_code = 0; + for (int i = 0; i < (ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1) / 8; ++i) { + if (ix == keys_held) { + break; + } + if (!keyboard_report.body.keys[i]) { + continue; + } + base_code = i * 8; + for (int j = 0; j < 8; ++j) { + if (keyboard_report.body.keys[i] & BIT(j)) { + boot_report.keys[ix++] = base_code + j; + } + } + } + return &boot_report; +} +#endif + static inline int select_keyboard_usage(zmk_key_t usage) { if (usage > ZMK_HID_KEYBOARD_NKRO_MAX_USAGE) { return -EINVAL; } TOGGLE_KEYBOARD(usage, 1); +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + ++keys_held; +#endif return 0; } @@ -102,6 +152,9 @@ static inline int deselect_keyboard_usage(zmk_key_t usage) { return -EINVAL; } TOGGLE_KEYBOARD(usage, 0); +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + --keys_held; +#endif return 0; } @@ -125,13 +178,52 @@ static inline bool check_keyboard_usage(zmk_key_t usage) { } \ } +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) +zmk_hid_boot_report_t *zmk_hid_get_boot_report() { + if (keys_held > HID_BOOT_KEY_LEN) { + return boot_report_rollover(keyboard_report.body.modifiers); + } + +#if CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE != HID_BOOT_KEY_LEN + // Form a boot report from a report of different size. + + boot_report.modifiers = keyboard_report.body.modifiers; + + int out = 0; + for (int i = 0; i < CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE; i++) { + uint8_t key = keyboard_report.body.keys[i]; + if (key) { + boot_report.keys[out++] = key; + if (out == keys_held) { + break; + } + } + } + + while (out < HID_BOOT_KEY_LEN) { + boot_report.keys[out++] = 0; + } + + return &boot_report; +#else + return &keyboard_report.body; +#endif /* CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE != HID_BOOT_KEY_LEN */ +} +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + static inline int select_keyboard_usage(zmk_key_t usage) { TOGGLE_KEYBOARD(0U, usage); +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + ++keys_held; +#endif return 0; } static inline int deselect_keyboard_usage(zmk_key_t usage) { TOGGLE_KEYBOARD(usage, 0U); +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + --keys_held; +#endif return 0; } diff --git a/app/src/usb.c b/app/src/usb.c index cf04ef46c8f..9d27900c3c6 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -15,6 +15,8 @@ #include #include +#include + LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static enum usb_dc_status_code usb_status = USB_DC_UNKNOWN; @@ -35,6 +37,7 @@ enum zmk_usb_conn_state zmk_usb_get_conn_state() { case USB_DC_CONFIGURED: case USB_DC_RESUME: case USB_DC_CLEAR_HALT: + case USB_DC_SOF: return ZMK_USB_CONN_HID; case USB_DC_DISCONNECTED: @@ -47,6 +50,17 @@ enum zmk_usb_conn_state zmk_usb_get_conn_state() { } void usb_status_cb(enum usb_dc_status_code status, const uint8_t *params) { + // Start-of-frame events are too frequent and noisy to notify, and they're + // not used within ZMK + if (status == USB_DC_SOF) { + return; + } + +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + if (status == USB_DC_RESET) { + zmk_usb_hid_set_protocol(HID_PROTOCOL_REPORT); + } +#endif usb_status = status; k_work_submit(&usb_status_notifier_work); }; diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index f46c70a0a92..c72bb36c9ef 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -23,11 +23,75 @@ static K_SEM_DEFINE(hid_sem, 1, 1); static void in_ready_cb(const struct device *dev) { k_sem_give(&hid_sem); } +#define HID_GET_REPORT_TYPE_MASK 0xff00 +#define HID_GET_REPORT_ID_MASK 0x00ff + +#define HID_REPORT_TYPE_INPUT 0x100 +#define HID_REPORT_TYPE_OUTPUT 0x200 +#define HID_REPORT_TYPE_FEATURE 0x300 + +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) +static uint8_t hid_protocol = HID_PROTOCOL_REPORT; + +static void set_proto_cb(const struct device *dev, uint8_t protocol) { hid_protocol = protocol; } + +void zmk_usb_hid_set_protocol(uint8_t protocol) { hid_protocol = protocol; } +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + +static uint8_t *get_keyboard_report(size_t *len) { + if (hid_protocol == HID_PROTOCOL_REPORT) { + struct zmk_hid_keyboard_report *report = zmk_hid_get_keyboard_report(); + *len = sizeof(*report); + return (uint8_t *)report; + } +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + zmk_hid_boot_report_t *boot_report = zmk_hid_get_boot_report(); + *len = sizeof(*boot_report); + return (uint8_t *)boot_report; +#endif +} + +static int get_report_cb(const struct device *dev, struct usb_setup_packet *setup, int32_t *len, + uint8_t **data) { + + /* + * 7.2.1 of the HID v1.11 spec is unclear about handling requests for reports that do not exist + * For requested reports that aren't input reports, return -ENOTSUP like the Zephyr subsys does + */ + if ((setup->wValue & HID_GET_REPORT_TYPE_MASK) != HID_REPORT_TYPE_INPUT) { + LOG_ERR("Unsupported report type %d requested", (setup->wValue & HID_GET_REPORT_TYPE_MASK) + << 8); + return -ENOTSUP; + } + + switch (setup->wValue & HID_GET_REPORT_ID_MASK) { + case ZMK_HID_REPORT_ID_KEYBOARD: { + *data = get_keyboard_report(len); + break; + } + case ZMK_HID_REPORT_ID_CONSUMER: { + struct zmk_hid_consumer_report *report = zmk_hid_get_consumer_report(); + *data = (uint8_t *)report; + *len = sizeof(*report); + break; + } + default: + LOG_ERR("Invalid report ID %d requested", setup->wValue & HID_GET_REPORT_ID_MASK); + return -EINVAL; + } + + return 0; +} + static const struct hid_ops ops = { +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + .protocol_change = set_proto_cb, +#endif .int_in_ready = in_ready_cb, + .get_report = get_report_cb, }; -int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { +static int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { switch (zmk_usb_get_status()) { case USB_DC_SUSPEND: return usb_wakeup_request(); @@ -48,6 +112,23 @@ int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { } } +int zmk_usb_hid_send_keyboard_report() { + size_t len; + uint8_t *report = get_keyboard_report(&len); + return zmk_usb_hid_send_report(report, len); +} + +int zmk_usb_hid_send_consumer_report() { +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + if (hid_protocol == HID_PROTOCOL_BOOT) { + return -ENOTSUP; + } +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + + struct zmk_hid_consumer_report *report = zmk_hid_get_consumer_report(); + return zmk_usb_hid_send_report((uint8_t *)report, sizeof(*report)); +} + static int zmk_usb_hid_init(const struct device *_arg) { hid_dev = device_get_binding("HID_0"); if (hid_dev == NULL) { @@ -56,6 +137,11 @@ static int zmk_usb_hid_init(const struct device *_arg) { } usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), &ops); + +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + usb_hid_set_proto_code(hid_dev, HID_BOOT_IFACE_CODE_KEYBOARD); +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + usb_hid_init(hid_dev); return 0; From c1bf35ce1de4b7d99c034300c9a813a0a3d11669 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 10 Nov 2023 22:40:55 -0800 Subject: [PATCH 0802/1130] feat(build): Add support for artifact-name in build.yaml --- .github/workflows/build-user-config.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index c1a97b4d6e0..5aacadca90c 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -55,12 +55,14 @@ jobs: - name: Prepare variables shell: sh -x {0} env: + board: ${{ matrix.board }} shield: ${{ matrix.shield }} + artifact_name: ${{ matrix.artifact-name }} run: | echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}" >> $GITHUB_ENV - echo "display_name=${shield:+$shield - }${{ matrix.board }}" >> $GITHUB_ENV - echo "artifact_name=${shield:+$shield-}${{ matrix.board }}-zmk" >> $GITHUB_ENV + echo "display_name=${shield:+$shield - }${board}" >> $GITHUB_ENV + echo "artifact_name=${artifact_name:-\"${shield:+$shield-}${board}-zmk\"}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 From 2554b5c88f4d304f311d9f29017ac6fbe948ca7a Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 10 Nov 2023 22:08:37 -0800 Subject: [PATCH 0803/1130] fix(docs): Update boards in build examples to common+uf2 ones --- docs/docs/development/build-flash.md | 6 +++--- docs/docs/development/new-shield.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index 94bbcdf93a8..0243983c9d8 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -65,7 +65,7 @@ west build -b planck_rev6 When building for a new board and/or shield after having built one previously, you may need to enable the pristine build option. This option removes all existing files in the build directory before regenerating them, and can be enabled by adding either --pristine or -p to the command: ```sh -west build -p -b proton_c -- -DSHIELD=kyria_left +west build -p -b nice_nano_v2 -- -DSHIELD=kyria_left ``` ### Building For Split Keyboards @@ -77,13 +77,13 @@ For split keyboards, you will have to build and flash each side separately the f By default, the `build` command outputs a single .uf2 file named `zmk.uf2` so building left and then right immediately after will overwrite your left firmware. In addition, you will need to pristine build each side to ensure the correct files are used. To avoid having to pristine build every time and separate the left and right build files, we recommend setting up separate build directories for each half. You can do this by using the `-d` parameter and first building left into `build/left`: ```sh -west build -d build/left -b nice_nano -- -DSHIELD=kyria_left +west build -d build/left -b nice_nano_v2 -- -DSHIELD=kyria_left ``` and then building right into `build/right`: ```sh -west build -d build/right -b nice_nano -- -DSHIELD=kyria_right +west build -d build/right -b nice_nano_v2 -- -DSHIELD=kyria_right ``` This produces `left` and `right` subfolders under the `build` directory and two separate .uf2 files. For future work on a specific half, use the `-d` parameter again to ensure you are building into the correct location. diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 0771122985b..7f6a8644e11 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -493,7 +493,7 @@ Once you've fully created the new keyboard shield definition, you should be able to test with a build command like: ```sh -west build --pristine -b proton_c -- -DSHIELD=my_board +west build --pristine -b nice_nano_v2 -- -DSHIELD=my_board ``` The above build command generates `build/zephyr/zmk.uf2`. If your board From a5c3edd51b46f45a7fdf9ff157f69296d7a9fddb Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 10 Nov 2023 22:22:05 -0800 Subject: [PATCH 0804/1130] refactor(docs): Remove local build section in customization --- docs/docs/customization.md | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 4f75e743a66..a68e8595fa9 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -11,15 +11,15 @@ This makes flashing ZMK to your keyboard much easier, especially because you don By default, the `zmk-config` folder should contain two files: -- `.conf` -- `.keymap` +- `.conf` +- `.keymap` However, your config folder can also be modified to include a `boards/` directory for keymaps and configurations for multiple boards/shields outside of the default keyboard setting definitions. ## Configuration Changes -The setup script creates a `config/.conf` file that allows you to add additional configuration options to +The setup script creates a `config/.conf` file that allows you to add additional configuration options to control what features and options are built into your firmware. Opening that file with your text editor will allow you to see the various config settings that can be commented/uncommented to modify how your firmware is built. @@ -27,7 +27,7 @@ Refer to the [Configuration](/docs/config) documentation for more details on thi ## Keymap -Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. +Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. Refer to the [Keymap](features/keymaps.md) documentation to learn more. ## Publishing @@ -39,18 +39,11 @@ GitHub Actions job to build your firmware which you can download once it complet If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get these steps right. ::: -## Building from a local `zmk` fork using `zmk-config` - -[As outlined here](development/build-flash.md), firmware comes in the form of .uf2 files, which can be built locally using the command `west build`. Normally, -`west build` will default to using the in-tree .keymap and .conf files found in your local copy of the `zmk` repository. However, you can append the command, `-DZMK_CONFIG="C:/the/absolute/path/config"` to `west build` in order to use the contents of your `zmk-config` folder instead of the -default keyboard settings. -**Notice that this path should point to the folder labelled `config` within your `zmk-config` folder.** - -For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: - -```bash -west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" -``` +:::note +It is also possible to build firmware locally on your computer by following the [toolchain setup](development/setup.md) and +[building instructions](development/build-flash.md), which includes pointers to +[building using your `zmk-config` folder](development/build-flash.md#building-from-zmk-config-folder). +::: ## Flashing Your Changes From 7b4b5d4ff20957c3cba0d3e3eb679dd45c3181f5 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 10 Nov 2023 22:01:31 -0800 Subject: [PATCH 0805/1130] fix(docs): Fix debouncing driver support note --- docs/docs/features/debouncing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md index cbea7092884..38ded2d7952 100644 --- a/docs/docs/features/debouncing.md +++ b/docs/docs/features/debouncing.md @@ -20,7 +20,7 @@ socket or using some sharp tweezers to bend the contacts back together. ## Debounce Configuration :::note -Currently only the `zmk,kscan-gpio-matrix` driver supports these options. The other drivers have not yet been updated to use the new debouncing code. +Currently the `zmk,kscan-gpio-matrix` and `zmk,kscan-gpio-direct` [drivers](../config/kscan.md) supports these options, while `zmk,kscan-gpio-demux` driver does not. ::: ### Global Options From 964c54139dcc5fca466eb2a6dc72b4092c7152a0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 13 Nov 2023 11:00:28 -0800 Subject: [PATCH 0806/1130] fix(usb): Tweak how ZMK_USB gets enabled. * Previous version of multiple overrides of the default value of ZMK_USB were problematic. Move to using board _defconfig files for the defaults for those, along with proper `depends on` for ZMK_USB that accounts for split and split roles. --- app/Kconfig | 13 ++++++++----- app/boards/arm/bdn9/Kconfig.defconfig | 3 --- app/boards/arm/bdn9/bdn9_rev2_defconfig | 1 + app/boards/arm/bluemicro840/Kconfig.defconfig | 6 ------ .../arm/bluemicro840/bluemicro840_v1_defconfig | 3 +++ app/boards/arm/bt60/Kconfig.defconfig | 6 ------ app/boards/arm/bt60/bt60_v1_defconfig | 3 +++ app/boards/arm/bt60/bt60_v1_hs_defconfig | 3 +++ app/boards/arm/ckp/Kconfig.defconfig | 6 ------ app/boards/arm/ckp/bt60_v2_defconfig | 3 +++ app/boards/arm/ckp/bt65_v1_defconfig | 3 +++ app/boards/arm/ckp/bt75_v1_defconfig | 3 +++ app/boards/arm/corneish_zen/Kconfig.defconfig | 6 ------ .../arm/corneish_zen/corneish_zen_v1_left_defconfig | 3 +++ .../corneish_zen/corneish_zen_v1_right_defconfig | 3 +++ .../arm/corneish_zen/corneish_zen_v2_left_defconfig | 3 +++ .../corneish_zen/corneish_zen_v2_right_defconfig | 3 +++ app/boards/arm/dz60rgb/Kconfig.defconfig | 3 --- app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig | 2 ++ app/boards/arm/ferris/Kconfig.defconfig | 3 --- app/boards/arm/kbdfans_tofu65/Kconfig.defconfig | 3 --- .../arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig | 2 ++ app/boards/arm/mikoto/Kconfig.defconfig | 6 ------ app/boards/arm/mikoto/mikoto_520_defconfig | 3 +++ app/boards/arm/nice60/Kconfig.defconfig | 6 ------ app/boards/arm/nice60/nice60_defconfig | 4 ++++ app/boards/arm/nice_nano/Kconfig.defconfig | 6 ------ app/boards/arm/nice_nano/nice_nano_defconfig | 3 +++ app/boards/arm/nice_nano/nice_nano_v2_defconfig | 3 +++ app/boards/arm/nrf52840_m2/Kconfig.defconfig | 6 ------ app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig | 3 +++ app/boards/arm/nrfmicro/Kconfig.defconfig | 6 ------ app/boards/arm/nrfmicro/nrfmicro_11_defconfig | 3 +++ .../arm/nrfmicro/nrfmicro_11_flipped_defconfig | 3 +++ app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig | 3 +++ app/boards/arm/nrfmicro/nrfmicro_13_defconfig | 3 +++ app/boards/arm/pillbug/Kconfig.defconfig | 6 ------ app/boards/arm/pillbug/pillbug_defconfig | 3 +++ app/boards/arm/planck/Kconfig.defconfig | 3 --- app/boards/arm/planck/planck_rev6_defconfig | 2 ++ app/boards/arm/preonic/Kconfig.defconfig | 3 --- app/boards/arm/preonic/preonic_rev3_defconfig | 2 ++ app/boards/arm/proton_c/Kconfig.defconfig | 3 --- app/boards/arm/proton_c/proton_c_defconfig | 1 + app/boards/arm/puchi_ble/Kconfig.defconfig | 6 ------ app/boards/arm/puchi_ble/puchi_ble_v1_defconfig | 3 +++ app/boards/arm/s40nc/Kconfig.defconfig | 6 ------ app/boards/arm/s40nc/s40nc_defconfig | 3 +++ app/boards/shields/nibble/Kconfig.defconfig | 4 ---- app/src/split/bluetooth/Kconfig | 3 --- 50 files changed, 85 insertions(+), 105 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 798cb7855d5..282339e3e40 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -91,10 +91,18 @@ menu "Output Types" config ZMK_USB bool "USB" + depends on (!ZMK_SPLIT || (ZMK_SPLIT && ZMK_SPLIT_ROLE_CENTRAL)) select USB select USB_DEVICE_STACK select USB_DEVICE_HID +config ZMK_USB_BOOT + bool "USB Boot Protocol Support" + default y + depends on ZMK_USB + select USB_HID_BOOT_PROTOCOL + select USB_DEVICE_SOF + if ZMK_USB config USB_NUMOF_EP_WRITE_RETRIES @@ -103,11 +111,6 @@ config USB_NUMOF_EP_WRITE_RETRIES config USB_HID_POLL_INTERVAL_MS default 1 -config ZMK_USB_BOOT - bool "USB Boot Protocol Support" - default y - select USB_HID_BOOT_PROTOCOL - select USB_DEVICE_SOF #ZMK_USB endif diff --git a/app/boards/arm/bdn9/Kconfig.defconfig b/app/boards/arm/bdn9/Kconfig.defconfig index d1c82811d28..96b7fe55329 100644 --- a/app/boards/arm/bdn9/Kconfig.defconfig +++ b/app/boards/arm/bdn9/Kconfig.defconfig @@ -11,9 +11,6 @@ config BOARD config ZMK_KEYBOARD_NAME default "BDN9 Rev2" -config ZMK_USB - default y - config ZMK_RGB_UNDERGLOW select SPI select WS2812_STRIP diff --git a/app/boards/arm/bdn9/bdn9_rev2_defconfig b/app/boards/arm/bdn9/bdn9_rev2_defconfig index 24dddb932d5..05087eeb4c6 100644 --- a/app/boards/arm/bdn9/bdn9_rev2_defconfig +++ b/app/boards/arm/bdn9/bdn9_rev2_defconfig @@ -23,3 +23,4 @@ CONFIG_HEAP_MEM_POOL_SIZE=1024 # clock configuration CONFIG_CLOCK_CONTROL=y +CONFIG_ZMK_USB=y \ No newline at end of file diff --git a/app/boards/arm/bluemicro840/Kconfig.defconfig b/app/boards/arm/bluemicro840/Kconfig.defconfig index 732805ae199..ff61ec92f81 100644 --- a/app/boards/arm/bluemicro840/Kconfig.defconfig +++ b/app/boards/arm/bluemicro840/Kconfig.defconfig @@ -18,10 +18,4 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_BLUEMICRO840_V1 diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig index 99d51a94334..3e13e77d0b5 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig +++ b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig @@ -21,3 +21,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y diff --git a/app/boards/arm/bt60/Kconfig.defconfig b/app/boards/arm/bt60/Kconfig.defconfig index e7cf1a48cff..c44901bd8d4 100644 --- a/app/boards/arm/bt60/Kconfig.defconfig +++ b/app/boards/arm/bt60/Kconfig.defconfig @@ -19,12 +19,6 @@ endif # USB config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - config ZMK_KEYBOARD_NAME default "BT60" diff --git a/app/boards/arm/bt60/bt60_v1_defconfig b/app/boards/arm/bt60/bt60_v1_defconfig index 813dcecea5a..04adb8a3cd8 100644 --- a/app/boards/arm/bt60/bt60_v1_defconfig +++ b/app/boards/arm/bt60/bt60_v1_defconfig @@ -23,3 +23,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/bt60/bt60_v1_hs_defconfig b/app/boards/arm/bt60/bt60_v1_hs_defconfig index f2327fd3f42..f16d82ac41d 100644 --- a/app/boards/arm/bt60/bt60_v1_hs_defconfig +++ b/app/boards/arm/bt60/bt60_v1_hs_defconfig @@ -23,3 +23,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/ckp/Kconfig.defconfig b/app/boards/arm/ckp/Kconfig.defconfig index d5bf4ded1eb..376d4619fde 100644 --- a/app/boards/arm/ckp/Kconfig.defconfig +++ b/app/boards/arm/ckp/Kconfig.defconfig @@ -25,10 +25,4 @@ endif # USB config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_BT60_V2 || BOARD_BT65_V1 || BOARD_BT75_V1 diff --git a/app/boards/arm/ckp/bt60_v2_defconfig b/app/boards/arm/ckp/bt60_v2_defconfig index f6dc7e09a68..fd1ae985995 100644 --- a/app/boards/arm/ckp/bt60_v2_defconfig +++ b/app/boards/arm/ckp/bt60_v2_defconfig @@ -36,3 +36,6 @@ CONFIG_WS2812_STRIP=y CONFIG_SPI=y CONFIG_BT_CTLR_TX_PWR_PLUS_8=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y diff --git a/app/boards/arm/ckp/bt65_v1_defconfig b/app/boards/arm/ckp/bt65_v1_defconfig index e40ae2dbb54..be5f17eb54f 100644 --- a/app/boards/arm/ckp/bt65_v1_defconfig +++ b/app/boards/arm/ckp/bt65_v1_defconfig @@ -36,3 +36,6 @@ CONFIG_WS2812_STRIP=y CONFIG_SPI=y CONFIG_BT_CTLR_TX_PWR_PLUS_8=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/ckp/bt75_v1_defconfig b/app/boards/arm/ckp/bt75_v1_defconfig index 510d6994dc1..b4d85338aec 100644 --- a/app/boards/arm/ckp/bt75_v1_defconfig +++ b/app/boards/arm/ckp/bt75_v1_defconfig @@ -36,3 +36,6 @@ CONFIG_WS2812_STRIP=y CONFIG_SPI=y CONFIG_BT_CTLR_TX_PWR_PLUS_8=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig index feab3eca773..f3cc959edd0 100644 --- a/app/boards/arm/corneish_zen/Kconfig.defconfig +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -25,12 +25,6 @@ config ZMK_SPLIT config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - if USB config USB_NRFX diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig index a71ac680bb6..d738255601b 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig @@ -39,6 +39,9 @@ CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig index f099392ff6a..5284159d83f 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig @@ -39,6 +39,9 @@ CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig index 3b7b4d9e276..29a5f878ac2 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -35,6 +35,9 @@ CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index b361b08d9a0..506aa67e1b1 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -35,6 +35,9 @@ CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 diff --git a/app/boards/arm/dz60rgb/Kconfig.defconfig b/app/boards/arm/dz60rgb/Kconfig.defconfig index 2e30e3d048d..6e0592569de 100644 --- a/app/boards/arm/dz60rgb/Kconfig.defconfig +++ b/app/boards/arm/dz60rgb/Kconfig.defconfig @@ -8,7 +8,4 @@ if BOARD_DZ60RGB_REV1 config ZMK_KEYBOARD_NAME default "DZ60RGB Rev 1" -config ZMK_USB - default y - endif # BOARD_DZ60RGB_REV1 diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig b/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig index 33840f966ef..53bc0e11034 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig @@ -25,3 +25,5 @@ CONFIG_CLOCK_STM32_PLL_MULTIPLIER=9 CONFIG_CLOCK_STM32_AHB_PRESCALER=1 CONFIG_CLOCK_STM32_APB1_PRESCALER=2 CONFIG_CLOCK_STM32_APB2_PRESCALER=1 + +CONFIG_ZMK_USB=y \ No newline at end of file diff --git a/app/boards/arm/ferris/Kconfig.defconfig b/app/boards/arm/ferris/Kconfig.defconfig index 7cf43bcb9e6..420ea01fab9 100644 --- a/app/boards/arm/ferris/Kconfig.defconfig +++ b/app/boards/arm/ferris/Kconfig.defconfig @@ -11,9 +11,6 @@ config BOARD config ZMK_KEYBOARD_NAME default "Ferris rev 0.2" -config ZMK_USB - default y - config ZMK_KSCAN_MATRIX_POLLING default y diff --git a/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig b/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig index 993d51423b5..0444f510105 100644 --- a/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig +++ b/app/boards/arm/kbdfans_tofu65/Kconfig.defconfig @@ -9,7 +9,4 @@ config ZMK_KEYBOARD_NAME config RP2_FLASH_W25Q080 default y -config ZMK_USB - default y - endif # BOARD_KBDFANS_TOFU65_V2 diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig index cf546683452..57014acf37a 100644 --- a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2_defconfig @@ -18,3 +18,5 @@ CONFIG_USE_DT_CODE_PARTITION=y # Output UF2 by default, native bootloader supports it. CONFIG_BUILD_OUTPUT_UF2=y + +CONFIG_ZMK_USB=y \ No newline at end of file diff --git a/app/boards/arm/mikoto/Kconfig.defconfig b/app/boards/arm/mikoto/Kconfig.defconfig index 8c7746dbb8e..8117cc87329 100644 --- a/app/boards/arm/mikoto/Kconfig.defconfig +++ b/app/boards/arm/mikoto/Kconfig.defconfig @@ -21,12 +21,6 @@ endif # USB config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - config PINMUX default y diff --git a/app/boards/arm/mikoto/mikoto_520_defconfig b/app/boards/arm/mikoto/mikoto_520_defconfig index c755633e4cf..354fa56aa34 100644 --- a/app/boards/arm/mikoto/mikoto_520_defconfig +++ b/app/boards/arm/mikoto/mikoto_520_defconfig @@ -21,3 +21,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nice60/Kconfig.defconfig b/app/boards/arm/nice60/Kconfig.defconfig index f3347df9c6e..76818e87b0f 100644 --- a/app/boards/arm/nice60/Kconfig.defconfig +++ b/app/boards/arm/nice60/Kconfig.defconfig @@ -16,10 +16,4 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_NICE60 diff --git a/app/boards/arm/nice60/nice60_defconfig b/app/boards/arm/nice60/nice60_defconfig index 48936a04704..fabcb7eddf4 100644 --- a/app/boards/arm/nice60/nice60_defconfig +++ b/app/boards/arm/nice60/nice60_defconfig @@ -28,3 +28,7 @@ CONFIG_WS2812_STRIP=y CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=160 CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3 + + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nice_nano/Kconfig.defconfig b/app/boards/arm/nice_nano/Kconfig.defconfig index ada59dd9f2e..63102a571f9 100644 --- a/app/boards/arm/nice_nano/Kconfig.defconfig +++ b/app/boards/arm/nice_nano/Kconfig.defconfig @@ -16,10 +16,4 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_NICE_NANO || BOARD_NICE_NANO_V2 diff --git a/app/boards/arm/nice_nano/nice_nano_defconfig b/app/boards/arm/nice_nano/nice_nano_defconfig index a837b7d2875..6b7fcab252d 100644 --- a/app/boards/arm/nice_nano/nice_nano_defconfig +++ b/app/boards/arm/nice_nano/nice_nano_defconfig @@ -22,3 +22,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nice_nano/nice_nano_v2_defconfig b/app/boards/arm/nice_nano/nice_nano_v2_defconfig index 667cf71aca2..6b5044e5ef0 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2_defconfig +++ b/app/boards/arm/nice_nano/nice_nano_v2_defconfig @@ -22,3 +22,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_BLE=y +CONFIG_ZMK_USB=y \ No newline at end of file diff --git a/app/boards/arm/nrf52840_m2/Kconfig.defconfig b/app/boards/arm/nrf52840_m2/Kconfig.defconfig index 50a049bb926..a5227fc0a10 100644 --- a/app/boards/arm/nrf52840_m2/Kconfig.defconfig +++ b/app/boards/arm/nrf52840_m2/Kconfig.defconfig @@ -16,10 +16,4 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_NRF52840_M2 diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig b/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig index b7671ba9f12..93eef9e6ef8 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig @@ -20,3 +20,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index 7d752ac6ee6..659e9c5c173 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -18,12 +18,6 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - config PINMUX default y diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig index b51929b0c8f..5ba4d6e1478 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig @@ -23,3 +23,6 @@ CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig index 335a2d75b12..31cbfc9ae75 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig @@ -23,3 +23,6 @@ CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig index 4af1ff86a7c..f459f35636a 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833_defconfig @@ -23,3 +23,6 @@ CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig index 43ba40e2dc3..9ffb2766a66 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig +++ b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig @@ -23,3 +23,6 @@ CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/pillbug/Kconfig.defconfig b/app/boards/arm/pillbug/Kconfig.defconfig index 8657f8aea30..48427ed3ec2 100644 --- a/app/boards/arm/pillbug/Kconfig.defconfig +++ b/app/boards/arm/pillbug/Kconfig.defconfig @@ -16,10 +16,4 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_PILLBUG diff --git a/app/boards/arm/pillbug/pillbug_defconfig b/app/boards/arm/pillbug/pillbug_defconfig index 9781cf995cc..9ec72c417ef 100644 --- a/app/boards/arm/pillbug/pillbug_defconfig +++ b/app/boards/arm/pillbug/pillbug_defconfig @@ -23,3 +23,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/planck/Kconfig.defconfig b/app/boards/arm/planck/Kconfig.defconfig index d1304da0588..69dea84ce54 100644 --- a/app/boards/arm/planck/Kconfig.defconfig +++ b/app/boards/arm/planck/Kconfig.defconfig @@ -8,9 +8,6 @@ if BOARD_PLANCK_REV6 config ZMK_KEYBOARD_NAME default "Planck V6" -config ZMK_USB - default y - config ZMK_KSCAN_MATRIX_POLLING default y diff --git a/app/boards/arm/planck/planck_rev6_defconfig b/app/boards/arm/planck/planck_rev6_defconfig index a78ea45de88..74050f3d9c1 100644 --- a/app/boards/arm/planck/planck_rev6_defconfig +++ b/app/boards/arm/planck/planck_rev6_defconfig @@ -15,3 +15,5 @@ CONFIG_GPIO=y # clock configuration CONFIG_CLOCK_CONTROL=y + +CONFIG_ZMK_USB=y diff --git a/app/boards/arm/preonic/Kconfig.defconfig b/app/boards/arm/preonic/Kconfig.defconfig index 186c88bc5e3..86b2e3d0ef4 100644 --- a/app/boards/arm/preonic/Kconfig.defconfig +++ b/app/boards/arm/preonic/Kconfig.defconfig @@ -8,9 +8,6 @@ if BOARD_PREONIC_REV3 config ZMK_KEYBOARD_NAME default "Preonic V3" -config ZMK_USB - default y - config ZMK_KSCAN_MATRIX_POLLING default y diff --git a/app/boards/arm/preonic/preonic_rev3_defconfig b/app/boards/arm/preonic/preonic_rev3_defconfig index ab19d10f6f8..e063827a4e2 100644 --- a/app/boards/arm/preonic/preonic_rev3_defconfig +++ b/app/boards/arm/preonic/preonic_rev3_defconfig @@ -13,3 +13,5 @@ CONFIG_GPIO=y # clock configuration CONFIG_CLOCK_CONTROL=y + +CONFIG_ZMK_USB=y \ No newline at end of file diff --git a/app/boards/arm/proton_c/Kconfig.defconfig b/app/boards/arm/proton_c/Kconfig.defconfig index f5089119c13..eed4b830442 100644 --- a/app/boards/arm/proton_c/Kconfig.defconfig +++ b/app/boards/arm/proton_c/Kconfig.defconfig @@ -8,7 +8,4 @@ if BOARD_QMK_PROTON_C config BOARD default "proton_c" -config ZMK_USB - default y - endif # BOARD_QMK_PROTON_C diff --git a/app/boards/arm/proton_c/proton_c_defconfig b/app/boards/arm/proton_c/proton_c_defconfig index 32e1ade9604..c552bf15df9 100644 --- a/app/boards/arm/proton_c/proton_c_defconfig +++ b/app/boards/arm/proton_c/proton_c_defconfig @@ -17,3 +17,4 @@ CONFIG_GPIO=y # clock configuration CONFIG_CLOCK_CONTROL=y +CONFIG_ZMK_USB=y \ No newline at end of file diff --git a/app/boards/arm/puchi_ble/Kconfig.defconfig b/app/boards/arm/puchi_ble/Kconfig.defconfig index c4fca8e1f31..3533104b2a5 100644 --- a/app/boards/arm/puchi_ble/Kconfig.defconfig +++ b/app/boards/arm/puchi_ble/Kconfig.defconfig @@ -16,12 +16,6 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - config PINMUX default y diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig b/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig index 1adb9217c8a..ab197df0a80 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig +++ b/app/boards/arm/puchi_ble/puchi_ble_v1_defconfig @@ -25,3 +25,6 @@ CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/arm/s40nc/Kconfig.defconfig b/app/boards/arm/s40nc/Kconfig.defconfig index 11e62cf54c5..f892f392d5c 100644 --- a/app/boards/arm/s40nc/Kconfig.defconfig +++ b/app/boards/arm/s40nc/Kconfig.defconfig @@ -19,10 +19,4 @@ endif # USB config BT_CTLR default BT -config ZMK_BLE - default y - -config ZMK_USB - default y - endif # BOARD_S40NC diff --git a/app/boards/arm/s40nc/s40nc_defconfig b/app/boards/arm/s40nc/s40nc_defconfig index 31972781db1..b523ceb80b7 100644 --- a/app/boards/arm/s40nc/s40nc_defconfig +++ b/app/boards/arm/s40nc/s40nc_defconfig @@ -20,3 +20,6 @@ CONFIG_SETTINGS_NVS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y + +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y \ No newline at end of file diff --git a/app/boards/shields/nibble/Kconfig.defconfig b/app/boards/shields/nibble/Kconfig.defconfig index 31ac7cfe7dd..19bddec77b8 100644 --- a/app/boards/shields/nibble/Kconfig.defconfig +++ b/app/boards/shields/nibble/Kconfig.defconfig @@ -6,10 +6,6 @@ if SHIELD_NIBBLE config ZMK_KEYBOARD_NAME default "NIBBLE" -config ZMK_USB - default y - - if ZMK_DISPLAY config I2C diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index 5919010ba31..858e7308fef 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -62,9 +62,6 @@ config ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE int "Max number of key position state events to queue to send to the central" default 10 -config ZMK_USB - default n - config BT_MAX_PAIRED default 1 From afe65ead9c0f1418fa34bfa93325d0cce33c6c2c Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 13 Nov 2023 16:50:00 -0500 Subject: [PATCH 0807/1130] Revert "feat(build): Add support for artifact-name in build.yaml" This reverts commit c1bf35ce1de4b7d99c034300c9a813a0a3d11669. --- .github/workflows/build-user-config.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 5aacadca90c..c1a97b4d6e0 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -55,14 +55,12 @@ jobs: - name: Prepare variables shell: sh -x {0} env: - board: ${{ matrix.board }} shield: ${{ matrix.shield }} - artifact_name: ${{ matrix.artifact-name }} run: | echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}" >> $GITHUB_ENV - echo "display_name=${shield:+$shield - }${board}" >> $GITHUB_ENV - echo "artifact_name=${artifact_name:-\"${shield:+$shield-}${board}-zmk\"}" >> $GITHUB_ENV + echo "display_name=${shield:+$shield - }${{ matrix.board }}" >> $GITHUB_ENV + echo "artifact_name=${shield:+$shield-}${{ matrix.board }}-zmk" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 From 2a1904e184c5802a50c13f2d0ceca63df7c1b7df Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Tue, 14 Nov 2023 16:08:58 +0900 Subject: [PATCH 0808/1130] feat(boards): Add Glove80 to boards * Add board definition for MoErgo Glove80 --- app/boards/arm/glove80/CMakeLists.txt | 3 + app/boards/arm/glove80/Kconfig | 8 ++ app/boards/arm/glove80/Kconfig.board | 10 ++ app/boards/arm/glove80/Kconfig.defconfig | 65 ++++++++++ app/boards/arm/glove80/board.cmake | 6 + app/boards/arm/glove80/glove80.dtsi | 107 ++++++++++++++++ app/boards/arm/glove80/glove80.keymap | 114 ++++++++++++++++++ app/boards/arm/glove80/glove80.yaml | 19 +++ app/boards/arm/glove80/glove80.zmk.yml | 16 +++ .../arm/glove80/glove80_lh-pinctrl.dtsi | 47 ++++++++ app/boards/arm/glove80/glove80_lh.dts | 101 ++++++++++++++++ app/boards/arm/glove80/glove80_lh.keymap | 7 ++ app/boards/arm/glove80/glove80_lh_defconfig | 92 ++++++++++++++ .../arm/glove80/glove80_rh-pinctrl.dtsi | 48 ++++++++ app/boards/arm/glove80/glove80_rh.dts | 108 +++++++++++++++++ app/boards/arm/glove80/glove80_rh.keymap | 7 ++ app/boards/arm/glove80/glove80_rh_defconfig | 89 ++++++++++++++ app/boards/arm/glove80/readme.md | 13 ++ app/boards/arm/glove80/usb_serial_number.c | 67 ++++++++++ 19 files changed, 927 insertions(+) create mode 100644 app/boards/arm/glove80/CMakeLists.txt create mode 100644 app/boards/arm/glove80/Kconfig create mode 100644 app/boards/arm/glove80/Kconfig.board create mode 100644 app/boards/arm/glove80/Kconfig.defconfig create mode 100644 app/boards/arm/glove80/board.cmake create mode 100644 app/boards/arm/glove80/glove80.dtsi create mode 100644 app/boards/arm/glove80/glove80.keymap create mode 100644 app/boards/arm/glove80/glove80.yaml create mode 100644 app/boards/arm/glove80/glove80.zmk.yml create mode 100644 app/boards/arm/glove80/glove80_lh-pinctrl.dtsi create mode 100644 app/boards/arm/glove80/glove80_lh.dts create mode 100644 app/boards/arm/glove80/glove80_lh.keymap create mode 100644 app/boards/arm/glove80/glove80_lh_defconfig create mode 100644 app/boards/arm/glove80/glove80_rh-pinctrl.dtsi create mode 100644 app/boards/arm/glove80/glove80_rh.dts create mode 100644 app/boards/arm/glove80/glove80_rh.keymap create mode 100644 app/boards/arm/glove80/glove80_rh_defconfig create mode 100644 app/boards/arm/glove80/readme.md create mode 100644 app/boards/arm/glove80/usb_serial_number.c diff --git a/app/boards/arm/glove80/CMakeLists.txt b/app/boards/arm/glove80/CMakeLists.txt new file mode 100644 index 00000000000..3eb2cd276ea --- /dev/null +++ b/app/boards/arm/glove80/CMakeLists.txt @@ -0,0 +1,3 @@ +zephyr_library() +zephyr_library_sources(usb_serial_number.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) diff --git a/app/boards/arm/glove80/Kconfig b/app/boards/arm/glove80/Kconfig new file mode 100644 index 00000000000..f1c12e7e314 --- /dev/null +++ b/app/boards/arm/glove80/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_GLOVE80_LH || BOARD_GLOVE80_RH) diff --git a/app/boards/arm/glove80/Kconfig.board b/app/boards/arm/glove80/Kconfig.board new file mode 100644 index 00000000000..f689103710f --- /dev/null +++ b/app/boards/arm/glove80/Kconfig.board @@ -0,0 +1,10 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_GLOVE80_LH + bool "Glove80 LH" + depends on SOC_NRF52840_QIAA + +config BOARD_GLOVE80_RH + bool "Glove80 RH" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/glove80/Kconfig.defconfig b/app/boards/arm/glove80/Kconfig.defconfig new file mode 100644 index 00000000000..e1c452a5444 --- /dev/null +++ b/app/boards/arm/glove80/Kconfig.defconfig @@ -0,0 +1,65 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_GLOVE80_LH + +config BOARD + default "glove80 lh" + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + default y + +endif # BOARD_GLOVE80_LH + +if BOARD_GLOVE80_RH + +config BOARD + default "glove80 rh" + +endif # BOARD_GLOVE80_RH + +if BOARD_GLOVE80_LH || BOARD_GLOVE80_RH + +config ZMK_SPLIT + default y + +config BT_CTLR + default BT + +config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS + default 5 + +config PINCTRL + default y + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +if ZMK_BACKLIGHT + +config PWM + default y + +config LED_PWM + default y + +endif # ZMK_BACKLIGHT + +if ZMK_RGB_UNDERGLOW + +config SPI + default y + +config WS2812_STRIP + default y + +endif # ZMK_RGB_UNDERGLOW + +endif # BOARD_GLOVE80_LH || BOARD_GLOVE80_RH diff --git a/app/boards/arm/glove80/board.cmake b/app/boards/arm/glove80/board.cmake new file mode 100644 index 00000000000..36030db7b10 --- /dev/null +++ b/app/boards/arm/glove80/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/glove80/glove80.dtsi b/app/boards/arm/glove80/glove80.dtsi new file mode 100644 index 00000000000..f3f58cf7b42 --- /dev/null +++ b/app/boards/arm/glove80/glove80.dtsi @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(0,6) RC(1,6) RC(2,6) RC(2,7) RC(1,7) RC(0,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(3,6) RC(4,6) RC(5,6) RC(5,7) RC(4,7) RC(3,7) RC(5,9) RC(5,10) RC(5,11) RC(5,12) RC(5,13) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + debounce-press-ms = <4>; + debounce-release-ms = <20>; + }; + +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + label = "CDC_ACM_0"; + }; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/app/boards/arm/glove80/glove80.keymap b/app/boards/arm/glove80/glove80.keymap new file mode 100644 index 00000000000..6c920ca1dcd --- /dev/null +++ b/app/boards/arm/glove80/glove80.keymap @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +// layers +#define DEFAULT 0 +#define LOWER 1 +#define MAGIC 2 + +/ { + behaviors { + // For the "layer" key, it'd nice to be able to use it as either a shift or a toggle. + // Configure it as a tap dance, so the first tap (or hold) is a &mo and the second tap is a &to + layer_td: tap_dance_0 { + compatible = "zmk,behavior-tap-dance"; + label = "LAYER_TAP_DANCE"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&mo LOWER>, <&to LOWER>; + }; + }; + + macros { + bt_0: bt_profile_macro_0 { + label = "BT_0"; + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings + = <&out OUT_BLE>, + <&bt BT_SEL 0>; + }; + + bt_1: bt_profile_macro_1 { + label = "BT_1"; + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings + = <&out OUT_BLE>, + <&bt BT_SEL 1>; + }; + + bt_2: bt_profile_macro_2 { + label = "BT_2"; + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings + = <&out OUT_BLE>, + <&bt BT_SEL 2>; + }; + + bt_3: bt_profile_macro_3 { + label = "BT_3"; + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings + = <&out OUT_BLE>, + <&bt BT_SEL 3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + // --------------------------------------------------------------------------------------------------------------------------------- + // | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | + // | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | + // | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ | + // | ESC | A | S | D | F | G | | H | J | K | L | ; | ' | + // | ` | Z | X | C | V | B | LSHFT | LCTRL | LOWER | | LGUI | RCTRL | RSHFT | N | M | , | . | / | PGUP | + // | MAGIC | HOME| END | LEFT | RIGHT| | BSPC | DEL | LALT | | RALT | RET | SPACE | | UP | DOWN | [ | ] | PGDN | + + bindings = < + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 + &kp EQUAL &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp GRAVE &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LCTRL &layer_td &kp LGUI &kp RCTRL &kp RSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp PG_UP + &mo MAGIC &kp HOME &kp END &kp LEFT &kp RIGHT &kp BSPC &kp DEL &kp LALT &kp RALT &kp RET &kp SPACE &kp UP &kp DOWN &kp LBKT &kp RBKT &kp PG_DN + >; + }; + + lower_layer { + bindings = < + &kp C_BRI_DN &kp C_BRI_UP &kp C_PREV &kp C_NEXT &kp C_PP &kp C_MUTE &kp C_VOL_DN &kp C_VOL_UP &none &kp PAUSE_BREAK + &trans &none &none &none &none &kp HOME &kp LPAR &kp KP_NUM &kp KP_EQUAL &kp KP_DIVIDE &kp KP_MULTIPLY &kp PSCRN + &trans &none &none &kp UP &none &kp END &kp RPAR &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_MINUS &kp SLCK + &trans &none &kp LEFT &kp DOWN &kp RIGHT &kp PG_UP &kp PRCNT &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_PLUS &none + &trans &kp K_CMENU &none &kp F11 &kp F12 &kp PG_DN &trans &trans &to DEFAULT &trans &trans &trans &kp COMMA &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER &trans + &trans &kp CAPS &kp INS &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &kp KP_N0 &kp KP_N0 &kp KP_DOT &kp KP_ENTER &trans + >; + }; + + magic_layer { + bindings = < + &bt BT_CLR &none &none &none &none &none &none &none &none &none + &none &none &none &none &none &none &none &none &none &none &none &none + &none &rgb_ug RGB_SPI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_BRI &rgb_ug RGB_TOG &none &none &none &none &none &none + &bootloader &rgb_ug RGB_SPD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_BRD &rgb_ug RGB_EFF &none &none &none &none &none &bootloader + &sys_reset &none &none &none &none &none &bt_2 &bt_3 &none &none &none &none &none &none &none &none &none &sys_reset + &none &none &none &none &none &bt_0 &bt_1 &out OUT_USB &none &none &none &none &none &none &none &none + >; + }; + }; +}; diff --git a/app/boards/arm/glove80/glove80.yaml b/app/boards/arm/glove80/glove80.yaml new file mode 100644 index 00000000000..90a5e13307f --- /dev/null +++ b/app/boards/arm/glove80/glove80.yaml @@ -0,0 +1,19 @@ +identifier: glove80 +name: Glove80 +url: https://www.moergo.com/ +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog + - gpio + - i2c + - spi diff --git a/app/boards/arm/glove80/glove80.zmk.yml b/app/boards/arm/glove80/glove80.zmk.yml new file mode 100644 index 00000000000..ca70b7d6acf --- /dev/null +++ b/app/boards/arm/glove80/glove80.zmk.yml @@ -0,0 +1,16 @@ +file_format: "1" +id: glove80 +name: Glove80 +type: board +arch: arm +url: https://www.moergo.com/ +features: + - keys + - underglow + - backlight +outputs: + - usb + - ble +siblings: + - glove80_lh + - glove80_rh diff --git a/app/boards/arm/glove80/glove80_lh-pinctrl.dtsi b/app/boards/arm/glove80/glove80_lh-pinctrl.dtsi new file mode 100644 index 00000000000..3dbf3d7e1a1 --- /dev/null +++ b/app/boards/arm/glove80/glove80_lh-pinctrl.dtsi @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; // WS2812_VEXT_DATA + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm0_default: pwm0_default { + group1 { + psels = ; // rear LED + }; + }; + + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + bias-pull-down; + }; + }; + + uart0_default: uart0_default { + group1 { + psels = , // EXT1 + ; // EXT2 + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/app/boards/arm/glove80/glove80_lh.dts b/app/boards/arm/glove80/glove80_lh.dts new file mode 100644 index 00000000000..ed40e0d2d1e --- /dev/null +++ b/app/boards/arm/glove80/glove80_lh.dts @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "glove80.dtsi" +#include "glove80_lh-pinctrl.dtsi" + +#include + +/ { + model = "glove80_lh"; + compatible = "glove80_lh"; + + chosen { + zmk,underglow = &led_strip; + zmk,backlight = &back_led_backlight; + zmk,battery = &vbatt; + }; + + back_led_backlight: pwmleds { + compatible = "pwm-leds"; + label = "BACK LED"; + pwm_led_0 { + pwms = <&pwm0 0 PWM_USEC(20) PWM_POLARITY_NORMAL>; + label = "Back LED configured as backlight"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; /* WS2812_CE */ + init-delay-ms = <100>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-nrf-vddh"; + label = "BATTERY"; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812C-2020"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <40>; /* 40 keys have underglow at the moment */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&kscan0 { + row-gpios + = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // LH ROW1 + , <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // LH ROW2 + , <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // LH ROW3 + , <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // LH ROW4 + , <&gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // LH ROW5 + , <&gpio1 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // LH ROW6 + ; + col-gpios + = <&gpio1 8 GPIO_ACTIVE_HIGH> // LH COL6 + , <&gpio1 4 GPIO_ACTIVE_HIGH> // LH COL5 + , <&gpio1 6 GPIO_ACTIVE_HIGH> // LH COL4 + , <&gpio1 7 GPIO_ACTIVE_HIGH> // LH COL3 + , <&gpio1 5 GPIO_ACTIVE_HIGH> // LH COL2 + , <&gpio1 3 GPIO_ACTIVE_HIGH> // LH COL1 + , <&gpio1 1 GPIO_ACTIVE_HIGH> // LH Thumb + ; +}; diff --git a/app/boards/arm/glove80/glove80_lh.keymap b/app/boards/arm/glove80/glove80_lh.keymap new file mode 100644 index 00000000000..dd4c2d6a01f --- /dev/null +++ b/app/boards/arm/glove80/glove80_lh.keymap @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "glove80.keymap" diff --git a/app/boards/arm/glove80/glove80_lh_defconfig b/app/boards/arm/glove80/glove80_lh_defconfig new file mode 100644 index 00000000000..a93f27cd8f2 --- /dev/null +++ b/app/boards/arm/glove80/glove80_lh_defconfig @@ -0,0 +1,92 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_GLOVE80_LH=y + +# Enable both USB and BLE +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + +# Keyboard IDs +CONFIG_ZMK_KEYBOARD_NAME="Glove80 Left" +CONFIG_USB_DEVICE_PID=0x27db +CONFIG_USB_DEVICE_VID=0x16c0 +CONFIG_USB_DEVICE_MANUFACTURER="MoErgo" +CONFIG_USB_DEVICE_SN="moergo.com:GLV80-0123456789ABCDEF" + +CONFIG_BT_DIS_PNP_PID=0x27db +CONFIG_BT_DIS_PNP_VID=0x16c0 +CONFIG_BT_DIS_MANUF="MoErgo" +CONFIG_BT_DIS_MODEL="Glove80" + +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y + +# Work-around for Windows bug with battery notifications +CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable GPIO +CONFIG_GPIO=y + +# Build configurations +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_BUILD_OUTPUT_UF2_FAMILY_ID="0x9807B007" +CONFIG_USE_DT_CODE_PARTITION=y + +# Flash configuration +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y + +# Enable RGB underglow +CONFIG_ZMK_RGB_UNDERGLOW=y + +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n +CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=4 +CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN=4 + +# DO NOT CHANGE CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX TO ABOVE 80. Configuring +# BRT_MAX above 80% will draw additional current and can potentially damage your +# computer. WARRANTY IS VOID IF BRT_MAX SET ABOVE 80. +CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX=80 + +CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3 +CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=285 +CONFIG_ZMK_RGB_UNDERGLOW_SAT_START=75 +CONFIG_ZMK_RGB_UNDERGLOW_BRT_START=16 + +# The power LED is implemented as a backlight +# For now, the power LED is acting as a "USB connected" indicator +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_ON_START=y +CONFIG_ZMK_BACKLIGHT_BRT_START=5 +CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE=y +CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB=y + +# The full two-byte consumer report space has compatibility issues with some +# operating systems, most notably macOS. Use the more basic single-byte usage +# space. +CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y + +# Turn on debugging to disable optimization. Debug messages can result in larger +# stacks, so enable stack protection and particularly a larger BLE peripheral stack. +# CONFIG_DEBUG=y +# CONFIG_DEBUG_THREAD_INFO=y +# CONFIG_EXCEPTION_STACK_TRACE=y +# CONFIG_HW_STACK_PROTECTION=y +# CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE=1300 + +# Log via USB or Segger RTT +CONFIG_ZMK_USB_LOGGING=n +CONFIG_ZMK_RTT_LOGGING=n diff --git a/app/boards/arm/glove80/glove80_rh-pinctrl.dtsi b/app/boards/arm/glove80/glove80_rh-pinctrl.dtsi new file mode 100644 index 00000000000..454a2621051 --- /dev/null +++ b/app/boards/arm/glove80/glove80_rh-pinctrl.dtsi @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; // WS2812_VEXT_DATA + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm0_default: pwm0_default { + group1 { + psels = ; // Rear LED + }; + }; + + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + bias-pull-down; + }; + }; + + uart0_default: uart0_default { + group1 { + psels = , // EXT1 + ; // EXT2 + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + +}; diff --git a/app/boards/arm/glove80/glove80_rh.dts b/app/boards/arm/glove80/glove80_rh.dts new file mode 100644 index 00000000000..288f63688ca --- /dev/null +++ b/app/boards/arm/glove80/glove80_rh.dts @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +#include "glove80.dtsi" +#include "glove80_rh-pinctrl.dtsi" + +#include + +/ { + model = "glove80_rh"; + compatible = "glove80_rh"; + + chosen { + zmk,underglow = &led_strip; + zmk,backlight = &back_led_backlight; + zmk,battery = &vbatt; + }; + + back_led_backlight: pwmleds { + compatible = "pwm-leds"; + label = "BACK LED"; + pwm_led_0 { + pwms = <&pwm0 0 PWM_USEC(20) PWM_POLARITY_NORMAL>; + label = "Back LED configured as backlight"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>; /* WS2812_CE */ + init-delay-ms = <100>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-nrf-vddh"; + label = "BATTERY"; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812C-2020"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <40>; /* 40 keys have underglow at the moment */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + + +&uart0 { + compatible = "nordic,nrf-uarte"; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +/* For right hand, the columns are offset by 7 */ +&default_transform { + col-offset = <7>; +}; + +&kscan0 { + row-gpios + = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // RH ROW1 + , <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // RH ROW2 + , <&gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // RH ROW3 + , <&gpio1 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // RH ROW4 + , <&gpio0 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // RH ROW5 + , <&gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // RH ROW6 + ; + col-gpios + = <&gpio1 6 GPIO_ACTIVE_HIGH> // RH Thumb + , <&gpio1 4 GPIO_ACTIVE_HIGH> // RH COL1 + , <&gpio0 2 GPIO_ACTIVE_HIGH> // RH COL2 + , <&gpio1 7 GPIO_ACTIVE_HIGH> // RH COL3 + , <&gpio1 5 GPIO_ACTIVE_HIGH> // RH COL4 + , <&gpio1 3 GPIO_ACTIVE_HIGH> // RH COL5 + , <&gpio1 1 GPIO_ACTIVE_HIGH> // RH COL6 + ; +}; diff --git a/app/boards/arm/glove80/glove80_rh.keymap b/app/boards/arm/glove80/glove80_rh.keymap new file mode 100644 index 00000000000..dd4c2d6a01f --- /dev/null +++ b/app/boards/arm/glove80/glove80_rh.keymap @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "glove80.keymap" diff --git a/app/boards/arm/glove80/glove80_rh_defconfig b/app/boards/arm/glove80/glove80_rh_defconfig new file mode 100644 index 00000000000..ef29d682a54 --- /dev/null +++ b/app/boards/arm/glove80/glove80_rh_defconfig @@ -0,0 +1,89 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_GLOVE80_RH=y + +# Enable both USB and BLE +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y + +# Keyboard IDs +CONFIG_ZMK_KEYBOARD_NAME="Glove80 Right" +CONFIG_USB_DEVICE_PID=0x27d9 +CONFIG_USB_DEVICE_VID=0x16c0 +CONFIG_USB_DEVICE_MANUFACTURER="MoErgo" +CONFIG_USB_DEVICE_SN="moergo.com:GLV80-0123456789ABCDEF" + +CONFIG_BT_DIS_PNP_PID=0x27d9 +CONFIG_BT_DIS_PNP_VID=0x16c0 +CONFIG_BT_DIS_MANUF="MoErgo" +CONFIG_BT_DIS_MODEL="Glove80 Right" + +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable GPIO +CONFIG_GPIO=y + +# Build configurations +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_BUILD_OUTPUT_UF2_FAMILY_ID="0x9808B007" +CONFIG_USE_DT_CODE_PARTITION=y + +# Flash configuration +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y + +# Enable RGB underglow +CONFIG_ZMK_RGB_UNDERGLOW=y + +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n +CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=4 +CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN=4 + +# DO NOT CHANGE CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX TO ABOVE 80. Configuring +# BRT_MAX above 80% will draw additional current and can potentially damage your +# computer. WARRANTY IS VOID IF BRT_MAX SET ABOVE 80. +CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX=80 + +CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3 +CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=285 +CONFIG_ZMK_RGB_UNDERGLOW_SAT_START=75 +CONFIG_ZMK_RGB_UNDERGLOW_BRT_START=16 + +# The power LED is implemented as a backlight +# For now, the power LED is acting as a "USB connected" indicator +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_ON_START=y +CONFIG_ZMK_BACKLIGHT_BRT_START=5 +CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE=y +CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB=y + +# The full two-byte consumer report space has compatibility issues with some +# operating systems, most notably macOS. Use the more basic single-byte usage +# space. +CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y + +# Turn on debugging to disable optimization. Debug messages can result in larger +# stacks, so enable stack protection and particularly a larger BLE peripheral stack. +# CONFIG_DEBUG=y +# CONFIG_DEBUG_THREAD_INFO=y +# CONFIG_EXCEPTION_STACK_TRACE=y +# CONFIG_HW_STACK_PROTECTION=y +# CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE=1300 + +# Log via USB or Segger RTT +CONFIG_ZMK_USB_LOGGING=n +CONFIG_ZMK_RTT_LOGGING=n diff --git a/app/boards/arm/glove80/readme.md b/app/boards/arm/glove80/readme.md new file mode 100644 index 00000000000..2c770376116 --- /dev/null +++ b/app/boards/arm/glove80/readme.md @@ -0,0 +1,13 @@ +## MoErgo Glove80 + +This board definition provides ZMK support for the [MoErgo Glove80](https://www.moergo.com) +keyboard. + +MoErgo additionally offers a customized version of ZMK which adds additional functionality such as +RGB status indicators, available on GitHub at [moergo-sc/zmk](https://github.com/moergo-sc/zmk). The +MoErgo customized ZMK fork is regularly updated to include the latest changes from mainline ZMK, but +will not always be completely up-to-date. MoErgo also offers an online layout configurator and +firmware builder application using the customized fork at [my.glove80.com](https://my.glove80.com). + +While mainline ZMK is expected to work well with Glove80, MoErgo only provides support for use of +their customized fork. Likewise, the ZMK community cannot directly provide support for MoErgo's fork. diff --git a/app/boards/arm/glove80/usb_serial_number.c b/app/boards/arm/glove80/usb_serial_number.c new file mode 100644 index 00000000000..44d7ee20363 --- /dev/null +++ b/app/boards/arm/glove80/usb_serial_number.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include "usb_descriptor.h" + +#define LOG_LEVEL CONFIG_USB_DEVICE_LOG_LEVEL +#include +LOG_MODULE_DECLARE(usb_descriptor); + +int base16_encode(const uint8_t *data, int length, uint8_t *result, int bufSize); + +uint8_t *usb_update_sn_string_descriptor(void) { + /* + * nrf52840 hwinfo returns a 64-bit hardware id. Glove80 uses this as a + * serial number, encoded as base16 into the last 16 characters of the + * CONFIG_USB_DEVICE_SN template. If insufficient template space is + * available, instead return the static serial number string. + */ + const uint8_t template_len = sizeof(CONFIG_USB_DEVICE_SN); + const uint8_t sn_len = 16; + + if (template_len < sn_len + 1) { + LOG_DBG("Serial number template too short"); + return CONFIG_USB_DEVICE_SN; + } + + static uint8_t serial[sizeof(CONFIG_USB_DEVICE_SN)]; + strncpy(serial, CONFIG_USB_DEVICE_SN, template_len); + + uint8_t hwid[8]; + memset(hwid, 0, sizeof(hwid)); + uint8_t hwlen = hwinfo_get_device_id(hwid, sizeof(hwid)); + + if (hwlen > 0) { + const uint8_t offset = template_len - sn_len - 1; + LOG_HEXDUMP_DBG(&hwid, sn_len, "Serial Number"); + base16_encode(hwid, hwlen, serial + offset, sn_len + 1); + } + + return serial; +} + +int base16_encode(const uint8_t *data, int length, uint8_t *result, int bufSize) { + const char hex[] = "0123456789ABCDEF"; + + int i = 0; + while (i < bufSize && i < length * 2) { + uint8_t nibble; + if (i % 2 == 0) { + nibble = data[i / 2] >> 4; + } else { + nibble = data[i / 2] & 0xF; + } + result[i] = hex[nibble]; + ++i; + } + if (i < bufSize) { + result[i] = '\0'; + } + return i; +} From f6716f869a0fd20ac9520e2808dc4183742436a5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 14 Nov 2023 07:03:25 +0000 Subject: [PATCH 0809/1130] fix(usb): Build with ZMK_USB_BOOT disabled. * Invert the logic so `get_keyboard_report` is sane when `ZMK_USB_BOOT` is disabled. --- app/src/usb_hid.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index c72bb36c9ef..d2a52cf24ab 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -39,16 +39,16 @@ void zmk_usb_hid_set_protocol(uint8_t protocol) { hid_protocol = protocol; } #endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ static uint8_t *get_keyboard_report(size_t *len) { - if (hid_protocol == HID_PROTOCOL_REPORT) { - struct zmk_hid_keyboard_report *report = zmk_hid_get_keyboard_report(); - *len = sizeof(*report); - return (uint8_t *)report; - } #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) - zmk_hid_boot_report_t *boot_report = zmk_hid_get_boot_report(); - *len = sizeof(*boot_report); - return (uint8_t *)boot_report; + if (hid_protocol != HID_PROTOCOL_REPORT) { + zmk_hid_boot_report_t *boot_report = zmk_hid_get_boot_report(); + *len = sizeof(*boot_report); + return (uint8_t *)boot_report; + } #endif + struct zmk_hid_keyboard_report *report = zmk_hid_get_keyboard_report(); + *len = sizeof(*report); + return (uint8_t *)report; } static int get_report_cb(const struct device *dev, struct usb_setup_packet *setup, int32_t *len, From 3027b2a6e8f2896f7e08d5a502be50ad21f32d7f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 14 Nov 2023 07:50:48 +0000 Subject: [PATCH 0810/1130] chore(usb): Don't enable ZMK_USB_ROOT by default. * Some initial reports of crashes with this code enabled, so disabling by default for now pending further investigation. --- app/Kconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 282339e3e40..072795e317b 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -98,7 +98,6 @@ config ZMK_USB config ZMK_USB_BOOT bool "USB Boot Protocol Support" - default y depends on ZMK_USB select USB_HID_BOOT_PROTOCOL select USB_DEVICE_SOF From 8776911da5005d42cd0bdf108b23deca16d7ec82 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Wed, 15 Nov 2023 18:03:30 +0000 Subject: [PATCH 0811/1130] feat(ble): Allow disabling BLE BAS reporting The battery reporting has been known to cause macOS computers to wakeup repeatedly. In some cases (e.g. display or custom lighting implementation) one might want to collect battery SOC without broadcasting over BLE * Update docs/docs/config/battery.md Co-authored-by: Cem Aksoylar --- app/Kconfig | 2 +- app/src/battery.c | 4 ++-- docs/docs/config/battery.md | 6 ++++++ docs/docs/config/system.md | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 072795e317b..1b3eb6def6b 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -321,7 +321,7 @@ config ZMK_BATTERY_REPORTING bool "Battery level detection/reporting" default n select SENSOR - select BT_BAS if ZMK_BLE + imply BT_BAS if ZMK_BLE config ZMK_IDLE_TIMEOUT int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" diff --git a/app/src/battery.c b/app/src/battery.c index 87a25e08a2d..c6466272082 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -51,7 +51,7 @@ static int zmk_battery_update(const struct device *battery) { if (last_state_of_charge != state_of_charge.val1) { last_state_of_charge = state_of_charge.val1; - +#if IS_ENABLED(CONFIG_BT_BAS) LOG_DBG("Setting BAS GATT battery level to %d.", last_state_of_charge); rc = bt_bas_set_battery_level(last_state_of_charge); @@ -60,7 +60,7 @@ static int zmk_battery_update(const struct device *battery) { LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc); return rc; } - +#endif rc = ZMK_EVENT_RAISE(new_zmk_battery_state_changed( (struct zmk_battery_state_changed){.state_of_charge = last_state_of_charge})); } diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index c56a30efd67..8d65a00a039 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -22,6 +22,12 @@ While `CONFIG_ZMK_BATTERY_REPORTING` is disabled by default it is implied by `CO ::: +:::note BLE reporting on MacOS + +On macOS the BLE battery reporting packets can cause the computer to wakeup from sleep. To prevent this, the battery _reporting_ service can be disabled by setting `CONFIG_BT_BAS=n`. This setting is independent of battery _monitoring_, for instance the battery level can still be indicated on a display. + +::: + ### Devicetree Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/intro.html#aliases-and-chosen-nodes) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 25d51940afb..b9dd580de0c 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -66,6 +66,7 @@ for more information on configuring Bluetooth. | Config | Type | Description | Default | | ------------------------------------------- | ---- | --------------------------------------------------------------------- | ------- | | `CONFIG_BT` | bool | Enable Bluetooth support | | +| `CONFIG_BT_BAS` | bool | Enable the Bluetooth BAS (battery reporting service) | y | | `CONFIG_BT_MAX_CONN` | int | Maximum number of simultaneous Bluetooth connections | 5 | | `CONFIG_BT_MAX_PAIRED` | int | Maximum number of paired Bluetooth devices | 5 | | `CONFIG_ZMK_BLE` | bool | Enable ZMK as a Bluetooth keyboard | | From d7d9eed317b3f788370a8728afa449c5e525f2ca Mon Sep 17 00:00:00 2001 From: Alexander Krikun Date: Tue, 27 Apr 2021 18:24:11 +0300 Subject: [PATCH 0812/1130] feat(mouse): Initial mouse keys support. * Add HID report/descriptor for a new report with mouse buttons, and x/y/wheel deltas. * New mouse key press behavior for press/release of mouse keys. * Add constants for HID main item values (e.g. data/array/absolute) * Define and use constants for our HID report IDs. --- app/CMakeLists.txt | 3 + app/Kconfig | 13 +++ app/Kconfig.behaviors | 5 ++ app/dts/behaviors.dtsi | 3 +- app/dts/behaviors/mouse_key_press.dtsi | 9 +++ .../zmk,behavior-mouse-key-press.yaml | 5 ++ app/include/dt-bindings/zmk/hid_usage_pages.h | 1 + app/include/dt-bindings/zmk/mouse.h | 24 ++++++ app/include/zmk/endpoints.h | 4 + .../zmk/events/mouse_button_state_changed.h | 26 ++++++ app/include/zmk/hid.h | 66 +++++++++++++++ app/include/zmk/hog.h | 4 + app/include/zmk/mouse.h | 12 +++ app/include/zmk/usb_hid.h | 3 + app/src/behaviors/behavior_mouse_key_press.c | 48 +++++++++++ app/src/endpoints.c | 33 ++++++++ app/src/events/mouse_button_state_changed.c | 9 +++ app/src/hid.c | 81 +++++++++++++++++++ app/src/hog.c | 80 ++++++++++++++++++ app/src/mouse.c | 43 ++++++++++ app/src/usb_hid.c | 13 +++ app/tests/mouse-keys/mkp/events.patterns | 1 + .../mouse-keys/mkp/keycode_events.snapshot | 10 +++ app/tests/mouse-keys/mkp/native_posix.keymap | 28 +++++++ .../mouse-keys/mkp/native_posix_64.keymap | 28 +++++++ docs/docs/behaviors/mouse-emulation.md | 66 +++++++++++++++ docs/sidebars.js | 1 + 27 files changed, 618 insertions(+), 1 deletion(-) create mode 100644 app/dts/behaviors/mouse_key_press.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml create mode 100644 app/include/dt-bindings/zmk/mouse.h create mode 100644 app/include/zmk/events/mouse_button_state_changed.h create mode 100644 app/include/zmk/mouse.h create mode 100644 app/src/behaviors/behavior_mouse_key_press.c create mode 100644 app/src/events/mouse_button_state_changed.c create mode 100644 app/src/mouse.c create mode 100644 app/tests/mouse-keys/mkp/events.patterns create mode 100644 app/tests/mouse-keys/mkp/keycode_events.snapshot create mode 100644 app/tests/mouse-keys/mkp/native_posix.keymap create mode 100644 app/tests/mouse-keys/mkp/native_posix_64.keymap create mode 100644 docs/docs/behaviors/mouse-emulation.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 793f386dbe3..0891364b437 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -31,12 +31,14 @@ target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) target_sources(app PRIVATE src/events/activity_state_changed.c) target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/events/sensor_event.c) +target_sources(app PRIVATE src/events/mouse_button_state_changed.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/hid.c) + target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) @@ -54,6 +56,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE app PRIVATE src/behaviors/behavior_sensor_rotate.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_VAR app PRIVATE src/behaviors/behavior_sensor_rotate_var.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON app PRIVATE src/behaviors/behavior_sensor_rotate_common.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOUSE_KEY_PRESS app PRIVATE src/behaviors/behavior_mouse_key_press.c) target_sources(app PRIVATE src/combo.c) target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behavior_queue.c) diff --git a/app/Kconfig b/app/Kconfig index 1b3eb6def6b..f92f0ae3b86 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -156,6 +156,10 @@ config ZMK_BLE_CONSUMER_REPORT_QUEUE_SIZE int "Max number of consumer HID reports to queue for sending over BLE" default 5 +config ZMK_BLE_MOUSE_REPORT_QUEUE_SIZE + int "Max number of mouse HID reports to queue for sending over BLE" + default 20 + config ZMK_BLE_CLEAR_BONDS_ON_START bool "Configuration that clears all bond information from the keyboard on startup." default n @@ -315,6 +319,15 @@ endif #Display/LED Options endmenu +menu "Mouse Options" + +config ZMK_MOUSE + bool "Enable ZMK mouse emulation" + default n + +#Mouse Options +endmenu + menu "Power Management" config ZMK_BATTERY_REPORTING diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 9e4a82b06e7..11bc8c5900f 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -6,6 +6,11 @@ config ZMK_BEHAVIOR_KEY_TOGGLE default y depends on DT_HAS_ZMK_BEHAVIOR_KEY_TOGGLE_ENABLED +config ZMK_BEHAVIOR_MOUSE_KEY_PRESS + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED + imply ZMK_MOUSE config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index b3502cbbc13..23f2fee2806 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -18,4 +18,5 @@ #include #include #include -#include \ No newline at end of file +#include +#include diff --git a/app/dts/behaviors/mouse_key_press.dtsi b/app/dts/behaviors/mouse_key_press.dtsi new file mode 100644 index 00000000000..9cc16e81e75 --- /dev/null +++ b/app/dts/behaviors/mouse_key_press.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + /omit-if-no-ref/ mkp: behavior_mouse_key_press { + compatible = "zmk,behavior-mouse-key-press"; + label = "MOUSE_KEY_PRESS"; + #binding-cells = <1>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml b/app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml new file mode 100644 index 00000000000..8540916b72a --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml @@ -0,0 +1,5 @@ +description: Mouse key press/release behavior + +compatible: "zmk,behavior-mouse-key-press" + +include: one_param.yaml diff --git a/app/include/dt-bindings/zmk/hid_usage_pages.h b/app/include/dt-bindings/zmk/hid_usage_pages.h index 2ccdba5540f..7fa54fd88b9 100644 --- a/app/include/dt-bindings/zmk/hid_usage_pages.h +++ b/app/include/dt-bindings/zmk/hid_usage_pages.h @@ -26,6 +26,7 @@ #define HID_USAGE_GDV (0x06) // Generic Device Controls #define HID_USAGE_KEY (0x07) // Keyboard/Keypad #define HID_USAGE_LED (0x08) // LED +#define HID_USAGE_BUTTON (0x09) // Button #define HID_USAGE_TELEPHONY (0x0B) // Telephony Device #define HID_USAGE_CONSUMER (0x0C) // Consumer #define HID_USAGE_DIGITIZERS (0x0D) // Digitizers diff --git a/app/include/dt-bindings/zmk/mouse.h b/app/include/dt-bindings/zmk/mouse.h new file mode 100644 index 00000000000..582518aff7e --- /dev/null +++ b/app/include/dt-bindings/zmk/mouse.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#pragma once + +#include + +/* Mouse press behavior */ +/* Left click */ +#define MB1 BIT(0) +#define LCLK (MB1) + +/* Right click */ +#define MB2 BIT(1) +#define RCLK (MB2) + +/* Middle click */ +#define MB3 BIT(2) +#define MCLK (MB3) + +#define MB4 BIT(3) +#define MB5 BIT(4) diff --git a/app/include/zmk/endpoints.h b/app/include/zmk/endpoints.h index c5964ff8535..70240183e36 100644 --- a/app/include/zmk/endpoints.h +++ b/app/include/zmk/endpoints.h @@ -69,3 +69,7 @@ int zmk_endpoints_toggle_transport(void); struct zmk_endpoint_instance zmk_endpoints_selected(void); int zmk_endpoints_send_report(uint16_t usage_page); + +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +int zmk_endpoints_send_mouse_report(); +#endif // IS_ENABLE(CONFIG_ZMK_MOUSE) diff --git a/app/include/zmk/events/mouse_button_state_changed.h b/app/include/zmk/events/mouse_button_state_changed.h new file mode 100644 index 00000000000..9382789e56f --- /dev/null +++ b/app/include/zmk/events/mouse_button_state_changed.h @@ -0,0 +1,26 @@ + +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +struct zmk_mouse_button_state_changed { + zmk_mouse_button_t buttons; + bool state; + int64_t timestamp; +}; + +ZMK_EVENT_DECLARE(zmk_mouse_button_state_changed); + +static inline struct zmk_mouse_button_state_changed_event * +zmk_mouse_button_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { + return new_zmk_mouse_button_state_changed((struct zmk_mouse_button_state_changed){ + .buttons = ZMK_HID_USAGE_ID(encoded), .state = pressed, .timestamp = timestamp}); +} diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index afe9210199f..aeaa69d8d08 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -10,10 +10,15 @@ #include #include +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +#include +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + #include #include #define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL +#define ZMK_HID_MOUSE_NUM_BUTTONS 0x05 // See https://www.usb.org/sites/default/files/hid1_11.pdf section 6.2.2.4 Main Items @@ -46,6 +51,7 @@ #define ZMK_HID_REPORT_ID_KEYBOARD 0x01 #define ZMK_HID_REPORT_ID_CONSUMER 0x02 +#define ZMK_HID_REPORT_ID_MOUSE 0x03 static const uint8_t zmk_hid_report_desc[] = { HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), @@ -114,6 +120,39 @@ static const uint8_t zmk_hid_report_desc[] = { HID_REPORT_COUNT(CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE), HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_ARRAY | ZMK_HID_MAIN_VAL_ABS), HID_END_COLLECTION, + +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + HID_USAGE_PAGE(HID_USAGE_GD), + HID_USAGE(HID_USAGE_GD_MOUSE), + HID_COLLECTION(HID_COLLECTION_APPLICATION), + HID_REPORT_ID(ZMK_HID_REPORT_ID_MOUSE), + HID_USAGE(HID_USAGE_GD_POINTER), + HID_COLLECTION(HID_COLLECTION_PHYSICAL), + HID_USAGE_PAGE(HID_USAGE_BUTTON), + HID_USAGE_MIN8(0x1), + HID_USAGE_MAX8(ZMK_HID_MOUSE_NUM_BUTTONS), + HID_LOGICAL_MIN8(0x00), + HID_LOGICAL_MAX8(0x01), + HID_REPORT_SIZE(0x01), + HID_REPORT_COUNT(0x5), + HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), + // Constant padding for the last 3 bits. + HID_REPORT_SIZE(0x03), + HID_REPORT_COUNT(0x01), + HID_INPUT(ZMK_HID_MAIN_VAL_CONST | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), + // Some OSes ignore pointer devices without X/Y data. + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), + HID_USAGE(HID_USAGE_GD_X), + HID_USAGE(HID_USAGE_GD_Y), + HID_USAGE(HID_USAGE_GD_WHEEL), + HID_LOGICAL_MIN8(-0x7F), + HID_LOGICAL_MAX8(0x7F), + HID_REPORT_SIZE(0x08), + HID_REPORT_COUNT(0x03), + HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_REL), + HID_END_COLLECTION, + HID_END_COLLECTION, +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) }; #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) @@ -163,6 +202,21 @@ struct zmk_hid_consumer_report { struct zmk_hid_consumer_report_body body; } __packed; +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +struct zmk_hid_mouse_report_body { + zmk_mouse_button_flags_t buttons; + int8_t d_x; + int8_t d_y; + int8_t d_wheel; +} __packed; + +struct zmk_hid_mouse_report { + uint8_t report_id; + struct zmk_hid_mouse_report_body body; +} __packed; + +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + zmk_mod_flags_t zmk_hid_get_explicit_mods(); int zmk_hid_register_mod(zmk_mod_t modifier); int zmk_hid_unregister_mod(zmk_mod_t modifier); @@ -189,9 +243,21 @@ int zmk_hid_press(uint32_t usage); int zmk_hid_release(uint32_t usage); bool zmk_hid_is_pressed(uint32_t usage); +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +int zmk_hid_mouse_button_press(zmk_mouse_button_t button); +int zmk_hid_mouse_button_release(zmk_mouse_button_t button); +int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons); +int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons); +void zmk_hid_mouse_clear(); +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(); struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) zmk_hid_boot_report_t *zmk_hid_get_boot_report(); #endif + +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +struct zmk_hid_mouse_report *zmk_hid_get_mouse_report(); +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) diff --git a/app/include/zmk/hog.h b/app/include/zmk/hog.h index 7523fb661ad..b4e45d9186d 100644 --- a/app/include/zmk/hog.h +++ b/app/include/zmk/hog.h @@ -13,3 +13,7 @@ int zmk_hog_init(); int zmk_hog_send_keyboard_report(struct zmk_hid_keyboard_report_body *body); int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body); + +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *body); +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) diff --git a/app/include/zmk/mouse.h b/app/include/zmk/mouse.h new file mode 100644 index 00000000000..d873f15689a --- /dev/null +++ b/app/include/zmk/mouse.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +typedef uint8_t zmk_mouse_button_flags_t; +typedef uint16_t zmk_mouse_button_t; diff --git a/app/include/zmk/usb_hid.h b/app/include/zmk/usb_hid.h index 777f2b48a03..f9091778501 100644 --- a/app/include/zmk/usb_hid.h +++ b/app/include/zmk/usb_hid.h @@ -10,4 +10,7 @@ int zmk_usb_hid_send_keyboard_report(); int zmk_usb_hid_send_consumer_report(); +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +int zmk_usb_hid_send_mouse_report(); +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) void zmk_usb_hid_set_protocol(uint8_t protocol); diff --git a/app/src/behaviors/behavior_mouse_key_press.c b/app/src/behaviors/behavior_mouse_key_press.c new file mode 100644 index 00000000000..6718155768c --- /dev/null +++ b/app/src/behaviors/behavior_mouse_key_press.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_mouse_key_press + +#include +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +static int behavior_mouse_key_press_init(const struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); + + return ZMK_EVENT_RAISE( + zmk_mouse_button_state_changed_from_encoded(binding->param1, true, event.timestamp)); +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); + return ZMK_EVENT_RAISE( + zmk_mouse_button_state_changed_from_encoded(binding->param1, false, event.timestamp)); +} + +static const struct behavior_driver_api behavior_mouse_key_press_driver_api = { + .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; + +#define MKP_INST(n) \ + DEVICE_DT_INST_DEFINE(n, behavior_mouse_key_press_init, NULL, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_mouse_key_press_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(MKP_INST) + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 10357d4e02d..098e04e2776 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -191,6 +191,36 @@ int zmk_endpoints_send_report(uint16_t usage_page) { return -ENOTSUP; } +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +int zmk_endpoints_send_mouse_report() { + switch (current_instance.transport) { +#if IS_ENABLED(CONFIG_ZMK_USB) + case ZMK_TRANSPORT_USB: { + int err = zmk_usb_hid_send_mouse_report(); + if (err) { + LOG_ERR("FAILED TO SEND OVER USB: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + +#if IS_ENABLED(CONFIG_ZMK_BLE) + case ZMK_TRANSPORT_BLE: { + struct zmk_hid_mouse_report *mouse_report = zmk_hid_get_mouse_report(); + int err = zmk_hog_send_mouse_report(&mouse_report->body); + if (err) { + LOG_ERR("FAILED TO SEND OVER HOG: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ + } + + LOG_ERR("Unsupported endpoint transport %d", current_instance.transport); + return -ENOTSUP; +} +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + #if IS_ENABLED(CONFIG_SETTINGS) static int endpoints_handle_set(const char *name, size_t len, settings_read_cb read_cb, @@ -295,6 +325,9 @@ static int zmk_endpoints_init(const struct device *_arg) { static void disconnect_current_endpoint() { zmk_hid_keyboard_clear(); zmk_hid_consumer_clear(); +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + zmk_hid_mouse_clear(); +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) zmk_endpoints_send_report(HID_USAGE_KEY); zmk_endpoints_send_report(HID_USAGE_CONSUMER); diff --git a/app/src/events/mouse_button_state_changed.c b/app/src/events/mouse_button_state_changed.c new file mode 100644 index 00000000000..419a7ce956d --- /dev/null +++ b/app/src/events/mouse_button_state_changed.c @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +ZMK_EVENT_IMPL(zmk_mouse_button_state_changed); diff --git a/app/src/hid.c b/app/src/hid.c index 689a2361e13..1ea2afb1621 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -12,6 +12,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include static struct zmk_hid_keyboard_report keyboard_report = { + .report_id = ZMK_HID_REPORT_ID_KEYBOARD, .body = {.modifiers = 0, ._reserved = 0, .keys = {0}}}; static struct zmk_hid_consumer_report consumer_report = {.report_id = ZMK_HID_REPORT_ID_CONSUMER, @@ -24,6 +25,13 @@ static uint8_t keys_held = 0; #endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + +static struct zmk_hid_mouse_report mouse_report = {.report_id = ZMK_HID_REPORT_ID_MOUSE, + .body = {.buttons = 0}}; + +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + // Keep track of how often a modifier was pressed. // Only release the modifier if the count is 0. static int explicit_modifier_counts[8] = {0, 0, 0, 0, 0, 0, 0, 0}; @@ -357,6 +365,71 @@ bool zmk_hid_is_pressed(uint32_t usage) { return false; } +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + +// Keep track of how often a button was pressed. +// Only release the button if the count is 0. +static int explicit_button_counts[5] = {0, 0, 0, 0, 0}; +static zmk_mod_flags_t explicit_buttons = 0; + +#define SET_MOUSE_BUTTONS(btns) \ + { \ + mouse_report.body.buttons = btns; \ + LOG_DBG("Mouse buttons set to 0x%02X", mouse_report.body.buttons); \ + } + +int zmk_hid_mouse_button_press(zmk_mouse_button_t button) { + if (button >= ZMK_HID_MOUSE_NUM_BUTTONS) { + return -EINVAL; + } + + explicit_button_counts[button]++; + LOG_DBG("Button %d count %d", button, explicit_button_counts[button]); + WRITE_BIT(explicit_buttons, button, true); + SET_MOUSE_BUTTONS(explicit_buttons); + return 0; +} + +int zmk_hid_mouse_button_release(zmk_mouse_button_t button) { + if (button >= ZMK_HID_MOUSE_NUM_BUTTONS) { + return -EINVAL; + } + + if (explicit_button_counts[button] <= 0) { + LOG_ERR("Tried to release button %d too often", button); + return -EINVAL; + } + explicit_button_counts[button]--; + LOG_DBG("Button %d count: %d", button, explicit_button_counts[button]); + if (explicit_button_counts[button] == 0) { + LOG_DBG("Button %d released", button); + WRITE_BIT(explicit_buttons, button, false); + } + SET_MOUSE_BUTTONS(explicit_buttons); + return 0; +} + +int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons) { + for (zmk_mouse_button_t i = 0; i < ZMK_HID_MOUSE_NUM_BUTTONS; i++) { + if (buttons & BIT(i)) { + zmk_hid_mouse_button_press(i); + } + } + return 0; +} + +int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons) { + for (zmk_mouse_button_t i = 0; i < ZMK_HID_MOUSE_NUM_BUTTONS; i++) { + if (buttons & BIT(i)) { + zmk_hid_mouse_button_release(i); + } + } + return 0; +} +void zmk_hid_mouse_clear() { memset(&mouse_report.body, 0, sizeof(mouse_report.body)); } + +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { return &keyboard_report; } @@ -364,3 +437,11 @@ struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { struct zmk_hid_consumer_report *zmk_hid_get_consumer_report() { return &consumer_report; } + +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + +struct zmk_hid_mouse_report *zmk_hid_get_mouse_report() { + return &mouse_report; +} + +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) diff --git a/app/src/hog.c b/app/src/hog.c index 9ccfd9d2c0e..89a903cb967 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -56,6 +56,15 @@ static struct hids_report consumer_input = { .type = HIDS_INPUT, }; +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + +static struct hids_report mouse_input = { + .id = ZMK_HID_REPORT_ID_MOUSE, + .type = HIDS_INPUT, +}; + +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + static bool host_requests_notification = false; static uint8_t ctrl_point; // static uint8_t proto_mode; @@ -93,6 +102,15 @@ static ssize_t read_hids_consumer_input_report(struct bt_conn *conn, sizeof(struct zmk_hid_consumer_report_body)); } +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +static ssize_t read_hids_mouse_input_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, + void *buf, uint16_t len, uint16_t offset) { + struct zmk_hid_mouse_report_body *report_body = &zmk_hid_get_mouse_report()->body; + return bt_gatt_attr_read(conn, attr, buf, len, offset, report_body, + sizeof(struct zmk_hid_mouse_report_body)); +} +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + // static ssize_t write_proto_mode(struct bt_conn *conn, // const struct bt_gatt_attr *attr, // const void *buf, uint16_t len, uint16_t offset, @@ -139,6 +157,15 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, NULL, &consumer_input), + +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, + BT_GATT_PERM_READ_ENCRYPT, read_hids_mouse_input_report, NULL, NULL), + BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, + NULL, &mouse_input), +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); @@ -261,6 +288,59 @@ int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *report) { return 0; }; +#if IS_ENABLED(CONFIG_ZMK_MOUSE) + +K_MSGQ_DEFINE(zmk_hog_mouse_msgq, sizeof(struct zmk_hid_mouse_report_body), + CONFIG_ZMK_BLE_MOUSE_REPORT_QUEUE_SIZE, 4); + +void send_mouse_report_callback(struct k_work *work) { + struct zmk_hid_mouse_report_body report; + while (k_msgq_get(&zmk_hog_mouse_msgq, &report, K_NO_WAIT) == 0) { + struct bt_conn *conn = destination_connection(); + if (conn == NULL) { + return; + } + + struct bt_gatt_notify_params notify_params = { + .attr = &hog_svc.attrs[13], + .data = &report, + .len = sizeof(report), + }; + + int err = bt_gatt_notify_cb(conn, ¬ify_params); + if (err) { + LOG_DBG("Error notifying %d", err); + } + + bt_conn_unref(conn); + } +}; + +int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { + struct bt_conn *conn = destination_connection(); + if (conn == NULL) { + return 1; + } + + struct bt_gatt_notify_params notify_params = { + .attr = &hog_svc.attrs[13], + .data = report, + .len = sizeof(*report), + }; + + int err = bt_gatt_notify_cb(conn, ¬ify_params); + if (err) { + LOG_DBG("Error notifying %d", err); + return err; + } + + bt_conn_unref(conn); + + return 0; +}; + +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + int zmk_hog_init(const struct device *_arg) { static const struct k_work_queue_config queue_config = {.name = "HID Over GATT Send Work"}; k_work_queue_start(&hog_work_q, hog_q_stack, K_THREAD_STACK_SIZEOF(hog_q_stack), diff --git a/app/src/mouse.c b/app/src/mouse.c new file mode 100644 index 00000000000..c1b9ac0261e --- /dev/null +++ b/app/src/mouse.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include + +static void listener_mouse_button_pressed(const struct zmk_mouse_button_state_changed *ev) { + LOG_DBG("buttons: 0x%02X", ev->buttons); + zmk_hid_mouse_buttons_press(ev->buttons); + zmk_endpoints_send_mouse_report(); +} + +static void listener_mouse_button_released(const struct zmk_mouse_button_state_changed *ev) { + LOG_DBG("buttons: 0x%02X", ev->buttons); + zmk_hid_mouse_buttons_release(ev->buttons); + zmk_endpoints_send_mouse_report(); +} + +int mouse_listener(const zmk_event_t *eh) { + const struct zmk_mouse_button_state_changed *mbt_ev = as_zmk_mouse_button_state_changed(eh); + if (mbt_ev) { + if (mbt_ev->state) { + listener_mouse_button_pressed(mbt_ev); + } else { + listener_mouse_button_released(mbt_ev); + } + return 0; + } + return 0; +} + +ZMK_LISTENER(mouse_listener, mouse_listener); +ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_button_state_changed); diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index d2a52cf24ab..fd58c14bf4a 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -129,6 +129,19 @@ int zmk_usb_hid_send_consumer_report() { return zmk_usb_hid_send_report((uint8_t *)report, sizeof(*report)); } +#if IS_ENABLED(CONFIG_ZMK_MOUSE) +int zmk_usb_hid_send_mouse_report() { +#if IS_ENABLED(CONFIG_ZMK_USB_BOOT) + if (hid_protocol == HID_PROTOCOL_BOOT) { + return -ENOTSUP; + } +#endif /* IS_ENABLED(CONFIG_ZMK_USB_BOOT) */ + + struct zmk_hid_mouse_report *report = zmk_hid_get_mouse_report(); + return zmk_usb_hid_send_report((uint8_t *)report, sizeof(*report)); +} +#endif // IS_ENABLED(CONFIG_ZMK_MOUSE) + static int zmk_usb_hid_init(const struct device *_arg) { hid_dev = device_get_binding("HID_0"); if (hid_dev == NULL) { diff --git a/app/tests/mouse-keys/mkp/events.patterns b/app/tests/mouse-keys/mkp/events.patterns new file mode 100644 index 00000000000..2599345c2d7 --- /dev/null +++ b/app/tests/mouse-keys/mkp/events.patterns @@ -0,0 +1 @@ +s/.*zmk_hid_mouse_button_//p diff --git a/app/tests/mouse-keys/mkp/keycode_events.snapshot b/app/tests/mouse-keys/mkp/keycode_events.snapshot new file mode 100644 index 00000000000..ab58cc9575e --- /dev/null +++ b/app/tests/mouse-keys/mkp/keycode_events.snapshot @@ -0,0 +1,10 @@ +press: Button 0 count 1 +press: Mouse buttons set to 0x01 +press: Button 1 count 1 +press: Mouse buttons set to 0x03 +release: Button 1 count: 0 +release: Button 1 released +release: Mouse buttons set to 0x01 +release: Button 0 count: 0 +release: Button 0 released +release: Mouse buttons set to 0x00 diff --git a/app/tests/mouse-keys/mkp/native_posix.keymap b/app/tests/mouse-keys/mkp/native_posix.keymap new file mode 100644 index 00000000000..04316eb34bb --- /dev/null +++ b/app/tests/mouse-keys/mkp/native_posix.keymap @@ -0,0 +1,28 @@ +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &mkp LCLK &none + &none &mkp RCLK + >; + }; + }; +}; + + +&kscan { + events = < + ZMK_MOCK_PRESS (0,0,100) + ZMK_MOCK_PRESS (1,1,100) + ZMK_MOCK_RELEASE(1,1, 10) + ZMK_MOCK_RELEASE(0,0, 10) + >; +}; diff --git a/app/tests/mouse-keys/mkp/native_posix_64.keymap b/app/tests/mouse-keys/mkp/native_posix_64.keymap new file mode 100644 index 00000000000..04316eb34bb --- /dev/null +++ b/app/tests/mouse-keys/mkp/native_posix_64.keymap @@ -0,0 +1,28 @@ +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &mkp LCLK &none + &none &mkp RCLK + >; + }; + }; +}; + + +&kscan { + events = < + ZMK_MOCK_PRESS (0,0,100) + ZMK_MOCK_PRESS (1,1,100) + ZMK_MOCK_RELEASE(1,1, 10) + ZMK_MOCK_RELEASE(0,0, 10) + >; +}; diff --git a/docs/docs/behaviors/mouse-emulation.md b/docs/docs/behaviors/mouse-emulation.md new file mode 100644 index 00000000000..9ed0dd8e07b --- /dev/null +++ b/docs/docs/behaviors/mouse-emulation.md @@ -0,0 +1,66 @@ +--- +title: Mouse Emulation Behaviors +sidebar_label: Mouse Emulation +--- + +## Summary + +Mouse emulation behaviors send mouse events. Currently, only mouse button presses are supported, but movement +and scroll action support is planned for the future. + +Whenever the Mouse Emulation feature is turned on or off, the HID protocol used to communicate events to hosts changes. Unfortunately, those changes are not always detected automatically, and might require re-pairing your keyboard to your devices to work over bluetooth. If mouse behaviors are still not recognized by your device after doing that, you can try [these troubleshooting steps](../features/bluetooth.md#windows-connected-but-not-working). + +## Configuration Option + +This feature can be enabled or disabled explicitly via a config option: + +``` +CONFIG_ZMK_MOUSE=y +``` + +If you use the mouse key press behavior in your keymap, the feature will automatically be enabled for you. + +## Mouse Button Defines + +To make it easier to encode the HID mouse button numeric values, include +the [`dt-bindings/zmk/mouse.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/mouse.h) header +provided by ZMK near the top: + +``` +#include +``` + +## Mouse Button Press + +This behavior can press/release up to 5 mouse buttons. + +### Behavior Binding + +- Reference: `&mkp` +- Parameter: A `uint8` with bits 0 through 4 each referring to a button. + +The following defines can be passed for the parameter: + +| Define | Action | +| :------------ | :------------- | +| `MB1`, `LCLK` | Left click | +| `MB2`, `RCLK` | Right click | +| `MB3`, `MCLK` | Middle click | +| `MB4` | Mouse button 4 | +| `MB5` | Mouse button 5 | + +Mouse buttons 4 and 5 typically map to "back" and "forward" actions in most applications. + +### Examples + +The following will send a left click press when the binding is triggered: + +``` +&mkp LCLK +``` + +This example will send press of the fourth mouse button when the binding is triggered: + +``` +&mkp MB4 +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 43f17b4193f..19b0ad7e68c 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -36,6 +36,7 @@ module.exports = { "behaviors/caps-word", "behaviors/key-repeat", "behaviors/sensor-rotate", + "behaviors/mouse-emulation", "behaviors/reset", "behaviors/bluetooth", "behaviors/outputs", From 0a4b1a6533f434e6bdb7f7f5c336aa3096a90ad7 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Tue, 21 Nov 2023 05:00:10 +0900 Subject: [PATCH 0813/1130] feat(ble): add behavior to disconnect from BLE profile Adds new functionality and a behavior to disconnect an active BLE connection. The motivation for this is that for some devices like phones, the presence of an active BLE connection results in the onscreen keyboard being selected. --- app/include/dt-bindings/zmk/bt.h | 2 ++ app/include/zmk/ble.h | 1 + app/src/behaviors/behavior_bt.c | 2 ++ app/src/ble.c | 21 +++++++++++++++++++++ docs/docs/behaviors/bluetooth.md | 21 +++++++++++++++------ 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/include/dt-bindings/zmk/bt.h b/app/include/dt-bindings/zmk/bt.h index 8ca10606942..7af89ddb011 100644 --- a/app/include/dt-bindings/zmk/bt.h +++ b/app/include/dt-bindings/zmk/bt.h @@ -9,6 +9,7 @@ #define BT_PRV_CMD 2 #define BT_SEL_CMD 3 // #define BT_FULL_RESET_CMD 4 +#define BT_DISC_CMD 5 /* Note: Some future commands will include additional parameters, so we @@ -19,3 +20,4 @@ defines these aliases up front. #define BT_NXT BT_NXT_CMD 0 #define BT_PRV BT_PRV_CMD 0 #define BT_SEL BT_SEL_CMD +#define BT_DISC BT_DISC_CMD diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 435fde49654..92fd595fbcb 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -24,6 +24,7 @@ int zmk_ble_clear_bonds(); int zmk_ble_prof_next(); int zmk_ble_prof_prev(); int zmk_ble_prof_select(uint8_t index); +int zmk_ble_prof_disconnect(uint8_t index); int zmk_ble_active_profile_index(); bt_addr_le_t *zmk_ble_active_profile_addr(); diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 6d44b5f5e9f..bf98532ce93 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -31,6 +31,8 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, return zmk_ble_prof_prev(); case BT_SEL_CMD: return zmk_ble_prof_select(binding->param2); + case BT_DISC_CMD: + return zmk_ble_prof_disconnect(binding->param2); default: LOG_ERR("Unknown BT command: %d", binding->param1); } diff --git a/app/src/ble.c b/app/src/ble.c index 483bc9d79c1..8c991c54b80 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -271,6 +271,27 @@ int zmk_ble_prof_prev() { ZMK_BLE_PROFILE_COUNT); }; +int zmk_ble_prof_disconnect(uint8_t index) { + if (index >= ZMK_BLE_PROFILE_COUNT) + return -ERANGE; + + bt_addr_le_t *addr = &profiles[index].peer; + struct bt_conn *conn; + int result; + + if (!bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) { + return -ENODEV; + } else if ((conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr)) == NULL) { + return -ENODEV; + } + + result = bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN); + LOG_DBG("Disconnected from profile %d: %d", index, result); + + bt_conn_unref(conn); + return result; +} + bt_addr_le_t *zmk_ble_active_profile_addr() { return &profiles[active_profile].peer; } char *zmk_ble_active_profile_name() { return profiles[active_profile].name; } diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 1d461722f5c..ef1cc4666f1 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -13,6 +13,13 @@ computer/laptop/keyboard should receive the keyboard input; many of the commands When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or `BT_PRV` bindings, or by clearing an existing profile using `BT_CLR`. A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. + +An _inactive_ connected profile can be explicitly disconnected using the `BT_DISC` behavior. This can be helpful in +cases when host devices behave differently when a bluetooth keyboard is connected, for example by hiding their on-screen +keyboard. Note that at present the active bluetooth profile will immediately reconnect if disconnected. This is true +even if OUT_USB is selected. To remain disconnected, another bluetooth profile must be first selected using (e.g.) +`BT_SEL`. + ::: ## Bluetooth Command Defines @@ -28,12 +35,14 @@ This will allow you to reference the actions defined in this header such as `BT_ Here is a table describing the command for each define: -| Define | Action | -| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `BT_CLR` | Clear bond information between the keyboard and host for the selected profile. | -| `BT_NXT` | Switch to the next profile, cycling through to the first one when the end is reached. | -| `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | -| `BT_SEL` | Select the 0-indexed profile by number. Please note: this definition must include a number as an argument in the keymap to work correctly. eg. `BT_SEL 0` | +| Define | Action | +| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `BT_CLR` | Clear bond information between the keyboard and host for the selected profile. | +| `BT_NXT` | Switch to the next profile, cycling through to the first one when the end is reached. | +| `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | +| `BT_SEL` | Select the 0-indexed profile by number. Please note: this definition must include a number as an argument in the keymap to work correctly. eg. `BT_SEL 0` | +| `BT_DISC` | Disconnect from the 0-indexed profile by number, if it's currently connected and inactive. Please note: this definition must include a number as an | +| | argument in the keymap to work correctly. eg. `BT_DISC 0` | :::note Selected profile persistence The profile that is selected by the `BT_SEL`/`BT_PRV`/`BT_NXT` actions will be saved to flash storage and hence persist across restarts and firmware flashes. From f77e38f2b980a2d8491523b1c89b11edc740021e Mon Sep 17 00:00:00 2001 From: Idan Gazit Date: Thu, 23 Nov 2023 21:02:22 -0800 Subject: [PATCH 0814/1130] chore: Update devcontainer.json The format has changed slightly. --- .devcontainer/devcontainer.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 04a42c4d5ef..efa8c229d9a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -13,9 +13,13 @@ "type=volume,source=zmk-zephyr-modules,target=${containerWorkspaceFolder}/modules", "type=volume,source=zmk-zephyr-tools,target=${containerWorkspaceFolder}/tools" ], - "extensions": ["ms-vscode.cpptools"], - "settings": { - "terminal.integrated.shell.linux": "/bin/bash" + "customizations": { + "vscode": { + "extensions": ["ms-vscode.cpptools"], + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + } + } }, "forwardPorts": [3000] } From a3f30ee799598a95fc91befc4cb42385644b7e0a Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 10 Nov 2023 22:40:55 -0800 Subject: [PATCH 0815/1130] feat(build): Add support for artifact-name in build.yaml, correctly --- .github/workflows/build-user-config.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index c1a97b4d6e0..7373c9ff4c5 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -55,12 +55,14 @@ jobs: - name: Prepare variables shell: sh -x {0} env: + board: ${{ matrix.board }} shield: ${{ matrix.shield }} + artifact_name: ${{ matrix.artifact-name }} run: | echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}" >> $GITHUB_ENV - echo "display_name=${shield:+$shield - }${{ matrix.board }}" >> $GITHUB_ENV - echo "artifact_name=${shield:+$shield-}${{ matrix.board }}-zmk" >> $GITHUB_ENV + echo "display_name=${shield:+$shield - }${board}" >> $GITHUB_ENV + echo "artifact_name=${artifact_name:-${shield:+$shield-}${board}-zmk}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 From 84b93350b8be30d2b5a5b8f4e07fa86ce2bb1fe7 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 27 Nov 2023 17:12:33 +0000 Subject: [PATCH 0816/1130] feat(docs): Document adding USB logging to a standalone board (#2039) Currently this is only documented in the zephyr 3.0 upgrade blog. This explicitly documents it as well as when it doesn't need to be applied (i.e. when a mcu board is already in use). --- docs/docs/development/usb-logging.md | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.md index e50e78241a6..6a8f8564b04 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.md @@ -83,3 +83,32 @@ You should see tio printing `Disconnected` or `Connected` when you disconnect or From there, you should see the various log messages from ZMK and Zephyr, depending on which systems you have set to what log levels. + +## Adding USB Logging to a Board + +Standard boards such as the nice!nano and Seeeduino XIAO family have the necessary configuration for logging already added, however if you are developing your own standalone board you may wish to add the ability to use USB logging in the future. + +To add USB logging to a board you need to define the USB CDC ACM device that the serial output gets piped to, as well as adding the console in the `chosen` node inside `.dts`. + +Inside the USB device (`&usbd`), add the CDC ACM node: + +```dts +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + }; +}; +``` + +Then you can add the `zephyr,console` binding in the `chosen` node: + +```dts +/ { + chosen { + ... + zephyr,console = &cdc_acm_uart; + }; + ... +}; +``` From 6276e973d52863878933ac90d2b6a4a922e51fb3 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Wed, 15 Nov 2023 20:24:22 +0000 Subject: [PATCH 0817/1130] feat(ble): Only update BAS when active Subscribes to the activity changing event, will stop the battery work timer when in idle or deep sleep, restart when board goes active --- app/src/battery.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/app/src/battery.c b/app/src/battery.c index c6466272082..e76797ef997 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -18,6 +18,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include +#include #include static uint8_t last_state_of_charge = 0; @@ -84,6 +86,10 @@ static void zmk_battery_timer(struct k_timer *timer) { K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL); +static void zmk_battery_start_reporting() { + k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL)); +} + static int zmk_battery_init(const struct device *_arg) { #if !DT_HAS_CHOSEN(zmk_battery) battery = device_get_binding("BATTERY"); @@ -100,9 +106,30 @@ static int zmk_battery_init(const struct device *_arg) { return -ENODEV; } - k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL)); - + zmk_battery_start_reporting(); return 0; } +static int battery_event_listener(const zmk_event_t *eh) { + + if (as_zmk_activity_state_changed(eh)) { + switch (zmk_activity_get_state()) { + case ZMK_ACTIVITY_ACTIVE: + zmk_battery_start_reporting(); + return 0; + case ZMK_ACTIVITY_IDLE: + case ZMK_ACTIVITY_SLEEP: + k_timer_stop(&battery_timer); + return 0; + default: + break; + } + } + return -ENOTSUP; +} + +ZMK_LISTENER(battery, battery_event_listener); + +ZMK_SUBSCRIPTION(battery, zmk_activity_state_changed); + SYS_INIT(zmk_battery_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); From 4e55c5f6e912ca02eebaf402137beb37fa1d3d8e Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Tue, 6 Sep 2022 12:29:07 +0000 Subject: [PATCH 0818/1130] feat: handle LED indicators report --- app/CMakeLists.txt | 3 + app/Kconfig | 6 ++ app/include/zmk/ble.h | 1 + .../zmk/events/hid_indicators_changed.h | 16 +++++ app/include/zmk/hid.h | 30 +++++++++ app/include/zmk/hid_indicators.h | 19 ++++++ app/include/zmk/hid_indicators_types.h | 9 +++ app/src/ble.c | 9 +++ app/src/events/hid_indicators_changed.c | 10 +++ app/src/hid_indicators.c | 63 +++++++++++++++++++ app/src/hog.c | 53 +++++++++++++++- app/src/usb_hid.c | 35 +++++++++++ docs/docs/config/system.md | 30 ++++----- 13 files changed, 269 insertions(+), 15 deletions(-) create mode 100644 app/include/zmk/events/hid_indicators_changed.h create mode 100644 app/include/zmk/hid_indicators.h create mode 100644 app/include/zmk/hid_indicators_types.h create mode 100644 app/src/events/hid_indicators_changed.c create mode 100644 app/src/hid_indicators.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 0891364b437..41892915f13 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -68,6 +68,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/events/layer_state_changed.c) target_sources(app PRIVATE src/events/modifiers_state_changed.c) target_sources(app PRIVATE src/events/keycode_state_changed.c) + target_sources_ifdef(CONFIG_ZMK_HID_INDICATORS app PRIVATE src/hid_indicators.c) if (CONFIG_ZMK_BLE) target_sources(app PRIVATE src/events/ble_active_profile_changed.c) @@ -83,6 +84,8 @@ target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/behaviors/behavior_bac target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/events/battery_state_changed.c) target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c) +target_sources_ifdef(CONFIG_ZMK_HID_INDICATORS app PRIVATE src/events/hid_indicators_changed.c) + target_sources_ifdef(CONFIG_ZMK_SPLIT app PRIVATE src/events/split_peripheral_status_changed.c) add_subdirectory(src/split) diff --git a/app/Kconfig b/app/Kconfig index f92f0ae3b86..58825fa53cd 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -87,6 +87,12 @@ config ZMK_HID_CONSUMER_REPORT_USAGES_BASIC endchoice +config ZMK_HID_INDICATORS + bool "HID Indicators" + help + Enable HID indicators, used for detecting state of Caps/Scroll/Num Lock, + Kata, and Compose. + menu "Output Types" config ZMK_USB diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 92fd595fbcb..4323d0980e4 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -27,6 +27,7 @@ int zmk_ble_prof_select(uint8_t index); int zmk_ble_prof_disconnect(uint8_t index); int zmk_ble_active_profile_index(); +int zmk_ble_profile_index(const bt_addr_le_t *addr); bt_addr_le_t *zmk_ble_active_profile_addr(); bool zmk_ble_active_profile_is_open(); bool zmk_ble_active_profile_is_connected(); diff --git a/app/include/zmk/events/hid_indicators_changed.h b/app/include/zmk/events/hid_indicators_changed.h new file mode 100644 index 00000000000..2c3ba088269 --- /dev/null +++ b/app/include/zmk/events/hid_indicators_changed.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +struct zmk_hid_indicators_changed { + zmk_hid_indicators indicators; +}; + +ZMK_EVENT_DECLARE(zmk_hid_indicators_changed); diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index aeaa69d8d08..3f7e61bcd45 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -50,6 +50,7 @@ #define ZMK_HID_MAIN_VAL_BUFFERED_BYTES (0x01 << 8) #define ZMK_HID_REPORT_ID_KEYBOARD 0x01 +#define ZMK_HID_REPORT_ID_LEDS 0x01 #define ZMK_HID_REPORT_ID_CONSUMER 0x02 #define ZMK_HID_REPORT_ID_MOUSE 0x03 @@ -73,6 +74,22 @@ static const uint8_t zmk_hid_report_desc[] = { HID_REPORT_COUNT(0x01), HID_INPUT(ZMK_HID_MAIN_VAL_CONST | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + + HID_USAGE_PAGE(HID_USAGE_LED), + HID_USAGE_MIN8(HID_USAGE_LED_NUM_LOCK), + HID_USAGE_MAX8(HID_USAGE_LED_KANA), + HID_REPORT_SIZE(0x01), + HID_REPORT_COUNT(0x05), + HID_OUTPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), + + HID_USAGE_PAGE(HID_USAGE_LED), + HID_REPORT_SIZE(0x03), + HID_REPORT_COUNT(0x01), + HID_OUTPUT(ZMK_HID_MAIN_VAL_CONST | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS), + +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + HID_USAGE_PAGE(HID_USAGE_KEY), #if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) @@ -189,6 +206,19 @@ struct zmk_hid_keyboard_report { struct zmk_hid_keyboard_report_body body; } __packed; +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + +struct zmk_hid_led_report_body { + uint8_t leds; +} __packed; + +struct zmk_hid_led_report { + uint8_t report_id; + struct zmk_hid_led_report_body body; +} __packed; + +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + struct zmk_hid_consumer_report_body { #if IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC) uint8_t keys[CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE]; diff --git a/app/include/zmk/hid_indicators.h b/app/include/zmk/hid_indicators.h new file mode 100644 index 00000000000..69cee13dba2 --- /dev/null +++ b/app/include/zmk/hid_indicators.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +zmk_hid_indicators zmk_hid_indicators_get_current_profile(void); +zmk_hid_indicators zmk_hid_indicators_get_profile(struct zmk_endpoint_instance endpoint); +void zmk_hid_indicators_set_profile(zmk_hid_indicators indicators, + struct zmk_endpoint_instance endpoint); + +void zmk_hid_indicators_process_report(struct zmk_hid_led_report_body *report, + struct zmk_endpoint_instance endpoint); diff --git a/app/include/zmk/hid_indicators_types.h b/app/include/zmk/hid_indicators_types.h new file mode 100644 index 00000000000..aa1504f6bdb --- /dev/null +++ b/app/include/zmk/hid_indicators_types.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +typedef uint8_t zmk_hid_indicators; diff --git a/app/src/ble.c b/app/src/ble.c index 8c991c54b80..fdbde81dabd 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -224,6 +224,15 @@ int zmk_ble_clear_bonds() { int zmk_ble_active_profile_index() { return active_profile; } +int zmk_ble_profile_index(const bt_addr_le_t *addr) { + for (int i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { + if (bt_addr_le_cmp(addr, &profiles[i].peer) == 0) { + return i; + } + } + return -ENODEV; +} + #if IS_ENABLED(CONFIG_SETTINGS) static void ble_save_profile_work(struct k_work *work) { settings_save_one("ble/active_profile", &active_profile, sizeof(active_profile)); diff --git a/app/src/events/hid_indicators_changed.c b/app/src/events/hid_indicators_changed.c new file mode 100644 index 00000000000..ded368354d0 --- /dev/null +++ b/app/src/events/hid_indicators_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(zmk_hid_indicators_changed); diff --git a/app/src/hid_indicators.c b/app/src/hid_indicators.c new file mode 100644 index 00000000000..db769146a2e --- /dev/null +++ b/app/src/hid_indicators.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static zmk_hid_indicators hid_indicators[ZMK_ENDPOINT_COUNT]; + +zmk_hid_indicators zmk_hid_indicators_get_current_profile(void) { + return zmk_hid_indicators_get_profile(zmk_endpoints_selected()); +} + +zmk_hid_indicators zmk_hid_indicators_get_profile(struct zmk_endpoint_instance endpoint) { + int profile = zmk_endpoint_instance_to_index(endpoint); + return hid_indicators[profile]; +} + +static void raise_led_changed_event(struct k_work *_work) { + ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed((struct zmk_hid_indicators_changed){ + .indicators = zmk_hid_indicators_get_current_profile()})); +} + +static K_WORK_DEFINE(led_changed_work, raise_led_changed_event); + +void zmk_hid_indicators_set_profile(zmk_hid_indicators indicators, + struct zmk_endpoint_instance endpoint) { + int profile = zmk_endpoint_instance_to_index(endpoint); + + // This write is not happening on the main thread. To prevent potential data races, every + // operation involving hid_indicators must be atomic. Currently, each function either reads + // or writes only one entry at a time, so it is safe to do these operations without a lock. + hid_indicators[profile] = indicators; + + k_work_submit(&led_changed_work); +} + +void zmk_hid_indicators_process_report(struct zmk_hid_led_report_body *report, + struct zmk_endpoint_instance endpoint) { + uint8_t indicators = report->leds; + zmk_hid_indicators_set_profile(indicators, endpoint); + + LOG_DBG("Update HID indicators: endpoint=%d, indicators=%x", endpoint.transport, indicators); +} + +static int profile_listener(const zmk_event_t *eh) { + raise_led_changed_event(NULL); + return 0; +} + +static ZMK_LISTENER(profile_listener, profile_listener); +static ZMK_SUBSCRIPTION(profile_listener, zmk_endpoint_changed); diff --git a/app/src/hog.c b/app/src/hog.c index 89a903cb967..1baf00b53b5 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -15,8 +15,12 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include #include #include +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) +#include +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) enum { HIDS_REMOTE_WAKE = BIT(0), @@ -51,6 +55,15 @@ static struct hids_report input = { .type = HIDS_INPUT, }; +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + +static struct hids_report led_indicators = { + .id = ZMK_HID_REPORT_ID_LEDS, + .type = HIDS_OUTPUT, +}; + +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + static struct hids_report consumer_input = { .id = ZMK_HID_REPORT_ID_CONSUMER, .type = HIDS_INPUT, @@ -94,6 +107,34 @@ static ssize_t read_hids_input_report(struct bt_conn *conn, const struct bt_gatt sizeof(struct zmk_hid_keyboard_report_body)); } +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) +static ssize_t write_hids_leds_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, + const void *buf, uint16_t len, uint16_t offset, + uint8_t flags) { + if (offset != 0) { + return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET); + } + if (len != sizeof(struct zmk_hid_led_report_body)) { + return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN); + } + + struct zmk_hid_led_report_body *report = (struct zmk_hid_led_report_body *)buf; + int profile = zmk_ble_profile_index(bt_conn_get_dst(conn)); + if (profile < 0) { + return BT_GATT_ERR(BT_ATT_ERR_UNLIKELY); + } + + struct zmk_endpoint_instance endpoint = {.transport = ZMK_TRANSPORT_BLE, + .ble = { + .profile_index = profile, + }}; + zmk_hid_indicators_process_report(report, endpoint); + + return len; +} + +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + static ssize_t read_hids_consumer_input_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) { @@ -152,6 +193,7 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, NULL, &input), + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, read_hids_consumer_input_report, NULL, NULL), BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), @@ -166,6 +208,15 @@ BT_GATT_SERVICE_DEFINE( NULL, &mouse_input), #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, + BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, + BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT, NULL, + write_hids_leds_report, NULL), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, + NULL, &led_indicators), +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); @@ -251,7 +302,7 @@ void send_consumer_report_callback(struct k_work *work) { } struct bt_gatt_notify_params notify_params = { - .attr = &hog_svc.attrs[10], + .attr = &hog_svc.attrs[9], .data = &report, .len = sizeof(report), }; diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index fd58c14bf4a..3412314086f 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -13,6 +13,9 @@ #include #include #include +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) +#include +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -83,12 +86,44 @@ static int get_report_cb(const struct device *dev, struct usb_setup_packet *setu return 0; } +static int set_report_cb(const struct device *dev, struct usb_setup_packet *setup, int32_t *len, + uint8_t **data) { + if ((setup->wValue & HID_GET_REPORT_TYPE_MASK) != HID_REPORT_TYPE_OUTPUT) { + LOG_ERR("Unsupported report type %d requested", + (setup->wValue & HID_GET_REPORT_TYPE_MASK) >> 8); + return -ENOTSUP; + } + + switch (setup->wValue & HID_GET_REPORT_ID_MASK) { +#if IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + case ZMK_HID_REPORT_ID_LEDS: + if (*len != sizeof(struct zmk_hid_led_report)) { + LOG_ERR("LED set report is malformed: length=%d", *len); + return -EINVAL; + } else { + struct zmk_hid_led_report *report = (struct zmk_hid_led_report *)*data; + struct zmk_endpoint_instance endpoint = { + .transport = ZMK_TRANSPORT_USB, + }; + zmk_hid_indicators_process_report(&report->body, endpoint); + } + break; +#endif // IS_ENABLED(CONFIG_ZMK_HID_INDICATORS) + default: + LOG_ERR("Invalid report ID %d requested", setup->wValue & HID_GET_REPORT_ID_MASK); + return -EINVAL; + } + + return 0; +} + static const struct hid_ops ops = { #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) .protocol_change = set_proto_cb, #endif .int_in_ready = in_ready_cb, .get_report = get_report_cb, + .set_report = set_report_cb, }; static int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index b9dd580de0c..6e834c678b9 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -22,9 +22,10 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ### HID -| Config | Type | Description | Default | -| ------------------------------------- | ---- | ------------------------------------------------- | ------- | -| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | +| Config | Type | Description | Default | +| ------------------------------------- | ---- | -------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable reciept of HID/LED indicator state from connected hosts | n | +| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | Exactly zero or one of the following options may be set to `y`. The first is used if none are set. @@ -91,14 +92,15 @@ Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the s Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). -| Config | Type | Description | Default | -| ----------------------------------------------------- | ---- | ----------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | -| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | -| `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | +| Config | Type | Description | Default | +| ----------------------------------------------------- | ---- | ------------------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | +| `CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS` | bool | Enable split keyboard support for passing indicator state to peripherals | n | +| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | +| `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | From d9bb0d7d0e05c547d1138c48746a72660d2bf326 Mon Sep 17 00:00:00 2001 From: Alessandro Bortolin Date: Sun, 27 Nov 2022 18:11:43 +0100 Subject: [PATCH 0819/1130] feat: LED indicators on peripheral side --- app/include/zmk/split/bluetooth/central.h | 12 ++++- app/include/zmk/split/bluetooth/uuid.h | 1 + app/src/hid_indicators.c | 10 +++- app/src/split/Kconfig | 6 +++ app/src/split/bluetooth/central.c | 56 ++++++++++++++++++++++- app/src/split/bluetooth/service.c | 38 +++++++++++++++ 6 files changed, 119 insertions(+), 4 deletions(-) diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index 443d9b1b489..d38b51e88cd 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -4,5 +4,15 @@ #include #include +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) +#include +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *binding, - struct zmk_behavior_binding_event event, bool state); \ No newline at end of file + struct zmk_behavior_binding_event event, bool state); + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + +int zmk_split_bt_update_hid_indicator(zmk_hid_indicators indicators); + +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) diff --git a/app/include/zmk/split/bluetooth/uuid.h b/app/include/zmk/split/bluetooth/uuid.h index c38131dd83e..dccdfc804c5 100644 --- a/app/include/zmk/split/bluetooth/uuid.h +++ b/app/include/zmk/split/bluetooth/uuid.h @@ -17,3 +17,4 @@ #define ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000001) #define ZMK_SPLIT_BT_CHAR_RUN_BEHAVIOR_UUID ZMK_BT_SPLIT_UUID(0x00000002) #define ZMK_SPLIT_BT_CHAR_SENSOR_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000003) +#define ZMK_SPLIT_BT_UPDATE_HID_INDICATORS_UUID ZMK_BT_SPLIT_UUID(0x00000004) diff --git a/app/src/hid_indicators.c b/app/src/hid_indicators.c index db769146a2e..45cac96a04c 100644 --- a/app/src/hid_indicators.c +++ b/app/src/hid_indicators.c @@ -28,8 +28,14 @@ zmk_hid_indicators zmk_hid_indicators_get_profile(struct zmk_endpoint_instance e } static void raise_led_changed_event(struct k_work *_work) { - ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed((struct zmk_hid_indicators_changed){ - .indicators = zmk_hid_indicators_get_current_profile()})); + zmk_hid_indicators indicators = zmk_hid_indicators_get_current_profile(); + + ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed( + (struct zmk_hid_indicators_changed){.indicators = indicators})); + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) && IS_ENABLED(CONFIG_ZMK_SPLIT_BLE) + zmk_split_bt_update_hid_indicator(indicators); +#endif } static K_WORK_DEFINE(led_changed_work, raise_led_changed_event); diff --git a/app/src/split/Kconfig b/app/src/split/Kconfig index dbe5f092644..1134937056f 100644 --- a/app/src/split/Kconfig +++ b/app/src/split/Kconfig @@ -20,6 +20,12 @@ config ZMK_SPLIT_BLE endchoice +config ZMK_SPLIT_PERIPHERAL_HID_INDICATORS + bool "Peripheral HID Indicators" + depends on ZMK_HID_INDICATORS + help + Enable propogating the HID (LED) Indicator state to the split peripheral(s). + #ZMK_SPLIT endif diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 860e89a5f3e..d39309d2f76 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -27,6 +27,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include static int start_scanning(void); @@ -46,6 +47,9 @@ struct peripheral_slot { struct bt_gatt_subscribe_params sensor_subscribe_params; struct bt_gatt_discover_params sub_discover_params; uint16_t run_behavior_handle; +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + uint16_t update_hid_indicators; +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) uint8_t position_state[POSITION_STATE_DATA_LEN]; uint8_t changed_positions[POSITION_STATE_DATA_LEN]; }; @@ -131,6 +135,9 @@ int release_peripheral_slot(int index) { // Clean up previously discovered handles; slot->subscribe_params.value_handle = 0; slot->run_behavior_handle = 0; +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + slot->update_hid_indicators = 0; +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) return 0; } @@ -329,13 +336,23 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, slot->discover_params.uuid = NULL; slot->discover_params.start_handle = attr->handle + 2; slot->run_behavior_handle = bt_gatt_attr_value_handle(attr); +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + } else if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_UPDATE_HID_INDICATORS_UUID))) { + LOG_DBG("Found update HID indicators handle"); + slot->update_hid_indicators = bt_gatt_attr_value_handle(attr); +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) } - bool subscribed = slot->run_behavior_handle && slot->subscribe_params.value_handle; + bool subscribed = (slot->run_behavior_handle && slot->subscribe_params.value_handle); #if ZMK_KEYMAP_HAS_SENSORS subscribed = subscribed && slot->sensor_subscribe_params.value_handle; #endif /* ZMK_KEYMAP_HAS_SENSORS */ +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + subscribed = subscribed && slot->update_hid_indicators; +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + return subscribed ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; } @@ -685,6 +702,43 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi return split_bt_invoke_behavior_payload(wrapper); } +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + +static zmk_hid_indicators hid_indicators = 0; + +static void split_central_update_indicators_callback(struct k_work *work) { + zmk_hid_indicators indicators = hid_indicators; + for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { + if (peripherals[i].state != PERIPHERAL_SLOT_STATE_CONNECTED) { + continue; + } + + if (peripherals[i].update_hid_indicators == 0) { + // It appears that sometimes the peripheral is considered connected + // before the GATT characteristics have been discovered. If this is + // the case, the update_hid_indicators handle will not yet be set. + continue; + } + + int err = bt_gatt_write_without_response(peripherals[i].conn, + peripherals[i].update_hid_indicators, &indicators, + sizeof(indicators), true); + + if (err) { + LOG_ERR("Failed to write HID indicator characteristic (err %d)", err); + } + } +} + +static K_WORK_DEFINE(split_central_update_indicators, split_central_update_indicators_callback); + +int zmk_split_bt_update_hid_indicator(zmk_hid_indicators indicators) { + hid_indicators = indicators; + return k_work_submit_to_queue(&split_central_split_run_q, &split_central_update_indicators); +} + +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + int zmk_split_bt_central_init(const struct device *_arg) { k_work_queue_start(&split_central_split_run_q, split_central_split_run_q_stack, K_THREAD_STACK_SIZEOF(split_central_split_run_q_stack), diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index 620df53e11c..f9d8bab0de4 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -21,6 +21,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) +#include +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + #include #include @@ -105,6 +110,34 @@ static void split_svc_pos_state_ccc(const struct bt_gatt_attr *attr, uint16_t va LOG_DBG("value %d", value); } +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + +static zmk_hid_indicators hid_indicators = 0; + +static void split_svc_update_indicators_callback(struct k_work *work) { + LOG_DBG("Raising HID indicators changed event: %x", hid_indicators); + ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed( + (struct zmk_hid_indicators_changed){.indicators = hid_indicators})); +} + +static K_WORK_DEFINE(split_svc_update_indicators_work, split_svc_update_indicators_callback); + +static ssize_t split_svc_update_indicators(struct bt_conn *conn, const struct bt_gatt_attr *attr, + const void *buf, uint16_t len, uint16_t offset, + uint8_t flags) { + if (offset + len > sizeof(zmk_hid_indicators)) { + return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET); + } + + memcpy((uint8_t *)&hid_indicators + offset, buf, len); + + k_work_submit(&split_svc_update_indicators_work); + + return len; +} + +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + BT_GATT_SERVICE_DEFINE( split_svc, BT_GATT_PRIMARY_SERVICE(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID)), BT_GATT_CHARACTERISTIC(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID), @@ -122,6 +155,11 @@ BT_GATT_SERVICE_DEFINE( split_svc_sensor_state, NULL, &last_sensor_event), BT_GATT_CCC(split_svc_sensor_state_ccc, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), #endif /* ZMK_KEYMAP_HAS_SENSORS */ +#if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + BT_GATT_CHARACTERISTIC(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_UPDATE_HID_INDICATORS_UUID), + BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE_ENCRYPT, NULL, + split_svc_update_indicators, NULL), +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) ); K_THREAD_STACK_DEFINE(service_q_stack, CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE); From 817ce8764fcb9ad89d3cb8464d18c07b7169ed25 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 27 Nov 2023 23:48:13 +0000 Subject: [PATCH 0820/1130] refactor: Move to `zmk_hid_indicators_t` type. --- app/include/zmk/events/hid_indicators_changed.h | 2 +- app/include/zmk/hid_indicators.h | 6 +++--- app/include/zmk/hid_indicators_types.h | 2 +- app/include/zmk/split/bluetooth/central.h | 2 +- app/src/hid_indicators.c | 14 +++++++------- app/src/split/bluetooth/central.c | 6 +++--- app/src/split/bluetooth/service.c | 4 ++-- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/include/zmk/events/hid_indicators_changed.h b/app/include/zmk/events/hid_indicators_changed.h index 2c3ba088269..b1fba797559 100644 --- a/app/include/zmk/events/hid_indicators_changed.h +++ b/app/include/zmk/events/hid_indicators_changed.h @@ -10,7 +10,7 @@ #include struct zmk_hid_indicators_changed { - zmk_hid_indicators indicators; + zmk_hid_indicators_t indicators; }; ZMK_EVENT_DECLARE(zmk_hid_indicators_changed); diff --git a/app/include/zmk/hid_indicators.h b/app/include/zmk/hid_indicators.h index 69cee13dba2..7c7b89f53ce 100644 --- a/app/include/zmk/hid_indicators.h +++ b/app/include/zmk/hid_indicators.h @@ -10,9 +10,9 @@ #include #include -zmk_hid_indicators zmk_hid_indicators_get_current_profile(void); -zmk_hid_indicators zmk_hid_indicators_get_profile(struct zmk_endpoint_instance endpoint); -void zmk_hid_indicators_set_profile(zmk_hid_indicators indicators, +zmk_hid_indicators_t zmk_hid_indicators_get_current_profile(void); +zmk_hid_indicators_t zmk_hid_indicators_get_profile(struct zmk_endpoint_instance endpoint); +void zmk_hid_indicators_set_profile(zmk_hid_indicators_t indicators, struct zmk_endpoint_instance endpoint); void zmk_hid_indicators_process_report(struct zmk_hid_led_report_body *report, diff --git a/app/include/zmk/hid_indicators_types.h b/app/include/zmk/hid_indicators_types.h index aa1504f6bdb..43bcf3c5bb2 100644 --- a/app/include/zmk/hid_indicators_types.h +++ b/app/include/zmk/hid_indicators_types.h @@ -6,4 +6,4 @@ #pragma once -typedef uint8_t zmk_hid_indicators; +typedef uint8_t zmk_hid_indicators_t; diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index d38b51e88cd..4706b3aa831 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -13,6 +13,6 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi #if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) -int zmk_split_bt_update_hid_indicator(zmk_hid_indicators indicators); +int zmk_split_bt_update_hid_indicator(zmk_hid_indicators_t indicators); #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) diff --git a/app/src/hid_indicators.c b/app/src/hid_indicators.c index 45cac96a04c..50b2fbcc9ba 100644 --- a/app/src/hid_indicators.c +++ b/app/src/hid_indicators.c @@ -16,19 +16,19 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -static zmk_hid_indicators hid_indicators[ZMK_ENDPOINT_COUNT]; +static zmk_hid_indicators_t hid_indicators[ZMK_ENDPOINT_COUNT]; -zmk_hid_indicators zmk_hid_indicators_get_current_profile(void) { +zmk_hid_indicators_t zmk_hid_indicators_get_current_profile(void) { return zmk_hid_indicators_get_profile(zmk_endpoints_selected()); } -zmk_hid_indicators zmk_hid_indicators_get_profile(struct zmk_endpoint_instance endpoint) { - int profile = zmk_endpoint_instance_to_index(endpoint); +zmk_hid_indicators_t zmk_hid_indicators_get_profile(struct zmk_endpoint_instance endpoint) { + const int profile = zmk_endpoint_instance_to_index(endpoint); return hid_indicators[profile]; } static void raise_led_changed_event(struct k_work *_work) { - zmk_hid_indicators indicators = zmk_hid_indicators_get_current_profile(); + const zmk_hid_indicators_t indicators = zmk_hid_indicators_get_current_profile(); ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed( (struct zmk_hid_indicators_changed){.indicators = indicators})); @@ -40,7 +40,7 @@ static void raise_led_changed_event(struct k_work *_work) { static K_WORK_DEFINE(led_changed_work, raise_led_changed_event); -void zmk_hid_indicators_set_profile(zmk_hid_indicators indicators, +void zmk_hid_indicators_set_profile(zmk_hid_indicators_t indicators, struct zmk_endpoint_instance endpoint) { int profile = zmk_endpoint_instance_to_index(endpoint); @@ -54,7 +54,7 @@ void zmk_hid_indicators_set_profile(zmk_hid_indicators indicators, void zmk_hid_indicators_process_report(struct zmk_hid_led_report_body *report, struct zmk_endpoint_instance endpoint) { - uint8_t indicators = report->leds; + const zmk_hid_indicators_t indicators = (zmk_hid_indicators_t)report->leds; zmk_hid_indicators_set_profile(indicators, endpoint); LOG_DBG("Update HID indicators: endpoint=%d, indicators=%x", endpoint.transport, indicators); diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index d39309d2f76..6f3b78ab883 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -704,10 +704,10 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi #if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) -static zmk_hid_indicators hid_indicators = 0; +static zmk_hid_indicators_t hid_indicators = 0; static void split_central_update_indicators_callback(struct k_work *work) { - zmk_hid_indicators indicators = hid_indicators; + zmk_hid_indicators_t indicators = hid_indicators; for (int i = 0; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT; i++) { if (peripherals[i].state != PERIPHERAL_SLOT_STATE_CONNECTED) { continue; @@ -732,7 +732,7 @@ static void split_central_update_indicators_callback(struct k_work *work) { static K_WORK_DEFINE(split_central_update_indicators, split_central_update_indicators_callback); -int zmk_split_bt_update_hid_indicator(zmk_hid_indicators indicators) { +int zmk_split_bt_update_hid_indicator(zmk_hid_indicators_t indicators) { hid_indicators = indicators; return k_work_submit_to_queue(&split_central_split_run_q, &split_central_update_indicators); } diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index f9d8bab0de4..0072cf8c835 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -112,7 +112,7 @@ static void split_svc_pos_state_ccc(const struct bt_gatt_attr *attr, uint16_t va #if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) -static zmk_hid_indicators hid_indicators = 0; +static zmk_hid_indicators_t hid_indicators = 0; static void split_svc_update_indicators_callback(struct k_work *work) { LOG_DBG("Raising HID indicators changed event: %x", hid_indicators); @@ -125,7 +125,7 @@ static K_WORK_DEFINE(split_svc_update_indicators_work, split_svc_update_indicato static ssize_t split_svc_update_indicators(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags) { - if (offset + len > sizeof(zmk_hid_indicators)) { + if (offset + len > sizeof(zmk_hid_indicators_t)) { return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET); } From 69f7bfb40911d4bbf9af0910d956a092d5fb9159 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Tue, 28 Nov 2023 00:09:58 +0000 Subject: [PATCH 0821/1130] feat(boards): Kinesis Advantage 360 pro Add the Kinesis Advantage 360 Pro board definition. --- app/boards/arm/adv360pro/Kconfig | 7 + app/boards/arm/adv360pro/Kconfig.board | 12 ++ app/boards/arm/adv360pro/Kconfig.defconfig | 55 ++++++ app/boards/arm/adv360pro/README.md | 7 + .../arm/adv360pro/adv360pro-pinctrl.dtsi | 30 ++++ app/boards/arm/adv360pro/adv360pro.dtsi | 163 ++++++++++++++++++ app/boards/arm/adv360pro/adv360pro.keymap | 48 ++++++ app/boards/arm/adv360pro/adv360pro.yaml | 19 ++ app/boards/arm/adv360pro/adv360pro.zmk.yml | 16 ++ app/boards/arm/adv360pro/adv360pro_left.dts | 36 ++++ .../arm/adv360pro/adv360pro_left_defconfig | 55 ++++++ app/boards/arm/adv360pro/adv360pro_right.dts | 40 +++++ .../arm/adv360pro/adv360pro_right_defconfig | 54 ++++++ app/boards/arm/adv360pro/board.cmake | 8 + 14 files changed, 550 insertions(+) create mode 100644 app/boards/arm/adv360pro/Kconfig create mode 100644 app/boards/arm/adv360pro/Kconfig.board create mode 100644 app/boards/arm/adv360pro/Kconfig.defconfig create mode 100755 app/boards/arm/adv360pro/README.md create mode 100644 app/boards/arm/adv360pro/adv360pro-pinctrl.dtsi create mode 100644 app/boards/arm/adv360pro/adv360pro.dtsi create mode 100644 app/boards/arm/adv360pro/adv360pro.keymap create mode 100644 app/boards/arm/adv360pro/adv360pro.yaml create mode 100644 app/boards/arm/adv360pro/adv360pro.zmk.yml create mode 100644 app/boards/arm/adv360pro/adv360pro_left.dts create mode 100644 app/boards/arm/adv360pro/adv360pro_left_defconfig create mode 100644 app/boards/arm/adv360pro/adv360pro_right.dts create mode 100644 app/boards/arm/adv360pro/adv360pro_right_defconfig create mode 100644 app/boards/arm/adv360pro/board.cmake diff --git a/app/boards/arm/adv360pro/Kconfig b/app/boards/arm/adv360pro/Kconfig new file mode 100644 index 00000000000..1840851c2bb --- /dev/null +++ b/app/boards/arm/adv360pro/Kconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_ADV360PRO_LEFT || BOARD_ADV360PRO_RIGHT diff --git a/app/boards/arm/adv360pro/Kconfig.board b/app/boards/arm/adv360pro/Kconfig.board new file mode 100644 index 00000000000..51ebaec0791 --- /dev/null +++ b/app/boards/arm/adv360pro/Kconfig.board @@ -0,0 +1,12 @@ +# +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config BOARD_ADV360PRO_LEFT + bool "adv360pro_left" + depends on SOC_NRF52840_QIAA + +config BOARD_ADV360PRO_RIGHT + bool "adv360pro_right" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/adv360pro/Kconfig.defconfig b/app/boards/arm/adv360pro/Kconfig.defconfig new file mode 100644 index 00000000000..0c4abacfbfa --- /dev/null +++ b/app/boards/arm/adv360pro/Kconfig.defconfig @@ -0,0 +1,55 @@ +# +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +if BOARD_ADV360PRO_LEFT + +config ZMK_KEYBOARD_NAME + default "Adv360 Pro" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +endif # BOARD_ADV360PRO_LEFT + +if BOARD_ADV360PRO_RIGHT + +config ZMK_KEYBOARD_NAME + default "Adv360 Pro rt" + +endif # BOARD_ADV360PRO_RIGHT + + +if BOARD_ADV360PRO_LEFT || BOARD_ADV360PRO_RIGHT + +config BOARD + default "adv360pro" + +config ZMK_SPLIT + default y + +config SPI + bool + default y + +config BT_CTLR + default BT + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +config SPI + default y + +endif # BOARD_ADV360PRO_LEFT || BOARD_ADV360PRO_RIGHT diff --git a/app/boards/arm/adv360pro/README.md b/app/boards/arm/adv360pro/README.md new file mode 100755 index 00000000000..89fa1da5152 --- /dev/null +++ b/app/boards/arm/adv360pro/README.md @@ -0,0 +1,7 @@ +# Kinesis Advantage 360 Professional + +This board definition provides upstream support for the [Kinesis Advantage 360 Professional](https://kinesis-ergo.com/keyboards/advantage360/) + +Kinesis offer a specific [custom configuration](https://github.com/KinesisCorporation/Adv360-Pro-ZMK/) for the 360 Pro that references [a customised version of ZMK](https://github.com/ReFil/zmk/tree/adv360-z3.2-2) with Advantage 360 Pro specific functionality and changes over base ZMK. The Kinesis fork is regularly updated to bring the latest updates and changes from base ZMK however will not always be completely up to date, some features such as new keycodes will not be immediately available on the 360 Pro after they are implemented in base ZMK. + +When using this board definition some of the more advanced features (the indicator RGB leds) will not work, and Kinesis cannot provide customer service for usage of base ZMK. Likewise the ZMK community cannot provide support for either the Kinesis keymap editor, nor any usage of the Kinesis custom fork. diff --git a/app/boards/arm/adv360pro/adv360pro-pinctrl.dtsi b/app/boards/arm/adv360pro/adv360pro-pinctrl.dtsi new file mode 100644 index 00000000000..7dafcdcecf4 --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro-pinctrl.dtsi @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/arm/adv360pro/adv360pro.dtsi b/app/boards/arm/adv360pro/adv360pro.dtsi new file mode 100644 index 00000000000..85ff5d1cfd1 --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro.dtsi @@ -0,0 +1,163 @@ +/* +* +* Copyright (c) 2023 The ZMK Contributors +* SPDX-License-Identifier: MIT +* +*/ + +/dts-v1/; +#include + +#include +#include + +#include "adv360pro-pinctrl.dtsi" + +/ { + model = "Adv360 Pro"; + compatible = "kinesis,adv360pro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; + zmk,kscan = &kscan0; + zmk,backlight = &backlight; + zmk,battery = &vbatt; + zmk,matrix_transform = &default_transform; + zmk,underglow = &led_strip; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <20>; + rows = <5>; + + + map = < + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,13) RC(4,14) RC(4,15) RC(4,16) RC(4,17) RC(4,18) RC(4,19) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,13) RC(3,14) RC(3,15) RC(3,16) RC(3,17) RC(3,18) RC(3,19) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) RC(2,14) RC(2,15) RC(2,16) RC(2,17) RC(2,18) RC(2,19) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,9) RC(1,10) RC(1,14) RC(1,15) RC(1,16) RC(1,17) RC(1,18) RC(1,19) + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,15) RC(0,16) RC(0,17) RC(0,18) RC(0,19) + + >; + }; + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + }; + + vbatt: vbatt { + compatible = "zmk,battery-voltage-divider"; + io-channels = <&adc 2>; + output-ohms = <100000>; + full-ohms = <(100000 + 100000)>; + }; + + backlight: pwmleds { + compatible = "pwm-leds"; + pwm_led_0 { + pwms = <&pwm0 0 10000 PWM_POLARITY_NORMAL>; + }; + }; + +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&usbd { + status = "okay"; + cdc_acm_uart: cdc_acm_uart { + compatible = "zephyr,cdc-acm-uart"; + }; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <3>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; diff --git a/app/boards/arm/adv360pro/adv360pro.keymap b/app/boards/arm/adv360pro/adv360pro.keymap new file mode 100644 index 00000000000..999781e437f --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro.keymap @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp EQUAL &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &tog 1 &mo 3 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS + &kp TAB &kp Q &kp W &kp E &kp R &kp T &none &none &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp ESC &kp A &kp S &kp D &kp F &kp G &none &kp LCTRL &kp LALT &kp LGUI &kp RCTRL &none &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp HOME &kp PG_UP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &mo 2 &kp GRAVE &kp CAPS &kp LEFT &kp RIGHT &kp BSPC &kp DEL &kp END &kp PG_DN &kp ENTER &kp SPACE &kp UP &kp DOWN &kp LBKT &kp RBKT &mo 2 + >; + }; + keypad { + bindings = < + &kp EQUAL &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &mo 3 &kp N6 &kp KP_NUM &kp KP_EQUAL &kp KP_DIVIDE &kp KP_MULTIPLY &kp MINUS + &kp TAB &kp Q &kp W &kp E &kp R &kp T &none &none &kp Y &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_MINUS &kp BSLH + &kp ESC &kp A &kp S &kp D &kp F &kp G &none &kp LCTRL &kp LALT &kp LGUI &kp RCTRL &none &kp H &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_PLUS &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp HOME &kp PG_UP &kp N &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER &kp RSHFT + &mo 2 &kp GRAVE &kp CAPS &kp LEFT &kp RIGHT &kp BSPC &kp DEL &kp END &kp PG_DN &kp ENTER &kp KP_N0 &kp UP &kp DOWN &kp KP_DOT &kp RBKT &mo 2 + >; + }; + fn { + bindings = < + &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &tog 1 &mo 3 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &trans &trans &trans &trans &trans &none &none &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &none &trans &trans &trans &trans &none &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + mod { + bindings = < + &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &none &trans &none &none &none &none &none &none + &none &none &none &none &none &none &bootloader &bootloader &none &none &none &none &none &none + &none &none &none &none &none &none &none &none &none &bt BT_CLR &none &none &none &none &none &none &none &none + &none &none &none &none &none &none &none &none &none &none &none &none &none &none + &none &none &none &none &none &none &none &none &none &bl BL_TOG &rgb_ug RGB_TOG &bl BL_INC &bl BL_DEC &none &none &none + >; + }; + }; +}; diff --git a/app/boards/arm/adv360pro/adv360pro.yaml b/app/boards/arm/adv360pro/adv360pro.yaml new file mode 100644 index 00000000000..2d555d4e20c --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro.yaml @@ -0,0 +1,19 @@ +identifier: adv360pro +name: Advantage 360 Pro +type: keyboard +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio + - i2c + - counter + - spi + - usb_device + - nvs + - can + - kscan + - ble + - pwm diff --git a/app/boards/arm/adv360pro/adv360pro.zmk.yml b/app/boards/arm/adv360pro/adv360pro.zmk.yml new file mode 100644 index 00000000000..7d4a4b44495 --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro.zmk.yml @@ -0,0 +1,16 @@ +file_format: "1" +id: adv360pro +name: Advantage 360 Pro +type: board +url: https://kinesis-ergo.com/keyboards/advantage360 +arch: arm +features: + - keys + - underglow + - backlight +outputs: + - usb + - ble +siblings: + - adv360pro_left + - adv360pro_right diff --git a/app/boards/arm/adv360pro/adv360pro_left.dts b/app/boards/arm/adv360pro/adv360pro_left.dts new file mode 100644 index 00000000000..6ef5f59071b --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro_left.dts @@ -0,0 +1,36 @@ +/* +* +* Copyright (c) 2023 The ZMK Contributors +* SPDX-License-Identifier: MIT +* +*/ + +#include "adv360pro.dtsi" + +/{ + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + diode-direction = "col2row"; + row-gpios + = <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&gpio0 25 GPIO_ACTIVE_HIGH> + , <&gpio0 11 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + , <&gpio0 29 GPIO_ACTIVE_HIGH> + , <&gpio0 30 GPIO_ACTIVE_HIGH> + , <&gpio0 31 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + ; + }; +}; diff --git a/app/boards/arm/adv360pro/adv360pro_left_defconfig b/app/boards/arm/adv360pro/adv360pro_left_defconfig new file mode 100644 index 00000000000..6eb5a8d042a --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro_left_defconfig @@ -0,0 +1,55 @@ +# +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_ADV360PRO_LEFT=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable SPI for LEDS +CONFIG_PINCTRL=y +CONFIG_SPI=y +CONFIG_SPI_NRFX=y + +# Enable writing to flash +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_150PPM=y + +#RGB leds config +CONFIG_WS2812_STRIP=y +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n +CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=0 +CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y + +#Backlighting configuration +CONFIG_PWM=y +CONFIG_LED_PWM=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_BRT_START=20 +CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE=y + +#Misc configuration +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +CONFIG_ZMK_HID_REPORT_TYPE_NKRO=y +CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_ZMK_USB=y +CONFIG_ZMK_BLE=y diff --git a/app/boards/arm/adv360pro/adv360pro_right.dts b/app/boards/arm/adv360pro/adv360pro_right.dts new file mode 100644 index 00000000000..97d846f855c --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro_right.dts @@ -0,0 +1,40 @@ +/* +* +* Copyright (c) 2023 The ZMK Contributors +* SPDX-License-Identifier: MIT +* +*/ + +#include "adv360pro.dtsi" + +/{ + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 29 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&gpio0 12 GPIO_ACTIVE_HIGH> + , <&gpio1 9 GPIO_ACTIVE_HIGH> + , <&gpio0 7 GPIO_ACTIVE_HIGH> + , <&gpio1 11 GPIO_ACTIVE_HIGH> + , <&gpio1 10 GPIO_ACTIVE_HIGH> + , <&gpio1 13 GPIO_ACTIVE_HIGH> + , <&gpio1 15 GPIO_ACTIVE_HIGH> + , <&gpio0 3 GPIO_ACTIVE_HIGH> + , <&gpio0 2 GPIO_ACTIVE_HIGH> + , <&gpio0 28 GPIO_ACTIVE_HIGH> + ; + }; +}; + +&default_transform { + col-offset = <10>; +}; diff --git a/app/boards/arm/adv360pro/adv360pro_right_defconfig b/app/boards/arm/adv360pro/adv360pro_right_defconfig new file mode 100644 index 00000000000..b5174549ea4 --- /dev/null +++ b/app/boards/arm/adv360pro/adv360pro_right_defconfig @@ -0,0 +1,54 @@ +# +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_ADV360PRO_RIGHT=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable SPI for LEDS +CONFIG_PINCTRL=y +CONFIG_SPI=y +CONFIG_SPI_NRFX=y + +# Enable writing to flash +CONFIG_USE_DT_CODE_PARTITION=y +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y + +# Enable 32kHz crystal +CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_150PPM=y + +#RGB leds config +CONFIG_WS2812_STRIP=y +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n +CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=0 +CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y + +#Backlighting configuration +CONFIG_PWM=y +CONFIG_LED_PWM=y +CONFIG_ZMK_BACKLIGHT=y +CONFIG_ZMK_BACKLIGHT_BRT_START=20 +CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE=y + +#Misc configuration +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +CONFIG_ZMK_HID_REPORT_TYPE_NKRO=y +CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_ZMK_BLE=y diff --git a/app/boards/arm/adv360pro/board.cmake b/app/boards/arm/adv360pro/board.cmake new file mode 100644 index 00000000000..6d62a8a16bf --- /dev/null +++ b/app/boards/arm/adv360pro/board.cmake @@ -0,0 +1,8 @@ +# +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) From 744f70c80c84cc0e471db41c3834a4030b4743dc Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 1 Dec 2023 23:39:31 +0000 Subject: [PATCH 0822/1130] feat(bt): Add support for unauth overwrite * Properly handle the user enabling the `CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE` Zephyr flag and handle re-pairing to an existing taken profile from the same address. --- app/src/ble.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index fdbde81dabd..501d4752ba4 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -551,13 +551,19 @@ static void auth_cancel(struct bt_conn *conn) { LOG_DBG("Pairing cancelled: %s", addr); } +static bool pairing_allowed_for_current_profile(struct bt_conn *conn) { + return zmk_ble_active_profile_is_open() || + (IS_ENABLED(CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE) && + bt_addr_le_cmp(zmk_ble_active_profile_addr(), bt_conn_get_dst(conn)) == 0); +} + static enum bt_security_err auth_pairing_accept(struct bt_conn *conn, const struct bt_conn_pairing_feat *const feat) { struct bt_conn_info info; bt_conn_get_info(conn, &info); LOG_DBG("role %d, open? %s", info.role, zmk_ble_active_profile_is_open() ? "yes" : "no"); - if (info.role == BT_CONN_ROLE_PERIPHERAL && !zmk_ble_active_profile_is_open()) { + if (info.role == BT_CONN_ROLE_PERIPHERAL && !pairing_allowed_for_current_profile(conn)) { LOG_WRN("Rejecting pairing request to taken profile %d", active_profile); return BT_SECURITY_ERR_PAIR_NOT_ALLOWED; } @@ -578,7 +584,7 @@ static void auth_pairing_complete(struct bt_conn *conn, bool bonded) { return; } - if (!zmk_ble_active_profile_is_open()) { + if (!pairing_allowed_for_current_profile(conn)) { LOG_ERR("Pairing completed but current profile is not open: %s", addr); bt_unpair(BT_ID_DEFAULT, dst); return; From 329d6474ee4eed9791d53f9dcfc6dd0ec6401701 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 30 Nov 2023 06:48:35 +0000 Subject: [PATCH 0823/1130] feat(ble): Make it possible to use BT_GATT_AUTO_SEC_REQ * Only upgrade security of new connections if BT_GATT_AUTO_SEC_REQ is not enabled. --- app/src/ble.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/ble.c b/app/src/ble.c index 501d4752ba4..b29a098b0b9 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -445,9 +445,11 @@ static void connected(struct bt_conn *conn, uint8_t err) { LOG_DBG("Connected %s", addr); +#if !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) if (bt_conn_set_security(conn, BT_SECURITY_L2)) { LOG_ERR("Failed to set security"); } +#endif // !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) update_advertising(); From 3fad4dba07c22cfbe6e54512cd2052da3aca4f10 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 1 Dec 2023 23:33:29 +0000 Subject: [PATCH 0824/1130] fix(bt): Passkey entry pairing fixes. * Don't propogate any key press events while in the middle of passkey entry, avoid funky state on hosts. * Handle passkey on release, not press, to ensure key *releases* are not accidentally sent, especially the Enter release at the very end of passkey entry, which can trigger cancel in the dialog if the keyboard is connected via USB to the same host. --- app/src/ble.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index b29a098b0b9..a6e63cb51ee 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -704,9 +704,9 @@ static int zmk_ble_handle_key_user(struct zmk_keycode_state_changed *event) { return ZMK_EV_EVENT_BUBBLE; } - if (!event->state) { - LOG_DBG("Key released, ignoring"); - return ZMK_EV_EVENT_BUBBLE; + if (event->state) { + LOG_DBG("Key press, ignoring"); + return ZMK_EV_EVENT_HANDLED; } if (key == HID_USAGE_KEY_KEYBOARD_ESCAPE) { @@ -736,7 +736,7 @@ static int zmk_ble_handle_key_user(struct zmk_keycode_state_changed *event) { zmk_ble_numeric_usage_to_value(key, HID_USAGE_KEY_KEYPAD_1_AND_END, HID_USAGE_KEY_KEYPAD_0_AND_INSERT, &val))) { LOG_DBG("Key not a number, ignoring"); - return ZMK_EV_EVENT_BUBBLE; + return ZMK_EV_EVENT_HANDLED; } if (ring_buf_space_get(&passkey_entries) <= 0) { From da15564d0e7069e5f262e5d8351f1622b08a1118 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 12 Jul 2023 23:00:05 -0700 Subject: [PATCH 0825/1130] feat(bluetooth): Build on ARCH_POSIX. --- app/Kconfig | 6 +++--- app/src/ble.c | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 58825fa53cd..32ec435593b 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -127,9 +127,9 @@ menuconfig ZMK_BLE select BT_SMP_APP_PAIRING_ACCEPT select BT_PERIPHERAL select BT_DIS - select BT_SETTINGS - select SETTINGS - imply ZMK_BATTERY_REPORTING + imply BT_SETTINGS if !ARCH_POSIX + imply SETTINGS if !ARCH_POSIX + imply ZMK_BATTERY_REPORTING if !ARCH_POSIX if ZMK_BLE diff --git a/app/src/ble.c b/app/src/ble.c index a6e63cb51ee..a5f973a42cf 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -106,7 +106,9 @@ void set_profile_address(uint8_t index, const bt_addr_le_t *addr) { memcpy(&profiles[index].peer, addr, sizeof(bt_addr_le_t)); sprintf(setting_name, "ble/profiles/%d", index); LOG_DBG("Setting profile addr for %s to %s", setting_name, addr_str); +#if IS_ENABLED(CONFIG_SETTINGS) settings_save_one(setting_name, &profiles[index], sizeof(struct zmk_ble_profile)); +#endif k_work_submit(&raise_profile_changed_event_work); } From 693530c2f1e7f8f59355b67878a7ed2c10f2b2bd Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Jun 2023 09:31:55 -0700 Subject: [PATCH 0826/1130] feat(bluetooth): Initial nRF52 BSIM based test support. Co-authored-by: Cem Aksoylar --- .github/workflows/ble-test.yml | 78 ++++ .github/workflows/test.yml | 2 +- app/boards/native_posix_64.overlay | 10 + app/boards/nrf52_bsim.conf | 4 + app/boards/nrf52_bsim.overlay | 17 + app/run-ble-test.sh | 101 +++++ app/tests/ble/central/CMakeLists.txt | 10 + app/tests/ble/central/prj.conf | 9 + app/tests/ble/central/src/main.c | 369 ++++++++++++++++++ .../centrals.txt | 2 + .../events.patterns | 2 + .../nrf52_bsim.keymap | 25 ++ .../snapshot.log | 33 ++ .../bond-to-cleared-profile/centrals.txt | 2 + .../bond-to-cleared-profile/events.patterns | 2 + .../bond-to-cleared-profile/nrf52_bsim.keymap | 25 ++ .../bond-to-cleared-profile/snapshot.log | 33 ++ .../centrals.txt | 1 + .../events.patterns | 1 + .../nrf52_bsim.keymap | 25 ++ .../snapshot.log | 26 ++ .../dont-bond-to-taken-profile/centrals.txt | 2 + .../events.patterns | 2 + .../nrf52_bsim.keymap | 25 ++ .../dont-bond-to-taken-profile/snapshot.log | 23 ++ .../centrals.txt | 2 + .../events.patterns | 2 + .../nrf52_bsim.keymap | 27 ++ .../snapshot.log | 42 ++ .../centrals.txt | 1 + .../events.patterns | 1 + .../nrf52_bsim.keymap | 25 ++ .../snapshot.log | 35 ++ app/west.yml | 91 +++++ 34 files changed, 1054 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ble-test.yml create mode 100644 app/boards/nrf52_bsim.conf create mode 100644 app/boards/nrf52_bsim.overlay create mode 100755 app/run-ble-test.sh create mode 100644 app/tests/ble/central/CMakeLists.txt create mode 100644 app/tests/ble/central/prj.conf create mode 100644 app/tests/ble/central/src/main.c create mode 100644 app/tests/ble/profiles/bond-clear-then-bond-second-client/centrals.txt create mode 100644 app/tests/ble/profiles/bond-clear-then-bond-second-client/events.patterns create mode 100644 app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log create mode 100644 app/tests/ble/profiles/bond-to-cleared-profile/centrals.txt create mode 100644 app/tests/ble/profiles/bond-to-cleared-profile/events.patterns create mode 100644 app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log create mode 100644 app/tests/ble/profiles/connnect-and-output-to-selection/centrals.txt create mode 100644 app/tests/ble/profiles/connnect-and-output-to-selection/events.patterns create mode 100644 app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log create mode 100644 app/tests/ble/profiles/dont-bond-to-taken-profile/centrals.txt create mode 100644 app/tests/ble/profiles/dont-bond-to-taken-profile/events.patterns create mode 100644 app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log create mode 100644 app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/centrals.txt create mode 100644 app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/events.patterns create mode 100644 app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log create mode 100644 app/tests/ble/profiles/reconnect-then-output-to-selection/centrals.txt create mode 100644 app/tests/ble/profiles/reconnect-then-output-to-selection/events.patterns create mode 100644 app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log diff --git a/.github/workflows/ble-test.yml b/.github/workflows/ble-test.yml new file mode 100644 index 00000000000..3bc8a718077 --- /dev/null +++ b/.github/workflows/ble-test.yml @@ -0,0 +1,78 @@ +name: BLE Tests + +on: + push: + paths: + - ".github/workflows/ble-test.yml" + - "app/tests/ble/**" + - "app/src/**" + - "app/run-ble-test.sh" + pull_request: + paths: + - ".github/workflows/ble-test.yml" + - "app/tests/ble/**" + - "app/src/**" + - "app/run-ble-test.sh" + +jobs: + collect-tests: + outputs: + test-dirs: ${{ steps.test-dirs.outputs.test-dirs }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Find test directories + id: test-dirs + run: | + cd app/tests/ble + export TESTS=$(ls -d * | grep -v central | jq -R -s -c 'split("\n")[:-1]') + echo "::set-output name=test-dirs::${TESTS}" + run-tests: + needs: collect-tests + strategy: + matrix: + test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }} + runs-on: ubuntu-latest + container: + image: docker.io/zmkfirmware/zmk-build-arm:3.2 + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Cache west modules + uses: actions/cache@v3.0.2 + env: + cache-name: cache-zephyr-modules + with: + path: | + modules/ + tools/ + zephyr/ + bootloader/ + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + timeout-minutes: 2 + continue-on-error: true + - name: Initialize workspace (west init) + run: west init -l app + - name: Enable babblesim group filter + run: west config manifest.group-filter -- +babblesim + - name: Update modules (west update) + run: west update + - name: Export Zephyr CMake package (west zephyr-export) + run: west zephyr-export + - name: Build BabbleSim components + working-directory: tools/bsim + run: make everything + - name: Test ${{ matrix.test }} + working-directory: app + run: BSIM_COMPONENTS_PATH="${GITHUB_WORKSPACE}/tools/bsim/components/" BSIM_OUT_PATH="${GITHUB_WORKSPACE}/tools/bsim/" ./run-ble-test.sh tests/ble/${{ matrix.test }} + - name: Archive artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: "log-files" + path: app/build/**/*.log diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e8a9d2209e4..ec63081279b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: id: test-dirs run: | cd app/tests/ - export TESTS=$(ls -d * | jq -R -s -c 'split("\n")[:-1]') + export TESTS=$(ls -d * | grep -v ble | jq -R -s -c 'split("\n")[:-1]') echo "::set-output name=test-dirs::${TESTS}" run-tests: needs: collect-tests diff --git a/app/boards/native_posix_64.overlay b/app/boards/native_posix_64.overlay index f8a8f700348..74d6b7d8708 100644 --- a/app/boards/native_posix_64.overlay +++ b/app/boards/native_posix_64.overlay @@ -4,6 +4,7 @@ / { chosen { + zephyr,console = &uart0; zmk,kscan = &kscan; }; @@ -15,4 +16,13 @@ columns = <2>; exit-after; }; + + uart0: uart { + status = "okay"; + compatible = "zephyr,native-posix-uart"; + /* Dummy current-speed entry to comply with serial + * DTS binding + */ + current-speed = <0>; + }; }; diff --git a/app/boards/nrf52_bsim.conf b/app/boards/nrf52_bsim.conf new file mode 100644 index 00000000000..526f3bc7d7e --- /dev/null +++ b/app/boards/nrf52_bsim.conf @@ -0,0 +1,4 @@ +CONFIG_ZMK_BLE=y +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y diff --git a/app/boards/nrf52_bsim.overlay b/app/boards/nrf52_bsim.overlay new file mode 100644 index 00000000000..482b048604a --- /dev/null +++ b/app/boards/nrf52_bsim.overlay @@ -0,0 +1,17 @@ +#include +#include +#include + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-mock"; + label = "KSCAN_MOCK"; + + rows = <2>; + columns = <2>; + }; +}; diff --git a/app/run-ble-test.sh b/app/run-ble-test.sh new file mode 100755 index 00000000000..f6e4f0cc048 --- /dev/null +++ b/app/run-ble-test.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if [ -z "$1" ]; then + echo "Usage: ./run-ble-test.sh " + exit 1 +fi + +path=$1 +if [ "$path" = "all" ]; then + path="tests" +fi + +if [ -z "${BSIM_OUT_PATH}" ]; then + echo "BSIM_OUT_PATH needs to be set before running this script." + exit 1 +fi + +if [ -z "$BLE_TESTS_NO_CENTRAL_BUILD" ]; then + if ! [ -e build/tests/ble/central ]; then + west build -d build/tests/ble/central -b nrf52_bsim tests/ble/central > /dev/null 2>&1 + else + west build -d build/tests/ble/central + fi + + cp build/tests/ble/central/zephyr/zephyr.exe "${BSIM_OUT_PATH}/bin/ble_test_central.exe" + + if ! [ -e build/tests/ble/private_central ]; then + west build -d build/tests/ble/private_central -b nrf52_bsim tests/ble/central -- -DCONFIG_BT_PRIVACY=y -DCONFIG_BT_SCAN_WITH_IDENTITY=n > /dev/null 2>&1 + else + west build -d build/tests/ble/private_central + fi + + cp build/tests/ble/private_central/zephyr/zephyr.exe "${BSIM_OUT_PATH}/bin/ble_test_private_central.exe" +fi + +testcases=$(find $path -name nrf52_bsim.keymap -exec dirname \{\} \;) +num_cases=$(echo "$testcases" | wc -l) +if [ $num_cases -gt 1 ] || [ "$testcases" != "${path%%/}" ]; then + echo "$testcases" + echo "" > ./build/tests/pass-fail.log + echo "$testcases" | BLE_TESTS_QUIET_OUTPUT=y BLE_TESTS_NO_CENTRAL_BUILD=y xargs -L 1 -P ${J:-4} ./run-ble-test.sh + err=$? + sort -k2 ./build/tests/pass-fail.log + exit $err +fi + +testcase="$path" +echo "Running $testcase:" + +west build -d build/$testcase -b nrf52_bsim -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 +if [ $? -gt 0 ]; then + echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log + exit 1 +fi + +if [ -n "${BLE_TESTS_QUIET_OUTPUT}" ]; then + output_dev="/dev/null" +else + output_dev="/dev/stdout" +fi + +exe_name=${testcase//\//_} + +start_dir=$(pwd) +cp build/$testcase/zephyr/zmk.exe "${BSIM_OUT_PATH}/bin/${exe_name}" +pushd "${BSIM_OUT_PATH}/bin" > /dev/null 2>&1 +if [ -e "${start_dir}/build/$testcase/output.log" ]; then + rm "${start_dir}/build/$testcase/output.log" +fi + +central_counts=$(wc -l ${start_dir}/${testcase}/centrals.txt | cut -d' ' -f1) +./${exe_name} -d=0 -s=${exe_name} | tee -a "${start_dir}/build/$testcase/output.log" > "${output_dev}" & +./bs_device_handbrake -s=${exe_name} -d=1 -r=10 > "${output_dev}" & + +cat "${start_dir}/${testcase}/centrals.txt" | +while IFS= read -r line +do + ${line} -s=${exe_name} | tee -a "${start_dir}/build/$testcase/output.log" > "${output_dev}" & +done + +./bs_2G4_phy_v1 -s=${exe_name} -D=$(( 2 + central_counts )) -sim_length=50e6 > "${output_dev}" 2>&1 + +popd > /dev/null 2>&1 + +cat build/$testcase/output.log | sed -E -n -f $testcase/events.patterns > build/$testcase/filtered_output.log + +diff -auZ $testcase/snapshot.log build/$testcase/filtered_output.log +if [ $? -gt 0 ]; then + if [ -f $testcase/pending ]; then + echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log + exit 0 + fi + echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log + exit 1 +fi + +echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log +exit 0 diff --git a/app/tests/ble/central/CMakeLists.txt b/app/tests/ble/central/CMakeLists.txt new file mode 100644 index 00000000000..020bef3813c --- /dev/null +++ b/app/tests/ble/central/CMakeLists.txt @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(ble_test_central) + +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) + +# zephyr_library_include_directories(${ZEPHYR_BASE}/samples/bluetooth) diff --git a/app/tests/ble/central/prj.conf b/app/tests/ble/central/prj.conf new file mode 100644 index 00000000000..735d4ac5bbf --- /dev/null +++ b/app/tests/ble/central/prj.conf @@ -0,0 +1,9 @@ +CONFIG_BT=y +CONFIG_LOG=y +CONFIG_BOOT_BANNER=n +CONFIG_BT_LOG_LEVEL_WRN=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_BT_CENTRAL=y +CONFIG_BT_SMP=y +CONFIG_BT_SCAN_WITH_IDENTITY=y +CONFIG_BT_GATT_CLIENT=y diff --git a/app/tests/ble/central/src/main.c b/app/tests/ble/central/src/main.c new file mode 100644 index 00000000000..67521e60da0 --- /dev/null +++ b/app/tests/ble/central/src/main.c @@ -0,0 +1,369 @@ +/* main.c - Application main entry point */ + +/* + * Copyright (c) 2015-2016 Intel Corporation + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include + +#include + +LOG_MODULE_REGISTER(ble_central, 4); + +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_ARCH_POSIX + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cmdline.h" +#include "soc.h" + +static bool disconnect_and_reconnect = false; +static bool clear_bond_on_disconnect = false; +static bool halt_after_bonding = false; +static int32_t wait_on_start = 0; + +static void ble_central_native_posix_options(void) { + static struct args_struct_t options[] = { + {.is_switch = true, + .option = "disconnect_and_reconnect", + .type = 'b', + .dest = (void *)&disconnect_and_reconnect, + .descript = "Disconnect and reconnect after the initial connection"}, + {.is_switch = true, + .option = "halt_after_bonding", + .type = 'b', + .dest = (void *)&halt_after_bonding, + .descript = "Halt any further logic after bonding the first time"}, + {.is_switch = true, + .option = "clear_bond_on_disconnect", + .type = 'b', + .dest = (void *)&clear_bond_on_disconnect, + .descript = "Clear bonds on disconnect and reconnect"}, + {.option = "wait_on_start", + .name = "milliseconds", + .type = 'u', + .dest = (void *)&wait_on_start, + .descript = "Time in milliseconds to wait before starting the test process"}, + ARG_TABLE_ENDMARKER}; + + native_add_command_line_opts(options); +} + +NATIVE_TASK(ble_central_native_posix_options, PRE_BOOT_1, 1); + +#endif + +static void start_scan(void); + +static struct bt_conn *default_conn; + +static struct bt_uuid_16 uuid = BT_UUID_INIT_16(0); +static struct bt_gatt_discover_params discover_params; +static struct bt_gatt_subscribe_params subscribe_params; + +static uint8_t notify_func(struct bt_conn *conn, struct bt_gatt_subscribe_params *params, + const void *data, uint16_t length) { + if (!data) { + LOG_DBG("[UNSUBSCRIBED]"); + params->value_handle = 0U; + return BT_GATT_ITER_STOP; + } + + LOG_HEXDUMP_DBG(data, length, "payload"); + + return BT_GATT_ITER_CONTINUE; +} + +static uint8_t discover_func(struct bt_conn *conn, const struct bt_gatt_attr *attr, + struct bt_gatt_discover_params *params) { + int err; + + if (!attr) { + LOG_DBG("[Discover complete]"); + (void)memset(params, 0, sizeof(*params)); + return BT_GATT_ITER_STOP; + } + + LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); + + if (!bt_uuid_cmp(discover_params.uuid, BT_UUID_HIDS)) { + memcpy(&uuid, BT_UUID_HIDS_REPORT, sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.start_handle = attr->handle + 1; + discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_DBG("[Discover failed] (err %d)", err); + } + } else if (!bt_uuid_cmp(discover_params.uuid, BT_UUID_HIDS_REPORT)) { + memcpy(&uuid, BT_UUID_GATT_CCC, sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.start_handle = attr->handle + 2; + discover_params.type = BT_GATT_DISCOVER_DESCRIPTOR; + subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_DBG("[Discover failed] (err %d)", err); + } + } else { + subscribe_params.notify = notify_func; + subscribe_params.value = BT_GATT_CCC_NOTIFY; + subscribe_params.ccc_handle = attr->handle; + + err = bt_gatt_subscribe(conn, &subscribe_params); + if (err && err != -EALREADY) { + LOG_DBG("[Subscribe failed] (err %d)", err); + } else { + LOG_DBG("[SUBSCRIBED]"); + } + + return BT_GATT_ITER_STOP; + } + + return BT_GATT_ITER_STOP; +} + +static void reconnect(const bt_addr_le_t *addr) { + struct bt_le_conn_param *param; + int err = bt_le_scan_stop(); + if (err < 0) { + LOG_DBG("Stop LE scan failed (err %d)", err); + } + + param = BT_LE_CONN_PARAM_DEFAULT; + err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &default_conn); + if (err < 0) { + LOG_DBG("Create conn failed (err %d)", err); + start_scan(); + } +} + +static bool eir_found(struct bt_data *data, void *user_data) { + bt_addr_le_t *addr = user_data; + int i; + + LOG_DBG("[AD]: %u data_len %u", data->type, data->data_len); + + switch (data->type) { + case BT_DATA_UUID16_SOME: + case BT_DATA_UUID16_ALL: + if (data->data_len % sizeof(uint16_t) != 0U) { + LOG_DBG("[AD malformed]"); + return true; + } + + for (i = 0; i < data->data_len; i += sizeof(uint16_t)) { + struct bt_le_conn_param *param; + struct bt_uuid *uuid; + uint16_t u16; + int err; + + memcpy(&u16, &data->data[i], sizeof(u16)); + uuid = BT_UUID_DECLARE_16(sys_le16_to_cpu(u16)); + if (bt_uuid_cmp(uuid, BT_UUID_HIDS)) { + continue; + } + + err = bt_le_scan_stop(); + if (err) { + LOG_DBG("[Stop LE scan failed] (err %d)", err); + continue; + } + + param = BT_LE_CONN_PARAM_DEFAULT; + err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &default_conn); + if (err) { + LOG_DBG("[Create conn failed] (err %d)", err); + start_scan(); + } + + return false; + } + } + + return true; +} + +static void device_found(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, + struct net_buf_simple *ad) { + char dev[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(addr, dev, sizeof(dev)); + LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", dev, type, ad->len, rssi); + + /* We're only interested in connectable events */ + if (type == BT_GAP_ADV_TYPE_ADV_IND) { + bt_data_parse(ad, eir_found, (void *)addr); + } else if (type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { + reconnect(addr); + } +} + +static void start_scan(void) { + int err; + + /* Use active scanning and disable duplicate filtering to handle any + * devices that might update their advertising data at runtime. */ + struct bt_le_scan_param scan_param = { + .type = BT_LE_SCAN_TYPE_ACTIVE, + .options = BT_LE_SCAN_OPT_NONE, + .interval = BT_GAP_SCAN_FAST_INTERVAL, + .window = BT_GAP_SCAN_FAST_WINDOW, + }; + + err = bt_le_scan_start(&scan_param, device_found); + if (err) { + LOG_DBG("[Scanning failed to start] (err %d)", err); + return; + } + + LOG_DBG("[Scanning successfully started]"); +} + +static void discover_conn(struct bt_conn *conn) { + int err; + + LOG_DBG("[Discovery started for conn]"); + memcpy(&uuid, BT_UUID_HIDS, sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.func = discover_func; + discover_params.start_handle = BT_ATT_FIRST_ATTRIBUTE_HANDLE; + discover_params.end_handle = BT_ATT_LAST_ATTRIBUTE_HANDLE; + discover_params.type = BT_GATT_DISCOVER_PRIMARY; + + err = bt_gatt_discover(default_conn, &discover_params); + if (err) { + LOG_DBG("[Discover failed] (err %d)", err); + return; + } +} + +static void connected(struct bt_conn *conn, uint8_t conn_err) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (conn_err) { + LOG_DBG("[Failed to connect to %s] (%u)", addr, conn_err); + + bt_conn_unref(default_conn); + default_conn = NULL; + + start_scan(); + return; + } + + LOG_DBG("[Connected]: %s", addr); + + if (conn == default_conn) { + if (bt_conn_get_security(conn) >= BT_SECURITY_L2) { + discover_conn(conn); + } else { + LOG_DBG("[Setting the security for the connection]"); + bt_conn_set_security(conn, BT_SECURITY_L2); + } + } +} + +static bool first_connect = true; +static void pairing_complete(struct bt_conn *conn, bool bonded) { LOG_DBG("Pairing complete"); } + +static void do_disconnect_of_active(struct k_work *work) { + bt_conn_disconnect(default_conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN); + if (clear_bond_on_disconnect) { + bt_unpair(BT_ID_DEFAULT, bt_conn_get_dst(default_conn)); + } +} + +static K_WORK_DELAYABLE_DEFINE(disconnect_work, do_disconnect_of_active); + +static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_security_err err) { + if (err > BT_SECURITY_ERR_SUCCESS) { + LOG_DBG("[Security Change Failed]"); + exit(1); + } + + if (halt_after_bonding) { + exit(1); + } + + bool do_disconnect = first_connect && disconnect_and_reconnect; + first_connect = false; + if (do_disconnect) { + k_work_reschedule(&disconnect_work, K_MSEC(500)); + } else { + discover_conn(conn); + } +} + +static void disconnected(struct bt_conn *conn, uint8_t reason) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + LOG_DBG("[Disconnected]: %s (reason 0x%02x)", addr, reason); + + if (default_conn != conn) { + return; + } + + bt_conn_unref(default_conn); + default_conn = NULL; + + if (!halt_after_bonding) { + start_scan(); + } +} + +BT_CONN_CB_DEFINE(conn_callbacks) = { + .connected = connected, + .disconnected = disconnected, + .security_changed = security_changed, +}; + +struct bt_conn_auth_info_cb auth_info_cb = { + .pairing_complete = pairing_complete, +}; + +void main(void) { + int err; + + if (wait_on_start > 0) { + k_sleep(K_MSEC(wait_on_start)); + } + + err = bt_conn_auth_info_cb_register(&auth_info_cb); + + err = bt_enable(NULL); + + if (err) { + LOG_DBG("[Bluetooth init failed] (err %d)", err); + return; + } + + LOG_DBG("[Bluetooth initialized]"); + + start_scan(); +} diff --git a/app/tests/ble/profiles/bond-clear-then-bond-second-client/centrals.txt b/app/tests/ble/profiles/bond-clear-then-bond-second-client/centrals.txt new file mode 100644 index 00000000000..80601bad8bc --- /dev/null +++ b/app/tests/ble/profiles/bond-clear-then-bond-second-client/centrals.txt @@ -0,0 +1,2 @@ +./ble_test_central.exe -d=2 -halt_after_bonding +./ble_test_central.exe -d=3 -wait_on_start=1300 diff --git a/app/tests/ble/profiles/bond-clear-then-bond-second-client/events.patterns b/app/tests/ble/profiles/bond-clear-then-bond-second-client/events.patterns new file mode 100644 index 00000000000..dbfe5627ecf --- /dev/null +++ b/app/tests/ble/profiles/bond-clear-then-bond-second-client/events.patterns @@ -0,0 +1,2 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 0 /p +s/^d_03: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 1 /p diff --git a/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap b/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap new file mode 100644 index 00000000000..3ddf226fc86 --- /dev/null +++ b/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_CLR>; + }; + }; +}; diff --git a/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log b/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log new file mode 100644 index 00000000000..4939c0d76a8 --- /dev/null +++ b/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log @@ -0,0 +1,33 @@ +profile 0 bt_id: No static addresses stored in controller +profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: start_scan: [Scanning successfully started] +profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: eir_found: [AD]: 9 data_len 0 +profile 0 ble_central: eir_found: [AD]: 25 data_len 2 +profile 0 ble_central: eir_found: [AD]: 1 data_len 1 +profile 0 ble_central: eir_found: [AD]: 2 data_len 4 +profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Setting the security for the connection] +profile 0 ble_central: pairing_complete: Pairing complete +profile 1 bt_id: No static addresses stored in controller +profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: start_scan: [Scanning successfully started] +profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: eir_found: [AD]: 9 data_len 0 +profile 1 ble_central: eir_found: [AD]: 25 data_len 2 +profile 1 ble_central: eir_found: [AD]: 1 data_len 1 +profile 1 ble_central: eir_found: [AD]: 2 data_len 4 +profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Setting the security for the connection] +profile 1 ble_central: pairing_complete: Pairing complete +profile 1 ble_central: discover_conn: [Discovery started for conn] +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 23 +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 28 +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 30 +profile 1 ble_central: discover_func: [SUBSCRIBED] +profile 1 ble_central: notify_func: payload +profile 1 00 00 04 00 00 00 00 00 |........ +profile 1 ble_central: notify_func: payload +profile 1 00 00 00 00 00 00 00 00 |........ +profile 1 ble_central: notify_func: payload +profile 1 00 00 00 00 00 00 00 00 |........ diff --git a/app/tests/ble/profiles/bond-to-cleared-profile/centrals.txt b/app/tests/ble/profiles/bond-to-cleared-profile/centrals.txt new file mode 100644 index 00000000000..80601bad8bc --- /dev/null +++ b/app/tests/ble/profiles/bond-to-cleared-profile/centrals.txt @@ -0,0 +1,2 @@ +./ble_test_central.exe -d=2 -halt_after_bonding +./ble_test_central.exe -d=3 -wait_on_start=1300 diff --git a/app/tests/ble/profiles/bond-to-cleared-profile/events.patterns b/app/tests/ble/profiles/bond-to-cleared-profile/events.patterns new file mode 100644 index 00000000000..dbfe5627ecf --- /dev/null +++ b/app/tests/ble/profiles/bond-to-cleared-profile/events.patterns @@ -0,0 +1,2 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 0 /p +s/^d_03: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 1 /p diff --git a/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap b/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap new file mode 100644 index 00000000000..b13fe6f9dd8 --- /dev/null +++ b/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_CLR>; + }; + }; +}; diff --git a/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log b/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log new file mode 100644 index 00000000000..4939c0d76a8 --- /dev/null +++ b/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log @@ -0,0 +1,33 @@ +profile 0 bt_id: No static addresses stored in controller +profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: start_scan: [Scanning successfully started] +profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: eir_found: [AD]: 9 data_len 0 +profile 0 ble_central: eir_found: [AD]: 25 data_len 2 +profile 0 ble_central: eir_found: [AD]: 1 data_len 1 +profile 0 ble_central: eir_found: [AD]: 2 data_len 4 +profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Setting the security for the connection] +profile 0 ble_central: pairing_complete: Pairing complete +profile 1 bt_id: No static addresses stored in controller +profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: start_scan: [Scanning successfully started] +profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: eir_found: [AD]: 9 data_len 0 +profile 1 ble_central: eir_found: [AD]: 25 data_len 2 +profile 1 ble_central: eir_found: [AD]: 1 data_len 1 +profile 1 ble_central: eir_found: [AD]: 2 data_len 4 +profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Setting the security for the connection] +profile 1 ble_central: pairing_complete: Pairing complete +profile 1 ble_central: discover_conn: [Discovery started for conn] +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 23 +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 28 +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 30 +profile 1 ble_central: discover_func: [SUBSCRIBED] +profile 1 ble_central: notify_func: payload +profile 1 00 00 04 00 00 00 00 00 |........ +profile 1 ble_central: notify_func: payload +profile 1 00 00 00 00 00 00 00 00 |........ +profile 1 ble_central: notify_func: payload +profile 1 00 00 00 00 00 00 00 00 |........ diff --git a/app/tests/ble/profiles/connnect-and-output-to-selection/centrals.txt b/app/tests/ble/profiles/connnect-and-output-to-selection/centrals.txt new file mode 100644 index 00000000000..110e617d4b7 --- /dev/null +++ b/app/tests/ble/profiles/connnect-and-output-to-selection/centrals.txt @@ -0,0 +1 @@ +./ble_test_central.exe -d=2 diff --git a/app/tests/ble/profiles/connnect-and-output-to-selection/events.patterns b/app/tests/ble/profiles/connnect-and-output-to-selection/events.patterns new file mode 100644 index 00000000000..cca5a2d4ed3 --- /dev/null +++ b/app/tests/ble/profiles/connnect-and-output-to-selection/events.patterns @@ -0,0 +1 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}//p diff --git a/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap b/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap new file mode 100644 index 00000000000..789cec44337 --- /dev/null +++ b/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log b/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log new file mode 100644 index 00000000000..092bb034f87 --- /dev/null +++ b/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log @@ -0,0 +1,26 @@ + bt_id: No static addresses stored in controller + ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Setting the security for the connection] + ble_central: pairing_complete: Pairing complete + ble_central: discover_conn: [Discovery started for conn] + ble_central: discover_func: [ATTRIBUTE] handle 23 + ble_central: discover_func: [ATTRIBUTE] handle 28 + ble_central: discover_func: [ATTRIBUTE] handle 30 + ble_central: discover_func: [SUBSCRIBED] + ble_central: notify_func: payload + 00 00 04 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 05 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ diff --git a/app/tests/ble/profiles/dont-bond-to-taken-profile/centrals.txt b/app/tests/ble/profiles/dont-bond-to-taken-profile/centrals.txt new file mode 100644 index 00000000000..80601bad8bc --- /dev/null +++ b/app/tests/ble/profiles/dont-bond-to-taken-profile/centrals.txt @@ -0,0 +1,2 @@ +./ble_test_central.exe -d=2 -halt_after_bonding +./ble_test_central.exe -d=3 -wait_on_start=1300 diff --git a/app/tests/ble/profiles/dont-bond-to-taken-profile/events.patterns b/app/tests/ble/profiles/dont-bond-to-taken-profile/events.patterns new file mode 100644 index 00000000000..dbfe5627ecf --- /dev/null +++ b/app/tests/ble/profiles/dont-bond-to-taken-profile/events.patterns @@ -0,0 +1,2 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 0 /p +s/^d_03: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 1 /p diff --git a/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap b/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap new file mode 100644 index 00000000000..789cec44337 --- /dev/null +++ b/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log b/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log new file mode 100644 index 00000000000..d41eae797df --- /dev/null +++ b/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log @@ -0,0 +1,23 @@ +profile 0 bt_id: No static addresses stored in controller +profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: start_scan: [Scanning successfully started] +profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: eir_found: [AD]: 9 data_len 0 +profile 0 ble_central: eir_found: [AD]: 25 data_len 2 +profile 0 ble_central: eir_found: [AD]: 1 data_len 1 +profile 0 ble_central: eir_found: [AD]: 2 data_len 4 +profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Setting the security for the connection] +profile 0 ble_central: pairing_complete: Pairing complete +profile 1 bt_id: No static addresses stored in controller +profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: start_scan: [Scanning successfully started] +profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: eir_found: [AD]: 9 data_len 0 +profile 1 ble_central: eir_found: [AD]: 25 data_len 2 +profile 1 ble_central: eir_found: [AD]: 1 data_len 1 +profile 1 ble_central: eir_found: [AD]: 2 data_len 4 +profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Setting the security for the connection] +profile 1 bt_smp: reason 0x8 +profile 1 ble_central: security_changed: [Security Change Failed] diff --git a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/centrals.txt b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/centrals.txt new file mode 100644 index 00000000000..e60cdec044b --- /dev/null +++ b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/centrals.txt @@ -0,0 +1,2 @@ +./ble_test_central.exe -d=2 +./ble_test_central.exe -d=3 -wait_on_start=1300 diff --git a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/events.patterns b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/events.patterns new file mode 100644 index 00000000000..dbfe5627ecf --- /dev/null +++ b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/events.patterns @@ -0,0 +1,2 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 0 /p +s/^d_03: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}/profile 1 /p diff --git a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap new file mode 100644 index 00000000000..cc1420ee5ca --- /dev/null +++ b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log new file mode 100644 index 00000000000..a03bbb09508 --- /dev/null +++ b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log @@ -0,0 +1,42 @@ +profile 0 bt_id: No static addresses stored in controller +profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: start_scan: [Scanning successfully started] +profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: eir_found: [AD]: 9 data_len 0 +profile 0 ble_central: eir_found: [AD]: 25 data_len 2 +profile 0 ble_central: eir_found: [AD]: 1 data_len 1 +profile 0 ble_central: eir_found: [AD]: 2 data_len 4 +profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Setting the security for the connection] +profile 0 ble_central: pairing_complete: Pairing complete +profile 0 ble_central: discover_conn: [Discovery started for conn] +profile 0 ble_central: discover_func: [ATTRIBUTE] handle 23 +profile 1 bt_id: No static addresses stored in controller +profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: start_scan: [Scanning successfully started] +profile 0 ble_central: discover_func: [ATTRIBUTE] handle 28 +profile 0 ble_central: discover_func: [ATTRIBUTE] handle 30 +profile 0 ble_central: discover_func: [SUBSCRIBED] +profile 0 ble_central: notify_func: payload +profile 0 00 00 04 00 00 00 00 00 |........ +profile 0 ble_central: notify_func: payload +profile 0 00 00 00 00 00 00 00 00 |........ +profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: eir_found: [AD]: 9 data_len 0 +profile 1 ble_central: eir_found: [AD]: 25 data_len 2 +profile 1 ble_central: eir_found: [AD]: 1 data_len 1 +profile 1 ble_central: eir_found: [AD]: 2 data_len 4 +profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Setting the security for the connection] +profile 1 ble_central: pairing_complete: Pairing complete +profile 1 ble_central: discover_conn: [Discovery started for conn] +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 23 +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 28 +profile 1 ble_central: discover_func: [ATTRIBUTE] handle 30 +profile 1 ble_central: discover_func: [SUBSCRIBED] +profile 1 ble_central: notify_func: payload +profile 1 00 00 05 00 00 00 00 00 |........ +profile 1 ble_central: notify_func: payload +profile 1 00 00 00 00 00 00 00 00 |........ +profile 1 ble_central: notify_func: payload +profile 1 00 00 00 00 00 00 00 00 |........ diff --git a/app/tests/ble/profiles/reconnect-then-output-to-selection/centrals.txt b/app/tests/ble/profiles/reconnect-then-output-to-selection/centrals.txt new file mode 100644 index 00000000000..2478118532e --- /dev/null +++ b/app/tests/ble/profiles/reconnect-then-output-to-selection/centrals.txt @@ -0,0 +1 @@ +./ble_test_central.exe -d=2 -disconnect_and_reconnect diff --git a/app/tests/ble/profiles/reconnect-then-output-to-selection/events.patterns b/app/tests/ble/profiles/reconnect-then-output-to-selection/events.patterns new file mode 100644 index 00000000000..cca5a2d4ed3 --- /dev/null +++ b/app/tests/ble/profiles/reconnect-then-output-to-selection/events.patterns @@ -0,0 +1 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}//p diff --git a/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap b/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap new file mode 100644 index 00000000000..789cec44337 --- /dev/null +++ b/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log b/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log new file mode 100644 index 00000000000..bf6cc49ea0f --- /dev/null +++ b/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log @@ -0,0 +1,35 @@ + bt_id: No static addresses stored in controller + ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Setting the security for the connection] + ble_central: pairing_complete: Pairing complete + ble_central: disconnected: [Disconnected]: ED:3B:20:15:18:12 (random) (reason 0x16) + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Setting the security for the connection] + ble_central: discover_conn: [Discovery started for conn] + ble_central: discover_func: [ATTRIBUTE] handle 23 + ble_central: discover_func: [ATTRIBUTE] handle 28 + ble_central: discover_func: [ATTRIBUTE] handle 30 + ble_central: discover_func: [SUBSCRIBED] + ble_central: notify_func: payload + 00 00 04 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 05 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ diff --git a/app/west.yml b/app/west.yml index ffa36ca36e9..f72f2f398bc 100644 --- a/app/west.yml +++ b/app/west.yml @@ -1,9 +1,17 @@ manifest: + defaults: + remote: upstream + remotes: - name: zephyrproject-rtos url-base: https://github.com/zephyrproject-rtos - name: zmkfirmware url-base: https://github.com/zmkfirmware + - name: upstream + url-base: https://github.com/zephyrproject-rtos + - name: babblesim + url-base: https://github.com/BabbleSim + group-filter: [-babblesim] projects: - name: zephyr remote: zmkfirmware @@ -30,5 +38,88 @@ manifest: - edtt - trusted-firmware-m - sof + - name: bsim + repo-path: babblesim-manifest + revision: 908ffde6298a937c6549dbfa843a62caab26bfc5 + path: tools/bsim + groups: + - babblesim + - name: babblesim_base + remote: babblesim + repo-path: base.git + path: tools/bsim/components + revision: 02838ca04c4562e68dc876196828d8121679e537 + groups: + - babblesim + - name: babblesim_ext_2G4_libPhyComv1 + remote: babblesim + repo-path: ext_2G4_libPhyComv1.git + path: tools/bsim/components/ext_2G4_libPhyComv1 + revision: 9018113a362fa6c9e8f4b9cab9e5a8f12cc46b94 + groups: + - babblesim + - name: babblesim_ext_2G4_phy_v1 + remote: babblesim + repo-path: ext_2G4_phy_v1.git + path: tools/bsim/components/ext_2G4_phy_v1 + revision: cf2d86e736efac4f12fad5093ed2da2c5b406156 + groups: + - babblesim + - name: babblesim_ext_2G4_channel_NtNcable + remote: babblesim + repo-path: ext_2G4_channel_NtNcable.git + path: tools/bsim/components/ext_2G4_channel_NtNcable + revision: 20a38c997f507b0aa53817aab3d73a462fff7af1 + groups: + - babblesim + - name: babblesim_ext_2G4_channel_multiatt + remote: babblesim + repo-path: ext_2G4_channel_multiatt.git + path: tools/bsim/components/ext_2G4_channel_multiatt + revision: e09bc2d14b1975f969ad19c6ed23eb20e5dc3d09 + groups: + - babblesim + - name: babblesim_ext_2G4_modem_magic + remote: babblesim + repo-path: ext_2G4_modem_magic.git + path: tools/bsim/components/ext_2G4_modem_magic + revision: cb70771794f0bf6f262aa474848611c68ae8f1ed + groups: + - babblesim + - name: babblesim_ext_2G4_modem_BLE_simple + remote: babblesim + repo-path: ext_2G4_modem_BLE_simple.git + path: tools/bsim/components/ext_2G4_modem_BLE_simple + revision: ce975a3259fd0dd761d371b60435242d54794bad + groups: + - babblesim + - name: babblesim_ext_2G4_device_burst_interferer + remote: babblesim + repo-path: ext_2G4_device_burst_interferer.git + path: tools/bsim/components/ext_2G4_device_burst_interferer + revision: 5b5339351d6e6a2368c686c734dc8b2fc65698fc + groups: + - babblesim + - name: babblesim_ext_2G4_device_WLAN_actmod + remote: babblesim + repo-path: ext_2G4_device_WLAN_actmod.git + path: tools/bsim/components/ext_2G4_device_WLAN_actmod + revision: 9cb6d8e72695f6b785e57443f0629a18069d6ce4 + groups: + - babblesim + - name: babblesim_ext_2G4_device_playback + remote: babblesim + repo-path: ext_2G4_device_playback.git + path: tools/bsim/components/ext_2G4_device_playback + revision: 85c645929cf1ce995d8537107d9dcbd12ed64036 + groups: + - babblesim + - name: babblesim_ext_libCryptov1 + remote: babblesim + repo-path: ext_libCryptov1.git + path: tools/bsim/components/ext_libCryptov1 + revision: eed6d7038e839153e340bd333bc43541cb90ba64 + groups: + - babblesim self: west-commands: scripts/west-commands.yml From c63d0791d52f2566bdca50895866339ce6fb947a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 13 Jul 2023 22:16:44 -0700 Subject: [PATCH 0827/1130] chore: Ensure BSIM env. variables set in devcontainer. --- .devcontainer/.bashrc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.devcontainer/.bashrc b/.devcontainer/.bashrc index 9fdb8f69e35..967fa144bbb 100644 --- a/.devcontainer/.bashrc +++ b/.devcontainer/.bashrc @@ -6,3 +6,8 @@ fi if [ -f "$WORKSPACE_DIR/zephyr/zephyr-env.sh" ]; then source "$WORKSPACE_DIR/zephyr/zephyr-env.sh" fi + +if [ -d "$WORKSPACE_DIR/tools/bsim" ]; then + export BSIM_OUT_PATH="$WORKSPACE_DIR/tools/bsim/" + export BSIM_COMPONENTS_PATH="$WORKSPACE_DIR/tools/bsim/components/" +fi \ No newline at end of file From 55aed8e89d3d256b3e758be5bc5dfbb23ea04ece Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 2 Dec 2023 16:16:49 +0000 Subject: [PATCH 0828/1130] feat(tests): Add ability to auto-accept test diff. --- app/run-ble-test.sh | 10 ++++++++-- app/run-test.sh | 11 +++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/run-ble-test.sh b/app/run-ble-test.sh index f6e4f0cc048..9984caa14e2 100755 --- a/app/run-ble-test.sh +++ b/app/run-ble-test.sh @@ -93,8 +93,14 @@ if [ $? -gt 0 ]; then echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log exit 0 fi - echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log - exit 1 + + if [ -n "${ZMK_TESTS_AUTO_ACCEPT}" ]; then + echo "Auto-accepting failure for $testcase" + cp build/$testcase/filtered_output.log $testcase/snapshot.log + else + echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log + exit 1 + fi fi echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log diff --git a/app/run-test.sh b/app/run-test.sh index 6935f2c8b36..cfd376686c8 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -39,8 +39,15 @@ if [ $? -gt 0 ]; then echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log exit 0 fi - echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log - exit 1 + + + if [ -n "${ZMK_TESTS_AUTO_ACCEPT}" ]; then + echo "Auto-accepting failure for $testcase" + cp build/$testcase/keycode_events.log $testcase/keycode_events.snapshot + else + echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log + exit 1 + fi fi echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log From ecefd6d24b05124e2efcf3573ed8a32901d531d6 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:21:49 +0000 Subject: [PATCH 0829/1130] fix(docs): Update backlight docs (#1894) Co-authored-by: Cem Aksoylar Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com> --- docs/docs/features/backlight.md | 169 ++++++++++++++++++-------------- 1 file changed, 97 insertions(+), 72 deletions(-) diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index c1b5db5dd9b..8a23a67af6a 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -37,12 +37,12 @@ There are various Kconfig options used to configure the backlight feature. These ## Adding Backlight to a board or a shield - + + First, you must enable PWM by adding the following lines to your `Kconfig.defconfig` file: @@ -58,43 +58,60 @@ config LED_PWM endif # ZMK_BACKLIGHT ``` -Then you have to add the following lines to your `.dts` file: +Create a `-pinctrl.dtsi` file if it does not already exist, and include it at the beginning of the `.dts` file. `CONFIG_PINCTRL=y` must be added to to `_defconfig` if it isn't already enabled. + +The pinctrl file has a `&pinctrl` node that encompasses all pinctrl settings, including I2C or SPI peripherals (e.g. WS2812 LEDs, Battery fuel gauges): ```dts -&pwm0 { - status = "okay"; - ch0-pin = <45>; - /* ch0-inverted; */ +&pinctrl { + // Other pinctrl definitions for other hardware + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; ``` -The value `ch0-pin` represents the pin that controls the LEDs. With nRF52 boards, you can calculate the value to use in the following way: you need the hardware port and run it through a function. -**32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". +Pin numbers are handled differently depending on the MCU. On nRF MCUs pins are configured using `(PWM_OUTX, Y, Z)`, where `X` is the PWM channel used (usually 0), `Y` is the first part of the hardware port (_PY.01_) and `Z` is the second part of the hardware port (_P1.Z_). + +For example, _P1.13_ would give you `(PWM_OUT0, 1, 13)` and _P0.15_ would give you `(PWM_OUT0, 0, 15)`. -For example, _P1.13_ would give you _32 \* 1 + 13_ = `<45>` and _P0.15_ would give you _32 \* 0 + 15_ = `<15>`. +Add the PWM device to the `board.dts` file and assign the pinctrl definitions to it: -If your board uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to enable `ch0-inverted`. +```dts +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; +``` -Then you have to add the following lines inside the root devicetree node on the same file as before: +Then add the following lines to the same `.dts` file, but inside the root devicetree node: ```dts / { backlight: pwmleds { compatible = "pwm-leds"; - label = "Backlight LEDs"; pwm_led_0 { - pwms = <&pwm0 45>; - label = "Backlight LED 0"; + pwms = <&pwm0 0 PWM_MSEC(10) PWM_POLARITY_NORMAL>; }; }; }; ``` -The value inside `pwm_led_0` must be the same as you used before. +The value inside `pwm_led_0` after `&pwm0` must be the channel number. Since `PWM_OUT0` is defined in the pinctrl node, the channel in this example is 0. -:::info -Note that every LED inside of the backlight node will be treated as a backlight LED, so if you have other PWM LEDs you need to declare them in a separate node. Refer to [Multiple backlight LEDs](#multiple-backlight-leds) if you have multiple backlight LEDs. -::: +In this example, `PWM_MSEC(10)` is the period of the PWM waveform. This period can be altered if your drive circuitry requires different values or the frequency is audible. + +If your board uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to change `PWM_POLARITY_NORMAL` for `PWM_POLARITY_INVERTED`. Finally you need to add backlight to the `chosen` element of the root devicetree node: @@ -107,7 +124,7 @@ Finally you need to add backlight to the `chosen` element of the root devicetree ``` - + You must first add a `boards/` directory within your shield folder. For each board that supports the shield you must create a `.defconfig` file and a `.overlay` file inside the `boards/` folder. @@ -128,40 +145,55 @@ endif # ZMK_BACKLIGHT Then add the following lines to your `.overlay` file: ```dts -&pwm0 { - status = "okay"; - ch0-pin = <45>; - /* ch0-inverted; */ +&pinctrl { + // Other pinctrl definitions for other hardware + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; }; ``` -The value `ch0-pin` represents the pin that controls the LEDs. With nRF52 boards, you can calculate the value to use in the following way: you need the hardware port and run it through a function. -**32 \* X + Y** = `` where X is first part of the hardware port "PX.01" and Y is the second part of the hardware port "P1.Y". - -For example, _P1.13_ would give you _32 \* 1 + 13_ = `<45>` and _P0.15_ would give you _32 \* 0 + 15_ = `<15>`. +Pin numbers are handled differently depending on the MCU. On nRF MCUs pins are configured using `(PWM_OUTX, Y, Z)`, where `X` is the PWM channel used (usually 0), `Y` is the first part of the hardware port (_PY.01_) and `Z` is the second part of the hardware port (_P1.Z_). -If your shield uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to enable `ch0-inverted`. +For example, _P1.13_ would give you `(PWM_OUT0, 1, 13)` and _P0.15_ would give you `(PWM_OUT0, 0, 15)`. -Then you have to add the following lines inside the root devicetree node on the same file: +Add the PWM device to the `.overlay` file and assign the pinctrl definitions to it: ```dts +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; +``` + +Then add the following lines to the same `.overlay` file, but inside the root devicetree node: + +``` / { backlight: pwmleds { compatible = "pwm-leds"; - label = "Backlight LEDs"; pwm_led_0 { - pwms = <&pwm0 45>; - label = "Backlight LED 0"; + pwms = <&pwm0 0 PWM_MSEC(10) PWM_POLARITY_NORMAL>; }; }; }; ``` -The value inside `pwm_led_0` must be the same as you used before. +In this example, `PWM_MSEC(10)` is the period of the PWM waveform. This period can be altered if your drive circuitry requires different values or the frequency is audible. -:::info -Note that every LED inside of the backlight node will be treated as a backlight LED, so if you have other PWM LEDs you need to declare them in a separate node. Refer to [Multiple backlight LEDs](#multiple-backlight-leds) if you have multiple backlight LEDs. -::: +If your board uses a P-channel MOSFET to control backlight instead of a N-channel MOSFET, you may want to change `PWM_POLARITY_NORMAL` for `PWM_POLARITY_INVERTED`. + +The value inside `pwm_led_0` after `&pwm0` must be the channel number. Since `PWM_OUT0` is defined in the pinctrl node, the channel in this example is 0. Finally you need to add backlight to the `chosen` element of the root devicetree node: @@ -170,26 +202,9 @@ Finally you need to add backlight to the `chosen` element of the root devicetree chosen { zmk,backlight = &backlight; }; -}: -``` - -Optionally, on Pro Micro compatible shields you can add a LED GPIO node to your devicetree, this could be useful if you want your shield to be compatible with newer or untested boards. To do that you have to enable `CONFIG_LED_GPIO` in your `.conf` file and then add the following lines inside the root devicetree node of your `.dtsi` or `.dts` file: - -```dts -/ { - backlight: gpioleds { - compatible = "gpio-leds"; - label = "Backlight LEDs"; - gpio_led_0 { - gpios = <&pro_micro 20 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; - }; - }; }; ``` -If no suitable `.overlay` file is found, this node will act as a fallback, however, without PWM, backlight has limited functionality. - @@ -197,35 +212,45 @@ If no suitable `.overlay` file is found, this node will act as a fallback It is possible to control multiple backlight LEDs at the same time. This is useful if, for example, you have a Caps Lock LED connected to a different pin and you want it to be part of the backlight. -In order to do that, first you need to enable PWM for each pin: +In order to do that, first configure PWM for each pin in the pinctrl node: ```dts -&pwm0 { - status = "okay"; - ch0-pin = <45>; /* LED 0 */ - ch1-pin = <46>; /* LED 1 */ - ch2-pin = <47>; /* LED 2 */ - ... +&pinctrl { + // Other Pinctrl definitions go here + pwm0_default: pwm0_default { + group1 { + psels = , // LED 0 + , // LED 1 + ; // LED 2 + }; + }; + pwm0_sleep: pwm0_sleep { + group1 { + psels = , // LED 0 + , // LED 1 + ; // LED 2 + low-power-enable; + }; + }; }; ``` -This part may vary based on your MCU as different MCUs may have a different number of modules and channels. +This part will vary based on your MCU as different MCUs have a different number of modules, channels and configuration options. -Then you can simply add each of your LED to the backlight node: +Add each of your LEDs to the backlight node in the same manner as for one LED, using the channel number definitions in the pinctrl node: ```dts backlight: pwmleds { compatible = "pwm-leds"; label = "Backlight LEDs"; - pwm_led_0 { - pwms = <&pwm0 45>; /* LED 0 */ + pwm_led_0: pwm_led_0 { + pwms = <&pwm0 0 PWM_MSEC(10) PWM_POLARITY_NORMAL>; }; - pwm_led_1 { - pwms = <&pwm0 46>; /* LED 1 */ + pwm_led_1: pwm_led_1 { + pwms = <&pwm0 1 PWM_MSEC(10) PWM_POLARITY_NORMAL>; }; - pwm_led_2 { - pwms = <&pwm0 47>; /* LED 2 */ + pwm_led_2: pwm_led_2 { + pwms = <&pwm0 2 PWM_MSEC(10) PWM_POLARITY_NORMAL>; }; - ... }; ``` From 042e5209b3c2fc387793366d979f8bc986be2514 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 22:43:06 -0800 Subject: [PATCH 0830/1130] fix(docs): Fix table for BT_DISC --- docs/docs/behaviors/bluetooth.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index ef1cc4666f1..b34614e6205 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -35,14 +35,13 @@ This will allow you to reference the actions defined in this header such as `BT_ Here is a table describing the command for each define: -| Define | Action | -| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `BT_CLR` | Clear bond information between the keyboard and host for the selected profile. | -| `BT_NXT` | Switch to the next profile, cycling through to the first one when the end is reached. | -| `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | -| `BT_SEL` | Select the 0-indexed profile by number. Please note: this definition must include a number as an argument in the keymap to work correctly. eg. `BT_SEL 0` | -| `BT_DISC` | Disconnect from the 0-indexed profile by number, if it's currently connected and inactive. Please note: this definition must include a number as an | -| | argument in the keymap to work correctly. eg. `BT_DISC 0` | +| Define | Action | +| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `BT_CLR` | Clear bond information between the keyboard and host for the selected profile. | +| `BT_NXT` | Switch to the next profile, cycling through to the first one when the end is reached. | +| `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | +| `BT_SEL` | Select the 0-indexed profile by number; must include a number as an argument in the keymap to work correctly, e.g. `BT_SEL 0`. | +| `BT_DISC` | Disconnect from the 0-indexed profile by number, if it's currently connected and inactive; must include a number as an argument in the keymap to work correctly, e.g. `BT_DISC 0`. | :::note Selected profile persistence The profile that is selected by the `BT_SEL`/`BT_PRV`/`BT_NXT` actions will be saved to flash storage and hence persist across restarts and firmware flashes. From 8ee3467adff4cd0ced085ee7778c99d42b1889c8 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 22:25:45 -0800 Subject: [PATCH 0831/1130] fix(docs): Update outdated information in the hardware page --- docs/docs/hardware.mdx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index 6f377073810..7bc98f96105 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -41,7 +41,7 @@ export const toc = [ ]; With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. -That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been implemented and tested by the ZMK contributors. +That being said, there are specific [boards](faq.md#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been implemented and tested by the ZMK contributors, listed below. @@ -49,17 +49,11 @@ That being said, there are currently only a few specific [boards](/docs/faq#what Other Hardware -In addition to the basic keyboard functionality, there is some initial support for additional keyboard hardware: - -- Encoders -- Displays -- RGB Underglow -- Backlight - -Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite). +In addition to the basic keyboard functionality, there is also support for additional keyboard hardware such as encoders, RGB underglow, backlight and displays. +Please see pages under the "Features" header in the sidebar for details. Contributing -If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation. +If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation and note the [clean room design requirements](development/clean-room.md). From 9bacaffe6244fd00329f959700e2fd52b241c520 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 4 Dec 2023 23:24:05 +0000 Subject: [PATCH 0832/1130] feat(hid): Add KConfig option for higher NKRO usages By default the maximum NKRO usage is set to maximise compatibility, but some keys dont work, this adds the ability to use those extended keys, at the cost of compatibiltity Co-authored-by: Cem Aksoylar Co-authored-by: Pete Johanson --- app/Kconfig | 11 ++++++++++- app/include/zmk/hid.h | 5 +++++ docs/docs/config/system.md | 12 ++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 32ec435593b..63eff2ad4be 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -53,10 +53,19 @@ config ZMK_HID_REPORT_TYPE_NKRO help Enable full N-Key Roll Over for HID output. This selection will prevent the keyboard from working with some BIOS/UEFI versions that only support "boot keyboard" support. - This option also prevents using some infrequently used higher range HID usages. + This option also prevents using some infrequently used higher range HID usages (notably F13-F24 and INTL1-9) + These usages can be re enabled with ZMK_HID_KEYBOARD_NKRO_EXTENDED_REPORT. endchoice +config ZMK_HID_KEYBOARD_NKRO_EXTENDED_REPORT + bool "Enable extended NKRO reporting" + depends on ZMK_HID_REPORT_TYPE_NKRO + help + Enables higher usage range for NKRO (F13-F24 and INTL1-9). + Please note this is not compatible with Android currently and you will get no input + + if ZMK_HID_REPORT_TYPE_HKRO config ZMK_HID_KEYBOARD_REPORT_SIZE diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 3f7e61bcd45..30534b02d21 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -17,7 +17,12 @@ #include #include +#if IS_ENABLED(CONFIG_ZMK_HID_KEYBOARD_NKRO_EXTENDED_REPORT) +#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYBOARD_LANG8 +#else #define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL +#endif + #define ZMK_HID_MOUSE_NUM_BUTTONS 0x05 // See https://www.usb.org/sites/default/files/hid1_11.pdf section 6.2.2.4 Main Items diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 6e834c678b9..4629ea0f790 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -34,12 +34,24 @@ Exactly zero or one of the following options may be set to `y`. The first is use | `CONFIG_ZMK_HID_REPORT_TYPE_HKRO` | Enable `CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE` key roll over. | | `CONFIG_ZMK_HID_REPORT_TYPE_NKRO` | Enable full N-key roll over. This may prevent the keyboard from working with some BIOS/UEFI versions. | +:::note NKRO usages + +By default the NKRO max usage is set so as to maximize compatibility, however certain less frequently used keys (F13-F24 and INTL1-8) will not work with it. One solution is to set `CONFIG_ZMK_HID_KEYBOARD_NKRO_EXTENDED_REPORT=y`, however this is known to break compatibility with Android and thus not enabled by default. + +::: + If `CONFIG_ZMK_HID_REPORT_TYPE_HKRO` is enabled, it may be configured with the following options: | Config | Type | Description | Default | | ------------------------------------- | ---- | ------------------------------------------------- | ------- | | `CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE` | int | Number of keyboard keys simultaneously reportable | 6 | +If `CONFIG_ZMK_HID_REPORT_TYPE_NKRO` is enabled, it may be configured with the following options: + +| Config | Type | Description | Default | +| ---------------------------------------------- | ---- | -------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_HID_KEYBOARD_NKRO_EXTENDED_REPORT` | bool | Enable less frequently used key usages, at the cost of compatibility | n | + Exactly zero or one of the following options may be set to `y`. The first is used if none are set. | Config | Description | From dbe5dfb1d841f55f2ad853275206aa706d24770b Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 4 Dec 2023 23:31:35 +0000 Subject: [PATCH 0833/1130] feat(split): Add is_bonded function to peripherals There is already a function to see if the peripheral is connected, a matching one for if it's bonded is a useful addition for displays/indicators. `is_bonded` gets reset to false in the advertising function in preparation for runtime peripheral bond clearing --- app/include/zmk/split/bluetooth/peripheral.h | 4 +++- app/src/split/bluetooth/peripheral.c | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/include/zmk/split/bluetooth/peripheral.h b/app/include/zmk/split/bluetooth/peripheral.h index a650508ad53..44ac8062a51 100644 --- a/app/include/zmk/split/bluetooth/peripheral.h +++ b/app/include/zmk/split/bluetooth/peripheral.h @@ -6,4 +6,6 @@ #pragma once -bool zmk_split_bt_peripheral_is_connected(void); \ No newline at end of file +bool zmk_split_bt_peripheral_is_connected(void); + +bool zmk_split_bt_peripheral_is_bonded(void); \ No newline at end of file diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index 1d649f71221..704e2eed408 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -43,6 +43,8 @@ static const struct bt_data zmk_ble_ad[] = { static bool is_connected = false; +static bool is_bonded = false; + static void each_bond(const struct bt_bond_info *info, void *user_data) { bt_addr_le_t *addr = (bt_addr_le_t *)user_data; @@ -57,10 +59,12 @@ static int start_advertising(bool low_duty) { bt_foreach_bond(BT_ID_DEFAULT, each_bond, ¢ral_addr); if (bt_addr_le_cmp(¢ral_addr, BT_ADDR_LE_NONE) != 0) { + is_bonded = true; struct bt_le_adv_param adv_param = low_duty ? *BT_LE_ADV_CONN_DIR_LOW_DUTY(¢ral_addr) : *BT_LE_ADV_CONN_DIR(¢ral_addr); return bt_le_adv_start(&adv_param, NULL, 0, NULL, 0); } else { + is_bonded = false; return bt_le_adv_start(BT_LE_ADV_CONN, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); } }; @@ -132,8 +136,16 @@ static struct bt_conn_cb conn_callbacks = { .le_param_updated = le_param_updated, }; +static void auth_pairing_complete(struct bt_conn *conn, bool bonded) { is_bonded = bonded; } + +static struct bt_conn_auth_info_cb zmk_peripheral_ble_auth_info_cb = { + .pairing_complete = auth_pairing_complete, +}; + bool zmk_split_bt_peripheral_is_connected() { return is_connected; } +bool zmk_split_bt_peripheral_is_bonded() { return is_bonded; } + static int zmk_peripheral_ble_init(const struct device *_arg) { int err = bt_enable(NULL); @@ -155,6 +167,7 @@ static int zmk_peripheral_ble_init(const struct device *_arg) { bt_unpair(BT_ID_DEFAULT, NULL); #else bt_conn_cb_register(&conn_callbacks); + bt_conn_auth_info_cb_register(&zmk_peripheral_ble_auth_info_cb); low_duty_advertising = false; k_work_submit(&advertising_work); From 179bdbc41a85165d3d535cd3b0df410ad0621662 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Tue, 5 Sep 2023 11:35:51 -0500 Subject: [PATCH 0834/1130] refactor(behaviors): Make label property optional Changed all code (except for layer names) which used the label property to use DEVICE_DT_NAME() instead, which uses the label if set or falls back to the full node name. This matches how Zephyr determines the node names used with device_get_binding() and allows us to start removing the deprecated label property from things. --- app/dts/bindings/behaviors/one_param.yaml | 3 +- app/dts/bindings/behaviors/two_param.yaml | 3 +- app/dts/bindings/behaviors/zero_param.yaml | 3 +- .../zmk,behavior-sensor-rotate-var.yaml | 3 +- .../behaviors/zmk,behavior-sensor-rotate.yaml | 3 +- app/dts/bindings/zmk,kscan-composite.yaml | 4 ++ app/dts/bindings/zmk,kscan-mock.yaml | 2 + app/include/zmk/keymap.h | 2 +- app/src/behaviors/behavior_hold_tap.c | 4 +- app/src/behaviors/behavior_macro.c | 24 ++++----- app/src/behaviors/behavior_mod_morph.c | 2 +- app/src/behaviors/behavior_sensor_rotate.c | 2 +- .../behaviors/behavior_sensor_rotate_var.c | 4 +- app/src/ext_power_generic.c | 52 +++++++++---------- app/src/keymap.c | 21 ++++---- 15 files changed, 70 insertions(+), 62 deletions(-) diff --git a/app/dts/bindings/behaviors/one_param.yaml b/app/dts/bindings/behaviors/one_param.yaml index faa01a0d4ca..9a503e8a815 100644 --- a/app/dts/bindings/behaviors/one_param.yaml +++ b/app/dts/bindings/behaviors/one_param.yaml @@ -4,7 +4,8 @@ properties: label: type: string - required: true + required: false + deprecated: true "#binding-cells": type: int required: true diff --git a/app/dts/bindings/behaviors/two_param.yaml b/app/dts/bindings/behaviors/two_param.yaml index d4cdfaa00fd..4f342301bb3 100644 --- a/app/dts/bindings/behaviors/two_param.yaml +++ b/app/dts/bindings/behaviors/two_param.yaml @@ -4,7 +4,8 @@ properties: label: type: string - required: true + required: false + deprecated: true "#binding-cells": type: int required: true diff --git a/app/dts/bindings/behaviors/zero_param.yaml b/app/dts/bindings/behaviors/zero_param.yaml index 075270d638f..79d0dcaed3f 100644 --- a/app/dts/bindings/behaviors/zero_param.yaml +++ b/app/dts/bindings/behaviors/zero_param.yaml @@ -4,7 +4,8 @@ properties: label: type: string - required: true + required: false + deprecated: true "#binding-cells": type: int required: true diff --git a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml index 0da3b4dbfea..d286f9c4c1b 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml @@ -8,7 +8,8 @@ compatible: "zmk,behavior-sensor-rotate-var" properties: label: type: string - required: true + required: false + deprecated: true "#sensor-binding-cells": type: int required: true diff --git a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml index d20777b8d98..dbb92c8bcfa 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml @@ -8,7 +8,8 @@ compatible: "zmk,behavior-sensor-rotate" properties: label: type: string - required: true + required: false + deprecated: true "#sensor-binding-cells": type: int required: true diff --git a/app/dts/bindings/zmk,kscan-composite.yaml b/app/dts/bindings/zmk,kscan-composite.yaml index 6126c30340e..857ef34fa4f 100644 --- a/app/dts/bindings/zmk,kscan-composite.yaml +++ b/app/dts/bindings/zmk,kscan-composite.yaml @@ -6,6 +6,8 @@ compatible: "zmk,kscan-composite" properties: label: type: string + required: false + deprecated: true rows: type: int columns: @@ -17,6 +19,8 @@ child-binding: properties: label: type: string + required: false + deprecated: true kscan: type: phandle row-offset: diff --git a/app/dts/bindings/zmk,kscan-mock.yaml b/app/dts/bindings/zmk,kscan-mock.yaml index f9d83fa7e89..2fe9360c71f 100644 --- a/app/dts/bindings/zmk,kscan-mock.yaml +++ b/app/dts/bindings/zmk,kscan-mock.yaml @@ -6,6 +6,8 @@ compatible: "zmk,kscan-mock" properties: label: type: string + required: false + deprecated: true event-period: type: int description: Milliseconds between each generated event diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 9ce140bfa27..43e8aef141f 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -29,7 +29,7 @@ int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pr #define ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) \ { \ - .behavior_dev = DT_PROP(DT_PHANDLE_BY_IDX(drv_inst, bindings, idx), label), \ + .behavior_dev = DEVICE_DT_NAME(DT_PHANDLE_BY_IDX(drv_inst, bindings, idx)), \ .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(drv_inst, bindings, idx, param1), (0), \ (DT_PHA_BY_IDX(drv_inst, bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(drv_inst, bindings, idx, param2), (0), \ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index d4aa0dce036..26c190b6613 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -703,8 +703,8 @@ static int behavior_hold_tap_init(const struct device *dev) { #define KP_INST(n) \ static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ - .hold_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label), \ - .tap_behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label), \ + .hold_behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(n, bindings, 0)), \ + .tap_behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(n, bindings, 1)), \ .quick_tap_ms = DT_INST_PROP(n, quick_tap_ms), \ .require_prior_idle_ms = DT_INST_PROP(n, global_quick_tap) \ ? DT_INST_PROP(n, quick_tap_ms) \ diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index c47284531a7..e6a789b6dc3 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -44,18 +44,18 @@ struct behavior_macro_config { struct zmk_behavior_binding bindings[]; }; -#define TAP_MODE DT_PROP(DT_INST(0, zmk_macro_control_mode_tap), label) -#define PRESS_MODE DT_PROP(DT_INST(0, zmk_macro_control_mode_press), label) -#define REL_MODE DT_PROP(DT_INST(0, zmk_macro_control_mode_release), label) - -#define TAP_TIME DT_PROP(DT_INST(0, zmk_macro_control_tap_time), label) -#define WAIT_TIME DT_PROP(DT_INST(0, zmk_macro_control_wait_time), label) -#define WAIT_REL DT_PROP(DT_INST(0, zmk_macro_pause_for_release), label) - -#define P1TO1 DT_PROP(DT_INST(0, zmk_macro_param_1to1), label) -#define P1TO2 DT_PROP(DT_INST(0, zmk_macro_param_1to2), label) -#define P2TO1 DT_PROP(DT_INST(0, zmk_macro_param_2to1), label) -#define P2TO2 DT_PROP(DT_INST(0, zmk_macro_param_2to2), label) +#define TAP_MODE DEVICE_DT_NAME(DT_INST(0, zmk_macro_control_mode_tap)) +#define PRESS_MODE DEVICE_DT_NAME(DT_INST(0, zmk_macro_control_mode_press)) +#define REL_MODE DEVICE_DT_NAME(DT_INST(0, zmk_macro_control_mode_release)) + +#define TAP_TIME DEVICE_DT_NAME(DT_INST(0, zmk_macro_control_tap_time)) +#define WAIT_TIME DEVICE_DT_NAME(DT_INST(0, zmk_macro_control_wait_time)) +#define WAIT_REL DEVICE_DT_NAME(DT_INST(0, zmk_macro_pause_for_release)) + +#define P1TO1 DEVICE_DT_NAME(DT_INST(0, zmk_macro_param_1to1)) +#define P1TO2 DEVICE_DT_NAME(DT_INST(0, zmk_macro_param_1to2)) +#define P2TO1 DEVICE_DT_NAME(DT_INST(0, zmk_macro_param_2to1)) +#define P2TO2 DEVICE_DT_NAME(DT_INST(0, zmk_macro_param_2to2)) #define ZM_IS_NODE_MATCH(a, b) (strcmp(a, b) == 0) #define IS_TAP_MODE(dev) ZM_IS_NODE_MATCH(dev, TAP_MODE) diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index d540abd93af..f0832514122 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -81,7 +81,7 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } #define _TRANSFORM_ENTRY(idx, node) \ { \ - .behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(node, bindings, idx), label), \ + .behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(node, bindings, idx)), \ .param1 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param1), (0), \ (DT_INST_PHA_BY_IDX(node, bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param2), (0), \ diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c index 822bc206b02..eb138fe23ab 100644 --- a/app/src/behaviors/behavior_sensor_rotate.c +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -20,7 +20,7 @@ static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; #define _TRANSFORM_ENTRY(idx, node) \ { \ - .behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(node, bindings, idx), label), \ + .behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(node, bindings, idx)), \ .param1 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param1), (0), \ (DT_INST_PHA_BY_IDX(node, bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param2), (0), \ diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c index e6d20cab9d1..8263a693813 100644 --- a/app/src/behaviors/behavior_sensor_rotate_var.c +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -20,8 +20,8 @@ static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; #define SENSOR_ROTATE_VAR_INST(n) \ static struct behavior_sensor_rotate_config behavior_sensor_rotate_var_config_##n = { \ - .cw_binding = {.behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 0), label)}, \ - .ccw_binding = {.behavior_dev = DT_PROP(DT_INST_PHANDLE_BY_IDX(n, bindings, 1), label)}, \ + .cw_binding = {.behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(n, bindings, 0))}, \ + .ccw_binding = {.behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(n, bindings, 1))}, \ .tap_ms = DT_INST_PROP(n, tap_ms), \ .override_params = true, \ }; \ diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index e35714da10b..52896f19871 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -39,7 +39,7 @@ static void ext_power_save_state_work(struct k_work *work) { const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0)); struct ext_power_generic_data *data = ext_power->data; - snprintf(setting_path, 40, "ext_power/state/%s", DT_INST_PROP(0, label)); + snprintf(setting_path, sizeof(setting_path), "ext_power/state/%s", ext_power->name); settings_save_one(setting_path, &data->status, sizeof(data->status)); } @@ -86,38 +86,38 @@ static int ext_power_generic_get(const struct device *dev) { } #if IS_ENABLED(CONFIG_SETTINGS) -static int ext_power_settings_set(const char *name, size_t len, settings_read_cb read_cb, - void *cb_arg) { - const char *next; - int rc; +static int ext_power_settings_set_status(const struct device *dev, size_t len, + settings_read_cb read_cb, void *cb_arg) { + struct ext_power_generic_data *data = dev->data; - if (settings_name_steq(name, DT_INST_PROP(0, label), &next) && !next) { - const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0)); - struct ext_power_generic_data *data = ext_power->data; + if (len != sizeof(data->status)) { + return -EINVAL; + } - if (len != sizeof(data->status)) { - return -EINVAL; - } + int rc = read_cb(cb_arg, &data->status, sizeof(data->status)); + if (rc >= 0) { + data->settings_init = true; - rc = read_cb(cb_arg, &data->status, sizeof(data->status)); - if (rc >= 0) { - data->settings_init = true; + if (data->status) { + ext_power_generic_enable(dev); + } else { + ext_power_generic_disable(dev); + } - if (ext_power == NULL) { - LOG_ERR("Unable to retrieve ext_power device: %s", DT_INST_PROP(0, label)); - return -EIO; - } + return 0; + } + return rc; +} - if (data->status) { - ext_power_generic_enable(ext_power); - } else { - ext_power_generic_disable(ext_power); - } +static int ext_power_settings_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0)); - return 0; - } - return rc; + const char *next; + if (settings_name_steq(name, ext_power->name, &next) && !next) { + return ext_power_settings_set_status(ext_power, len, read_cb, cb_arg); } + return -ENOENT; } diff --git a/app/src/keymap.c b/app/src/keymap.c index bda694276c8..ca41e34adcc 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -31,15 +31,13 @@ static uint8_t _zmk_keymap_layer_default = 0; #define DT_DRV_COMPAT zmk_keymap -#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst) - #define TRANSFORMED_LAYER(node) \ - {LISTIFY(DT_PROP_LEN(node, bindings), BINDING_WITH_COMMA, (, ), node)}, + { LISTIFY(DT_PROP_LEN(node, bindings), ZMK_KEYMAP_EXTRACT_BINDING, (, ), node) } #if ZMK_KEYMAP_HAS_SENSORS #define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ { \ - .behavior_dev = DT_PROP(DT_PHANDLE_BY_IDX(layer, sensor_bindings, idx), label), \ + .behavior_dev = DEVICE_DT_NAME(DT_PHANDLE_BY_IDX(layer, sensor_bindings, idx)), \ .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param1), (0), \ (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param1))), \ .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param2), (0), \ @@ -50,12 +48,11 @@ static uint8_t _zmk_keymap_layer_default = 0; COND_CODE_1( \ DT_NODE_HAS_PROP(node, sensor_bindings), \ ({LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, (, ), node)}), \ - ({})), + ({})) #endif /* ZMK_KEYMAP_HAS_SENSORS */ -#define LAYER_LABEL(node) \ - COND_CODE_0(DT_NODE_HAS_PROP(node, label), (NULL), (DT_PROP(node, label))), +#define LAYER_LABEL(node) DT_PROP_OR(node, label, NULL) // State @@ -65,16 +62,16 @@ static uint8_t _zmk_keymap_layer_default = 0; static uint32_t zmk_keymap_active_behavior_layer[ZMK_KEYMAP_LEN]; static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { - DT_INST_FOREACH_CHILD(0, TRANSFORMED_LAYER)}; + DT_INST_FOREACH_CHILD_SEP(0, TRANSFORMED_LAYER, (, ))}; static const char *zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN] = { - DT_INST_FOREACH_CHILD(0, LAYER_LABEL)}; + DT_INST_FOREACH_CHILD_SEP(0, LAYER_LABEL, (, ))}; #if ZMK_KEYMAP_HAS_SENSORS -static struct zmk_behavior_binding zmk_sensor_keymap[ZMK_KEYMAP_LAYERS_LEN] - [ZMK_KEYMAP_SENSORS_LEN] = { - DT_INST_FOREACH_CHILD(0, SENSOR_LAYER)}; +static struct zmk_behavior_binding + zmk_sensor_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_SENSORS_LEN] = { + DT_INST_FOREACH_CHILD_SEP(0, SENSOR_LAYER, (, ))}; #endif /* ZMK_KEYMAP_HAS_SENSORS */ From 05925c72d7303fe786455e64d2c938bdf6be3b0a Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Tue, 5 Sep 2023 17:52:18 -0500 Subject: [PATCH 0835/1130] refactor(ext_power): Remove label property Changed the label property on zmk,ext-power-generic to be optional and removed it from existing uses. Renamed the nodes for all non-development boards to "EXT_POWER" to preserve user settings. rgb_underglow.c now finds the correct device by finding the first instance of zmk,ext-power-generic instead of looking for a node named "EXT_POWER". --- app/boards/arm/bluemicro840/bluemicro840_v1.dts | 4 ++-- app/boards/arm/ckp/ckp.dtsi | 4 ++-- app/boards/arm/glove80/glove80_lh.dts | 4 ++-- app/boards/arm/glove80/glove80_rh.dts | 4 ++-- app/boards/arm/mikoto/mikoto_520.dts | 4 ++-- app/boards/arm/nice60/nice60.dts | 4 ++-- app/boards/arm/nice_nano/nice_nano.dts | 4 ++-- app/boards/arm/nice_nano/nice_nano_v2.dts | 4 ++-- app/boards/arm/nrfmicro/nrfmicro_11.dts | 4 ++-- app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 4 ++-- app/boards/arm/nrfmicro/nrfmicro_13.dts | 4 ++-- app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 4 ++-- app/boards/arm/pillbug/pillbug.dts | 4 ++-- app/boards/arm/puchi_ble/puchi_ble_v1.dts | 4 ++-- app/boards/shields/zmk_uno/zmk_uno.overlay | 3 --- app/dts/bindings/zmk,ext-power-generic.yaml | 3 ++- app/src/rgb_underglow.c | 8 ++++---- 17 files changed, 34 insertions(+), 36 deletions(-) diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index 05849001eaf..b31a8f7fd23 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -29,9 +29,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; init-delay-ms = <20>; control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/arm/ckp/ckp.dtsi b/app/boards/arm/ckp/ckp.dtsi index ec2bd6a87b6..2cb4bcfea6c 100644 --- a/app/boards/arm/ckp/ckp.dtsi +++ b/app/boards/arm/ckp/ckp.dtsi @@ -66,9 +66,9 @@ ; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; }; diff --git a/app/boards/arm/glove80/glove80_lh.dts b/app/boards/arm/glove80/glove80_lh.dts index ed40e0d2d1e..b00fa9806e6 100644 --- a/app/boards/arm/glove80/glove80_lh.dts +++ b/app/boards/arm/glove80/glove80_lh.dts @@ -28,9 +28,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; /* WS2812_CE */ init-delay-ms = <100>; }; diff --git a/app/boards/arm/glove80/glove80_rh.dts b/app/boards/arm/glove80/glove80_rh.dts index 288f63688ca..e9fd52d5e3f 100644 --- a/app/boards/arm/glove80/glove80_rh.dts +++ b/app/boards/arm/glove80/glove80_rh.dts @@ -29,9 +29,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>; /* WS2812_CE */ init-delay-ms = <100>; }; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index f8007033155..0da2e441cde 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -29,9 +29,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; init-delay-ms = <50>; }; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index 651dd555556..ea72945a0ba 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -78,9 +78,9 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; }; diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index 4ee0df7fc43..8fec5004f78 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -12,9 +12,9 @@ zmk,battery = &vbatt; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; }; diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts index b2fbcc81970..429b339ecdd 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2.dts +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -12,9 +12,9 @@ zmk,battery = &vbatt; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; init-delay-ms = <50>; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 14b9adb9670..7d2f88c47d9 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -28,9 +28,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index 874b67e25de..88ef21b6349 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -28,9 +28,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index 65674132f80..e71c5c4f41a 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -29,9 +29,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index cfe77e37c82..c75a44b1cf0 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -29,9 +29,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; }; diff --git a/app/boards/arm/pillbug/pillbug.dts b/app/boards/arm/pillbug/pillbug.dts index a2e56df3e8e..6d9337aa5d2 100644 --- a/app/boards/arm/pillbug/pillbug.dts +++ b/app/boards/arm/pillbug/pillbug.dts @@ -30,9 +30,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; init-delay-ms = <50>; }; diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.dts b/app/boards/arm/puchi_ble/puchi_ble_v1.dts index b056f7113e1..1198b762d45 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1.dts +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.dts @@ -29,9 +29,9 @@ }; }; - ext-power { + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; }; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 02bb4ad8e81..b21b83aeeb9 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -49,15 +49,12 @@ nice_view_spi: &arduino_spi { // Commented out until we add more powerful power domain support // external_power { // compatible = "zmk,ext-power-generic"; - // label = "EXT_POWER"; // init-delay-ms = <200>; // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; // }; rgb_power { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; - // label = "RGB_POWER"; init-delay-ms = <200>; control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; }; diff --git a/app/dts/bindings/zmk,ext-power-generic.yaml b/app/dts/bindings/zmk,ext-power-generic.yaml index ddb4b3deb9b..cb2a16b57ba 100644 --- a/app/dts/bindings/zmk,ext-power-generic.yaml +++ b/app/dts/bindings/zmk,ext-power-generic.yaml @@ -14,7 +14,8 @@ properties: required: true label: type: string - required: true + required: false + deprecated: true init-delay-ms: type: int description: Number of milliseconds to delay after initializing driver diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index b80d403953f..9d4f2cf1cab 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -67,7 +67,7 @@ static struct led_rgb pixels[STRIP_NUM_PIXELS]; static struct rgb_underglow_state state; #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER) -static const struct device *ext_power; +static const struct device *const ext_power = DEVICE_DT_GET(DT_INST(0, zmk_ext_power_generic)); #endif static struct zmk_led_hsb hsb_scale_min_max(struct zmk_led_hsb hsb) { @@ -243,9 +243,9 @@ static int zmk_rgb_underglow_init(const struct device *_arg) { led_strip = DEVICE_DT_GET(STRIP_CHOSEN); #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER) - ext_power = device_get_binding("EXT_POWER"); - if (ext_power == NULL) { - LOG_ERR("Unable to retrieve ext_power device: EXT_POWER"); + if (!device_is_ready(ext_power)) { + LOG_ERR("External power device \"%s\" is not ready", ext_power->name); + return -ENODEV; } #endif From 3ae9e740567081fceb1c67ad403e4d94e983e08b Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 18 Nov 2023 00:39:11 -0600 Subject: [PATCH 0836/1130] refactor(drivers): Make label property optional --- app/module/dts/bindings/sensor/alps,ec11.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/module/dts/bindings/sensor/alps,ec11.yaml b/app/module/dts/bindings/sensor/alps,ec11.yaml index 3672ea30579..46dad31d23d 100644 --- a/app/module/dts/bindings/sensor/alps,ec11.yaml +++ b/app/module/dts/bindings/sensor/alps,ec11.yaml @@ -6,7 +6,8 @@ compatible: "alps,ec11" properties: label: type: string - required: true + required: false + deprecated: true a-gpios: type: phandle-array required: true From ba5637fdefc5aff8e57ec9172887405dcb363bb1 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 6 Oct 2023 19:53:37 -0500 Subject: [PATCH 0837/1130] refactor: Remove unimportant labels Removed "label" properties which no longer have any function. Labels are still used as layer names and as identifiers for sending behaviors between sides of a split keyboard, so those have been left alone for now. --- app/boards/arm/bdn9/bdn9_rev2.dts | 7 ------- app/boards/arm/bluemicro840/bluemicro840_v1.dts | 7 ------- app/boards/arm/bt60/bt60.dtsi | 8 -------- app/boards/arm/bt60/bt60_v1.dts | 1 - app/boards/arm/bt60/bt60_v1_hs.dts | 1 - app/boards/arm/ckp/ckp.dtsi | 12 ------------ app/boards/arm/corneish_zen/corneish_zen.dtsi | 5 ----- app/boards/arm/corneish_zen/corneish_zen_v1_left.dts | 4 ---- .../arm/corneish_zen/corneish_zen_v1_right.dts | 4 ---- app/boards/arm/corneish_zen/corneish_zen_v2_left.dts | 4 ---- .../arm/corneish_zen/corneish_zen_v2_right.dts | 4 ---- app/boards/arm/dz60rgb/dz60rgb_rev1.dts | 3 --- app/boards/arm/ferris/ferris_rev02.dts | 5 ----- app/boards/arm/glove80/glove80.dtsi | 6 ------ app/boards/arm/glove80/glove80.keymap | 5 ----- app/boards/arm/glove80/glove80_lh.dts | 4 ---- app/boards/arm/glove80/glove80_rh.dts | 4 ---- app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts | 3 --- app/boards/arm/mikoto/mikoto_520.dts | 7 ------- app/boards/arm/nice60/nice60.dts | 9 --------- app/boards/arm/nice_nano/nice_nano.dts | 1 - app/boards/arm/nice_nano/nice_nano.dtsi | 6 ------ app/boards/arm/nice_nano/nice_nano_v2.dts | 1 - app/boards/arm/nrf52840_m2/nrf52840_m2.dts | 9 --------- app/boards/arm/nrfmicro/nrfmicro_11.dts | 6 ------ app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 6 ------ app/boards/arm/nrfmicro/nrfmicro_13.dts | 7 ------- app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 7 ------- app/boards/arm/pillbug/pillbug.dts | 7 ------- app/boards/arm/planck/planck_rev6.dts | 3 --- app/boards/arm/preonic/preonic_rev3.dts | 3 --- app/boards/arm/proton_c/proton_c.dts | 3 --- app/boards/arm/puchi_ble/puchi_ble_v1.dts | 7 ------- app/boards/arm/s40nc/s40nc.dts | 8 -------- app/boards/native_posix.overlay | 1 - app/boards/native_posix_64.overlay | 1 - app/boards/seeeduino_xiao.overlay | 1 - app/boards/seeeduino_xiao_ble.overlay | 2 -- app/boards/shields/a_dux/a_dux.dtsi | 1 - app/boards/shields/bat43/bat43.overlay | 1 - app/boards/shields/bfo9000/bfo9000.dtsi | 1 - .../shields/boardsource3x4/boardsource3x4.overlay | 1 - .../shields/boardsource5x12/boardsource5x12.overlay | 1 - app/boards/shields/chalice/boards/nice_nano.overlay | 1 - .../shields/chalice/boards/nice_nano_v2.overlay | 1 - app/boards/shields/chalice/chalice.overlay | 1 - app/boards/shields/clog/clog.dtsi | 1 - .../clueboard_california.overlay | 2 -- app/boards/shields/contra/contra.overlay | 1 - app/boards/shields/corne/boards/nice_nano.overlay | 1 - app/boards/shields/corne/boards/nice_nano_v2.overlay | 1 - app/boards/shields/corne/corne.dtsi | 2 -- app/boards/shields/cradio/cradio.dtsi | 1 - app/boards/shields/crbn/crbn.overlay | 2 -- app/boards/shields/eek/eek.overlay | 1 - .../shields/elephant42/boards/nice_nano.overlay | 1 - .../shields/elephant42/boards/nice_nano_v2.overlay | 1 - app/boards/shields/elephant42/elephant42.dtsi | 2 -- app/boards/shields/ergodash/ergodash.dtsi | 1 - .../shields/eternal_keypad/boards/nice_nano.overlay | 1 - .../eternal_keypad/boards/nice_nano_v2.overlay | 1 - .../shields/eternal_keypad/eternal_keypad.dtsi | 1 - app/boards/shields/fourier/fourier.dtsi | 1 - app/boards/shields/helix/boards/nice_nano.overlay | 1 - app/boards/shields/helix/boards/nice_nano_v2.overlay | 1 - app/boards/shields/helix/helix.dtsi | 1 - app/boards/shields/hummingbird/hummingbird.overlay | 1 - app/boards/shields/iris/iris.dtsi | 1 - app/boards/shields/jian/jian.dtsi | 1 - app/boards/shields/jiran/jiran.dtsi | 1 - app/boards/shields/jorne/boards/nice_nano.overlay | 1 - app/boards/shields/jorne/boards/nice_nano_v2.overlay | 1 - app/boards/shields/jorne/jorne.dtsi | 2 -- app/boards/shields/knob_goblin/knob_goblin.overlay | 4 ---- app/boards/shields/kyria/boards/nice_nano.overlay | 1 - app/boards/shields/kyria/boards/nice_nano_v2.overlay | 1 - app/boards/shields/kyria/boards/nrfmicro_11.overlay | 1 - .../shields/kyria/boards/nrfmicro_11_flipped.overlay | 1 - app/boards/shields/kyria/boards/nrfmicro_13.overlay | 1 - app/boards/shields/kyria/kyria_common.dtsi | 4 ---- .../shields/leeloo/boards/nice_nano_v2.overlay | 1 - app/boards/shields/leeloo/leeloo_common.dtsi | 4 ---- .../shields/leeloo_micro/boards/nice_nano_v2.overlay | 1 - app/boards/shields/leeloo_micro/leeloo_micro.dtsi | 4 ---- app/boards/shields/lily58/boards/nice_nano.overlay | 1 - .../shields/lily58/boards/nice_nano_v2.overlay | 1 - app/boards/shields/lily58/lily58.dtsi | 3 --- app/boards/shields/lotus58/lotus58.dtsi | 4 ---- app/boards/shields/m60/m60.overlay | 1 - app/boards/shields/microdox/boards/nice_nano.overlay | 1 - .../shields/microdox/boards/nice_nano_v2.overlay | 1 - app/boards/shields/microdox/microdox.dtsi | 1 - app/boards/shields/microdox/microdox_common.dtsi | 1 - app/boards/shields/microdox/microdox_v2.dtsi | 1 - app/boards/shields/murphpad/boards/nice_nano.overlay | 1 - .../shields/murphpad/boards/nice_nano_v2.overlay | 1 - app/boards/shields/murphpad/murphpad.overlay | 4 ---- app/boards/shields/naked60/naked60.overlay | 1 - app/boards/shields/nibble/boards/nice_nano.overlay | 1 - .../shields/nibble/boards/nice_nano_v2.overlay | 1 - app/boards/shields/nibble/nibble.overlay | 3 --- app/boards/shields/nice_view/nice_view.overlay | 1 - app/boards/shields/osprette/osprette.overlay | 1 - app/boards/shields/pancake/pancake.overlay | 1 - app/boards/shields/qaz/qaz.overlay | 1 - app/boards/shields/quefrency/quefrency_left.overlay | 1 - app/boards/shields/quefrency/quefrency_right.overlay | 1 - app/boards/shields/redox/boards/nice_nano.overlay | 1 - app/boards/shields/redox/boards/nice_nano_v2.overlay | 1 - app/boards/shields/redox/redox.dtsi | 1 - .../shields/reviung34/boards/nice_nano_v2.overlay | 1 - app/boards/shields/reviung34/reviung34.overlay | 1 - .../shields/reviung41/boards/nice_nano.overlay | 1 - .../shields/reviung41/boards/nice_nano_v2.overlay | 1 - app/boards/shields/reviung41/reviung41.overlay | 1 - app/boards/shields/reviung5/reviung5.overlay | 2 -- .../shields/reviung53/boards/nice_nano.overlay | 1 - .../shields/reviung53/boards/nice_nano_v2.overlay | 1 - app/boards/shields/reviung53/reviung53.overlay | 1 - app/boards/shields/romac/romac.overlay | 1 - .../shields/romac_plus/boards/nice_nano.overlay | 1 - .../shields/romac_plus/boards/nice_nano_v2.overlay | 1 - app/boards/shields/romac_plus/romac_plus.dtsi | 2 -- app/boards/shields/romac_plus/romac_plus.overlay | 1 - .../shields/settings_reset/settings_reset.overlay | 1 - app/boards/shields/snap/boards/nice_nano.overlay | 1 - app/boards/shields/snap/boards/nice_nano_v2.overlay | 1 - app/boards/shields/snap/snap.dtsi | 5 ----- app/boards/shields/snap/snap_right.overlay | 1 - app/boards/shields/sofle/boards/nice_nano.overlay | 1 - app/boards/shields/sofle/boards/nice_nano_v2.overlay | 1 - app/boards/shields/sofle/boards/nrfmicro_11.overlay | 1 - app/boards/shields/sofle/boards/nrfmicro_13.overlay | 1 - app/boards/shields/sofle/sofle.dtsi | 4 ---- .../splitkb_aurora_corne/boards/nice_nano.overlay | 1 - .../splitkb_aurora_corne/boards/nice_nano_v2.overlay | 1 - .../splitkb_aurora_corne/splitkb_aurora_corne.dtsi | 3 --- .../splitkb_aurora_corne_left.overlay | 2 -- .../splitkb_aurora_corne_right.overlay | 2 -- .../splitkb_aurora_helix/boards/nice_nano.overlay | 1 - .../splitkb_aurora_helix/boards/nice_nano_v2.overlay | 1 - .../splitkb_aurora_helix/splitkb_aurora_helix.dtsi | 3 --- .../splitkb_aurora_helix_left.overlay | 2 -- .../splitkb_aurora_helix_right.overlay | 2 -- .../splitkb_aurora_lily58/boards/nice_nano.overlay | 1 - .../boards/nice_nano_v2.overlay | 1 - .../splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi | 3 --- .../splitkb_aurora_lily58_left.overlay | 2 -- .../splitkb_aurora_lily58_right.overlay | 2 -- .../splitkb_aurora_sofle/boards/nice_nano.overlay | 1 - .../splitkb_aurora_sofle/boards/nice_nano_v2.overlay | 1 - .../splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi | 3 --- .../splitkb_aurora_sofle_left.overlay | 2 -- .../splitkb_aurora_sofle_right.overlay | 2 -- .../splitkb_aurora_sweep/boards/nice_nano.overlay | 1 - .../splitkb_aurora_sweep/boards/nice_nano_v2.overlay | 1 - .../splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi | 5 ----- .../splitkb_aurora_sweep_left.overlay | 2 -- .../splitkb_aurora_sweep_right.overlay | 2 -- app/boards/shields/splitreus62/splitreus62.dtsi | 1 - app/boards/shields/tg4x/boards/nice_nano.overlay | 1 - app/boards/shields/tg4x/boards/nice_nano_v2.overlay | 1 - app/boards/shields/tg4x/tg4x.overlay | 1 - app/boards/shields/tidbit/boards/nice_nano.overlay | 1 - .../shields/tidbit/boards/nice_nano_v2.overlay | 1 - app/boards/shields/tidbit/tidbit.dtsi | 7 ------- .../two_percent_milk/boards/nice_nano.overlay | 1 - .../two_percent_milk/boards/nice_nano_v2.overlay | 1 - .../two_percent_milk/boards/nrfmicro_11.overlay | 1 - .../boards/nrfmicro_11_flipped.overlay | 1 - .../two_percent_milk/boards/nrfmicro_13.overlay | 1 - .../two_percent_milk/two_percent_milk.overlay | 2 -- app/boards/shields/waterfowl/waterfowl.dtsi | 6 ------ app/boards/shields/zmk_uno/zmk_uno.overlay | 7 ------- app/boards/shields/zodiark/zodiark.dtsi | 4 ---- app/boards/usb_console.dtsi | 1 - app/tests/backlight/behavior_keymap.dtsi | 3 --- app/tests/backlight/cycle/native_posix_64.keymap | 3 --- app/tests/caps-word/behavior_keymap.dtsi | 1 - .../continue-with-modifiers/native_posix_64.keymap | 1 - .../combos-and-holdtaps-0/native_posix_64.keymap | 1 - .../combos-and-holdtaps-1/native_posix_64.keymap | 1 - .../combos-and-holdtaps-2/native_posix_64.keymap | 1 - .../combos-and-holdtaps-3/native_posix_64.keymap | 1 - .../combos-and-holdtaps-4/native_posix_64.keymap | 1 - .../combo/layer-filter-0/native_posix_64.keymap | 1 - .../combo/layer-filter-1/native_posix_64.keymap | 1 - .../combo/multiple-timeouts/native_posix_64.keymap | 1 - .../overlapping-combos-0/native_posix_64.keymap | 1 - .../overlapping-combos-1/native_posix_64.keymap | 1 - .../overlapping-combos-2/native_posix_64.keymap | 1 - .../overlapping-combos-3/native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - app/tests/combo/press-release/native_posix_64.keymap | 1 - app/tests/combo/press-timeout/native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../combo/require-prior-idle/native_posix_64.keymap | 1 - .../slowrelease-disabled/native_posix_64.keymap | 1 - .../combo/slowrelease-enabled/native_posix_64.keymap | 1 - .../gresc/gresc-press-release/native_posix_64.keymap | 1 - .../gresc/gresc-two-instances/native_posix_64.keymap | 1 - .../balanced/6-retro-tap/native_posix_64.keymap | 2 -- .../balanced/7-positional/behavior_keymap.dtsi | 2 -- .../8-require-prior-idle/behavior_keymap.dtsi | 2 -- app/tests/hold-tap/balanced/behavior_keymap.dtsi | 2 -- .../balanced/many-nested/native_posix_64.keymap | 2 -- .../6-retro-tap/native_posix_64.keymap | 2 -- .../hold-preferred/7-positional/behavior_keymap.dtsi | 2 -- .../8-require-prior-idle/behavior_keymap.dtsi | 2 -- .../hold-tap/hold-preferred/behavior_keymap.dtsi | 2 -- .../6-nested-timeouts/native_posix_64.keymap | 3 --- .../tap-preferred/7-positional/behavior_keymap.dtsi | 2 -- .../8-require-prior-idle/behavior_keymap.dtsi | 2 -- .../hold-tap/tap-preferred/behavior_keymap.dtsi | 2 -- .../6-require-prior-idle/behavior_keymap.dtsi | 2 -- .../tap-unless-interrupted/behavior_keymap.dtsi | 2 -- app/tests/key-repeat/behavior_keymap.dtsi | 1 - app/tests/keypress/behavior_keymap.dtsi | 1 - app/tests/keytoggle/behavior_keymap.dtsi | 1 - .../keytoggle/kt-alt-tab/native_posix_64.keymap | 1 - .../keytoggle/kt-modded-alpha/native_posix_64.keymap | 1 - app/tests/macros/behavior_keymap.dtsi | 1 - .../native_posix_64.keymap | 2 -- .../mo-plus-modifier-macro/native_posix_64.keymap | 1 - .../place-holder-parameters/native_posix_64.keymap | 4 ---- .../native_posix_64.keymap | 2 -- .../native_posix_64.keymap | 2 -- .../native_posix_64.keymap | 2 -- .../3-unmasked-morph/native_posix_64.keymap | 2 -- app/tests/mod-morph/behavior_keymap.dtsi | 2 -- .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../kp-lctl-dn-lctl-up/native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../momentary-layer/1-normal/native_posix_64.keymap | 1 - .../2-early-key-release/native_posix_64.keymap | 1 - .../momentary-layer/3-covered/native_posix_64.keymap | 1 - .../momentary-layer/4-nested/native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - app/tests/momentary-layer/behavior_keymap.dtsi | 1 - app/tests/mouse-keys/mkp/native_posix.keymap | 1 - app/tests/mouse-keys/mkp/native_posix_64.keymap | 1 - app/tests/none/behavior_keymap.dtsi | 1 - .../native_posix_64.keymap | 1 - .../10-callum-mods/native_posix_64.keymap | 1 - .../sticky-keys/10-sl-sl-kp/native_posix_64.keymap | 1 - .../2-sl-dn-up-kcdn-kcup/native_posix_64.keymap | 1 - .../native_posix_64.keymap | 1 - .../8-lsk-osk-combination/native_posix_64.keymap | 1 - .../9-sk-dn-up-dn-up/native_posix_64.keymap | 1 - app/tests/sticky-keys/behavior_keymap.dtsi | 1 - app/tests/tap-dance/behavior_keymap.dtsi | 6 ------ app/tests/to-layer/behavior_keymap.dtsi | 1 - app/tests/toggle-layer/behavior_keymap.dtsi | 1 - app/tests/transparent/behavior_keymap.dtsi | 1 - app/tests/wpm/behavior_keymap.dtsi | 1 - 268 files changed, 525 deletions(-) diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index 1b85067ce13..6e15408a2cd 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -23,7 +23,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; input-gpios = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> @@ -40,7 +39,6 @@ left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&gpioa 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -48,7 +46,6 @@ }; mid_encoder: encoder_mid { compatible = "alps,ec11"; - label = "MID_ENCODER"; a-gpios = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -56,7 +53,6 @@ }; right_encoder: encoder_right { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; a-gpios = <&gpioa 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpiob 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -78,7 +74,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ @@ -117,7 +112,6 @@ pinctrl-names = "default"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -137,7 +131,6 @@ /* Set 6Kb of storage at the end of the 128Kb of flash */ storage_partition: partition@1e800 { - label = "storage"; reg = <0x0001e800 0x00001800>; }; }; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index b31a8f7fd23..408cca3be76 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -25,7 +25,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -38,7 +37,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 7>; output-ohms = <2000000>; full-ohms = <(2000000 + 806000)>; @@ -81,7 +79,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -97,11 +94,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -115,12 +110,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index 8a270250957..68d817ea9c7 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -32,7 +32,6 @@ left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -44,13 +43,11 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 806000)>; @@ -89,7 +86,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -105,11 +101,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -123,12 +117,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/bt60/bt60_v1.dts b/app/boards/arm/bt60/bt60_v1.dts index 0cfe184a090..4f66a0c20e3 100644 --- a/app/boards/arm/bt60/bt60_v1.dts +++ b/app/boards/arm/bt60/bt60_v1.dts @@ -81,7 +81,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/arm/bt60/bt60_v1_hs.dts b/app/boards/arm/bt60/bt60_v1_hs.dts index b24dee1e82b..155d626cc27 100644 --- a/app/boards/arm/bt60/bt60_v1_hs.dts +++ b/app/boards/arm/bt60/bt60_v1_hs.dts @@ -30,7 +30,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/arm/ckp/ckp.dtsi b/app/boards/arm/ckp/ckp.dtsi index 2cb4bcfea6c..6bbbbdd74fb 100644 --- a/app/boards/arm/ckp/ckp.dtsi +++ b/app/boards/arm/ckp/ckp.dtsi @@ -34,7 +34,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios @@ -74,7 +73,6 @@ encoder_1: encoder_1 { compatible = "alps,ec11"; - label = "ENCODER_ONE"; a-gpios = <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -83,7 +81,6 @@ encoder_2: encoder_2 { compatible = "alps,ec11"; - label = "ENCODER_TWO"; a-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -92,7 +89,6 @@ encoder_3: encoder_3 { compatible = "alps,ec11"; - label = "encoder_3"; a-gpios = <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -101,7 +97,6 @@ backlight: pwmleds { compatible = "pwm-leds"; - label = "Backlight LEDs"; pwm_led_0 { pwms = <&pwm0 0 10000 PWM_POLARITY_NORMAL>; }; @@ -111,13 +106,11 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "VBATT"; io-channels = <&adc 2>; output-ohms = <100000>; full-ohms = <(100000 + 100000)>; @@ -163,11 +156,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -181,12 +172,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; @@ -201,7 +190,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index 289c5e73711..c6f2b630cbe 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -80,7 +80,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -95,11 +94,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -113,12 +110,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts index 399a564ff89..6683b1b2408 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts @@ -15,7 +15,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -39,7 +38,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; }; @@ -88,7 +86,6 @@ fuelgauge: bq274xx@55 { compatible = "ti,bq274xx"; - label = "BATTERY"; reg = <0x55>; design-voltage = <3700>; //Battery Design Volatge in mV design-capacity = <180>; //Battery Design Capacity in mAh @@ -109,7 +106,6 @@ epd: il0323@0 { compatible = "gooddisplay,il0323"; reg = <0>; - label = "DISPLAY"; width = <80>; height = <128>; spi-max-frequency = <4000000>; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts index d5f6e588444..492c79fa108 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts @@ -15,7 +15,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -39,7 +38,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; }; @@ -96,7 +94,6 @@ fuelgauge: bq274xx@55 { compatible = "ti,bq274xx"; - label = "BATTERY"; reg = <0x55>; design-voltage = <3700>; //Battery Design Volatge in mV design-capacity = <180>; //Battery Design Capacity in mAh @@ -117,7 +114,6 @@ epd: il0323@0 { compatible = "gooddisplay,il0323"; reg = <0>; - label = "DISPLAY"; width = <80>; height = <128>; spi-max-frequency = <4000000>; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index 14d82e87558..dacb24c3a24 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -15,7 +15,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -39,13 +38,11 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 0>; output-ohms = <1960000>; full-ohms = <(1960000 + 810000)>; @@ -83,7 +80,6 @@ epd: il0323@0 { compatible = "gooddisplay,il0323"; reg = <0>; - label = "DISPLAY"; width = <80>; height = <128>; spi-max-frequency = <4000000>; diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts index 4d444cae4f8..f1baea42656 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -15,7 +15,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -39,13 +38,11 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 0>; output-ohms = <1960000>; full-ohms = <(1960000 + 810000)>; @@ -90,7 +87,6 @@ epd: il0323@0 { compatible = "gooddisplay,il0323"; reg = <0>; - label = "DISPLAY"; width = <80>; height = <128>; spi-max-frequency = <4000000>; diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts index 14be837d9ee..25c95ddf8ee 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts @@ -36,7 +36,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC( kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -70,7 +69,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC( status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -86,7 +84,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC( /* Set 6Kb of storage at the end of the 256Kb of flash */ storage_partition: partition@3e800 { - label = "storage"; reg = <0x0003e800 0x00001800>; }; }; diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 618a5591407..1b9408d2d9b 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -40,7 +40,6 @@ kscan: kscan { compatible = "zmk,kscan-composite"; - label = "KSCAN"; rows = <4>; columns = <10>; @@ -56,7 +55,6 @@ kscan_left: kscan_left { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_LEFT"; diode-direction = "col2row"; @@ -77,7 +75,6 @@ kscan_right: kscan_right { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_RIGHT"; diode-direction = "row2col"; @@ -117,7 +114,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -156,7 +152,6 @@ /* Set 6Kb of storage at the end of the 128Kb of flash */ storage_partition: partition@3e800 { - label = "storage"; reg = <0x0001e800 0x00001800>; }; }; diff --git a/app/boards/arm/glove80/glove80.dtsi b/app/boards/arm/glove80/glove80.dtsi index f3f58cf7b42..3e3a6233b8d 100644 --- a/app/boards/arm/glove80/glove80.dtsi +++ b/app/boards/arm/glove80/glove80.dtsi @@ -34,7 +34,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; debounce-press-ms = <4>; debounce-release-ms = <20>; @@ -62,7 +61,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -77,11 +75,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -95,12 +91,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/glove80/glove80.keymap b/app/boards/arm/glove80/glove80.keymap index 6c920ca1dcd..60129bd94e9 100644 --- a/app/boards/arm/glove80/glove80.keymap +++ b/app/boards/arm/glove80/glove80.keymap @@ -22,7 +22,6 @@ // Configure it as a tap dance, so the first tap (or hold) is a &mo and the second tap is a &to layer_td: tap_dance_0 { compatible = "zmk,behavior-tap-dance"; - label = "LAYER_TAP_DANCE"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&mo LOWER>, <&to LOWER>; @@ -31,7 +30,6 @@ macros { bt_0: bt_profile_macro_0 { - label = "BT_0"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings @@ -40,7 +38,6 @@ }; bt_1: bt_profile_macro_1 { - label = "BT_1"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings @@ -49,7 +46,6 @@ }; bt_2: bt_profile_macro_2 { - label = "BT_2"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings @@ -58,7 +54,6 @@ }; bt_3: bt_profile_macro_3 { - label = "BT_3"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings diff --git a/app/boards/arm/glove80/glove80_lh.dts b/app/boards/arm/glove80/glove80_lh.dts index b00fa9806e6..5ef54207127 100644 --- a/app/boards/arm/glove80/glove80_lh.dts +++ b/app/boards/arm/glove80/glove80_lh.dts @@ -21,10 +21,8 @@ back_led_backlight: pwmleds { compatible = "pwm-leds"; - label = "BACK LED"; pwm_led_0 { pwms = <&pwm0 0 PWM_USEC(20) PWM_POLARITY_NORMAL>; - label = "Back LED configured as backlight"; }; }; @@ -37,7 +35,6 @@ vbatt: vbatt { compatible = "zmk,battery-nrf-vddh"; - label = "BATTERY"; }; }; @@ -51,7 +48,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812C-2020"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/arm/glove80/glove80_rh.dts b/app/boards/arm/glove80/glove80_rh.dts index e9fd52d5e3f..6f108d74763 100644 --- a/app/boards/arm/glove80/glove80_rh.dts +++ b/app/boards/arm/glove80/glove80_rh.dts @@ -22,10 +22,8 @@ back_led_backlight: pwmleds { compatible = "pwm-leds"; - label = "BACK LED"; pwm_led_0 { pwms = <&pwm0 0 PWM_USEC(20) PWM_POLARITY_NORMAL>; - label = "Back LED configured as backlight"; }; }; @@ -38,7 +36,6 @@ vbatt: vbatt { compatible = "zmk,battery-nrf-vddh"; - label = "BATTERY"; }; }; @@ -52,7 +49,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812C-2020"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts index 261ffbf4850..ae2f9521071 100644 --- a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts @@ -53,7 +53,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,8) RC(4,9) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -93,7 +92,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,8) RC(4,9) /* Reserved memory for the second stage bootloader */ second_stage_bootloader: partition@0 { - label = "second_stage_bootloader"; reg = <0x00000000 0x100>; read-only; }; @@ -103,7 +101,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,8) RC(4,9) * size is 16MB minus the 0x100 bytes taken by the bootloader. */ code_partition: partition@100 { - label = "code"; reg = <0x100 (DT_SIZE_M(16) - 0x100)>; read-only; }; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index 0da2e441cde..05ec72dfcda 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -25,7 +25,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -38,7 +37,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 1>; output-ohms = <10000000>; full-ohms = <(10000000 + 4000000)>; @@ -80,7 +78,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -96,11 +93,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -114,12 +109,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index ea72945a0ba..63b9685d3ca 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -42,7 +42,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -74,7 +73,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -86,7 +84,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 806000)>; @@ -118,7 +115,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ @@ -136,7 +132,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -151,12 +146,10 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R #size-cells = <1>; sd_partition: partition@0 { - label = "mbr"; reg = <0x00000000 0x00001000>; }; code_partition: partition@1000 { - label = "code_partition"; reg = <0x00001000 0x000d3000>; }; @@ -170,12 +163,10 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R * if enabled. */ storage_partition: partition@d4000 { - label = "storage"; reg = <0x000d4000 0x00020000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index 8fec5004f78..06be88e1c51 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -20,7 +20,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 806000)>; diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index 0c0a3823054..81f10906b92 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -23,7 +23,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; }; @@ -63,7 +62,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -79,11 +77,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -97,12 +93,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nice_nano/nice_nano_v2.dts b/app/boards/arm/nice_nano/nice_nano_v2.dts index 429b339ecdd..c4f7a821c04 100644 --- a/app/boards/arm/nice_nano/nice_nano_v2.dts +++ b/app/boards/arm/nice_nano/nice_nano_v2.dts @@ -21,6 +21,5 @@ vbatt: vbatt { compatible = "zmk,battery-nrf-vddh"; - label = "BATTERY"; }; }; diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts index 253e6b77d56..85e9ce2107f 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts @@ -23,21 +23,17 @@ compatible = "gpio-leds"; red_led: led_0 { gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>; - label = "Red LED"; }; green_led: led_1 { gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>; - label = "Green LED"; }; blue_led: led_2 { gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 0>; output-ohms = <1000000>; full-ohms = <(1000000 + 1000000)>; @@ -66,7 +62,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -82,11 +77,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -100,12 +93,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 7d2f88c47d9..c0c02ee9e34 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -24,7 +24,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -66,7 +65,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -82,11 +80,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -100,12 +96,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index 88ef21b6349..df3b224bc49 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -24,7 +24,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -66,7 +65,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -82,11 +80,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -100,12 +96,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index e71c5c4f41a..f5ae81c9545 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -25,7 +25,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -37,7 +36,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 820000)>; @@ -79,7 +77,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -95,11 +92,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -113,12 +108,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index c75a44b1cf0..d6c88692d95 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -25,7 +25,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -37,7 +36,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 820000)>; @@ -79,7 +77,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -95,11 +92,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x00046000>; }; @@ -113,12 +108,10 @@ * if enabled. */ storage_partition: partition@6c000 { - label = "storage"; reg = <0x0006c000 0x00008000>; }; boot_partition: partition@74000 { - label = "adafruit_boot"; reg = <0x00074000 0x0000c000>; }; }; diff --git a/app/boards/arm/pillbug/pillbug.dts b/app/boards/arm/pillbug/pillbug.dts index 6d9337aa5d2..c30d306e275 100644 --- a/app/boards/arm/pillbug/pillbug.dts +++ b/app/boards/arm/pillbug/pillbug.dts @@ -26,7 +26,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 20 GPIO_ACTIVE_LOW>; - label = "Blue LED"; }; }; @@ -39,7 +38,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 820000)>; @@ -89,7 +87,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -105,12 +102,10 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "mbr"; reg = <0x00000000 0x00001000>; }; code_partition: partition@1000 { - label = "code_partition"; reg = <0x00001000 0x000d3000>; }; @@ -124,12 +119,10 @@ * if enabled. */ storage_partition: partition@d4000 { - label = "storage"; reg = <0x000d4000 0x00020000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index 5fdd2c21aee..0951d618272 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -23,7 +23,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> @@ -89,7 +88,6 @@ layout_2x2u_transform: status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -125,7 +123,6 @@ layout_2x2u_transform: /* Set 6Kb of storage at the end of the 256Kb of flash */ storage_partition: partition@3e800 { - label = "storage"; reg = <0x0003e800 0x00001800>; }; }; diff --git a/app/boards/arm/preonic/preonic_rev3.dts b/app/boards/arm/preonic/preonic_rev3.dts index c19b131926b..249c8f3c6ed 100644 --- a/app/boards/arm/preonic/preonic_rev3.dts +++ b/app/boards/arm/preonic/preonic_rev3.dts @@ -23,7 +23,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> @@ -96,7 +95,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -132,7 +130,6 @@ cdc_acm_uart: cdc_acm_uart { /* Set 6Kb of storage at the end of the 256Kb of flash */ storage_partition: partition@3e800 { - label = "storage"; reg = <0x0003e800 0x00001800>; }; }; diff --git a/app/boards/arm/proton_c/proton_c.dts b/app/boards/arm/proton_c/proton_c.dts index b5a490eeab6..3aad62c8f30 100644 --- a/app/boards/arm/proton_c/proton_c.dts +++ b/app/boards/arm/proton_c/proton_c.dts @@ -27,7 +27,6 @@ compatible = "gpio-leds"; led: led_0 { gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; - label = "User LED"; }; }; }; @@ -73,7 +72,6 @@ status = "okay"; cdc_acm_uart0: cdc_acm_uart0 { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -93,7 +91,6 @@ /* Set 6Kb of storage at the end of the 256Kb of flash */ storage_partition: partition@3e800 { - label = "storage"; reg = <0x0003e800 0x00001800>; }; }; diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.dts b/app/boards/arm/puchi_ble/puchi_ble_v1.dts index 1198b762d45..05aba8d3780 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1.dts +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.dts @@ -25,7 +25,6 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; @@ -37,7 +36,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 820000)>; @@ -78,7 +76,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -94,11 +91,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -112,12 +107,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index 6eb9e2a561a..aff09460853 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -37,7 +37,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -66,13 +65,11 @@ compatible = "gpio-leds"; blue_led: led_0 { gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; }; }; vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 2>; output-ohms = <2000000>; full-ohms = <(2000000 + 820000)>; @@ -99,7 +96,6 @@ status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; @@ -114,12 +110,10 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "mbr"; reg = <0x00000000 0x00001000>; }; code_partition: partition@1000 { - label = "code_partition"; reg = <0x00001000 0x000d3000>; }; @@ -133,12 +127,10 @@ * if enabled. */ storage_partition: partition@d4000 { - label = "storage"; reg = <0x000d4000 0x00020000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; diff --git a/app/boards/native_posix.overlay b/app/boards/native_posix.overlay index f8a8f700348..d5ebcf18454 100644 --- a/app/boards/native_posix.overlay +++ b/app/boards/native_posix.overlay @@ -9,7 +9,6 @@ kscan: kscan { compatible = "zmk,kscan-mock"; - label = "KSCAN_MOCK"; rows = <2>; columns = <2>; diff --git a/app/boards/native_posix_64.overlay b/app/boards/native_posix_64.overlay index 74d6b7d8708..d0526ca38eb 100644 --- a/app/boards/native_posix_64.overlay +++ b/app/boards/native_posix_64.overlay @@ -10,7 +10,6 @@ kscan: kscan { compatible = "zmk,kscan-mock"; - label = "KSCAN_MOCK"; rows = <2>; columns = <2>; diff --git a/app/boards/seeeduino_xiao.overlay b/app/boards/seeeduino_xiao.overlay index a2ddaea4eaf..285ee4de332 100644 --- a/app/boards/seeeduino_xiao.overlay +++ b/app/boards/seeeduino_xiao.overlay @@ -13,7 +13,6 @@ &usb0 { cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index e6a5b62c738..d2ffbe461cb 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -13,7 +13,6 @@ vbatt: vbatt { compatible = "zmk,battery-voltage-divider"; - label = "BATTERY"; io-channels = <&adc 7>; power-gpios = <&gpio0 14 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; output-ohms = <510000>; @@ -28,7 +27,6 @@ &usbd { cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; diff --git a/app/boards/shields/a_dux/a_dux.dtsi b/app/boards/shields/a_dux/a_dux.dtsi index 28156f42e82..c13f3dd133a 100644 --- a/app/boards/shields/a_dux/a_dux.dtsi +++ b/app/boards/shields/a_dux/a_dux.dtsi @@ -27,7 +27,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; input-gpios = <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, diff --git a/app/boards/shields/bat43/bat43.overlay b/app/boards/shields/bat43/bat43.overlay index fc906e0f1e7..7ebe653a010 100644 --- a/app/boards/shields/bat43/bat43.overlay +++ b/app/boards/shields/bat43/bat43.overlay @@ -28,7 +28,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/bfo9000/bfo9000.dtsi b/app/boards/shields/bfo9000/bfo9000.dtsi index c5547920658..d9d09a8320c 100644 --- a/app/boards/shields/bfo9000/bfo9000.dtsi +++ b/app/boards/shields/bfo9000/bfo9000.dtsi @@ -28,7 +28,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/boardsource3x4/boardsource3x4.overlay b/app/boards/shields/boardsource3x4/boardsource3x4.overlay index afbc9abf2af..389f5b7ab7c 100644 --- a/app/boards/shields/boardsource3x4/boardsource3x4.overlay +++ b/app/boards/shields/boardsource3x4/boardsource3x4.overlay @@ -13,7 +13,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.overlay b/app/boards/shields/boardsource5x12/boardsource5x12.overlay index 080a2392919..9a721d0c4aa 100644 --- a/app/boards/shields/boardsource5x12/boardsource5x12.overlay +++ b/app/boards/shields/boardsource5x12/boardsource5x12.overlay @@ -13,7 +13,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/chalice/boards/nice_nano.overlay b/app/boards/shields/chalice/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/chalice/boards/nice_nano.overlay +++ b/app/boards/shields/chalice/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/chalice/boards/nice_nano_v2.overlay b/app/boards/shields/chalice/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/chalice/boards/nice_nano_v2.overlay +++ b/app/boards/shields/chalice/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/chalice/chalice.overlay b/app/boards/shields/chalice/chalice.overlay index 6778588bf13..85c9b1ed657 100644 --- a/app/boards/shields/chalice/chalice.overlay +++ b/app/boards/shields/chalice/chalice.overlay @@ -44,7 +44,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/clog/clog.dtsi b/app/boards/shields/clog/clog.dtsi index 40e9a39fd02..bcc08c71bea 100644 --- a/app/boards/shields/clog/clog.dtsi +++ b/app/boards/shields/clog/clog.dtsi @@ -26,7 +26,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; input-gpios = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/clueboard_california/clueboard_california.overlay b/app/boards/shields/clueboard_california/clueboard_california.overlay index dfa5d9cf926..8cea791e2c0 100644 --- a/app/boards/shields/clueboard_california/clueboard_california.overlay +++ b/app/boards/shields/clueboard_california/clueboard_california.overlay @@ -12,8 +12,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; - input-gpios = <&gpioa 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&gpioa 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/contra/contra.overlay b/app/boards/shields/contra/contra.overlay index 21e19425b29..0ac042d6357 100644 --- a/app/boards/shields/contra/contra.overlay +++ b/app/boards/shields/contra/contra.overlay @@ -11,7 +11,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/corne/boards/nice_nano.overlay b/app/boards/shields/corne/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/corne/boards/nice_nano.overlay +++ b/app/boards/shields/corne/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/corne/boards/nice_nano_v2.overlay b/app/boards/shields/corne/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/corne/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index 0e9eddf967f..5058f67a617 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -47,7 +47,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -68,7 +67,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/cradio/cradio.dtsi b/app/boards/shields/cradio/cradio.dtsi index 57dcfd4b271..3f7ed01cc2c 100644 --- a/app/boards/shields/cradio/cradio.dtsi +++ b/app/boards/shields/cradio/cradio.dtsi @@ -27,7 +27,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; input-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/crbn/crbn.overlay b/app/boards/shields/crbn/crbn.overlay index 817a83d078b..5cc9ec6c1d5 100644 --- a/app/boards/shields/crbn/crbn.overlay +++ b/app/boards/shields/crbn/crbn.overlay @@ -13,7 +13,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios @@ -41,7 +40,6 @@ encoder: encoder { compatible = "alps,ec11"; - label = "ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <2>; diff --git a/app/boards/shields/eek/eek.overlay b/app/boards/shields/eek/eek.overlay index f53c6b5bb87..8ec6714e033 100644 --- a/app/boards/shields/eek/eek.overlay +++ b/app/boards/shields/eek/eek.overlay @@ -26,7 +26,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/elephant42/boards/nice_nano.overlay b/app/boards/shields/elephant42/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/elephant42/boards/nice_nano.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/elephant42/boards/nice_nano_v2.overlay +++ b/app/boards/shields/elephant42/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi index b0e9a32ebc4..d364bef9a09 100644 --- a/app/boards/shields/elephant42/elephant42.dtsi +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -26,7 +26,6 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -45,7 +44,6 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/ergodash/ergodash.dtsi b/app/boards/shields/ergodash/ergodash.dtsi index d109fa66ec9..7b9ac0125c2 100644 --- a/app/boards/shields/ergodash/ergodash.dtsi +++ b/app/boards/shields/ergodash/ergodash.dtsi @@ -35,7 +35,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,13) RC(4,12 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/eternal_keypad/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi index 6319d9e03a2..14e877e54f5 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi +++ b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi @@ -14,7 +14,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; diff --git a/app/boards/shields/fourier/fourier.dtsi b/app/boards/shields/fourier/fourier.dtsi index 0902d6878ef..fdd54901d82 100644 --- a/app/boards/shields/fourier/fourier.dtsi +++ b/app/boards/shields/fourier/fourier.dtsi @@ -30,7 +30,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) /**/ RC(3,6) RC(3,9 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/helix/boards/nice_nano.overlay b/app/boards/shields/helix/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/helix/boards/nice_nano.overlay +++ b/app/boards/shields/helix/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/helix/boards/nice_nano_v2.overlay b/app/boards/shields/helix/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/helix/boards/nice_nano_v2.overlay +++ b/app/boards/shields/helix/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/helix/helix.dtsi b/app/boards/shields/helix/helix.dtsi index bbaec636080..2ee68e0fab7 100644 --- a/app/boards/shields/helix/helix.dtsi +++ b/app/boards/shields/helix/helix.dtsi @@ -32,7 +32,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay index 1b40acba7c4..661e9489836 100644 --- a/app/boards/shields/hummingbird/hummingbird.overlay +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -29,7 +29,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "row2col"; col-gpios diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi index a0caf1ad56e..8c5bb447d81 100644 --- a/app/boards/shields/iris/iris.dtsi +++ b/app/boards/shields/iris/iris.dtsi @@ -32,7 +32,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/jian/jian.dtsi b/app/boards/shields/jian/jian.dtsi index 8e772791689..1962ae1536a 100644 --- a/app/boards/shields/jian/jian.dtsi +++ b/app/boards/shields/jian/jian.dtsi @@ -62,7 +62,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/jiran/jiran.dtsi b/app/boards/shields/jiran/jiran.dtsi index b7e74c27c63..55ba2cb0776 100644 --- a/app/boards/shields/jiran/jiran.dtsi +++ b/app/boards/shields/jiran/jiran.dtsi @@ -67,7 +67,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/jorne/boards/nice_nano.overlay b/app/boards/shields/jorne/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/jorne/boards/nice_nano.overlay +++ b/app/boards/shields/jorne/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/jorne/boards/nice_nano_v2.overlay b/app/boards/shields/jorne/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/jorne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/jorne/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index 1d12b85c90f..e5300c86263 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -63,7 +63,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -84,7 +83,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/knob_goblin/knob_goblin.overlay b/app/boards/shields/knob_goblin/knob_goblin.overlay index 03051ce5820..53372738773 100644 --- a/app/boards/shields/knob_goblin/knob_goblin.overlay +++ b/app/boards/shields/knob_goblin/knob_goblin.overlay @@ -14,7 +14,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -36,7 +35,6 @@ top_encoder: encoder_top { compatible = "alps,ec11"; - label = "TOP_ENCODER"; a-gpios = <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -45,7 +43,6 @@ bottom_encoder: encoder_bottom { compatible = "alps,ec11"; - label = "BOTTOM_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -66,7 +63,6 @@ oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/kyria/boards/nice_nano.overlay b/app/boards/shields/kyria/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/kyria/boards/nice_nano.overlay +++ b/app/boards/shields/kyria/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/kyria/boards/nice_nano_v2.overlay b/app/boards/shields/kyria/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/kyria/boards/nice_nano_v2.overlay +++ b/app/boards/shields/kyria/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/kyria/boards/nrfmicro_11.overlay b/app/boards/shields/kyria/boards/nrfmicro_11.overlay index 8754dec63bf..dba8377ec2a 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay index 8754dec63bf..dba8377ec2a 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/kyria/boards/nrfmicro_13.overlay b/app/boards/shields/kyria/boards/nrfmicro_13.overlay index 8754dec63bf..dba8377ec2a 100644 --- a/app/boards/shields/kyria/boards/nrfmicro_13.overlay +++ b/app/boards/shields/kyria/boards/nrfmicro_13.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index 1056794d584..f68b743e742 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -15,21 +15,18 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; }; left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; steps = <80>; status = "disabled"; }; right_encoder: encoder_right { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; steps = <80>; status = "disabled"; }; @@ -49,7 +46,6 @@ oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <64>; segment-offset = <0>; diff --git a/app/boards/shields/leeloo/boards/nice_nano_v2.overlay b/app/boards/shields/leeloo/boards/nice_nano_v2.overlay index 5c451b73eaf..e95fac9dcdb 100644 --- a/app/boards/shields/leeloo/boards/nice_nano_v2.overlay +++ b/app/boards/shields/leeloo/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi index ef775cfbe61..7c4ab22d8c1 100644 --- a/app/boards/shields/leeloo/leeloo_common.dtsi +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -32,7 +32,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; @@ -47,7 +46,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) left_encoder: left_encoder { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <120>; @@ -56,7 +54,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) right_encoder: right_encoder { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <120>; @@ -77,7 +74,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay b/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay index be5dc54ec29..ba29cb2c06b 100644 --- a/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay +++ b/app/boards/shields/leeloo_micro/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi index ab68a6153f1..c07c5093cd2 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -31,7 +31,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; @@ -45,7 +44,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) left_encoder: left_encoder { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; status = "disabled"; @@ -54,7 +52,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) right_encoder: right_encoder { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; status = "disabled"; @@ -75,7 +72,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/lily58/boards/nice_nano.overlay b/app/boards/shields/lily58/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/lily58/boards/nice_nano.overlay +++ b/app/boards/shields/lily58/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/lily58/boards/nice_nano_v2.overlay b/app/boards/shields/lily58/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/lily58/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index eb427a581ba..bd6d04e6d67 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -33,7 +33,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -48,7 +47,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -67,7 +65,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index 8b1c66f98df..c58e9404265 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -33,7 +33,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -47,7 +46,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -56,7 +54,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 right_encoder: encoder_right { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -76,7 +73,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/m60/m60.overlay b/app/boards/shields/m60/m60.overlay index a2ab259321b..7757abefe62 100644 --- a/app/boards/shields/m60/m60.overlay +++ b/app/boards/shields/m60/m60.overlay @@ -14,7 +14,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/microdox/boards/nice_nano.overlay b/app/boards/shields/microdox/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/microdox/boards/nice_nano.overlay +++ b/app/boards/shields/microdox/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/microdox/boards/nice_nano_v2.overlay b/app/boards/shields/microdox/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/microdox/boards/nice_nano_v2.overlay +++ b/app/boards/shields/microdox/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index 57247e68159..4869cfeabbd 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -9,7 +9,6 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> diff --git a/app/boards/shields/microdox/microdox_common.dtsi b/app/boards/shields/microdox/microdox_common.dtsi index 0460e012287..1a762aae6de 100644 --- a/app/boards/shields/microdox/microdox_common.dtsi +++ b/app/boards/shields/microdox/microdox_common.dtsi @@ -38,7 +38,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/microdox/microdox_v2.dtsi b/app/boards/shields/microdox/microdox_v2.dtsi index 93fa44459db..6eb7efa58f4 100644 --- a/app/boards/shields/microdox/microdox_v2.dtsi +++ b/app/boards/shields/microdox/microdox_v2.dtsi @@ -9,7 +9,6 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; }; }; diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay index ac6c51d5c90..be8ff5290fb 100644 --- a/app/boards/shields/murphpad/boards/nice_nano.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay index ac6c51d5c90..be8ff5290fb 100644 --- a/app/boards/shields/murphpad/boards/nice_nano_v2.overlay +++ b/app/boards/shields/murphpad/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index f175c55e1c0..f098ec8b017 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -14,7 +14,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -36,7 +35,6 @@ encoder_1: encoder_1 { compatible = "alps,ec11"; - label = "Encoder 1"; a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -45,7 +43,6 @@ encoder_2: encoder_2 { compatible = "alps,ec11"; - label = "Encoder 2"; a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -60,7 +57,6 @@ oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/naked60/naked60.overlay b/app/boards/shields/naked60/naked60.overlay index 2260a4afc9f..843c867f109 100644 --- a/app/boards/shields/naked60/naked60.overlay +++ b/app/boards/shields/naked60/naked60.overlay @@ -11,7 +11,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/nibble/boards/nice_nano.overlay b/app/boards/shields/nibble/boards/nice_nano.overlay index 45c552633ff..3849a8fb1a2 100644 --- a/app/boards/shields/nibble/boards/nice_nano.overlay +++ b/app/boards/shields/nibble/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/nibble/boards/nice_nano_v2.overlay b/app/boards/shields/nibble/boards/nice_nano_v2.overlay index 45c552633ff..3849a8fb1a2 100644 --- a/app/boards/shields/nibble/boards/nice_nano_v2.overlay +++ b/app/boards/shields/nibble/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index 43be6c766fc..8b5a90dac7b 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -15,7 +15,6 @@ encoder_1: encoder_1 { compatible = "alps,ec11"; - label = "Encoder 1"; a-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -24,7 +23,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-demux"; - label = "KSCAN"; polling-interval-msec = <25>; input-gpios = <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> @@ -62,7 +60,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,6) RC(4,9) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/nice_view/nice_view.overlay b/app/boards/shields/nice_view/nice_view.overlay index 49ce0f23ad3..e1965569f56 100644 --- a/app/boards/shields/nice_view/nice_view.overlay +++ b/app/boards/shields/nice_view/nice_view.overlay @@ -8,7 +8,6 @@ status = "okay"; nice_view: ls0xx@0 { compatible = "sharp,ls0xx"; - label = "DISPLAY"; spi-max-frequency = <1000000>; reg = <0>; width = <160>; diff --git a/app/boards/shields/osprette/osprette.overlay b/app/boards/shields/osprette/osprette.overlay index 546df783760..e972e4daa42 100644 --- a/app/boards/shields/osprette/osprette.overlay +++ b/app/boards/shields/osprette/osprette.overlay @@ -26,7 +26,6 @@ RC(0,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "row2col"; col-gpios diff --git a/app/boards/shields/pancake/pancake.overlay b/app/boards/shields/pancake/pancake.overlay index 6fae463f424..0ceb2d5c6f7 100644 --- a/app/boards/shields/pancake/pancake.overlay +++ b/app/boards/shields/pancake/pancake.overlay @@ -11,7 +11,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay index 76ee5ba7673..814e5e1a0a1 100644 --- a/app/boards/shields/qaz/qaz.overlay +++ b/app/boards/shields/qaz/qaz.overlay @@ -27,7 +27,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/quefrency/quefrency_left.overlay b/app/boards/shields/quefrency/quefrency_left.overlay index a0f483efae9..cf7958410c6 100644 --- a/app/boards/shields/quefrency/quefrency_left.overlay +++ b/app/boards/shields/quefrency/quefrency_left.overlay @@ -12,7 +12,6 @@ */ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; diff --git a/app/boards/shields/quefrency/quefrency_right.overlay b/app/boards/shields/quefrency/quefrency_right.overlay index bf97d34b761..446a614a229 100644 --- a/app/boards/shields/quefrency/quefrency_right.overlay +++ b/app/boards/shields/quefrency/quefrency_right.overlay @@ -17,7 +17,6 @@ */ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; diff --git a/app/boards/shields/redox/boards/nice_nano.overlay b/app/boards/shields/redox/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/redox/boards/nice_nano.overlay +++ b/app/boards/shields/redox/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/redox/boards/nice_nano_v2.overlay b/app/boards/shields/redox/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/redox/boards/nice_nano_v2.overlay +++ b/app/boards/shields/redox/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/redox/redox.dtsi b/app/boards/shields/redox/redox.dtsi index d2d72d0ff1f..bf5ec9e843a 100644 --- a/app/boards/shields/redox/redox.dtsi +++ b/app/boards/shields/redox/redox.dtsi @@ -32,7 +32,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/reviung34/boards/nice_nano_v2.overlay b/app/boards/shields/reviung34/boards/nice_nano_v2.overlay index b8d21398448..d14b95db76b 100644 --- a/app/boards/shields/reviung34/boards/nice_nano_v2.overlay +++ b/app/boards/shields/reviung34/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/reviung34/reviung34.overlay b/app/boards/shields/reviung34/reviung34.overlay index 46d85996738..6b1eb16f0fb 100644 --- a/app/boards/shields/reviung34/reviung34.overlay +++ b/app/boards/shields/reviung34/reviung34.overlay @@ -38,7 +38,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(3,7) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/reviung41/boards/nice_nano.overlay b/app/boards/shields/reviung41/boards/nice_nano.overlay index 8590149e2bd..59180064278 100644 --- a/app/boards/shields/reviung41/boards/nice_nano.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay index 8590149e2bd..59180064278 100644 --- a/app/boards/shields/reviung41/boards/nice_nano_v2.overlay +++ b/app/boards/shields/reviung41/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/reviung41/reviung41.overlay b/app/boards/shields/reviung41/reviung41.overlay index 55900cc9d47..0aecf61959d 100644 --- a/app/boards/shields/reviung41/reviung41.overlay +++ b/app/boards/shields/reviung41/reviung41.overlay @@ -27,7 +27,6 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/reviung5/reviung5.overlay b/app/boards/shields/reviung5/reviung5.overlay index 8b885245485..b21a634a1b7 100644 --- a/app/boards/shields/reviung5/reviung5.overlay +++ b/app/boards/shields/reviung5/reviung5.overlay @@ -22,7 +22,6 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios @@ -40,7 +39,6 @@ encoder: encoder { compatible = "alps,ec11"; - label = "encoder"; a-gpios = <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; diff --git a/app/boards/shields/reviung53/boards/nice_nano.overlay b/app/boards/shields/reviung53/boards/nice_nano.overlay index 4df91903c68..24905ac2e91 100644 --- a/app/boards/shields/reviung53/boards/nice_nano.overlay +++ b/app/boards/shields/reviung53/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/reviung53/boards/nice_nano_v2.overlay b/app/boards/shields/reviung53/boards/nice_nano_v2.overlay index 4df91903c68..24905ac2e91 100644 --- a/app/boards/shields/reviung53/boards/nice_nano_v2.overlay +++ b/app/boards/shields/reviung53/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/reviung53/reviung53.overlay b/app/boards/shields/reviung53/reviung53.overlay index 213b3b81c72..8c11c061de2 100644 --- a/app/boards/shields/reviung53/reviung53.overlay +++ b/app/boards/shields/reviung53/reviung53.overlay @@ -28,7 +28,6 @@ RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index 480d3f84650..3d99e51bfe9 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -13,7 +13,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/romac_plus/boards/nice_nano.overlay b/app/boards/shields/romac_plus/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay +++ b/app/boards/shields/romac_plus/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/romac_plus/romac_plus.dtsi b/app/boards/shields/romac_plus/romac_plus.dtsi index 5324174b54f..12fd4387c90 100644 --- a/app/boards/shields/romac_plus/romac_plus.dtsi +++ b/app/boards/shields/romac_plus/romac_plus.dtsi @@ -27,7 +27,6 @@ RC(3,0) RC(3,1) RC(3,2) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -40,7 +39,6 @@ RC(3,0) RC(3,1) RC(3,2) left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; diff --git a/app/boards/shields/romac_plus/romac_plus.overlay b/app/boards/shields/romac_plus/romac_plus.overlay index 2308e284c7d..229b4a2cfe8 100644 --- a/app/boards/shields/romac_plus/romac_plus.overlay +++ b/app/boards/shields/romac_plus/romac_plus.overlay @@ -13,7 +13,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; diff --git a/app/boards/shields/settings_reset/settings_reset.overlay b/app/boards/shields/settings_reset/settings_reset.overlay index 48a5f223b65..1c3b7145b24 100644 --- a/app/boards/shields/settings_reset/settings_reset.overlay +++ b/app/boards/shields/settings_reset/settings_reset.overlay @@ -13,7 +13,6 @@ kscan0: kscan { compatible = "zmk,kscan-mock"; - label = "KSCAN"; columns = <1>; rows = <0>; diff --git a/app/boards/shields/snap/boards/nice_nano.overlay b/app/boards/shields/snap/boards/nice_nano.overlay index 1a51eb16736..924151c719f 100644 --- a/app/boards/shields/snap/boards/nice_nano.overlay +++ b/app/boards/shields/snap/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/snap/boards/nice_nano_v2.overlay b/app/boards/shields/snap/boards/nice_nano_v2.overlay index 1a51eb16736..924151c719f 100644 --- a/app/boards/shields/snap/boards/nice_nano_v2.overlay +++ b/app/boards/shields/snap/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi index 7523f35b06c..ef466723b9e 100644 --- a/app/boards/shields/snap/snap.dtsi +++ b/app/boards/shields/snap/snap.dtsi @@ -15,14 +15,12 @@ left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; steps = <80>; status = "disabled"; }; right_encoder: encoder_right { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; steps = <80>; status = "disabled"; }; @@ -51,7 +49,6 @@ RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,2) RC(5,0) RC(5,15) kscan_composite: kscan { compatible = "zmk,kscan-composite"; - label = "KSCAN"; rows = <6>; columns = <17>; @@ -62,7 +59,6 @@ RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,2) RC(5,0) RC(5,15) kscan_demux: kscan_demux { compatible = "zmk,kscan-gpio-demux"; - label = "DEMUX"; polling-interval-msec = <25>; }; }; @@ -73,7 +69,6 @@ RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,2) RC(5,0) RC(5,15) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/snap/snap_right.overlay b/app/boards/shields/snap/snap_right.overlay index ad04ae24057..b303316a906 100644 --- a/app/boards/shields/snap/snap_right.overlay +++ b/app/boards/shields/snap/snap_right.overlay @@ -9,7 +9,6 @@ / { kscan_direct: kscan_direct { compatible = "zmk,kscan-gpio-direct"; - label = "DIRECT"; input-gpios = <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> ; diff --git a/app/boards/shields/sofle/boards/nice_nano.overlay b/app/boards/shields/sofle/boards/nice_nano.overlay index 336be4b0d96..f00f59f4397 100644 --- a/app/boards/shields/sofle/boards/nice_nano.overlay +++ b/app/boards/shields/sofle/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/sofle/boards/nice_nano_v2.overlay b/app/boards/shields/sofle/boards/nice_nano_v2.overlay index 336be4b0d96..f00f59f4397 100644 --- a/app/boards/shields/sofle/boards/nice_nano_v2.overlay +++ b/app/boards/shields/sofle/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/sofle/boards/nrfmicro_11.overlay b/app/boards/shields/sofle/boards/nrfmicro_11.overlay index 336be4b0d96..f00f59f4397 100644 --- a/app/boards/shields/sofle/boards/nrfmicro_11.overlay +++ b/app/boards/shields/sofle/boards/nrfmicro_11.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/sofle/boards/nrfmicro_13.overlay b/app/boards/shields/sofle/boards/nrfmicro_13.overlay index 336be4b0d96..f00f59f4397 100644 --- a/app/boards/shields/sofle/boards/nrfmicro_13.overlay +++ b/app/boards/shields/sofle/boards/nrfmicro_13.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 4917ca321ed..c9bf5c8eb37 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -33,7 +33,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -47,7 +46,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -56,7 +54,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) right_encoder: encoder_right { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -76,7 +73,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_corne/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi index 3eefdc6aeed..7911f151814 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi @@ -47,7 +47,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 left_encoder: left_encoder { compatible = "alps,ec11"; - label = "L_ENCODER"; steps = <80>; status = "disabled"; @@ -57,7 +56,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 right_encoder: right_encoder { compatible = "alps,ec11"; - label = "R_ENCODER"; steps = <80>; status = "disabled"; @@ -78,7 +76,6 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay index 89563f42917..df930cd2547 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay index e05df223f5b..3823cdfb76e 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay index 8f1629ced14..8228d530c82 100644 --- a/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay index 8f1629ced14..8228d530c82 100644 --- a/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_helix/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi index e580e87daba..29b6dddea36 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi @@ -33,7 +33,6 @@ left_encoder: left_encoder { compatible = "alps,ec11"; - label = "L_ENCODER"; steps = <144>; status = "disabled"; @@ -43,7 +42,6 @@ right_encoder: right_encoder { compatible = "alps,ec11"; - label = "R_ENCODER"; steps = <144>; status = "disabled"; @@ -64,7 +62,6 @@ oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay index c9830658b00..59d825530ef 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay index 48572de902d..95cea9ecc3c 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay index 0eafa704333..fa6ac6dc34b 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano.overlay @@ -26,7 +26,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay index 6601d27d4d8..0845226602b 100644 --- a/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi index 06b3ef3955c..fb993dbb633 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi @@ -33,7 +33,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) left_encoder: left_encoder { compatible = "alps,ec11"; - label = "L_ENCODER"; steps = <80>; status = "disabled"; @@ -43,7 +42,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) right_encoder: right_encoder { compatible = "alps,ec11"; - label = "R_ENCODER"; steps = <80>; status = "disabled"; @@ -64,7 +62,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay index c4f12ddaf98..fc38bbcbc76 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay index 09da298cd7d..c9a96491ee9 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay index 8f1629ced14..8228d530c82 100644 --- a/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay index 8f1629ced14..8228d530c82 100644 --- a/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_sofle/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi index 798cd84e5f3..c064456a235 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi @@ -33,7 +33,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) left_encoder: left_encoder { compatible = "alps,ec11"; - label = "L_ENCODER"; steps = <144>; status = "disabled"; @@ -43,7 +42,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) right_encoder: right_encoder { compatible = "alps,ec11"; - label = "R_ENCODER"; steps = <144>; status = "disabled"; @@ -64,7 +62,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay index 1adaf401563..024c9e75b29 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay index 3249b94193c..58df0026f06 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay index 810340f9af4..424a617b237 100644 --- a/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi index c5483af5476..404782c74c4 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi @@ -27,28 +27,24 @@ left_encoder1: left_encoder1 { compatible = "alps,ec11"; - label = "L_ENCODER1"; steps = <80>; status = "disabled"; }; left_encoder2: left_encoder2 { compatible = "alps,ec11"; - label = "L_ENCODER2"; steps = <80>; status = "disabled"; }; right_encoder1: right_encoder1 { compatible = "alps,ec11"; - label = "R_ENCODER1"; steps = <80>; status = "disabled"; }; right_encoder2: right_encoder2 { compatible = "alps,ec11"; - label = "R_ENCODER2"; steps = <80>; status = "disabled"; }; @@ -66,7 +62,6 @@ oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay index f62d24fa4ae..4a1bec902af 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay index ff1d16d329e..c3655477617 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay @@ -13,8 +13,6 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; - - label = "KSCAN"; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index abc3b7f7d27..4a1a58a5ba2 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -34,7 +34,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/tg4x/boards/nice_nano.overlay b/app/boards/shields/tg4x/boards/nice_nano.overlay index 85ab6fbc260..84441899991 100644 --- a/app/boards/shields/tg4x/boards/nice_nano.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay index 85ab6fbc260..84441899991 100644 --- a/app/boards/shields/tg4x/boards/nice_nano_v2.overlay +++ b/app/boards/shields/tg4x/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/tg4x/tg4x.overlay b/app/boards/shields/tg4x/tg4x.overlay index c0b1b3bc807..e53275c644b 100644 --- a/app/boards/shields/tg4x/tg4x.overlay +++ b/app/boards/shields/tg4x/tg4x.overlay @@ -9,7 +9,6 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; diff --git a/app/boards/shields/tidbit/boards/nice_nano.overlay b/app/boards/shields/tidbit/boards/nice_nano.overlay index 75514ac47db..b0895433933 100644 --- a/app/boards/shields/tidbit/boards/nice_nano.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay index 75514ac47db..b0895433933 100644 --- a/app/boards/shields/tidbit/boards/nice_nano_v2.overlay +++ b/app/boards/shields/tidbit/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index c7af200137d..110c3fc8734 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -9,7 +9,6 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "row2col"; @@ -46,7 +45,6 @@ encoder_1_top_row: encoder_1_top_row { compatible = "alps,ec11"; - label = "Top Row Encoder"; a-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -55,7 +53,6 @@ encoder_1: encoder_1 { compatible = "alps,ec11"; - label = "Encoder 1"; a-gpios = <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -64,7 +61,6 @@ encoder_2: encoder_2 { compatible = "alps,ec11"; - label = "Encoder 2"; a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -73,7 +69,6 @@ encoder_3: encoder_3 { compatible = "alps,ec11"; - label = "Encoder 3"; a-gpios = <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -82,7 +77,6 @@ encoder_4: encoder_4 { compatible = "alps,ec11"; - label = "Encoder 4"; a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; steps = <80>; @@ -102,7 +96,6 @@ oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <32>; segment-offset = <0>; diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay index 75514ac47db..b0895433933 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay index 75514ac47db..b0895433933 100644 --- a/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay +++ b/app/boards/shields/two_percent_milk/boards/nice_nano_v2.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay index d20e58e7d89..26079169c83 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_11.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay index 3167898038c..e1218ffd1f2 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_11_flipped.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay b/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay index d20e58e7d89..26079169c83 100644 --- a/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay +++ b/app/boards/shields/two_percent_milk/boards/nrfmicro_13.overlay @@ -25,7 +25,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.overlay b/app/boards/shields/two_percent_milk/two_percent_milk.overlay index 8d4a244a424..474150ef2fa 100644 --- a/app/boards/shields/two_percent_milk/two_percent_milk.overlay +++ b/app/boards/shields/two_percent_milk/two_percent_milk.overlay @@ -12,8 +12,6 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; - label = "KSCAN"; - input-gpios = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index 3d9140941b4..bbe60acd5b7 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -31,7 +31,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -44,7 +43,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) roller_left_encoder: encoder_left_roller { compatible = "alps,ec11"; - label = "ROLLER_LEFT_ENCODER"; a-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -53,7 +51,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) dial_left_encoder: encoder_left_dial { compatible = "alps,ec11"; - label = "DIAL_LEFT_ENCODER"; a-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -62,7 +59,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) roller_right_encoder: encoder_right_roller { compatible = "alps,ec11"; - label = "ROLLER_RIGHT_ENCODER"; a-gpios = <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -71,7 +67,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) dial_right_encoder: encoder_right_dial { compatible = "alps,ec11"; - label = "DIAL_RIGHT_ENCODER"; a-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -98,7 +93,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <64>; segment-offset = <0>; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index b21b83aeeb9..6d487adbad9 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -61,10 +61,8 @@ nice_view_spi: &arduino_spi { backlight: gpioleds { compatible = "gpio-leds"; - label = "Backlight LEDs"; gpio_led_0 { gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; }; }; @@ -97,8 +95,6 @@ nice_view_spi: &arduino_spi { rows = <1>; columns = <7>; - label = "KSCAN_MATRIX_COMP"; - matrix { kscan = <&kscan_matrix>; }; @@ -112,8 +108,6 @@ nice_view_spi: &arduino_spi { kscan_direct_comp: kscan_direct_comp { compatible = "zmk,kscan-composite"; - - label = "KSCAN_DIRECT_COMP"; status = "disabled"; matrix { @@ -169,7 +163,6 @@ nice_view_spi: &arduino_spi { }; encoder: encoder { - label = "ENCODER"; steps = <80>; compatible = "alps,ec11"; a-gpios = <&arduino_header 15 GPIO_PULL_UP>; diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi index 66ebb7b47f9..6e91778e7ad 100644 --- a/app/boards/shields/zodiark/zodiark.dtsi +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -33,7 +33,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -47,7 +46,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -56,7 +54,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R right_encoder: encoder_right { compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; a-gpios = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -76,7 +73,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "DISPLAY"; width = <128>; height = <64>; segment-offset = <0>; diff --git a/app/boards/usb_console.dtsi b/app/boards/usb_console.dtsi index 3cc76ad313b..adf3bd19bf1 100644 --- a/app/boards/usb_console.dtsi +++ b/app/boards/usb_console.dtsi @@ -14,7 +14,6 @@ &usbd { cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; diff --git a/app/tests/backlight/behavior_keymap.dtsi b/app/tests/backlight/behavior_keymap.dtsi index 771072ac4ec..4433f28ce06 100644 --- a/app/tests/backlight/behavior_keymap.dtsi +++ b/app/tests/backlight/behavior_keymap.dtsi @@ -12,17 +12,14 @@ compatible = "gpio-leds"; led_0 { gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; }; led_1 { gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 1"; }; }; keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/backlight/cycle/native_posix_64.keymap b/app/tests/backlight/cycle/native_posix_64.keymap index 00615e3546d..dcc23aa5f6d 100644 --- a/app/tests/backlight/cycle/native_posix_64.keymap +++ b/app/tests/backlight/cycle/native_posix_64.keymap @@ -12,17 +12,14 @@ compatible = "gpio-leds"; led_0 { gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 0"; }; led_1 { gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; - label = "Backlight LED 1"; }; }; keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/caps-word/behavior_keymap.dtsi b/app/tests/caps-word/behavior_keymap.dtsi index 855406fc72f..2e404afbfe3 100644 --- a/app/tests/caps-word/behavior_keymap.dtsi +++ b/app/tests/caps-word/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap b/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap index bbbdac10c9b..fe5360e6989 100644 --- a/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap +++ b/app/tests/caps-word/continue-with-modifiers/native_posix_64.keymap @@ -6,7 +6,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap index 3438f9bc77d..6f9f9860f27 100644 --- a/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-0/native_posix_64.keymap @@ -24,7 +24,6 @@ first so the decision to hold or tap can be made. keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap index 9120e8c3b4a..0982d34befa 100644 --- a/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-1/native_posix_64.keymap @@ -19,7 +19,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap index a227fe4c91f..6feebf2f76f 100644 --- a/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-2/native_posix_64.keymap @@ -26,7 +26,6 @@ keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap index 4fbf24071e6..fbbd7a9e501 100644 --- a/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-3/native_posix_64.keymap @@ -18,7 +18,6 @@ keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap index 59f4391f288..b3e987cf277 100644 --- a/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap +++ b/app/tests/combo/combos-and-holdtaps-4/native_posix_64.keymap @@ -22,7 +22,6 @@ ZMK_COMBO(tilde, &kp TILDE, 3 4, 50) / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/layer-filter-0/native_posix_64.keymap b/app/tests/combo/layer-filter-0/native_posix_64.keymap index 68077849a34..12946183249 100644 --- a/app/tests/combo/layer-filter-0/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-0/native_posix_64.keymap @@ -31,7 +31,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/layer-filter-1/native_posix_64.keymap b/app/tests/combo/layer-filter-1/native_posix_64.keymap index a11b86ad4d9..6d4a3021278 100644 --- a/app/tests/combo/layer-filter-1/native_posix_64.keymap +++ b/app/tests/combo/layer-filter-1/native_posix_64.keymap @@ -18,7 +18,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/multiple-timeouts/native_posix_64.keymap b/app/tests/combo/multiple-timeouts/native_posix_64.keymap index a2edc32fcc3..0e3ae996a19 100644 --- a/app/tests/combo/multiple-timeouts/native_posix_64.keymap +++ b/app/tests/combo/multiple-timeouts/native_posix_64.keymap @@ -19,7 +19,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap index e89a3f22d33..a9a229fb3a2 100644 --- a/app/tests/combo/overlapping-combos-0/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-0/native_posix_64.keymap @@ -37,7 +37,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap index 4b0166bee15..f3b0ab975b1 100644 --- a/app/tests/combo/overlapping-combos-1/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-1/native_posix_64.keymap @@ -26,7 +26,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap index 5c38bcfc403..beed222e890 100644 --- a/app/tests/combo/overlapping-combos-2/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-2/native_posix_64.keymap @@ -27,7 +27,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap index 48e3397f4a6..2e7e4225bb2 100644 --- a/app/tests/combo/overlapping-combos-3/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-3/native_posix_64.keymap @@ -28,7 +28,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap b/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap index 8967207987b..06a67b88134 100644 --- a/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap +++ b/app/tests/combo/overlapping-combos-4-different-timeouts/native_posix_64.keymap @@ -32,7 +32,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap index 55e8f1e77b6..d3151382ece 100644 --- a/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap +++ b/app/tests/combo/partially-overlapping-combos/native_posix_64.keymap @@ -26,7 +26,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap index da2e9483ff7..85cb6475cae 100644 --- a/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-complete/native_posix_64.keymap @@ -14,7 +14,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap index b1494cecf20..49b92968602 100644 --- a/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-incomplete/native_posix_64.keymap @@ -14,7 +14,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap index 8769286413b..61787322cf5 100644 --- a/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap +++ b/app/tests/combo/press-release-long-combo-wrong-last-key/native_posix_64.keymap @@ -14,7 +14,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press-release/native_posix_64.keymap b/app/tests/combo/press-release/native_posix_64.keymap index 26cd241b0bb..783dcf00437 100644 --- a/app/tests/combo/press-release/native_posix_64.keymap +++ b/app/tests/combo/press-release/native_posix_64.keymap @@ -14,7 +14,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press-timeout/native_posix_64.keymap b/app/tests/combo/press-timeout/native_posix_64.keymap index a71de45a7d2..c9cd2331e34 100644 --- a/app/tests/combo/press-timeout/native_posix_64.keymap +++ b/app/tests/combo/press-timeout/native_posix_64.keymap @@ -14,7 +14,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap index 2e0a67a3e7f..55d93823dfe 100644 --- a/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release1-release2/native_posix_64.keymap @@ -20,7 +20,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap index 8d4838eb511..ace63a16a80 100644 --- a/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap +++ b/app/tests/combo/press1-press2-release2-release1/native_posix_64.keymap @@ -20,7 +20,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap index 9c75e5705b1..8b59792b047 100644 --- a/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap +++ b/app/tests/combo/press1-release1-press2-release2/native_posix_64.keymap @@ -20,7 +20,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/require-prior-idle/native_posix_64.keymap b/app/tests/combo/require-prior-idle/native_posix_64.keymap index fcd94056c4d..72801f74950 100644 --- a/app/tests/combo/require-prior-idle/native_posix_64.keymap +++ b/app/tests/combo/require-prior-idle/native_posix_64.keymap @@ -21,7 +21,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap index 46b35be02ee..cfea0cd60e4 100644 --- a/app/tests/combo/slowrelease-disabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-disabled/native_posix_64.keymap @@ -15,7 +15,6 @@ keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap index d64876da557..e57bae60c88 100644 --- a/app/tests/combo/slowrelease-enabled/native_posix_64.keymap +++ b/app/tests/combo/slowrelease-enabled/native_posix_64.keymap @@ -15,7 +15,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/gresc/gresc-press-release/native_posix_64.keymap b/app/tests/gresc/gresc-press-release/native_posix_64.keymap index c472dd6d4ad..5280543d9e3 100644 --- a/app/tests/gresc/gresc-press-release/native_posix_64.keymap +++ b/app/tests/gresc/gresc-press-release/native_posix_64.keymap @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap index 14adcf45c8e..5cb0695c7bc 100644 --- a/app/tests/gresc/gresc-two-instances/native_posix_64.keymap +++ b/app/tests/gresc/gresc-two-instances/native_posix_64.keymap @@ -13,7 +13,6 @@ The first gresc that is released releases the key. / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap index 51995f8d905..f9bda1cfd99 100644 --- a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_balanced { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "balanced"; tapping_term_ms = <300>; @@ -17,7 +16,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi index c750f8e30c8..9acf5a1b58d 100644 --- a/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/7-positional/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi index 670bdcc2650..0bcb27c5d9f 100644 --- a/app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/8-require-prior-idle/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_balanced { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/balanced/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/behavior_keymap.dtsi index 9f338ebc99b..350dfaf3266 100644 --- a/app/tests/hold-tap/balanced/behavior_keymap.dtsi +++ b/app/tests/hold-tap/balanced/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <300>; @@ -17,7 +16,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap index 4bac8b8334d..cfbb128fadf 100644 --- a/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/many-nested/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <300>; @@ -16,7 +15,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap index 8dbc7d82c6b..8aa29dec443 100644 --- a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { hp: behavior_hold_preferred { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "hold-preferred"; tapping_term_ms = <300>; @@ -17,7 +16,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi index 71f3aba5773..65e7f9aa217 100644 --- a/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/7-positional/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { ht_hold: behavior_hold_hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "hold_hold_tap"; #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi index a99eb3f56f8..bdc6838ae87 100644 --- a/app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/8-require-prior-idle/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { hp: behavior_hold_preferred { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi index da6b8362da1..702a96b4ef3 100644 --- a/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi +++ b/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi @@ -8,7 +8,6 @@ behaviors { ht_hold: behavior_hold_hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "hold_hold_tap"; #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <300>; @@ -19,7 +18,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap index 500d2670b96..85c9a9590b7 100644 --- a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix_64.keymap @@ -12,7 +12,6 @@ behaviors { tp_short: short_tap { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP_SHORT"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <100>; @@ -21,7 +20,6 @@ }; tp_long: long_tap { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP_LONG"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; @@ -32,7 +30,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi index 79a88eb2c51..3e891f2c2cc 100644 --- a/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/7-positional/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { tp: behavior_tap_preferred { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi index c66dc934092..23ecd2df53e 100644 --- a/app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/8-require-prior-idle/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { tp: behavior_tap_preferred { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi index df307740199..fbe6c95da9a 100644 --- a/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { tp: behavior_tap_preferred { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <300>; @@ -17,7 +16,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi index 7aa3940833f..6a78d588248 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-unless-interrupted/6-require-prior-idle/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { ht_tui: behavior_hold_tap_tap_unless_interrupted { compatible = "zmk,behavior-hold-tap"; - label = "hold_tap_tap_unless_interrupted"; #binding-cells = <2>; flavor = "tap-unless-interrupted"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi b/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi index b24de6dd257..7616c46287f 100644 --- a/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi +++ b/app/tests/hold-tap/tap-unless-interrupted/behavior_keymap.dtsi @@ -8,7 +8,6 @@ behaviors { ht_tui: behavior_hold_tap_tap_unless_interrupted { compatible = "zmk,behavior-hold-tap"; - label = "hold_tap_tap_unless_interrupted"; #binding-cells = <2>; flavor = "tap-unless-interrupted"; tapping-term-ms = <300>; @@ -19,7 +18,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/key-repeat/behavior_keymap.dtsi b/app/tests/key-repeat/behavior_keymap.dtsi index c8e2d9c427b..a0e5c8f9849 100644 --- a/app/tests/key-repeat/behavior_keymap.dtsi +++ b/app/tests/key-repeat/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/keypress/behavior_keymap.dtsi b/app/tests/keypress/behavior_keymap.dtsi index 52f9421c2fb..5f7cfd2dfeb 100644 --- a/app/tests/keypress/behavior_keymap.dtsi +++ b/app/tests/keypress/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/keytoggle/behavior_keymap.dtsi b/app/tests/keytoggle/behavior_keymap.dtsi index 45d48164b0c..a8e751364e3 100644 --- a/app/tests/keytoggle/behavior_keymap.dtsi +++ b/app/tests/keytoggle/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap b/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap index 4f70b591105..78b4e455476 100644 --- a/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-alt-tab/native_posix_64.keymap @@ -36,7 +36,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap b/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap index b07f297f795..0621b33ad63 100644 --- a/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap +++ b/app/tests/keytoggle/kt-modded-alpha/native_posix_64.keymap @@ -26,7 +26,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/macros/behavior_keymap.dtsi b/app/tests/macros/behavior_keymap.dtsi index 90322e42818..25414216af2 100644 --- a/app/tests/macros/behavior_keymap.dtsi +++ b/app/tests/macros/behavior_keymap.dtsi @@ -49,7 +49,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap index bdf89abfdc9..d9d186ce2fc 100644 --- a/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap +++ b/app/tests/macros/mo-plus-modifier-from-hold-tap/native_posix_64.keymap @@ -24,7 +24,6 @@ behaviors { mth: macro_tap_hold { compatible = "zmk,behavior-hold-tap"; - label = "MACRO_TAP_HOLD"; #binding-cells = <2>; flavor = "tap-unless-interrupted"; tapping-term-ms = <200>; @@ -34,7 +33,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap index 4cc60bf5b00..bb06d2c3754 100644 --- a/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap +++ b/app/tests/macros/mo-plus-modifier-macro/native_posix_64.keymap @@ -23,7 +23,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/macros/place-holder-parameters/native_posix_64.keymap b/app/tests/macros/place-holder-parameters/native_posix_64.keymap index 59d78b5e8fb..c6fcd5c6b86 100644 --- a/app/tests/macros/place-holder-parameters/native_posix_64.keymap +++ b/app/tests/macros/place-holder-parameters/native_posix_64.keymap @@ -12,7 +12,6 @@ macros { slash_macro: slash_macro { #binding-cells = <2>; - label = "ZM_SLASH"; compatible = "zmk,behavior-macro-two-param"; wait-ms = <40>; tap-ms = <40>; @@ -24,7 +23,6 @@ to_second_macro: to_second_macro { #binding-cells = <2>; - label = "ZMK_TO_SECOND"; compatible = "zmk,behavior-macro-two-param"; wait-ms = <40>; tap-ms = <40>; @@ -35,7 +33,6 @@ quote_letter_macro: quote_letter_macro { #binding-cells = <1>; - label = "ZMK_QLET"; compatible = "zmk,behavior-macro-one-param"; wait-ms = <40>; tap-ms = <40>; @@ -48,7 +45,6 @@ keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap index 66fb1ed0f58..8f7b2cdb02a 100644 --- a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap +++ b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { mod_morph: mod_morph { compatible = "zmk,behavior-mod-morph"; - label = "MOD_MORPH_TEST"; #binding-cells = <0>; bindings = <&kp A>, <&kp LS(B)>; // implict mod overwrite mods = <(MOD_LSFT|MOD_RSFT)>; @@ -15,7 +14,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap index 9b7f4fe1826..4f9f491086a 100644 --- a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap +++ b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap @@ -16,7 +16,6 @@ behaviors { mod_morph: mod_morph { compatible = "zmk,behavior-mod-morph"; - label = "MOD_MORPH_TEST"; #binding-cells = <0>; bindings = <&kp A>, << 1 B>; mods = <(MOD_LSFT|MOD_RSFT)>; @@ -26,7 +25,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap index e0c1d1e57b3..77067f341bc 100644 --- a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap +++ b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap @@ -18,7 +18,6 @@ behaviors { mod_morph: mod_morph { compatible = "zmk,behavior-mod-morph"; - label = "MOD_MORPH_TEST"; #binding-cells = <0>; bindings = <&kp A>, << 1 B>; mods = <(MOD_LSFT|MOD_RSFT)>; @@ -28,7 +27,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap index a20c04d5dfc..d2ad5670c03 100644 --- a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap +++ b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { mod_morph: mod_morph { compatible = "zmk,behavior-mod-morph"; - label = "MOD_MORPH_TEST"; #binding-cells = <0>; bindings = <&kp A>, <&kp B>; mods = <(MOD_LSFT|MOD_RSFT)>; @@ -16,7 +15,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/mod-morph/behavior_keymap.dtsi b/app/tests/mod-morph/behavior_keymap.dtsi index 2f880540564..86150307762 100644 --- a/app/tests/mod-morph/behavior_keymap.dtsi +++ b/app/tests/mod-morph/behavior_keymap.dtsi @@ -2,7 +2,6 @@ behaviors { mod_morph: mod_morph { compatible = "zmk,behavior-mod-morph"; - label = "MOD_MORPH_TEST"; #binding-cells = <0>; bindings = <&kp A>, <&kp B>; mods = <(MOD_LSFT|MOD_RSFT)>; @@ -11,7 +10,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap index 72b218f510f..8060f18f611 100644 --- a/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-hyper-dn-a-dn-a-up-hyper-up/native_posix_64.keymap @@ -16,7 +16,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap index d68f89213d9..503c3519960 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap index c2d12eb2104..362754c8353 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix_64.keymap @@ -13,7 +13,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap index 7be62b9455d..f25996f6670 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap index 8d1d773efbd..15cdc5c9d9e 100644 --- a/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix_64.keymap @@ -16,7 +16,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap index 87101d837e0..17d949e7308 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap index 6b40fef158a..fa34be426b3 100644 --- a/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap index 3926eb57a29..214cff49642 100644 --- a/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap +++ b/app/tests/modifiers/implicit/kp-rolling-symbols-same-key/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap index 4b2ca139da9..01387e54f11 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap index a256476252d..113fc488ee1 100644 --- a/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap +++ b/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix_64.keymap @@ -15,7 +15,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/momentary-layer/1-normal/native_posix_64.keymap b/app/tests/momentary-layer/1-normal/native_posix_64.keymap index 387a1322ff1..88c70da98b4 100644 --- a/app/tests/momentary-layer/1-normal/native_posix_64.keymap +++ b/app/tests/momentary-layer/1-normal/native_posix_64.keymap @@ -6,7 +6,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap index 776fc761be5..48da33e60e7 100644 --- a/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap +++ b/app/tests/momentary-layer/2-early-key-release/native_posix_64.keymap @@ -6,7 +6,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/momentary-layer/3-covered/native_posix_64.keymap b/app/tests/momentary-layer/3-covered/native_posix_64.keymap index a7939d9e95e..42548533d1b 100644 --- a/app/tests/momentary-layer/3-covered/native_posix_64.keymap +++ b/app/tests/momentary-layer/3-covered/native_posix_64.keymap @@ -9,7 +9,6 @@ and the original key is "covered". / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/momentary-layer/4-nested/native_posix_64.keymap b/app/tests/momentary-layer/4-nested/native_posix_64.keymap index 1f4f0aea219..12fb6cdc7c7 100644 --- a/app/tests/momentary-layer/4-nested/native_posix_64.keymap +++ b/app/tests/momentary-layer/4-nested/native_posix_64.keymap @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap b/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap index 4c8f789089d..f1f0afcbc40 100644 --- a/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap +++ b/app/tests/momentary-layer/5-nested-early-key-release/native_posix_64.keymap @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/momentary-layer/behavior_keymap.dtsi b/app/tests/momentary-layer/behavior_keymap.dtsi index 63127a393d1..8d63bc13502 100644 --- a/app/tests/momentary-layer/behavior_keymap.dtsi +++ b/app/tests/momentary-layer/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/mouse-keys/mkp/native_posix.keymap b/app/tests/mouse-keys/mkp/native_posix.keymap index 04316eb34bb..8e3071d4317 100644 --- a/app/tests/mouse-keys/mkp/native_posix.keymap +++ b/app/tests/mouse-keys/mkp/native_posix.keymap @@ -6,7 +6,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/mouse-keys/mkp/native_posix_64.keymap b/app/tests/mouse-keys/mkp/native_posix_64.keymap index 04316eb34bb..8e3071d4317 100644 --- a/app/tests/mouse-keys/mkp/native_posix_64.keymap +++ b/app/tests/mouse-keys/mkp/native_posix_64.keymap @@ -6,7 +6,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/none/behavior_keymap.dtsi b/app/tests/none/behavior_keymap.dtsi index 7a4c099bfb1..162ca992fdf 100644 --- a/app/tests/none/behavior_keymap.dtsi +++ b/app/tests/none/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap index bc541824a82..560c8424e1a 100644 --- a/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-callum-mods-quick-release/native_posix_64.keymap @@ -9,7 +9,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap index 9121b1880ec..28f2db3d140 100644 --- a/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-callum-mods/native_posix_64.keymap @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap index bafdbe38d39..42bb9cfd23f 100644 --- a/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap +++ b/app/tests/sticky-keys/10-sl-sl-kp/native_posix_64.keymap @@ -10,7 +10,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap index 38c8fb4c91c..93239797c71 100644 --- a/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap +++ b/app/tests/sticky-keys/2-sl-dn-up-kcdn-kcup/native_posix_64.keymap @@ -10,7 +10,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap index 4da4ad98a19..69db16352af 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap +++ b/app/tests/sticky-keys/8-lsk-osk-combination-quick-release/native_posix_64.keymap @@ -9,7 +9,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap index d9c49014b3f..9523a75e98d 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap +++ b/app/tests/sticky-keys/8-lsk-osk-combination/native_posix_64.keymap @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap index 74678256aff..67efb6afe5c 100644 --- a/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap +++ b/app/tests/sticky-keys/9-sk-dn-up-dn-up/native_posix_64.keymap @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/behavior_keymap.dtsi b/app/tests/sticky-keys/behavior_keymap.dtsi index 9322cb141be..182ef58e1a8 100644 --- a/app/tests/sticky-keys/behavior_keymap.dtsi +++ b/app/tests/sticky-keys/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/tap-dance/behavior_keymap.dtsi b/app/tests/tap-dance/behavior_keymap.dtsi index ce80e958d23..66ffdf2e0cc 100644 --- a/app/tests/tap-dance/behavior_keymap.dtsi +++ b/app/tests/tap-dance/behavior_keymap.dtsi @@ -6,7 +6,6 @@ behaviors { ht: hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP"; #binding-cells = <2>; tapping-term-ms = <200>; quick_tap_ms = <0>; @@ -16,7 +15,6 @@ tdm: tap_dance_mixed { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_MOD"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&ht LSHIFT A>, <&ht LALT B>, <&ht LGUI C>; @@ -24,7 +22,6 @@ tdb: tap_dance_basic { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_BASIC"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&kp N1>, <&kp N2>, <&kp N3>; @@ -32,7 +29,6 @@ td2: tap_dance_basic_2 { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_BASIC_2"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&kp A>, <&kp B>, <&kp C>; @@ -40,7 +36,6 @@ tds: tap_dance_single { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_SINGlE"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&kp S>; @@ -59,7 +54,6 @@ keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/to-layer/behavior_keymap.dtsi b/app/tests/to-layer/behavior_keymap.dtsi index 7dc857fe143..0be9cb9641f 100644 --- a/app/tests/to-layer/behavior_keymap.dtsi +++ b/app/tests/to-layer/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/toggle-layer/behavior_keymap.dtsi b/app/tests/toggle-layer/behavior_keymap.dtsi index 1ecf8599259..1ff4a81f3e4 100644 --- a/app/tests/toggle-layer/behavior_keymap.dtsi +++ b/app/tests/toggle-layer/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/transparent/behavior_keymap.dtsi b/app/tests/transparent/behavior_keymap.dtsi index dd5ded90b6c..b70c84218c2 100644 --- a/app/tests/transparent/behavior_keymap.dtsi +++ b/app/tests/transparent/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/wpm/behavior_keymap.dtsi b/app/tests/wpm/behavior_keymap.dtsi index 52f9421c2fb..5f7cfd2dfeb 100644 --- a/app/tests/wpm/behavior_keymap.dtsi +++ b/app/tests/wpm/behavior_keymap.dtsi @@ -5,7 +5,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < From d4e8dee44479864af5bef1b88a71d40b9e8edabf Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 6 Oct 2023 20:04:41 -0500 Subject: [PATCH 0838/1130] refactor(keymaps): Rename layer label to "display-name" Changed the property used to define a layer name for displays from "label" (which affects other things in Zephyr and is deprecated) to "display-name". (It cannot be named simply "name", because that has special meaning in newer versions of the devicetree compiler.) "label" is still supported as a fallback, so no changes need to be made to existing keymaps. --- app/boards/arm/corneish_zen/corneish_zen.keymap | 6 +++--- app/boards/arm/corneish_zen/widgets/layer_status.c | 2 +- app/boards/shields/hummingbird/hummingbird.keymap | 6 +++--- app/boards/shields/leeloo/leeloo.keymap | 6 +++--- app/boards/shields/leeloo/leeloo_rev2.keymap | 6 +++--- app/boards/shields/leeloo_micro/leeloo_micro.keymap | 12 ++++++------ app/boards/shields/murphpad/murphpad.keymap | 4 ++-- app/boards/shields/nibble/nibble.keymap | 4 ++-- app/boards/shields/nice_view/widgets/status.c | 2 +- app/boards/shields/reviung34/reviung34.keymap | 10 +++++----- app/boards/shields/reviung5/reviung5.keymap | 4 ++-- app/boards/shields/snap/snap.keymap | 4 ++-- app/boards/shields/sofle/sofle.keymap | 8 ++++---- app/dts/bindings/zmk,keymap.yaml | 9 ++++++++- app/include/zmk/keymap.h | 2 +- app/src/display/widgets/layer_status.c | 2 +- app/src/keymap.c | 6 +++--- docs/docs/config/keymap.md | 2 +- 18 files changed, 51 insertions(+), 44 deletions(-) diff --git a/app/boards/arm/corneish_zen/corneish_zen.keymap b/app/boards/arm/corneish_zen/corneish_zen.keymap index 24c925e8233..d2549819c03 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.keymap +++ b/app/boards/arm/corneish_zen/corneish_zen.keymap @@ -21,7 +21,7 @@ compatible = "zmk,keymap"; default_layer { - label = "QWERTY"; + display-name = "QWERTY"; // -------------------------------------------------------------------------------- // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | @@ -36,7 +36,7 @@ }; lower_layer { - label = "NUMBER"; + display-name = "NUMBER"; // ----------------------------------------------------------------------------------------- // | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | // | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | @@ -51,7 +51,7 @@ }; raise_layer { - label = "SYMBOL"; + display-name = "SYMBOL"; // ----------------------------------------------------------------------------------------- // | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | // | CTRL | | | | | | | - | = | [ | ] | \ | ` | diff --git a/app/boards/arm/corneish_zen/widgets/layer_status.c b/app/boards/arm/corneish_zen/widgets/layer_status.c index 3dc33613441..86418318092 100644 --- a/app/boards/arm/corneish_zen/widgets/layer_status.c +++ b/app/boards/arm/corneish_zen/widgets/layer_status.c @@ -45,7 +45,7 @@ static void layer_status_update_cb(struct layer_status_state state) { static struct layer_status_state layer_status_get_state(const zmk_event_t *eh) { uint8_t index = zmk_keymap_highest_layer_active(); - return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_label(index)}; + return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_name(index)}; } ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, layer_status_update_cb, diff --git a/app/boards/shields/hummingbird/hummingbird.keymap b/app/boards/shields/hummingbird/hummingbird.keymap index 990d79094d4..7a7171e8fb7 100644 --- a/app/boards/shields/hummingbird/hummingbird.keymap +++ b/app/boards/shields/hummingbird/hummingbird.keymap @@ -66,7 +66,7 @@ }; nav_layer { - label = "Nav"; + display-name = "Nav"; bindings = < &trans &trans &trans &trans &trans &trans &kp HOME &kp UARW &kp PG_UP &trans &trans &trans &trans &trans &trans &trans &kp LARW &kp DARW &kp RARW &trans @@ -76,7 +76,7 @@ }; num_layer { - label = "Num"; + display-name = "Num"; bindings = < &kp LBKT &kp N7 &kp N8 &kp N9 &kp RBKT &trans &trans &trans &trans &trans &kp SEMI &kp N4 &kp N5 &kp N6 &kp EQUAL &trans &trans &trans &trans &trans @@ -86,7 +86,7 @@ }; sym_layer { - label = "Sym"; + display-name = "Sym"; bindings = < &kp LBRC &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp RBRC &trans &trans &trans &trans &trans &kp COLON &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp PLUS &trans &trans &trans &trans &trans diff --git a/app/boards/shields/leeloo/leeloo.keymap b/app/boards/shields/leeloo/leeloo.keymap index bdbf8988cc8..91e4f333448 100644 --- a/app/boards/shields/leeloo/leeloo.keymap +++ b/app/boards/shields/leeloo/leeloo.keymap @@ -25,7 +25,7 @@ compatible = "zmk,keymap"; default_layer { - label = " QWERTY"; + display-name = " QWERTY"; bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSLH &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp GRAV @@ -38,7 +38,7 @@ }; lower_layer { - label = " Lower"; + display-name = " Lower"; bindings = < &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans &trans &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &trans &kp F12 @@ -51,7 +51,7 @@ }; raise_layer { - label = " Raise"; + display-name = " Raise"; bindings = < &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader diff --git a/app/boards/shields/leeloo/leeloo_rev2.keymap b/app/boards/shields/leeloo/leeloo_rev2.keymap index a66205b64cc..a2eda050f2b 100644 --- a/app/boards/shields/leeloo/leeloo_rev2.keymap +++ b/app/boards/shields/leeloo/leeloo_rev2.keymap @@ -37,7 +37,7 @@ compatible = "zmk,keymap"; default_layer { - label = " QWERTY"; + display-name = " QWERTY"; bindings = < &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSLH &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp GRAV @@ -50,7 +50,7 @@ }; lower_layer { - label = " Lower"; + display-name = " Lower"; bindings = < &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans &trans &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &trans &kp F12 @@ -63,7 +63,7 @@ }; raise_layer { - label = " Raise"; + display-name = " Raise"; bindings = < &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.keymap b/app/boards/shields/leeloo_micro/leeloo_micro.keymap index 8526f5ac2a8..2317015c106 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.keymap +++ b/app/boards/shields/leeloo_micro/leeloo_micro.keymap @@ -73,7 +73,7 @@ compatible = "zmk,keymap"; default_layer { - label = " QWERTY"; + display-name = " QWERTY"; bindings = < &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI @@ -85,7 +85,7 @@ }; lower_layer { - label = " Lower"; + display-name = " Lower"; bindings = < &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp QUOT @@ -97,7 +97,7 @@ }; raise_layer { - label = " Raise"; + display-name = " Raise"; bindings = < &kp TAB &trans &trans &trans &trans &kp PG_UP &kp HOME &kp UP &kp END &kp BSLH &kp CAPS &trans &trans &trans &trans &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp GRAVE @@ -109,7 +109,7 @@ }; adjust_layer { - label = " Adjust"; + display-name = " Adjust"; bindings = < &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &trans &trans &trans &trans @@ -122,7 +122,7 @@ }; numpad_layer { - label = " NumPad"; + display-name = " NumPad"; bindings = < &trans &none &none &none &none &kp SLASH &kp N7 &kp N8 &kp N9 &kp MINUS @@ -135,7 +135,7 @@ RGBOFF RGBEFF RGBHUD RGBSAD RGBBRD &trans &trans &no }; ble_layer { - label = " BLE"; + display-name = " BLE"; bindings = < &bt BT0 &bt BT1 &bt BT2 &bt BT3 &bt BT4 &bt BT0 &bt BT1 &bt BT2 &bt BT3 &bt BT4 diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap index 74a852a8719..069eeea3ba8 100644 --- a/app/boards/shields/murphpad/murphpad.keymap +++ b/app/boards/shields/murphpad/murphpad.keymap @@ -56,7 +56,7 @@ compatible = "zmk,keymap"; default_layer { - label = "default layer"; + display-name = "default layer"; bindings = < &bt BT_CLR &kp TAB &kp F5 &kp LC(LA(C)) &kp LG(D) &rgb_ug RGB_TOG &kp ESC &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS @@ -70,7 +70,7 @@ }; fn_layer { - label = "fn layer"; + display-name = "fn layer"; bindings = < &trans &trans &trans &trans &trans &trans &kp KP_NUM &trans &trans &trans diff --git a/app/boards/shields/nibble/nibble.keymap b/app/boards/shields/nibble/nibble.keymap index 4cb6f5b021a..8b25c5a4133 100644 --- a/app/boards/shields/nibble/nibble.keymap +++ b/app/boards/shields/nibble/nibble.keymap @@ -19,7 +19,7 @@ compatible = "zmk,keymap"; default_layer { - label = "Default"; + display-name = "Default"; sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; @@ -32,7 +32,7 @@ >; }; function_layer { - label = "Function"; + display-name = "Function"; sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>; diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 453fd650039..96b7d450a7d 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -276,7 +276,7 @@ static void layer_status_update_cb(struct layer_status_state state) { static struct layer_status_state layer_status_get_state(const zmk_event_t *eh) { uint8_t index = zmk_keymap_highest_layer_active(); - return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_label(index)}; + return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_name(index)}; } ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, layer_status_update_cb, diff --git a/app/boards/shields/reviung34/reviung34.keymap b/app/boards/shields/reviung34/reviung34.keymap index eefc510a1c4..9a0d982dcd7 100644 --- a/app/boards/shields/reviung34/reviung34.keymap +++ b/app/boards/shields/reviung34/reviung34.keymap @@ -25,7 +25,7 @@ compatible = "zmk,keymap"; base { - label = "Base"; + display-name = "Base"; bindings = < &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI @@ -35,7 +35,7 @@ }; lower { - label = "Lower"; + display-name = "Lower"; bindings = < &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &trans &kp TILDE &kp DQT &kp PIPE &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC @@ -45,7 +45,7 @@ }; upper { - label = "Upper"; + display-name = "Upper"; bindings = < &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &kp GRAVE &kp SQT &kp BSLH &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT @@ -55,7 +55,7 @@ }; function { - label = "Function"; + display-name = "Function"; bindings = < &kp TAB &trans &kp C_VOL_UP &trans &trans &trans &trans &trans &trans &kp ENTER &kp ESC &kp C_BRI_DN &kp C_VOL_DN &kp C_BRI_UP &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT @@ -65,7 +65,7 @@ }; meta { - label = "Meta"; + display-name = "Meta"; bindings = < &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &rgb_ug RGB_EFF &none &none &none &none &none &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &rgb_ug RGB_EFR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 diff --git a/app/boards/shields/reviung5/reviung5.keymap b/app/boards/shields/reviung5/reviung5.keymap index 936694790cf..31c89cbcef3 100644 --- a/app/boards/shields/reviung5/reviung5.keymap +++ b/app/boards/shields/reviung5/reviung5.keymap @@ -17,7 +17,7 @@ compatible = "zmk,keymap"; base_layer { - label = "BASE"; + display-name = "BASE"; bindings = < // ╭─────────────┬──────────────┬──────────────────┬─────────────┬─────────────╮ &mo BLE &kp C_PREVIOUS &kp C_PLAY_PAUSE &kp C_NEXT &kp C_MUTE @@ -27,7 +27,7 @@ }; ble_layer { - label = "BLE"; + display-name = "BLE"; bindings = < // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &out OUT_TOG &bt BT_PRV &bt BT_NXT &bt BT_CLR diff --git a/app/boards/shields/snap/snap.keymap b/app/boards/shields/snap/snap.keymap index febaff97bba..8a95beda153 100644 --- a/app/boards/shields/snap/snap.keymap +++ b/app/boards/shields/snap/snap.keymap @@ -20,7 +20,7 @@ compatible = "zmk,keymap"; default_layer { - label = "Default"; + display-name = "Default"; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp C_VOL_UP C_VOL_DN>; bindings = < &kp ESC &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp KP_NUM &kp PAUSE_BREAK @@ -33,7 +33,7 @@ }; function_layer { - label = "Function"; + display-name = "Function"; sensor-bindings = <&inc_dec_kp C_NEXT C_PREV &inc_dec_kp C_NEXT C_PREV>; bindings = < &bootloader &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index fbb0af7fb00..ed9f0f4f42c 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -30,7 +30,7 @@ compatible = "zmk,keymap"; default_layer { - label = "default"; + display-name = "default"; // ------------------------------------------------------------------------------------------------------------ // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | ESC | Q | W | E | R | T | | Y | U | I | O | P | BKSPC | @@ -49,7 +49,7 @@ }; lower_layer { - label = "lower"; + display-name = "lower"; // TODO: Some binds are waiting for shifted keycode support. // ------------------------------------------------------------------------------------------------------------ // | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | @@ -69,7 +69,7 @@ }; raise_layer { - label = "raise"; + display-name = "raise"; // ------------------------------------------------------------------------------------------------------------ // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | | INS | PSCR | GUI | | | | PGUP | | ^ | | | | @@ -94,7 +94,7 @@ // | | RGB_BRD | RGB_BRI | | | | | | | | | | | // | | | | | | | RGB_TOG | | | | | | | | | // | | | | | | | | | | | | - label = "adjust"; + display-name = "adjust"; bindings = < &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &none &none &none &none &none &none &ext_power EP_TOG &rgb_ug RGB_HUD &rgb_ug RGB_HUI &rgb_ug RGB_SAD &rgb_ug RGB_SAI &rgb_ug RGB_EFF &none &none &none &none &none &none diff --git a/app/dts/bindings/zmk,keymap.yaml b/app/dts/bindings/zmk,keymap.yaml index 56821ded17d..4c675d21237 100644 --- a/app/dts/bindings/zmk,keymap.yaml +++ b/app/dts/bindings/zmk,keymap.yaml @@ -7,12 +7,19 @@ child-binding: description: "A layer to be used in a keymap" properties: - label: + display-name: type: string required: false + description: The name of this layer to show on displays bindings: type: phandle-array required: true sensor-bindings: type: phandle-array required: false + + label: + type: string + required: false + deprecated: true + description: Deprecated. Use "name" instead. diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 43e8aef141f..9bf81e1e60f 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -22,7 +22,7 @@ int zmk_keymap_layer_activate(uint8_t layer); int zmk_keymap_layer_deactivate(uint8_t layer); int zmk_keymap_layer_toggle(uint8_t layer); int zmk_keymap_layer_to(uint8_t layer); -const char *zmk_keymap_layer_label(uint8_t layer); +const char *zmk_keymap_layer_name(uint8_t layer); int zmk_keymap_position_state_changed(uint8_t source, uint32_t position, bool pressed, int64_t timestamp); diff --git a/app/src/display/widgets/layer_status.c b/app/src/display/widgets/layer_status.c index c3ddd07cf4d..73c2268e4cc 100644 --- a/app/src/display/widgets/layer_status.c +++ b/app/src/display/widgets/layer_status.c @@ -45,7 +45,7 @@ static void layer_status_update_cb(struct layer_status_state state) { static struct layer_status_state layer_status_get_state(const zmk_event_t *eh) { uint8_t index = zmk_keymap_highest_layer_active(); - return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_label(index)}; + return (struct layer_status_state){.index = index, .label = zmk_keymap_layer_name(index)}; } ZMK_DISPLAY_WIDGET_LISTENER(widget_layer_status, struct layer_status_state, layer_status_update_cb, diff --git a/app/src/keymap.c b/app/src/keymap.c index ca41e34adcc..f2aa3426854 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -52,7 +52,7 @@ static uint8_t _zmk_keymap_layer_default = 0; #endif /* ZMK_KEYMAP_HAS_SENSORS */ -#define LAYER_LABEL(node) DT_PROP_OR(node, label, NULL) +#define LAYER_NAME(node) DT_PROP_OR(node, display_name, DT_PROP_OR(node, label, NULL)) // State @@ -65,7 +65,7 @@ static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_ DT_INST_FOREACH_CHILD_SEP(0, TRANSFORMED_LAYER, (, ))}; static const char *zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN] = { - DT_INST_FOREACH_CHILD_SEP(0, LAYER_LABEL, (, ))}; + DT_INST_FOREACH_CHILD_SEP(0, LAYER_NAME, (, ))}; #if ZMK_KEYMAP_HAS_SENSORS @@ -145,7 +145,7 @@ bool is_active_layer(uint8_t layer, zmk_keymap_layers_state_t layer_state) { return (layer_state & BIT(layer)) == BIT(layer) || layer == _zmk_keymap_layer_default; } -const char *zmk_keymap_layer_label(uint8_t layer) { +const char *zmk_keymap_layer_name(uint8_t layer) { if (layer >= ZMK_KEYMAP_LAYERS_LEN) { return NULL; } diff --git a/docs/docs/config/keymap.md b/docs/docs/config/keymap.md index b4e81f5edcb..4992438949d 100644 --- a/docs/docs/config/keymap.md +++ b/docs/docs/config/keymap.md @@ -19,7 +19,7 @@ Each child node can have the following properties: | Property | Type | Description | | ----------------- | ------------- | ---------------------------------------------------------------------- | -| `label` | string | Unique label for the node | +| `display-name` | string | Name for the layer on displays | | `bindings` | phandle-array | List of [key behaviors](../features/keymaps.md#behaviors), one per key | | `sensor-bindings` | phandle-array | List of sensor behaviors, one per sensor | From 5ecd3521f52bc08a811324d26f3b539cfeb2158c Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 6 Oct 2023 20:49:58 -0500 Subject: [PATCH 0839/1130] docs: Remove label property from documentation --- docs/blog/2020-10-03-bootloader-fix.md | 6 +++-- docs/blog/2021-01-27-zmk-sotf-4.md | 6 ++++- docs/blog/2022-04-02-zephyr-3-0.md | 7 +++--- docs/blog/2022-04-10-zmk-sotf-5.md | 5 +++- docs/blog/2023-06-18-encoder-refactors.md | 6 +++-- docs/blog/2023-10-05-zmk-sotf-6.md | 8 ++++--- docs/docs/behaviors/caps-word.md | 3 +-- docs/docs/behaviors/hold-tap.md | 10 +------- docs/docs/behaviors/macros.md | 3 --- docs/docs/behaviors/mod-morph.md | 2 -- docs/docs/behaviors/sensor-rotate.md | 4 +--- docs/docs/behaviors/sticky-key.md | 1 - docs/docs/behaviors/tap-dance.md | 2 -- docs/docs/config/battery.md | 6 ++--- docs/docs/config/behaviors.md | 25 +++++++------------ docs/docs/config/encoders.md | 1 - docs/docs/config/index.md | 1 - docs/docs/config/kscan.md | 29 +++++++++-------------- docs/docs/config/power.md | 1 - docs/docs/development/new-behavior.md | 1 - docs/docs/development/new-shield.md | 3 --- docs/docs/features/backlight.md | 1 - docs/docs/features/battery.md | 1 - docs/docs/features/underglow.md | 2 -- 24 files changed, 51 insertions(+), 83 deletions(-) diff --git a/docs/blog/2020-10-03-bootloader-fix.md b/docs/blog/2020-10-03-bootloader-fix.md index 435034cfbfb..aceee49012d 100644 --- a/docs/blog/2020-10-03-bootloader-fix.md +++ b/docs/blog/2020-10-03-bootloader-fix.md @@ -176,7 +176,6 @@ this to all of the `.dts` files for the boards that were affected by this issue. ```diff code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000d2000>; + reg = <0x00026000 0x000c6000>; }; @@ -184,7 +183,6 @@ this to all of the `.dts` files for the boards that were affected by this issue. - storage_partition: partition@f8000 { + storage_partition: partition@ec000 { - label = "storage"; - reg = <0x000f8000 0x00008000>; + reg = <0x000ec000 0x00008000>; }; @@ -193,3 +191,7 @@ this to all of the `.dts` files for the boards that were affected by this issue. And with those changes, we should no longer run into this issue! In the process of these changes, we lost 48KB of space for application code, but we're only using around 20% of it anyways. 🎉 + +## Article Updates + +- 12/2023: Removed the deprecated `label` property from code snippets. diff --git a/docs/blog/2021-01-27-zmk-sotf-4.md b/docs/blog/2021-01-27-zmk-sotf-4.md index fbb53e4031e..823c4c5fdca 100644 --- a/docs/blog/2021-01-27-zmk-sotf-4.md +++ b/docs/blog/2021-01-27-zmk-sotf-4.md @@ -98,7 +98,7 @@ There has been lots of work to get display support complete enough for use by en #### Highest Layer Display -[mcrosson] has contributed the next display widget, showing the highest active layer in the keymap. [petejohanson] then added a small follow up to allow layers in keymaps to add a `label` property to each layer, e.g. `label = "Nav";` and have that label be displayed in the widget instead of the numeric layer number. +[mcrosson] has contributed the next display widget, showing the highest active layer in the keymap. [petejohanson] then added a small follow up to allow layers in keymaps to add a `name` property to each layer, e.g. `name = "Nav";` and have that name be displayed in the widget instead of the numeric layer number. #### WPM @@ -192,3 +192,7 @@ Thanks again to the numerous contributors, testers, and users who have made work [petejohanson]: https://github.com/petejohanson [innovaker]: https://github.com/innovaker [joelspadin]: https://github.com/joelspadin + +## Article Updates + +- 12/2023: The `label` property for keymap layers was renamed to `display-name`. diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md index 6ec4c904f87..3b16b87ea78 100644 --- a/docs/blog/2022-04-02-zephyr-3-0.md +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -79,7 +79,6 @@ Zephyr's WS2812 `led_strip` driver added a new required property. When adding [u ```dts led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ @@ -115,7 +114,6 @@ For example, for a shield with: oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; - label = "SSD1306"; width = <128>; height = <32>; segment-offset = <0>; @@ -153,7 +151,6 @@ Underneath the USB device, add the CDC ACM node: status = "okay"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; - label = "CDC_ACM_0"; }; }; ``` @@ -226,3 +223,7 @@ This will also enable us to support the XIAO compatible Adafruit Qt Py RP2040 an Thanks to all the testers who have helped verify ZMK functionality on the newer Zephyr version. [petejohanson]: https://github.com/petejohanson + +## Article Updates + +- 12/2023: Removed the deprecated `label` property from code snippets. diff --git a/docs/blog/2022-04-10-zmk-sotf-5.md b/docs/blog/2022-04-10-zmk-sotf-5.md index 4ea62a31b87..43cb4e67209 100644 --- a/docs/blog/2022-04-10-zmk-sotf-5.md +++ b/docs/blog/2022-04-10-zmk-sotf-5.md @@ -55,7 +55,6 @@ a user taps a single key in their keymap, e.g. behaviors { td0: tap_dance_0 { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_0"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&kp N1>, <&kp N2>, <&kp N3>; @@ -263,3 +262,7 @@ As we approach the two year birthday for ZMK, I am reminded of how far we have c [joelspadin]: https://github.com/joelspadin [bcat]: https://github.com/bcat [dxmh]: https://github.com/dxmh + +## Article Updates + +- 12/2023: Removed the deprecated `label` property from code snippets. diff --git a/docs/blog/2023-06-18-encoder-refactors.md b/docs/blog/2023-06-18-encoder-refactors.md index 14be81c8700..db544d38bc8 100644 --- a/docs/blog/2023-06-18-encoder-refactors.md +++ b/docs/blog/2023-06-18-encoder-refactors.md @@ -38,7 +38,6 @@ Previously, an encoder configuration looked like: ```dts left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; @@ -61,7 +60,6 @@ That was the entirety of the configuration for encoders. ```dts left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; steps = <80>; @@ -117,3 +115,7 @@ The old configuration will be supported for a period of one month, and then remo [petejohanson]: https://github.com/petejohanson [joelspadin]: https://github.com/joelspadin + +## Article Updates + +- 12/2023: Removed the deprecated `label` property from code snippets. diff --git a/docs/blog/2023-10-05-zmk-sotf-6.md b/docs/blog/2023-10-05-zmk-sotf-6.md index 5aa1567a90a..fb8dc131d21 100644 --- a/docs/blog/2023-10-05-zmk-sotf-6.md +++ b/docs/blog/2023-10-05-zmk-sotf-6.md @@ -34,7 +34,6 @@ As an example, you can now define a mod-morph that swaps `;` and `:` so that the ```dts col_semi: colon_semicolon { compatible = "zmk,behavior-mod-morph"; - label = "COLON_SEMICOLON"; #binding-cells = <0>; bindings = <&kp COLON>, <&kp SEMI>; mods = <(MOD_LSFT|MOD_RSFT)>; @@ -48,9 +47,8 @@ As an example, you can now define a mod-morph that swaps `;` and `:` so that the As a simple example, you could define a macro that puts any keycode provided between double quotes as below, then use it like `&ql A` in your keymap: ```dts - ql: quoted_letter_macro { + ql: quoted_letter { #binding-cells = <1>; - label = "QUOTED_LETTER"; compatible = "zmk,behavior-macro-one-param"; bindings = <&kp DQT>, @@ -293,3 +291,7 @@ Also a big thank you to contributors that submit patches and perform reviews, te [urob]: https://github.com/urob [filterpaper]: https://github.com/filterpaper [ReFil]: https://github.com/ReFil + +## Article Updates + +- 12/2023: Removed the deprecated `label` property from code snippets. diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index 0233de526b6..77c8fd20d2a 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -59,9 +59,8 @@ If you want to use multiple caps breaks with different codes to break the caps, ```dts / { - prog_caps: behavior_prog_caps_word { + prog_caps: prog_caps { compatible = "zmk,behavior-caps-word"; - label = "PROG_CAPS"; #binding-cells = <0>; continue-list = ; }; diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 96e03a0e397..64fb9396c12 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -58,7 +58,6 @@ For example, the following hold-tap configuration enables `require-prior-idle-ms ```dts rpi: require_prior_idle { compatible = "zmk,behavior-hold-tap"; - label = "REQUIRE_PRIOR_IDLE"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; @@ -104,7 +103,6 @@ See the following example, which uses a hold-tap behavior definition, configured behaviors { pht: positional_hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "POSITIONAL_HOLD_TAP"; #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <400>; @@ -115,7 +113,6 @@ See the following example, which uses a hold-tap behavior definition, configured }; keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < // position 0 position 1 position 2 @@ -172,9 +169,8 @@ The following are suggested hold-tap configurations that work well with home row / { behaviors { - lh_pht: left_hand_positional_hold_tap { + lh_pht: left_positional_hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "LEFT_POSITIONAL_HOLD_TAP"; #binding-cells = <2>; flavor = "tap-unless-interrupted"; tapping-term-ms = <100>; // <---[[produces tap if held longer than tapping-term-ms]] @@ -206,7 +202,6 @@ The following are suggested hold-tap configurations that work well with home row behaviors { hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; - label = "HOMEROW_MODS"; #binding-cells = <2>; tapping-term-ms = <150>; quick-tap-ms = <0>; @@ -236,7 +231,6 @@ The following are suggested hold-tap configurations that work well with home row behaviors { bhm: balanced_homerow_mods { compatible = "zmk,behavior-hold-tap"; - label = "HOMEROW_MODS"; #binding-cells = <2>; tapping-term-ms = <200>; // <---[[moderate duration]] quick-tap-ms = <0>; @@ -272,7 +266,6 @@ A popular method of implementing Autoshift in ZMK involves a C-preprocessor macr behaviors { as: auto_shift { compatible = "zmk,behavior-hold-tap"; - label = "AUTO_SHIFT"; #binding-cells = <2>; tapping_term_ms = <135>; quick_tap_ms = <0>; @@ -308,7 +301,6 @@ This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) behaviors { mo_tog: behavior_mo_tog { compatible = "zmk,behavior-hold-tap"; - label = "mo_tog"; #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <200>; diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 7ce968e9b9a..37ca80ffbb5 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -18,7 +18,6 @@ A macro definition looks like: / { macros { zed_em_kay: zed_em_kay { - label = "ZM_zed_em_kay"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings @@ -239,7 +238,6 @@ To achieve this, a combination of a 0ms wait time and splitting the press and re * `&lm NUM_LAYER LSHIFT` */ lm: lm { - label = "LAYER_MOD"; compatible = "zmk,behavior-macro-two-param"; wait-ms = <0>; tap-ms = <0>; @@ -323,7 +321,6 @@ This can be used instead of a complete macro definition. During the firmware bui ```dts my_zero_param_macro: my_zero_param_macro { compatible = "zmk,behavior-macro"; - label = "ZM_my_macro"; #binding-cells = <0>; wait-ms = <30>; tap-ms = <40>; diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index 6099b4281fd..d5b3d589b71 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -23,7 +23,6 @@ An example of how to implement the mod-morph "Grave Escape": behaviors { gresc: grave_escape { compatible = "zmk,behavior-mod-morph"; - label = "GRAVE_ESCAPE"; #binding-cells = <0>; bindings = <&kp ESC>, <&kp GRAVE>; mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; @@ -79,7 +78,6 @@ For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into behaviors { bspc_del: backspace_delete { compatible = "zmk,behavior-mod-morph"; - label = "BACKSPACE_DELETE"; #binding-cells = <0>; bindings = <&kp BACKSPACE>, <&kp DELETE>; mods = <(MOD_LSFT|MOD_RSFT)>; diff --git a/docs/docs/behaviors/sensor-rotate.md b/docs/docs/behaviors/sensor-rotate.md index 3ff69dc6d02..f8476baeb70 100644 --- a/docs/docs/behaviors/sensor-rotate.md +++ b/docs/docs/behaviors/sensor-rotate.md @@ -24,7 +24,6 @@ Here is an example that binds the [RGB Underglow Behavior](/docs/behaviors/under behaviors { rgb_encoder: rgb_encoder { compatible = "zmk,behavior-sensor-rotate"; - label = "RGB_ENCODER"; #sensor-binding-cells = <0>; bindings = <&rgb_ug RGB_BRI>, <&rgb_ug RGB_BRD>; }; @@ -58,9 +57,8 @@ First, defining the sensor rotation itself, binding the [Key Press Behavior](/do ```dts / { behaviors { - rot_kp: behavior_sensor_rotate_kp { + rot_kp: sensor_rotate_kp { compatible = "zmk,behavior-sensor-rotate-var"; - label = "ENC_KP"; #sensor-binding-cells = <2>; bindings = <&kp>, <&kp>; }; diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index 8b003f55e39..f40bb521e10 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -61,7 +61,6 @@ This configuration would apply to all sticky keys. This may not be appropriate i behaviors { skq: sticky_key_quick_release { compatible = "zmk,behavior-sticky-key"; - label = "STICKY_KEY_QUICK_RELEASE"; #binding-cells = <1>; bindings = <&kp>; release-after-ms = <1000>; diff --git a/docs/docs/behaviors/tap-dance.md b/docs/docs/behaviors/tap-dance.md index ac85b3dab6f..1566cf18faa 100644 --- a/docs/docs/behaviors/tap-dance.md +++ b/docs/docs/behaviors/tap-dance.md @@ -45,7 +45,6 @@ This example configures a tap-dance named `td0` that outputs the number of times behaviors { td0: tap_dance_0 { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_0"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&kp N1>, <&kp N2>, <&kp N3>; @@ -86,7 +85,6 @@ This example configures a mod-tap inside a tap-dance named `td_mt` that outputs behaviors { td_mt: tap_dance_mod_tap { compatible = "zmk,behavior-tap-dance"; - label = "TAP_DANCE_MOD_TAP"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&mt LSHIFT CAPSLOCK>, <&kp LCTRL>; diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 8d65a00a039..50f16cfea7e 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -48,7 +48,7 @@ See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/late ## nRF VDDH Battery Sensor -Driver for reading the voltage of a battery using a Nordic nRF52's VDDH pin. This driver has no configuration except for the required `label` property. +Driver for reading the voltage of a battery using a Nordic nRF52's VDDH pin. ### Devicetree @@ -56,6 +56,4 @@ Applies to: `compatible = "zmk,battery-nrf-vddh"` Definition file: [zmk/app/module/dts/bindings/sensor/zmk,battery-nrf-vddh.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/sensor/zmk%2Cbattery-nrf-vddh.yaml) -| Property | Type | Description | -| -------- | ------ | ------------------------- | -| `label` | string | Unique label for the node | +This driver has no configuration. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index f3f1f563ec8..10096a41f63 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -29,12 +29,11 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml](ht Applies to: `compatible = "zmk,behavior-caps-word"` -| Property | Type | Description | Default | -| ---------------- | ------ | ------------------------------------------------------------------ | ------------------------------- | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<0>` | | -| `continue-list` | array | List of [key codes](/docs/codes) which do not deactivate caps lock | `` | -| `mods` | int | A bit field of modifiers to apply | `` | +| Property | Type | Description | Default | +| ---------------- | ----- | ------------------------------------------------------------------ | ------------------------------- | +| `#binding-cells` | int | Must be `<0>` | | +| `continue-list` | array | List of [key codes](/docs/codes) which do not deactivate caps lock | `` | +| `mods` | int | A bit field of modifiers to apply | `` | `continue-list` is treated as if it always includes alphanumeric characters (A-Z, 0-9). @@ -60,7 +59,6 @@ Applies to: `compatible = "zmk,behavior-hold-tap"` | Property | Type | Description | Default | | ---------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ------------------ | -| `label` | string | Unique label for the node | | | `#binding-cells` | int | Must be `<2>` | | | `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | | `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | @@ -100,11 +98,10 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-key-repeat.yaml](h Applies to: `compatible = "zmk,behavior-key-repeat"` -| Property | Type | Description | Default | -| ---------------- | ------ | -------------------------------- | ----------------- | -| `label` | string | Unique label for the node | | -| `#binding-cells` | int | Must be `<0>` | | -| `usage-pages` | array | List of HID usage pages to track | `` | +| Property | Type | Description | Default | +| ---------------- | ----- | -------------------------------- | ----------------- | +| `#binding-cells` | int | Must be `<0>` | | +| `usage-pages` | array | List of HID usage pages to track | `` | For the `usage-pages` property, use the `HID_USAGE_*` defines from [dt-bindings/zmk/hid_usage_pages.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/hid_usage_pages.h). @@ -133,7 +130,6 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml](https: | Property | Type | Description | Default | | ---------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | -| `label` | string | Unique label for the node | | | `compatible` | string | Macro type, **must be _one_ of**:
    • `"zmk,behavior-macro"`
    • `"zmk,behavior-macro-one-param"`
    • `"zmk,behavior-macro-two-param"` | | | `#binding-cells` | int | Number of params accepted (depends on `compatible` property), **must be _one_ of**:
    • `<0>`
    • `<1>`
    • `<2>` | | | `bindings` | phandle array | List of behaviors to trigger | | @@ -169,7 +165,6 @@ Applies to: `compatible = "zmk,behavior-mod-morph"` | Property | Type | Description | | ---------------- | ------------- | --------------------------------------------------------------------------------- | -| `label` | string | Unique label for the node | | `#binding-cells` | int | Must be `<0>` | | `bindings` | phandle array | A list of two behaviors: one for normal press and one for mod morphed press | | `mods` | int | A bit field of modifiers. The morph behavior is used if any of these are pressed. | @@ -196,7 +191,6 @@ Applies to: `compatible = "zmk,behavior-sticky-key"` | Property | Type | Description | Default | | ------------------ | ------------- | ------------------------------------------------------------------------ | ------- | -| `label` | string | Unique label for the node | | | `#binding-cells` | int | Must match the number of parameters the `bindings` behavior uses | | | `bindings` | phandle array | A behavior (without parameters) to trigger | | | `release-after-ms` | int | Releases the key after this many milliseconds if no other key is pressed | 1000 | @@ -222,7 +216,6 @@ Applies to: `compatible = "zmk,behavior-tap-dance"` | Property | Type | Description | Default | | ----------------- | ------------- | -------------------------------------------------------------------------------------------- | ------- | -| `label` | string | Unique label for the node | | | `#binding-cells` | int | Must be `<0>` | | | `bindings` | phandle array | A list of behaviors from which to select | | | `tapping-term-ms` | int | The maximum time (in milliseconds) between taps before an item from `bindings` is triggered. | 200 | diff --git a/docs/docs/config/encoders.md b/docs/docs/config/encoders.md index 3044b392943..b242f49b5ba 100644 --- a/docs/docs/config/encoders.md +++ b/docs/docs/config/encoders.md @@ -77,7 +77,6 @@ Definition file: [zmk/app/module/dts/bindings/sensor/alps,ec11.yaml](https://git | Property | Type | Description | Default | | --------- | ---------- | ---------------------------------------------- | ------- | -| `label` | string | Unique label for the node | | | `a-gpios` | GPIO array | GPIO connected to the encoder's A pin | | | `b-gpios` | GPIO array | GPIO connected to the encoder's B pin | | | `steps` | int | Number of encoder pulses per complete rotation | | diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 3d7aeb48bc2..d8a2aecffef 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -122,7 +122,6 @@ Devicetree files look like this: kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; }; }; ``` diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 00360c46978..96a483ff902 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -48,7 +48,6 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-demux.yaml](h | Property | Type | Description | Default | | ----------------------- | ---------- | -------------------------------- | ------- | -| `label` | string | Unique label for the node | | | `input-gpios` | GPIO array | Input GPIOs | | | `output-gpios` | GPIO array | Demultiplexer address GPIOs | | | `debounce-period` | int | Debounce period in milliseconds | 5 | @@ -74,7 +73,6 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml]( | Property | Type | Description | Default | | ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ------- | -| `label` | string | Unique label for the node | | | `input-gpios` | GPIO array | Input GPIOs (one per key) | | | `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | | `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | @@ -118,7 +116,6 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml]( | Property | Type | Description | Default | | ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ----------- | -| `label` | string | Unique label for the node | | | `row-gpios` | GPIO array | Matrix row GPIOs in order, starting from the top row | | | `col-gpios` | GPIO array | Matrix column GPIOs in order, starting from the leftmost row | | | `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | @@ -162,17 +159,15 @@ Applies to : `compatible = "zmk,kscan-composite"` Definition file: [zmk/app/dts/bindings/zmk,kscan-composite.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/zmk,kscan-composite.yaml) -| Property | Type | Description | Default | -| -------- | ------ | --------------------------------------------- | ------- | -| `label` | string | Unique label for the node | | -| `rows` | int | The number of rows in the composite matrix | | -| `cols` | int | The number of columns in the composite matrix | | +| Property | Type | Description | Default | +| -------- | ---- | --------------------------------------------- | ------- | +| `rows` | int | The number of rows in the composite matrix | | +| `cols` | int | The number of columns in the composite matrix | | The `zmk,kscan-composite` node should have one child node per keyboard scan driver that should be composited. Each child node can have the following properties: | Property | Type | Description | Default | | --------------- | ------- | ------------------------------------------------------------------------------ | ------- | -| `label` | string | Unique label for the node | | | `kscan` | phandle | Label of the kscan driver to include | | | `row-offset` | int | Shifts row 0 of the included driver to a new row in the composite matrix | 0 | | `column-offset` | int | Shifts column 0 of the included driver to a new column in the composite matrix | 0 | @@ -237,7 +232,6 @@ One possible way to do this is a 3x4 matrix where the direct GPIO keys are shift kscan0: kscan_composite { compatible = "zmk,kscan-composite"; - label = "KSCAN0"; rows = <4>; columns = <3>; @@ -275,14 +269,13 @@ Applies to: `compatible = "zmk,kscan-mock"` Definition file: [zmk/app/dts/bindings/zmk,kscan-mock.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/zmk%2Ckscan-mock.yaml) -| Property | Type | Description | Default | -| -------------- | ------ | --------------------------------------------- | ------- | -| `label` | string | Unique label for the node | | -| `event-period` | int | Milliseconds between each generated event | | -| `events` | array | List of key events to simulate | | -| `rows` | int | The number of rows in the composite matrix | | -| `cols` | int | The number of columns in the composite matrix | | -| `exit-after` | bool | Exit the program after running all events | false | +| Property | Type | Description | Default | +| -------------- | ----- | --------------------------------------------- | ------- | +| `event-period` | int | Milliseconds between each generated event | | +| `events` | array | List of key events to simulate | | +| `rows` | int | The number of rows in the composite matrix | | +| `cols` | int | The number of columns in the composite matrix | | +| `exit-after` | bool | Exit the program after running all events | false | The `events` array should be defined using the macros from [app/module/include/dt-bindings/zmk/kscan_mock.h](https://github.com/zmkfirmware/zmk/blob/main/app/module/include/dt-bindings/zmk/kscan_mock.h). diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index e09045ed09d..75e1b26ab8b 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -42,6 +42,5 @@ Applies to: `compatible = "zmk,ext-power-generic"` | Property | Type | Description | | --------------- | ---------- | ------------------------------------------------------------- | -| `label` | string | Unique label for the node | | `control-gpios` | GPIO array | List of GPIOs which should be active to enable external power | | `init-delay-ms` | int | number of milliseconds to delay after initializing the driver | diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index aab056c1a93..c0346132b6f 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -370,7 +370,6 @@ For the purpose of this section, we will discuss the structure of `app/dts/behav behaviors { /omit-if-no-ref/ gresc: grave_escape { compatible = "zmk,behavior-mod-morph"; - label = "GRAVE_ESCAPE"; #binding-cells = <0>; bindings = <&kp ESC>, <&kp GRAVE>; mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 7f6a8644e11..748cb9a241c 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -144,7 +144,6 @@ this might look something like: kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; col-gpios @@ -203,7 +202,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; diode-direction = "col2row"; row-gpios @@ -432,7 +430,6 @@ In your device tree file you will need to add the following lines to define the ```dts left_encoder: encoder_left { compatible = "alps,ec11"; - label = "LEFT_ENCODER"; a-gpios = ; b-gpios = ; steps = <80>; diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.md index 8a23a67af6a..eae4d2f9a2e 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.md @@ -242,7 +242,6 @@ Add each of your LEDs to the backlight node in the same manner as for one LED, u ```dts backlight: pwmleds { compatible = "pwm-leds"; - label = "Backlight LEDs"; pwm_led_0: pwm_led_0 { pwms = <&pwm0 0 PWM_MSEC(10) PWM_POLARITY_NORMAL>; }; diff --git a/docs/docs/features/battery.md b/docs/docs/features/battery.md index 8bf7820799c..4bfeb129994 100644 --- a/docs/docs/features/battery.md +++ b/docs/docs/features/battery.md @@ -34,7 +34,6 @@ Once you have the sensor driver defined, add a `zmk,battery` property to the `ch vbatt: vbatt { compatible = "zmk,battery-nrf-vddh"; - label = "VBATT"; }; } ``` diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index b5c4c70392e..13f0d8c71e6 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -98,7 +98,6 @@ Here's an example on a definition that uses P0.06: led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ @@ -142,7 +141,6 @@ Here's another example for a non-nRF52 board on `spi3`: led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; From 36eda571b77fb03e0af51caf4f5f1d2c7d43b3d5 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 18 Nov 2023 19:19:15 -0600 Subject: [PATCH 0840/1130] refactor(behaviors): Create a list to lookup behaviors Added BEHAVIOR_DT_DEFINE() and BEHAVIOR_DT_INST_DEFINE(), which work exactly like the DEVICE_*_DEFINE() macros, except they also register the device as a behavior by adding a pointer to it to a memory section. Added zmk_behavior_get_binding(), which works like device_get_binding() except that it only searches the devices that have been registered as behaviors. This ensures that behaviors cannot have name collisions with other devices defined by the SoC, which will be important when we remove the label property from behaviors so they are given their node names. As an added benefit, this is faster since it searches a smaller list. Some basic benchmark code I wrote indicates it takes 30-70% as long, depending on where the behavior is in the list and whether the name string is an exact pointer match. From now on, behaviors should use BEHAVIOR_*_DEFINe() instead of DEVICE_*_DEFINE(), and any code that looks up a behavior by name should use zmk_behavior_get_binding() instead of device_get_binding(). --- app/CMakeLists.txt | 2 + app/include/drivers/behavior.h | 50 ++++++++++++-- app/include/linker/zmk-behaviors.ld | 9 +++ app/include/zmk/behavior.h | 18 ++++- app/src/behavior.c | 69 +++++++++++++++++++ app/src/behaviors/behavior_backlight.c | 4 +- app/src/behaviors/behavior_bt.c | 4 +- app/src/behaviors/behavior_caps_word.c | 8 +-- app/src/behaviors/behavior_ext_power.c | 4 +- app/src/behaviors/behavior_hold_tap.c | 8 +-- app/src/behaviors/behavior_key_press.c | 4 +- app/src/behaviors/behavior_key_repeat.c | 10 +-- app/src/behaviors/behavior_key_toggle.c | 4 +- app/src/behaviors/behavior_macro.c | 10 +-- app/src/behaviors/behavior_mod_morph.c | 10 +-- app/src/behaviors/behavior_momentary_layer.c | 4 +- app/src/behaviors/behavior_mouse_key_press.c | 6 +- app/src/behaviors/behavior_none.c | 4 +- app/src/behaviors/behavior_outputs.c | 4 +- app/src/behaviors/behavior_reset.c | 8 +-- app/src/behaviors/behavior_rgb_underglow.c | 4 +- app/src/behaviors/behavior_sensor_rotate.c | 8 +-- .../behaviors/behavior_sensor_rotate_common.c | 4 +- .../behaviors/behavior_sensor_rotate_var.c | 2 +- app/src/behaviors/behavior_sticky_key.c | 8 +-- app/src/behaviors/behavior_tap_dance.c | 8 +-- app/src/behaviors/behavior_to_layer.c | 4 +- app/src/behaviors/behavior_toggle_layer.c | 4 +- app/src/behaviors/behavior_transparent.c | 4 +- app/src/keymap.c | 4 +- docs/docs/development/new-behavior.md | 34 ++++----- 31 files changed, 231 insertions(+), 93 deletions(-) create mode 100644 app/include/linker/zmk-behaviors.ld create mode 100644 app/src/behavior.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 41892915f13..433f2376b7b 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -15,6 +15,7 @@ list(APPEND ZEPHYR_EXTRA_MODULES find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) +zephyr_linker_sources(SECTIONS include/linker/zmk-behaviors.ld) zephyr_linker_sources(RODATA include/linker/zmk-events.ld) # Add your source file to the "app" target. This must come after @@ -22,6 +23,7 @@ zephyr_linker_sources(RODATA include/linker/zmk-events.ld) target_include_directories(app PRIVATE include) target_sources(app PRIVATE src/stdlib.c) target_sources(app PRIVATE src/activity.c) +target_sources(app PRIVATE src/behavior.c) target_sources(app PRIVATE src/kscan.c) target_sources(app PRIVATE src/matrix_transform.c) target_sources(app PRIVATE src/sensors.c) diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 066cc723ece..3936da5e4be 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -56,6 +56,46 @@ __subsystem struct behavior_driver_api { * @endcond */ +struct zmk_behavior_ref { + const struct device *device; +}; + +/** + * Registers @p node_id as a behavior. + */ +#define BEHAVIOR_DEFINE(node_id) \ + static const STRUCT_SECTION_ITERABLE(zmk_behavior_ref, \ + _CONCAT(zmk_behavior_, DEVICE_DT_NAME_GET(node_id))) = { \ + .device = DEVICE_DT_GET(node_id), \ + } + +/** + * @brief Like DEVICE_DT_DEFINE(), but also registers the device as a behavior. + * + * @param node_id The devicetree node identifier. + * @param ... Other parameters as expected by DEVICE_DT_DEFINE. + */ +#define BEHAVIOR_DT_DEFINE(node_id, ...) \ + DEVICE_DT_DEFINE(node_id, __VA_ARGS__); \ + BEHAVIOR_DEFINE(node_id) + +/** + * @brief Like DEVICE_DT_INST_DEFINE(), but also registers the device as a behavior. + * + * @param inst Instance number. + * @param ... Other parameters as expected by DEVICE_DT_DEFINE. + */ +#define BEHAVIOR_DT_INST_DEFINE(inst, ...) \ + DEVICE_DT_INST_DEFINE(inst, __VA_ARGS__); \ + BEHAVIOR_DEFINE(DT_DRV_INST(inst)) + +/** + * Syscall wrapper for zmk_behavior_get_binding(). + * + * Use zmk_behavior_get_binding() in application code instead. + */ +__syscall const struct device *behavior_get_binding(const char *name); + /** * @brief Handle the keymap binding which needs to be converted from relative "toggle" to absolute * "turn on" @@ -70,7 +110,7 @@ __syscall int behavior_keymap_binding_convert_central_state_dependent_params( static inline int z_impl_behavior_keymap_binding_convert_central_state_dependent_params( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->api; if (api->binding_convert_central_state_dependent_params == NULL) { @@ -116,7 +156,7 @@ __syscall int behavior_keymap_binding_pressed(struct zmk_behavior_binding *bindi static inline int z_impl_behavior_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); if (dev == NULL) { return -EINVAL; @@ -144,7 +184,7 @@ __syscall int behavior_keymap_binding_released(struct zmk_behavior_binding *bind static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); if (dev == NULL) { return -EINVAL; @@ -178,7 +218,7 @@ static inline int z_impl_behavior_sensor_keymap_binding_accept_data( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data *channel_data) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); if (dev == NULL) { return -EINVAL; @@ -214,7 +254,7 @@ static inline int z_impl_behavior_sensor_keymap_binding_process(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, enum behavior_sensor_binding_process_mode mode) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); if (dev == NULL) { return -EINVAL; diff --git a/app/include/linker/zmk-behaviors.ld b/app/include/linker/zmk-behaviors.ld new file mode 100644 index 00000000000..14ecee63c56 --- /dev/null +++ b/app/include/linker/zmk-behaviors.ld @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +ITERABLE_SECTION_ROM(zmk_behavior_ref, 4) diff --git a/app/include/zmk/behavior.h b/app/include/zmk/behavior.h index 31fb43edb35..ab95fd8e728 100644 --- a/app/include/zmk/behavior.h +++ b/app/include/zmk/behavior.h @@ -6,6 +6,8 @@ #pragma once +#include + #define ZMK_BEHAVIOR_OPAQUE 0 #define ZMK_BEHAVIOR_TRANSPARENT 1 @@ -19,4 +21,18 @@ struct zmk_behavior_binding_event { int layer; uint32_t position; int64_t timestamp; -}; \ No newline at end of file +}; + +/** + * @brief Get a const struct device* for a behavior from its @p name field. + * + * @param name Behavior name to search for. + * + * @retval Pointer to the device structure for the behavior with the given name. + * @retval NULL if the behavior is not found or its initialization function failed. + * + * @note This is equivalent to device_get_binding(), except it only searches + * behavior devices, so it is faster and there is no chance of it returning an + * unrelated node which shares the same name as a behavior. + */ +const struct device *zmk_behavior_get_binding(const char *name); diff --git a/app/src/behavior.c b/app/src/behavior.c new file mode 100644 index 00000000000..fd2b0ec1754 --- /dev/null +++ b/app/src/behavior.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +const struct device *zmk_behavior_get_binding(const char *name) { + return behavior_get_binding(name); +} + +const struct device *z_impl_behavior_get_binding(const char *name) { + if (name == NULL || name[0] == '\0') { + return NULL; + } + + STRUCT_SECTION_FOREACH(zmk_behavior_ref, item) { + if (z_device_is_ready(item->device) && item->device->name == name) { + return item->device; + } + } + + STRUCT_SECTION_FOREACH(zmk_behavior_ref, item) { + if (z_device_is_ready(item->device) && strcmp(item->device->name, name) == 0) { + return item->device; + } + } + + return NULL; +} + +#if IS_ENABLED(CONFIG_LOG) +static int check_behavior_names(const struct device *dev) { + ARG_UNUSED(dev); + + // Behavior names must be unique, but we don't have a good way to enforce this + // at compile time, so log an error at runtime if they aren't unique. + ptrdiff_t count; + STRUCT_SECTION_COUNT(zmk_behavior_ref, &count); + + for (ptrdiff_t i = 0; i < count; i++) { + const struct zmk_behavior_ref *current; + STRUCT_SECTION_GET(zmk_behavior_ref, i, ¤t); + + for (ptrdiff_t j = i + 1; j < count; j++) { + const struct zmk_behavior_ref *other; + STRUCT_SECTION_GET(zmk_behavior_ref, j, &other); + + if (strcmp(current->device->name, other->device->name) == 0) { + LOG_ERR("Multiple behaviors have the same name '%s'", current->device->name); + } + } + } + + return 0; +} + +SYS_INIT(check_behavior_names, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); +#endif // IS_ENABLED(CONFIG_LOG) diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index fe2155b7fd0..42967e398c3 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -91,7 +91,7 @@ static const struct behavior_driver_api behavior_backlight_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -DEVICE_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_backlight_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_backlight_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index bf98532ce93..18a626b9bae 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -52,7 +52,7 @@ static const struct behavior_driver_api behavior_bt_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 4c9fd71186d..53ea489f846 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -55,7 +55,7 @@ static void deactivate_caps_word(const struct device *dev) { static int on_caps_word_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior_caps_word_data *data = dev->data; if (data->active) { @@ -181,9 +181,9 @@ static int behavior_caps_word_init(const struct device *dev) { .continuations = {LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, (, ), n)}, \ .continuations_count = DT_INST_PROP_LEN(n, continue_list), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, NULL, &behavior_caps_word_data_##n, \ - &behavior_caps_word_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_caps_word_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_caps_word_init, NULL, &behavior_caps_word_data_##n, \ + &behavior_caps_word_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_caps_word_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index 690ac97175e..0af30b0081b 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -74,7 +74,7 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -DEVICE_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, APPLICATION, - CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, APPLICATION, + CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 26c190b6613..ea0448a4fd5 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -511,7 +511,7 @@ static void update_hold_status_for_retro_tap(uint32_t ignore_position) { static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_hold_tap_config *cfg = dev->config; if (undecided_hold_tap != NULL) { @@ -715,9 +715,9 @@ static int behavior_hold_tap_init(const struct device *dev) { .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_hold_tap_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 2765db9f3ca..5549b4b462b 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -36,7 +36,7 @@ static const struct behavior_driver_api behavior_key_press_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; #define KP_INST(n) \ - DEVICE_DT_INST_DEFINE(n, behavior_key_press_init, NULL, NULL, NULL, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_press_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_key_press_init, NULL, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index 033f498b875..85377f3faf3 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -32,7 +32,7 @@ struct behavior_key_repeat_data { static int on_key_repeat_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior_key_repeat_data *data = dev->data; if (data->last_keycode_pressed.usage_page == 0) { @@ -50,7 +50,7 @@ static int on_key_repeat_binding_pressed(struct zmk_behavior_binding *binding, static int on_key_repeat_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior_key_repeat_data *data = dev->data; if (data->current_keycode_pressed.usage_page == 0) { @@ -116,9 +116,9 @@ static int behavior_key_repeat_init(const struct device *dev) { .usage_pages = DT_INST_PROP(n, usage_pages), \ .usage_pages_count = DT_INST_PROP_LEN(n, usage_pages), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_key_repeat_init, NULL, &behavior_key_repeat_data_##n, \ - &behavior_key_repeat_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_repeat_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_key_repeat_init, NULL, &behavior_key_repeat_data_##n, \ + &behavior_key_repeat_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_repeat_driver_api); DT_INST_FOREACH_STATUS_OKAY(KR_INST) diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index cbbdd0d91ac..0ab1bd02362 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -38,7 +38,7 @@ static const struct behavior_driver_api behavior_key_toggle_driver_api = { }; #define KT_INST(n) \ - DEVICE_DT_INST_DEFINE(n, behavior_key_toggle_init, NULL, NULL, NULL, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_toggle_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_key_toggle_init, NULL, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_toggle_driver_api); DT_INST_FOREACH_STATUS_OKAY(KT_INST) diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index e6a789b6dc3..1cb76dbd1bc 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -184,7 +184,7 @@ static void queue_macro(uint32_t position, const struct zmk_behavior_binding bin static int on_macro_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_macro_config *cfg = dev->config; struct behavior_macro_state *state = dev->data; struct behavior_macro_trigger_state trigger_state = {.mode = MACRO_MODE_TAP, @@ -200,7 +200,7 @@ static int on_macro_binding_pressed(struct zmk_behavior_binding *binding, static int on_macro_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_macro_config *cfg = dev->config; struct behavior_macro_state *state = dev->data; @@ -224,9 +224,9 @@ static const struct behavior_driver_api behavior_macro_driver_api = { .default_tap_ms = DT_PROP_OR(inst, tap_ms, CONFIG_ZMK_MACRO_DEFAULT_TAP_MS), \ .count = DT_PROP_LEN(inst, bindings), \ .bindings = TRANSFORMED_BEHAVIORS(inst)}; \ - DEVICE_DT_DEFINE(inst, behavior_macro_init, NULL, &behavior_macro_state_##inst, \ - &behavior_macro_config_##inst, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); + BEHAVIOR_DT_DEFINE(inst, behavior_macro_init, NULL, &behavior_macro_state_##inst, \ + &behavior_macro_config_##inst, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); DT_FOREACH_STATUS_OKAY(zmk_behavior_macro, MACRO_INST) DT_FOREACH_STATUS_OKAY(zmk_behavior_macro_one_param, MACRO_INST) diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index f0832514122..176b0f696ec 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -36,7 +36,7 @@ struct behavior_mod_morph_data { static int on_mod_morph_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_mod_morph_config *cfg = dev->config; struct behavior_mod_morph_data *data = dev->data; @@ -56,7 +56,7 @@ static int on_mod_morph_binding_pressed(struct zmk_behavior_binding *binding, static int on_mod_morph_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior_mod_morph_data *data = dev->data; if (data->pressed_binding == NULL) { @@ -97,9 +97,9 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } (DT_INST_PROP(n, mods) & ~DT_INST_PROP(n, keep_mods))), \ }; \ static struct behavior_mod_morph_data behavior_mod_morph_data_##n = {}; \ - DEVICE_DT_INST_DEFINE(n, behavior_mod_morph_init, NULL, &behavior_mod_morph_data_##n, \ - &behavior_mod_morph_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mod_morph_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_mod_morph_init, NULL, &behavior_mod_morph_data_##n, \ + &behavior_mod_morph_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mod_morph_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index c2bd0ffcb98..94da6441e76 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -39,5 +39,5 @@ static const struct behavior_mo_config behavior_mo_config = {}; static struct behavior_mo_data behavior_mo_data; -DEVICE_DT_INST_DEFINE(0, behavior_mo_init, NULL, &behavior_mo_data, &behavior_mo_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mo_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_mo_init, NULL, &behavior_mo_data, &behavior_mo_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mo_driver_api); diff --git a/app/src/behaviors/behavior_mouse_key_press.c b/app/src/behaviors/behavior_mouse_key_press.c index 6718155768c..e79bb74771d 100644 --- a/app/src/behaviors/behavior_mouse_key_press.c +++ b/app/src/behaviors/behavior_mouse_key_press.c @@ -39,9 +39,9 @@ static const struct behavior_driver_api behavior_mouse_key_press_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; #define MKP_INST(n) \ - DEVICE_DT_INST_DEFINE(n, behavior_mouse_key_press_init, NULL, NULL, NULL, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_mouse_key_press_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_mouse_key_press_init, NULL, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_mouse_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(MKP_INST) diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 613ecbad7e6..57208f36ae1 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -33,7 +33,7 @@ static const struct behavior_driver_api behavior_none_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index 6ae81a0fdd7..1185aaabf2c 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -42,7 +42,7 @@ static const struct behavior_driver_api behavior_outputs_driver_api = { .binding_pressed = on_keymap_binding_pressed, }; -DEVICE_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index 0b983c84709..6a2731ecad4 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -25,7 +25,7 @@ static int behavior_reset_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_reset_config *cfg = dev->config; // TODO: Correct magic code for going into DFU? @@ -43,9 +43,9 @@ static const struct behavior_driver_api behavior_reset_driver_api = { #define RST_INST(n) \ static const struct behavior_reset_config behavior_reset_config_##n = { \ .type = DT_INST_PROP(n, type)}; \ - DEVICE_DT_INST_DEFINE(n, behavior_reset_init, NULL, NULL, &behavior_reset_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_reset_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_reset_init, NULL, NULL, &behavior_reset_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_reset_driver_api); DT_INST_FOREACH_STATUS_OKAY(RST_INST) diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 0af07f8146d..7a478eb781f 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -149,7 +149,7 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -DEVICE_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_rgb_underglow_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_rgb_underglow_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c index eb138fe23ab..f77beca188d 100644 --- a/app/src/behaviors/behavior_sensor_rotate.c +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -35,9 +35,9 @@ static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; .override_params = false, \ }; \ static struct behavior_sensor_rotate_data behavior_sensor_rotate_data_##n = {}; \ - DEVICE_DT_INST_DEFINE(n, behavior_sensor_rotate_init, NULL, &behavior_sensor_rotate_data_##n, \ - &behavior_sensor_rotate_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_sensor_rotate_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_sensor_rotate_init, NULL, \ + &behavior_sensor_rotate_data_##n, &behavior_sensor_rotate_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_sensor_rotate_driver_api); DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_INST) diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c index 98b4aec1267..94bf40c18d4 100644 --- a/app/src/behaviors/behavior_sensor_rotate_common.c +++ b/app/src/behaviors/behavior_sensor_rotate_common.c @@ -15,7 +15,7 @@ int zmk_behavior_sensor_rotate_common_accept_data( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data *channel_data) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior_sensor_rotate_data *data = dev->data; const struct sensor_value value = channel_data[0].value; @@ -58,7 +58,7 @@ int zmk_behavior_sensor_rotate_common_accept_data( int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, enum behavior_sensor_binding_process_mode mode) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_sensor_rotate_config *cfg = dev->config; struct behavior_sensor_rotate_data *data = dev->data; diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c index 8263a693813..0d3d22b29e0 100644 --- a/app/src/behaviors/behavior_sensor_rotate_var.c +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -26,7 +26,7 @@ static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; .override_params = true, \ }; \ static struct behavior_sensor_rotate_data behavior_sensor_rotate_var_data_##n = {}; \ - DEVICE_DT_INST_DEFINE( \ + BEHAVIOR_DT_INST_DEFINE( \ n, behavior_sensor_rotate_var_init, NULL, &behavior_sensor_rotate_var_data_##n, \ &behavior_sensor_rotate_var_config_##n, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_sensor_rotate_var_driver_api); diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 6697b9b1bbb..c6731d32040 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -129,7 +129,7 @@ static int stop_timer(struct active_sticky_key *sticky_key) { static int on_sticky_key_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_sticky_key_config *cfg = dev->config; struct active_sticky_key *sticky_key; sticky_key = find_sticky_key(event.position); @@ -293,9 +293,9 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; .ignore_modifiers = DT_INST_PROP(n, ignore_modifiers), \ .quick_release = DT_INST_PROP(n, quick_release), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_sticky_key_init, NULL, &behavior_sticky_key_data, \ - &behavior_sticky_key_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_sticky_key_init, NULL, &behavior_sticky_key_data, \ + &behavior_sticky_key_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index fc685124860..306d5ca760b 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -125,7 +125,7 @@ static inline int release_tap_dance_behavior(struct active_tap_dance *tap_dance, static int on_tap_dance_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { - const struct device *dev = device_get_binding(binding->behavior_dev); + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); const struct behavior_tap_dance_config *cfg = dev->config; struct active_tap_dance *tap_dance; tap_dance = find_tap_dance(event.position); @@ -250,9 +250,9 @@ static int behavior_tap_dance_init(const struct device *dev) { .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ .behaviors = behavior_tap_dance_config_##n##_bindings, \ .behavior_count = DT_INST_PROP_LEN(n, bindings)}; \ - DEVICE_DT_INST_DEFINE(n, behavior_tap_dance_init, NULL, NULL, &behavior_tap_dance_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_tap_dance_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_tap_dance_init, NULL, NULL, \ + &behavior_tap_dance_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index c05b83eab94..9a58bf602c7 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -37,7 +37,7 @@ static const struct behavior_driver_api behavior_to_driver_api = { .binding_released = to_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index 73a700eda5f..154cf9cdf40 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -43,7 +43,7 @@ static const struct behavior_tog_config behavior_tog_config = {}; static struct behavior_tog_data behavior_tog_data; -DEVICE_DT_INST_DEFINE(0, behavior_tog_init, NULL, &behavior_tog_data, &behavior_tog_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tog_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_tog_init, NULL, &behavior_tog_data, &behavior_tog_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tog_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index eeb2242db6b..ddf62ce0ae8 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -33,7 +33,7 @@ static const struct behavior_driver_api behavior_transparent_driver_api = { .binding_released = on_keymap_binding_released, }; -DEVICE_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); +BEHAVIOR_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/keymap.c b/app/src/keymap.c index f2aa3426854..d275feafbb5 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -176,7 +176,7 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, binding.behavior_dev); - behavior = device_get_binding(binding.behavior_dev); + behavior = zmk_behavior_get_binding(binding.behavior_dev); if (!behavior) { LOG_WRN("No behavior assigned to %d on layer %d", position, layer); @@ -256,7 +256,7 @@ int zmk_keymap_sensor_event(uint8_t sensor_index, LOG_DBG("layer: %d sensor_index: %d, binding name: %s", layer, sensor_index, binding->behavior_dev); - const struct device *behavior = device_get_binding(binding->behavior_dev); + const struct device *behavior = zmk_behavior_get_binding(binding->behavior_dev); if (!behavior) { LOG_DBG("No behavior assigned to %d on layer %d", sensor_index, layer); continue; diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index c0346132b6f..129ba324817 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -171,12 +171,12 @@ static const struct behavior_driver_api _driver_api = { }; -DEVICE_DT_INST_DEFINE(0, // Instance Number (Equal to 0 for behaviors that don't require multiple instances, - // Equal to n for behaviors that do make use of multiple instances) - _init, NULL, // Initialization Function, Power Management Device Pointer - &_data, &_config, // Behavior Data Pointer, Behavior Configuration Pointer (Both Optional) - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, // Initialization Level, Device Priority - &_driver_api); // API Structure +BEHAVIOR_DT_INST_DEFINE(0, // Instance Number (Equal to 0 for behaviors that don't require multiple instances, + // Equal to n for behaviors that do make use of multiple instances) + _init, NULL, // Initialization Function, Power Management Device Pointer + &_data, &_config, // Behavior Data Pointer, Behavior Configuration Pointer (Both Optional) + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, // Initialization Level, Device Priority + &_driver_api); // API Structure #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ @@ -244,13 +244,15 @@ Listeners, defined by the `ZMK_LISTENER(mod, cb)` function, take in a listener n - `ZMK_EVENT_RELEASE(ev)`: Continue handling this event (`ev`) at the next registered event listener. - `ZMK_EVENT_FREE(ev)`: Free the memory associated with the event (`ev`). -#### `DEVICE_DT_INST_DEFINE` +#### `BEHAVIOR_DT_INST_DEFINE` + +`BEHAVIOR_DT_INST_DEFINE` is a special ZMK macro. It forwards all the parameters to Zephyr's `DEVICE_DT_INST_DEFINE` macro to define the driver instance, then it adds the driver to a list of ZMK behaviors so they can be found by `zmk_behavior_get_binding()`. :::info For more information on this function, refer to [Zephyr's documentation on the Device Driver Model](https://docs.zephyrproject.org/latest/kernel/drivers/index.html#c.DEVICE_DT_INST_DEFINE). ::: -The example `DEVICE_DT_INST_DEFINE` call can be left as is with the first parameter, the instance number, equal to `0` for behaviors that only require a single instance (e.g. external power, backlighting, accessing layers). For behaviors that can have multiple instances (e.g. hold-taps, tap-dances, sticky-keys), `DEVICE_DT_INST_DEFINE` can be placed inside a `#define` statement, usually formatted as `#define _INST(n)`, that sets up any [data pointers](#data-pointers-optional) and/or [configuration pointers](#configuration-pointers-optional) that are unique to each instance. +The example `BEHAVIOR_DT_INST_DEFINE` call can be left as is with the first parameter, the instance number, equal to `0` for behaviors that only require a single instance (e.g. external power, backlighting, accessing layers). For behaviors that can have multiple instances (e.g. hold-taps, tap-dances, sticky-keys), `BEHAVIOR_DT_INST_DEFINE` can be placed inside a `#define` statement, usually formatted as `#define _INST(n)`, that sets up any [data pointers](#data-pointers-optional) and/or [configuration pointers](#configuration-pointers-optional) that are unique to each instance. An example of this can be seen below, taking the `#define KP_INST(n)` from the hold-tap driver. @@ -266,16 +268,16 @@ An example of this can be seen below, taking the `#define KP_INST(n)` from the h .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ - DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_hold_tap_driver_api); + BEHAVIOR_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) ``` Note that in the hold-tap example, the instance number, `0`, has been replaced by `n`, signifying the unique `node_id` of each instance of a behavior. Furthermore, the DT_INST_FOREACH_STATUS_OKAY(KP_INST) macro iterates through each compatible, non-disabled devicetree node, creating and applying the proper values to any instance-specific configurations or data by invoking the KP_INST macro for each instance of the new behavior. -Behaviors also require the following parameters of `DEVICE_DT_INST_DEFINE` to be changed: +Behaviors also require the following parameters of `BEHAVIOR_DT_INST_DEFINE` to be changed: ##### Initialization Function @@ -300,19 +302,19 @@ Comes in the form `static const struct behavior_driver_api _drive The data `struct` stores additional data required for **each new instance** of the behavior. Regardless of the instance number, `n`, `behavior__data_##n` is typically initialized as an empty `struct`. The data respective to each instance of the behavior can be accessed in functions like [`on__binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event)`](#dependencies) by extracting the behavior device from the keybind like so: ```c -const struct device *dev = device_get_binding(binding->behavior_dev); +const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior__data *data = dev->data; ``` The variables stored inside the data `struct`, `data`, can be then modified as necessary. -The fourth cell of `DEVICE_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific data is not required. +The fourth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific data is not required. ##### Configuration Pointers (Optional) -The configuration `struct` stores the properties declared from the behavior's `.yaml` for **each new instance** of the behavior. As seen in the `#define KP_INST(n)` of the hold-tap example, the configuration `struct`, `behavior__config_##n`, for each instance number, `n`, can be initialized using the [Zephyr Devicetree Instance-based APIs](https://docs.zephyrproject.org/latest/build/dts/api/api.html#instance-based-apis), which extract the values from the `properties` of each instance of the [devicetree binding](#creating-the-devicetree-binding-yaml) from a user's keymap or [predefined use-case `.dtsi` files](#defining-common-use-cases-for-the-behavior-dtsi-optional) stored in `app/dts/behaviors/`. We illustrate this further by comparing the [`#define KP_INST(n)` from the hold-tap driver](#device_dt_inst_define) and the [`properties` of the hold-tap devicetree binding.](#creating-the-devicetree-binding-yaml) +The configuration `struct` stores the properties declared from the behavior's `.yaml` for **each new instance** of the behavior. As seen in the `#define KP_INST(n)` of the hold-tap example, the configuration `struct`, `behavior__config_##n`, for each instance number, `n`, can be initialized using the [Zephyr Devicetree Instance-based APIs](https://docs.zephyrproject.org/latest/build/dts/api/api.html#instance-based-apis), which extract the values from the `properties` of each instance of the [devicetree binding](#creating-the-devicetree-binding-yaml) from a user's keymap or [predefined use-case `.dtsi` files](#defining-common-use-cases-for-the-behavior-dtsi-optional) stored in `app/dts/behaviors/`. We illustrate this further by comparing the [`#define KP_INST(n)` from the hold-tap driver](#behavior_dt_inst_define) and the [`properties` of the hold-tap devicetree binding.](#creating-the-devicetree-binding-yaml) -The fifth cell of `DEVICE_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific configurations are not required. +The fifth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific configurations are not required. :::caution Remember that `.c` files should be formatted according to `clang-format` to ensure that checks run smoothly once the pull request is submitted. From 23ecf081192959f66f5cc064ed81c69f2988e3e7 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 18 Nov 2023 00:47:01 -0600 Subject: [PATCH 0841/1130] refactor(behaviors)!: Remove labels from behaviors Removed the label property from built-in behaviors, custom behaviors defined in a few keymaps, and macros generated with ZMK_MACRO(). Now that node names are used to identify behaviors, and names only need to be unique within the set of behaviors, the names of all behaviors have been shortened to be similar to their original labels. This means that any keymaps which reference behavior nodes by name instead of by label will need to be updated. Keymaps typically use the labels though, so most keymaps should be unaffected by this change. --- app/boards/arm/ferris/ferris_rev02.keymap | 1 - app/boards/shields/cradio/cradio.keymap | 1 - .../shields/hummingbird/hummingbird.keymap | 1 - app/boards/shields/lotus58/lotus58.keymap | 3 --- app/boards/shields/qaz/qaz.keymap | 1 - app/boards/shields/tg4x/tg4x.keymap | 1 - app/dts/behaviors/backlight.dtsi | 4 ++-- app/dts/behaviors/bluetooth.dtsi | 3 +-- app/dts/behaviors/caps_word.dtsi | 3 +-- app/dts/behaviors/ext_power.dtsi | 4 ++-- app/dts/behaviors/gresc.dtsi | 1 - app/dts/behaviors/key_press.dtsi | 3 +-- app/dts/behaviors/key_repeat.dtsi | 3 +-- app/dts/behaviors/key_toggle.dtsi | 3 +-- app/dts/behaviors/layer_tap.dtsi | 3 +-- app/dts/behaviors/macros.dtsi | 24 ++++--------------- app/dts/behaviors/mod_tap.dtsi | 3 +-- app/dts/behaviors/momentary_layer.dtsi | 3 +-- app/dts/behaviors/none.dtsi | 3 +-- app/dts/behaviors/outputs.dtsi | 3 +-- app/dts/behaviors/reset.dtsi | 8 +++---- app/dts/behaviors/rgb_underglow.dtsi | 4 ++-- .../behaviors/sensor_rotate_key_press.dtsi | 3 +-- app/dts/behaviors/sticky_key.dtsi | 6 ++--- app/dts/behaviors/to_layer.dtsi | 3 +-- app/dts/behaviors/toggle_layer.dtsi | 3 +-- app/dts/behaviors/transparent.dtsi | 3 +-- app/src/behaviors/behavior_sticky_key.c | 4 +++- .../macros/basic/keycode_events.snapshot | 12 +++++----- .../press-mid-macro/keycode_events.snapshot | 8 +++---- .../timing-override/keycode_events.snapshot | 12 +++++----- .../keycode_events.snapshot | 8 +++---- 32 files changed, 54 insertions(+), 91 deletions(-) diff --git a/app/boards/arm/ferris/ferris_rev02.keymap b/app/boards/arm/ferris/ferris_rev02.keymap index 18fad42328e..dc298ec8d52 100644 --- a/app/boards/arm/ferris/ferris_rev02.keymap +++ b/app/boards/arm/ferris/ferris_rev02.keymap @@ -20,7 +20,6 @@ behaviors { hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; - label = "homerow mods"; #binding-cells = <2>; tapping_term_ms = <200>; flavor = "tap-preferred"; diff --git a/app/boards/shields/cradio/cradio.keymap b/app/boards/shields/cradio/cradio.keymap index 47bf0422a5a..ab4591babb6 100644 --- a/app/boards/shields/cradio/cradio.keymap +++ b/app/boards/shields/cradio/cradio.keymap @@ -12,7 +12,6 @@ / { behaviors { ht: hold_tap { - label = "hold_tap"; compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "tap-preferred"; diff --git a/app/boards/shields/hummingbird/hummingbird.keymap b/app/boards/shields/hummingbird/hummingbird.keymap index 7a7171e8fb7..9f1a24c2d03 100644 --- a/app/boards/shields/hummingbird/hummingbird.keymap +++ b/app/boards/shields/hummingbird/hummingbird.keymap @@ -19,7 +19,6 @@ behaviors { hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; - label = "homerow mods"; #binding-cells = <2>; tapping_term_ms = <225>; flavor = "tap-preferred"; diff --git a/app/boards/shields/lotus58/lotus58.keymap b/app/boards/shields/lotus58/lotus58.keymap index fae463c92a8..e9846e81798 100644 --- a/app/boards/shields/lotus58/lotus58.keymap +++ b/app/boards/shields/lotus58/lotus58.keymap @@ -23,21 +23,18 @@ behaviors { fofunc: four_ffour { compatible = "zmk,behavior-mod-morph"; - label = "FOUR_FUNCFOUR"; #binding-cells = <0>; bindings = <&kp N4>, <&kp F4>; mods = <(MOD_LALT|MOD_RALT)>; }; sleft: s_left { compatible = "zmk,behavior-mod-morph"; - label = "S_LEFT"; #binding-cells = <0>; bindings = <&kp S>, <&kp LEFT>; mods = <(MOD_LGUI|MOD_RGUI)>; }; fright: f_right { compatible = "zmk,behavior-mod-morph"; - label = "R_RIGHT"; #binding-cells = <0>; bindings = <&kp F>, <&kp RIGHT>; mods = <(MOD_LGUI|MOD_RGUI)>; diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap index e6794e7bcee..c887fb03329 100644 --- a/app/boards/shields/qaz/qaz.keymap +++ b/app/boards/shields/qaz/qaz.keymap @@ -16,7 +16,6 @@ behaviors { hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; - label = "homerow mods"; #binding-cells = <2>; tapping-term-ms = <225>; flavor = "tap-preferred"; diff --git a/app/boards/shields/tg4x/tg4x.keymap b/app/boards/shields/tg4x/tg4x.keymap index 89a478ae52a..5c71ae5c91c 100644 --- a/app/boards/shields/tg4x/tg4x.keymap +++ b/app/boards/shields/tg4x/tg4x.keymap @@ -12,7 +12,6 @@ behaviors { ht: hold_tap { compatible = "zmk,behavior-hold-tap"; - label = "Hold Tap"; #binding-cells = <2>; tapping-term-ms = <200>; flavor = "tap-preferred"; diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi index bebd6dfbf54..54c83ff44c1 100644 --- a/app/dts/behaviors/backlight.dtsi +++ b/app/dts/behaviors/backlight.dtsi @@ -6,9 +6,9 @@ / { behaviors { - /omit-if-no-ref/ bl: behavior_backlight { + // Behavior can be invoked on peripherals, so name must be <= 8 characters. + /omit-if-no-ref/ bl: bcklight { compatible = "zmk,behavior-backlight"; - label = "BCKLGHT"; #binding-cells = <2>; }; }; diff --git a/app/dts/behaviors/bluetooth.dtsi b/app/dts/behaviors/bluetooth.dtsi index a49ff4d6f30..40557b7a28c 100644 --- a/app/dts/behaviors/bluetooth.dtsi +++ b/app/dts/behaviors/bluetooth.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ bt: behavior_bluetooth { + /omit-if-no-ref/ bt: bluetooth { compatible = "zmk,behavior-bluetooth"; - label = "BLUETOOTH"; #binding-cells = <2>; }; }; diff --git a/app/dts/behaviors/caps_word.dtsi b/app/dts/behaviors/caps_word.dtsi index 219300dc282..795fbc08439 100644 --- a/app/dts/behaviors/caps_word.dtsi +++ b/app/dts/behaviors/caps_word.dtsi @@ -8,9 +8,8 @@ / { behaviors { - /omit-if-no-ref/ caps_word: behavior_caps_word { + /omit-if-no-ref/ caps_word: caps_word { compatible = "zmk,behavior-caps-word"; - label = "CAPS_WORD"; #binding-cells = <0>; continue-list = ; }; diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index f61170dd5f3..2ae1daf84a8 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -6,9 +6,9 @@ / { behaviors { - ext_power: behavior_ext_power { + // Behavior can be invoked on peripherals, so name must be <= 8 characters. + ext_power: extpower { compatible = "zmk,behavior-ext-power"; - label = "EXTPOWER"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/gresc.dtsi b/app/dts/behaviors/gresc.dtsi index fa4c685b7df..59a7329178f 100644 --- a/app/dts/behaviors/gresc.dtsi +++ b/app/dts/behaviors/gresc.dtsi @@ -10,7 +10,6 @@ behaviors { /omit-if-no-ref/ gresc: grave_escape { compatible = "zmk,behavior-mod-morph"; - label = "GRAVE_ESCAPE"; #binding-cells = <0>; bindings = <&kp ESC>, <&kp GRAVE>; mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; diff --git a/app/dts/behaviors/key_press.dtsi b/app/dts/behaviors/key_press.dtsi index b0fc2db1017..ddaf7eed374 100644 --- a/app/dts/behaviors/key_press.dtsi +++ b/app/dts/behaviors/key_press.dtsi @@ -7,9 +7,8 @@ / { behaviors { /* DEPRECATED: `cp` will be removed in the future */ - /omit-if-no-ref/ cp: kp: behavior_key_press { + /omit-if-no-ref/ cp: kp: key_press { compatible = "zmk,behavior-key-press"; - label = "KEY_PRESS"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/key_repeat.dtsi b/app/dts/behaviors/key_repeat.dtsi index 795a77f6210..88910f6271c 100644 --- a/app/dts/behaviors/key_repeat.dtsi +++ b/app/dts/behaviors/key_repeat.dtsi @@ -8,9 +8,8 @@ / { behaviors { - /omit-if-no-ref/ key_repeat: behavior_key_repeat { + /omit-if-no-ref/ key_repeat: key_repeat { compatible = "zmk,behavior-key-repeat"; - label = "KEY_REPEAT"; #binding-cells = <0>; usage-pages = ; }; diff --git a/app/dts/behaviors/key_toggle.dtsi b/app/dts/behaviors/key_toggle.dtsi index df581014e08..a3e3f36f270 100644 --- a/app/dts/behaviors/key_toggle.dtsi +++ b/app/dts/behaviors/key_toggle.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ kt: behavior_key_toggle { + /omit-if-no-ref/ kt: key_toggle { compatible = "zmk,behavior-key-toggle"; - label = "KEY_TOGGLE"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/layer_tap.dtsi b/app/dts/behaviors/layer_tap.dtsi index 1d92245c643..dc953e9358b 100644 --- a/app/dts/behaviors/layer_tap.dtsi +++ b/app/dts/behaviors/layer_tap.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ lt: behavior_layer_tap { + /omit-if-no-ref/ lt: layer_tap { compatible = "zmk,behavior-hold-tap"; - label = "LAYER_TAP"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; diff --git a/app/dts/behaviors/macros.dtsi b/app/dts/behaviors/macros.dtsi index 36b4a8d33f3..44bc7ab777f 100644 --- a/app/dts/behaviors/macros.dtsi +++ b/app/dts/behaviors/macros.dtsi @@ -5,10 +5,8 @@ */ #define MACRO_PLACEHOLDER 0 -#define ZMK_MACRO_STRINGIFY(x) #x #define ZMK_MACRO(name,...) \ name: name { \ - label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ compatible = "zmk,behavior-macro"; \ #binding-cells = <0>; \ __VA_ARGS__ \ @@ -16,7 +14,6 @@ name: name { \ #define ZMK_MACRO1(name,...) \ name: name { \ - label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ compatible = "zmk,behavior-macro-one-param"; \ #binding-cells = <1>; \ __VA_ARGS__ \ @@ -24,7 +21,6 @@ name: name { \ #define ZMK_MACRO2(name,...) \ name: name { \ - label = ZMK_MACRO_STRINGIFY(ZM_ ## name); \ compatible = "zmk,behavior-macro-two-param"; \ #binding-cells = <2>; \ __VA_ARGS__ \ @@ -32,63 +28,53 @@ name: name { \ / { behaviors { - macro_tap: macro_control_mode_tap { + macro_tap: macro_tap { compatible = "zmk,macro-control-mode-tap"; - label = "MAC_TAP"; #binding-cells = <0>; }; - macro_press: macro_control_mode_press { + macro_press: macro_press { compatible = "zmk,macro-control-mode-press"; - label = "MAC_PRESS"; #binding-cells = <0>; }; - macro_release: macro_control_mode_release { + macro_release: macro_release { compatible = "zmk,macro-control-mode-release"; - label = "MAC_REL"; #binding-cells = <0>; }; - macro_tap_time: macro_control_tap_time { + macro_tap_time: macro_tap_time { compatible = "zmk,macro-control-tap-time"; - label = "MAC_TAP_TIME"; #binding-cells = <1>; }; - macro_wait_time: macro_control_wait_time { + macro_wait_time: macro_wait_time { compatible = "zmk,macro-control-wait-time"; - label = "MAC_WAIT_TIME"; #binding-cells = <1>; }; macro_pause_for_release: macro_pause_for_release { compatible = "zmk,macro-pause-for-release"; - label = "MAC_WAIT_REL"; #binding-cells = <0>; }; macro_param_1to1: macro_param_1to1 { compatible = "zmk,macro-param-1to1"; - label = "MAC_PARAM_1TO1"; #binding-cells = <0>; }; macro_param_1to2: macro_param_1to2 { compatible = "zmk,macro-param-1to2"; - label = "MAC_PARAM_1TO2"; #binding-cells = <0>; }; macro_param_2to1: macro_param_2to1 { compatible = "zmk,macro-param-2to1"; - label = "MAC_PARAM_2TO1"; #binding-cells = <0>; }; macro_param_2to2: macro_param_2to2 { compatible = "zmk,macro-param-2to2"; - label = "MAC_PARAM_2TO2"; #binding-cells = <0>; }; }; diff --git a/app/dts/behaviors/mod_tap.dtsi b/app/dts/behaviors/mod_tap.dtsi index d441a4f1157..38bb34fe5c4 100644 --- a/app/dts/behaviors/mod_tap.dtsi +++ b/app/dts/behaviors/mod_tap.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ mt: behavior_mod_tap { + /omit-if-no-ref/ mt: mod_tap { compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; #binding-cells = <2>; flavor = "hold-preferred"; tapping-term-ms = <200>; diff --git a/app/dts/behaviors/momentary_layer.dtsi b/app/dts/behaviors/momentary_layer.dtsi index d1c91232f1d..6d85165dbb3 100644 --- a/app/dts/behaviors/momentary_layer.dtsi +++ b/app/dts/behaviors/momentary_layer.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ mo: behavior_momentary_layer { + /omit-if-no-ref/ mo: momentary_layer { compatible = "zmk,behavior-momentary-layer"; - label = "MO"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/none.dtsi b/app/dts/behaviors/none.dtsi index fc4890c3911..13d056f0cf2 100644 --- a/app/dts/behaviors/none.dtsi +++ b/app/dts/behaviors/none.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ none: behavior_none { + /omit-if-no-ref/ none: none { compatible = "zmk,behavior-none"; - label = "NONE"; #binding-cells = <0>; }; }; diff --git a/app/dts/behaviors/outputs.dtsi b/app/dts/behaviors/outputs.dtsi index 88e8f88275f..f7737196719 100644 --- a/app/dts/behaviors/outputs.dtsi +++ b/app/dts/behaviors/outputs.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ out: behavior_outputs { + /omit-if-no-ref/ out: outputs { compatible = "zmk,behavior-outputs"; - label = "OUTPUTS"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index 2e775269aff..e407b107b90 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -8,15 +8,15 @@ / { behaviors { - sys_reset: behavior_reset { + // Behavior can be invoked on peripherals, so name must be <= 8 characters. + sys_reset: sysreset { compatible = "zmk,behavior-reset"; - label = "SYSRESET"; #binding-cells = <0>; }; - bootloader: behavior_reset_dfu { + // Behavior can be invoked on peripherals, so name must be <= 8 characters. + bootloader: bootload { compatible = "zmk,behavior-reset"; - label = "BOOTLOAD"; type = ; #binding-cells = <0>; }; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index 6ffec2e6767..969518a6ff3 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -6,9 +6,9 @@ / { behaviors { - rgb_ug: behavior_rgb_underglow { + // Behavior can be invoked on peripherals, so name must be <= 8 characters. + rgb_ug: rgb_ug { compatible = "zmk,behavior-rgb-underglow"; - label = "RGB_UG"; #binding-cells = <2>; }; }; diff --git a/app/dts/behaviors/sensor_rotate_key_press.dtsi b/app/dts/behaviors/sensor_rotate_key_press.dtsi index dc30b7989b7..d9bdbfe543b 100644 --- a/app/dts/behaviors/sensor_rotate_key_press.dtsi +++ b/app/dts/behaviors/sensor_rotate_key_press.dtsi @@ -7,9 +7,8 @@ / { behaviors { /* DEPRECATED: `inc_dec_cp` will be removed in the future */ - /omit-if-no-ref/ inc_dec_cp: inc_dec_kp: behavior_sensor_rotate_key_press { + /omit-if-no-ref/ inc_dec_cp: inc_dec_kp: enc_key_press { compatible = "zmk,behavior-sensor-rotate-var"; - label = "ENC_KEY_PRESS"; #sensor-binding-cells = <2>; bindings = <&kp>, <&kp>; }; diff --git a/app/dts/behaviors/sticky_key.dtsi b/app/dts/behaviors/sticky_key.dtsi index 72a80a903a1..c8973d4df2c 100644 --- a/app/dts/behaviors/sticky_key.dtsi +++ b/app/dts/behaviors/sticky_key.dtsi @@ -6,17 +6,15 @@ / { behaviors { - /omit-if-no-ref/ sk: behavior_sticky_key { + /omit-if-no-ref/ sk: sticky_key { compatible = "zmk,behavior-sticky-key"; - label = "STICKY_KEY"; #binding-cells = <1>; release-after-ms = <1000>; bindings = <&kp>; ignore-modifiers; }; - /omit-if-no-ref/ sl: behavior_sticky_layer { + /omit-if-no-ref/ sl: sticky_layer { compatible = "zmk,behavior-sticky-key"; - label = "STICKY_LAYER"; #binding-cells = <1>; release-after-ms = <1000>; bindings = <&mo>; diff --git a/app/dts/behaviors/to_layer.dtsi b/app/dts/behaviors/to_layer.dtsi index 0ea66fa9e3b..904f023da53 100644 --- a/app/dts/behaviors/to_layer.dtsi +++ b/app/dts/behaviors/to_layer.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ to: behavior_to_layer { + /omit-if-no-ref/ to: to_layer { compatible = "zmk,behavior-to-layer"; - label = "TO_LAYER"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/toggle_layer.dtsi b/app/dts/behaviors/toggle_layer.dtsi index 75730934e49..05f2988e08c 100644 --- a/app/dts/behaviors/toggle_layer.dtsi +++ b/app/dts/behaviors/toggle_layer.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ tog: behavior_toggle_layer { + /omit-if-no-ref/ tog: toggle_layer { compatible = "zmk,behavior-toggle-layer"; - label = "TOGGLE_LAYER"; #binding-cells = <1>; }; }; diff --git a/app/dts/behaviors/transparent.dtsi b/app/dts/behaviors/transparent.dtsi index 0dfaade29ca..3586f02afab 100644 --- a/app/dts/behaviors/transparent.dtsi +++ b/app/dts/behaviors/transparent.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ trans: behavior_transparent { + /omit-if-no-ref/ trans: transparent { compatible = "zmk,behavior-transparent"; - label = "TRANS"; #binding-cells = <0>; }; }; diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index c6731d32040..67f7728628e 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -24,6 +24,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#define KEY_PRESS DEVICE_DT_NAME(DT_INST(0, zmk_behavior_key_press)) + #define ZMK_BHV_STICKY_KEY_MAX_HELD 10 #define ZMK_BHV_STICKY_KEY_POSITION_FREE UINT32_MAX @@ -202,7 +204,7 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { continue; } - if (strcmp(sticky_key->config->behavior.behavior_dev, "KEY_PRESS") == 0 && + if (strcmp(sticky_key->config->behavior.behavior_dev, KEY_PRESS) == 0 && ZMK_HID_USAGE_ID(sticky_key->param1) == ev_copy.keycode && ZMK_HID_USAGE_PAGE(sticky_key->param1) == ev_copy.usage_page && SELECT_MODS(sticky_key->param1) == ev_copy.implicit_modifiers) { diff --git a/app/tests/macros/basic/keycode_events.snapshot b/app/tests/macros/basic/keycode_events.snapshot index b238a2fff23..5639f1d73b0 100644 --- a/app/tests/macros/basic/keycode_events.snapshot +++ b/app/tests/macros/basic/keycode_events.snapshot @@ -1,18 +1,18 @@ -queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +queue_process_next: Invoking key_press: 0x70004 0x00 kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms -queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +queue_process_next: Invoking key_press: 0x70004 0x00 kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms -queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +queue_process_next: Invoking key_press: 0x70005 0x00 kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms -queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +queue_process_next: Invoking key_press: 0x70005 0x00 kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms -queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +queue_process_next: Invoking key_press: 0x70006 0x00 kp_pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms -queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +queue_process_next: Invoking key_press: 0x70006 0x00 kp_released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms diff --git a/app/tests/macros/press-mid-macro/keycode_events.snapshot b/app/tests/macros/press-mid-macro/keycode_events.snapshot index 22393a3ad63..0ec7ccb3cd6 100644 --- a/app/tests/macros/press-mid-macro/keycode_events.snapshot +++ b/app/tests/macros/press-mid-macro/keycode_events.snapshot @@ -1,8 +1,8 @@ -pos_state: layer: 0 position: 0, binding name: ZM_abc_macro +pos_state: layer: 0 position: 0, binding name: abc_macro kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -pos_state: layer: 0 position: 0, binding name: ZM_abc_macro -pos_state: layer: 0 position: 1, binding name: MO -pos_state: layer: 0 position: 1, binding name: MO +pos_state: layer: 0 position: 0, binding name: abc_macro +pos_state: layer: 0 position: 1, binding name: momentary_layer +pos_state: layer: 0 position: 1, binding name: momentary_layer kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/macros/timing-override/keycode_events.snapshot b/app/tests/macros/timing-override/keycode_events.snapshot index 0ff45904b25..e275cf9b39f 100644 --- a/app/tests/macros/timing-override/keycode_events.snapshot +++ b/app/tests/macros/timing-override/keycode_events.snapshot @@ -1,18 +1,18 @@ -queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +queue_process_next: Invoking key_press: 0x70004 0x00 kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 30ms -queue_process_next: Invoking KEY_PRESS: 0x70004 0x00 +queue_process_next: Invoking key_press: 0x70004 0x00 kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms -queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +queue_process_next: Invoking key_press: 0x70005 0x00 kp_pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 20ms -queue_process_next: Invoking KEY_PRESS: 0x70005 0x00 +queue_process_next: Invoking key_press: 0x70005 0x00 kp_released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms -queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +queue_process_next: Invoking key_press: 0x70006 0x00 kp_pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 20ms -queue_process_next: Invoking KEY_PRESS: 0x70006 0x00 +queue_process_next: Invoking key_press: 0x70006 0x00 kp_released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 50ms diff --git a/app/tests/macros/wait-macro-release/keycode_events.snapshot b/app/tests/macros/wait-macro-release/keycode_events.snapshot index 21d47a29991..abe9791f701 100644 --- a/app/tests/macros/wait-macro-release/keycode_events.snapshot +++ b/app/tests/macros/wait-macro-release/keycode_events.snapshot @@ -1,16 +1,16 @@ qm: Iterating macro bindings - starting: 0, count: 4 -queue_process_next: Invoking KEY_PRESS: 0x700e2 0x00 +queue_process_next: Invoking key_press: 0x700e2 0x00 kp_pressed: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms -queue_process_next: Invoking KEY_PRESS: 0x7002b 0x00 +queue_process_next: Invoking key_press: 0x7002b 0x00 kp_pressed: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 40ms -queue_process_next: Invoking KEY_PRESS: 0x7002b 0x00 +queue_process_next: Invoking key_press: 0x7002b 0x00 kp_released: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 10ms kp_pressed: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 kp_released: usage_page 0x07 keycode 0x2B implicit_mods 0x00 explicit_mods 0x00 qm: Iterating macro bindings - starting: 5, count: 2 -queue_process_next: Invoking KEY_PRESS: 0x700e2 0x00 +queue_process_next: Invoking key_press: 0x700e2 0x00 kp_released: usage_page 0x07 keycode 0xE2 implicit_mods 0x00 explicit_mods 0x00 queue_process_next: Processing next queued behavior in 0ms From 0fd8e25807b15eaac8edf818d46be8d004885f62 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 18 Nov 2023 19:49:49 -0600 Subject: [PATCH 0842/1130] docs: Document behavior name length limit Added a section to the new behavior guide to document that the names of behaviors invoked on the peripheral side of a split must be at most 8 characters long. --- docs/docs/development/new-behavior.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index 129ba324817..59872963f10 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -380,7 +380,20 @@ For the purpose of this section, we will discuss the structure of `app/dts/behav }; ``` -The format of a behavior's `.dtsi` file is identical to declaring an instance of the behavior in a user's keymap. The only major difference is that the value `/omit-if-no-ref/` should be placed adjacent to the name of the behavior, as seen in line 11 of the `gresc` example. +The format of a behavior's `.dtsi` file is identical to declaring an instance of the behavior in a user's keymap. The only major difference is that the value `/omit-if-no-ref/` should be placed adjacent to the label and name of the behavior, as seen in line 11 of the `gresc` example. + +:::caution + +If your behavior has its [`locality`](#api-structure) property set to anything other than `BEHAVIOR_LOCALITY_CENTRAL`, then the name of the node must be at most 8 characters long, or it will fail to be invoked on the peripheral half of a split keyboard. + +In the above example, `grave_escape` is too long, so it would need to be shortened, e.g. + +```dts +// Behavior can be invoked on peripherals, so name must be <= 8 characters. +/omit-if-no-ref/ gresc: gresc { ... }; +``` + +::: After creating the `.dtsi` from above, update `app/dts/behaviors.dtsi` to include your newly predefined behavior instance, making it accessible by the devicetree. From 17a6f0b1285030d2d2b5a7d5197a91ec0aae7aff Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Mon, 4 Dec 2023 18:31:42 -0600 Subject: [PATCH 0843/1130] refactor: Remove new uses of label property Removed new uses of the "label" property which were introduced after the previous commits on this branch were written. --- app/boards/arm/adv360pro/adv360pro.dtsi | 6 ------ app/boards/nrf52_bsim.overlay | 1 - app/dts/behaviors/mouse_key_press.dtsi | 3 +-- .../bond-clear-then-bond-second-client/nrf52_bsim.keymap | 1 - .../ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap | 1 - .../connnect-and-output-to-selection/nrf52_bsim.keymap | 1 - .../profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap | 1 - .../nrf52_bsim.keymap | 1 - .../reconnect-then-output-to-selection/nrf52_bsim.keymap | 1 - 9 files changed, 1 insertion(+), 15 deletions(-) diff --git a/app/boards/arm/adv360pro/adv360pro.dtsi b/app/boards/arm/adv360pro/adv360pro.dtsi index 85ff5d1cfd1..c837e518458 100644 --- a/app/boards/arm/adv360pro/adv360pro.dtsi +++ b/app/boards/arm/adv360pro/adv360pro.dtsi @@ -46,7 +46,6 @@ }; ext-power { compatible = "zmk,ext-power-generic"; - label = "EXT_POWER"; control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; }; @@ -107,11 +106,9 @@ #size-cells = <1>; sd_partition: partition@0 { - label = "softdevice"; reg = <0x00000000 0x00026000>; }; code_partition: partition@26000 { - label = "code_partition"; reg = <0x00026000 0x000c6000>; }; @@ -125,12 +122,10 @@ * if enabled. */ storage_partition: partition@ec000 { - label = "storage"; reg = <0x000ec000 0x00008000>; }; boot_partition: partition@f4000 { - label = "adafruit_boot"; reg = <0x000f4000 0x0000c000>; }; }; @@ -145,7 +140,6 @@ led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; /* SPI */ reg = <0>; diff --git a/app/boards/nrf52_bsim.overlay b/app/boards/nrf52_bsim.overlay index 482b048604a..ec7c49ae92a 100644 --- a/app/boards/nrf52_bsim.overlay +++ b/app/boards/nrf52_bsim.overlay @@ -9,7 +9,6 @@ kscan: kscan { compatible = "zmk,kscan-mock"; - label = "KSCAN_MOCK"; rows = <2>; columns = <2>; diff --git a/app/dts/behaviors/mouse_key_press.dtsi b/app/dts/behaviors/mouse_key_press.dtsi index 9cc16e81e75..975c24aaafb 100644 --- a/app/dts/behaviors/mouse_key_press.dtsi +++ b/app/dts/behaviors/mouse_key_press.dtsi @@ -1,8 +1,7 @@ / { behaviors { - /omit-if-no-ref/ mkp: behavior_mouse_key_press { + /omit-if-no-ref/ mkp: mouse_key_press { compatible = "zmk,behavior-mouse-key-press"; - label = "MOUSE_KEY_PRESS"; #binding-cells = <1>; }; }; diff --git a/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap b/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap index 3ddf226fc86..36eba046e03 100644 --- a/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap +++ b/app/tests/ble/profiles/bond-clear-then-bond-second-client/nrf52_bsim.keymap @@ -14,7 +14,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap b/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap index b13fe6f9dd8..45e2aea0b1e 100644 --- a/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap +++ b/app/tests/ble/profiles/bond-to-cleared-profile/nrf52_bsim.keymap @@ -14,7 +14,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap b/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap index 789cec44337..7c67425e6a2 100644 --- a/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap +++ b/app/tests/ble/profiles/connnect-and-output-to-selection/nrf52_bsim.keymap @@ -14,7 +14,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap b/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap index 789cec44337..7c67425e6a2 100644 --- a/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap +++ b/app/tests/ble/profiles/dont-bond-to-taken-profile/nrf52_bsim.keymap @@ -14,7 +14,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap index cc1420ee5ca..de6884ae11d 100644 --- a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap +++ b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/nrf52_bsim.keymap @@ -16,7 +16,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < diff --git a/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap b/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap index 789cec44337..7c67425e6a2 100644 --- a/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap +++ b/app/tests/ble/profiles/reconnect-then-output-to-selection/nrf52_bsim.keymap @@ -14,7 +14,6 @@ / { keymap { compatible = "zmk,keymap"; - label = "Default keymap"; default_layer { bindings = < From 0ab6a0ad11d0eb65f2cdca959a840e3331aa599a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 4 Dec 2023 19:11:12 +0000 Subject: [PATCH 0844/1130] feat(bt): Add new experimental Kconfig setting. * In order to have an easy way to test and phase in BT changes, add a new `ZMK_BLE_EXPERIMENTAL_FEATURES` Kconfig setting. --- app/Kconfig | 20 +++++++++++++++----- docs/docs/config/bluetooth.md | 9 +++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 63eff2ad4be..fff63a5b9fc 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -142,6 +142,21 @@ menuconfig ZMK_BLE if ZMK_BLE +config ZMK_BLE_EXPERIMENTAL_FEATURES + bool "Experimental: Enable experimental/advanced BLE settings/features" + select ZMK_BLE_PASSKEY_ENTRY + select BT_GATT_AUTO_SEC_REQ + select BT_SMP_ALLOW_UNAUTH_OVERWRITE + help + Enables a combination of settings that are planned to be default in future versions of ZMK. + This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, + and allowing overwrite of keys from previously paired hosts. + +config ZMK_BLE_PASSKEY_ENTRY + bool "Require passkey entry on the keyboard to complete pairing" + default n + select RING_BUFFER + # BT_TINYCRYPT_ECC is required for BT_SMP_SC_PAIR_ONLY when using HCI config BT_TINYCRYPT_ECC default y if BT_HCI && !BT_CTLR @@ -189,11 +204,6 @@ config BT_GATT_AUTO_SEC_REQ config BT_DEVICE_APPEARANCE default 961 -config ZMK_BLE_PASSKEY_ENTRY - bool "Require passkey entry on the keyboard to complete pairing" - default n - select RING_BUFFER - config BT_PERIPHERAL_PREF_MIN_INT default 6 diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md index d2ddefddbd1..f957b77e3a6 100644 --- a/docs/docs/config/bluetooth.md +++ b/docs/docs/config/bluetooth.md @@ -9,7 +9,8 @@ See [Configuration Overview](index.md) for instructions on how to change these s ## Kconfig -| Option | Type | Description | Default | -| ------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts) | n | -| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | +| Option | Type | Description | Default | +| -------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK. This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, and allowing overwrite of keys from previously paired hosts. | n | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts) | n | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | From efd403a56773a59c01478037c5739ff6c35c9de8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 6 Nov 2023 17:59:01 +0000 Subject: [PATCH 0845/1130] refactor: Hook into CMake loading in a better spot. * Shift to using an extra Zephyr module to do keymap location work after all board roots are resolved. This avoids duplicate work and allows us to load custom boards from Zephyr modules as well as user config setups. --- app/CMakeLists.txt | 9 +-------- .../modules/modules.cmake} | 2 -- app/keymap-module/zephyr/module.yml | 5 +++++ 3 files changed, 6 insertions(+), 10 deletions(-) rename app/{cmake/ZephyrBuildConfig.cmake => keymap-module/modules/modules.cmake} (99%) create mode 100644 app/keymap-module/zephyr/module.yml diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 433f2376b7b..40c654dbaa8 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -2,14 +2,7 @@ cmake_minimum_required(VERSION 3.13.1) set(CONFIG_APPLICATION_DEFINED_SYSCALL true) -# Add our custom Zephyr module for drivers w/ syscalls, etc. -list(APPEND DTS_ROOT ${CMAKE_SOURCE_DIR}/drivers/zephyr) - -set(ZephyrBuildConfiguration_ROOT ${CMAKE_SOURCE_DIR}/cmake) - -list(APPEND ZEPHYR_EXTRA_MODULES - ${CMAKE_CURRENT_SOURCE_DIR}/module -) +set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/module;${CMAKE_CURRENT_SOURCE_DIR}/keymap-module") # Find Zephyr. This also loads Zephyr's build system. find_package(Zephyr REQUIRED HINTS ../zephyr) diff --git a/app/cmake/ZephyrBuildConfig.cmake b/app/keymap-module/modules/modules.cmake similarity index 99% rename from app/cmake/ZephyrBuildConfig.cmake rename to app/keymap-module/modules/modules.cmake index ade341990a0..e260da8fc37 100644 --- a/app/cmake/ZephyrBuildConfig.cmake +++ b/app/keymap-module/modules/modules.cmake @@ -5,8 +5,6 @@ # * single overlay, # * or per board/shield. -cmake_minimum_required(VERSION 3.15) - list(APPEND BOARD_ROOT ${APPLICATION_SOURCE_DIR}) list(APPEND DTS_ROOT ${APPLICATION_SOURCE_DIR}) diff --git a/app/keymap-module/zephyr/module.yml b/app/keymap-module/zephyr/module.yml new file mode 100644 index 00000000000..9daa3a18e44 --- /dev/null +++ b/app/keymap-module/zephyr/module.yml @@ -0,0 +1,5 @@ +# This ensures our modules/modules.cmake file is loaded *after* all the other modules, +# To set up the various keymap DTS and overridden .conf files are located and chosen. +build: + settings: + module_ext_root: "." From 3656ec63d01ef99258ed7c4ee6cb7132898ac71e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 25 Nov 2023 00:55:11 +0000 Subject: [PATCH 0846/1130] feat(build): Build unified config/mod repos. * Detect in our build script if our config repo is *also* a Zephyr module and if so pass to ZMK build in ZMK_EXTRA_MODULES define. * Copy config directory contents to new independent temp workspace to avoid Kconfig conflicts between the build repo's zephyr module directory and the checkout zephyr pulled in by `west update`. --- .github/workflows/build-user-config.yml | 64 ++++++++++++++++--------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 7373c9ff4c5..d6fbaa5ca68 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -52,6 +52,13 @@ jobs: fail-fast: false matrix: ${{ fromJson(needs.matrix.outputs.build_matrix) }} steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Create build directory + run: | + echo "build_dir=$(mktemp -d)" >> $GITHUB_ENV + - name: Prepare variables shell: sh -x {0} env: @@ -59,13 +66,22 @@ jobs: shield: ${{ matrix.shield }} artifact_name: ${{ matrix.artifact-name }} run: | + export new_tmp_dir=$(mktemp -d) + echo "tmp_dir=${new_tmp_dir}" >> $GITHUB_ENV + echo "tmp_config_dir=${new_tmp_dir}/config" >> $GITHUB_ENV + if [ -e zephyr/module.yml ]; then + export zmk_load_arg=" -DZMK_EXTRA_MODULES='${GITHUB_WORKSPACE}'" + fi + echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV - echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}" >> $GITHUB_ENV + echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}${zmk_load_arg}" >> $GITHUB_ENV echo "display_name=${shield:+$shield - }${board}" >> $GITHUB_ENV echo "artifact_name=${artifact_name:-${shield:+$shield-}${board}-zmk}" >> $GITHUB_ENV - - name: Checkout - uses: actions/checkout@v3 + - name: Copy config files to isolated temporary directory + run: | + mkdir "${{ env.tmp_config_dir }}" + cp -R ${{ inputs.config_path }}/* "${{ env.tmp_config_dir }}/" - name: Cache west modules uses: actions/cache@v3.0.11 @@ -74,11 +90,11 @@ jobs: cache_name: cache-zephyr-${{ env.zephyr_version }}-modules with: path: | - modules/ - tools/ - zephyr/ - bootloader/ - zmk/ + ${{ env.tmp_dir }}/modules/ + ${{ env.tmp_dir }}/tools/ + ${{ env.tmp_dir }}/zephyr/ + ${{ env.tmp_dir }}/bootloader/ + ${{ env.tmp_dir }}/zmk/ key: ${{ runner.os }}-build-${{ env.cache_name }}-${{ hashFiles('**/west.yml', '**/build.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache_name }}- @@ -86,23 +102,27 @@ jobs: ${{ runner.os }}- - name: West Init - run: west init -l "${{ inputs.config_path }}" + working-directory: ${{ env.tmp_dir }} + run: west init -l "${{ env.tmp_config_dir }}" - name: West Update + working-directory: ${{ env.tmp_dir }} run: west update - name: West Zephyr export + working-directory: ${{ env.tmp_dir }} run: west zephyr-export - name: West Build (${{ env.display_name }}) + working-directory: ${{ env.tmp_dir }} shell: sh -x {0} - run: west build -s zmk/app -b "${{ matrix.board }}" -- -DZMK_CONFIG="${GITHUB_WORKSPACE}/${{ inputs.config_path }}" ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} + run: west build -s zmk/app -d "${{ env.build_dir }}" -b "${{ matrix.board }}" -- -DZMK_CONFIG=${{ env.tmp_config_dir }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file run: | - if [ -f build/zephyr/.config ] + if [ -f "${{ env.build_dir }}/zephyr/.config" ] then - grep -v -e "^#" -e "^$" build/zephyr/.config | sort + grep -v -e "^#" -e "^$" "${{ env.build_dir }}/zephyr/.config" | sort else echo "No Kconfig output" fi @@ -110,12 +130,12 @@ jobs: - name: ${{ env.display_name }} Devicetree file run: | - if [ -f build/zephyr/zephyr.dts ] + if [ -f "${{ env.build_dir }}/zephyr/zephyr.dts" ] then - cat build/zephyr/zephyr.dts - elif [ -f build/zephyr/zephyr.dts.pre ] + cat "${{ env.build_dir }}/zephyr/zephyr.dts" + elif [ -f "${{ env.build_dir }}/zephyr/zephyr.dts.pre" ] then - cat -s build/zephyr/zephyr.dts.pre + cat -s "${{ env.build_dir }}/zephyr/zephyr.dts.pre" else echo "No Devicetree output" fi @@ -124,17 +144,17 @@ jobs: - name: Rename artifacts shell: sh -x {0} run: | - mkdir build/artifacts - if [ -f build/zephyr/zmk.uf2 ] + mkdir "${{ env.build_dir }}/artifacts" + if [ -f "${{ env.build_dir }}/zephyr/zmk.uf2" ] then - cp build/zephyr/zmk.uf2 "build/artifacts/${{ env.artifact_name }}.uf2" - elif [ -f build/zephyr/zmk.${{ inputs.fallback_binary }} ] + cp "${{ env.build_dir }}/zephyr/zmk.uf2" "${{ env.build_dir }}/artifacts/${{ env.artifact_name }}.uf2" + elif [ -f "${{ env.build_dir }}/zephyr/zmk.${{ inputs.fallback_binary }}" ] then - cp "build/zephyr/zmk.${{ inputs.fallback_binary }}" "build/artifacts/${{ env.artifact_name }}.${{ inputs.fallback_binary }}" + cp "${{ env.build_dir }}/zephyr/zmk.${{ inputs.fallback_binary }}" "${{ env.build_dir }}/artifacts/${{ env.artifact_name }}.${{ inputs.fallback_binary }}" fi - name: Archive (${{ env.display_name }}) uses: actions/upload-artifact@v3 with: name: ${{ inputs.archive_name }} - path: build/artifacts + path: ${{ env.build_dir }}/artifacts From 291bbc22572fb91cc4c773cf7d6b0e88f49eee38 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 27 Nov 2023 01:57:17 +0000 Subject: [PATCH 0847/1130] refactor(docs): New shield guide to suggest modules * Update the new shield guide to position Zephyr module location as the default when creating new shields, with a note about using ZMK repository itself as a last resort. * Document building with additional Zephyr modules. Co-authored-by: Cem Aksoylar --- docs/docs/development/build-flash.md | 16 ++++ docs/docs/development/new-shield.md | 115 ++++++++++++++++++++++----- 2 files changed, 110 insertions(+), 21 deletions(-) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index 0243983c9d8..1699ac5ce4c 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -92,6 +92,22 @@ This produces `left` and `right` subfolders under the `build` directory and two Build times can be significantly reduced after the initial build by omitting all build arguments except the build directory, e.g. `west build -d build/left`. The additional options and intermediate build outputs from your initial build are cached and reused for unchanged files. ::: +### Building with external modules + +ZMK supports loading additional boards, shields, code, etc. from [external Zephyr modules](https://docs.zephyrproject.org/3.2.0/develop/modules.html), facilitating out-of-tree management and versioning independent of the ZMK repository. To build with any additional modules, use the `ZMK_EXTRA_MODULES` define added to your `west build` command. + +For instance, building with the `my-vendor-keebs-module` checked out to your documents directory, you would build like: + +``` +west build -b nice_nano_v2 -- -DSHIELD=vendor_shield -DZMK_EXTRA_MODULES="C:/Users/myUser/Documents/my-vendor-keebs-module" +``` + +When adding multiple modules, make sure they are separated by a semicolon, e.g.: + +``` +west build -b nice_nano_v2 -- -DSHIELD=vendor_shield -DZMK_EXTRA_MODULES="C:/Users/myUser/Documents/my-vendor-keebs-module;C:/Users/myUser/Documents/my-other-keebs-module" +``` + ### Building from `zmk-config` Folder Instead of building .uf2 files using the default keymap and config files, you can build directly from your [`zmk-config` folder](../user-setup.md#github-repo) by adding diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 748cb9a241c..291a7f63e85 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -11,37 +11,58 @@ import Metadata from "@site/src/data/hardware-metadata.json"; ## Overview -This guide will walk through the steps necessary to add ZMK support for a keyboard the uses a (Pro Micro compatible) addon MCU board to provide the microprocessor. +This guide will walk through the steps necessary to add ZMK support for a keyboard that uses an add-on MCU board (e.g. Pro Micro compatible) to provide the microprocessor. + The high level steps are: +- From a template, create a new [Zephyr module](https://docs.zephyrproject.org/3.2.0/develop/modules.html) housed in a git repository containing one or more custom shields. - Create a new shield directory. - Add the base Kconfig files. - Add the shield overlay file to define the KSCAN driver for detecting key press/release. - (Optional) Add the matrix transform for mapping KSCAN row/column values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. - Add a default keymap, which users can override in their own configs as needed. +- Add a `.zmk.yml` metadata file to document the high level details of your shield, and the features it supports. +- Update the `build.yaml` file from the repository template to have some sample builds of the firmware to test. - Add support for features such as encoders, OLED displays, or RGB underglow. -It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. +It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/3.2.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. :::note ZMK support for split keyboards requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. ::: +## New Zephyr Module Repository + +The first step to creating the shield is to create a new Zephyr module repository from a template. + +:::note +This guide assumes you already have a configured GitHub account. If you don't yet have one, go ahead and [sign up](https://github.com/join) before continuing. +::: + +Follow these steps to create your new repository: + +- Visit https://github.com/zmkfirmware/unified-zmk-config-template +- Click the green "Use this template" button +- In the drop down that opens, click "Use this template". +- In the following screen, provide the following information: + - A repository name, e.g. `my-shield-module`. + - A brief description, e.g. `ZMK Support For MyShield Keyboard`. + - Select Public or Private, depending on your preference. +- Click the green "Create repository" button + ## New Shield Directory :::note -This guide describes how to add shield to the ZMK main repository. If you are building firmware for your -own prototype or handwired keyboard, it is recommended to use your own user config repository. Follow the -[user setup guide](user-setup.md) to create your user config repository first. When following the rest -of this guide, replace the `app/` directory in the ZMK main repository with the `config/` directory in your -user config repository. For example, `app/boards/shields/` should now be -`config/boards/shields/`. +This guide describes how to add a shield to an independently managed Zephyr module repository. This is the +preferred way to handle boards and shields moving forward in ZMK, although the tooling to make this easier +for users is still improving. ZMK does have a collection of boards/shields in the ZMK main repository, which are planned to be phased out, but until that is complete, there _may_ be a few select scenarios where adding your keyboard to ZMK itself is preferred. Due the volume of PRs and the focus of ZMK development not being merging of keyboard PRs, you are highly encouraged to use an out-of-tree Zephyr module repository to manage your definitions. Should you choose to try to get your keyboard included in ZMK main repository, the paths in the rest of the guide would be nested under the `app/` folder there instead. For example, `boards/shields/` should now be +`app/boards/shields/`. ::: -Shields for Zephyr applications go into the `boards/shields/` directory; since ZMK's Zephyr application lives in the `app/` subdirectory of the repository, that means the new shield directory should be: +Shields in Zephyr module "board root" go into the `boards/shields/` directory; that means the new shield directory in your module repository should be: ```bash -mkdir app/boards/shields/ +mkdir boards/shields/ ``` ## Base Kconfig Files @@ -346,9 +367,9 @@ See the [matrix transform section](../config/kscan.md#matrix-transform) in the K ## Default Keymap -Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//.keymap` file. The keymap is configured as an additional devicetree overlay that includes the following: +Each keyboard should provide a default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `boards/shields//.keymap` file. The keymap is configured as an additional devicetree overlay that includes the following: -- A node with `compatible="zmk,keymap"` where each child node is a layer with a `bindings` array that binds each key position to a given behavior (e.g. key press, momentarily layer, etc). +- A node with `compatible = "zmk,keymap"` where each child node is a layer with a `bindings` array that binds each key position to a given behavior (e.g. key press, momentary layer, etc). Here is an example simple keymap for the Kyria, with only one layer: @@ -360,12 +381,7 @@ The two `#include` lines at the top of the keymap are required in order to bring ### Keymap Behaviors -Further documentation on behaviors and bindings is forthcoming, but a summary of the current behaviors you can bind to key positions is as follows: - -- `kp` is the "key press" behavior, and takes a single binding argument of the key code from the 'keyboard/keypad" HID usage table. -- `mo` is the "momentary layer" behavior, and takes a single binding argument of the numeric ID of the layer to momentarily enable when that key is held. -- `trans` is the "transparent" behavior, useful to be place in higher layers above `mo` bindings to be sure the key release is handled by the lower layer. No binding arguments are required. -- `mt` is the "mod-tap" behavior, and takes two binding arguments, the modifier to use if held, and the keycode to send if tapped. +For the full documentation on the available behaviors for use in keymaps, start with reviewing [`kp`](../behaviors/key-press.md) and then use the sidebar to review the others available within ZMK. ## Metadata @@ -393,6 +409,40 @@ siblings: You should place a properly named `foo.zmk.yml` file in the directory next to your other shield values, and fill it out completely and accurately. See [Hardware Metadata Files](/docs/development/hardware-metadata-files) for the full details. +## Build File + +To help you test/verify your firmware, update the `build.yaml` to list your particular board/shield combinations you want built whenever changes are published to GitHub. Open `build.yaml` with your editor and add a combination, e.g.: + +```yaml +# This file generates the GitHub Actions matrix +# For simple board + shield combinations, add them +# to the top level board and shield arrays, for more +# control, add individual board + shield combinations to +# the `include` property, e.g: +# +# board: [ "nice_nano_v2" ] +# shield: [ "corne_left", "corne_right" ] +# include: +# - board: bdn9_rev2 +# - board: nice_nano_v2 +# shield: reviung41 +# +--- +include: + - board: nice_nano_v2 + shield: +``` + +For split keyboards, you will need to specify the halves/siblings separately, e.g.: + +```yaml +include: + - board: mikoto_520 + shield: _left + - board: mikoto_520 + shield: _right +``` + ## Adding Features ### Encoders @@ -486,17 +536,40 @@ Add additional bindings as necessary to match the default number of encoders on ## Testing +### GitHub Actions + +Using GitHub Actions to build your new firmware can save you from doing any local [development setup](./setup.md), +at the expense of a longer feedback loop if there are issues. To push your changes and trigger a build: + +- Add all your pending changes with `git add .` +- Commit your changes with `git commit -m "Initial shield"` +- Push the changes to GitHub with `git push` + +Once pushed, click on the "Actions" tab of the repo you created in the first step, and you should see a new build running. If the build is successful, there will be a new `firmware.zip` artifact shown on the summary screen you can download that will contain the new `.uf2` files that can be flashed to the device. + +### Local Build + +:::note +To build locally, be sure you've followed the [development setup](./setup.md) guide first. +::: + Once you've fully created the new keyboard shield definition, you should be able to test with a build command like: ```sh -west build --pristine -b nice_nano_v2 -- -DSHIELD=my_board +west build --pristine -b nice_nano_v2 -- -DSHIELD= -DZMK_EXTRA_MODULES=/full/path/to/your/module +# replace with e.g. _left for split keyboards, then repeat for _right ``` -The above build command generates `build/zephyr/zmk.uf2`. If your board +The above build command generates a `build/zephyr/zmk.uf2` file that you can flash using the steps from the following section. See the dedicated [building and flashing page](build-flash.md) for more details. + +### Flashing + +If your board supports USB Flashing Format (UF2), copy that file onto the root of the USB mass storage device for your board. The controller should flash your built firmware -and automatically restart once flashing is complete. +and automatically restart once flashing is complete. If you need to flash an updated +UF2 file with fixes, you can re-enter the bootloader by double tapping the reset button. Alternatively, if your board supports flashing and you're not developing from within a Dockerized environment, enable Device Firmware Upgrade (DFU) mode on From 88338a9b3cc9b87d48ad1845cffb51b57cffbcb3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 6 Dec 2023 20:05:29 +0000 Subject: [PATCH 0848/1130] feat(shields): Add ZMK Uno split setup * Make it easier to test split code with ZMK Uno hardware by adding a split left/right setup as well. --- app/boards/shields/zmk_uno/Kconfig.defconfig | 2 +- app/boards/shields/zmk_uno/Kconfig.shield | 15 ++ app/boards/shields/zmk_uno/zmk_uno.dtsi | 172 ++++++++++++++++++ app/boards/shields/zmk_uno/zmk_uno.overlay | 160 +--------------- app/boards/shields/zmk_uno/zmk_uno_split.dtsi | 61 +++++++ .../shields/zmk_uno/zmk_uno_split.keymap | 66 +++++++ .../shields/zmk_uno/zmk_uno_split_left.conf | 18 ++ .../zmk_uno/zmk_uno_split_left.overlay | 11 ++ .../shields/zmk_uno/zmk_uno_split_right.conf | 18 ++ .../zmk_uno/zmk_uno_split_right.overlay | 19 ++ 10 files changed, 382 insertions(+), 160 deletions(-) create mode 100644 app/boards/shields/zmk_uno/zmk_uno.dtsi create mode 100644 app/boards/shields/zmk_uno/zmk_uno_split.dtsi create mode 100644 app/boards/shields/zmk_uno/zmk_uno_split.keymap create mode 100644 app/boards/shields/zmk_uno/zmk_uno_split_left.conf create mode 100644 app/boards/shields/zmk_uno/zmk_uno_split_left.overlay create mode 100644 app/boards/shields/zmk_uno/zmk_uno_split_right.conf create mode 100644 app/boards/shields/zmk_uno/zmk_uno_split_right.overlay diff --git a/app/boards/shields/zmk_uno/Kconfig.defconfig b/app/boards/shields/zmk_uno/Kconfig.defconfig index 11c63a5a005..cccca1d2dee 100644 --- a/app/boards/shields/zmk_uno/Kconfig.defconfig +++ b/app/boards/shields/zmk_uno/Kconfig.defconfig @@ -1,7 +1,7 @@ # Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT -if SHIELD_ZMK_UNO +if SHIELD_ZMK_UNO_BASE config ZMK_KEYBOARD_NAME default "ZMK Uno" diff --git a/app/boards/shields/zmk_uno/Kconfig.shield b/app/boards/shields/zmk_uno/Kconfig.shield index 958915f59c0..0b0b3d73f73 100644 --- a/app/boards/shields/zmk_uno/Kconfig.shield +++ b/app/boards/shields/zmk_uno/Kconfig.shield @@ -1,5 +1,20 @@ # Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT +config SHIELD_ZMK_UNO_BASE + bool + config SHIELD_ZMK_UNO def_bool $(shields_list_contains,zmk_uno) + select SHIELD_ZMK_UNO_BASE + +config SHIELD_ZMK_UNO_SPLIT_LEFT + def_bool $(shields_list_contains,zmk_uno_split_left) + select SHIELD_ZMK_UNO_BASE + select ZMK_SPLIT + select ZMK_SPLIT_ROLE_CENTRAL + +config SHIELD_ZMK_UNO_SPLIT_RIGHT + def_bool $(shields_list_contains,zmk_uno_split_right) + select SHIELD_ZMK_UNO_BASE + select ZMK_SPLIT \ No newline at end of file diff --git a/app/boards/shields/zmk_uno/zmk_uno.dtsi b/app/boards/shields/zmk_uno/zmk_uno.dtsi new file mode 100644 index 00000000000..63deb06a4d1 --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno.dtsi @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +&arduino_i2c { + status = "okay"; +}; + +nice_view_spi: &arduino_spi { + status = "okay"; + + cs-gpios = <&arduino_header 16 GPIO_ACTIVE_HIGH>; + + // Needed so the nice_view shield will enhance the existing node which falls *first* + // on the bus, properly picking up the first `cs-gpios` specifier. + ls0xx@0 { + reg = <0>; + }; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <7>; /* 4 underglow + 3 per-key LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,kscan = &kscan_matrix_comp; + zmk,backlight = &backlight; + zmk,underglow = &led_strip; + zmk,matrix-transform = &matrix_transform; + }; + + // Commented out until we add more powerful power domain support + // external_power { + // compatible = "zmk,ext-power-generic"; + // init-delay-ms = <200>; + // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + // }; + + rgb_power { + compatible = "zmk,ext-power-generic"; + init-delay-ms = <200>; + control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; + }; + + backlight: gpioleds { + compatible = "gpio-leds"; + gpio_led_0 { + gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; + }; + }; + + matrix_transform: matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(1,0) RC(1,1) + RC(2,0) RC(2,1) RC(2,2) + >; + }; + + direct_matrix_transform: direct_matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(0,2) RC(0,3) + RC(1,0) RC(1,1) RC(1,2) + >; + }; + + + kscan_matrix_comp: kscan_matrix_comp { + compatible = "zmk,kscan-composite"; + rows = <1>; + columns = <7>; + + matrix { + kscan = <&kscan_matrix>; + }; + + toggle { + kscan = <&kscan_sp3t_toggle>; + row-offset = <2>; + }; + + }; + + kscan_direct_comp: kscan_direct_comp { + compatible = "zmk,kscan-composite"; + status = "disabled"; + + matrix { + kscan = <&kscan_direct>; + }; + + toggle { + kscan = <&kscan_sp3t_toggle>; + row-offset = <1>; + }; + + }; + + kscan_matrix: kscan_matrix { + compatible = "zmk,kscan-gpio-matrix"; + + diode-direction = "col2row"; + + col-gpios + = <&arduino_header 10 GPIO_ACTIVE_HIGH> + , <&arduino_header 9 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + kscan_direct: kscan_direct { + compatible = "zmk,kscan-gpio-direct"; + status = "disabled"; + + input-gpios + = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + + }; + + kscan_sp3t_toggle: kscan_sp3t_toggle { + compatible = "zmk,kscan-gpio-direct"; + toggle-mode; + + input-gpios + = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + + encoder: encoder { + steps = <80>; + compatible = "alps,ec11"; + a-gpios = <&arduino_header 15 GPIO_PULL_UP>; + b-gpios = <&arduino_header 14 GPIO_PULL_UP>; + }; +}; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 6d487adbad9..07181280015 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -4,170 +4,12 @@ * SPDX-License-Identifier: MIT */ -#include -#include - -&arduino_i2c { - status = "okay"; -}; - -nice_view_spi: &arduino_spi { - status = "okay"; - - cs-gpios = <&arduino_header 16 GPIO_ACTIVE_HIGH>; - - // Needed so the nice_view shield will enhance the existing node which falls *first* - // on the bus, properly picking up the first `cs-gpios` specifier. - ls0xx@0 { - reg = <0>; - }; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <7>; /* 4 underglow + 3 per-key LEDs */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - - color-mapping = ; - }; -}; + #include "zmk_uno.dtsi" / { chosen { - zmk,kscan = &kscan_matrix_comp; - zmk,backlight = &backlight; - zmk,underglow = &led_strip; zmk,matrix-transform = &matrix_transform; }; - - // Commented out until we add more powerful power domain support - // external_power { - // compatible = "zmk,ext-power-generic"; - // init-delay-ms = <200>; - // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; - // }; - - rgb_power { - compatible = "zmk,ext-power-generic"; - init-delay-ms = <200>; - control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; - }; - - backlight: gpioleds { - compatible = "gpio-leds"; - gpio_led_0 { - gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; - }; - }; - - matrix_transform: matrix_transform { - compatible = "zmk,matrix-transform"; - rows = <3>; - columns = <4>; - - map = < - RC(0,0) RC(0,1) - RC(1,0) RC(1,1) - RC(2,0) RC(2,1) RC(2,2) - >; - }; - - direct_matrix_transform: direct_matrix_transform { - compatible = "zmk,matrix-transform"; - rows = <3>; - columns = <4>; - - map = < - RC(0,0) RC(0,1) - RC(0,2) RC(0,3) - RC(1,0) RC(1,1) RC(1,2) - >; - }; - - kscan_matrix_comp: kscan_matrix_comp { - compatible = "zmk,kscan-composite"; - rows = <1>; - columns = <7>; - - matrix { - kscan = <&kscan_matrix>; - }; - - toggle { - kscan = <&kscan_sp3t_toggle>; - row-offset = <2>; - }; - - }; - - kscan_direct_comp: kscan_direct_comp { - compatible = "zmk,kscan-composite"; - status = "disabled"; - - matrix { - kscan = <&kscan_direct>; - }; - - toggle { - kscan = <&kscan_sp3t_toggle>; - row-offset = <1>; - }; - - }; - - kscan_matrix: kscan_matrix { - compatible = "zmk,kscan-gpio-matrix"; - - diode-direction = "col2row"; - - col-gpios - = <&arduino_header 10 GPIO_ACTIVE_HIGH> - , <&arduino_header 9 GPIO_ACTIVE_HIGH> - ; - - row-gpios - = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - }; - - kscan_direct: kscan_direct { - compatible = "zmk,kscan-gpio-direct"; - status = "disabled"; - - input-gpios - = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - - }; - - kscan_sp3t_toggle: kscan_sp3t_toggle { - compatible = "zmk,kscan-gpio-direct"; - toggle-mode; - - input-gpios - = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - ; - }; - - encoder: encoder { - steps = <80>; - compatible = "alps,ec11"; - a-gpios = <&arduino_header 15 GPIO_PULL_UP>; - b-gpios = <&arduino_header 14 GPIO_PULL_UP>; - }; sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi new file mode 100644 index 00000000000..f84aacc8e97 --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + #include "zmk_uno.dtsi" + + left_encoder: &encoder { + status = "disabled"; + }; + + / { + chosen { + zmk,matrix-transform = &split_matrix_transform; + }; + + split_matrix_transform: split_matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(1,0) RC(1,1) + RC(2,0) RC(2,1) RC(2,2) + RC(3,0) RC(3,1) + RC(4,0) RC(4,1) + RC(5,0) RC(5,1) RC(5,2) + >; + }; + + split_direct_matrix_transform: split_direct_matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <4>; + + map = < + RC(0,0) RC(0,1) + RC(0,2) RC(0,3) + RC(1,0) RC(1,1) RC(1,2) + RC(2,0) RC(2,1) + RC(2,2) RC(2,3) + RC(3,0) RC(3,1) RC(3,2) + >; + }; + + right_encoder: right_encoder { + steps = <80>; + status = "disabled"; + compatible = "alps,ec11"; + a-gpios = <&arduino_header 15 GPIO_PULL_UP>; + b-gpios = <&arduino_header 14 GPIO_PULL_UP>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder &right_encoder>; + triggers-per-rotation = <20>; + }; + }; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.keymap b/app/boards/shields/zmk_uno/zmk_uno_split.keymap new file mode 100644 index 00000000000..05f0ffb0b04 --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno_split.keymap @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include +#include + +// Uncomment the following block if using the "Direct Wire" jumper to switch the matrix to a direct wire. + +/* :REMOVE ME + +&kscan_direct_comp { status = "okay"; }; +&kscan_direct { status = "okay"; }; +&kscan_matrix_comp { status = "disabled"; }; +&kscan_matrix { status = "disabled"; }; + +/ { + chosen { + zmk,matrix-transform = &split_direct_matrix_transform; + zmk,kscan = &kscan_direct_comp; + }; +}; + +REMOVE ME: */ + + +/ { + macros { + ZMK_MACRO(ble_zero, + wait-ms = <1>; + tap-ms = <1>; + bindings = <&out OUT_BLE &bt BT_SEL 0>; + ) + ZMK_MACRO(ble_one, + wait-ms = <1>; + tap-ms = <1>; + bindings = <&out OUT_BLE &bt BT_SEL 1>; + ) + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp A &bl BL_TOG + &rgb_ug RGB_EFF &bt BT_CLR + + &out OUT_USB &ble_zero &ble_one + + &kp C &kp D + &kp E &kp F + &none &none &none + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_left.conf b/app/boards/shields/zmk_uno/zmk_uno_split_left.conf new file mode 100644 index 00000000000..cf282bac2cb --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno_split_left.conf @@ -0,0 +1,18 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_LOG=y +CONFIG_ZMK_LOG_LEVEL_DBG=y + +# Uncomment for Single color backlight +# CONFIG_ZMK_BACKLIGHT=y + +# Uncomment for RGB +# CONFIG_ZMK_RGB_UNDERGLOW=y + +# Uncomment for Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to enable encoder support +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_left.overlay b/app/boards/shields/zmk_uno/zmk_uno_split_left.overlay new file mode 100644 index 00000000000..5782e612d92 --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno_split_left.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "zmk_uno_split.dtsi" + +&left_encoder { + status = "okay"; +}; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_right.conf b/app/boards/shields/zmk_uno/zmk_uno_split_right.conf new file mode 100644 index 00000000000..cf282bac2cb --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno_split_right.conf @@ -0,0 +1,18 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_LOG=y +CONFIG_ZMK_LOG_LEVEL_DBG=y + +# Uncomment for Single color backlight +# CONFIG_ZMK_BACKLIGHT=y + +# Uncomment for RGB +# CONFIG_ZMK_RGB_UNDERGLOW=y + +# Uncomment for Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to enable encoder support +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay b/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay new file mode 100644 index 00000000000..9c2e7d7f2ee --- /dev/null +++ b/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "zmk_uno_split.dtsi" + +&split_matrix_transform { + row-offset = <3>; +}; + +&split_direct_matrix_transform { + row-offset = <2>; +}; + +&right_encoder { + status = "okay"; +}; From f3ad08b619c5c1e6fd95df01fd98eef2207d6aa8 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 22:48:47 -0800 Subject: [PATCH 0849/1130] fix(docs): Add missing page pointers in behaviors config --- docs/docs/config/behaviors.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 10096a41f63..452768070eb 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -49,7 +49,7 @@ You can use the following nodes to tweak the default behaviors: Creates a custom behavior that triggers one behavior when a key is held or a different one when the key is tapped. -See the [hold-tap behavior documentation](../behaviors/hold-tap.md) for more details and examples. +See the [hold-tap behavior](../behaviors/hold-tap.md) documentation for more details and examples. ### Devicetree @@ -157,6 +157,8 @@ The following macro-specific behaviors can be added at any point in the `binding Creates a custom behavior that triggers one of two behaviors depending on whether certain modifiers are held. +See the [mod-morph behavior](../behaviors/mod-morph.md) documentation for more details and examples. + ### Devicetree Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-mod-morph.yaml) @@ -208,6 +210,8 @@ You can use the following nodes to tweak the default behaviors: Creates a custom behavior that triggers a different behavior corresponding to the number of times the key is tapped. +See the [tap dance behavior](../behaviors/tap-dance.md) documentation for more details and examples. + ### Devicetree Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-tap-dance.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-tap-dance.yaml) From 76a209c728415e0cd6d3ab5400e42709c6aabf03 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 23:02:35 -0800 Subject: [PATCH 0850/1130] fix(docs): Fix sticky key #binding-cells --- docs/docs/config/behaviors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 452768070eb..c1d44f697c3 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -193,7 +193,7 @@ Applies to: `compatible = "zmk,behavior-sticky-key"` | Property | Type | Description | Default | | ------------------ | ------------- | ------------------------------------------------------------------------ | ------- | -| `#binding-cells` | int | Must match the number of parameters the `bindings` behavior uses | | +| `#binding-cells` | int | Must be `<1>` | | | `bindings` | phandle array | A behavior (without parameters) to trigger | | | `release-after-ms` | int | Releases the key after this many milliseconds if no other key is pressed | 1000 | | `quick-release` | bool | Release the sticky key on the next key press instead of release | false | From 2bab81a3046302c4c07d93150e35ca39b87af560 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 23:16:58 -0800 Subject: [PATCH 0851/1130] fix(docs): Note -var definition files for macros --- docs/docs/config/behaviors.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index c1d44f697c3..db24f805b7c 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -126,7 +126,11 @@ See the [macro behavior](../behaviors/macros.md) documentation for more details ### Devicetree -Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro.yaml) +Definition files: + +- [zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro.yaml) +- [zmk/app/dts/bindings/behaviors/zmk,behavior-macro-one-param.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro-one-param.yaml) +- [zmk/app/dts/bindings/behaviors/zmk,behavior-macro-two-param.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro-two-param.yaml) | Property | Type | Description | Default | | ---------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | From 56d863cba6e26c49a43b6b1bf0404765823dfad6 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 23:04:28 -0800 Subject: [PATCH 0852/1130] feat(docs): Document sensor-rotate in behaviors config --- docs/docs/config/behaviors.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index db24f805b7c..119b3d22615 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -183,6 +183,27 @@ You can use the following nodes to tweak the default behaviors: | -------- | ----------------------------------------- | | `&gresc` | [Grave escape](../behaviors/mod-morph.md) | +## Sensor Rotation + +Creates a custom behavior which sends a tap of other behaviors when a sensor is rotated. +Has two variants: with `compatible = "zmk,behavior-sensor-rotate"` it accepts no parameters when used, whereas with `compatible = "zmk,behavior-sensor-rotate-var"` it accepts two parameters. + +See the [sensor rotation behavior](../behaviors/sensor-rotate.md) documentation for more details and examples. + +### Devicetree + +Definition files: + +- [zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sensor-rotate.yaml) +- [zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sensor-rotate-var.yaml) + +| Property | Type | Description | Default | +| ----------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `compatible` | string | Sensor rotation type, **must be _one_ of**:
    • `"zmk,behavior-sensor-rotate"`
    • `"zmk,behavior-sensor-rotate-var"` | | +| `#sensor-binding-cells` | int | Number of params accepted (depends on `compatible` property), **must be _one_ of**:
    • `<0>`
    • `<2>` | | +| `bindings` | phandle array | A list of two behaviors to trigger for each rotation direction, must include parameters for `"zmk,behavior-sensor-rotate"` and exclude them for `"zmk,behavior-sensor-rotate-var"` | | +| `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | + ## Sticky Key Creates a custom behavior that triggers a behavior and keeps it pressed it until another key is pressed and released. From 55bf7cae7e67a57831ccd003061d60859deb9ff9 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 23:28:41 -0800 Subject: [PATCH 0853/1130] feat(docs): Note how parameters are forwarded for behaviors --- docs/docs/config/behaviors.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 119b3d22615..bb5f14e14d7 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -68,6 +68,8 @@ Applies to: `compatible = "zmk,behavior-hold-tap"` | `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | | `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | +This behavior forwards the first parameter it receives to the parameter of the first behavior specified in `bindings`, and second parameter to the parameter of the second behavior. + The `flavor` property may be one of: - `"hold-preferred"` @@ -140,6 +142,8 @@ Definition files: | `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | | `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | +With `compatible = "zmk,behavior-macro-one-param"` or `compatible = "zmk,behavior-macro-two-param"`, this behavior forwards the parameters it receives according to the `¯o_param_*` control behaviors noted below. + ### Macro Control Behaviors The following macro-specific behaviors can be added at any point in the `bindings` list to change how the macro triggers subsequent behaviors. @@ -204,6 +208,8 @@ Definition files: | `bindings` | phandle array | A list of two behaviors to trigger for each rotation direction, must include parameters for `"zmk,behavior-sensor-rotate"` and exclude them for `"zmk,behavior-sensor-rotate-var"` | | | `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | +With `compatible = "zmk,behavior-sensor-rotate-var"`, this behavior forwards the first parameter it receives to the parameter of the first behavior specified in `bindings`, and second parameter to the parameter of the second behavior. + ## Sticky Key Creates a custom behavior that triggers a behavior and keeps it pressed it until another key is pressed and released. @@ -224,6 +230,8 @@ Applies to: `compatible = "zmk,behavior-sticky-key"` | `quick-release` | bool | Release the sticky key on the next key press instead of release | false | | `ignore-modifiers` | bool | If enabled, pressing a modifier key does not cancel the sticky key | true | +This behavior forwards the one parameter it receives to the parameter of the behavior specified in `bindings`. + You can use the following nodes to tweak the default behaviors: | Node | Behavior | From 09d47d81176175ed104d6b1de1bae804dfbca9fc Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 5 Dec 2023 14:14:06 -0800 Subject: [PATCH 0854/1130] refactor(docs): Convert breaks to unordered lists in tables Co-authored-by: Joel Spadin --- docs/docs/config/behaviors.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index bb5f14e14d7..09498e6bebd 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -134,13 +134,13 @@ Definition files: - [zmk/app/dts/bindings/behaviors/zmk,behavior-macro-one-param.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro-one-param.yaml) - [zmk/app/dts/bindings/behaviors/zmk,behavior-macro-two-param.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-macro-two-param.yaml) -| Property | Type | Description | Default | -| ---------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | -| `compatible` | string | Macro type, **must be _one_ of**:
    • `"zmk,behavior-macro"`
    • `"zmk,behavior-macro-one-param"`
    • `"zmk,behavior-macro-two-param"` | | -| `#binding-cells` | int | Number of params accepted (depends on `compatible` property), **must be _one_ of**:
    • `<0>`
    • `<1>`
    • `<2>` | | -| `bindings` | phandle array | List of behaviors to trigger | | -| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | -| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | +| Property | Type | Description | Default | +| ---------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| `compatible` | string | Macro type, **must be _one_ of**:

    • `"zmk,behavior-macro"`
    • `"zmk,behavior-macro-one-param"`
    • `"zmk,behavior-macro-two-param"`
    | | +| `#binding-cells` | int | Must be
    • `<0>` if `compatible = "zmk,behavior-macro"`
    • `<1>` if `compatible = "zmk,behavior-macro-one-param"`
    • `<2>` if `compatible = "zmk,behavior-macro-two-param"`
    | | +| `bindings` | phandle array | List of behaviors to trigger | | +| `wait-ms` | int | The default time to wait (in milliseconds) before triggering the next behavior. | `CONFIG_ZMK_MACRO_DEFAULT_WAIT_MS` | +| `tap-ms` | int | The default time to wait (in milliseconds) between the press and release events of a tapped behavior. | `CONFIG_ZMK_MACRO_DEFAULT_TAP_MS` | With `compatible = "zmk,behavior-macro-one-param"` or `compatible = "zmk,behavior-macro-two-param"`, this behavior forwards the parameters it receives according to the `¯o_param_*` control behaviors noted below. @@ -203,8 +203,8 @@ Definition files: | Property | Type | Description | Default | | ----------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `compatible` | string | Sensor rotation type, **must be _one_ of**:
    • `"zmk,behavior-sensor-rotate"`
    • `"zmk,behavior-sensor-rotate-var"` | | -| `#sensor-binding-cells` | int | Number of params accepted (depends on `compatible` property), **must be _one_ of**:
    • `<0>`
    • `<2>` | | +| `compatible` | string | Sensor rotation type, **must be _one_ of**:
    • `"zmk,behavior-sensor-rotate"`
    • `"zmk,behavior-sensor-rotate-var"`
    | | +| `#sensor-binding-cells` | int | Must be
    • `<0>` if `compatible = "zmk,behavior-sensor-rotate"`
    • `<2>` if `compatible = "zmk,behavior-sensor-rotate-var"`
    | | | `bindings` | phandle array | A list of two behaviors to trigger for each rotation direction, must include parameters for `"zmk,behavior-sensor-rotate"` and exclude them for `"zmk,behavior-sensor-rotate-var"` | | | `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | From 384637ae6c8073ef7e5ac87db111c8aaab972015 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 3 Dec 2023 22:36:04 -0800 Subject: [PATCH 0855/1130] fix(docs): Fix text blurb about split Kconfig.defconfig --- docs/docs/development/new-shield.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index 291a7f63e85..dd63fa9b880 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -113,10 +113,11 @@ config ZMK_KEYBOARD_NAME endif ``` -Similarly to defining the halves of a split board in `Kconfig.shield` it is important to set the `ZMK_KEYBOARD_NAME` for each half of a split keyboard. -You'll also want to set which half is the central side. Most boards set it to the left. -Then on the peripheral half, you'll want to turn USB on so that it shows USB status on displays properly. -Finally, you'll want to turn on the split option for both sides. This can all be seen below. +For split keyboards, `Kconfig.defconfig` needs to specify a few more options. +Which side is central (usually the left) is determined via the configuration in this file. +For that side, the keyboard name is assigned and the central config is set. +The peripheral side is typically not assigned a name since only the central will be advertising for connections to other devices. +Finally, the split config needs to be set for both sides: ```kconfig if SHIELD_MY_BOARD_LEFT From 96f9031951f4edc3477b523e5cc33bafe8017482 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 7 Dec 2023 10:41:40 -0800 Subject: [PATCH 0856/1130] fix(build): Only copy if zephyr module detected * To fix issues with breakage with existing user config repos, only do our copy strategy if we detect a zephyr module present in the repo as well. --- .github/workflows/build-user-config.yml | 35 ++++++++++++++----------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index d6fbaa5ca68..7efa6425f92 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -66,11 +66,12 @@ jobs: shield: ${{ matrix.shield }} artifact_name: ${{ matrix.artifact-name }} run: | - export new_tmp_dir=$(mktemp -d) - echo "tmp_dir=${new_tmp_dir}" >> $GITHUB_ENV - echo "tmp_config_dir=${new_tmp_dir}/config" >> $GITHUB_ENV if [ -e zephyr/module.yml ]; then export zmk_load_arg=" -DZMK_EXTRA_MODULES='${GITHUB_WORKSPACE}'" + export new_tmp_dir=$(mktemp -d) + echo "base_dir=${new_tmp_dir}" >> $GITHUB_ENV + else + echo "base_dir=${GITHUB_WORKSPACE}" >> $GITHUB_ENV fi echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV @@ -80,8 +81,10 @@ jobs: - name: Copy config files to isolated temporary directory run: | - mkdir "${{ env.tmp_config_dir }}" - cp -R ${{ inputs.config_path }}/* "${{ env.tmp_config_dir }}/" + if [ "${{ env.base_dir }}" != "${GITHUB_WORKSPACE}" ]; then + mkdir "${{ env.base_dir }}/${{ inputs.config_path }}" + cp -R ${{ inputs.config_path }}/* "${{ env.base_dir }}/${{ inputs.config_path }}/" + fi - name: Cache west modules uses: actions/cache@v3.0.11 @@ -90,11 +93,11 @@ jobs: cache_name: cache-zephyr-${{ env.zephyr_version }}-modules with: path: | - ${{ env.tmp_dir }}/modules/ - ${{ env.tmp_dir }}/tools/ - ${{ env.tmp_dir }}/zephyr/ - ${{ env.tmp_dir }}/bootloader/ - ${{ env.tmp_dir }}/zmk/ + ${{ env.base_dir }}/modules/ + ${{ env.base_dir }}/tools/ + ${{ env.base_dir }}/zephyr/ + ${{ env.base_dir }}/bootloader/ + ${{ env.base_dir }}/zmk/ key: ${{ runner.os }}-build-${{ env.cache_name }}-${{ hashFiles('**/west.yml', '**/build.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache_name }}- @@ -102,21 +105,21 @@ jobs: ${{ runner.os }}- - name: West Init - working-directory: ${{ env.tmp_dir }} - run: west init -l "${{ env.tmp_config_dir }}" + working-directory: ${{ env.base_dir }} + run: west init -l "${{ env.base_dir }}/${{ inputs.config_path }}" - name: West Update - working-directory: ${{ env.tmp_dir }} + working-directory: ${{ env.base_dir }} run: west update - name: West Zephyr export - working-directory: ${{ env.tmp_dir }} + working-directory: ${{ env.base_dir }} run: west zephyr-export - name: West Build (${{ env.display_name }}) - working-directory: ${{ env.tmp_dir }} + working-directory: ${{ env.base_dir }} shell: sh -x {0} - run: west build -s zmk/app -d "${{ env.build_dir }}" -b "${{ matrix.board }}" -- -DZMK_CONFIG=${{ env.tmp_config_dir }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} + run: west build -s zmk/app -d "${{ env.build_dir }}" -b "${{ matrix.board }}" -- -DZMK_CONFIG=${{ env.base_dir }}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file run: | From 63c8c5700acb781ca9ac7c7985f78e0b95ff8130 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 6 Dec 2023 23:07:20 +0000 Subject: [PATCH 0857/1130] feat(bt): Add more experimental tweaks. * Support auto security upgrade for splits properly. * Disable 2M and legacy LLCP if the experimental Kconfig flag is selected. --- app/Kconfig | 22 +++++++++++++--------- app/src/split/bluetooth/central.c | 2 ++ docs/docs/config/bluetooth.md | 10 +++++----- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index fff63a5b9fc..a9b1b39e696 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -144,28 +144,32 @@ if ZMK_BLE config ZMK_BLE_EXPERIMENTAL_FEATURES bool "Experimental: Enable experimental/advanced BLE settings/features" - select ZMK_BLE_PASSKEY_ENTRY - select BT_GATT_AUTO_SEC_REQ - select BT_SMP_ALLOW_UNAUTH_OVERWRITE + imply ZMK_BLE_PASSKEY_ENTRY + imply BT_GATT_AUTO_SEC_REQ + imply BT_SMP_ALLOW_UNAUTH_OVERWRITE help Enables a combination of settings that are planned to be default in future versions of ZMK. This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, - and allowing overwrite of keys from previously paired hosts. + restores use of the updated/new LLCP implementation, disables 2M PHY support, and allows + overwrite of keys from previously paired hosts. config ZMK_BLE_PASSKEY_ENTRY bool "Require passkey entry on the keyboard to complete pairing" default n select RING_BUFFER -# BT_TINYCRYPT_ECC is required for BT_SMP_SC_PAIR_ONLY when using HCI -config BT_TINYCRYPT_ECC - default y if BT_HCI && !BT_CTLR - choice BT_LL_SW_LLCP_IMPL - default BT_LL_SW_LLCP_LEGACY + default BT_LL_SW_LLCP_LEGACY if !ZMK_BLE_EXPERIMENTAL_FEATURES endchoice +config BT_CTLR_PHY_2M + default n if ZMK_BLE_EXPERIMENTAL_FEATURES + +# BT_TINYCRYPT_ECC is required for BT_SMP_SC_PAIR_ONLY when using HCI +config BT_TINYCRYPT_ECC + default y if BT_HCI && !BT_CTLR + config SYSTEM_WORKQUEUE_STACK_SIZE default 4096 if SOC_RP2040 default 2048 diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 6f3b78ab883..3635322431c 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -397,11 +397,13 @@ static void split_central_process_connection(struct bt_conn *conn) { LOG_DBG("Current security for connection: %d", bt_conn_get_security(conn)); +#if !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) err = bt_conn_set_security(conn, BT_SECURITY_L2); if (err) { LOG_ERR("Failed to set security (reason %d)", err); return; } +#endif // !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) struct peripheral_slot *slot = peripheral_slot_for_conn(conn); if (slot == NULL) { diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md index f957b77e3a6..61477cb5381 100644 --- a/docs/docs/config/bluetooth.md +++ b/docs/docs/config/bluetooth.md @@ -9,8 +9,8 @@ See [Configuration Overview](index.md) for instructions on how to change these s ## Kconfig -| Option | Type | Description | Default | -| -------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK. This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, and allowing overwrite of keys from previously paired hosts. | n | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts) | n | -| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | +| Option | Type | Description | Default | +| -------------------------------------- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK. This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, restores use of the updated/new LLCP implementation, disables 2M PHY support, and allows overwrite of keys from previously paired hosts. | n | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts) | n | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | From b35a5e83c05a3ed9db8d13e5571ee20f588fa3ad Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 8 Dec 2023 14:11:36 -0800 Subject: [PATCH 0858/1130] fix(shields): Don't enable passkey support on Uno. * The ZMK Uno has no way to input the full range of digits, so skip that setting so it's not pulled in by BLE experimental feature flag. --- app/boards/shields/zmk_uno/zmk_uno.conf | 2 ++ app/boards/shields/zmk_uno/zmk_uno_split_left.conf | 2 ++ app/boards/shields/zmk_uno/zmk_uno_split_right.conf | 2 ++ 3 files changed, 6 insertions(+) diff --git a/app/boards/shields/zmk_uno/zmk_uno.conf b/app/boards/shields/zmk_uno/zmk_uno.conf index cf282bac2cb..0c46ea98834 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.conf +++ b/app/boards/shields/zmk_uno/zmk_uno.conf @@ -4,6 +4,8 @@ CONFIG_LOG=y CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_ZMK_BLE_PASSKEY_ENTRY=n + # Uncomment for Single color backlight # CONFIG_ZMK_BACKLIGHT=y diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_left.conf b/app/boards/shields/zmk_uno/zmk_uno_split_left.conf index cf282bac2cb..0c46ea98834 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split_left.conf +++ b/app/boards/shields/zmk_uno/zmk_uno_split_left.conf @@ -4,6 +4,8 @@ CONFIG_LOG=y CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_ZMK_BLE_PASSKEY_ENTRY=n + # Uncomment for Single color backlight # CONFIG_ZMK_BACKLIGHT=y diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_right.conf b/app/boards/shields/zmk_uno/zmk_uno_split_right.conf index cf282bac2cb..0c46ea98834 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split_right.conf +++ b/app/boards/shields/zmk_uno/zmk_uno_split_right.conf @@ -4,6 +4,8 @@ CONFIG_LOG=y CONFIG_ZMK_LOG_LEVEL_DBG=y +CONFIG_ZMK_BLE_PASSKEY_ENTRY=n + # Uncomment for Single color backlight # CONFIG_ZMK_BACKLIGHT=y From 2c50cff891becd70e04152202ee76a1be95089fa Mon Sep 17 00:00:00 2001 From: Hooky <117450225+HookyKB@users.noreply.github.com> Date: Sun, 10 Dec 2023 06:10:05 +0800 Subject: [PATCH 0859/1130] feat(kscan): Add charlieplex keyscan driver * Supports matrixes with and without additional interrupt pin use. Co-authored-by: Peter Johanson --- app/module/drivers/kscan/CMakeLists.txt | 3 +- app/module/drivers/kscan/Kconfig | 30 ++ .../drivers/kscan/kscan_gpio_charlieplex.c | 420 ++++++++++++++++++ .../kscan/zmk,kscan-gpio-charlieplex.yaml | 31 ++ docs/docs/config/kscan.md | 86 +++- 5 files changed, 563 insertions(+), 7 deletions(-) create mode 100644 app/module/drivers/kscan/kscan_gpio_charlieplex.c create mode 100644 app/module/dts/bindings/kscan/zmk,kscan-gpio-charlieplex.yaml diff --git a/app/module/drivers/kscan/CMakeLists.txt b/app/module/drivers/kscan/CMakeLists.txt index 7ae9524c75f..5b05af767e2 100644 --- a/app/module/drivers/kscan/CMakeLists.txt +++ b/app/module/drivers/kscan/CMakeLists.txt @@ -1,10 +1,11 @@ -# Copyright (c) 2020 The ZMK Contributors +# Copyright (c) 2020-2023 The ZMK Contributors # SPDX-License-Identifier: MIT zephyr_library_amend() zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DRIVER kscan_gpio.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_MATRIX kscan_gpio_matrix.c) +zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_CHARLIEPLEX kscan_gpio_charlieplex.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DIRECT kscan_gpio_direct.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_GPIO_DEMUX kscan_gpio_demux.c) zephyr_library_sources_ifdef(CONFIG_ZMK_KSCAN_MOCK_DRIVER kscan_mock.c) diff --git a/app/module/drivers/kscan/Kconfig b/app/module/drivers/kscan/Kconfig index 6f60b3f919f..6b701936d4f 100644 --- a/app/module/drivers/kscan/Kconfig +++ b/app/module/drivers/kscan/Kconfig @@ -5,6 +5,7 @@ DT_COMPAT_ZMK_KSCAN_COMPOSITE := zmk,kscan-composite DT_COMPAT_ZMK_KSCAN_GPIO_DEMUX := zmk,kscan-gpio-demux DT_COMPAT_ZMK_KSCAN_GPIO_DIRECT := zmk,kscan-gpio-direct DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX := zmk,kscan-gpio-matrix +DT_COMPAT_ZMK_KSCAN_GPIO_CHARLIEPLEX := zmk,kscan-gpio-charlieplex DT_COMPAT_ZMK_KSCAN_MOCK := zmk,kscan-mock if KSCAN @@ -33,6 +34,11 @@ config ZMK_KSCAN_GPIO_MATRIX default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX)) select ZMK_KSCAN_GPIO_DRIVER +config ZMK_KSCAN_GPIO_CHARLIEPLEX + bool + default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_CHARLIEPLEX)) + select ZMK_KSCAN_GPIO_DRIVER + if ZMK_KSCAN_GPIO_MATRIX config ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS @@ -58,6 +64,30 @@ config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS endif # ZMK_KSCAN_GPIO_MATRIX +if ZMK_KSCAN_GPIO_CHARLIEPLEX + +config ZMK_KSCAN_CHARLIEPLEX_WAIT_BEFORE_INPUTS + int "Ticks to wait before reading inputs after an output set active" + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for output to propagate to the + inputs. In that scenario, set this value to a positive value to configure + the number of ticks to wait after setting an output active before reading + the inputs for their active state. + +config ZMK_KSCAN_CHARLIEPLEX_WAIT_BETWEEN_OUTPUTS + int "Ticks to wait between each output when scanning charlieplex matrix" + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for the previous output to + "settle" before reading inputs for the next active output column. In that + scenario, set this value to a positive value to configure the number of + usecs to wait after reading each column of keys. + +endif # ZMK_KSCAN_GPIO_CHARLIEPLEX + config ZMK_KSCAN_MOCK_DRIVER bool default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_MOCK)) diff --git a/app/module/drivers/kscan/kscan_gpio_charlieplex.c b/app/module/drivers/kscan/kscan_gpio_charlieplex.c new file mode 100644 index 00000000000..f450af2b59c --- /dev/null +++ b/app/module/drivers/kscan/kscan_gpio_charlieplex.c @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2020-2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define DT_DRV_COMPAT zmk_kscan_gpio_charlieplex + +#define INST_LEN(n) DT_INST_PROP_LEN(n, gpios) +#define INST_CHARLIEPLEX_LEN(n) (INST_LEN(n) * INST_LEN(n)) + +#if CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS >= 0 +#define INST_DEBOUNCE_PRESS_MS(n) CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS +#else +#define INST_DEBOUNCE_PRESS_MS(n) \ + DT_INST_PROP_OR(n, debounce_period, DT_INST_PROP(n, debounce_press_ms)) +#endif + +#if CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS >= 0 +#define INST_DEBOUNCE_RELEASE_MS(n) CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS +#else +#define INST_DEBOUNCE_RELEASE_MS(n) \ + DT_INST_PROP_OR(n, debounce_period, DT_INST_PROP(n, debounce_release_ms)) +#endif + +#define KSCAN_GPIO_CFG_INIT(idx, inst_idx) \ + GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst_idx), gpios, idx) + +#define INST_INTR_DEFINED(n) DT_INST_NODE_HAS_PROP(n, interrupt_gpios) + +#define WITH_INTR(n) COND_CODE_1(INST_INTR_DEFINED(n), (+1), (+0)) +#define WITHOUT_INTR(n) COND_CODE_0(INST_INTR_DEFINED(n), (+1), (+0)) + +#define USES_POLLING DT_INST_FOREACH_STATUS_OKAY(WITHOUT_INTR) > 0 +#define USES_INTERRUPT DT_INST_FOREACH_STATUS_OKAY(WITH_INTR) > 0 + +#if USES_POLLING && USES_INTERRUPT +#define USES_POLL_AND_INTR 1 +#else +#define USES_POLL_AND_INTR 0 +#endif + +#define COND_ANY_POLLING(code) COND_CODE_1(USES_POLLING, code, ()) +#define COND_POLL_AND_INTR(code) COND_CODE_1(USES_POLL_AND_INTR, code, ()) +#define COND_THIS_INTERRUPT(n, code) COND_CODE_1(INST_INTR_DEFINED(n), code, ()) + +#define KSCAN_INTR_CFG_INIT(inst_idx) GPIO_DT_SPEC_GET(DT_DRV_INST(inst_idx), interrupt_gpios) + +struct kscan_charlieplex_data { + const struct device *dev; + kscan_callback_t callback; + struct k_work_delayable work; + int64_t scan_time; /* Timestamp of the current or scheduled scan. */ + struct gpio_callback irq_callback; + /** + * Current state of the matrix as a flattened 2D array of length + * (config->cells.length ^2) + */ + struct zmk_debounce_state *charlieplex_state; +}; + +struct kscan_gpio_list { + const struct gpio_dt_spec *gpios; + size_t len; +}; + +/** Define a kscan_gpio_list from a compile-time GPIO array. */ +#define KSCAN_GPIO_LIST(gpio_array) \ + ((struct kscan_gpio_list){.gpios = gpio_array, .len = ARRAY_SIZE(gpio_array)}) + +struct kscan_charlieplex_config { + struct kscan_gpio_list cells; + struct zmk_debounce_config debounce_config; + int32_t debounce_scan_period_ms; + int32_t poll_period_ms; + bool use_interrupt; + const struct gpio_dt_spec interrupt; +}; + +/** + * Get the index into a matrix state array from a row and column. + * There are effectively (n) cols and (n-1) rows, but we use the full col x row space + * as a safety measure against someone accidentally defining a transform RC at (p,p) + */ +static int state_index(const struct kscan_charlieplex_config *config, const int row, + const int col) { + __ASSERT(row < config->cells.len, "Invalid row %i", row); + __ASSERT(col < config->cells.len, "Invalid column %i", col); + __ASSERT(col != row, "Invalid column row pair %i, %i", col, row); + + return (col * config->cells.len) + row; +} + +static int kscan_charlieplex_set_as_input(const struct gpio_dt_spec *gpio) { + if (!device_is_ready(gpio->port)) { + LOG_ERR("GPIO is not ready: %s", gpio->port->name); + return -ENODEV; + } + + gpio_flags_t pull_flag = + ((gpio->dt_flags & GPIO_ACTIVE_LOW) == GPIO_ACTIVE_LOW) ? GPIO_PULL_UP : GPIO_PULL_DOWN; + + int err = gpio_pin_configure_dt(gpio, GPIO_INPUT | pull_flag); + if (err) { + LOG_ERR("Unable to configure pin %u on %s for input", gpio->pin, gpio->port->name); + return err; + } + return 0; +} + +static int kscan_charlieplex_set_as_output(const struct gpio_dt_spec *gpio) { + if (!device_is_ready(gpio->port)) { + LOG_ERR("GPIO is not ready: %s", gpio->port->name); + return -ENODEV; + } + + int err = gpio_pin_configure_dt(gpio, GPIO_OUTPUT); + if (err) { + LOG_ERR("Unable to configure pin %u on %s for output", gpio->pin, gpio->port->name); + return err; + } + + err = gpio_pin_set_dt(gpio, 1); + if (err) { + LOG_ERR("Failed to set output pin %u active: %i", gpio->pin, err); + } + return err; +} + +static int kscan_charlieplex_set_all_as_input(const struct device *dev) { + const struct kscan_charlieplex_config *config = dev->config; + int err = 0; + for (int i = 0; i < config->cells.len; i++) { + err = kscan_charlieplex_set_as_input(&config->cells.gpios[i]); + if (err) { + return err; + } + } + + return 0; +} + +static int kscan_charlieplex_set_all_outputs(const struct device *dev, const int value) { + const struct kscan_charlieplex_config *config = dev->config; + + for (int i = 0; i < config->cells.len; i++) { + const struct gpio_dt_spec *gpio = &config->cells.gpios[i]; + int err = gpio_pin_configure_dt(gpio, GPIO_OUTPUT); + if (err) { + LOG_ERR("Unable to configure pin %u on %s for input", gpio->pin, gpio->port->name); + return err; + } + + err = gpio_pin_set_dt(gpio, value); + if (err) { + LOG_ERR("Failed to set output %i to %i: %i", i, value, err); + return err; + } + } + + return 0; +} + +static int kscan_charlieplex_interrupt_configure(const struct device *dev, + const gpio_flags_t flags) { + const struct kscan_charlieplex_config *config = dev->config; + const struct gpio_dt_spec *gpio = &config->interrupt; + + int err = gpio_pin_interrupt_configure_dt(gpio, flags); + if (err) { + LOG_ERR("Unable to configure interrupt for pin %u on %s", gpio->pin, gpio->port->name); + return err; + } + + return 0; +} + +static int kscan_charlieplex_interrupt_enable(const struct device *dev) { + int err = kscan_charlieplex_interrupt_configure(dev, GPIO_INT_LEVEL_ACTIVE); + if (err) { + return err; + } + + // While interrupts are enabled, set all outputs active so an pressed key will trigger + return kscan_charlieplex_set_all_outputs(dev, 1); +} + +static void kscan_charlieplex_irq_callback(const struct device *port, struct gpio_callback *cb, + const gpio_port_pins_t _pin) { + struct kscan_charlieplex_data *data = + CONTAINER_OF(cb, struct kscan_charlieplex_data, irq_callback); + + // Disable our interrupt to avoid re-entry while we scan. + kscan_charlieplex_interrupt_configure(data->dev, GPIO_INT_DISABLE); + data->scan_time = k_uptime_get(); + k_work_reschedule(&data->work, K_NO_WAIT); +} + +static void kscan_charlieplex_read_continue(const struct device *dev) { + const struct kscan_charlieplex_config *config = dev->config; + struct kscan_charlieplex_data *data = dev->data; + + data->scan_time += config->debounce_scan_period_ms; + + k_work_reschedule(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); +} + +static void kscan_charlieplex_read_end(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + const struct kscan_charlieplex_config *config = dev->config; + + if (config->use_interrupt) { + // Return to waiting for an interrupt. + kscan_charlieplex_interrupt_enable(dev); + } else { + data->scan_time += config->poll_period_ms; + + // Return to polling slowly. + k_work_reschedule(&data->work, K_TIMEOUT_ABS_MS(data->scan_time)); + } +} + +static int kscan_charlieplex_read(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + const struct kscan_charlieplex_config *config = dev->config; + bool continue_scan = false; + + // NOTE: RR vs MATRIX: set all pins as input, in case there was a failure on a + // previous scan, and one of the pins is still set as output + int err = kscan_charlieplex_set_all_as_input(dev); + if (err) { + return err; + } + + // Scan the matrix. + for (int row = 0; row < config->cells.len; row++) { + const struct gpio_dt_spec *out_gpio = &config->cells.gpios[row]; + err = kscan_charlieplex_set_as_output(out_gpio); + if (err) { + return err; + } + +#if CONFIG_ZMK_KSCAN_CHARLIEPLEX_WAIT_BEFORE_INPUTS > 0 + k_busy_wait(CONFIG_ZMK_KSCAN_CHARLIEPLEX_WAIT_BEFORE_INPUTS); +#endif + + for (int col = 0; col < config->cells.len; col++) { + if (col == row) { + continue; // pin can't drive itself + } + const struct gpio_dt_spec *in_gpio = &config->cells.gpios[col]; + const int index = state_index(config, row, col); + + struct zmk_debounce_state *state = &data->charlieplex_state[index]; + zmk_debounce_update(state, gpio_pin_get_dt(in_gpio), config->debounce_scan_period_ms, + &config->debounce_config); + + // NOTE: RR vs MATRIX: because we don't need an input/output => row/column + // setup, we can update in the same loop. + if (zmk_debounce_get_changed(state)) { + const bool pressed = zmk_debounce_is_pressed(state); + + LOG_DBG("Sending event at %i,%i state %s", row, col, pressed ? "on" : "off"); + data->callback(dev, row, col, pressed); + } + continue_scan = continue_scan || zmk_debounce_is_active(state); + } + + err = kscan_charlieplex_set_as_input(out_gpio); + if (err) { + return err; + } +#if CONFIG_ZMK_KSCAN_CHARLIEPLEX_WAIT_BETWEEN_OUTPUTS > 0 + k_busy_wait(CONFIG_ZMK_KSCAN_CHARLIEPLEX_WAIT_BETWEEN_OUTPUTS); +#endif + } + + if (continue_scan) { + // At least one key is pressed or the debouncer has not yet decided if + // it is pressed. Poll quickly until everything is released. + kscan_charlieplex_read_continue(dev); + } else { + // All keys are released. Return to normal. + kscan_charlieplex_read_end(dev); + } + + return 0; +} + +static void kscan_charlieplex_work_handler(struct k_work *work) { + struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); + struct kscan_charlieplex_data *data = CONTAINER_OF(dwork, struct kscan_charlieplex_data, work); + kscan_charlieplex_read(data->dev); +} + +static int kscan_charlieplex_configure(const struct device *dev, const kscan_callback_t callback) { + if (!callback) { + return -EINVAL; + } + + struct kscan_charlieplex_data *data = dev->data; + data->callback = callback; + return 0; +} + +static int kscan_charlieplex_enable(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + data->scan_time = k_uptime_get(); + + // Read will automatically start interrupts/polling once done. + return kscan_charlieplex_read(dev); +} + +static int kscan_charlieplex_disable(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + k_work_cancel_delayable(&data->work); + + const struct kscan_charlieplex_config *config = dev->config; + if (config->use_interrupt) { + return kscan_charlieplex_interrupt_configure(dev, GPIO_INT_DISABLE); + } + return 0; +} + +static int kscan_charlieplex_init_inputs(const struct device *dev) { + const struct kscan_charlieplex_config *config = dev->config; + + for (int i = 0; i < config->cells.len; i++) { + int err = kscan_charlieplex_set_as_input(&config->cells.gpios[i]); + if (err) { + return err; + } + } + + return 0; +} + +static int kscan_charlieplex_init_interrupt(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + + const struct kscan_charlieplex_config *config = dev->config; + const struct gpio_dt_spec *gpio = &config->interrupt; + int err = kscan_charlieplex_set_as_input(gpio); + if (err) { + return err; + } + + gpio_init_callback(&data->irq_callback, kscan_charlieplex_irq_callback, BIT(gpio->pin)); + err = gpio_add_callback(gpio->port, &data->irq_callback); + if (err) { + LOG_ERR("Error adding the callback to the input device: %i", err); + } + return err; +} + +static int kscan_charlieplex_init(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + + data->dev = dev; + + kscan_charlieplex_init_inputs(dev); + kscan_charlieplex_set_all_outputs(dev, 0); + + const struct kscan_charlieplex_config *config = dev->config; + if (config->use_interrupt) { + kscan_charlieplex_init_interrupt(dev); + } + k_work_init_delayable(&data->work, kscan_charlieplex_work_handler); + return 0; +} + +static const struct kscan_driver_api kscan_charlieplex_api = { + .config = kscan_charlieplex_configure, + .enable_callback = kscan_charlieplex_enable, + .disable_callback = kscan_charlieplex_disable, +}; + +#define KSCAN_CHARLIEPLEX_INIT(n) \ + BUILD_ASSERT(INST_DEBOUNCE_PRESS_MS(n) <= DEBOUNCE_COUNTER_MAX, \ + "ZMK_KSCAN_DEBOUNCE_PRESS_MS or debounce-press-ms is too large"); \ + BUILD_ASSERT(INST_DEBOUNCE_RELEASE_MS(n) <= DEBOUNCE_COUNTER_MAX, \ + "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ + \ + static struct zmk_debounce_state kscan_charlieplex_state_##n[INST_CHARLIEPLEX_LEN(n)]; \ + static const struct gpio_dt_spec kscan_charlieplex_cells_##n[] = { \ + LISTIFY(INST_LEN(n), KSCAN_GPIO_CFG_INIT, (, ), n)}; \ + static struct kscan_charlieplex_data kscan_charlieplex_data_##n = { \ + .charlieplex_state = kscan_charlieplex_state_##n, \ + }; \ + \ + static struct kscan_charlieplex_config kscan_charlieplex_config_##n = { \ + .cells = KSCAN_GPIO_LIST(kscan_charlieplex_cells_##n), \ + .debounce_config = \ + { \ + .debounce_press_ms = INST_DEBOUNCE_PRESS_MS(n), \ + .debounce_release_ms = INST_DEBOUNCE_RELEASE_MS(n), \ + }, \ + .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ + COND_ANY_POLLING((.poll_period_ms = DT_INST_PROP(n, poll_period_ms), )) \ + COND_POLL_AND_INTR((.use_interrupt = INST_INTR_DEFINED(n), )) \ + COND_THIS_INTERRUPT(n, (.interrupt = KSCAN_INTR_CFG_INIT(n), ))}; \ + \ + DEVICE_DT_INST_DEFINE(n, &kscan_charlieplex_init, NULL, &kscan_charlieplex_data_##n, \ + &kscan_charlieplex_config_##n, APPLICATION, \ + CONFIG_APPLICATION_INIT_PRIORITY, &kscan_charlieplex_api); + +DT_INST_FOREACH_STATUS_OKAY(KSCAN_CHARLIEPLEX_INIT); diff --git a/app/module/dts/bindings/kscan/zmk,kscan-gpio-charlieplex.yaml b/app/module/dts/bindings/kscan/zmk,kscan-gpio-charlieplex.yaml new file mode 100644 index 00000000000..f8da1d27bb9 --- /dev/null +++ b/app/module/dts/bindings/kscan/zmk,kscan-gpio-charlieplex.yaml @@ -0,0 +1,31 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: GPIO keyboard charlieplex matrix controller + +compatible: "zmk,kscan-gpio-charlieplex" + +include: kscan.yaml + +properties: + gpios: + type: phandle-array + required: true + interrupt-gpios: + type: phandle-array + debounce-press-ms: + type: int + default: 5 + description: Debounce time for key press in milliseconds. Use 0 for eager debouncing. + debounce-release-ms: + type: int + default: 5 + description: Debounce time for key release in milliseconds. + debounce-scan-period-ms: + type: int + default: 1 + description: Time between reads in milliseconds when any key is pressed. + poll-period-ms: + type: int + default: 1 + description: Time between reads in milliseconds diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 96a483ff902..65ea63ec8b7 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -149,6 +149,39 @@ The output pins (e.g. columns for `col2row`) should have the flag `GPIO_ACTIVE_H }; ``` +## Charlieplex Driver + +Keyboard scan driver where keys are arranged on a matrix with each GPIO used as both input and output. + +- With `interrupt-gpios` unset, this allows n pins to drive n\*(n-1) keys. +- With `interrupt-gpios` set, n pins will drive (n-1)\*(n-2) keys, but provide much improved power handling. + +Definition file: [zmk/app/module/drivers/kscan/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/kscan/Kconfig) + +| Config | Type | Description | Default | +| --------------------------------------------------- | ----------- | ------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_KSCAN_CHARLIEPLEX_WAIT_BEFORE_INPUTS` | int (ticks) | How long to wait before reading input pins after setting output active | 0 | +| `CONFIG_ZMK_KSCAN_CHARLIEPLEX_WAIT_BETWEEN_OUTPUTS` | int (ticks) | How long to wait between each output to allow previous output to "settle" | 0 | + +### Devicetree + +Applies to: `compatible = "zmk,kscan-gpio-charlieplex"` + +Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-charlieplex.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/kscan/zmk%2Ckscan-gpio-charlieplex.yaml) + +| Property | Type | Description | Default | +| ------------------------- | ---------- | ------------------------------------------------------------------------------------------- | ------- | +| `gpios` | GPIO array | GPIOs used, listed in order. | | +| `interrupt-gpios` | GPIO array | A single GPIO to use for interrupt. Leaving this empty will enable continuous polling. | | +| `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | +| `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | +| `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | +| `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `interrupt-gpois` is not set. | 10 | + +Define the transform with a [matrix transform](#matrix-transform). The row is always the driven pin, and the column always the receiving pin (input to the controller). +For example, in `RC(5,0)` power flows from the 6th pin in `gpios` to the 1st pin in `gpios`. +Exclude all positions where the row and column are the same as these pairs will never be triggered, since no pin can be both input and output at the same time. + ## Composite Driver Keyboard scan driver which combines multiple other keyboard scan drivers. @@ -393,12 +426,53 @@ Consider a keyboard with a [duplex matrix](https://wiki.ai03.com/books/pcb-desig // Shift Z X C ... // Ctrl Alt ... map = < - RC(0,0) RC(1,0) RC(0,1) RC(1,1) // ... - RC(2,0) RC(3,0) RC(2,1) RC(3,1) // ... - RC(4,0) RC(5,0) RC(4,1) RC(5,1) // ... - RC(6,0) RC(7,0) RC(6,1) RC(7,1) // ... - RC(8,0) RC(8,1) RC(9,1) // ... - RC(10,0) RC(11,0) // ... + RC(0,0) RC(1,0) RC(0,1) RC(1,1) // ... + RC(2,0) RC(3,0) RC(2,1) RC(3,1) // ... + RC(4,0) RC(5,0) RC(4,1) RC(5,1) // ... + RC(6,0) RC(7,0) RC(6,1) RC(7,1) // ... + RC(8,0) RC(9,0) RC(8,1) RC(9,1) // ... + RC(10,0) RC(11,0) // ... + >; + }; +}; +``` + +### Example: Charlieplex + +Since a charlieplex driver will never align with a keyboard directly due to the un-addressable positions, a matrix transform should be used to map the pairs to the layout of the keys. +Note that the entire addressable space does not need to be mapped. + +```devicetree +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-charlieplex"; + + interrupt-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) >; + gpios + = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > + , <&pro_micro 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > + , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > + , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > + , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > + ; // addressable space is 5x5, (minus paired values) + }; + + default_transform: matrix_transform { + compatible = "zmk,matrix-transform"; + rows = <3>; + columns = <5>; + // Q W E R + // A S D F + // Z X C V + map = < + RC(0,1) RC(0,2) RC(0,3) RC(0,4) + RC(1,0) RC(1,2) RC(1,3) RC(1,4) + RC(2,0) RC(2,1) RC(2,3) RC(2,4) >; }; }; From ff57ccc75adcce2b64d37dc923e424d026c5f12f Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 10 Nov 2023 22:51:37 -0800 Subject: [PATCH 0860/1130] feat(shields): Allow settings_reset to build with board-only keyboards --- app/boards/shields/settings_reset/settings_reset.overlay | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/settings_reset/settings_reset.overlay b/app/boards/shields/settings_reset/settings_reset.overlay index 1c3b7145b24..8e12956222a 100644 --- a/app/boards/shields/settings_reset/settings_reset.overlay +++ b/app/boards/shields/settings_reset/settings_reset.overlay @@ -8,10 +8,10 @@ / { chosen { - zmk,kscan = &kscan0; + zmk,kscan = &settings_reset_kscan; }; - kscan0: kscan { + settings_reset_kscan: settings_reset_kscan { compatible = "zmk,kscan-mock"; columns = <1>; rows = <0>; From 52ed49b4bb2ed14ea1a5bc8305cf6f6cabb79673 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 13 Dec 2023 19:13:21 +0000 Subject: [PATCH 0861/1130] fix(ci): Upgrade to github-script@v7 * Also adjust form @actions/upload API changes. --- .github/workflows/build.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 82b156e106c..a7d0560d042 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,13 +55,12 @@ jobs: - name: Install @actions/artifact run: npm install @actions/artifact - name: Build and upload artifacts - uses: actions/github-script@v4 + uses: actions/github-script@v7 id: boards-list with: script: | const fs = require('fs'); - const artifact = require('@actions/artifact'); - const artifactClient = artifact.create(); + const {default: artifact} = require('@actions/artifact'); const execSync = require('child_process').execSync; @@ -90,7 +89,7 @@ jobs: const cmakeName = shieldArgs['cmake-args'] ? '-' + (shieldArgs.nickname || shieldArgs['cmake-args'].split(' ').join('')) : ''; const artifactName = `${{ matrix.board }}${shieldArgs.shield ? '-' + shieldArgs.shield : ''}${cmakeName}-zmk`; - await artifactClient.uploadArtifact(artifactName, files, rootDirectory, options); + await artifact.uploadArtifact(artifactName, files, rootDirectory, options); } catch (e) { console.error(`::error::Failed to build or upload ${{ matrix.board }} ${shieldArgs.shield} ${shieldArgs['cmake-args']}`); console.error(e); @@ -111,7 +110,7 @@ jobs: include-list: ${{ steps.compile-list.outputs.result }} steps: - name: Join build lists - uses: actions/github-script@v4 + uses: actions/github-script@v7 id: compile-list with: script: | @@ -158,7 +157,7 @@ jobs: node-version: "14.x" - name: Install js-yaml run: npm install js-yaml - - uses: actions/github-script@v4 + - uses: actions/github-script@v7 id: core-list with: script: | @@ -187,7 +186,7 @@ jobs: node-version: "14.x" - name: Install js-yaml run: npm install js-yaml - - uses: actions/github-script@v4 + - uses: actions/github-script@v7 id: boards-list with: script: | @@ -264,7 +263,7 @@ jobs: nightly-include: ${{ steps.nightly-list.outputs.result }} steps: - name: Create nightly list - uses: actions/github-script@v4 + uses: actions/github-script@v7 id: nightly-list with: script: | @@ -315,7 +314,7 @@ jobs: - name: Install js-yaml run: npm install js-yaml - name: Aggregate Metadata - uses: actions/github-script@v4 + uses: actions/github-script@v7 id: aggregate-metadata with: script: | @@ -333,7 +332,7 @@ jobs: result-encoding: string - name: Organize Metadata - uses: actions/github-script@v4 + uses: actions/github-script@v7 id: organize-metadata with: script: | @@ -390,7 +389,7 @@ jobs: id: changed-files with: format: "json" - - uses: actions/github-script@v4 + - uses: actions/github-script@v7 id: board-changes with: script: | @@ -398,7 +397,7 @@ jobs: const boardChanges = changedFiles.filter(f => f.startsWith('app/boards')); return boardChanges.length ? 'true' : 'false'; result-encoding: string - - uses: actions/github-script@v4 + - uses: actions/github-script@v7 id: core-changes with: script: | From 9b3a98691c178067e87f888d986e1ec87dda66e6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 13 Dec 2023 10:59:24 -0800 Subject: [PATCH 0862/1130] refactor(bt): Split security and conn exp. Kconfig * Split connection and security experimental changes into dedicated Kconfig flags for easier testing of only connection related fixes. Co-authored-by: Cem Aksoylar --- app/Kconfig | 33 ++++++++++++++++++++++++--------- docs/docs/config/bluetooth.md | 12 +++++++----- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index a9b1b39e696..70d5cc04c0e 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -142,29 +142,44 @@ menuconfig ZMK_BLE if ZMK_BLE -config ZMK_BLE_EXPERIMENTAL_FEATURES - bool "Experimental: Enable experimental/advanced BLE settings/features" - imply ZMK_BLE_PASSKEY_ENTRY +config ZMK_BLE_EXPERIMENTAL_CONN + bool "Experimental BLE connection changes" imply BT_GATT_AUTO_SEC_REQ + help + Enables a combination of settings that are planned to be default in future versions of ZMK + to improve connection stability. This includes changes to timing on BLE pairing initation, + restores use of the updated/new LLCP implementation, and disables 2M PHY support. + +config ZMK_BLE_EXPERIMENTAL_SEC + bool "Experimental BLE security changes" imply BT_SMP_ALLOW_UNAUTH_OVERWRITE help - Enables a combination of settings that are planned to be default in future versions of ZMK. - This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, - restores use of the updated/new LLCP implementation, disables 2M PHY support, and allows - overwrite of keys from previously paired hosts. + Enables a combination of settings that are planned to be officially supported in the future. + This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from + previously paired hosts. + +config ZMK_BLE_EXPERIMENTAL_FEATURES + bool "Experimental BLE connection and security settings/features" + select ZMK_BLE_EXPERIMENTAL_CONN + select ZMK_BLE_EXPERIMENTAL_SEC + help + Enables experimental connection changes and security features. config ZMK_BLE_PASSKEY_ENTRY bool "Require passkey entry on the keyboard to complete pairing" default n select RING_BUFFER +config BT_SMP_ALLOW_UNAUTH_OVERWRITE + imply ZMK_BLE_PASSKEY_ENTRY + choice BT_LL_SW_LLCP_IMPL - default BT_LL_SW_LLCP_LEGACY if !ZMK_BLE_EXPERIMENTAL_FEATURES + default BT_LL_SW_LLCP_LEGACY if !ZMK_BLE_EXPERIMENTAL_CONN endchoice config BT_CTLR_PHY_2M - default n if ZMK_BLE_EXPERIMENTAL_FEATURES + default n if ZMK_BLE_EXPERIMENTAL_CONN # BT_TINYCRYPT_ECC is required for BT_SMP_SC_PAIR_ONLY when using HCI config BT_TINYCRYPT_ECC diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md index 61477cb5381..9149b36bf37 100644 --- a/docs/docs/config/bluetooth.md +++ b/docs/docs/config/bluetooth.md @@ -9,8 +9,10 @@ See [Configuration Overview](index.md) for instructions on how to change these s ## Kconfig -| Option | Type | Description | Default | -| -------------------------------------- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK. This includes changes to timing on BLE pairing initation, BT Secure Connection passkey entry, restores use of the updated/new LLCP implementation, disables 2M PHY support, and allows overwrite of keys from previously paired hosts. | n | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts) | n | -| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | +| Option | Type | Description | Default | +| -------------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK to improve connection stability. This includes changes to timing on BLE pairing initation, restores use of the updated/new LLCP implementation, and disables 2M PHY support. | n | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC` | bool | Enables a combination of settings that are planned to be officially supported in the future. This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from previously paired hosts. | n | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Aggregate config that enables both `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` and `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC`. | n | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts.) | n | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | From f4f402fa44793ef7ce2a6ac382aeded57a5f16aa Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 15 Dec 2023 20:13:43 +0000 Subject: [PATCH 0863/1130] fix(ci): Use unique artifact for test logs * To address conflicts with identically named artifact uploads, include the test name in the artifact name. --- .github/workflows/ble-test.yml | 8 ++++---- .github/workflows/test.yml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ble-test.yml b/.github/workflows/ble-test.yml index 3bc8a718077..8f545002e73 100644 --- a/.github/workflows/ble-test.yml +++ b/.github/workflows/ble-test.yml @@ -27,7 +27,7 @@ jobs: run: | cd app/tests/ble export TESTS=$(ls -d * | grep -v central | jq -R -s -c 'split("\n")[:-1]') - echo "::set-output name=test-dirs::${TESTS}" + echo "test-dirs=${TESTS}" > $GITHUB_OUTPUT run-tests: needs: collect-tests strategy: @@ -40,7 +40,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Cache west modules - uses: actions/cache@v3.0.2 + uses: actions/cache@v3 env: cache-name: cache-zephyr-modules with: @@ -72,7 +72,7 @@ jobs: run: BSIM_COMPONENTS_PATH="${GITHUB_WORKSPACE}/tools/bsim/components/" BSIM_OUT_PATH="${GITHUB_WORKSPACE}/tools/bsim/" ./run-ble-test.sh tests/ble/${{ matrix.test }} - name: Archive artifacts if: ${{ always() }} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: - name: "log-files" + name: "${{ matrix.test }}-log-files" path: app/build/**/*.log diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ec63081279b..eba4ff3a0b4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: run: | cd app/tests/ export TESTS=$(ls -d * | grep -v ble | jq -R -s -c 'split("\n")[:-1]') - echo "::set-output name=test-dirs::${TESTS}" + echo "test-dirs=${TESTS}" >> $GITHUB_OUTPUT run-tests: needs: collect-tests strategy: @@ -38,7 +38,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Cache west modules - uses: actions/cache@v3.0.2 + uses: actions/cache@v3 env: cache-name: cache-zephyr-modules with: @@ -65,7 +65,7 @@ jobs: run: west test tests/${{ matrix.test }} - name: Archive artifacts if: ${{ always() }} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: - name: "log-files" + name: "${{ matrix.test }}-log-files" path: app/build/**/*.log From 1b8b6b4a0ee86b5b18737da4d03ab36df13812f4 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 16 Dec 2023 10:24:15 -0800 Subject: [PATCH 0864/1130] refactor(core): Make low priority queue optional. * Add a new Kconfig symbol to enable the low priority queue, and make the two features that depend on it `select` the symbol to turn it on. This helps ensure no wasted RAM/ROM on devices that don't need it. --- app/CMakeLists.txt | 2 +- app/Kconfig | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 40c654dbaa8..e5f489765e8 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -88,7 +88,7 @@ target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/usb.c) target_sources_ifdef(CONFIG_ZMK_USB app PRIVATE src/usb_hid.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/backlight.c) -target_sources(app PRIVATE src/workqueue.c) +target_sources_ifdef(CONFIG_ZMK_LOW_PRIORITY_WORK_QUEUE app PRIVATE src/workqueue.c) target_sources(app PRIVATE src/main.c) add_subdirectory(src/display/) diff --git a/app/Kconfig b/app/Kconfig index 70d5cc04c0e..a5fa54f614b 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -256,6 +256,7 @@ rsource "src/display/Kconfig" menuconfig ZMK_RGB_UNDERGLOW bool "RGB Adressable LED Underglow" select LED_STRIP + select ZMK_LOW_PRIORITY_WORK_QUEUE if ZMK_RGB_UNDERGLOW @@ -378,6 +379,7 @@ config ZMK_BATTERY_REPORTING bool "Battery level detection/reporting" default n select SENSOR + select ZMK_LOW_PRIORITY_WORK_QUEUE imply BT_BAS if ZMK_BLE config ZMK_IDLE_TIMEOUT @@ -572,6 +574,11 @@ config ZMK_BATTERY_REPORT_INTERVAL int "Battery level report interval in seconds" default 60 +config ZMK_LOW_PRIORITY_WORK_QUEUE + bool "Work queue for low priority items" + +if ZMK_LOW_PRIORITY_WORK_QUEUE + config ZMK_LOW_PRIORITY_THREAD_STACK_SIZE int "Low priority thread stack size" default 768 @@ -580,6 +587,8 @@ config ZMK_LOW_PRIORITY_THREAD_PRIORITY int "Low priority thread priority" default 10 +endif + #Advanced endmenu From 78fa1e77c41d211b44da06b02ee0b12b29a2fb29 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 1 Dec 2023 21:33:42 -0800 Subject: [PATCH 0865/1130] feat(blog): Add nodefree-config post for spotlight series Co-authored-by: Robert U <978080+urob@users.noreply.github.com> --- docs/blog/2023-12-17-nodefree-config.md | 189 ++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 docs/blog/2023-12-17-nodefree-config.md diff --git a/docs/blog/2023-12-17-nodefree-config.md b/docs/blog/2023-12-17-nodefree-config.md new file mode 100644 index 00000000000..359a264f8cc --- /dev/null +++ b/docs/blog/2023-12-17-nodefree-config.md @@ -0,0 +1,189 @@ +--- +title: "Community Spotlight Series #2: Node-free Config" +author: Cem Aksoylar +author_title: Documentation maintainer +author_url: https://github.com/caksoylar +author_image_url: https://avatars.githubusercontent.com/u/7876996 +tags: [keyboards, firmware, community] +--- + +This blog continues our series of posts where we highlight projects within the ZMK ecosystem +that we think are interesting and that the users might benefit from knowing about them. You might +be aware that ZMK configurations in the [Devicetree format](/docs/config#devicetree-files) +use the [C preprocessor](https://en.wikipedia.org/wiki/C_preprocessor) so that directives like +`#define RAISE 2` or `#include ` can be used in them. In this installment we are +highlighting the [`zmk-nodefree-config` project](https://github.com/urob/zmk-nodefree-config) +by [urob](https://github.com/urob) that contains helper methods that utilizes this fact +for users who prefer editing and maintaining their ZMK config directly using the Devicetree +syntax format. + +In the rest of the post we leave it to urob to introduce and explain the motivations of the +project, and various ways it can be used to help maintain ZMK keymaps. Stay tuned for future +installments in the series! + +## Overview + +Loosely speaking the _nodefree_ repo -- more on the name later -- is a +collection of helper functions that simplify configuring keymap files. Unlike +the graphical keymap editor covered in the [previous spotlight +post](https://zmk.dev/blog/2023/11/09/keymap-editor), it is aimed at users who +edit and maintain directly the source code of their keymap files. + +The provided helpers fall into roughly one of three categories: + +1. Helpers that eliminate boilerplate, reduce the complexity of keymaps, and improve readability. +2. Helpers that improve portability of "position-based" properties such as combos. +3. Helpers that define international and other unicode characters. + +The reminder of this post details each of these three categories. + +## Eliminating Boilerplate + +In ZMK, keymaps are configured using so-called _Devicetree_ files. Devicetree files +define a collection of nested _nodes_, whereas each node in turn specifies a variety of +_properties_ through which one can customize the keymap. + +For example, the following snippet sets up a +[mod-morph](https://zmk.dev/docs/behaviors/mod-morph) behavior that sends . +("dot") when pressed by itself and sends : ("colon") when shifted: + +```dts {6-7} showLineNumbers +/ { + behaviors { + dot_colon: dot_colon_behavior { + compatible = "zmk,behavior-mod-morph"; + #binding-cells = <0>; + bindings = <&kp DOT>, <&kp COLON>; + mods = <(MOD_LSFT|MOD_RSFT)>; + }; + }; +}; +``` + +Adding this snippet to the keymap will create a new node `dot_colon_behavior` +(nested underneath the `behaviors` and root `/` nodes), and assigns it four +properties (`compatible`, `#binding-cells`, etc). Here, the crucial properties are `bindings` +and `mods`, which spell out the actual functionality of the new behavior. The rest +of the snippet (including the nested node-structure) is boilerplate. + +The idea of the _nodefree_ repo is to use C preprocessor macros to improve +readability by eliminating as much boilerplate as possible. Besides hiding +redundant behavior properties from the user, it also automatically creates and +nests all required behavior nodes, making for a "node-free" and less +error-prone user experience (hence the name of the repo). + +For example, using `ZMK_BEHAVIOR`, one of the repo's helper functions, the +above snippet simplifies to: + +```dts showLineNumbers +ZMK_BEHAVIOR(dot_colon, mod_morph, + bindings = <&kp DOT>, <&kp COLON>; + mods = <(MOD_LSFT|MOD_RSFT)>; +) +``` + +For complex keymap files, the gains from eliminating boilerplate can be +enormous. To provide a benchmark, consider my [personal +config](https://github.com/urob/zmk-config), which uses the _nodefree_ repo to +create various behaviors, set up combos, and add layers to the keymap. Without +the _nodefree_ helpers, the total size of my keymap would have been 41 kB. Using +the helper macros, the actual size is instead reduced to a more sane 12 kB.[^1] + +[^1]: + To compute the impact on file size, I ran `pcpp +--passthru-unfound-includes` on the `base.keymap` file, comparing two + variants. First, I ran the pre-processor on the actual file. Second, I ran + it on a version where I commented out all the _nodefree_ headers, + preventing any of the helper functions from getting expanded. The + difference isolates precisely the size gains from eliminating boilerplate, + which in my ZMK config are especially large due to a vast number of + behaviors used to add various Unicode characters to my keymap. + +## Simplifying "Position-based" Behaviors + +In ZMK, there are several features that are position-based. As of today, these +are [combos](/docs/features/combos) and [positional +hold-taps](/docs/behaviors/hold-tap#positional-hold-tap-and-hold-trigger-key-positions), +with behaviors like the ["Swapper"](https://github.com/zmkfirmware/zmk/pull/1366) and [Leader +key](https://github.com/zmkfirmware/zmk/pull/1380) currently +developed by [Nick Conway](https://github.com/nickconway) in pull requests also utilizing them. + +Configuring these behaviors involves lots of key counting, which can be +cumbersome and error-prone, especially on larger keyboards. It also reduces the +portability of configuration files across keyboards with different layouts. + +To facilitate configuring position-based behaviors, the _nodefree_ repo comes +with a community-maintained library of "key-position labels" for a variety of +popular layouts. The idea is to provide a standardized naming convention that +is consistent across different keyboards. For instance, the labels for a 36-key +layout are as follows: + +``` + ╭─────────────────────┬─────────────────────╮ + │ LT4 LT3 LT2 LT1 LT0 │ RT0 RT1 RT2 RT3 RT4 │ + │ LM4 LM3 LM2 LM1 LM0 │ RM0 RM1 RM2 RM3 RM4 │ + │ LB4 LB3 LB2 LB1 LB0 │ RB0 RB1 RB2 RB3 RB4 │ + ╰───────╮ LH2 LH1 LH0 │ RH0 RH1 RH2 ╭───────╯ + ╰─────────────┴─────────────╯ +``` + +The labels are all of the following form: + +- `L/R` for **L**eft/**R**ight side +- `T/M/B/H` for **T**op/**M**iddle/**B**ottom and t**H**umb row. +- `0/1/2/3/4` for the finger position, counting from the inside to the outside + +The library currently contains definitions for 17 physical +layouts, ranging from the tiny [Osprette](https://github.com/smores56/osprette) to the large-ish +[Glove80](https://www.moergo.com/collections/glove80-keyboards). +While some of these layouts contain more keys than others, the idea behind the +library is that keys that for all practical purposes are in the "same" location +share the same label. That is, the 3 rows containing the alpha keys are +always labeled `T/M/B` with `LM1` and `RM1` defining the home position of +the index fingers. For larger boards, the numbers row is always labeled +`N`. For even larger boards, the function key row and the row below `B` are +labeled `C` and `F` (mnemonics for **C**eiling and **F**loor), etc. + +Besides sparing the user from counting keys, the library also makes it easy to +port an entire, say, combo configuration from one keyboard to the next by simply +switching layout headers. + +## Unicode and International Keycodes + +The final category of helpers is targeted at people who wish to type international characters +without switching the input language of their operation system. To do so, the repo comes with +helper functions that can be used to define Unicode behaviors. + +In addition, the repo also ships with a community-maintained library of +language-files that define Unicode behaviors for all relevant characters in a +given language. For instance, after loading the German language file, one can +add `&de_ae` to the keymap, which will send ä/Ä when pressed or shifted. + +## About Me + +My path to ZMK and programmable keyboards started in the early pandemic, when I +built a [Katana60](https://geekhack.org/index.php?topic=88719.0) and learned +how to touch-type Colemak. Soon after I purchased a Planck, which turned out +to be the real gateway drug for me. + +Committed to making the best out of the Planck's 48 keys, I have since +discovered my love for tinkering with tiny layouts and finding new ways of +[squeezing out](https://xkcd.com/2583/) a bit more ergonomics. Along the way, I +also made the switch from QMK to ZMK, whose "object-oriented" approach to +behaviors I found more appealing for complex keymaps.[^2] + +[^2]: + I am using the term object-oriented somewhat loosely here. What I mean by + that is the differentiation between abstract behavior classes (such as + hold-taps) and specific behavior instances that are added to the keymap. + Allowing to set up multiple, reusable instances of each behavior has been a + _huge_ time-saver compared to QMK's more limited behavior settings that are + either global or key-specific. + +These days I mostly type on a Corne-ish Zen and are waiting for the day when I +will finally put together the +[Hypergolic](https://github.com/davidphilipbarr/hypergolic) that's been sitting +on my desk for months. My current keymap is designed for 34 keys, making +liberal use of combos and [timerless homerow +mods](https://github.com/urob/zmk-config#timeless-homerow-mods) to make up for +a lack of keys. From 12d73ba4f9c6d46aa7767f2e5884e727a75d146f Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 17 Dec 2023 15:31:18 -0800 Subject: [PATCH 0866/1130] fix(docs): Fix remark on &bt parameter #2 --- docs/docs/behaviors/bluetooth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index b34614e6205..48ee1ed8aef 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -56,7 +56,7 @@ The bluetooth behavior completes an bluetooth action given on press. - Reference: `&bt` - Parameter #1: The bluetooth command define, e.g. `BT_CLR` -- Parameter #2: Only applies to `BT_SEL` and is the 0-indexed profile by number +- Parameter #2: Only applies to `BT_SEL` and `BT_DISC`, and is the 0-indexed profile by number ### Examples From a593c7260a2d1f36610bb3ad22205d7acd618848 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 3 Dec 2023 05:52:40 +0000 Subject: [PATCH 0867/1130] feat(bt): Add test for unauth overwrite. * Add a test to ensure unauth overwrite does the right thing when hosts try to pair again without the profile cleared on the ZMK side. --- .../centrals.txt | 1 + .../events.patterns | 1 + .../nrf52_bsim.conf | 1 + .../nrf52_bsim.keymap | 25 +++++++++++++ .../snapshot.log | 36 +++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100644 app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/centrals.txt create mode 100644 app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/events.patterns create mode 100644 app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.conf create mode 100644 app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.keymap create mode 100644 app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log diff --git a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/centrals.txt b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/centrals.txt new file mode 100644 index 00000000000..53d70e32353 --- /dev/null +++ b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/centrals.txt @@ -0,0 +1 @@ +./ble_test_central.exe -d=2 -disconnect_and_reconnect -clear_bond_on_disconnect diff --git a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/events.patterns b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/events.patterns new file mode 100644 index 00000000000..cca5a2d4ed3 --- /dev/null +++ b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/events.patterns @@ -0,0 +1 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}//p diff --git a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.conf b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.conf new file mode 100644 index 00000000000..e1bee6a7ed3 --- /dev/null +++ b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.conf @@ -0,0 +1 @@ +CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE=y \ No newline at end of file diff --git a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.keymap b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.keymap new file mode 100644 index 00000000000..789cec44337 --- /dev/null +++ b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/nrf52_bsim.keymap @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label = "Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log new file mode 100644 index 00000000000..da2a0c772d7 --- /dev/null +++ b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log @@ -0,0 +1,36 @@ + bt_id: No static addresses stored in controller + ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Setting the security for the connection] + ble_central: pairing_complete: Pairing complete + ble_central: disconnected: [Disconnected]: ED:3B:20:15:18:12 (random) (reason 0x16) + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Setting the security for the connection] + ble_central: pairing_complete: Pairing complete + ble_central: discover_conn: [Discovery started for conn] + ble_central: discover_func: [ATTRIBUTE] handle 23 + ble_central: discover_func: [ATTRIBUTE] handle 28 + ble_central: discover_func: [ATTRIBUTE] handle 30 + ble_central: discover_func: [SUBSCRIBED] + ble_central: notify_func: payload + 00 00 04 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 05 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ + ble_central: notify_func: payload + 00 00 00 00 00 00 00 00 |........ From c965e35140a0fb83518ee48a5d166814e228bdb1 Mon Sep 17 00:00:00 2001 From: jack <0x6a73@protonmail.com> Date: Wed, 27 Dec 2023 11:07:55 -0700 Subject: [PATCH 0868/1130] chore: Ignore python virtualenv files --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 93c801d9aa9..4ddd08521ed 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ /zmk-config /build *.DS_Store -__pycache__ \ No newline at end of file +__pycache__ +.python-version +.venv From 7ef6ec7560203bac7184fd1d167c134331f88dde Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sat, 30 Dec 2023 18:05:25 -0500 Subject: [PATCH 0869/1130] refactor: remove unused Kconfig files --- app/boards/shields/Kconfig.defconfig | 14 -------------- app/boards/shields/Kconfig.shield | 5 ----- 2 files changed, 19 deletions(-) delete mode 100644 app/boards/shields/Kconfig.defconfig delete mode 100644 app/boards/shields/Kconfig.shield diff --git a/app/boards/shields/Kconfig.defconfig b/app/boards/shields/Kconfig.defconfig deleted file mode 100644 index 58dd45d6e9b..00000000000 --- a/app/boards/shields/Kconfig.defconfig +++ /dev/null @@ -1,14 +0,0 @@ - - - -config ZMK_KEYBOARD_NAME - default "cradios" - -# Unable to use interrupts as the same pin number is used -# across A & B controllers, and STM32F303CCT6 can't enable -# interrutps for multiple controllers for the same "line" -# for the external interrupts. -config ZMK_KSCAN_GPIO_POLLING - default y - - diff --git a/app/boards/shields/Kconfig.shield b/app/boards/shields/Kconfig.shield deleted file mode 100644 index cab78898de8..00000000000 --- a/app/boards/shields/Kconfig.shield +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) 2020 Pete Johanson -# SPDX-License-Identifier: MIT - -config SHIELD_CRADIOS - def_bool $(shields_list_contains,cradios) From d35311af972e3d08d902743b0e888bf3f40596b6 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sat, 30 Dec 2023 18:06:17 -0500 Subject: [PATCH 0870/1130] refactor: remove misleading build warning * Among other issues, this message is often misinterpreted by users building out-of-tree shields -- leading them to think the shield "not being found" is the cause of a build failure. --- app/keymap-module/modules/modules.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/app/keymap-module/modules/modules.cmake b/app/keymap-module/modules/modules.cmake index e260da8fc37..c286809df1c 100644 --- a/app/keymap-module/modules/modules.cmake +++ b/app/keymap-module/modules/modules.cmake @@ -97,7 +97,6 @@ foreach(root ${BOARD_ROOT}) if(DEFINED SHIELD) foreach(s ${SHIELD_AS_LIST}) if(NOT ${s} IN_LIST SHIELD_LIST) - message(WARNING "Didn't find ${s}") continue() endif() message(STATUS "Adding ${SHIELD_DIR_${s}}") From 0e2f94b73bc18e3be7d913d2a233ae6330b40624 Mon Sep 17 00:00:00 2001 From: Gabor Hornyak Date: Tue, 29 Mar 2022 21:20:52 +0000 Subject: [PATCH 0871/1130] feat(ble): Support perhipheral battery levels. * Add ability to fetch and report peripheral battery levels on split centrals. * Add additional support for adding a new Battery Level service to split centrals that exposes fetched peripheral battery levels to connected hosts. Co-authored-by: Peter Johanson --- .../zmk/events/battery_state_changed.h | 10 +- app/include/zmk/split/bluetooth/central.h | 6 + app/src/display/widgets/battery_status.c | 3 +- app/src/events/battery_state_changed.c | 4 +- app/src/split/bluetooth/CMakeLists.txt | 4 + app/src/split/bluetooth/Kconfig | 24 +++ app/src/split/bluetooth/central.c | 144 +++++++++++++++++- app/src/split/bluetooth/central_bas_proxy.c | 98 ++++++++++++ docs/docs/config/system.md | 27 ++-- 9 files changed, 299 insertions(+), 21 deletions(-) create mode 100644 app/src/split/bluetooth/central_bas_proxy.c diff --git a/app/include/zmk/events/battery_state_changed.h b/app/include/zmk/events/battery_state_changed.h index 5a8c625e079..157490d9849 100644 --- a/app/include/zmk/events/battery_state_changed.h +++ b/app/include/zmk/events/battery_state_changed.h @@ -14,4 +14,12 @@ struct zmk_battery_state_changed { uint8_t state_of_charge; }; -ZMK_EVENT_DECLARE(zmk_battery_state_changed); \ No newline at end of file +ZMK_EVENT_DECLARE(zmk_battery_state_changed); + +struct zmk_peripheral_battery_state_changed { + uint8_t source; + // TODO: Other battery channels + uint8_t state_of_charge; +}; + +ZMK_EVENT_DECLARE(zmk_peripheral_battery_state_changed); \ No newline at end of file diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index 4706b3aa831..5e9e09ff6a1 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -16,3 +16,9 @@ int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *bi int zmk_split_bt_update_hid_indicator(zmk_hid_indicators_t indicators); #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + +int zmk_split_get_peripheral_battery_level(uint8_t source, uint8_t *level); + +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) \ No newline at end of file diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index e35f890ac6c..feb054db736 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -63,8 +63,9 @@ void battery_status_update_cb(struct battery_status_state state) { } static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh); return (struct battery_status_state) { - .level = bt_bas_get_battery_level(), + .level = ev->state_of_charge, #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ diff --git a/app/src/events/battery_state_changed.c b/app/src/events/battery_state_changed.c index 508ee971d69..ffb4297cdda 100644 --- a/app/src/events/battery_state_changed.c +++ b/app/src/events/battery_state_changed.c @@ -7,4 +7,6 @@ #include #include -ZMK_EVENT_IMPL(zmk_battery_state_changed); \ No newline at end of file +ZMK_EVENT_IMPL(zmk_battery_state_changed); + +ZMK_EVENT_IMPL(zmk_peripheral_battery_state_changed); \ No newline at end of file diff --git a/app/src/split/bluetooth/CMakeLists.txt b/app/src/split/bluetooth/CMakeLists.txt index 241a9b8d8c0..6e0ad617284 100644 --- a/app/src/split/bluetooth/CMakeLists.txt +++ b/app/src/split/bluetooth/CMakeLists.txt @@ -8,4 +8,8 @@ if (NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL) endif() if (CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE central.c) +endif() + +if (CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY) + target_sources(app PRIVATE central_bas_proxy.c) endif() \ No newline at end of file diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index 858e7308fef..4da50528343 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -16,12 +16,36 @@ config ZMK_SPLIT_ROLE_CENTRAL select BT_GATT_AUTO_DISCOVER_CCC select BT_SCAN_WITH_IDENTITY +# Bump this value needed for concurrent GATT discovery of splits +config BT_L2CAP_TX_BUF_COUNT + default 5 if ZMK_SPLIT_ROLE_CENTRAL + if ZMK_SPLIT_ROLE_CENTRAL config ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS int "Number of peripherals that will connect to the central." default 1 +menuconfig ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING + bool "Fetch Peripheral Battery Level Info" + help + Adds internal support for fetching the battery levels from peripherals + and generating events in the ZMK eventing system. + +if ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING + +config ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_QUEUE_SIZE + int "Max number of battery level events to queue when received from peripherals" + default ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS + +config ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY + bool "Proxy Peripheral Battery Level Info" + help + Adds support for reporting the battery levels of connected split + peripherals through an additional Battery Level service. + +endif + config ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE int "Max number of key position state events to queue when received from peripherals" default 5 diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 3635322431c..40e1bac86c4 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -27,6 +27,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include +#include #include static int start_scanning(void); @@ -47,6 +48,10 @@ struct peripheral_slot { struct bt_gatt_subscribe_params sensor_subscribe_params; struct bt_gatt_discover_params sub_discover_params; uint16_t run_behavior_handle; +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + struct bt_gatt_subscribe_params batt_lvl_subscribe_params; + struct bt_gatt_read_params batt_lvl_read_params; +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) */ #if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) uint16_t update_hid_indicators; #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) @@ -265,6 +270,110 @@ static uint8_t split_central_notify_func(struct bt_conn *conn, return BT_GATT_ITER_CONTINUE; } +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + +static uint8_t peripheral_battery_levels[ZMK_SPLIT_BLE_PERIPHERAL_COUNT] = {0}; + +int zmk_split_get_peripheral_battery_level(uint8_t source, uint8_t *level) { + if (source >= ARRAY_SIZE(peripheral_battery_levels)) { + return -EINVAL; + } + + if (peripherals[source].state != PERIPHERAL_SLOT_STATE_CONNECTED) { + return -ENOTCONN; + } + + *level = peripheral_battery_levels[source]; + return 0; +} + +K_MSGQ_DEFINE(peripheral_batt_lvl_msgq, sizeof(struct zmk_peripheral_battery_state_changed), + CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_QUEUE_SIZE, 4); + +void peripheral_batt_lvl_change_callback(struct k_work *work) { + struct zmk_peripheral_battery_state_changed ev; + while (k_msgq_get(&peripheral_batt_lvl_msgq, &ev, K_NO_WAIT) == 0) { + LOG_DBG("Triggering peripheral battery level change %u", ev.state_of_charge); + peripheral_battery_levels[ev.source] = ev.state_of_charge; + ZMK_EVENT_RAISE(new_zmk_peripheral_battery_state_changed(ev)); + } +} + +K_WORK_DEFINE(peripheral_batt_lvl_work, peripheral_batt_lvl_change_callback); + +static uint8_t split_central_battery_level_notify_func(struct bt_conn *conn, + struct bt_gatt_subscribe_params *params, + const void *data, uint16_t length) { + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); + + if (!slot) { + LOG_ERR("No peripheral state found for connection"); + return BT_GATT_ITER_CONTINUE; + } + + if (!data) { + LOG_DBG("[UNSUBSCRIBED]"); + params->value_handle = 0U; + return BT_GATT_ITER_STOP; + } + + if (length == 0) { + LOG_ERR("Zero length battery notification received"); + return BT_GATT_ITER_CONTINUE; + } + + LOG_DBG("[BATTERY LEVEL NOTIFICATION] data %p length %u", data, length); + uint8_t battery_level = ((uint8_t *)data)[0]; + LOG_DBG("Battery level: %u", battery_level); + struct zmk_peripheral_battery_state_changed ev = { + .source = peripheral_slot_index_for_conn(conn), .state_of_charge = battery_level}; + k_msgq_put(&peripheral_batt_lvl_msgq, &ev, K_NO_WAIT); + k_work_submit(&peripheral_batt_lvl_work); + + return BT_GATT_ITER_CONTINUE; +} + +static uint8_t split_central_battery_level_read_func(struct bt_conn *conn, uint8_t err, + struct bt_gatt_read_params *params, + const void *data, uint16_t length) { + if (err > 0) { + LOG_ERR("Error during reading peripheral battery level: %u", err); + return BT_GATT_ITER_STOP; + } + + struct peripheral_slot *slot = peripheral_slot_for_conn(conn); + + if (!slot) { + LOG_ERR("No peripheral state found for connection"); + return BT_GATT_ITER_CONTINUE; + } + + if (!data) { + LOG_DBG("[READ COMPLETED]"); + return BT_GATT_ITER_STOP; + } + + LOG_DBG("[BATTERY LEVEL READ] data %p length %u", data, length); + + if (length == 0) { + LOG_ERR("Zero length battery notification received"); + return BT_GATT_ITER_CONTINUE; + } + + uint8_t battery_level = ((uint8_t *)data)[0]; + + LOG_DBG("Battery level: %u", battery_level); + + struct zmk_peripheral_battery_state_changed ev = { + .source = peripheral_slot_index_for_conn(conn), .state_of_charge = battery_level}; + k_msgq_put(&peripheral_batt_lvl_msgq, &ev, K_NO_WAIT); + k_work_submit(&peripheral_batt_lvl_work); + + return BT_GATT_ITER_CONTINUE; +} + +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) */ + static int split_central_subscribe(struct bt_conn *conn, struct bt_gatt_subscribe_params *params) { int err = bt_gatt_subscribe(conn, params); switch (err) { @@ -306,10 +415,6 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, if (bt_uuid_cmp(chrc_uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID)) == 0) { LOG_DBG("Found position state characteristic"); - slot->discover_params.uuid = NULL; - slot->discover_params.start_handle = attr->handle + 2; - slot->discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; - slot->subscribe_params.disc_params = &slot->sub_discover_params; slot->subscribe_params.end_handle = slot->discover_params.end_handle; slot->subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); @@ -342,9 +447,27 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, LOG_DBG("Found update HID indicators handle"); slot->update_hid_indicators = bt_gatt_attr_value_handle(attr); #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + } else if (!bt_uuid_cmp(((struct bt_gatt_chrc *)attr->user_data)->uuid, + BT_UUID_BAS_BATTERY_LEVEL)) { + LOG_DBG("Found battery level characteristics"); + slot->batt_lvl_subscribe_params.disc_params = &slot->sub_discover_params; + slot->batt_lvl_subscribe_params.end_handle = slot->discover_params.end_handle; + slot->batt_lvl_subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + slot->batt_lvl_subscribe_params.notify = split_central_battery_level_notify_func; + slot->batt_lvl_subscribe_params.value = BT_GATT_CCC_NOTIFY; + split_central_subscribe(conn, &slot->batt_lvl_subscribe_params); + + slot->batt_lvl_read_params.func = split_central_battery_level_read_func; + slot->batt_lvl_read_params.handle_count = 1; + slot->batt_lvl_read_params.single.handle = bt_gatt_attr_value_handle(attr); + slot->batt_lvl_read_params.single.offset = 0; + bt_gatt_read(conn, &slot->batt_lvl_read_params); +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) */ } - bool subscribed = (slot->run_behavior_handle && slot->subscribe_params.value_handle); + bool subscribed = slot->run_behavior_handle && slot->subscribe_params.value_handle; + #if ZMK_KEYMAP_HAS_SENSORS subscribed = subscribed && slot->sensor_subscribe_params.value_handle; #endif /* ZMK_KEYMAP_HAS_SENSORS */ @@ -352,6 +475,9 @@ static uint8_t split_central_chrc_discovery_func(struct bt_conn *conn, #if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) subscribed = subscribed && slot->update_hid_indicators; #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + subscribed = subscribed && slot->batt_lvl_subscribe_params.value_handle; +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) */ return subscribed ? BT_GATT_ITER_STOP : BT_GATT_ITER_CONTINUE; } @@ -382,7 +508,6 @@ static uint8_t split_central_service_discovery_func(struct bt_conn *conn, LOG_DBG("Found split service"); slot->discover_params.uuid = NULL; slot->discover_params.func = split_central_chrc_discovery_func; - slot->discover_params.start_handle = attr->handle + 1; slot->discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; int err = bt_gatt_discover(conn, &slot->discover_params); @@ -605,6 +730,13 @@ static void split_central_disconnected(struct bt_conn *conn, uint8_t reason) { LOG_DBG("Disconnected: %s (reason %d)", addr, reason); +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + struct zmk_peripheral_battery_state_changed ev = { + .source = peripheral_slot_index_for_conn(conn), .state_of_charge = 0}; + k_msgq_put(&peripheral_batt_lvl_msgq, &ev, K_NO_WAIT); + k_work_submit(&peripheral_batt_lvl_work); +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) + err = release_peripheral_slot_for_conn(conn); if (err < 0) { diff --git a/app/src/split/bluetooth/central_bas_proxy.c b/app/src/split/bluetooth/central_bas_proxy.c new file mode 100644 index 00000000000..9515e556730 --- /dev/null +++ b/app/src/split/bluetooth/central_bas_proxy.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include + +static void blvl_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value) { + ARG_UNUSED(attr); + + bool notif_enabled = (value == BT_GATT_CCC_NOTIFY); + + LOG_INF("BAS Notifications %s", notif_enabled ? "enabled" : "disabled"); +} + +static ssize_t read_blvl(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, + uint16_t len, uint16_t offset) { + const uint8_t source = (uint8_t)(uint32_t)attr->user_data; + uint8_t level = 0; + int rc = zmk_split_get_peripheral_battery_level(source, &level); + + if (rc == -EINVAL) { + LOG_ERR("Invalid peripheral index requested for battery level read: %d", source); + return 0; + } + + return bt_gatt_attr_read(conn, attr, buf, len, offset, &level, sizeof(uint8_t)); +} + +static const struct bt_gatt_cpf aux_level_cpf = { + .format = 0x04, // uint8 + .exponent = 0x0, + .unit = 0x27AD, // Percentage + .name_space = 0x01, // Bluetooth SIG + .description = 0x0108, // "auxiliary" +}; + +#define PERIPH_CUD_(x) "Peripheral " #x +#define PERIPH_CUD(x) PERIPH_CUD_(x) + +// How many GATT attributes each battery level adds to our service +#define PERIPH_BATT_LEVEL_ATTR_COUNT 5 +// The second generated attribute is the one used to send GATT notifications +#define PERIPH_BATT_LEVEL_ATTR_NOTIFY_IDX 1 + +#define PERIPH_BATT_LEVEL_ATTRS(i, _) \ + BT_GATT_CHARACTERISTIC(BT_UUID_BAS_BATTERY_LEVEL, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, \ + BT_GATT_PERM_READ, read_blvl, NULL, i), \ + BT_GATT_CCC(blvl_ccc_cfg_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE), \ + BT_GATT_CPF(&aux_level_cpf), BT_GATT_CUD(PERIPH_CUD(i), BT_GATT_PERM_READ), + +BT_GATT_SERVICE_DEFINE(bas_aux, BT_GATT_PRIMARY_SERVICE(BT_UUID_BAS), + LISTIFY(CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS, PERIPH_BATT_LEVEL_ATTRS, + ())); + +int peripheral_batt_lvl_listener(const zmk_event_t *eh) { + const struct zmk_peripheral_battery_state_changed *ev = + as_zmk_peripheral_battery_state_changed(eh); + if (ev == NULL) { + return ZMK_EV_EVENT_BUBBLE; + }; + + if (ev->source >= CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS) { + LOG_WRN("Got battery level event for an out of range peripheral index"); + return ZMK_EV_EVENT_BUBBLE; + } + + LOG_DBG("Peripheral battery level event: %u", ev->state_of_charge); + + // Offset by the index of the source plus the specific offset to find the attribute to notify + // on. + int index = (PERIPH_BATT_LEVEL_ATTR_COUNT * ev->source) + PERIPH_BATT_LEVEL_ATTR_NOTIFY_IDX; + + int rc = bt_gatt_notify(NULL, &bas_aux.attrs[index], &ev->state_of_charge, sizeof(uint8_t)); + if (rc < 0 && rc != -ENOTCONN) { + LOG_WRN("Failed to notify hosts of peripheral battery level: %d", rc); + } + + return ZMK_EV_EVENT_BUBBLE; +}; + +ZMK_LISTENER(peripheral_batt_lvl_listener, peripheral_batt_lvl_listener); +ZMK_SUBSCRIPTION(peripheral_batt_lvl_listener, zmk_peripheral_battery_state_changed); diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 4629ea0f790..b10f184d40a 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -104,15 +104,18 @@ Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the s Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). -| Config | Type | Description | Default | -| ----------------------------------------------------- | ---- | ------------------------------------------------------------------------ | ------- | -| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | -| `CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS` | bool | Enable split keyboard support for passing indicator state to peripherals | n | -| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | -| `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | -| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | -| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | +| Config | Type | Description | Default | +| ------------------------------------------------------- | ---- | -------------------------------------------------------------------------- | ------------------------------------------ | +| `CONFIG_ZMK_SPLIT` | bool | Enable split keyboard support | n | +| `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | +| `CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS` | bool | Enable split keyboard support for passing indicator state to peripherals | n | +| `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING` | bool | Enable fetching split peripheral battery levels to the central side | n | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY` | bool | Enable central reporting of split battery levels to hosts | n | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_QUEUE_SIZE` | int | Max number of battery level events to queue when received from peripherals | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS` | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue when received from peripherals | 5 | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE` | int | Stack size of the BLE split central write thread | 512 | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE` | int | Max number of behavior run events to queue to send to the peripheral(s) | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE` | int | Stack size of the BLE split peripheral notify thread | 650 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY` | int | Priority of the BLE split peripheral notify thread | 5 | +| `CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE` | int | Max number of key state events to queue to send to the central | 10 | From b3146e665e8eede7d6020a5f9cdef850ffa43350 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 5 Jan 2024 10:42:04 -0800 Subject: [PATCH 0872/1130] feat(blog): Add post for joelspadin projects for spotlight series (#2092) Co-authored-by: Joel Spadin --- docs/blog/2024-01-05-zmk-tools.md | 158 ++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100755 docs/blog/2024-01-05-zmk-tools.md diff --git a/docs/blog/2024-01-05-zmk-tools.md b/docs/blog/2024-01-05-zmk-tools.md new file mode 100755 index 00000000000..b48e57357b5 --- /dev/null +++ b/docs/blog/2024-01-05-zmk-tools.md @@ -0,0 +1,158 @@ +--- +title: "Community Spotlight Series #3: ZMK Tools and ZMK Locale Generator" +author: Cem Aksoylar +author_title: Documentation maintainer +author_url: https://github.com/caksoylar +author_image_url: https://avatars.githubusercontent.com/u/7876996 +tags: [keyboards, firmware, community] +--- + +This blog continues our series of posts where we highlight projects within the ZMK ecosystem +that we think are interesting and that the users might benefit from knowing about them. + +In this installment, we are highlighting two projects (and a bonus one!) from [Joel Spadin](https://github.com/joelspadin), +a member of the core ZMK team. +The first one is [ZMK Tools](#zmk-tools), a handy Visual Studio Code extension to ease working with ZMK configurations, and the second is [ZMK Locale Generator](#zmk-locale-generator), a tool to help users that use non-US English keyboard locales in their operating systems. + +In the rest of the post we leave it to Joel to introduce and explain the motivations of his ZMK-related projects. +Stay tuned for future installments in the series! + +## ZMK Tools + +[ZMK Tools](https://github.com/joelspadin/zmk-tools) is an extension for [Visual Studio Code](https://code.visualstudio.com) that helps with editing a ZMK user config repo or a fork of ZMK. I originally created it to add some code completion in `.keymap` files, but then I realized that with the web version of VS Code, I could also let you set up a user config repo and build firmware, much like the [user setup script](/docs/user-setup#user-config-setup-script), except without downloading a single thing. + +### User Config Setup in Browser + +Here is how you can use ZMK Tools to get started with writing a ZMK keymap entirely within your browser. More detailed instructions can be found on the [ZMK Tools README](https://github.com/joelspadin/zmk-tools/blob/main/README.md). + +1. Open the [ZMK config template repo](https://github.com/zmkfirmware/unified-zmk-config-template) on GitHub. +2. Click the **Use this template** button and follow the instructions to create your own repo. + - If you don't see this button, make sure you're signed in to GitHub first. + - You can name the repo anything you want, but "zmk-config" is the conventional name. +3. From the GitHub page for your new repo, press . (period) and it will re-open the repo in github.dev. +4. Press Ctrl + P and enter the following to install the ZMK Tools extension: + ``` + ext install spadin.zmk-tools + ``` +5. Press Ctrl + Shift + P and run the **ZMK: Add Keyboard** command. +6. Follow the prompts to select a keyboard. ZMK Tools will copy the default keymap for that keyboard if you don't already have one, and it will automatically add it to your `build.yaml` file so GitHub will build it for you. + +You can then edit your `.keymap` and `.conf` files. Once you're done: + +1. Click the **Source Control** tab on the side bar. +2. Hover over the header for the **Changes** list and click the `+` (Stage All Changes) button. +3. Write a commit message and click **Commit & Push** to push your changes to GitHub. + +GitHub will start building the new firmware. To check the results: + +1. Use your browser's back button to go back to your repo's GitHub page. +2. Click the **Actions** tab at the top of the page. +3. Click the latest build (it should show the commit message you entered earlier). If it's still in progress, wait for it to finish. +4. If the build was successful, go to the **Artifacts** section and click **firmware** to download the firmware. If it failed, check the error and go back to github.dev to fix it. + +### Keymap Code Completion + +ZMK Tools also provides some basic code completion in `.keymap` files. It will suggest any of ZMK's built-in behaviors inside `bindings` and `sensor-bindings` properties, and it will automatically add the necessary headers. + +For example, with the cursor at the end of line 6 in the following keymap... + +```dts {6} showLineNumbers +/ { + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + & + >; + }; + }; +}; +``` + +...it will suggest things such as `&kp`, `&mo`, etc., and upon entering one, it will recognize that `#include ` is missing and add it to the top of the keymap: + +```dts {1} showLineNumbers +#include +/ { + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp + >; + }; + }; +}; +``` + +Press space after `&kp`, and it will suggest all of ZMK's key codes. Upon entering one, it will again recognize that `#include ` is missing and add it too: + +```dts {2} showLineNumbers +#include +#include +/ { + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp A + >; + }; + }; +}; +``` + +This can be very helpful for making sure you spelled key codes correctly and included all the correct headers. + +### Future Work + +Unfortunately, all the code completion info currently comes from a config file baked into the extension, so it won't pick up any custom behaviors or key code aliases you've defined. I'd like to make that work eventually, but it's a much more difficult problem to solve. + +ZMK Tools will discover all the boards/shields from both ZMK and your user config repo. With some recent changes in ZMK to allow pulling in features from other Zephyr modules, it's now possible to use board/shields defined in other repos, but ZMK Tools doesn't know about this yet. I'd like to support this too, but making it work in the web version of the extension will be challenging. + +## ZMK Locale Generator + +ZMK's key codes follow the [HID specification](https://www.usb.org/hid), and many key codes indicate the _position_ of a key on US keyboard layout, not the key's function. If your operating system is set to a different keyboard locale, then the character each key types won't necessarily line up with the key code name. For example, on a German "QWERTZ" layout, `&kp Y` will type Z and `&kp Z` will type Y, so you have to write your layout as if it were QWERTY instead. Other layouts can be even more confusing! + +[ZMK Locale Generator](https://github.com/joelspadin/zmk-locale-generator) is another tool I made to help with this. It reads [CLDR keyboard layouts](https://cldr.unicode.org/index/charts/keyboards) and generates `#define`s to alias key codes to names that make sense in other locales. To use it, first go to the [latest release](https://github.com/joelspadin/zmk-locale-generator/releases/latest) and download the header that matches the locale you use. Next, copy it into the same folder as your keymap and `#include` it: + +```dts +#include "keys_de.h" + +/ { + ... +}; +``` + +If you open the header file in a text editor, you'll see that it contains many of the standard ZMK key codes, except they are prefixed by the locale code. Depending on the locale, it may also define key codes for special characters specific to that locale, e.g. `DE_A_UMLAUT` for "ä" and `DE_SZ` for "ß". If you use these in your keymap, then ZMK will send the correct key codes to type those characters. + +```dts +#include "keys_de.h" + +/ { + keymap { + compatible = "zmk,keymap"; + default_layer { + bindings = < + &kp DE_Q &kp DE_W &kp DE_E &kp DE_R &kp DE_T &kp DE_Z ... + >; + }; + } +}; +``` + +I should note that, as a native English speaker and typer, I don't use any of this myself! I just saw that many people were asking for help with this, and I realized I could automate a solution. If you find something that isn't generated correctly, please [file an issue](https://github.com/joelspadin/zmk-locale-generator/issues) or PR a fix on GitHub. + +## Keyboard Latency Testing + +The last project I want to mention is a tool for testing keyboard latency. It requires only a Rasbperry Pi, an optocoupler IC, a resistor, and some wire. If you've ever wondered how ZMK's latency compares to other keyboards, you can [check the results here](https://github.com/joelspadin/keyboard-latency-tester/blob/main/results/chart.ipynb)! + +I don't have a very large collection of keyboards though, so the data is pretty limited so far. If you want to try it on your own keyboard, see the instructions on the [keyboard latency tester README](https://github.com/joelspadin/keyboard-latency-tester), and please send me a PR with your results! + +## About Me + +I got a degree in electrical engineering but promptly became a software engineer instead. I still like tinkering with electronics though, so I discovered ZMK when I was making wireless macropad with a nice!nano, and I became a regular contributor after that. I use mostly larger keyboards with standard layouts and rarely use anything more complicated than momentary layers, so I've mostly focused on improving core features and tooling. + +The keyboards I regularly use are a Ducky One 2 TKL that I leave at work, a Freebird TKL[^1], a custom [wireless numpad](https://github.com/joelspadin/NumBLE), and a Yamaha CP4. + +[^1] Running QMK, but I have designs to make a wireless PCB for it someday... From 6f8d080b6a3bf54db58a75ff77288be13119273c Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Fri, 5 Jan 2024 15:02:06 -0500 Subject: [PATCH 0873/1130] fix: Use `zmk_battery_state_of_charge` in battery widgets --- app/boards/arm/corneish_zen/widgets/battery_status.c | 2 +- app/boards/shields/nice_view/widgets/peripheral_status.c | 2 +- app/boards/shields/nice_view/widgets/status.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.c b/app/boards/arm/corneish_zen/widgets/battery_status.c index 9a2189d1e2f..0d5b0dc54bd 100644 --- a/app/boards/arm/corneish_zen/widgets/battery_status.c +++ b/app/boards/arm/corneish_zen/widgets/battery_status.c @@ -67,7 +67,7 @@ void battery_status_update_cb(struct battery_status_state state) { static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { return (struct battery_status_state) { - .level = bt_bas_get_battery_level(), + .level = zmk_battery_state_of_charge(), #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.c b/app/boards/shields/nice_view/widgets/peripheral_status.c index 4c0c22637be..33dafdb9f1f 100644 --- a/app/boards/shields/nice_view/widgets/peripheral_status.c +++ b/app/boards/shields/nice_view/widgets/peripheral_status.c @@ -71,7 +71,7 @@ static void battery_status_update_cb(struct battery_status_state state) { static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { return (struct battery_status_state) { - .level = bt_bas_get_battery_level(), + .level = zmk_battery_state_of_charge(), #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 96b7d450a7d..96ff1e6300e 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -211,7 +211,7 @@ static void battery_status_update_cb(struct battery_status_state state) { static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { return (struct battery_status_state) { - .level = bt_bas_get_battery_level(), + .level = zmk_battery_state_of_charge(), #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ From 5257cde1f56650fcb4ee60b5bec6d6d195825ab3 Mon Sep 17 00:00:00 2001 From: moergo-sc Date: Sat, 11 Jun 2022 18:22:18 +1200 Subject: [PATCH 0874/1130] bt: add BT_CLR_ALL behaviour Defines behaviour to clear all paired Bluetooth profiles --- app/include/dt-bindings/zmk/bt.h | 3 ++- app/include/zmk/ble.h | 1 + app/src/behaviors/behavior_bt.c | 2 ++ app/src/ble.c | 17 +++++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/include/dt-bindings/zmk/bt.h b/app/include/dt-bindings/zmk/bt.h index 7af89ddb011..aaad4dc5b8b 100644 --- a/app/include/dt-bindings/zmk/bt.h +++ b/app/include/dt-bindings/zmk/bt.h @@ -8,7 +8,7 @@ #define BT_NXT_CMD 1 #define BT_PRV_CMD 2 #define BT_SEL_CMD 3 -// #define BT_FULL_RESET_CMD 4 +#define BT_CLR_ALL_CMD 4 #define BT_DISC_CMD 5 /* @@ -20,4 +20,5 @@ defines these aliases up front. #define BT_NXT BT_NXT_CMD 0 #define BT_PRV BT_PRV_CMD 0 #define BT_SEL BT_SEL_CMD +#define BT_CLR_ALL BT_CLR_ALL_CMD 0 #define BT_DISC BT_DISC_CMD diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 4323d0980e4..392a2737dbe 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -24,6 +24,7 @@ int zmk_ble_clear_bonds(); int zmk_ble_prof_next(); int zmk_ble_prof_prev(); int zmk_ble_prof_select(uint8_t index); +int zmk_ble_clear_all_bonds(); int zmk_ble_prof_disconnect(uint8_t index); int zmk_ble_active_profile_index(); diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 18a626b9bae..5d29348ecfe 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -31,6 +31,8 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, return zmk_ble_prof_prev(); case BT_SEL_CMD: return zmk_ble_prof_select(binding->param2); + case BT_CLR_ALL_CMD: + return zmk_ble_clear_all_bonds(); case BT_DISC_CMD: return zmk_ble_prof_disconnect(binding->param2); default: diff --git a/app/src/ble.c b/app/src/ble.c index a5f973a42cf..3a83ddfe684 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -224,6 +224,23 @@ int zmk_ble_clear_bonds() { return 0; }; +int zmk_ble_clear_all_bonds() { + LOG_DBG("zmk_ble_clear_all_bonds()"); + + // Unpair all profiles + for (uint8_t i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { + if (bt_addr_le_cmp(&profiles[i].peer, BT_ADDR_LE_ANY)) { + bt_unpair(BT_ID_DEFAULT, &profiles[i].peer); + set_profile_address(i, BT_ADDR_LE_ANY); + } + } + + // Automatically switch to profile 0 + zmk_ble_prof_select(0); + + return 0; +}; + int zmk_ble_active_profile_index() { return active_profile; } int zmk_ble_profile_index(const bt_addr_le_t *addr) { From 7a5155f36e6cc298cc243e4ec07552009db04744 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Mon, 18 Dec 2023 22:16:19 +0900 Subject: [PATCH 0875/1130] lint: add (void) parameter to pass -Wstrict-prototypes Note there was one place where a non-strict prototype was actually being used with an argument, in `zmk_hog_init`. In this case, the actual argument type was added instead. --- app/include/zmk/activity.h | 2 +- app/include/zmk/backlight.h | 12 ++++++------ app/include/zmk/battery.h | 2 +- app/include/zmk/ble.h | 20 ++++++++++---------- app/include/zmk/display.h | 6 +++--- app/include/zmk/hid.h | 16 ++++++++-------- app/include/zmk/hog.h | 2 +- app/include/zmk/keymap.h | 6 +++--- app/include/zmk/rgb_underglow.h | 8 ++++---- app/include/zmk/usb.h | 12 ++++++++---- app/include/zmk/usb_hid.h | 6 +++--- app/include/zmk/workqueue.h | 2 +- app/src/activity.c | 10 +++++----- app/src/backlight.c | 16 ++++++++-------- app/src/battery.c | 2 +- app/src/ble.c | 24 ++++++++++++------------ app/src/endpoints.c | 2 +- app/src/ext_power_generic.c | 2 +- app/src/hid.c | 26 +++++++++++++++----------- app/src/hog.c | 2 +- app/src/keymap.c | 6 +++--- app/src/rgb_underglow.c | 18 +++++++++--------- app/src/split/bluetooth/central.c | 2 +- app/src/split/bluetooth/peripheral.c | 4 ++-- app/src/usb.c | 4 ++-- app/src/usb_hid.c | 4 ++-- app/src/workqueue.c | 4 ++-- app/src/wpm.c | 6 +++--- 28 files changed, 117 insertions(+), 109 deletions(-) diff --git a/app/include/zmk/activity.h b/app/include/zmk/activity.h index 9c858b15d42..2aad024a848 100644 --- a/app/include/zmk/activity.h +++ b/app/include/zmk/activity.h @@ -8,4 +8,4 @@ enum zmk_activity_state { ZMK_ACTIVITY_ACTIVE, ZMK_ACTIVITY_IDLE, ZMK_ACTIVITY_SLEEP }; -enum zmk_activity_state zmk_activity_get_state(); \ No newline at end of file +enum zmk_activity_state zmk_activity_get_state(void); diff --git a/app/include/zmk/backlight.h b/app/include/zmk/backlight.h index a0f52431175..af8fc76d03d 100644 --- a/app/include/zmk/backlight.h +++ b/app/include/zmk/backlight.h @@ -6,12 +6,12 @@ #pragma once -int zmk_backlight_on(); -int zmk_backlight_off(); -int zmk_backlight_toggle(); -bool zmk_backlight_is_on(); +int zmk_backlight_on(void); +int zmk_backlight_off(void); +int zmk_backlight_toggle(void); +bool zmk_backlight_is_on(void); int zmk_backlight_set_brt(uint8_t brightness); -uint8_t zmk_backlight_get_brt(); +uint8_t zmk_backlight_get_brt(void); uint8_t zmk_backlight_calc_brt(int direction); -uint8_t zmk_backlight_calc_brt_cycle(); +uint8_t zmk_backlight_calc_brt_cycle(void); diff --git a/app/include/zmk/battery.h b/app/include/zmk/battery.h index f62219c1814..edc8fd7a070 100644 --- a/app/include/zmk/battery.h +++ b/app/include/zmk/battery.h @@ -6,4 +6,4 @@ #pragma once -uint8_t zmk_battery_state_of_charge(); +uint8_t zmk_battery_state_of_charge(void); diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 392a2737dbe..417e490c11e 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -20,21 +20,21 @@ #define ZMK_BLE_PROFILE_COUNT CONFIG_BT_MAX_PAIRED #endif -int zmk_ble_clear_bonds(); -int zmk_ble_prof_next(); -int zmk_ble_prof_prev(); +int zmk_ble_clear_bonds(void); +int zmk_ble_prof_next(void); +int zmk_ble_prof_prev(void); int zmk_ble_prof_select(uint8_t index); -int zmk_ble_clear_all_bonds(); +int zmk_ble_clear_all_bonds(void); int zmk_ble_prof_disconnect(uint8_t index); -int zmk_ble_active_profile_index(); +int zmk_ble_active_profile_index(void); int zmk_ble_profile_index(const bt_addr_le_t *addr); -bt_addr_le_t *zmk_ble_active_profile_addr(); -bool zmk_ble_active_profile_is_open(); -bool zmk_ble_active_profile_is_connected(); -char *zmk_ble_active_profile_name(); +bt_addr_le_t *zmk_ble_active_profile_addr(void); +bool zmk_ble_active_profile_is_open(void); +bool zmk_ble_active_profile_is_connected(void); +char *zmk_ble_active_profile_name(void); -int zmk_ble_unpair_all(); +int zmk_ble_unpair_all(void); #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr); diff --git a/app/include/zmk/display.h b/app/include/zmk/display.h index 45a4bee0350..1ef41f48d36 100644 --- a/app/include/zmk/display.h +++ b/app/include/zmk/display.h @@ -10,10 +10,10 @@ #pragma once -struct k_work_q *zmk_display_work_q(); +struct k_work_q *zmk_display_work_q(void); -bool zmk_display_is_initialized(); -int zmk_display_init(); +bool zmk_display_is_initialized(void); +int zmk_display_init(void); /** * @brief Macro to define a ZMK event listener that handles the thread safety of fetching diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 30534b02d21..d1d3b7d47db 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -252,7 +252,7 @@ struct zmk_hid_mouse_report { #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) -zmk_mod_flags_t zmk_hid_get_explicit_mods(); +zmk_mod_flags_t zmk_hid_get_explicit_mods(void); int zmk_hid_register_mod(zmk_mod_t modifier); int zmk_hid_unregister_mod(zmk_mod_t modifier); bool zmk_hid_mod_is_pressed(zmk_mod_t modifier); @@ -260,18 +260,18 @@ bool zmk_hid_mod_is_pressed(zmk_mod_t modifier); int zmk_hid_register_mods(zmk_mod_flags_t explicit_modifiers); int zmk_hid_unregister_mods(zmk_mod_flags_t explicit_modifiers); int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers); -int zmk_hid_implicit_modifiers_release(); +int zmk_hid_implicit_modifiers_release(void); int zmk_hid_masked_modifiers_set(zmk_mod_flags_t masked_modifiers); -int zmk_hid_masked_modifiers_clear(); +int zmk_hid_masked_modifiers_clear(void); int zmk_hid_keyboard_press(zmk_key_t key); int zmk_hid_keyboard_release(zmk_key_t key); -void zmk_hid_keyboard_clear(); +void zmk_hid_keyboard_clear(void); bool zmk_hid_keyboard_is_pressed(zmk_key_t key); int zmk_hid_consumer_press(zmk_key_t key); int zmk_hid_consumer_release(zmk_key_t key); -void zmk_hid_consumer_clear(); +void zmk_hid_consumer_clear(void); bool zmk_hid_consumer_is_pressed(zmk_key_t key); int zmk_hid_press(uint32_t usage); @@ -283,11 +283,11 @@ int zmk_hid_mouse_button_press(zmk_mouse_button_t button); int zmk_hid_mouse_button_release(zmk_mouse_button_t button); int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons); int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons); -void zmk_hid_mouse_clear(); +void zmk_hid_mouse_clear(void); #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) -struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(); -struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); +struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(void); +struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(void); #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) zmk_hid_boot_report_t *zmk_hid_get_boot_report(); diff --git a/app/include/zmk/hog.h b/app/include/zmk/hog.h index b4e45d9186d..5ea99126644 100644 --- a/app/include/zmk/hog.h +++ b/app/include/zmk/hog.h @@ -9,7 +9,7 @@ #include #include -int zmk_hog_init(); +int zmk_hog_init(const struct device *_arg); int zmk_hog_send_keyboard_report(struct zmk_hid_keyboard_report_body *body); int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body); diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 9bf81e1e60f..0d7dbaf33b3 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -14,10 +14,10 @@ typedef uint32_t zmk_keymap_layers_state_t; -uint8_t zmk_keymap_layer_default(); -zmk_keymap_layers_state_t zmk_keymap_layer_state(); +uint8_t zmk_keymap_layer_default(void); +zmk_keymap_layers_state_t zmk_keymap_layer_state(void); bool zmk_keymap_layer_active(uint8_t layer); -uint8_t zmk_keymap_highest_layer_active(); +uint8_t zmk_keymap_highest_layer_active(void); int zmk_keymap_layer_activate(uint8_t layer); int zmk_keymap_layer_deactivate(uint8_t layer); int zmk_keymap_layer_toggle(uint8_t layer); diff --git a/app/include/zmk/rgb_underglow.h b/app/include/zmk/rgb_underglow.h index 797f0b19f1d..be0ef252290 100644 --- a/app/include/zmk/rgb_underglow.h +++ b/app/include/zmk/rgb_underglow.h @@ -12,10 +12,10 @@ struct zmk_led_hsb { uint8_t b; }; -int zmk_rgb_underglow_toggle(); +int zmk_rgb_underglow_toggle(void); int zmk_rgb_underglow_get_state(bool *state); -int zmk_rgb_underglow_on(); -int zmk_rgb_underglow_off(); +int zmk_rgb_underglow_on(void); +int zmk_rgb_underglow_off(void); int zmk_rgb_underglow_cycle_effect(int direction); int zmk_rgb_underglow_calc_effect(int direction); int zmk_rgb_underglow_select_effect(int effect); @@ -26,4 +26,4 @@ int zmk_rgb_underglow_change_hue(int direction); int zmk_rgb_underglow_change_sat(int direction); int zmk_rgb_underglow_change_brt(int direction); int zmk_rgb_underglow_change_spd(int direction); -int zmk_rgb_underglow_set_hsb(struct zmk_led_hsb color); \ No newline at end of file +int zmk_rgb_underglow_set_hsb(struct zmk_led_hsb color); diff --git a/app/include/zmk/usb.h b/app/include/zmk/usb.h index 9e92a83664c..540cdd9c7e5 100644 --- a/app/include/zmk/usb.h +++ b/app/include/zmk/usb.h @@ -18,8 +18,12 @@ enum zmk_usb_conn_state { ZMK_USB_CONN_HID, }; -enum usb_dc_status_code zmk_usb_get_status(); -enum zmk_usb_conn_state zmk_usb_get_conn_state(); +enum usb_dc_status_code zmk_usb_get_status(void); +enum zmk_usb_conn_state zmk_usb_get_conn_state(void); -static inline bool zmk_usb_is_powered() { return zmk_usb_get_conn_state() != ZMK_USB_CONN_NONE; } -static inline bool zmk_usb_is_hid_ready() { return zmk_usb_get_conn_state() == ZMK_USB_CONN_HID; } +static inline bool zmk_usb_is_powered(void) { + return zmk_usb_get_conn_state() != ZMK_USB_CONN_NONE; +} +static inline bool zmk_usb_is_hid_ready(void) { + return zmk_usb_get_conn_state() == ZMK_USB_CONN_HID; +} diff --git a/app/include/zmk/usb_hid.h b/app/include/zmk/usb_hid.h index f9091778501..c0cbc08a7ad 100644 --- a/app/include/zmk/usb_hid.h +++ b/app/include/zmk/usb_hid.h @@ -8,9 +8,9 @@ #include -int zmk_usb_hid_send_keyboard_report(); -int zmk_usb_hid_send_consumer_report(); +int zmk_usb_hid_send_keyboard_report(void); +int zmk_usb_hid_send_consumer_report(void); #if IS_ENABLED(CONFIG_ZMK_MOUSE) -int zmk_usb_hid_send_mouse_report(); +int zmk_usb_hid_send_mouse_report(void); #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) void zmk_usb_hid_set_protocol(uint8_t protocol); diff --git a/app/include/zmk/workqueue.h b/app/include/zmk/workqueue.h index 41e94580846..5c9addad7bd 100644 --- a/app/include/zmk/workqueue.h +++ b/app/include/zmk/workqueue.h @@ -1 +1 @@ -struct k_work_q *zmk_workqueue_lowprio_work_q(); +struct k_work_q *zmk_workqueue_lowprio_work_q(void); diff --git a/app/src/activity.c b/app/src/activity.c index 41fe2e15dc4..1e93bfb6592 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -24,7 +24,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #endif -bool is_usb_power_present() { +bool is_usb_power_present(void) { #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) return zmk_usb_is_powered(); #else @@ -42,7 +42,7 @@ static uint32_t activity_last_uptime; #define MAX_SLEEP_MS CONFIG_ZMK_IDLE_SLEEP_TIMEOUT #endif -int raise_event() { +int raise_event(void) { return ZMK_EVENT_RAISE(new_zmk_activity_state_changed( (struct zmk_activity_state_changed){.state = activity_state})); } @@ -55,7 +55,7 @@ int set_state(enum zmk_activity_state state) { return raise_event(); } -enum zmk_activity_state zmk_activity_get_state() { return activity_state; } +enum zmk_activity_state zmk_activity_get_state(void) { return activity_state; } int activity_event_listener(const zmk_event_t *eh) { activity_last_uptime = k_uptime_get(); @@ -80,11 +80,11 @@ void activity_work_handler(struct k_work *work) { K_WORK_DEFINE(activity_work, activity_work_handler); -void activity_expiry_function() { k_work_submit(&activity_work); } +void activity_expiry_function(void) { k_work_submit(&activity_work); } K_TIMER_DEFINE(activity_timer, activity_expiry_function, NULL); -int activity_init() { +int activity_init(void) { activity_last_uptime = k_uptime_get(); k_timer_start(&activity_timer, K_SECONDS(1), K_SECONDS(1)); diff --git a/app/src/backlight.c b/app/src/backlight.c index f633ddb728b..9497f313af6 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -42,7 +42,7 @@ struct backlight_state { static struct backlight_state state = {.brightness = CONFIG_ZMK_BACKLIGHT_BRT_START, .on = IS_ENABLED(CONFIG_ZMK_BACKLIGHT_ON_START)}; -static int zmk_backlight_update() { +static int zmk_backlight_update(void) { uint8_t brt = zmk_backlight_get_brt(); LOG_DBG("Update backlight brightness: %d%%", brt); @@ -98,7 +98,7 @@ static int zmk_backlight_init(const struct device *_arg) { return zmk_backlight_update(); } -static int zmk_backlight_update_and_save() { +static int zmk_backlight_update_and_save(void) { int rc = zmk_backlight_update(); if (rc != 0) { return rc; @@ -112,20 +112,20 @@ static int zmk_backlight_update_and_save() { #endif } -int zmk_backlight_on() { +int zmk_backlight_on(void) { state.brightness = MAX(state.brightness, CONFIG_ZMK_BACKLIGHT_BRT_STEP); state.on = true; return zmk_backlight_update_and_save(); } -int zmk_backlight_off() { +int zmk_backlight_off(void) { state.on = false; return zmk_backlight_update_and_save(); } -int zmk_backlight_toggle() { return state.on ? zmk_backlight_off() : zmk_backlight_on(); } +int zmk_backlight_toggle(void) { return state.on ? zmk_backlight_off() : zmk_backlight_on(); } -bool zmk_backlight_is_on() { return state.on; } +bool zmk_backlight_is_on(void) { return state.on; } int zmk_backlight_set_brt(uint8_t brightness) { state.brightness = MIN(brightness, BRT_MAX); @@ -133,14 +133,14 @@ int zmk_backlight_set_brt(uint8_t brightness) { return zmk_backlight_update_and_save(); } -uint8_t zmk_backlight_get_brt() { return state.on ? state.brightness : 0; } +uint8_t zmk_backlight_get_brt(void) { return state.on ? state.brightness : 0; } uint8_t zmk_backlight_calc_brt(int direction) { int brt = state.brightness + (direction * CONFIG_ZMK_BACKLIGHT_BRT_STEP); return CLAMP(brt, 0, BRT_MAX); } -uint8_t zmk_backlight_calc_brt_cycle() { +uint8_t zmk_backlight_calc_brt_cycle(void) { if (state.brightness == BRT_MAX) { return 0; } else { diff --git a/app/src/battery.c b/app/src/battery.c index e76797ef997..d5a5e3f137d 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -24,7 +24,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static uint8_t last_state_of_charge = 0; -uint8_t zmk_battery_state_of_charge() { return last_state_of_charge; } +uint8_t zmk_battery_state_of_charge(void) { return last_state_of_charge; } #if DT_HAS_CHOSEN(zmk_battery) static const struct device *const battery = DEVICE_DT_GET(DT_CHOSEN(zmk_battery)); diff --git a/app/src/ble.c b/app/src/ble.c index 3a83ddfe684..96e7fdb060d 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -82,7 +82,7 @@ static bt_addr_le_t peripheral_addrs[ZMK_SPLIT_BLE_PERIPHERAL_COUNT]; #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ -static void raise_profile_changed_event() { +static void raise_profile_changed_event(void) { ZMK_EVENT_RAISE(new_zmk_ble_active_profile_changed((struct zmk_ble_active_profile_changed){ .index = active_profile, .profile = &profiles[active_profile]})); } @@ -93,7 +93,7 @@ static void raise_profile_changed_event_callback(struct k_work *work) { K_WORK_DEFINE(raise_profile_changed_event_work, raise_profile_changed_event_callback); -bool zmk_ble_active_profile_is_open() { +bool zmk_ble_active_profile_is_open(void) { return !bt_addr_le_cmp(&profiles[active_profile].peer, BT_ADDR_LE_ANY); } @@ -112,7 +112,7 @@ void set_profile_address(uint8_t index, const bt_addr_le_t *addr) { k_work_submit(&raise_profile_changed_event_work); } -bool zmk_ble_active_profile_is_connected() { +bool zmk_ble_active_profile_is_connected(void) { struct bt_conn *conn; struct bt_conn_info info; bt_addr_le_t *addr = zmk_ble_active_profile_addr(); @@ -161,7 +161,7 @@ bool zmk_ble_active_profile_is_connected() { } \ advertising_status = ZMK_ADV_CONN; -int update_advertising() { +int update_advertising(void) { int err = 0; bt_addr_le_t *addr; struct bt_conn *conn; @@ -210,7 +210,7 @@ static void update_advertising_callback(struct k_work *work) { update_advertisin K_WORK_DEFINE(update_advertising_work, update_advertising_callback); -int zmk_ble_clear_bonds() { +int zmk_ble_clear_bonds(void) { LOG_DBG(""); if (bt_addr_le_cmp(&profiles[active_profile].peer, BT_ADDR_LE_ANY)) { @@ -224,7 +224,7 @@ int zmk_ble_clear_bonds() { return 0; }; -int zmk_ble_clear_all_bonds() { +int zmk_ble_clear_all_bonds(void) { LOG_DBG("zmk_ble_clear_all_bonds()"); // Unpair all profiles @@ -241,7 +241,7 @@ int zmk_ble_clear_all_bonds() { return 0; }; -int zmk_ble_active_profile_index() { return active_profile; } +int zmk_ble_active_profile_index(void) { return active_profile; } int zmk_ble_profile_index(const bt_addr_le_t *addr) { for (int i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { @@ -260,7 +260,7 @@ static void ble_save_profile_work(struct k_work *work) { static struct k_work_delayable ble_save_work; #endif -static int ble_save_profile() { +static int ble_save_profile(void) { #if IS_ENABLED(CONFIG_SETTINGS) return k_work_reschedule(&ble_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else @@ -288,12 +288,12 @@ int zmk_ble_prof_select(uint8_t index) { return 0; }; -int zmk_ble_prof_next() { +int zmk_ble_prof_next(void) { LOG_DBG(""); return zmk_ble_prof_select((active_profile + 1) % ZMK_BLE_PROFILE_COUNT); }; -int zmk_ble_prof_prev() { +int zmk_ble_prof_prev(void) { LOG_DBG(""); return zmk_ble_prof_select((active_profile + ZMK_BLE_PROFILE_COUNT - 1) % ZMK_BLE_PROFILE_COUNT); @@ -320,9 +320,9 @@ int zmk_ble_prof_disconnect(uint8_t index) { return result; } -bt_addr_le_t *zmk_ble_active_profile_addr() { return &profiles[active_profile].peer; } +bt_addr_le_t *zmk_ble_active_profile_addr(void) { return &profiles[active_profile].peer; } -char *zmk_ble_active_profile_name() { return profiles[active_profile].name; } +char *zmk_ble_active_profile_name(void) { return profiles[active_profile].name; } #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 098e04e2776..827f2dcd814 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -322,7 +322,7 @@ static int zmk_endpoints_init(const struct device *_arg) { return 0; } -static void disconnect_current_endpoint() { +static void disconnect_current_endpoint(void) { zmk_hid_keyboard_clear(); zmk_hid_consumer_clear(); #if IS_ENABLED(CONFIG_ZMK_MOUSE) diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 52896f19871..2586f436852 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -46,7 +46,7 @@ static void ext_power_save_state_work(struct k_work *work) { static struct k_work_delayable ext_power_save_work; #endif -int ext_power_save_state() { +int ext_power_save_state(void) { #if IS_ENABLED(CONFIG_SETTINGS) int ret = k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); return MIN(ret, 0); diff --git a/app/src/hid.c b/app/src/hid.c index 1ea2afb1621..8b0c23f37ed 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -47,7 +47,7 @@ static zmk_mod_flags_t masked_modifiers = 0; #define GET_MODIFIERS (keyboard_report.body.modifiers) -zmk_mod_flags_t zmk_hid_get_explicit_mods() { return explicit_modifiers; } +zmk_mod_flags_t zmk_hid_get_explicit_mods(void) { return explicit_modifiers; } int zmk_hid_register_mod(zmk_mod_t modifier) { explicit_modifier_counts[modifier]++; @@ -117,7 +117,7 @@ static zmk_hid_boot_report_t *boot_report_rollover(uint8_t modifiers) { #define TOGGLE_KEYBOARD(code, val) WRITE_BIT(keyboard_report.body.keys[code / 8], code % 8, val) #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) -zmk_hid_boot_report_t *zmk_hid_get_boot_report() { +zmk_hid_boot_report_t *zmk_hid_get_boot_report(void) { if (keys_held > HID_BOOT_KEY_LEN) { return boot_report_rollover(keyboard_report.body.modifiers); } @@ -187,7 +187,7 @@ static inline bool check_keyboard_usage(zmk_key_t usage) { } #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) -zmk_hid_boot_report_t *zmk_hid_get_boot_report() { +zmk_hid_boot_report_t *zmk_hid_get_boot_report(void) { if (keys_held > HID_BOOT_KEY_LEN) { return boot_report_rollover(keyboard_report.body.modifiers); } @@ -268,7 +268,7 @@ int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t new_implicit_modifiers) { return current == GET_MODIFIERS ? 0 : 1; } -int zmk_hid_implicit_modifiers_release() { +int zmk_hid_implicit_modifiers_release(void) { implicit_modifiers = 0; zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers); @@ -282,7 +282,7 @@ int zmk_hid_masked_modifiers_set(zmk_mod_flags_t new_masked_modifiers) { return current == GET_MODIFIERS ? 0 : 1; } -int zmk_hid_masked_modifiers_clear() { +int zmk_hid_masked_modifiers_clear(void) { masked_modifiers = 0; zmk_mod_flags_t current = GET_MODIFIERS; SET_MODIFIERS(explicit_modifiers); @@ -312,7 +312,9 @@ bool zmk_hid_keyboard_is_pressed(zmk_key_t code) { return check_keyboard_usage(code); } -void zmk_hid_keyboard_clear() { memset(&keyboard_report.body, 0, sizeof(keyboard_report.body)); } +void zmk_hid_keyboard_clear(void) { + memset(&keyboard_report.body, 0, sizeof(keyboard_report.body)); +} int zmk_hid_consumer_press(zmk_key_t code) { TOGGLE_CONSUMER(0U, code); @@ -324,7 +326,9 @@ int zmk_hid_consumer_release(zmk_key_t code) { return 0; }; -void zmk_hid_consumer_clear() { memset(&consumer_report.body, 0, sizeof(consumer_report.body)); } +void zmk_hid_consumer_clear(void) { + memset(&consumer_report.body, 0, sizeof(consumer_report.body)); +} bool zmk_hid_consumer_is_pressed(zmk_key_t key) { for (int idx = 0; idx < CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE; idx++) { @@ -426,21 +430,21 @@ int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons) { } return 0; } -void zmk_hid_mouse_clear() { memset(&mouse_report.body, 0, sizeof(mouse_report.body)); } +void zmk_hid_mouse_clear(void) { memset(&mouse_report.body, 0, sizeof(mouse_report.body)); } #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) -struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { +struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(void) { return &keyboard_report; } -struct zmk_hid_consumer_report *zmk_hid_get_consumer_report() { +struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(void) { return &consumer_report; } #if IS_ENABLED(CONFIG_ZMK_MOUSE) -struct zmk_hid_mouse_report *zmk_hid_get_mouse_report() { +struct zmk_hid_mouse_report *zmk_hid_get_mouse_report(void) { return &mouse_report; } diff --git a/app/src/hog.c b/app/src/hog.c index 1baf00b53b5..514c7be5ee1 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -220,7 +220,7 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); -struct bt_conn *destination_connection() { +struct bt_conn *destination_connection(void) { struct bt_conn *conn; bt_addr_le_t *addr = zmk_ble_active_profile_addr(); LOG_DBG("Address pointer %p", addr); diff --git a/app/src/keymap.c b/app/src/keymap.c index d275feafbb5..5e444b61dab 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -96,9 +96,9 @@ static inline int set_layer_state(uint8_t layer, bool state) { return 0; } -uint8_t zmk_keymap_layer_default() { return _zmk_keymap_layer_default; } +uint8_t zmk_keymap_layer_default(void) { return _zmk_keymap_layer_default; } -zmk_keymap_layers_state_t zmk_keymap_layer_state() { return _zmk_keymap_layer_state; } +zmk_keymap_layers_state_t zmk_keymap_layer_state(void) { return _zmk_keymap_layer_state; } bool zmk_keymap_layer_active_with_state(uint8_t layer, zmk_keymap_layers_state_t state_to_test) { // The default layer is assumed to be ALWAYS ACTIVE so we include an || here to ensure nobody @@ -110,7 +110,7 @@ bool zmk_keymap_layer_active(uint8_t layer) { return zmk_keymap_layer_active_with_state(layer, _zmk_keymap_layer_state); }; -uint8_t zmk_keymap_highest_layer_active() { +uint8_t zmk_keymap_highest_layer_active(void) { for (uint8_t layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer > 0; layer--) { if (zmk_keymap_layer_active(layer)) { return layer; diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 9d4f2cf1cab..dabe0bbb42c 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -130,13 +130,13 @@ static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) { return rgb; } -static void zmk_rgb_underglow_effect_solid() { +static void zmk_rgb_underglow_effect_solid(void) { for (int i = 0; i < STRIP_NUM_PIXELS; i++) { pixels[i] = hsb_to_rgb(hsb_scale_min_max(state.color)); } } -static void zmk_rgb_underglow_effect_breathe() { +static void zmk_rgb_underglow_effect_breathe(void) { for (int i = 0; i < STRIP_NUM_PIXELS; i++) { struct zmk_led_hsb hsb = state.color; hsb.b = abs(state.animation_step - 1200) / 12; @@ -151,7 +151,7 @@ static void zmk_rgb_underglow_effect_breathe() { } } -static void zmk_rgb_underglow_effect_spectrum() { +static void zmk_rgb_underglow_effect_spectrum(void) { for (int i = 0; i < STRIP_NUM_PIXELS; i++) { struct zmk_led_hsb hsb = state.color; hsb.h = state.animation_step; @@ -163,7 +163,7 @@ static void zmk_rgb_underglow_effect_spectrum() { state.animation_step = state.animation_step % HUE_MAX; } -static void zmk_rgb_underglow_effect_swirl() { +static void zmk_rgb_underglow_effect_swirl(void) { for (int i = 0; i < STRIP_NUM_PIXELS; i++) { struct zmk_led_hsb hsb = state.color; hsb.h = (HUE_MAX / STRIP_NUM_PIXELS * i + state.animation_step) % HUE_MAX; @@ -232,7 +232,7 @@ static int rgb_settings_set(const char *name, size_t len, settings_read_cb read_ struct settings_handler rgb_conf = {.name = "rgb/underglow", .h_set = rgb_settings_set}; -static void zmk_rgb_underglow_save_state_work() { +static void zmk_rgb_underglow_save_state_work(void) { settings_save_one("rgb/underglow/state", &state, sizeof(state)); } @@ -286,7 +286,7 @@ static int zmk_rgb_underglow_init(const struct device *_arg) { return 0; } -int zmk_rgb_underglow_save_state() { +int zmk_rgb_underglow_save_state(void) { #if IS_ENABLED(CONFIG_SETTINGS) int ret = k_work_reschedule(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); return MIN(ret, 0); @@ -303,7 +303,7 @@ int zmk_rgb_underglow_get_state(bool *on_off) { return 0; } -int zmk_rgb_underglow_on() { +int zmk_rgb_underglow_on(void) { if (!led_strip) return -ENODEV; @@ -333,7 +333,7 @@ static void zmk_rgb_underglow_off_handler(struct k_work *work) { K_WORK_DEFINE(underglow_off_work, zmk_rgb_underglow_off_handler); -int zmk_rgb_underglow_off() { +int zmk_rgb_underglow_off(void) { if (!led_strip) return -ENODEV; @@ -376,7 +376,7 @@ int zmk_rgb_underglow_cycle_effect(int direction) { return zmk_rgb_underglow_select_effect(zmk_rgb_underglow_calc_effect(direction)); } -int zmk_rgb_underglow_toggle() { +int zmk_rgb_underglow_toggle(void) { return state.on ? zmk_rgb_underglow_off() : zmk_rgb_underglow_on(); } diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 40e1bac86c4..a405d0650db 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -561,7 +561,7 @@ static void split_central_process_connection(struct bt_conn *conn) { start_scanning(); } -static int stop_scanning() { +static int stop_scanning(void) { LOG_DBG("Stopping peripheral scanning"); is_scanning = false; diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index 704e2eed408..d54c312b529 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -142,9 +142,9 @@ static struct bt_conn_auth_info_cb zmk_peripheral_ble_auth_info_cb = { .pairing_complete = auth_pairing_complete, }; -bool zmk_split_bt_peripheral_is_connected() { return is_connected; } +bool zmk_split_bt_peripheral_is_connected(void) { return is_connected; } -bool zmk_split_bt_peripheral_is_bonded() { return is_bonded; } +bool zmk_split_bt_peripheral_is_bonded(void) { return is_bonded; } static int zmk_peripheral_ble_init(const struct device *_arg) { int err = bt_enable(NULL); diff --git a/app/src/usb.c b/app/src/usb.c index 9d27900c3c6..98b48bfe9e6 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -28,9 +28,9 @@ static void raise_usb_status_changed_event(struct k_work *_work) { K_WORK_DEFINE(usb_status_notifier_work, raise_usb_status_changed_event); -enum usb_dc_status_code zmk_usb_get_status() { return usb_status; } +enum usb_dc_status_code zmk_usb_get_status(void) { return usb_status; } -enum zmk_usb_conn_state zmk_usb_get_conn_state() { +enum zmk_usb_conn_state zmk_usb_get_conn_state(void) { LOG_DBG("state: %d", usb_status); switch (usb_status) { case USB_DC_SUSPEND: diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index 3412314086f..f3542ffa4a3 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -147,13 +147,13 @@ static int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { } } -int zmk_usb_hid_send_keyboard_report() { +int zmk_usb_hid_send_keyboard_report(void) { size_t len; uint8_t *report = get_keyboard_report(&len); return zmk_usb_hid_send_report(report, len); } -int zmk_usb_hid_send_consumer_report() { +int zmk_usb_hid_send_consumer_report(void) { #if IS_ENABLED(CONFIG_ZMK_USB_BOOT) if (hid_protocol == HID_PROTOCOL_BOOT) { return -ENOTSUP; diff --git a/app/src/workqueue.c b/app/src/workqueue.c index a9a8bce5202..e6e55c87c14 100644 --- a/app/src/workqueue.c +++ b/app/src/workqueue.c @@ -13,11 +13,11 @@ K_THREAD_STACK_DEFINE(lowprio_q_stack, CONFIG_ZMK_LOW_PRIORITY_THREAD_STACK_SIZE static struct k_work_q lowprio_work_q; -struct k_work_q *zmk_workqueue_lowprio_work_q() { +struct k_work_q *zmk_workqueue_lowprio_work_q(void) { return &lowprio_work_q; } -static int workqueue_init() { +static int workqueue_init(void) { static const struct k_work_queue_config queue_config = {.name = "Low Priority Work Queue"}; k_work_queue_start(&lowprio_work_q, lowprio_q_stack, K_THREAD_STACK_SIZEOF(lowprio_q_stack), CONFIG_ZMK_LOW_PRIORITY_THREAD_PRIORITY, &queue_config); diff --git a/app/src/wpm.c b/app/src/wpm.c index 00a5942ecb8..6594b25ad19 100644 --- a/app/src/wpm.c +++ b/app/src/wpm.c @@ -32,7 +32,7 @@ static uint8_t last_wpm_state; static uint8_t wpm_update_counter; static uint32_t key_pressed_count; -int zmk_wpm_get_state() { return wpm_state; } +int zmk_wpm_get_state(void) { return wpm_state; } int wpm_event_listener(const zmk_event_t *eh) { const struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); @@ -68,11 +68,11 @@ void wpm_work_handler(struct k_work *work) { K_WORK_DEFINE(wpm_work, wpm_work_handler); -void wpm_expiry_function() { k_work_submit(&wpm_work); } +void wpm_expiry_function(void) { k_work_submit(&wpm_work); } K_TIMER_DEFINE(wpm_timer, wpm_expiry_function, NULL); -int wpm_init() { +int wpm_init(void) { wpm_state = 0; wpm_update_counter = 0; k_timer_start(&wpm_timer, K_SECONDS(WPM_UPDATE_INTERVAL_SECONDS), From b8cb4073510201c0327ee05a28b3ebf54adf3512 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Mon, 18 Dec 2023 23:07:40 +0900 Subject: [PATCH 0876/1130] lint: use correct type signature for Zephyr callbacks --- app/src/activity.c | 4 ++-- app/src/rgb_underglow.c | 2 +- app/src/workqueue.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/activity.c b/app/src/activity.c index 1e93bfb6592..f713dde59cb 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -80,11 +80,11 @@ void activity_work_handler(struct k_work *work) { K_WORK_DEFINE(activity_work, activity_work_handler); -void activity_expiry_function(void) { k_work_submit(&activity_work); } +void activity_expiry_function(struct k_timer *_timer) { k_work_submit(&activity_work); } K_TIMER_DEFINE(activity_timer, activity_expiry_function, NULL); -int activity_init(void) { +int activity_init(const struct device *_device) { activity_last_uptime = k_uptime_get(); k_timer_start(&activity_timer, K_SECONDS(1), K_SECONDS(1)); diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index dabe0bbb42c..ddc0aef1f45 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -232,7 +232,7 @@ static int rgb_settings_set(const char *name, size_t len, settings_read_cb read_ struct settings_handler rgb_conf = {.name = "rgb/underglow", .h_set = rgb_settings_set}; -static void zmk_rgb_underglow_save_state_work(void) { +static void zmk_rgb_underglow_save_state_work(struct k_work *_work) { settings_save_one("rgb/underglow/state", &state, sizeof(state)); } diff --git a/app/src/workqueue.c b/app/src/workqueue.c index e6e55c87c14..1aa4f59a125 100644 --- a/app/src/workqueue.c +++ b/app/src/workqueue.c @@ -17,7 +17,7 @@ struct k_work_q *zmk_workqueue_lowprio_work_q(void) { return &lowprio_work_q; } -static int workqueue_init(void) { +static int workqueue_init(const struct device *_device) { static const struct k_work_queue_config queue_config = {.name = "Low Priority Work Queue"}; k_work_queue_start(&lowprio_work_q, lowprio_q_stack, K_THREAD_STACK_SIZEOF(lowprio_q_stack), CONFIG_ZMK_LOW_PRIORITY_THREAD_PRIORITY, &queue_config); From 604c95118e36764c9f4e6a3bdd9a1a325f2a1388 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Mon, 18 Dec 2023 23:08:12 +0900 Subject: [PATCH 0877/1130] Remove error reporting from ble utility functions that never error --- app/include/zmk/ble.h | 4 ++-- app/src/behaviors/behavior_bt.c | 6 ++++-- app/src/ble.c | 8 ++------ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 417e490c11e..773323c1cf9 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -20,11 +20,11 @@ #define ZMK_BLE_PROFILE_COUNT CONFIG_BT_MAX_PAIRED #endif -int zmk_ble_clear_bonds(void); +void zmk_ble_clear_bonds(void); int zmk_ble_prof_next(void); int zmk_ble_prof_prev(void); int zmk_ble_prof_select(uint8_t index); -int zmk_ble_clear_all_bonds(void); +void zmk_ble_clear_all_bonds(void); int zmk_ble_prof_disconnect(uint8_t index); int zmk_ble_active_profile_index(void); diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 5d29348ecfe..13ea2495891 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -24,7 +24,8 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { case BT_CLR_CMD: - return zmk_ble_clear_bonds(); + zmk_ble_clear_bonds(); + return 0; case BT_NXT_CMD: return zmk_ble_prof_next(); case BT_PRV_CMD: @@ -32,7 +33,8 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, case BT_SEL_CMD: return zmk_ble_prof_select(binding->param2); case BT_CLR_ALL_CMD: - return zmk_ble_clear_all_bonds(); + zmk_ble_clear_all_bonds(); + return 0; case BT_DISC_CMD: return zmk_ble_prof_disconnect(binding->param2); default: diff --git a/app/src/ble.c b/app/src/ble.c index 96e7fdb060d..fcf4c52310c 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -210,7 +210,7 @@ static void update_advertising_callback(struct k_work *work) { update_advertisin K_WORK_DEFINE(update_advertising_work, update_advertising_callback); -int zmk_ble_clear_bonds(void) { +void zmk_ble_clear_bonds(void) { LOG_DBG(""); if (bt_addr_le_cmp(&profiles[active_profile].peer, BT_ADDR_LE_ANY)) { @@ -220,11 +220,9 @@ int zmk_ble_clear_bonds(void) { } update_advertising(); - - return 0; }; -int zmk_ble_clear_all_bonds(void) { +void zmk_ble_clear_all_bonds(void) { LOG_DBG("zmk_ble_clear_all_bonds()"); // Unpair all profiles @@ -237,8 +235,6 @@ int zmk_ble_clear_all_bonds(void) { // Automatically switch to profile 0 zmk_ble_prof_select(0); - - return 0; }; int zmk_ble_active_profile_index(void) { return active_profile; } From f4fe7fa40fabe8051119b5adfc551447b446f9eb Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Tue, 19 Dec 2023 15:00:26 +0900 Subject: [PATCH 0878/1130] Extract common behaviour of clearing a bond --- app/src/ble.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index fcf4c52310c..85f1e479568 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -210,15 +210,17 @@ static void update_advertising_callback(struct k_work *work) { update_advertisin K_WORK_DEFINE(update_advertising_work, update_advertising_callback); -void zmk_ble_clear_bonds(void) { - LOG_DBG(""); - - if (bt_addr_le_cmp(&profiles[active_profile].peer, BT_ADDR_LE_ANY)) { - LOG_DBG("Unpairing!"); - bt_unpair(BT_ID_DEFAULT, &profiles[active_profile].peer); - set_profile_address(active_profile, BT_ADDR_LE_ANY); +static void clear_profile_bond(uint8_t profile) { + if (bt_addr_le_cmp(&profiles[profile].peer, BT_ADDR_LE_ANY)) { + bt_unpair(BT_ID_DEFAULT, &profiles[profile].peer); + set_profile_address(profile, BT_ADDR_LE_ANY); } +} +void zmk_ble_clear_bonds(void) { + LOG_DBG("zmk_ble_clear_bonds()"); + + clear_profile_bond(active_profile); update_advertising(); }; @@ -227,10 +229,7 @@ void zmk_ble_clear_all_bonds(void) { // Unpair all profiles for (uint8_t i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { - if (bt_addr_le_cmp(&profiles[i].peer, BT_ADDR_LE_ANY)) { - bt_unpair(BT_ID_DEFAULT, &profiles[i].peer); - set_profile_address(i, BT_ADDR_LE_ANY); - } + clear_profile_bond(i); } // Automatically switch to profile 0 From b813f34e346951e522ac5df1a423571ce25a8735 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Tue, 19 Dec 2023 15:02:13 +0900 Subject: [PATCH 0879/1130] fixup! bt: add BT_CLR_ALL behaviour --- app/src/ble.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/ble.c b/app/src/ble.c index 85f1e479568..bfbb951dc46 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -234,6 +234,7 @@ void zmk_ble_clear_all_bonds(void) { // Automatically switch to profile 0 zmk_ble_prof_select(0); + update_advertising(); }; int zmk_ble_active_profile_index(void) { return active_profile; } From 194a9790eb0026f8c84def0f9a62c18aa1677762 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Fri, 22 Dec 2023 13:53:29 +0900 Subject: [PATCH 0880/1130] fixup! use wider type for loop iterator --- app/src/ble.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index bfbb951dc46..fa7d3f55387 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -228,7 +228,7 @@ void zmk_ble_clear_all_bonds(void) { LOG_DBG("zmk_ble_clear_all_bonds()"); // Unpair all profiles - for (uint8_t i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { + for (int i = 0; i < ZMK_BLE_PROFILE_COUNT; i++) { clear_profile_bond(i); } From 7b9466c7dcac42b532c277524b619c642b449e45 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Fri, 22 Dec 2023 14:02:09 +0900 Subject: [PATCH 0881/1130] fixup! add documentation for BT_CLR_ALL --- docs/docs/behaviors/bluetooth.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 48ee1ed8aef..3e48ef505e4 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -10,7 +10,10 @@ between the keyboard and the host. By default, ZMK supports five "profiles" for computer/laptop/keyboard should receive the keyboard input; many of the commands here operate on those profiles. :::note Connection Management -When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or `BT_PRV` bindings, or by clearing an existing profile using `BT_CLR`. +When pairing to a host device ZMK saves bond information to the selected +profile. It will not replace this when you initiate pairing with another device. +To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or +`BT_PRV` bindings, or by clearing an existing profile using `BT_CLR` or `BT_CLR_ALL`. A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. @@ -35,13 +38,14 @@ This will allow you to reference the actions defined in this header such as `BT_ Here is a table describing the command for each define: -| Define | Action | -| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `BT_CLR` | Clear bond information between the keyboard and host for the selected profile. | -| `BT_NXT` | Switch to the next profile, cycling through to the first one when the end is reached. | -| `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | -| `BT_SEL` | Select the 0-indexed profile by number; must include a number as an argument in the keymap to work correctly, e.g. `BT_SEL 0`. | -| `BT_DISC` | Disconnect from the 0-indexed profile by number, if it's currently connected and inactive; must include a number as an argument in the keymap to work correctly, e.g. `BT_DISC 0`. | +| Define | Action | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `BT_CLR` | Clear bond information between the keyboard and host for the selected profile. | +| `BT_CLR_ALL` | Clear bond information between the keyboard and host for all profiles. | +| `BT_NXT` | Switch to the next profile, cycling through to the first one when the end is reached. | +| `BT_PRV` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | +| `BT_SEL` | Select the 0-indexed profile by number; must include a number as an argument in the keymap to work correctly, e.g. `BT_SEL 0`. | +| `BT_DISC` | Disconnect from the 0-indexed profile by number, if it's currently connected and inactive; must include a number as an argument in the keymap to work correctly, e.g. `BT_DISC 0`. | :::note Selected profile persistence The profile that is selected by the `BT_SEL`/`BT_PRV`/`BT_NXT` actions will be saved to flash storage and hence persist across restarts and firmware flashes. From 7d1c1ae8fda1cf85c85fd03886508268d895b899 Mon Sep 17 00:00:00 2001 From: Chris Andreae Date: Sat, 23 Dec 2023 00:42:12 +0900 Subject: [PATCH 0882/1130] fixup! docs Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/bluetooth.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 3e48ef505e4..41ec0ab16d7 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -12,8 +12,8 @@ computer/laptop/keyboard should receive the keyboard input; many of the commands :::note Connection Management When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. -To pair with a new device select an unused profile with `BT_SEL`, `BT_NXT` or -`BT_PRV` bindings, or by clearing an existing profile using `BT_CLR` or `BT_CLR_ALL`. +To pair with a new device, select a profile that doesn't have a pairing with `BT_SEL`, `BT_NXT` or +`BT_PRV` bindings, or clear an already paired profile using `BT_CLR` or `BT_CLR_ALL`. A ZMK device may show as "connected" on multiple hosts at the same time. This is working as intended, and only the host associated with the active profile will receive keystrokes. From bc7b4b56bd66c61d8e90cd25e64b2309e329f833 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 4 Jan 2024 00:22:04 +0000 Subject: [PATCH 0883/1130] fix(ble): Disable Auto Sec Req again. * Auto security request actually makes macOS worse, so disable it, and remove our early request in favor of using GATT enforcement to ensure connections are secured. --- app/Kconfig | 1 - app/src/ble.c | 6 ------ 2 files changed, 7 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index a5fa54f614b..a737ba731ce 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -144,7 +144,6 @@ if ZMK_BLE config ZMK_BLE_EXPERIMENTAL_CONN bool "Experimental BLE connection changes" - imply BT_GATT_AUTO_SEC_REQ help Enables a combination of settings that are planned to be default in future versions of ZMK to improve connection stability. This includes changes to timing on BLE pairing initation, diff --git a/app/src/ble.c b/app/src/ble.c index fa7d3f55387..e0f34307672 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -460,12 +460,6 @@ static void connected(struct bt_conn *conn, uint8_t err) { LOG_DBG("Connected %s", addr); -#if !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) - if (bt_conn_set_security(conn, BT_SECURITY_L2)) { - LOG_ERR("Failed to set security"); - } -#endif // !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) - update_advertising(); if (is_conn_active_profile(conn)) { From 69f962fab2754c688c469e46644b8271686b372b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 3 Jan 2024 16:55:26 -0800 Subject: [PATCH 0884/1130] feat(ble): Add security related tests. * Add security related tests to verify behavior when trying to read a GATT characteristic from our peripheral with and without client auto security request/retry. --- app/run-ble-test.sh | 8 ++ app/src/split/bluetooth/central.c | 8 -- app/tests/ble/central/src/main.c | 76 ++++++++++++++++--- .../centrals.txt | 1 + .../events.patterns | 1 + .../nrf52_bsim.conf | 0 .../nrf52_bsim.keymap | 24 ++++++ .../snapshot.log | 13 ++++ .../centrals.txt | 1 + .../events.patterns | 1 + .../nrf52_bsim.conf | 0 .../nrf52_bsim.keymap | 24 ++++++ .../snapshot.log | 10 +++ 13 files changed, 148 insertions(+), 19 deletions(-) create mode 100644 app/tests/ble/security/read-hid-after-connect-with-auto-sec/centrals.txt create mode 100644 app/tests/ble/security/read-hid-after-connect-with-auto-sec/events.patterns create mode 100644 app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.conf create mode 100644 app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.keymap create mode 100644 app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log create mode 100644 app/tests/ble/security/read-hid-after-connect-without-auto-sec/centrals.txt create mode 100644 app/tests/ble/security/read-hid-after-connect-without-auto-sec/events.patterns create mode 100644 app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.conf create mode 100644 app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.keymap create mode 100644 app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log diff --git a/app/run-ble-test.sh b/app/run-ble-test.sh index 9984caa14e2..226bd385c67 100755 --- a/app/run-ble-test.sh +++ b/app/run-ble-test.sh @@ -34,6 +34,14 @@ if [ -z "$BLE_TESTS_NO_CENTRAL_BUILD" ]; then fi cp build/tests/ble/private_central/zephyr/zephyr.exe "${BSIM_OUT_PATH}/bin/ble_test_private_central.exe" + + if ! [ -e build/tests/ble/no_auto_sec_central ]; then + west build -d build/tests/ble/no_auto_sec_central -b nrf52_bsim tests/ble/central -- -DCONFIG_BT_ATT_RETRY_ON_SEC_ERR=n > /dev/null 2>&1 + else + west build -d build/tests/ble/no_auto_sec_central + fi + + cp build/tests/ble/no_auto_sec_central/zephyr/zephyr.exe "${BSIM_OUT_PATH}/bin/ble_test_no_auto_sec_central.exe" fi testcases=$(find $path -name nrf52_bsim.keymap -exec dirname \{\} \;) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index a405d0650db..e586155760d 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -522,14 +522,6 @@ static void split_central_process_connection(struct bt_conn *conn) { LOG_DBG("Current security for connection: %d", bt_conn_get_security(conn)); -#if !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) - err = bt_conn_set_security(conn, BT_SECURITY_L2); - if (err) { - LOG_ERR("Failed to set security (reason %d)", err); - return; - } -#endif // !IS_ENABLED(CONFIG_BT_GATT_AUTO_SEC_REQ) - struct peripheral_slot *slot = peripheral_slot_for_conn(conn); if (slot == NULL) { LOG_ERR("No peripheral state found for connection"); diff --git a/app/tests/ble/central/src/main.c b/app/tests/ble/central/src/main.c index 67521e60da0..1e2c786e33d 100644 --- a/app/tests/ble/central/src/main.c +++ b/app/tests/ble/central/src/main.c @@ -40,6 +40,10 @@ LOG_MODULE_REGISTER(ble_central, 4); static bool disconnect_and_reconnect = false; static bool clear_bond_on_disconnect = false; static bool halt_after_bonding = false; +static bool read_hid_report_on_connect = false; +static bool skip_set_security_on_connect = false; +static bool skip_discovery_on_connect = false; +static bool read_directly_on_discovery = false; static int32_t wait_on_start = 0; static void ble_central_native_posix_options(void) { @@ -59,6 +63,26 @@ static void ble_central_native_posix_options(void) { .type = 'b', .dest = (void *)&clear_bond_on_disconnect, .descript = "Clear bonds on disconnect and reconnect"}, + {.is_switch = true, + .option = "skip_set_security_on_connect", + .type = 'b', + .dest = (void *)&skip_set_security_on_connect, + .descript = "Skip set security level after connecting"}, + {.is_switch = true, + .option = "read_hid_report_on_connect", + .type = 'b', + .dest = (void *)&read_hid_report_on_connect, + .descript = "Read the peripheral HID report after connecting"}, + {.is_switch = true, + .option = "skip_discovery_on_connect", + .type = 'b', + .dest = (void *)&skip_discovery_on_connect, + .descript = "Skip GATT characteristic discovery after connecting"}, + {.is_switch = true, + .option = "read_directly_on_discovery", + .type = 'b', + .dest = (void *)&read_directly_on_discovery, + .descript = "Read HIDS report after GATT characteristic discovery"}, {.option = "wait_on_start", .name = "milliseconds", .type = 'u', @@ -94,6 +118,16 @@ static uint8_t notify_func(struct bt_conn *conn, struct bt_gatt_subscribe_params return BT_GATT_ITER_CONTINUE; } +static struct bt_gatt_read_params read_params; +static const struct bt_uuid_16 hids_uuid = BT_UUID_INIT_16(BT_UUID_HIDS_REPORT_VAL); + +static uint8_t read_cb(struct bt_conn *conn, uint8_t err, struct bt_gatt_read_params *params, + const void *data, uint16_t length) { + LOG_DBG("Read err: %d, length %d", err, length); + + return BT_GATT_ITER_CONTINUE; +} + static uint8_t discover_func(struct bt_conn *conn, const struct bt_gatt_attr *attr, struct bt_gatt_discover_params *params) { int err; @@ -117,15 +151,24 @@ static uint8_t discover_func(struct bt_conn *conn, const struct bt_gatt_attr *at LOG_DBG("[Discover failed] (err %d)", err); } } else if (!bt_uuid_cmp(discover_params.uuid, BT_UUID_HIDS_REPORT)) { - memcpy(&uuid, BT_UUID_GATT_CCC, sizeof(uuid)); - discover_params.uuid = &uuid.uuid; - discover_params.start_handle = attr->handle + 2; - discover_params.type = BT_GATT_DISCOVER_DESCRIPTOR; - subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + if (read_directly_on_discovery) { + read_params.single.handle = bt_gatt_attr_value_handle(attr); + read_params.single.offset = 0; + read_params.handle_count = 1; + read_params.func = read_cb; - err = bt_gatt_discover(conn, &discover_params); - if (err) { - LOG_DBG("[Discover failed] (err %d)", err); + bt_gatt_read(conn, &read_params); + } else { + memcpy(&uuid, BT_UUID_GATT_CCC, sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.start_handle = attr->handle + 2; + discover_params.type = BT_GATT_DISCOVER_DESCRIPTOR; + subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_DBG("[Discover failed] (err %d)", err); + } } } else { subscribe_params.notify = notify_func; @@ -278,12 +321,23 @@ static void connected(struct bt_conn *conn, uint8_t conn_err) { LOG_DBG("[Connected]: %s", addr); if (conn == default_conn) { - if (bt_conn_get_security(conn) >= BT_SECURITY_L2) { + if (bt_conn_get_security(conn) >= BT_SECURITY_L2 && !skip_discovery_on_connect) { + LOG_DBG("[Discovering characteristics for the connection]"); discover_conn(conn); - } else { + } else if (!skip_set_security_on_connect) { LOG_DBG("[Setting the security for the connection]"); bt_conn_set_security(conn, BT_SECURITY_L2); } + + if (read_hid_report_on_connect) { + read_params.func = read_cb; + read_params.handle_count = 0; + read_params.by_uuid.start_handle = 0x0001; + read_params.by_uuid.end_handle = 0xFFFF; + read_params.by_uuid.uuid = &hids_uuid.uuid; + + bt_gatt_read(conn, &read_params); + } } } @@ -313,7 +367,7 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_ first_connect = false; if (do_disconnect) { k_work_reschedule(&disconnect_work, K_MSEC(500)); - } else { + } else if (!skip_discovery_on_connect) { discover_conn(conn); } } diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/centrals.txt b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/centrals.txt new file mode 100644 index 00000000000..a660de60c75 --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/centrals.txt @@ -0,0 +1 @@ +./ble_test_central.exe -d=2 -skip_set_security_on_connect -read_hid_report_on_connect -skip_discovery_on_connect diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/events.patterns b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/events.patterns new file mode 100644 index 00000000000..cca5a2d4ed3 --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/events.patterns @@ -0,0 +1 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}//p diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.conf b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.keymap b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.keymap new file mode 100644 index 00000000000..7c67425e6a2 --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/nrf52_bsim.keymap @@ -0,0 +1,24 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log new file mode 100644 index 00000000000..1ec7918f17e --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log @@ -0,0 +1,13 @@ + bt_id: No static addresses stored in controller + ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: pairing_complete: Pairing complete + ble_central: read_cb: Read err: 0, length 8 + ble_central: read_cb: Read err: 0, length 12 + ble_central: read_cb: Read err: 10, length 0 diff --git a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/centrals.txt b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/centrals.txt new file mode 100644 index 00000000000..3b20ace116a --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/centrals.txt @@ -0,0 +1 @@ +./ble_test_no_auto_sec_central.exe -d=2 -skip_set_security_on_connect -read_hid_report_on_connect -skip_discovery_on_connect diff --git a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/events.patterns b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/events.patterns new file mode 100644 index 00000000000..cca5a2d4ed3 --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/events.patterns @@ -0,0 +1 @@ +s/^d_02: @[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] .{19}//p diff --git a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.conf b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.conf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.keymap b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.keymap new file mode 100644 index 00000000000..7c67425e6a2 --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/nrf52_bsim.keymap @@ -0,0 +1,24 @@ +#include +#include +#include +#include + +&kscan { + events = + ; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp A &kp B + &bt BT_SEL 0 &bt BT_SEL 1>; + }; + }; +}; diff --git a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log new file mode 100644 index 00000000000..fc32198c14b --- /dev/null +++ b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log @@ -0,0 +1,10 @@ + bt_id: No static addresses stored in controller + ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: start_scan: [Scanning successfully started] + ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: eir_found: [AD]: 9 data_len 0 + ble_central: eir_found: [AD]: 25 data_len 2 + ble_central: eir_found: [AD]: 1 data_len 1 + ble_central: eir_found: [AD]: 2 data_len 4 + ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: read_cb: Read err: 15, length 0 From 74875314f8fde8c09d32866d57917fc32496f8e6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 4 Jan 2024 22:45:03 -0800 Subject: [PATCH 0885/1130] feat(ble): Request encryption if notifying fails * If attempting to notify and getting an EPERM return value, request upgrading the security of the connection at that moment, since it likely means we got a connection to a bonded host but the connection hasn't been upgraded to encrypted yet. --- app/src/hog.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/hog.c b/app/src/hog.c index 514c7be5ee1..b82f38f422a 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -258,8 +258,10 @@ void send_keyboard_report_callback(struct k_work *work) { }; int err = bt_gatt_notify_cb(conn, ¬ify_params); - if (err) { - LOG_ERR("Error notifying %d", err); + if (err == -EPERM) { + bt_conn_set_security(conn, BT_SECURITY_L2); + } else if (err) { + LOG_DBG("Error notifying %d", err); } bt_conn_unref(conn); @@ -308,7 +310,9 @@ void send_consumer_report_callback(struct k_work *work) { }; int err = bt_gatt_notify_cb(conn, ¬ify_params); - if (err) { + if (err == -EPERM) { + bt_conn_set_security(conn, BT_SECURITY_L2); + } else if (err) { LOG_DBG("Error notifying %d", err); } @@ -359,7 +363,9 @@ void send_mouse_report_callback(struct k_work *work) { }; int err = bt_gatt_notify_cb(conn, ¬ify_params); - if (err) { + if (err == -EPERM) { + bt_conn_set_security(conn, BT_SECURITY_L2); + } else if (err) { LOG_DBG("Error notifying %d", err); } @@ -380,9 +386,10 @@ int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { }; int err = bt_gatt_notify_cb(conn, ¬ify_params); - if (err) { + if (err == -EPERM) { + bt_conn_set_security(conn, BT_SECURITY_L2); + } else if (err) { LOG_DBG("Error notifying %d", err); - return err; } bt_conn_unref(conn); From 395ffaa790e396130c40c6d2e4842effa36d8f19 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Jan 2024 18:57:52 +0000 Subject: [PATCH 0886/1130] fix(ble): Properly send mouse HoG using worker. * Properly send mouse HoG reports using our worker to avoid thread issues. --- app/src/hog.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/app/src/hog.c b/app/src/hog.c index b82f38f422a..204609145c2 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -373,26 +373,25 @@ void send_mouse_report_callback(struct k_work *work) { } }; -int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { - struct bt_conn *conn = destination_connection(); - if (conn == NULL) { - return 1; - } +K_WORK_DEFINE(hog_mouse_work, send_mouse_report_callback); - struct bt_gatt_notify_params notify_params = { - .attr = &hog_svc.attrs[13], - .data = report, - .len = sizeof(*report), - }; - - int err = bt_gatt_notify_cb(conn, ¬ify_params); - if (err == -EPERM) { - bt_conn_set_security(conn, BT_SECURITY_L2); - } else if (err) { - LOG_DBG("Error notifying %d", err); +int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { + int err = k_msgq_put(&zmk_hog_mouse_msgq, report, K_MSEC(100)); + if (err) { + switch (err) { + case -EAGAIN: { + LOG_WRN("Consumer message queue full, popping first message and queueing again"); + struct zmk_hid_mouse_report_body discarded_report; + k_msgq_get(&zmk_hog_mouse_msgq, &discarded_report, K_NO_WAIT); + return zmk_hog_send_mouse_report(report); + } + default: + LOG_WRN("Failed to queue mouse report to send (%d)", err); + return err; + } } - bt_conn_unref(conn); + k_work_submit_to_queue(&hog_work_q, &hog_mouse_work); return 0; }; From cebf651d113c813a749fdcc0b75d76dcb6a2ef74 Mon Sep 17 00:00:00 2001 From: Leonardo Bispo <34199302+ldab@users.noreply.github.com> Date: Sat, 6 Jan 2024 01:00:32 +0100 Subject: [PATCH 0887/1130] fix(boards): include the right flash info in XIAO BLE overlay --- app/boards/seeeduino_xiao_ble.overlay | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index d2ffbe461cb..e0934691d84 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -31,5 +31,24 @@ }; &qspi { - status = "disabled"; + status = "okay"; + pinctrl-0 = <&qspi_default>; + pinctrl-1 = <&qspi_sleep>; + pinctrl-names = "default", "sleep"; + p25q16h: p25q16h@0 { + compatible = "nordic,qspi-nor"; + reg = <0>; + sck-frequency = <104000000>; + quad-enable-requirements = "S2B1v1"; + jedec-id = [85 60 15]; + sfdp-bfp = [ + e5 20 f1 ff ff ff ff 00 44 eb 08 6b 08 3b 80 bb + ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 0f 52 + 10 d8 08 81 + ]; + size = <16777216>; + has-dpd; + t-enter-dpd = <3000>; + t-exit-dpd = <8000>; + }; }; From 12bc8b0402448b9e31339b7ba2d5a2f3dc33f11c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Jan 2024 15:37:11 -0800 Subject: [PATCH 0888/1130] fix: Fix function signatures for WPM. * Recent refactor accidentally used the wrong signatures for a few WPM function definitions. --- app/src/wpm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/wpm.c b/app/src/wpm.c index 6594b25ad19..efb5a5d343e 100644 --- a/app/src/wpm.c +++ b/app/src/wpm.c @@ -68,11 +68,11 @@ void wpm_work_handler(struct k_work *work) { K_WORK_DEFINE(wpm_work, wpm_work_handler); -void wpm_expiry_function(void) { k_work_submit(&wpm_work); } +void wpm_expiry_function(struct k_timer *_timer) { k_work_submit(&wpm_work); } K_TIMER_DEFINE(wpm_timer, wpm_expiry_function, NULL); -int wpm_init(void) { +int wpm_init(const struct device *_device) { wpm_state = 0; wpm_update_counter = 0; k_timer_start(&wpm_timer, K_SECONDS(WPM_UPDATE_INTERVAL_SECONDS), From 7652fbeb6b6b9e742026bebab9827f1843aca43a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 6 Jan 2024 08:46:58 +0000 Subject: [PATCH 0889/1130] fix(split): Split peripherals should auto sec req still. * Ensure split peripherals have `BT_GATT_AUTO_SEC_REQ` enabled so that reconnects to centrals are automatically encrypted. --- app/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index a737ba731ce..4b52052aa88 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -217,7 +217,7 @@ config BT_GATT_NOTIFY_MULTIPLE default n config BT_GATT_AUTO_SEC_REQ - default n + default (ZMK_SPLIT_BLE && !ZMK_SPLIT_ROLE_CENTRAL) config BT_DEVICE_APPEARANCE default 961 From 6bf487070410e95aa2689c12cbc2d8ca20af5a39 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Sat, 6 Jan 2024 15:03:12 -0500 Subject: [PATCH 0890/1130] fix(battery): prevent bus fault when battery does not exist zmk_battery_start_reporting() may be called from battery_event_listener(), which will result in a bus fault when attempting to read a battery that does not exist such as on a dongle. --- app/src/battery.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/battery.c b/app/src/battery.c index d5a5e3f137d..bf50bf0b6db 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -87,7 +87,9 @@ static void zmk_battery_timer(struct k_timer *timer) { K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL); static void zmk_battery_start_reporting() { - k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL)); + if (device_is_ready(battery)) { + k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL)); + } } static int zmk_battery_init(const struct device *_arg) { From db9ab30335e4e5f5e935ce08f52014202950f489 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 6 Jan 2024 01:41:58 -0800 Subject: [PATCH 0891/1130] fix(boards): Fix up EXT_POWER naming for adv360pro; * Restore setting loading by preserving old device name for the external power node. --- app/boards/arm/adv360pro/adv360pro.dtsi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/boards/arm/adv360pro/adv360pro.dtsi b/app/boards/arm/adv360pro/adv360pro.dtsi index c837e518458..1bffb81c6bb 100644 --- a/app/boards/arm/adv360pro/adv360pro.dtsi +++ b/app/boards/arm/adv360pro/adv360pro.dtsi @@ -44,7 +44,9 @@ >; }; - ext-power { + + // Node name must match original "EXT_POWER" label to preserve user settings. + EXT_POWER { compatible = "zmk,ext-power-generic"; control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; }; From 2829185a94802ad7d26353fa166df84866976c9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 07:42:07 +0000 Subject: [PATCH 0892/1130] chore(deps): bump follow-redirects from 1.15.2 to 1.15.4 in /docs Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.4. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.4) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 6e5973726bf..53decd66d93 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -7551,9 +7551,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", @@ -22036,9 +22036,9 @@ } }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" }, "for-each": { "version": "0.3.3", From 466cf920296d74dc9f22ef02fbccb43024f14c81 Mon Sep 17 00:00:00 2001 From: typorian Date: Fri, 12 Jan 2024 20:02:47 +0100 Subject: [PATCH 0893/1130] fix(docs): Document `CONFIG_ZMK_USB_BOOT` --- docs/docs/config/system.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index b10f184d40a..f45ee43b61a 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -69,8 +69,15 @@ Exactly zero or one of the following options may be set to `y`. The first is use | `CONFIG_USB_DEVICE_MANUFACTURER` | string | The manufacturer name advertised to USB | `"ZMK Project"` | | `CONFIG_USB_HID_POLL_INTERVAL_MS` | int | USB polling interval in milliseconds | 1 | | `CONFIG_ZMK_USB` | bool | Enable ZMK as a USB keyboard | | +| `CONFIG_ZMK_USB_BOOT` | bool | Enable USB Boot protocol support | n | | `CONFIG_ZMK_USB_INIT_PRIORITY` | int | USB init priority | 50 | +:::note USB Boot protocol support + +By default USB Boot protocol support is disabled, however certain situations such as the input of Bitlocker pins or FileVault passwords may require it to be enabled. + +::: + ### Bluetooth See [Zephyr's Bluetooth stack architecture documentation](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-arch.html) From 50e473276f2e8d681c776fdf2fe6c6d2ac9a2ce7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 9 Jan 2024 00:29:36 +0000 Subject: [PATCH 0894/1130] chore(ci): Split build and upload into separate steps * Treat build and upload as distinct steps during a build, and don't fail a PR if only the upload portion fails. --- .github/workflows/build.yml | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a7d0560d042..3fcaee26ee7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,13 +54,12 @@ jobs: node-version: "14.x" - name: Install @actions/artifact run: npm install @actions/artifact - - name: Build and upload artifacts + - name: Build uses: actions/github-script@v7 id: boards-list with: script: | const fs = require('fs'); - const {default: artifact} = require('@actions/artifact'); const execSync = require('child_process').execSync; @@ -70,10 +69,39 @@ jobs: for (const shieldArgs of buildShieldArgs) { try { + console.log(`::group::${{ matrix.board}} ${shieldArgs.shield} Build`) + const output = execSync(`west build -s app -p -b ${{ matrix.board }} -- ${shieldArgs.shield ? '-DSHIELD="' + shieldArgs.shield + '"' : ''} ${shieldArgs['cmake-args'] || ''}`); - console.log(`::group::${{ matrix.board}} ${shieldArgs.shield} Build`) console.log(output.toString()); + } catch (e) { + console.error(`::error::Failed to build ${{ matrix.board }} ${shieldArgs.shield} ${shieldArgs['cmake-args']}`); + console.error(e); + error = true; + } finally { + console.log('::endgroup::'); + } + } + + if (error) { + throw new Error('Failed to build one or more configurations'); + } + - name: Upload artifacts + uses: actions/github-script@v7 + continue-on-error: github.event_name == 'pull_request' + id: boards-upload + with: + script: | + const fs = require('fs'); + const {default: artifact} = require('@actions/artifact'); + + const buildShieldArgs = JSON.parse(`${{ matrix.shieldArgs }}`); + + let error = false; + + for (const shieldArgs of buildShieldArgs) { + try { + console.log(`::group::${{ matrix.board}} ${shieldArgs.shield} Upload`) const fileExtensions = ["hex", "uf2"]; @@ -91,7 +119,7 @@ jobs: await artifact.uploadArtifact(artifactName, files, rootDirectory, options); } catch (e) { - console.error(`::error::Failed to build or upload ${{ matrix.board }} ${shieldArgs.shield} ${shieldArgs['cmake-args']}`); + console.error(`::error::Failed to upload ${{ matrix.board }} ${shieldArgs.shield} ${shieldArgs['cmake-args']}`); console.error(e); error = true; } finally { From 33209dee1d3b0feb6486692704a1a1ce0f073c68 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 23 Mar 2023 08:56:02 +0000 Subject: [PATCH 0895/1130] refactor(core): Move to stack allocated events. * Move to local/stack allocated event API that doesn't require dynamic allocation/freeing. * Disable heap, we no longer use alloc/free unless using LVGL. * Tons of refactors all over to account for the new event approach. --- app/Kconfig | 2 +- app/include/zmk/event_manager.h | 27 +++--- .../zmk/events/keycode_state_changed.h | 15 ++- app/include/zmk/events/layer_state_changed.h | 5 +- .../zmk/events/mouse_button_state_changed.h | 6 +- app/src/activity.c | 4 +- app/src/battery.c | 4 +- app/src/behaviors/behavior_hold_tap.c | 90 ++++++++++++------ app/src/behaviors/behavior_key_press.c | 4 +- app/src/behaviors/behavior_key_repeat.c | 4 +- app/src/behaviors/behavior_key_toggle.c | 2 +- app/src/behaviors/behavior_mouse_key_press.c | 8 +- app/src/behaviors/behavior_sticky_key.c | 4 +- app/src/ble.c | 4 +- app/src/combo.c | 92 +++++++++---------- app/src/endpoints.c | 3 +- app/src/event_manager.c | 10 +- app/src/keymap.c | 8 +- app/src/kscan.c | 4 +- app/src/sensors.c | 4 +- app/src/split/bluetooth/central.c | 4 +- app/src/split/bluetooth/peripheral.c | 8 +- app/src/usb.c | 4 +- app/src/wpm.c | 3 +- 24 files changed, 172 insertions(+), 147 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 4b52052aa88..54b4c0bf24e 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -595,7 +595,7 @@ endmenu endmenu config HEAP_MEM_POOL_SIZE - default 8192 + default 8192 if ZMK_DISPLAY config KERNEL_BIN_NAME default "zmk" diff --git a/app/include/zmk/event_manager.h b/app/include/zmk/event_manager.h index aa9942ea366..489147443a5 100644 --- a/app/include/zmk/event_manager.h +++ b/app/include/zmk/event_manager.h @@ -38,7 +38,8 @@ struct zmk_event_subscription { zmk_event_t header; \ struct event_type data; \ }; \ - struct event_type##_event *new_##event_type(struct event_type); \ + struct event_type##_event copy_raised_##event_type(const struct event_type *ev); \ + int raise_##event_type(struct event_type); \ struct event_type *as_##event_type(const zmk_event_t *eh); \ extern const struct zmk_event_type zmk_event_##event_type; @@ -46,12 +47,14 @@ struct zmk_event_subscription { const struct zmk_event_type zmk_event_##event_type = {.name = STRINGIFY(event_type)}; \ const struct zmk_event_type *zmk_event_ref_##event_type __used \ __attribute__((__section__(".event_type"))) = &zmk_event_##event_type; \ - struct event_type##_event *new_##event_type(struct event_type data) { \ - struct event_type##_event *ev = \ - (struct event_type##_event *)k_malloc(sizeof(struct event_type##_event)); \ - ev->header.event = &zmk_event_##event_type; \ - ev->data = data; \ - return ev; \ + struct event_type##_event copy_raised_##event_type(const struct event_type *ev) { \ + struct event_type##_event *outer = CONTAINER_OF(ev, struct event_type##_event, data); \ + return *outer; \ + }; \ + int raise_##event_type(struct event_type data) { \ + struct event_type##_event ev = {.data = data}; \ + ev.header.event = &zmk_event_##event_type; \ + return ZMK_EVENT_RAISE(ev); \ }; \ struct event_type *as_##event_type(const zmk_event_t *eh) { \ return (eh->event == &zmk_event_##event_type) ? &((struct event_type##_event *)eh)->data \ @@ -68,17 +71,15 @@ struct zmk_event_subscription { .listener = &zmk_listener_##mod, \ }; -#define ZMK_EVENT_RAISE(ev) zmk_event_manager_raise((zmk_event_t *)ev); +#define ZMK_EVENT_RAISE(ev) zmk_event_manager_raise((zmk_event_t *)&ev); #define ZMK_EVENT_RAISE_AFTER(ev, mod) \ - zmk_event_manager_raise_after((zmk_event_t *)ev, &zmk_listener_##mod); + zmk_event_manager_raise_after((zmk_event_t *)&ev, &zmk_listener_##mod); #define ZMK_EVENT_RAISE_AT(ev, mod) \ - zmk_event_manager_raise_at((zmk_event_t *)ev, &zmk_listener_##mod); - -#define ZMK_EVENT_RELEASE(ev) zmk_event_manager_release((zmk_event_t *)ev); + zmk_event_manager_raise_at((zmk_event_t *)&ev, &zmk_listener_##mod); -#define ZMK_EVENT_FREE(ev) k_free((void *)ev); +#define ZMK_EVENT_RELEASE(ev) zmk_event_manager_release((zmk_event_t *)&ev); int zmk_event_manager_raise(zmk_event_t *event); int zmk_event_manager_raise_after(zmk_event_t *event, const struct zmk_listener *listener); diff --git a/app/include/zmk/events/keycode_state_changed.h b/app/include/zmk/events/keycode_state_changed.h index c3a3ed30d03..20a46351552 100644 --- a/app/include/zmk/events/keycode_state_changed.h +++ b/app/include/zmk/events/keycode_state_changed.h @@ -21,7 +21,7 @@ struct zmk_keycode_state_changed { ZMK_EVENT_DECLARE(zmk_keycode_state_changed); -static inline struct zmk_keycode_state_changed_event * +static inline struct zmk_keycode_state_changed zmk_keycode_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { uint16_t page = ZMK_HID_USAGE_PAGE(encoded); uint16_t id = ZMK_HID_USAGE_ID(encoded); @@ -38,11 +38,10 @@ zmk_keycode_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t t implicit_modifiers = SELECT_MODS(encoded); } - return new_zmk_keycode_state_changed( - (struct zmk_keycode_state_changed){.usage_page = page, - .keycode = id, - .implicit_modifiers = implicit_modifiers, - .explicit_modifiers = explicit_modifiers, - .state = pressed, - .timestamp = timestamp}); + return (struct zmk_keycode_state_changed){.usage_page = page, + .keycode = id, + .implicit_modifiers = implicit_modifiers, + .explicit_modifiers = explicit_modifiers, + .state = pressed, + .timestamp = timestamp}; } diff --git a/app/include/zmk/events/layer_state_changed.h b/app/include/zmk/events/layer_state_changed.h index 405d1365b7a..0d66853ecae 100644 --- a/app/include/zmk/events/layer_state_changed.h +++ b/app/include/zmk/events/layer_state_changed.h @@ -17,8 +17,7 @@ struct zmk_layer_state_changed { ZMK_EVENT_DECLARE(zmk_layer_state_changed); -static inline struct zmk_layer_state_changed_event *create_layer_state_changed(uint8_t layer, - bool state) { - return new_zmk_layer_state_changed((struct zmk_layer_state_changed){ +static inline int raise_layer_state_changed(uint8_t layer, bool state) { + return raise_zmk_layer_state_changed((struct zmk_layer_state_changed){ .layer = layer, .state = state, .timestamp = k_uptime_get()}); } diff --git a/app/include/zmk/events/mouse_button_state_changed.h b/app/include/zmk/events/mouse_button_state_changed.h index 9382789e56f..ff3ccecd714 100644 --- a/app/include/zmk/events/mouse_button_state_changed.h +++ b/app/include/zmk/events/mouse_button_state_changed.h @@ -19,8 +19,8 @@ struct zmk_mouse_button_state_changed { ZMK_EVENT_DECLARE(zmk_mouse_button_state_changed); -static inline struct zmk_mouse_button_state_changed_event * -zmk_mouse_button_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { - return new_zmk_mouse_button_state_changed((struct zmk_mouse_button_state_changed){ +static inline int raise_zmk_mouse_button_state_changed_from_encoded(uint32_t encoded, bool pressed, + int64_t timestamp) { + return raise_zmk_mouse_button_state_changed((struct zmk_mouse_button_state_changed){ .buttons = ZMK_HID_USAGE_ID(encoded), .state = pressed, .timestamp = timestamp}); } diff --git a/app/src/activity.c b/app/src/activity.c index f713dde59cb..58b11b2112a 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -43,8 +43,8 @@ static uint32_t activity_last_uptime; #endif int raise_event(void) { - return ZMK_EVENT_RAISE(new_zmk_activity_state_changed( - (struct zmk_activity_state_changed){.state = activity_state})); + return raise_zmk_activity_state_changed( + (struct zmk_activity_state_changed){.state = activity_state}); } int set_state(enum zmk_activity_state state) { diff --git a/app/src/battery.c b/app/src/battery.c index bf50bf0b6db..69eee2f4465 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -63,8 +63,8 @@ static int zmk_battery_update(const struct device *battery) { return rc; } #endif - rc = ZMK_EVENT_RAISE(new_zmk_battery_state_changed( - (struct zmk_battery_state_changed){.state_of_charge = last_state_of_charge})); + rc = raise_zmk_battery_state_changed( + (struct zmk_battery_state_changed){.state_of_charge = last_state_of_charge}); } return rc; diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index ea0448a4fd5..146d5cc5156 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -88,7 +88,24 @@ struct active_hold_tap { struct active_hold_tap *undecided_hold_tap = NULL; struct active_hold_tap active_hold_taps[ZMK_BHV_HOLD_TAP_MAX_HELD] = {}; // We capture most position_state_changed events and some modifiers_state_changed events. -const zmk_event_t *captured_events[ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS] = {}; + +enum captured_event_tag { + ET_NONE, + ET_POS_CHANGED, + ET_CODE_CHANGED, +}; + +union captured_event_data { + struct zmk_position_state_changed_event position; + struct zmk_keycode_state_changed_event keycode; +}; + +struct captured_event { + enum captured_event_tag tag; + union captured_event_data data; +}; + +struct captured_event captured_events[ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS] = {}; // Keep track of which key was tapped most recently for the standard, if it is a hold-tap // a position, will be given, if not it will just be INT32_MIN @@ -122,33 +139,32 @@ static bool is_quick_tap(struct active_hold_tap *hold_tap) { } } -static int capture_event(const zmk_event_t *event) { +static int capture_event(struct captured_event *data) { for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { - if (captured_events[i] == NULL) { - captured_events[i] = event; + if (captured_events[i].tag == ET_NONE) { + captured_events[i] = *data; return 0; } } return -ENOMEM; } -static struct zmk_position_state_changed *find_captured_keydown_event(uint32_t position) { - struct zmk_position_state_changed *last_match = NULL; +static bool have_captured_keydown_event(uint32_t position) { for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { - const zmk_event_t *eh = captured_events[i]; - if (eh == NULL) { - return last_match; + struct captured_event *ev = &captured_events[i]; + if (ev->tag == ET_NONE) { + return false; } - struct zmk_position_state_changed *position_event = as_zmk_position_state_changed(eh); - if (position_event == NULL) { + + if (ev->tag != ET_POS_CHANGED) { continue; } - if (position_event->position == position && position_event->state) { - last_match = position_event; + if (ev->data.position.data.position == position && ev->data.position.data.state) { + return true; } } - return last_match; + return false; } const struct zmk_listener zmk_listener_behavior_hold_tap; @@ -184,25 +200,35 @@ static void release_captured_events() { // [k1_down, k1_up, null, null, null, ...] // now mt2 will start releasing it's own captured positions. for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { - const zmk_event_t *captured_event = captured_events[i]; - if (captured_event == NULL) { + struct captured_event *captured_event = &captured_events[i]; + enum captured_event_tag tag = captured_event->tag; + + if (tag == ET_NONE) { return; } - captured_events[i] = NULL; + + captured_events[i].tag = ET_NONE; if (undecided_hold_tap != NULL) { k_msleep(10); } - struct zmk_position_state_changed *position_event; - struct zmk_keycode_state_changed *modifier_event; - if ((position_event = as_zmk_position_state_changed(captured_event)) != NULL) { - LOG_DBG("Releasing key position event for position %d %s", position_event->position, - (position_event->state ? "pressed" : "released")); - } else if ((modifier_event = as_zmk_keycode_state_changed(captured_event)) != NULL) { - LOG_DBG("Releasing mods changed event 0x%02X %s", modifier_event->keycode, - (modifier_event->state ? "pressed" : "released")); + switch (tag) { + case ET_CODE_CHANGED: + LOG_DBG("Releasing mods changed event 0x%02X %s", + captured_event->data.keycode.data.keycode, + (captured_event->data.keycode.data.state ? "pressed" : "released")); + ZMK_EVENT_RAISE_AT(captured_event->data.keycode, behavior_hold_tap); + break; + case ET_POS_CHANGED: + LOG_DBG("Releasing key position event for position %d %s", + captured_event->data.position.data.position, + (captured_event->data.position.data.state ? "pressed" : "released")); + ZMK_EVENT_RAISE_AT(captured_event->data.position, behavior_hold_tap); + break; + default: + LOG_ERR("Unhandled captured event type"); + break; } - ZMK_EVENT_RAISE_AT(captured_event, behavior_hold_tap); } } @@ -622,7 +648,7 @@ static int position_state_changed_listener(const zmk_event_t *eh) { return ZMK_EV_EVENT_BUBBLE; } - if (!ev->state && find_captured_keydown_event(ev->position) == NULL) { + if (!ev->state && !have_captured_keydown_event(ev->position)) { // no keydown event has been captured, let it bubble. // we'll catch modifiers later in modifier_state_changed_listener LOG_DBG("%d bubbling %d %s event", undecided_hold_tap->position, ev->position, @@ -632,7 +658,11 @@ static int position_state_changed_listener(const zmk_event_t *eh) { LOG_DBG("%d capturing %d %s event", undecided_hold_tap->position, ev->position, ev->state ? "down" : "up"); - capture_event(eh); + struct captured_event capture = { + .tag = ET_POS_CHANGED, + .data = {.position = copy_raised_zmk_position_state_changed(ev)}, + }; + capture_event(&capture); decide_hold_tap(undecided_hold_tap, ev->state ? HT_OTHER_KEY_DOWN : HT_OTHER_KEY_UP); return ZMK_EV_EVENT_CAPTURED; } @@ -659,7 +689,9 @@ static int keycode_state_changed_listener(const zmk_event_t *eh) { // if a undecided_hold_tap is active. LOG_DBG("%d capturing 0x%02X %s event", undecided_hold_tap->position, ev->keycode, ev->state ? "down" : "up"); - capture_event(eh); + struct captured_event capture = { + .tag = ET_CODE_CHANGED, .data = {.keycode = copy_raised_zmk_keycode_state_changed(ev)}}; + capture_event(&capture); return ZMK_EV_EVENT_CAPTURED; } diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 5549b4b462b..f516122ed96 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -21,14 +21,14 @@ static int behavior_key_press_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); - return ZMK_EVENT_RAISE( + return raise_zmk_keycode_state_changed( zmk_keycode_state_changed_from_encoded(binding->param1, true, event.timestamp)); } static int on_keymap_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); - return ZMK_EVENT_RAISE( + return raise_zmk_keycode_state_changed( zmk_keycode_state_changed_from_encoded(binding->param1, false, event.timestamp)); } diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index 85377f3faf3..bf53c384d71 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -43,7 +43,7 @@ static int on_key_repeat_binding_pressed(struct zmk_behavior_binding *binding, sizeof(struct zmk_keycode_state_changed)); data->current_keycode_pressed.timestamp = k_uptime_get(); - ZMK_EVENT_RAISE(new_zmk_keycode_state_changed(data->current_keycode_pressed)); + raise_zmk_keycode_state_changed(data->current_keycode_pressed); return ZMK_BEHAVIOR_OPAQUE; } @@ -60,7 +60,7 @@ static int on_key_repeat_binding_released(struct zmk_behavior_binding *binding, data->current_keycode_pressed.timestamp = k_uptime_get(); data->current_keycode_pressed.state = false; - ZMK_EVENT_RAISE(new_zmk_keycode_state_changed(data->current_keycode_pressed)); + raise_zmk_keycode_state_changed(data->current_keycode_pressed); return ZMK_BEHAVIOR_OPAQUE; } diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index 0ab1bd02362..a4bfafb4047 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -23,7 +23,7 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); bool pressed = zmk_hid_is_pressed(binding->param1); - return ZMK_EVENT_RAISE( + return raise_zmk_keycode_state_changed( zmk_keycode_state_changed_from_encoded(binding->param1, !pressed, event.timestamp)); } diff --git a/app/src/behaviors/behavior_mouse_key_press.c b/app/src/behaviors/behavior_mouse_key_press.c index e79bb74771d..d4c392ac879 100644 --- a/app/src/behaviors/behavior_mouse_key_press.c +++ b/app/src/behaviors/behavior_mouse_key_press.c @@ -24,15 +24,15 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); - return ZMK_EVENT_RAISE( - zmk_mouse_button_state_changed_from_encoded(binding->param1, true, event.timestamp)); + return raise_zmk_mouse_button_state_changed_from_encoded(binding->param1, true, + event.timestamp); } static int on_keymap_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); - return ZMK_EVENT_RAISE( - zmk_mouse_button_state_changed_from_encoded(binding->param1, false, event.timestamp)); + return raise_zmk_mouse_button_state_changed_from_encoded(binding->param1, false, + event.timestamp); } static const struct behavior_driver_api behavior_mouse_key_press_driver_api = { diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 67f7728628e..86a0783ef7a 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -236,7 +236,9 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { if (sticky_key->config->quick_release) { // immediately release the sticky key after the key press is handled. if (!event_reraised) { - ZMK_EVENT_RAISE_AFTER(eh, behavior_sticky_key); + struct zmk_keycode_state_changed_event dupe_ev; + memcpy(&dupe_ev, eh, sizeof(struct zmk_keycode_state_changed_event)); + ZMK_EVENT_RAISE_AFTER(dupe_ev, behavior_sticky_key); event_reraised = true; } release_sticky_key_behavior(sticky_key, ev_copy.timestamp); diff --git a/app/src/ble.c b/app/src/ble.c index e0f34307672..c8509308275 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -83,8 +83,8 @@ static bt_addr_le_t peripheral_addrs[ZMK_SPLIT_BLE_PERIPHERAL_COUNT]; #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ static void raise_profile_changed_event(void) { - ZMK_EVENT_RAISE(new_zmk_ble_active_profile_changed((struct zmk_ble_active_profile_changed){ - .index = active_profile, .profile = &profiles[active_profile]})); + raise_zmk_ble_active_profile_changed((struct zmk_ble_active_profile_changed){ + .index = active_profile, .profile = &profiles[active_profile]}); } static void raise_profile_changed_event_callback(struct k_work *work) { diff --git a/app/src/combo.c b/app/src/combo.c index 0d5c2a6e237..2ccc1051f00 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -47,7 +47,9 @@ struct active_combo { // key_positions_pressed is filled with key_positions when the combo is pressed. // The keys are removed from this array when they are released. // Once this array is empty, the behavior is released. - const zmk_event_t *key_positions_pressed[CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO]; + uint32_t key_positions_pressed_count; + struct zmk_position_state_changed_event + key_positions_pressed[CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO]; }; struct combo_candidate { @@ -58,8 +60,9 @@ struct combo_candidate { int64_t timeout_at; }; +uint32_t pressed_keys_count = 0; // set of keys pressed -const zmk_event_t *pressed_keys[CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO] = {NULL}; +struct zmk_position_state_changed_event pressed_keys[CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO] = {}; // the set of candidate combos based on the currently pressed_keys struct combo_candidate candidates[CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY]; // the last candidate that was completely pressed @@ -210,12 +213,7 @@ static inline bool candidate_is_completely_pressed(struct combo_cfg *candidate) // since events may have been reraised after clearing one or more slots at // the start of pressed_keys (see: release_pressed_keys), we have to check // that each key needed to trigger the combo was pressed, not just the last. - for (int i = 0; i < candidate->key_position_len; i++) { - if (pressed_keys[i] == NULL) { - return false; - } - } - return true; + return candidate->key_position_len == pressed_keys_count; } static int cleanup(); @@ -261,38 +259,33 @@ static int clear_candidates() { return CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY; } -static int capture_pressed_key(const zmk_event_t *ev) { - for (int i = 0; i < CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; i++) { - if (pressed_keys[i] != NULL) { - continue; - } - pressed_keys[i] = ev; - return ZMK_EV_EVENT_CAPTURED; +static int capture_pressed_key(const struct zmk_position_state_changed *ev) { + if (pressed_keys_count == CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY) { + return ZMK_EV_EVENT_BUBBLE; } - return ZMK_EV_EVENT_BUBBLE; + + pressed_keys[pressed_keys_count++] = copy_raised_zmk_position_state_changed(ev); + return ZMK_EV_EVENT_CAPTURED; } const struct zmk_listener zmk_listener_combo; static int release_pressed_keys() { - for (int i = 0; i < CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; i++) { - const zmk_event_t *captured_event = pressed_keys[i]; - if (pressed_keys[i] == NULL) { - return i; - } - pressed_keys[i] = NULL; + uint32_t count = pressed_keys_count; + pressed_keys_count = 0; + for (int i = 0; i < count; i++) { + struct zmk_position_state_changed_event ev = pressed_keys[i]; if (i == 0) { - LOG_DBG("combo: releasing position event %d", - as_zmk_position_state_changed(captured_event)->position); - ZMK_EVENT_RELEASE(captured_event) + LOG_DBG("combo: releasing position event %d", ev.data.position); + ZMK_EVENT_RELEASE(ev) } else { // reprocess events (see tests/combo/fully-overlapping-combos-3 for why this is needed) - LOG_DBG("combo: reraising position event %d", - as_zmk_position_state_changed(captured_event)->position); - ZMK_EVENT_RAISE(captured_event); + LOG_DBG("combo: reraising position event %d", ev.data.position); + ZMK_EVENT_RAISE(ev); } } - return CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; + + return count; } static inline int press_combo_behavior(struct combo_cfg *combo, int32_t timestamp) { @@ -316,19 +309,19 @@ static inline int release_combo_behavior(struct combo_cfg *combo, int32_t timest } static void move_pressed_keys_to_active_combo(struct active_combo *active_combo) { - int combo_length = active_combo->combo->key_position_len; + + int combo_length = MIN(pressed_keys_count, active_combo->combo->key_position_len); for (int i = 0; i < combo_length; i++) { active_combo->key_positions_pressed[i] = pressed_keys[i]; - pressed_keys[i] = NULL; } + active_combo->key_positions_pressed_count = combo_length; + // move any other pressed keys up - for (int i = 0; i + combo_length < CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO; i++) { - if (pressed_keys[i + combo_length] == NULL) { - return; - } + for (int i = 0; i + combo_length < pressed_keys_count; i++) { pressed_keys[i] = pressed_keys[i + combo_length]; - pressed_keys[i + combo_length] = NULL; } + + pressed_keys_count -= combo_length; } static struct active_combo *store_active_combo(struct combo_cfg *combo) { @@ -353,8 +346,7 @@ static void activate_combo(struct combo_cfg *combo) { return; } move_pressed_keys_to_active_combo(active_combo); - press_combo_behavior( - combo, as_zmk_position_state_changed(active_combo->key_positions_pressed[0])->timestamp); + press_combo_behavior(combo, active_combo->key_positions_pressed[0].data.timestamp); } static void deactivate_combo(int active_combo_index) { @@ -373,22 +365,22 @@ static bool release_combo_key(int32_t position, int64_t timestamp) { struct active_combo *active_combo = &active_combos[combo_idx]; bool key_released = false; - bool all_keys_pressed = true; + bool all_keys_pressed = + active_combo->key_positions_pressed_count == active_combo->combo->key_position_len; bool all_keys_released = true; - for (int i = 0; i < active_combo->combo->key_position_len; i++) { - if (active_combo->key_positions_pressed[i] == NULL) { - all_keys_pressed = false; - } else if (as_zmk_position_state_changed(active_combo->key_positions_pressed[i]) - ->position != position) { + for (int i = 0; i < active_combo->key_positions_pressed_count; i++) { + if (key_released) { + active_combo->key_positions_pressed[i - 1] = active_combo->key_positions_pressed[i]; + all_keys_released = false; + } else if (active_combo->key_positions_pressed[i].data.position != position) { all_keys_released = false; - } else { // not null and position matches - ZMK_EVENT_FREE(active_combo->key_positions_pressed[i]); - active_combo->key_positions_pressed[i] = NULL; + } else { // position matches key_released = true; } } if (key_released) { + active_combo->key_positions_pressed_count--; if ((active_combo->combo->slow_release && all_keys_released) || (!active_combo->combo->slow_release && all_keys_pressed)) { release_combo_behavior(active_combo->combo, timestamp); @@ -442,7 +434,7 @@ static int position_state_down(const zmk_event_t *ev, struct zmk_position_state_ struct combo_cfg *candidate_combo = candidates[0].combo; LOG_DBG("combo: capturing position event %d", data->position); - int ret = capture_pressed_key(ev); + int ret = capture_pressed_key(data); switch (num_candidates) { case 0: cleanup(); @@ -469,7 +461,9 @@ static int position_state_up(const zmk_event_t *ev, struct zmk_position_state_ch if (released_keys > 1) { // The second and further key down events are re-raised. To preserve // correct order for e.g. hold-taps, reraise the key up event too. - ZMK_EVENT_RAISE(ev); + struct zmk_position_state_changed_event dupe_ev = + copy_raised_zmk_position_state_changed(data); + ZMK_EVENT_RAISE(dupe_ev); return ZMK_EV_EVENT_CAPTURED; } return ZMK_EV_EVENT_BUBBLE; diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 827f2dcd814..dbe6bcbcd10 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -346,8 +346,7 @@ static void update_current_endpoint(void) { zmk_endpoint_instance_to_str(current_instance, endpoint_str, sizeof(endpoint_str)); LOG_INF("Endpoint changed: %s", endpoint_str); - ZMK_EVENT_RAISE( - new_zmk_endpoint_changed((struct zmk_endpoint_changed){.endpoint = current_instance})); + raise_zmk_endpoint_changed((struct zmk_endpoint_changed){.endpoint = current_instance}); } } diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 0f4a5547cc2..c28da97f594 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -32,21 +32,17 @@ int zmk_event_manager_handle_from(zmk_event_t *event, uint8_t start_index) { continue; case ZMK_EV_EVENT_HANDLED: LOG_DBG("Listener handled the event"); - ret = 0; - goto release; + return 0; case ZMK_EV_EVENT_CAPTURED: LOG_DBG("Listener captured the event"); - // Listeners are expected to free events they capture return 0; default: LOG_DBG("Listener returned an error: %d", ret); - goto release; + return ret; } } -release: - k_free(event); - return ret; + return 0; } int zmk_event_manager_raise(zmk_event_t *event) { return zmk_event_manager_handle_from(event, 0); } diff --git a/app/src/keymap.c b/app/src/keymap.c index 5e444b61dab..75a2dcbe64b 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -76,6 +76,7 @@ static struct zmk_behavior_binding #endif /* ZMK_KEYMAP_HAS_SENSORS */ static inline int set_layer_state(uint8_t layer, bool state) { + int ret = 0; if (layer >= ZMK_KEYMAP_LAYERS_LEN) { return -EINVAL; } @@ -90,10 +91,13 @@ static inline int set_layer_state(uint8_t layer, bool state) { // Don't send state changes unless there was an actual change if (old_state != _zmk_keymap_layer_state) { LOG_DBG("layer_changed: layer %d state %d", layer, state); - ZMK_EVENT_RAISE(create_layer_state_changed(layer, state)); + ret = raise_layer_state_changed(layer, state); + if (ret < 0) { + LOG_WRN("Failed to raise layer state changed (%d)", ret); + } } - return 0; + return ret; } uint8_t zmk_keymap_layer_default(void) { return _zmk_keymap_layer_default; } diff --git a/app/src/kscan.c b/app/src/kscan.c index 62d0cf0756e..ff55290a3c2 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -57,11 +57,11 @@ void zmk_kscan_process_msgq(struct k_work *item) { LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, (pressed ? "true" : "false")); - ZMK_EVENT_RAISE(new_zmk_position_state_changed( + raise_zmk_position_state_changed( (struct zmk_position_state_changed){.source = ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL, .state = pressed, .position = position, - .timestamp = k_uptime_get()})); + .timestamp = k_uptime_get()}); } } diff --git a/app/src/sensors.c b/app/src/sensors.c index 60f2bd2a33f..b7aeba0b80f 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -87,12 +87,12 @@ static void trigger_sensor_data_for_position(uint32_t sensor_index) { return; } - ZMK_EVENT_RAISE(new_zmk_sensor_event( + raise_zmk_sensor_event( (struct zmk_sensor_event){.sensor_index = item->sensor_index, .channel_data_size = 1, .channel_data = {(struct zmk_sensor_channel_data){ .value = value, .channel = item->trigger.chan}}, - .timestamp = k_uptime_get()})); + .timestamp = k_uptime_get()}); } static void run_sensors_data_trigger(struct k_work *work) { diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index e586155760d..7a205d2fe14 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -72,7 +72,7 @@ void peripheral_event_work_callback(struct k_work *work) { struct zmk_position_state_changed ev; while (k_msgq_get(&peripheral_event_msgq, &ev, K_NO_WAIT) == 0) { LOG_DBG("Trigger key position state change for %d", ev.position); - ZMK_EVENT_RAISE(new_zmk_position_state_changed(ev)); + raise_zmk_position_state_changed(ev); } } @@ -188,7 +188,7 @@ void peripheral_sensor_event_work_callback(struct k_work *work) { struct zmk_sensor_event ev; while (k_msgq_get(&peripheral_sensor_event_msgq, &ev, K_NO_WAIT) == 0) { LOG_DBG("Trigger sensor change for %d", ev.sensor_index); - ZMK_EVENT_RAISE(new_zmk_sensor_event(ev)); + raise_zmk_sensor_event(ev); } } diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index d54c312b529..dcf3db63aa3 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -83,8 +83,8 @@ K_WORK_DEFINE(advertising_work, advertising_cb); static void connected(struct bt_conn *conn, uint8_t err) { is_connected = (err == 0); - ZMK_EVENT_RAISE(new_zmk_split_peripheral_status_changed( - (struct zmk_split_peripheral_status_changed){.connected = is_connected})); + raise_zmk_split_peripheral_status_changed( + (struct zmk_split_peripheral_status_changed){.connected = is_connected}); if (err == BT_HCI_ERR_ADV_TIMEOUT) { low_duty_advertising = true; @@ -101,8 +101,8 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) { is_connected = false; - ZMK_EVENT_RAISE(new_zmk_split_peripheral_status_changed( - (struct zmk_split_peripheral_status_changed){.connected = is_connected})); + raise_zmk_split_peripheral_status_changed( + (struct zmk_split_peripheral_status_changed){.connected = is_connected}); low_duty_advertising = false; k_work_submit(&advertising_work); diff --git a/app/src/usb.c b/app/src/usb.c index 98b48bfe9e6..dbfece76564 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -22,8 +22,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static enum usb_dc_status_code usb_status = USB_DC_UNKNOWN; static void raise_usb_status_changed_event(struct k_work *_work) { - ZMK_EVENT_RAISE(new_zmk_usb_conn_state_changed( - (struct zmk_usb_conn_state_changed){.conn_state = zmk_usb_get_conn_state()})); + raise_zmk_usb_conn_state_changed( + (struct zmk_usb_conn_state_changed){.conn_state = zmk_usb_get_conn_state()}); } K_WORK_DEFINE(usb_status_notifier_work, raise_usb_status_changed_event); diff --git a/app/src/wpm.c b/app/src/wpm.c index efb5a5d343e..f15de74515d 100644 --- a/app/src/wpm.c +++ b/app/src/wpm.c @@ -54,8 +54,7 @@ void wpm_work_handler(struct k_work *work) { if (last_wpm_state != wpm_state) { LOG_DBG("Raised WPM state changed %d wpm_update_counter %d", wpm_state, wpm_update_counter); - ZMK_EVENT_RAISE( - new_zmk_wpm_state_changed((struct zmk_wpm_state_changed){.state = wpm_state})); + raise_zmk_wpm_state_changed((struct zmk_wpm_state_changed){.state = wpm_state}); last_wpm_state = wpm_state; } From 644feeb40de032a1244e4369306ee38f3c9ec395 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 13 Jan 2024 21:17:35 +0000 Subject: [PATCH 0896/1130] fix(core): Address review comments from Joel. * Fix up some lingering events API tweaks for heap-less event manager. --- app/include/zmk/event_manager.h | 16 ++++++++++------ app/include/zmk/events/keycode_state_changed.h | 6 ++++++ app/src/behaviors/behavior_key_press.c | 6 ++---- app/src/behaviors/behavior_key_toggle.c | 3 +-- app/src/behaviors/behavior_sticky_key.c | 4 ++-- app/src/combo.c | 10 +++++----- 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/app/include/zmk/event_manager.h b/app/include/zmk/event_manager.h index 489147443a5..6213db16a8b 100644 --- a/app/include/zmk/event_manager.h +++ b/app/include/zmk/event_manager.h @@ -52,8 +52,8 @@ struct zmk_event_subscription { return *outer; \ }; \ int raise_##event_type(struct event_type data) { \ - struct event_type##_event ev = {.data = data}; \ - ev.header.event = &zmk_event_##event_type; \ + struct event_type##_event ev = {.data = data, \ + .header = {.event = &zmk_event_##event_type}}; \ return ZMK_EVENT_RAISE(ev); \ }; \ struct event_type *as_##event_type(const zmk_event_t *eh) { \ @@ -71,15 +71,19 @@ struct zmk_event_subscription { .listener = &zmk_listener_##mod, \ }; -#define ZMK_EVENT_RAISE(ev) zmk_event_manager_raise((zmk_event_t *)&ev); +#define ZMK_ASSERT_EVENT_LIKE(ev) \ + (__ASSERT((uint8_t *)&(ev).header - (uint8_t *)&ev == 0, \ + "header must be first element of event")) + +#define ZMK_EVENT_RAISE(ev) (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_raise(&(ev).header)) #define ZMK_EVENT_RAISE_AFTER(ev, mod) \ - zmk_event_manager_raise_after((zmk_event_t *)&ev, &zmk_listener_##mod); + (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_raise_after(&(ev).header, &zmk_listener_##mod)) #define ZMK_EVENT_RAISE_AT(ev, mod) \ - zmk_event_manager_raise_at((zmk_event_t *)&ev, &zmk_listener_##mod); + (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_raise_at(&(ev).header, &zmk_listener_##mod)) -#define ZMK_EVENT_RELEASE(ev) zmk_event_manager_release((zmk_event_t *)&ev); +#define ZMK_EVENT_RELEASE(ev) (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_release(&(ev).header)) int zmk_event_manager_raise(zmk_event_t *event); int zmk_event_manager_raise_after(zmk_event_t *event, const struct zmk_listener *listener); diff --git a/app/include/zmk/events/keycode_state_changed.h b/app/include/zmk/events/keycode_state_changed.h index 20a46351552..60ffcfc89e2 100644 --- a/app/include/zmk/events/keycode_state_changed.h +++ b/app/include/zmk/events/keycode_state_changed.h @@ -45,3 +45,9 @@ zmk_keycode_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t t .state = pressed, .timestamp = timestamp}; } + +static inline int raise_zmk_keycode_state_changed_from_encoded(uint32_t encoded, bool pressed, + int64_t timestamp) { + return raise_zmk_keycode_state_changed( + zmk_keycode_state_changed_from_encoded(encoded, pressed, timestamp)); +} diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index f516122ed96..5374e6dd158 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -21,15 +21,13 @@ static int behavior_key_press_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); - return raise_zmk_keycode_state_changed( - zmk_keycode_state_changed_from_encoded(binding->param1, true, event.timestamp)); + return raise_zmk_keycode_state_changed_from_encoded(binding->param1, true, event.timestamp); } static int on_keymap_binding_released(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); - return raise_zmk_keycode_state_changed( - zmk_keycode_state_changed_from_encoded(binding->param1, false, event.timestamp)); + return raise_zmk_keycode_state_changed_from_encoded(binding->param1, false, event.timestamp); } static const struct behavior_driver_api behavior_key_press_driver_api = { diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index a4bfafb4047..db77f81412a 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -23,8 +23,7 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); bool pressed = zmk_hid_is_pressed(binding->param1); - return raise_zmk_keycode_state_changed( - zmk_keycode_state_changed_from_encoded(binding->param1, !pressed, event.timestamp)); + return raise_zmk_keycode_state_changed_from_encoded(binding->param1, !pressed, event.timestamp); } static int on_keymap_binding_released(struct zmk_behavior_binding *binding, diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 86a0783ef7a..aabb017eaa1 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -236,8 +236,8 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { if (sticky_key->config->quick_release) { // immediately release the sticky key after the key press is handled. if (!event_reraised) { - struct zmk_keycode_state_changed_event dupe_ev; - memcpy(&dupe_ev, eh, sizeof(struct zmk_keycode_state_changed_event)); + struct zmk_keycode_state_changed_event dupe_ev = + copy_raised_zmk_keycode_state_changed(ev); ZMK_EVENT_RAISE_AFTER(dupe_ev, behavior_sticky_key); event_reraised = true; } diff --git a/app/src/combo.c b/app/src/combo.c index 2ccc1051f00..5003d7f957a 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -274,14 +274,14 @@ static int release_pressed_keys() { uint32_t count = pressed_keys_count; pressed_keys_count = 0; for (int i = 0; i < count; i++) { - struct zmk_position_state_changed_event ev = pressed_keys[i]; + struct zmk_position_state_changed_event *ev = &pressed_keys[i]; if (i == 0) { - LOG_DBG("combo: releasing position event %d", ev.data.position); - ZMK_EVENT_RELEASE(ev) + LOG_DBG("combo: releasing position event %d", ev->data.position); + ZMK_EVENT_RELEASE(*ev); } else { // reprocess events (see tests/combo/fully-overlapping-combos-3 for why this is needed) - LOG_DBG("combo: reraising position event %d", ev.data.position); - ZMK_EVENT_RAISE(ev); + LOG_DBG("combo: reraising position event %d", ev->data.position); + ZMK_EVENT_RAISE(*ev); } } From 331915f98931308f49f43485c75f5d0c08f0cf29 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 14 Jan 2024 19:26:35 +0000 Subject: [PATCH 0897/1130] fix: Fix missed event manager usages from refactor. --- app/src/hid_indicators.c | 3 +-- app/src/split/bluetooth/central.c | 2 +- app/src/split/bluetooth/service.c | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/hid_indicators.c b/app/src/hid_indicators.c index 50b2fbcc9ba..1b489068956 100644 --- a/app/src/hid_indicators.c +++ b/app/src/hid_indicators.c @@ -30,8 +30,7 @@ zmk_hid_indicators_t zmk_hid_indicators_get_profile(struct zmk_endpoint_instance static void raise_led_changed_event(struct k_work *_work) { const zmk_hid_indicators_t indicators = zmk_hid_indicators_get_current_profile(); - ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed( - (struct zmk_hid_indicators_changed){.indicators = indicators})); + raise_zmk_hid_indicators_changed((struct zmk_hid_indicators_changed){.indicators = indicators}); #if IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) && IS_ENABLED(CONFIG_ZMK_SPLIT_BLE) zmk_split_bt_update_hid_indicator(indicators); diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 7a205d2fe14..95fd72603aa 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -295,7 +295,7 @@ void peripheral_batt_lvl_change_callback(struct k_work *work) { while (k_msgq_get(&peripheral_batt_lvl_msgq, &ev, K_NO_WAIT) == 0) { LOG_DBG("Triggering peripheral battery level change %u", ev.state_of_charge); peripheral_battery_levels[ev.source] = ev.state_of_charge; - ZMK_EVENT_RAISE(new_zmk_peripheral_battery_state_changed(ev)); + raise_zmk_peripheral_battery_state_changed(ev); } } diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index 0072cf8c835..d6eb7ce4b2c 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -116,8 +116,8 @@ static zmk_hid_indicators_t hid_indicators = 0; static void split_svc_update_indicators_callback(struct k_work *work) { LOG_DBG("Raising HID indicators changed event: %x", hid_indicators); - ZMK_EVENT_RAISE(new_zmk_hid_indicators_changed( - (struct zmk_hid_indicators_changed){.indicators = hid_indicators})); + raise_zmk_hid_indicators_changed( + (struct zmk_hid_indicators_changed){.indicators = hid_indicators}); } static K_WORK_DEFINE(split_svc_update_indicators_work, split_svc_update_indicators_callback); From e89cffc959840f0463f955ec5a0ad51f33c90b37 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 14 Jan 2024 23:49:51 +0000 Subject: [PATCH 0898/1130] fix(events): Remove our usage of assert. * __ASSERT is converted to a do/while loop when asserts are enabled, which doesn't work with our usage, so revert that addition. --- app/include/zmk/event_manager.h | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/app/include/zmk/event_manager.h b/app/include/zmk/event_manager.h index 6213db16a8b..e44207152d3 100644 --- a/app/include/zmk/event_manager.h +++ b/app/include/zmk/event_manager.h @@ -71,19 +71,14 @@ struct zmk_event_subscription { .listener = &zmk_listener_##mod, \ }; -#define ZMK_ASSERT_EVENT_LIKE(ev) \ - (__ASSERT((uint8_t *)&(ev).header - (uint8_t *)&ev == 0, \ - "header must be first element of event")) - -#define ZMK_EVENT_RAISE(ev) (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_raise(&(ev).header)) +#define ZMK_EVENT_RAISE(ev) zmk_event_manager_raise(&(ev).header) #define ZMK_EVENT_RAISE_AFTER(ev, mod) \ - (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_raise_after(&(ev).header, &zmk_listener_##mod)) + zmk_event_manager_raise_after(&(ev).header, &zmk_listener_##mod) -#define ZMK_EVENT_RAISE_AT(ev, mod) \ - (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_raise_at(&(ev).header, &zmk_listener_##mod)) +#define ZMK_EVENT_RAISE_AT(ev, mod) zmk_event_manager_raise_at(&(ev).header, &zmk_listener_##mod) -#define ZMK_EVENT_RELEASE(ev) (ZMK_ASSERT_EVENT_LIKE(ev), zmk_event_manager_release(&(ev).header)) +#define ZMK_EVENT_RELEASE(ev) zmk_event_manager_release(&(ev).header) int zmk_event_manager_raise(zmk_event_t *event); int zmk_event_manager_raise_after(zmk_event_t *event, const struct zmk_listener *listener); From e5050e40fedab0abf1c6815e88a0d53dfb7cd346 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 14 Jan 2024 23:54:17 +0000 Subject: [PATCH 0899/1130] feat(tests): Enable asserts for tests. --- app/run-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/run-test.sh b/app/run-test.sh index cfd376686c8..b0b6f73b499 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -26,7 +26,7 @@ fi testcase="$path" echo "Running $testcase:" -west build -d build/$testcase -b native_posix_64 -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 +west build -d build/$testcase -b native_posix_64 -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1 if [ $? -gt 0 ]; then echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log exit 1 From 0890aaeaffc06491b0f3f4576ea64d077941e1c0 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 15 Jan 2024 00:07:46 +0000 Subject: [PATCH 0900/1130] chore: Run tests if any includes change. --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eba4ff3a0b4..b9676d87a40 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,11 +6,13 @@ on: - ".github/workflows/test.yml" - "app/tests/**" - "app/src/**" + - "app/include/**" pull_request: paths: - ".github/workflows/test.yml" - "app/tests/**" - "app/src/**" + - "app/include/**" jobs: collect-tests: From 8c14b155e8a324382f6a863bd93a7d45304a82ff Mon Sep 17 00:00:00 2001 From: crides Date: Mon, 15 Jan 2024 14:21:37 -0800 Subject: [PATCH 0901/1130] docs: confirm some consumer codes on iOS Tested on iOS 16.6 --- docs/src/data/hid.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/data/hid.js b/docs/src/data/hid.js index 96697beebb6..92b5021f3df 100644 --- a/docs/src/data/hid.js +++ b/docs/src/data/hid.js @@ -5173,7 +5173,7 @@ export default [ linux: true, android: null, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, @@ -5194,7 +5194,7 @@ export default [ linux: true, android: null, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, @@ -5887,7 +5887,7 @@ export default [ linux: true, android: true, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, @@ -5908,7 +5908,7 @@ export default [ linux: true, android: true, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, @@ -6055,7 +6055,7 @@ export default [ linux: true, android: true, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, @@ -6096,8 +6096,8 @@ export default [ windows: true, linux: true, android: true, - macos: null, - ios: null, + macos: true, + ios: true, }, footnotes: {}, }, @@ -6139,7 +6139,7 @@ export default [ linux: true, android: true, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, @@ -6160,7 +6160,7 @@ export default [ linux: true, android: true, macos: true, - ios: null, + ios: true, }, footnotes: {}, }, From f71458aca0d777d99256c89eada88b7ed5c86d0a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 16 Jan 2024 16:28:32 -0800 Subject: [PATCH 0902/1130] fix(shields): Fix battery warnings for custom widgets. --- app/boards/shields/nice_view/widgets/peripheral_status.c | 4 +++- app/boards/shields/nice_view/widgets/status.c | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.c b/app/boards/shields/nice_view/widgets/peripheral_status.c index 33dafdb9f1f..989681f32c5 100644 --- a/app/boards/shields/nice_view/widgets/peripheral_status.c +++ b/app/boards/shields/nice_view/widgets/peripheral_status.c @@ -12,8 +12,8 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include -#include "peripheral_status.h" #include #include #include @@ -22,6 +22,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include "peripheral_status.h" + LV_IMG_DECLARE(balloon); LV_IMG_DECLARE(mountain); diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 96ff1e6300e..41c0974380f 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -11,6 +11,7 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include "status.h" #include From 0827ff245f632a8c6e94b3ff463c263553287dd2 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 15:17:02 -0800 Subject: [PATCH 0903/1130] chore(docs): Update docusaurus to 3 Following https://docusaurus.io/docs/migration/v3#upgrading-dependencies and `npm update` --- docs/package-lock.json | 35609 ++++++++++++++++----------------------- docs/package.json | 18 +- 2 files changed, 14703 insertions(+), 20924 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 53decd66d93..16525e7c4ef 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,34 +1,34 @@ { "name": "docs", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^2.4.0", - "@docusaurus/preset-classic": "^2.4.0", + "@docusaurus/core": "^3.0.0", + "@docusaurus/preset-classic": "^3.0.0", "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@mdx-js/react": "^1.6.22", + "@mdx-js/react": "^3.0.0", "classnames": "^2.2.6", "js-yaml": "^4.1.0", - "react": "^17.0.2", + "react": "^18.0.0", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", - "react-dom": "^17.0.2", + "react-dom": "^18.0.0", "react-toastify": "^7.0.4", "web-tree-sitter": "^0.20.8" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.4.0", - "@docusaurus/types": "^2.4.0", - "@tsconfig/docusaurus": "^1.0.7", + "@docusaurus/module-type-aliases": "^3.0.0", + "@docusaurus/tsconfig": "^3.0.0", + "@docusaurus/types": "^3.0.0", "@types/js-yaml": "^4.0.5", - "@types/react": "^17.0.58", + "@types/react": "^18.2.29", "@types/react-helmet": "^6.1.6", "@types/react-router-dom": "^5.1.7", "eslint": "^8.39.0", @@ -45,20 +45,41 @@ "webpack": "^5.86.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", - "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.4" + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", - "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.4" + "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -66,79 +87,83 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", - "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", - "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz", + "integrity": "sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==", "dependencies": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.22.1" } }, "node_modules/@algolia/cache-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", - "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz", + "integrity": "sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", - "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz", + "integrity": "sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==", "dependencies": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.22.1" } }, "node_modules/@algolia/client-account": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", - "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz", + "integrity": "sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/transporter": "4.22.1" } }, "node_modules/@algolia/client-analytics": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", - "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz", + "integrity": "sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" } }, "node_modules/@algolia/client-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", - "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz", + "integrity": "sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==", "dependencies": { - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" } }, "node_modules/@algolia/client-personalization": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", - "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz", + "integrity": "sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" } }, "node_modules/@algolia/client-search": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", - "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz", + "integrity": "sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" } }, "node_modules/@algolia/events": { @@ -147,55 +172,55 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", - "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz", + "integrity": "sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==" }, "node_modules/@algolia/logger-console": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", - "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz", + "integrity": "sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==", "dependencies": { - "@algolia/logger-common": "4.17.0" + "@algolia/logger-common": "4.22.1" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", - "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", + "integrity": "sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==", "dependencies": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.22.1" } }, "node_modules/@algolia/requester-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", - "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz", + "integrity": "sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", - "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz", + "integrity": "sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==", "dependencies": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.22.1" } }, "node_modules/@algolia/transporter": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", - "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz", + "integrity": "sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==", "dependencies": { - "@algolia/cache-common": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/requester-common": "4.17.0" + "@algolia/cache-common": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/requester-common": "4.22.1" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -203,44 +228,109 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -259,69 +349,54 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.19.4", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dependencies": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { @@ -333,17 +408,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -352,13 +429,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -367,23 +453,7 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", @@ -391,116 +461,119 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -510,111 +583,111 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { - "@babel/types": "^7.19.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -686,9 +759,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -697,11 +770,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -711,13 +784,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -726,31 +799,25 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", - "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "engines": { "node": ">=6.9.0" }, @@ -758,44 +825,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -804,43 +861,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -849,13 +897,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -864,47 +911,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", - "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dependencies": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -913,79 +947,76 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -996,59 +1027,88 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", + "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1057,78 +1117,122 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1137,12 +1241,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1151,12 +1255,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1165,12 +1270,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1179,14 +1285,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1195,12 +1300,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1209,12 +1315,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", - "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1223,20 +1331,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1245,12 +1346,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1259,12 +1360,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", - "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1273,13 +1375,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1288,12 +1389,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1302,13 +1404,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1317,12 +1420,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1331,14 +1437,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1347,12 +1452,27 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1361,12 +1481,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1375,13 +1496,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1390,14 +1511,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1406,15 +1529,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1423,13 +1544,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1438,27 +1559,28 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1467,13 +1589,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1482,12 +1604,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1497,11 +1622,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1511,11 +1636,11 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", - "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz", + "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1525,11 +1650,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1539,15 +1664,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1557,11 +1682,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1571,12 +1696,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1586,12 +1711,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1601,11 +1726,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1615,16 +1740,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz", + "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1642,11 +1767,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1656,12 +1781,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1671,11 +1796,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1685,11 +1810,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1699,11 +1824,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1713,13 +1838,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", - "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1729,11 +1855,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1742,13 +1868,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1757,38 +1883,57 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", - "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", - "dependencies": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.19.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", + "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1798,45 +1943,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.19.4", - "@babel/plugin-transform-classes": "^7.19.0", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.19.4", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.7", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1854,31 +2015,29 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1888,13 +2047,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1903,56 +2064,61 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", - "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.8.tgz", + "integrity": "sha512-2ZzmcDugdm0/YQKFVYsXiwUN7USPX8PM7cytpb4PFl87fM+qYPSvTZX//8tyeJB1j0YDmafBJEbl5f8NfLyuKw==", "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.4" + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1960,12 +2126,12 @@ } }, "node_modules/@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1999,25 +2165,34 @@ "node": ">=0.1.90" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docsearch/css": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", - "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" }, "node_modules/@docsearch/react": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", - "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", "dependencies": { - "@algolia/autocomplete-core": "1.7.4", - "@algolia/autocomplete-preset-algolia": "1.7.4", - "@docsearch/css": "3.3.3", - "algoliasearch": "^4.0.0" + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" }, "peerDependenciesMeta": { "@types/react": { @@ -2028,161 +2203,171 @@ }, "react-dom": { "optional": true + }, + "search-insights": { + "optional": true } } }, "node_modules/@docusaurus/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", - "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.0.tgz", + "integrity": "sha512-GWudMGYA9v26ssbAWJNfgeDZk+lrudUTclLPRsmxiknEBk7UMp7Rglonhqbsf3IKHOyHkMU4Fr5jFyg5SBx9jQ==", "dependencies": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", + "@babel/core": "^7.23.3", + "@babel/generator": "^7.23.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", + "@babel/plugin-transform-runtime": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/preset-react": "^7.22.5", + "@babel/preset-typescript": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@babel/runtime-corejs3": "^7.22.6", + "@babel/traverse": "^7.22.8", + "@docusaurus/cssnano-preset": "3.1.0", + "@docusaurus/logger": "3.1.0", + "@docusaurus/mdx-loader": "3.1.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-common": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", + "@svgr/webpack": "^6.5.1", + "autoprefixer": "^10.4.14", + "babel-loader": "^9.1.3", "babel-plugin-dynamic-import-node": "^2.3.3", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", + "clean-css": "^5.3.2", + "cli-table3": "^0.6.3", "combine-promises": "^1.1.0", "commander": "^5.1.0", "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", + "core-js": "^3.31.1", + "css-loader": "^6.8.1", + "css-minimizer-webpack-plugin": "^4.2.2", + "cssnano": "^5.1.15", "del": "^6.1.1", - "detect-port": "^1.3.0", + "detect-port": "^1.5.1", "escape-html": "^1.0.3", - "eta": "^2.0.0", + "eta": "^2.2.0", "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", + "fs-extra": "^11.1.1", + "html-minifier-terser": "^7.2.0", + "html-tags": "^3.3.1", + "html-webpack-plugin": "^5.5.3", "leven": "^3.1.0", "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", + "mini-css-extract-plugin": "^2.7.6", + "postcss": "^8.4.26", + "postcss-loader": "^7.3.3", "prompts": "^2.4.2", "react-dev-utils": "^12.0.1", "react-helmet-async": "^1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", + "react-router": "^5.3.4", "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", + "react-router-dom": "^5.3.4", "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", + "semver": "^7.5.4", + "serve-handler": "^6.1.5", "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", + "terser-webpack-plugin": "^5.3.9", + "tslib": "^2.6.0", + "update-notifier": "^6.0.2", "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", + "webpack": "^5.88.1", + "webpack-bundle-analyzer": "^4.9.0", + "webpack-dev-server": "^4.15.1", + "webpack-merge": "^5.9.0", "webpackbar": "^5.0.2" }, "bin": { "docusaurus": "bin/docusaurus.mjs" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", - "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.0.tgz", + "integrity": "sha512-ned7qsgCqSv/e7KyugFNroAfiszuxLwnvMW7gmT2Ywxb/Nyt61yIw7KHyAZCMKglOalrqnYA4gMhLUCK/mVePA==", "dependencies": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" + "cssnano-preset-advanced": "^5.3.10", + "postcss": "^8.4.26", + "postcss-sort-media-queries": "^4.4.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" } }, "node_modules/@docusaurus/logger": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", - "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.0.tgz", + "integrity": "sha512-p740M+HCst1VnKKzL60Hru9xfG4EUYJDarjlEC4hHeBy9+afPmY3BNPoSHx9/8zxuYfUlv/psf7I9NvRVdmdvg==", "dependencies": { "chalk": "^4.1.2", - "tslib": "^2.4.0" + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", - "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", - "dependencies": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@mdx-js/mdx": "^1.6.22", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.1.0.tgz", + "integrity": "sha512-D7onDz/3mgBonexWoQXPw3V2E5Bc4+jYRf9gGUUK+KoQwU8xMDaDkUUfsr7t6UBa/xox9p5+/3zwLuXOYMzGSg==", + "dependencies": { + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@docusaurus/logger": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "@mdx-js/mdx": "^3.0.0", + "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", + "estree-util-value-to-estree": "^3.0.1", "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", + "fs-extra": "^11.1.1", + "image-size": "^1.0.2", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-raw": "^7.0.0", + "remark-directive": "^3.0.0", + "remark-emoji": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0", "url-loader": "^4.1.1", - "webpack": "^5.73.0" + "vfile": "^6.0.1", + "webpack": "^5.88.1" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz", - "integrity": "sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.0.tgz", + "integrity": "sha512-XUl7Z4PWlKg4l6KF05JQ3iDHQxnPxbQUqTNKvviHyuHdlalOFv6qeDAm7IbzyQPJD5VA6y4dpRbTWSqP9ClwPg==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.4.0", + "@docusaurus/types": "3.1.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2196,209 +2381,210 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz", - "integrity": "sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.0.tgz", + "integrity": "sha512-iMa6WBaaEdYuxckvJtLcq/HQdlA4oEbCXf/OFfsYJCCULcDX7GDZpKxLF3X1fLsax3sSm5bmsU+CA0WD+R1g3A==", + "dependencies": { + "@docusaurus/core": "3.1.0", + "@docusaurus/logger": "3.1.0", + "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-common": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", - "fs-extra": "^10.1.0", + "fs-extra": "^11.1.1", "lodash": "^4.17.21", "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", + "srcset": "^4.0.0", + "tslib": "^2.6.0", + "unist-util-visit": "^5.0.0", "utility-types": "^3.10.0", - "webpack": "^5.73.0" + "webpack": "^5.88.1" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz", - "integrity": "sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@types/react-router-config": "^5.0.6", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.0.tgz", + "integrity": "sha512-el5GxhT8BLrsWD0qGa8Rq+Ttb/Ni6V3DGT2oAPio0qcs/mUAxeyXEAmihkvmLCnAgp6xD27Ce7dISZ5c6BXeqA==", + "dependencies": { + "@docusaurus/core": "3.1.0", + "@docusaurus/logger": "3.1.0", + "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/module-type-aliases": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", + "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "tslib": "^2.4.0", + "tslib": "^2.6.0", "utility-types": "^3.10.0", - "webpack": "^5.73.0" + "webpack": "^5.88.1" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz", - "integrity": "sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.0.tgz", + "integrity": "sha512-9gntYQFpk+93+Xl7gYczJu8I9uWoyRLnRwS0+NUFcs9iZtHKsdqKWPRrONC9elfN3wJ9ORwTbcVzsTiB8jvYlg==", "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" + "@docusaurus/core": "3.1.0", + "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz", - "integrity": "sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.1.0.tgz", + "integrity": "sha512-AbvJwCVRbmQ8w9d8QXbF4Iq/ui0bjPZNYFIhtducGFnm2YQRN1mraK8mCEQb0Aq0T8SqRRvSfC/far4n/s531w==", "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" + "@docusaurus/core": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils": "3.1.0", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^1.2.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz", - "integrity": "sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.0.tgz", + "integrity": "sha512-zvUOMzu9Uhz0ciqnSbtnp/5i1zEYlzarQrOXG90P3Is3efQI43p2YLW/rzSGdLb5MfQo2HvKT6Q5+tioMO045Q==", "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" + "@docusaurus/core": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", - "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.0.tgz", + "integrity": "sha512-0txshvaY8qIBdkk2UATdVcfiCLGq3KAUfuRQD2cRNgO39iIf4/ihQxH9NXcRTwKs4Q5d9yYHoix3xT6pFuEYOg==", "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" + "@docusaurus/core": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "@types/gtag.js": "^0.0.12", + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz", - "integrity": "sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.0.tgz", + "integrity": "sha512-zOWPEi8kMyyPtwG0vhyXrdbLs8fIZmY5vlbi9lUU+v8VsroO5iHmfR2V3SMsrsfOanw5oV/ciWqbxezY00qEZg==", "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" + "@docusaurus/core": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz", - "integrity": "sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "fs-extra": "^10.1.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.0.tgz", + "integrity": "sha512-TkR5vGBpUooEB9SoW42thahqqwKzfHrQQhkB+JrEGERsl4bKODSuJNle4aA4h6LSkg4IyfXOW8XOI0NIPWb9Cg==", + "dependencies": { + "@docusaurus/core": "3.1.0", + "@docusaurus/logger": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-common": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "fs-extra": "^11.1.1", "sitemap": "^7.1.1", - "tslib": "^2.4.0" + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz", - "integrity": "sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/plugin-debug": "2.4.0", - "@docusaurus/plugin-google-analytics": "2.4.0", - "@docusaurus/plugin-google-gtag": "2.4.0", - "@docusaurus/plugin-google-tag-manager": "2.4.0", - "@docusaurus/plugin-sitemap": "2.4.0", - "@docusaurus/theme-classic": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-search-algolia": "2.4.0", - "@docusaurus/types": "2.4.0" - }, - "engines": { - "node": ">=16.14" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.1.0.tgz", + "integrity": "sha512-xGLQRFmmT9IinAGUDVRYZ54Ys28USNbA3OTXQXnSJLPr1rCY7CYnHI4XoOnKWrNnDiAI4ruMzunXWyaElUYCKQ==", + "dependencies": { + "@docusaurus/core": "3.1.0", + "@docusaurus/plugin-content-blog": "3.1.0", + "@docusaurus/plugin-content-docs": "3.1.0", + "@docusaurus/plugin-content-pages": "3.1.0", + "@docusaurus/plugin-debug": "3.1.0", + "@docusaurus/plugin-google-analytics": "3.1.0", + "@docusaurus/plugin-google-gtag": "3.1.0", + "@docusaurus/plugin-google-tag-manager": "3.1.0", + "@docusaurus/plugin-sitemap": "3.1.0", + "@docusaurus/theme-classic": "3.1.0", + "@docusaurus/theme-common": "3.1.0", + "@docusaurus/theme-search-algolia": "3.1.0", + "@docusaurus/types": "3.1.0" + }, + "engines": { + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/react-loadable": { @@ -2414,159 +2600,166 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz", - "integrity": "sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-translations": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.0.tgz", + "integrity": "sha512-/+jMl2Z9O8QQxves5AtHdt91gWsEZFgOV3La/6eyKEd7QLqQUtM5fxEJ40rq9NKYjqCd1HzZ9egIMeJoWwillw==", + "dependencies": { + "@docusaurus/core": "3.1.0", + "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/module-type-aliases": "3.1.0", + "@docusaurus/plugin-content-blog": "3.1.0", + "@docusaurus/plugin-content-docs": "3.1.0", + "@docusaurus/plugin-content-pages": "3.1.0", + "@docusaurus/theme-common": "3.1.0", + "@docusaurus/theme-translations": "3.1.0", + "@docusaurus/types": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-common": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.43", "lodash": "^4.17.21", "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", + "postcss": "^8.4.26", + "prism-react-renderer": "^2.3.0", + "prismjs": "^1.29.0", + "react-router-dom": "^5.3.4", + "rtlcss": "^4.1.0", + "tslib": "^2.6.0", "utility-types": "^3.10.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/theme-common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.0.tgz", - "integrity": "sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==", - "dependencies": { - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.1.0.tgz", + "integrity": "sha512-YGwEFALLIbF5ocW/Fy6Ae7tFWUOugEN3iwxTx8UkLAcLqYUboDSadesYtVBmRCEB4FVA2qoP7YaW3lu3apUPPw==", + "dependencies": { + "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/module-type-aliases": "3.1.0", + "@docusaurus/plugin-content-blog": "3.1.0", + "@docusaurus/plugin-content-docs": "3.1.0", + "@docusaurus/plugin-content-pages": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-common": "3.1.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", + "prism-react-renderer": "^2.3.0", + "tslib": "^2.6.0", "utility-types": "^3.10.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz", - "integrity": "sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==", - "dependencies": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-translations": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.0.tgz", + "integrity": "sha512-8cJH0ZhPsEDjq3jR3I+wHmWzVY2bXMQJ59v2QxUmsTZxbWA4u+IzccJMIJx4ooFl9J6iYynwYsFuHxyx/KUmfQ==", + "dependencies": { + "@docsearch/react": "^3.5.2", + "@docusaurus/core": "3.1.0", + "@docusaurus/logger": "3.1.0", + "@docusaurus/plugin-content-docs": "3.1.0", + "@docusaurus/theme-common": "3.1.0", + "@docusaurus/theme-translations": "3.1.0", + "@docusaurus/utils": "3.1.0", + "@docusaurus/utils-validation": "3.1.0", + "algoliasearch": "^4.18.0", + "algoliasearch-helper": "^3.13.3", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", "lodash": "^4.17.21", - "tslib": "^2.4.0", + "tslib": "^2.6.0", "utility-types": "^3.10.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz", - "integrity": "sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.1.0.tgz", + "integrity": "sha512-DApE4AbDI+WBajihxB54L4scWQhVGNZAochlC9fkbciPuFAgdRBD3NREb0rgfbKexDC/rioppu/WJA0u8tS+yA==", "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" } }, + "node_modules/@docusaurus/tsconfig": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.0.tgz", + "integrity": "sha512-PE6fSuj5gJy5sNC1OO+bYAU1/xZH5YqddGjhrNu3/T7OAUroqkMZfVl13Tz70CjYB8no4OWcraqSkObAeNdIcQ==", + "dev": true + }, "node_modules/@docusaurus/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", - "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.0.tgz", + "integrity": "sha512-VaczOZf7+re8aFBIWnex1XENomwHdsSTkrdX43zyor7G/FY4OIsP6X28Xc3o0jiY0YdNuvIDyA5TNwOtpgkCVw==", "dependencies": { + "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", "@types/react": "*", "commander": "^5.1.0", - "joi": "^17.6.0", + "joi": "^17.9.2", "react-helmet-async": "^1.3.0", "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" + "webpack": "^5.88.1", + "webpack-merge": "^5.9.0" }, "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@docusaurus/utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", - "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.0.tgz", + "integrity": "sha512-LgZfp0D+UBqAh7PZ//MUNSFBMavmAPku6Si9x8x3V+S318IGCNJ6hUr2O29UO0oLybEWUjD5Jnj9IUN6XyZeeg==", "dependencies": { - "@docusaurus/logger": "2.4.0", - "@svgr/webpack": "^6.2.1", + "@docusaurus/logger": "3.1.0", + "@svgr/webpack": "^6.5.1", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", + "fs-extra": "^11.1.1", + "github-slugger": "^1.5.0", "globby": "^11.1.0", "gray-matter": "^4.0.3", + "jiti": "^1.20.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", "resolve-pathname": "^3.0.0", "shelljs": "^0.8.5", - "tslib": "^2.4.0", + "tslib": "^2.6.0", "url-loader": "^4.1.1", - "webpack": "^5.73.0" + "webpack": "^5.88.1" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { "@docusaurus/types": "*" @@ -2578,14 +2771,14 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", - "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.1.0.tgz", + "integrity": "sha512-SfvnRLHoZ9bwTw67knkSs7IcUR0GY2SaGkpdB/J9pChrDiGhwzKNUhcieoPyPYrOWGRPk3rVNYtoy+Bc7psPAw==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" }, "peerDependencies": { "@docusaurus/types": "*" @@ -2597,18 +2790,18 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", - "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.0.tgz", + "integrity": "sha512-dFxhs1NLxPOSzmcTk/eeKxLY5R+U4cua22g9MsAMiRWcwFKStZ2W3/GDY0GmnJGqNS8QAQepJrxQoyxXkJNDeg==", "dependencies": { - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "joi": "^17.6.0", + "@docusaurus/logger": "3.1.0", + "@docusaurus/utils": "3.1.0", + "joi": "^17.9.2", "js-yaml": "^4.1.0", - "tslib": "^2.4.0" + "tslib": "^2.6.0" }, "engines": { - "node": ">=16.14" + "node": ">=18.0" } }, "node_modules/@eslint-community/eslint-utils": { @@ -2627,23 +2820,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "devOptional": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "devOptional": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2659,9 +2852,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -2686,51 +2879,42 @@ } }, "node_modules/@eslint/js": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", - "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "devOptional": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz", + "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz", + "integrity": "sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.1" }, "engines": { "node": ">=6" } }, - "node_modules/@fortawesome/fontawesome-svg-core/node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", - "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz", + "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" + "@fortawesome/fontawesome-common-types": "6.5.1" }, "engines": { "node": ">=6" @@ -2762,13 +2946,13 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "devOptional": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2789,28 +2973,72 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "devOptional": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@jest/schemas": "^29.0.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -2822,21 +3050,22 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } @@ -2850,39 +3079,26 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jsdevtools/ono": { @@ -2897,156 +3113,53 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.0.tgz", + "integrity": "sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-to-js": "^2.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/@mdx-js/mdx/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/@mdx-js/react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.0.tgz", + "integrity": "sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@types/mdx": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/react": ">=16", + "react": ">=16" } }, "node_modules/@nodelib/fs.scandir": { @@ -3081,79 +3194,229 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "node_modules/@npmcli/config": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.4.0.tgz", + "integrity": "sha512-/fQjIbuNVIT/PbXvw178Tm97bxV0E0nVUFKHivMKtSI2pcs8xKdaWkHJxf9dTI0G/y5hp/KuCvgcUu5HwAtI1w==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/@npmcli/config/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", + "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", + "dev": true, "dependencies": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" }, "engines": { - "node": ">=14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", + "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", "engines": { "node": ">=10" }, @@ -3166,11 +3429,11 @@ } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -3181,11 +3444,11 @@ } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -3196,9 +3459,9 @@ } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz", - "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", "engines": { "node": ">=10" }, @@ -3211,9 +3474,9 @@ } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz", - "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", "engines": { "node": ">=10" }, @@ -3226,9 +3489,9 @@ } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz", - "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", "engines": { "node": ">=10" }, @@ -3241,9 +3504,9 @@ } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz", - "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", "engines": { "node": ">=10" }, @@ -3256,9 +3519,9 @@ } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz", - "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", "engines": { "node": ">=12" }, @@ -3271,18 +3534,18 @@ } }, "node_modules/@svgr/babel-preset": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz", - "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0", - "@svgr/babel-plugin-transform-svg-component": "^6.5.0" + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" }, "engines": { "node": ">=10" @@ -3296,13 +3559,13 @@ } }, "node_modules/@svgr/core": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz", - "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", "dependencies": { - "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.5.0", - "@svgr/plugin-jsx": "^6.5.0", + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" }, @@ -3315,12 +3578,12 @@ } }, "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz", - "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", "dependencies": { - "@babel/types": "^7.18.4", - "entities": "^4.3.0" + "@babel/types": "^7.20.0", + "entities": "^4.4.0" }, "engines": { "node": ">=10" @@ -3331,13 +3594,13 @@ } }, "node_modules/@svgr/plugin-jsx": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz", - "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", "dependencies": { - "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.5.0", - "@svgr/hast-util-to-babel-ast": "^6.5.0", + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", "svg-parser": "^2.0.4" }, "engines": { @@ -3352,9 +3615,9 @@ } }, "node_modules/@svgr/plugin-svgo": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz", - "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", @@ -3368,22 +3631,22 @@ "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "@svgr/core": "^6.0.0" + "@svgr/core": "*" } }, "node_modules/@svgr/webpack": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.0.tgz", - "integrity": "sha512-rM/Z4pwMhqvAXEHoHIlE4SeTb0ToQNmJuBdiHwhP2ZtywyX6XqrgCv2WX7K/UCgNYJgYbekuylgyjnuLUHTcZQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", "dependencies": { - "@babel/core": "^7.18.5", - "@babel/plugin-transform-react-constant-elements": "^7.17.12", - "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "^7.17.12", - "@svgr/core": "^6.5.0", - "@svgr/plugin-jsx": "^6.5.0", - "@svgr/plugin-svgo": "^6.5.0" + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" }, "engines": { "node": ">=10" @@ -3394,14 +3657,14 @@ } }, "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dependencies": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=14.16" } }, "node_modules/@trysound/sax": { @@ -3412,115 +3675,116 @@ "node": ">=10.13.0" } }, - "node_modules/@tsconfig/docusaurus": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", - "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", - "dev": true - }, "node_modules/@types/acorn": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dev": true, "dependencies": { "@types/estree": "*" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", + "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", + "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/eslint": { - "version": "8.4.8", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.8.tgz", - "integrity": "sha512-zUCKQI1bUCTi+0kQs5ZQzQ/XILWRLIlh15FXWNykJ+NG3TMKMVvwwC6GP3DR1Ylga15fB7iAExSzc4PNlR5i3w==", + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz", + "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==", "dependencies": { "@types/estree": "*" } }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/glob": { @@ -3533,10 +3797,15 @@ "@types/node": "*" } }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==" + }, "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", + "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", "dependencies": { "@types/unist": "*" } @@ -3551,64 +3820,92 @@ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/is-empty": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", + "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/lodash": { - "version": "4.14.186", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "dev": true, "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, + "node_modules/@types/mdast/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@types/mdx": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz", + "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==" + }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/minimatch": { "version": "5.1.2", @@ -3617,51 +3914,61 @@ "dev": true }, "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "18.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.5.tgz", - "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==" + "version": "20.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", + "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, + "node_modules/@types/prismjs": { + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz", + "integrity": "sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==" + }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "17.0.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", - "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", + "version": "18.2.47", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", + "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3669,31 +3976,31 @@ } }, "node_modules/@types/react-helmet": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.6.tgz", - "integrity": "sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.11.tgz", + "integrity": "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-router": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", - "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" } }, "node_modules/@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", - "@types/react-router": "*" + "@types/react-router": "^5.1.0" } }, "node_modules/@types/react-router-dom": { @@ -3712,197 +4019,218 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/supports-color": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", + "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", + "dev": true + }, "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dependencies": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -3916,6 +4244,15 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -3948,9 +4285,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -3970,23 +4307,22 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "devOptional": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "engines": { "node": ">=0.4.0" } }, "node_modules/address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "engines": { "node": ">= 10.0.0" } @@ -4035,9 +4371,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -4063,30 +4399,30 @@ } }, "node_modules/algoliasearch": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", - "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.17.0", - "@algolia/cache-common": "4.17.0", - "@algolia/cache-in-memory": "4.17.0", - "@algolia/client-account": "4.17.0", - "@algolia/client-analytics": "4.17.0", - "@algolia/client-common": "4.17.0", - "@algolia/client-personalization": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/logger-console": "4.17.0", - "@algolia/requester-browser-xhr": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/requester-node-http": "4.17.0", - "@algolia/transporter": "4.17.0" + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz", + "integrity": "sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.22.1", + "@algolia/cache-common": "4.22.1", + "@algolia/cache-in-memory": "4.22.1", + "@algolia/client-account": "4.22.1", + "@algolia/client-analytics": "4.22.1", + "@algolia/client-common": "4.22.1", + "@algolia/client-personalization": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/logger-console": "4.22.1", + "@algolia/requester-browser-xhr": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/requester-node-http": "4.22.1", + "@algolia/transporter": "4.22.1" } }, "node_modules/algoliasearch-helper": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", - "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.1.tgz", + "integrity": "sha512-qxAHVjjmT7USVvrM8q6gZGaJlCK1fl4APfdAA7o8O6iXEc68G0xMNrzRkxoB/HmhhvyHnoteS/iMTiHiTcQQcg==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -4160,9 +4496,9 @@ "dev": true }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4195,20 +4531,20 @@ } }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -4226,15 +4562,33 @@ "node": ">=8" } }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -4245,27 +4599,28 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -4277,10 +4632,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "bin": { + "astring": "bin/astring" + } }, "node_modules/asynciterator.prototype": { "version": "1.0.0", @@ -4300,9 +4658,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "funding": [ { "type": "opencollective", @@ -4311,12 +4669,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -4343,53 +4705,22 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 8.9" + "node": ">= 14.15.0" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -4398,34 +4729,17 @@ "object.assign": "^4.1.0" } }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.4", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { @@ -4437,32 +4751,32 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.4" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4473,11 +4787,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -4544,12 +4853,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -4601,9 +4908,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "funding": [ { "type": "opencollective", @@ -4612,13 +4919,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4640,60 +4951,50 @@ "node": ">= 0.8" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "engines": { - "node": ">=8" + "node": ">=14.16" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { - "node": ">=8" + "node": ">=14.16" } }, "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4733,14 +5034,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -4753,9 +5046,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001481", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "funding": [ { "type": "opencollective", @@ -4772,9 +5065,9 @@ ] }, "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4795,10 +5088,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4808,7 +5109,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4818,6 +5118,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4827,6 +5128,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4903,19 +5205,28 @@ } }, "node_modules/ci-info": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", - "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dependencies": { "source-map": "~0.6.0" }, @@ -4923,6 +5234,14 @@ "node": ">= 10.0" } }, + "node_modules/clean-css/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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -5003,29 +5322,29 @@ "node": ">=6" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/clone-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==", "dependencies": { - "mimic-response": "^1.0.0" + "isobject": "^3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", "engines": { "node": ">=6" } }, "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5053,22 +5372,22 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", "engines": { "node": ">=10" } }, "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5082,10 +5401,10 @@ "node": ">= 6" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, "node_modules/compressible": { "version": "2.0.18", @@ -5146,20 +5465,46 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" } }, "node_modules/connect-history-api-fallback": { @@ -5184,17 +5529,17 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 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==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.5.0", @@ -5210,9 +5555,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", - "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", "engines": { "node": ">=12" }, @@ -5221,9 +5566,9 @@ } }, "node_modules/copy-to-clipboard": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz", - "integrity": "sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", "dependencies": { "toggle-selection": "^1.0.6" } @@ -5251,32 +5596,6 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -5289,13 +5608,13 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dependencies": { "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, @@ -5306,29 +5625,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", @@ -5341,9 +5637,9 @@ } }, "node_modules/core-js": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", - "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.0.tgz", + "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5351,11 +5647,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", - "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", + "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.22.2" }, "funding": { "type": "opencollective", @@ -5363,9 +5659,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", - "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.0.tgz", + "integrity": "sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5378,9 +5674,9 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -5392,14 +5688,6 @@ "node": ">=10" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5414,17 +5702,34 @@ } }, "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "engines": { "node": "^10 || ^12 || >=14" }, @@ -5433,18 +5738,18 @@ } }, "node_modules/css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.9.0.tgz", + "integrity": "sha512-3I5Nu4ytWlHvOP6zItjiHlefBNtrH+oehq8tnQa2kO305qpVyx9XNIT1CXIj5bgCJs7qICBCkgCYxQLKPANoLA==", "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.7", + "postcss": "^8.4.31", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.1.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" + "semver": "^7.5.4" }, "engines": { "node": ">= 12.13.0" @@ -5500,53 +5805,12 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, + "node_modules/css-minimizer-webpack-plugin/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==", "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=0.10.0" } }, "node_modules/css-select": { @@ -5576,6 +5840,14 @@ "node": ">=8.0.0" } }, + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -5599,11 +5871,11 @@ } }, "node_modules/cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dependencies": { - "cssnano-preset-default": "^5.2.12", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -5702,9 +5974,9 @@ } }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/d": { "version": "1.0.1", @@ -5716,6 +5988,11 @@ "type": "^1.0.1" } }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5736,7 +6013,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dev": true, "dependencies": { "character-entities": "^2.0.0" }, @@ -5745,25 +6021,29 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decode-named-character-reference/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/deep-extend": { @@ -5781,9 +6061,9 @@ "devOptional": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } @@ -5800,9 +6080,25 @@ } }, "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/define-lazy-prop": { "version": "2.0.0", @@ -5813,10 +6109,11 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -5860,7 +6157,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "engines": { "node": ">=6" } @@ -5874,18 +6170,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -5933,6 +6217,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diff": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", @@ -5953,15 +6249,10 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6028,13 +6319,13 @@ } }, "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -6050,14 +6341,17 @@ } }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dependencies": { "is-obj": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dot-prop/node_modules/is-obj": { @@ -6073,11 +6367,6 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -6089,15 +6378,20 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.630", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", + "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==" + }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -6107,9 +6401,9 @@ } }, "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", + "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6123,18 +6417,10 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", - "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6144,9 +6430,9 @@ } }, "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -6163,26 +6449,26 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", + "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -6190,23 +6476,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -6216,14 +6502,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "define-properties": "^1.2.0", + "define-properties": "^1.2.1", "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", @@ -6233,36 +6519,36 @@ "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" } }, "node_modules/es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -6339,11 +6625,14 @@ } }, "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escape-html": { @@ -6363,27 +6652,28 @@ } }, "node_modules/eslint": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", - "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "devOptional": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.39.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -6391,22 +6681,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -6420,9 +6707,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -6432,25 +6719,25 @@ } }, "node_modules/eslint-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.0.5.tgz", - "integrity": "sha512-1ZzcJwJNfladtuK+uuG/MdC0idc1e3d1vCI2STOq/pLcJBGuao2biWh90vEh2M93zDiNoHJGUIU7UAxupiiHFw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.3.3.tgz", + "integrity": "sha512-nD7K8pWuIrOmsAtUhJRABHdlX81ti5PiD1/2N5sD7gJysgsLKlu3BNHqN/rBlxdf0tjZt0/XAulJz+pguLlLAA==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.10.0", "acorn-jsx": "^5.3.2", - "cosmiconfig": "^7.0.1", - "espree": "^9.4.0", - "estree-util-visit": "^1.2.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "synckit": "^0.8.4", - "tslib": "^2.4.0", + "espree": "^9.6.1", + "estree-util-visit": "^1.2.1", + "remark-mdx": "^2.3.0", + "remark-parse": "^10.0.2", + "remark-stringify": "^10.0.3", + "synckit": "^0.9.0", + "tslib": "^2.6.1", "unified": "^10.1.2", - "unist-util-visit": "^4.1.1", + "unified-engine": "^10.1.0", + "unist-util-visit": "^4.1.2", "uvu": "^0.5.6", - "vfile": "^5.3.4" + "vfile": "^5.3.7" }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -6463,32 +6750,99 @@ "eslint": ">=8.0.0" } }, - "node_modules/eslint-mdx/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "node_modules/eslint-mdx/node_modules/@types/hast": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.9.tgz", + "integrity": "sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/eslint-mdx/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/eslint-mdx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/eslint-mdx/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "node_modules/eslint-mdx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "dev": true, - "engines": { - "node": ">=12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/estree-util-is-identifier-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", + "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eslint-mdx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/eslint-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -6509,262 +6863,167 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "node_modules/eslint-mdx/node_modules/mdast-util-mdx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", + "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-mdx/node_modules/remark-mdx": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", - "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "node_modules/eslint-mdx/node_modules/mdast-util-mdx-expression": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", + "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", "dev": true, "dependencies": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "node_modules/eslint-mdx/node_modules/mdast-util-mdx-jsx": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", "dev": true, "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "mdast-util-from-markdown": "^1.1.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-mdx/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "node_modules/eslint-mdx/node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", + "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "node_modules/eslint-mdx/node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-mdx/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "node_modules/eslint-mdx/node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", "dev": true, "dependencies": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", - "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", - "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.0.5.tgz", - "integrity": "sha512-j2xN97jSlc5IoH94rJTHqYMztl46+hHzyC8Zqjx+OI1Rvv33isyf8xSSBHN6f0z8IJmgPgGsb/fH90JbvKplXg==", + "node_modules/eslint-mdx/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dev": true, "dependencies": { - "eslint-mdx": "^2.0.5", - "eslint-plugin-markdown": "^3.0.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "tslib": "^2.4.0", - "unified": "^10.1.2", - "vfile": "^5.3.4" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "@types/mdast": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/eslint-plugin-mdx/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "node_modules/eslint-mdx/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", + "@types/debug": "^4.0.0", + "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", + "micromark-util-encode": "^1.0.0", "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", + "micromark-util-types": "^1.0.1", "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "node_modules/eslint-mdx/node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", "dev": true, "funding": [ { @@ -6777,2374 +7036,2602 @@ } ], "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", "micromark-util-character": "^1.0.0", "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", "micromark-util-normalize-identifier": "^1.0.0", "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", "micromark-util-subtokenize": "^1.0.0", "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.1", "uvu": "^0.5.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", - "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "node_modules/eslint-mdx/node_modules/micromark-extension-mdx-expression": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", + "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/estree": "^1.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "node_modules/eslint-mdx/node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", + "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-mdx/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "node_modules/eslint-mdx/node_modules/micromark-extension-mdx-md": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", + "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-mdx/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/eslint-mdx/node_modules/micromark-extension-mdxjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", + "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "node_modules/eslint-mdx/node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", + "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/estree": "^1.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "node_modules/eslint-mdx/node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-mdx/node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/eslint-mdx/node_modules/micromark-factory-mdx-expression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", + "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/estree": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/eslint-mdx/node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "devOptional": true, + "node_modules/eslint-mdx/node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", - "devOptional": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node_modules/eslint-mdx/node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "devOptional": true, + "node_modules/eslint-mdx/node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "devOptional": true, + "node_modules/eslint-mdx/node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/eslint-mdx/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", - "devOptional": true, + "node_modules/eslint-mdx/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "node_modules/eslint-mdx/node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/eslint-mdx/node_modules/micromark-util-events-to-acorn": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", + "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^2.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "devOptional": true, + "node_modules/eslint-mdx/node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/eslint-mdx/node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-mdx/node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" + "micromark-util-types": "^1.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" + "node_modules/eslint-mdx/node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/estree-util-is-identifier-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", - "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==", + "node_modules/eslint-mdx/node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/eslint-mdx/node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eslint-mdx/node_modules/remark-mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", + "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", "dev": true, + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/estree-util-visit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", - "integrity": "sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==", + "node_modules/eslint-mdx/node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", "dev": true, "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-mdx/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", - "engines": { - "node": ">=6.0.0" + "node_modules/eslint-mdx/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" }, "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" + "node_modules/eslint-mdx/node_modules/unist-util-position-from-estree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", + "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "node_modules/eslint-mdx/node_modules/unist-util-remove-position": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", + "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", + "dev": true, "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "node_modules/eslint-mdx/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", "dev": true, "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node_modules/eslint-mdx/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/eslint-mdx/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" + "node_modules/eslint-mdx/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "node_modules/eslint-mdx/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" }, - "engines": { - "node": ">= 0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/eslint-plugin-markdown": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", + "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", + "dev": true, "dependencies": { - "safe-buffer": "5.2.1" + "mdast-util-from-markdown": "^0.8.5" }, "engines": { - "node": ">= 0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/eslint-plugin-mdx": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.3.3.tgz", + "integrity": "sha512-x7H3RWOM9zpX07/9Up+qBMB5nWANXHH1y/TeGE2iqbMGmYafhIgYh5FDYRChG4Bxas1MxXBG+B4BsSiDxqwAWA==", + "dev": true, "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "eslint-mdx": "^2.3.3", + "eslint-plugin-markdown": "^3.0.1", + "remark-mdx": "^2.3.0", + "remark-parse": "^10.0.2", + "remark-stringify": "^10.0.3", + "tslib": "^2.6.1", + "unified": "^10.1.2", + "vfile": "^5.3.7" + }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=8.0.0" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "node_modules/eslint-plugin-mdx/node_modules/@types/hast": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.9.tgz", + "integrity": "sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==", "dev": true, "dependencies": { - "type": "^2.7.2" + "@types/unist": "^2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "node_modules/eslint-plugin-mdx/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "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==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-plugin-mdx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" + "node_modules/eslint-plugin-mdx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fast-json-stable-stringify": { + "node_modules/eslint-plugin-mdx/node_modules/estree-util-is-identifier-name": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "devOptional": true - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", + "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" + "node_modules/eslint-plugin-mdx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/eslint-plugin-mdx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" + "node_modules/eslint-plugin-mdx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "devOptional": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "node_modules/eslint-plugin-mdx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://opencollective.com/unified" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", + "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" + "url": "https://opencollective.com/unified" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdx-expression": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", + "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdx-jsx": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "mdast-util-from-markdown": "^1.1.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", + "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", + "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "devOptional": true, + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "devOptional": true - }, - "node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" + "@types/mdast": "^3.0.0" }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "node_modules/eslint-plugin-mdx/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true + "node_modules/eslint-plugin-mdx/node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "vue-template-compiler": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdx-expression": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", + "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" + "@types/estree": "^1.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", + "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdx-md": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", + "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" + "url": "https://opencollective.com/unified" } }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" + "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdxjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", + "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", + "dev": true, + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", + "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", + "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@types/estree": "^1.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "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==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" + "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-mdx-expression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", + "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "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" + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/glob-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", - "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/glob": "^7.1.3" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^7.1.6" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-events-to-acorn": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", + "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^2.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" + "micromark-util-types": "^1.0.0" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" + "node_modules/eslint-plugin-mdx/node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/eslint-plugin-mdx/node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", + "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", + "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/eslint-plugin-mdx/node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "node_modules/eslint-plugin-mdx/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "devOptional": true - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "node_modules/eslint-plugin-mdx/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" + "@types/unist": "^2.0.0" }, - "engines": { - "node": ">=6.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/eslint-plugin-mdx/node_modules/unist-util-position-from-estree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", + "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", + "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/eslint-plugin-mdx/node_modules/unist-util-remove-position": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", + "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", + "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "node_modules/eslint-plugin-mdx/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" + "@types/unist": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" + "node_modules/eslint-plugin-mdx/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" }, - "engines": { - "node": ">= 0.4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/eslint-plugin-mdx/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/eslint-plugin-mdx/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/eslint-plugin-mdx/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "devOptional": true, "dependencies": { - "has-symbols": "^1.0.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "devOptional": true, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "devOptional": true, "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" + "is-glob": "^4.0.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "devOptional": true, "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "devOptional": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "devOptional": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/eslint" } }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "devOptional": true, "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" + "estraverse": "^5.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10" } }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } }, - "node_modules/hast-util-raw/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "@types/estree": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-raw/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/estree-util-value-to-estree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz", + "integrity": "sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA==", "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" + "@types/estree": "^1.0.0", + "is-plain-obj": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" } }, - "node_modules/hpack.js/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==" - }, - "node_modules/hpack.js/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==", + "node_modules/estree-util-visit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", + "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + "node_modules/estree-util-visit/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" + "@types/estree": "^1.0.0" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { - "node": ">= 12" + "node": ">=0.10.0" } }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", "engines": { - "node": ">=8" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" + "@types/node": "*", + "require-like": ">= 0.1.1" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "node": ">= 0.8" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "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, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">=8.0.0" + "node": ">=0.8.x" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, "engines": { - "node": ">=10.17.0" + "node": ">= 0.10.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "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, "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "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==", + "dependencies": { + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=0.10.0" } }, - "node_modules/immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6.0" } }, - "node_modules/import-lazy": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "devOptional": true }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dependencies": { + "punycode": "^1.3.2" } }, - "node_modules/infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", - "engines": { - "node": ">=12" + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dependencies": { + "reusify": "^1.0.4" } }, - "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==", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">= 0.4" + "node": ">=0.8.0" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, "engines": { - "node": ">= 0.10" + "node": ">=0.4.0" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "devOptional": true, "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">= 10" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "engines": { + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "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==" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { - "has-tostringtag": "^1.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "binary-extensions": "^2.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "ms": "2.0.0" } }, - "node_modules/is-ci/node_modules/ci-info": { + "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dependencies": { - "has": "^1.0.3" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "has-tostringtag": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "devOptional": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.12.0 || >=12.0.0" } }, - "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==", + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "devOptional": true + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">=0.10.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "dependencies": { - "has-tostringtag": "^1.0.0" + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10", + "yarn": ">=1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } } }, - "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==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dependencies": { - "is-extglob": "^2.1.1" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" }, "engines": { - "node": ">=10" + "node": ">= 8.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14.17" } }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.x" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">=0.12.0" + "node": ">= 0.6" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=14.14" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } + "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==" }, - "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==", - "dependencies": { - "isobject": "^3.0.1" - }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.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 + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -9153,76 +9640,73 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -9231,2377 +9715,1927 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "which-typed-array": "^1.1.11" + "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": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "call-bind": "^1.0.2" + "is-glob": "^4.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 6" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@types/glob": "^7.1.3" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^7.1.6" } }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dependencies": { - "is-docker": "^2.0.0" + "ini": "2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { + "node_modules/global-dirs/node_modules/ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/iterator.prototype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", - "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", - "dev": true, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dependencies": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/jest-util": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz", - "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dependencies": { - "@jest/types": "^29.2.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-worker": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.1.tgz", - "integrity": "sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "@types/node": "*", - "jest-util": "^29.2.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "isexe": "^2.0.0" }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/joi": { - "version": "17.6.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.4.tgz", - "integrity": "sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "devOptional": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-to-typescript": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.1.tgz", - "integrity": "sha512-F3CYhtA7F3yPbb8vF7sFchk/2dnr1/yTKf8RcvoNpjnh67ZS/ZMH1ElLt5KHAtf2/bymiejLQQszszPWEeTdSw==", - "dev": true, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dependencies": { - "@bcherny/json-schema-ref-parser": "10.0.5-fork", - "@types/json-schema": "^7.0.11", - "@types/lodash": "^4.14.182", - "@types/prettier": "^2.6.1", - "cli-color": "^2.0.2", - "get-stdin": "^8.0.0", - "glob": "^7.1.6", - "glob-promise": "^4.2.2", - "is-glob": "^4.0.3", - "lodash": "^4.17.21", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "mz": "^2.7.0", - "prettier": "^2.6.2" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, - "bin": { - "json2ts": "dist/src/cli.js" + "engines": { + "node": ">=14.16" }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "engines": { - "node": ">=12.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "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==" }, - "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==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "devOptional": true }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=6.0" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "sprintf-js": "~1.0.2" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dependencies": { - "json-buffer": "3.0.0" - } - }, - "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==", + "duplexer": "^0.1.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "package-json": "^6.3.0" + "get-intrinsic": "^1.2.2" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "devOptional": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "engines": { - "node": ">=6.11.5" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8.9.0" + "node": ">= 0.4" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "es5-ext": "~0.10.2" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" + "node_modules/hast-util-raw": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", + "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "node_modules/hast-util-to-estree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", + "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", "dependencies": { - "unist-util-visit": "^2.0.0" + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", - "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", + "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==" + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", + "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", "dependencies": { - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0" + "inline-style-parser": "0.2.2" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.1.tgz", - "integrity": "sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==", - "dev": true, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" + "@types/hast": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dev": true, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "react-is": "^16.7.0" } }, - "node_modules/mdast-util-mdx-jsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.0.tgz", - "integrity": "sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==", - "dev": true, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/hpack.js/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==", + "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/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/hpack.js/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==" }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/hpack.js/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==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", - "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", - "dev": true, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-remove-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", - "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", - "dev": true, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit": { + "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "dev": true, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8" } }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.0.tgz", - "integrity": "sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==", - "dev": true, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dev": true, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" } }, - "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10.19.0" } }, - "node_modules/mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", - "dev": true, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "engines": { + "node": ">= 4" } }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "dev": true, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/immer" } }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "dev": true, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-to-markdown/node_modules/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dependencies": { - "fs-monkey": "^1.0.3" - }, + "node_modules/infima": { + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, + "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==", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "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" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "engines": { - "node": ">= 0.6" + "node": ">= 0.10" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "loose-envify": "^1.0.0" } }, - "node_modules/micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/micromark-extension-mdx-expression": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", - "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", - "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { - "@types/acorn": "^4.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-extension-mdx-md": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", - "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "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==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "dependencies": { - "micromark-util-types": "^1.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-extension-mdxjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", - "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" + "has-bigints": "^1.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", - "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, "funding": [ { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "type": "consulting", + "url": "https://feross.org/support" } ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "engines": { + "node": ">=4" } }, - "node_modules/micromark-factory-mdx-expression": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", - "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "node_modules/micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==", + "dev": true + }, + "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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.0.tgz", - "integrity": "sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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==", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", - "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, "engines": { - "node": ">=8.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, + "node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">= 0.6" + "node": ">=0.12.0" } }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { - "mime-db": "~1.33.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "engines": { "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dependencies": { - "schema-utils": "^4.0.0" - }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "engines": { - "node": ">= 12.13.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "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==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "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 + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "@types/estree": "*" } }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "call-bind": "^1.0.2" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "which-typed-array": "^1.1.11" }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, - "bin": { - "mustache": "bin/mustache" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "devOptional": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "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 - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "whatwg-url": "^5.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=8" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", "engines": { - "node": ">= 6.13.0" + "node": ">=12" } }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, - "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==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/isaacs" }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "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==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, + "node_modules/joi": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" } }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-to-typescript": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.1.tgz", + "integrity": "sha512-F3CYhtA7F3yPbb8vF7sFchk/2dnr1/yTKf8RcvoNpjnh67ZS/ZMH1ElLt5KHAtf2/bymiejLQQszszPWEeTdSw==", + "dev": true, "dependencies": { - "ee-first": "1.1.1" + "@bcherny/json-schema-ref-parser": "10.0.5-fork", + "@types/json-schema": "^7.0.11", + "@types/lodash": "^4.14.182", + "@types/prettier": "^2.6.1", + "cli-color": "^2.0.2", + "get-stdin": "^8.0.0", + "glob": "^7.1.6", + "glob-promise": "^4.2.2", + "is-glob": "^4.0.3", + "lodash": "^4.17.21", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.6.2" + }, + "bin": { + "json2ts": "dist/src/cli.js" }, "engines": { - "node": ">= 0.8" + "node": ">=12.0.0" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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==", + "devOptional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "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==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "wrappy": "1" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "package-json": "^8.1.0" }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "devOptional": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-plugin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.1.0.tgz", + "integrity": "sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==", + "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "@npmcli/config": "^6.0.0", + "import-meta-resolve": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { - "p-limit": "^3.0.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.9.0" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "aggregate-error": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" @@ -11610,3410 +11644,4760 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "devOptional": true }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { - "semver": "bin/semver.js" + "loose-envify": "cli.js" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dependencies": { - "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "yallist": "^3.0.2" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, + "es5-ext": "~0.10.2" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/mdast-util-directive/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "@types/unist": "*" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" + "node_modules/mdast-util-directive/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/mdast-util-directive/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" + "node_modules/mdast-util-directive/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "node_modules/mdast-util-directive/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dependencies": { - "isarray": "0.0.1" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" + "node_modules/mdast-util-directive/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, + "node_modules/mdast-util-directive/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/mdast-util-directive/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "find-up": "^4.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/mdast-util-directive/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-directive/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/mdast-util-directive/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "node_modules/mdast-util-directive/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-directive/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-directive/node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/mdast-util-directive/node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", "dependencies": { - "p-limit": "^2.2.0" + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "find-up": "^3.0.0" - }, + "@types/unist": "*" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@types/unist": "^2.0.2" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dependencies": { - "p-try": "^2.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/mdast-util-frontmatter/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "p-limit": "^2.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "node_modules/mdast-util-frontmatter/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/mdast-util-frontmatter/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "node_modules/mdast-util-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-frontmatter/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" } }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "node_modules/mdast-util-gfm-footnote/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/unist": "*" } }, - "node_modules/postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/unist": "*" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/mdast-util-gfm-table/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "@types/unist": "*" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/mdast-util-gfm-table/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/unist": "*" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/unist": "*" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/mdast-util-gfm/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/mdast-util-gfm/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "node_modules/mdast-util-gfm/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "node_modules/mdast-util-gfm/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "@types/unist": "*" } }, - "node_modules/postcss-sort-media-queries": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", - "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.4.16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/mdast-util-mdx-expression/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/prebuild-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", - "dev": true, + "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "debug": "^4.1.1", - "glob": "^7.1.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8.9.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "devOptional": true, - "engines": { - "node": ">= 0.8.0" - } + "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/prepend-http": { + "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-types": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" + "node_modules/mdast-util-mdx-jsx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz", + "integrity": "sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/mdast-util-mdx-jsx/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" + "@types/unist": "*" } }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "peerDependencies": { - "react": ">=0.14.9" + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" + "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/process-nextick-args": { + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { "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==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/mdast-util-mdx-jsx/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "inherits": "~2.0.3" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ] }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", "dependencies": { - "safe-buffer": "^5.1.0" + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/mdast-util-mdx/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@types/unist": "*" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" + "node_modules/mdast-util-mdx/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/mdast-util-mdx/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdx/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/rc/node_modules/strip-json-comments": { + "node_modules/mdast-util-mdx/node_modules/micromark-util-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/mdast-util-mdx/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-mdx/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "peerDependencies": { - "react": ">=16.3.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "node_modules/mdast-util-mdxjs-esm/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "@types/unist": "*" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", - "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { - "copy-to-clipboard": "^3.3.1", - "prop-types": "^15.8.1" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "react": "^15.3.0 || 16 || 17 || 18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "node_modules/mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "node_modules/mdast-util-phrasing/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + "@types/unist": "*" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, - "peerDependencies": { - "react": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "node_modules/mdast-util-to-hast/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" + "@types/unist": "*" } }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, - "peerDependencies": { - "react": ">=15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" + "@types/unist": "*" } }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@types/mdast": "^4.0.0" }, - "peerDependencies": { - "react": ">=15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-textarea-autosize": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", - "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", + "node_modules/mdast-util-to-string/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/unist": "*" } }, - "node_modules/react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", - "dependencies": { - "clsx": "^1.1.1" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dependencies": { - "picomatch": "^2.2.1" + "fs-monkey": "^1.0.4" }, "engines": { - "node": ">=8.10.0" + "node": ">= 4.0.0" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "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==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "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" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dependencies": { - "@babel/runtime": "^7.8.4" + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "node_modules/regexpu-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", - "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "node_modules/micromark-core-commonmark/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", + "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", "dependencies": { - "jsesc": "~0.5.0" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" }, - "bin": { - "regjsparser": "bin/parser" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } + "node_modules/micromark-extension-directive/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" + "node_modules/micromark-extension-directive/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" + "node_modules/micromark-extension-directive/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "node_modules/micromark-extension-directive/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "node_modules/micromark-extension-directive/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, + "node_modules/micromark-extension-directive/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/micromark-extension-directive/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/remark-mdx/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==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/micromark-extension-directive/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/remark-mdx/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "node_modules/micromark-extension-directive/node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", "dependencies": { "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-mdx/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", - "dev": true, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/remark-stringify/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/remark-stringify/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/remark-stringify/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.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==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } + ] }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "lowercase-keys": "^1.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + "node_modules/micromark-extension-gfm-tagfilter/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "bin": { - "rtlcss": "bin/rtlcss.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "dependencies": { - "queue-microtask": "^1.2.2" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", + "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "tslib": "^2.1.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", - "dev": true, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ] }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", + "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/select-hose": { + "node_modules/micromark-extension-mdx-md/node_modules/micromark-util-types": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "dependencies": { - "node-forge": "^1" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ms": "2.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { + "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/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==" + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } + "node_modules/micromark-factory-destination/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "randombytes": "^2.1.0" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "node_modules/micromark-factory-label/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "node_modules/micromark-factory-label/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", + "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/serve-index/node_modules/ms": { + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-types": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/serve-index/node_modules/setprototypeof": { + "node_modules/micromark-factory-space": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { + "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" + "node_modules/micromark-factory-title/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } + "node_modules/micromark-factory-title/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "engines": { - "node": ">= 6.3.0" + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.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==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } + "node_modules/micromark-util-classify-character/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + "node_modules/micromark-util-combine-extensions/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", - "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" + "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "safe-buffer": "~5.2.0" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/string-replace-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", - "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", - "dev": true, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "peerDependencies": { - "webpack": "^5" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/string-replace-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } + "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/micromark-util-decode-string/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", + "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, + "node_modules/micromark-util-events-to-acorn/node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", - "dev": true, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/stringify-entities/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/micromark-util-resolve-all/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.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==", - "engines": { - "node": ">=0.10.0" + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/strip-final-newline": { + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=6" + "node": ">=8.6" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "mime-db": "~1.33.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.6" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "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==", + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/mini-css-extract-plugin": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.7.tgz", + "integrity": "sha512-+0n11YGyRavUR3IlaOzJ0/4Il1avMvJ1VJfhWfCn24ITQXhRr1gghbhhrda6tgtNcpZaWKdSuwKq20Jb7fnlyw==", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": "*" } }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", - "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "engines": { - "node": ">=6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { - "terser": "bin/terser" + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "node": ">=4" } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "engines": { - "node": ">= 10.13.0" + "node": ">=10" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true, - "dependencies": { - "any-promise": "^1.0.0" + "bin": { + "mustache": "bin/mustache" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "dependencies": { - "thenify": ">= 3.1.0 < 4" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=0.8" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "devOptional": true }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "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 }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/node-emoji": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", + "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { - "node": ">=6" + "node": ">= 6.13.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, "dependencies": { - "is-number": "^7.0.0" + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "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==", "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", - "deprecated": "Use String.prototype.trim() instead" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "devOptional": true, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { - "prelude-ls": "^1.2.1" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, "engines": { - "node": ">=12.20" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.6" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "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==", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { - "mime-db": "1.52.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -15022,12814 +16406,5062 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" }, "engines": { - "node": ">=12.20" + "node": ">= 0.8" } }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { - "node": "*" + "node": ">= 0.8" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, + "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==", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "devOptional": true, "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "engines": { - "node": ">=4" + "node": ">=12.20" } }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unified/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unified/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dependencies": { - "crypto-random-string": "^2.0.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { "node": ">=8" } }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" } }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/unist-util-position-from-estree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", - "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/parse-entities/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "unist-util-visit": "^2.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dependencies": { - "@types/unist": "^2.0.2" + "entities": "^4.4.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "domhandler": "^5.0.2", + "parse5": "^7.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/unist-util-visit-parents": { + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "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==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": "14 || >=16.14" } }, - "node_modules/unpipe": { + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": ">= 0.8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "find-up": "^6.3.0" }, - "bin": { - "browserslist-lint": "cli.js" + "engines": { + "node": ">=14.16" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-notifier/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/update-notifier/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-notifier/node_modules/widest-line": { + "node_modules/pkg-up": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dependencies": { - "string-width": "^4.0.0" + "find-up": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=6" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, "engines": { "node": ">=6" } }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } + "engines": { + "node": ">=6" } }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "mime-db": "1.52.0" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14" } }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dependencies": { - "prepend-http": "^2.0.0" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.2.15" } }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "postcss": "^8.2.15" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.2.15" } }, - "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==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "engines": { - "node": ">= 4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "engines": { - "node": ">= 0.4.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dev": true, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", - "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", - "dev": true, + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "dev": true, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dependencies": { - "@types/unist": "^2.0.0" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dependencies": { - "@types/unist": "^2.0.0" + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dependencies": { - "minimalistic-assert": "^1.0.0" + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/web-tree-sitter": { - "version": "0.20.8", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", - "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": "^10 || ^12 || >= 14" }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", - "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", + "node_modules/postcss-modules-scope": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", + "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "icss-utils": "^5.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "postcss": "^8.1.0" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "node_modules/postcss-normalize-display-values": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dependencies": { - "fast-deep-equal": "^3.1.3" + "postcss-value-parser": "^4.2.0" }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dependencies": { - "mime-db": "1.52.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 12.13.0" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "node_modules/postcss-normalize-url": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dependencies": { - "fast-deep-equal": "^3.1.3" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "ajv": "^8.8.2" + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 12.13.0" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=10.0.0" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "postcss": "^8.2.15" } }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", - "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", - "requires": { - "@algolia/autocomplete-shared": "1.7.4" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", - "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", - "requires": { - "@algolia/autocomplete-shared": "1.7.4" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", - "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", - "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", - "requires": { - "@algolia/cache-common": "4.17.0" - } - }, - "@algolia/cache-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", - "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" - }, - "@algolia/cache-in-memory": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", - "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", - "requires": { - "@algolia/cache-common": "4.17.0" - } - }, - "@algolia/client-account": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", - "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", - "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "@algolia/client-analytics": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", - "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", - "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "@algolia/client-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", - "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", - "requires": { - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "@algolia/client-personalization": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", - "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", - "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "@algolia/client-search": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", - "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", - "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", - "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" - }, - "@algolia/logger-console": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", - "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", - "requires": { - "@algolia/logger-common": "4.17.0" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", - "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", - "requires": { - "@algolia/requester-common": "4.17.0" - } - }, - "@algolia/requester-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", - "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" - }, - "@algolia/requester-node-http": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", - "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", - "requires": { - "@algolia/requester-common": "4.17.0" - } - }, - "@algolia/transporter": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", - "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", - "requires": { - "@algolia/cache-common": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/requester-common": "4.17.0" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" - }, - "@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", - "requires": { - "@babel/types": "^7.19.4", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", - "requires": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "requires": { - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", - "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", - "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", - "requires": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", - "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", - "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", - "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", - "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-typescript": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", - "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", - "requires": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.19.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.19.4", - "@babel/plugin-transform-classes": "^7.19.0", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.19.4", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/runtime-corejs3": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", - "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcherny/json-schema-ref-parser": { - "version": "10.0.5-fork", - "resolved": "https://registry.npmjs.org/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz", - "integrity": "sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@docsearch/css": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", - "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" - }, - "@docsearch/react": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", - "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", - "requires": { - "@algolia/autocomplete-core": "1.7.4", - "@algolia/autocomplete-preset-algolia": "1.7.4", - "@docsearch/css": "3.3.3", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", - "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", - "requires": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", - "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", - "requires": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/logger": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", - "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", - "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", - "requires": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz", - "integrity": "sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==", - "requires": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz", - "integrity": "sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz", - "integrity": "sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz", - "integrity": "sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz", - "integrity": "sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz", - "integrity": "sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", - "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-tag-manager": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz", - "integrity": "sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz", - "integrity": "sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/preset-classic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz", - "integrity": "sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/plugin-debug": "2.4.0", - "@docusaurus/plugin-google-analytics": "2.4.0", - "@docusaurus/plugin-google-gtag": "2.4.0", - "@docusaurus/plugin-google-tag-manager": "2.4.0", - "@docusaurus/plugin-sitemap": "2.4.0", - "@docusaurus/theme-classic": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-search-algolia": "2.4.0", - "@docusaurus/types": "2.4.0" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/theme-classic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz", - "integrity": "sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==", - "requires": { - "@docusaurus/core": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-translations": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.43", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.0.tgz", - "integrity": "sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==", - "requires": { - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz", - "integrity": "sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==", - "requires": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-translations": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-translations": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz", - "integrity": "sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", - "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - } - }, - "@docusaurus/utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", - "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", - "requires": { - "@docusaurus/logger": "2.4.0", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - } - }, - "@docusaurus/utils-common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", - "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", - "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", - "requires": { - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "devOptional": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", - "devOptional": true - }, - "@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", - "devOptional": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.1", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "devOptional": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true - } - } - }, - "@eslint/js": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", - "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", - "devOptional": true - }, - "@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "dependencies": { - "@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==" - } - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", - "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.0" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", - "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", - "requires": { - "prop-types": "^15.8.1" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "devOptional": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "devOptional": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "devOptional": true - }, - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "requires": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz", - "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz", - "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz", - "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz", - "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz", - "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz", - "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0", - "@svgr/babel-plugin-transform-svg-component": "^6.5.0" - } - }, - "@svgr/core": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz", - "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==", - "requires": { - "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.5.0", - "@svgr/plugin-jsx": "^6.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz", - "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==", - "requires": { - "@babel/types": "^7.18.4", - "entities": "^4.3.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz", - "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==", - "requires": { - "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.5.0", - "@svgr/hast-util-to-babel-ast": "^6.5.0", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz", - "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.0.tgz", - "integrity": "sha512-rM/Z4pwMhqvAXEHoHIlE4SeTb0ToQNmJuBdiHwhP2ZtywyX6XqrgCv2WX7K/UCgNYJgYbekuylgyjnuLUHTcZQ==", - "requires": { - "@babel/core": "^7.18.5", - "@babel/plugin-transform-react-constant-elements": "^7.17.12", - "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "^7.17.12", - "@svgr/core": "^6.5.0", - "@svgr/plugin-jsx": "^6.5.0", - "@svgr/plugin-svgo": "^6.5.0" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@tsconfig/docusaurus": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", - "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", - "dev": true - }, - "@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/eslint": { - "version": "8.4.8", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.8.tgz", - "integrity": "sha512-zUCKQI1bUCTi+0kQs5ZQzQ/XILWRLIlh15FXWNykJ+NG3TMKMVvwwC6GP3DR1Ylga15fB7iAExSzc4PNlR5i3w==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/lodash": { - "version": "4.14.186", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", - "dev": true - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "@types/node": { - "version": "18.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.5.tgz", - "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "17.0.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", - "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-helmet": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.6.tgz", - "integrity": "sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-router": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", - "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - } - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "devOptional": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", - "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", - "requires": { - "@algolia/cache-browser-local-storage": "4.17.0", - "@algolia/cache-common": "4.17.0", - "@algolia/cache-in-memory": "4.17.0", - "@algolia/client-account": "4.17.0", - "@algolia/client-analytics": "4.17.0", - "@algolia/client-common": "4.17.0", - "@algolia/client-personalization": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/logger-console": "4.17.0", - "@algolia/requester-browser-xhr": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/requester-node-http": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "algoliasearch-helper": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", - "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "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==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001481", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==" - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", - "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" - }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - } - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "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==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-text-to-clipboard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", - "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==" - }, - "copy-to-clipboard": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz", - "integrity": "sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", - "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==" - }, - "core-js-compat": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", - "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", - "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==" - }, - "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==" - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} - }, - "css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", - "requires": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "requires": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dev": true, - "requires": { - "character-entities": "^2.0.0" - }, - "dependencies": { - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "devOptional": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "requires": { - "address": "^1.0.1", - "debug": "4" - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "devOptional": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", - "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - } - }, - "es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", - "dev": true, - "requires": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" - } - }, - "es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "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, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "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, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", - "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", - "devOptional": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.39.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "devOptional": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "devOptional": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true - } - } - }, - "eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "dev": true, - "requires": {} - }, - "eslint-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.0.5.tgz", - "integrity": "sha512-1ZzcJwJNfladtuK+uuG/MdC0idc1e3d1vCI2STOq/pLcJBGuao2biWh90vEh2M93zDiNoHJGUIU7UAxupiiHFw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "cosmiconfig": "^7.0.1", - "espree": "^9.4.0", - "estree-util-visit": "^1.2.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "synckit": "^0.8.4", - "tslib": "^2.4.0", - "unified": "^10.1.2", - "unist-util-visit": "^4.1.1", - "uvu": "^0.5.6", - "vfile": "^5.3.4" - }, - "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true - }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "remark-mdx": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", - "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", - "dev": true, - "requires": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - } - }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "eslint-plugin-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", - "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^0.8.5" - } - }, - "eslint-plugin-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.0.5.tgz", - "integrity": "sha512-j2xN97jSlc5IoH94rJTHqYMztl46+hHzyC8Zqjx+OI1Rvv33isyf8xSSBHN6f0z8IJmgPgGsb/fH90JbvKplXg==", - "dev": true, - "requires": { - "eslint-mdx": "^2.0.5", - "eslint-plugin-markdown": "^3.0.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "tslib": "^2.4.0", - "unified": "^10.1.2", - "vfile": "^5.3.4" - }, - "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true - }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "remark-mdx": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", - "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", - "dev": true, - "requires": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - } - }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "devOptional": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", - "devOptional": true - }, - "espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", - "devOptional": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "devOptional": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-util-is-identifier-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", - "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==", - "dev": true - }, - "estree-util-visit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", - "integrity": "sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" - } - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "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, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - } - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "devOptional": true - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "devOptional": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "devOptional": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "devOptional": true - }, - "flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", - "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", - "dev": true, - "requires": { - "@types/glob": "^7.1.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "devOptional": true - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "dependencies": { - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "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==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "requires": { - "queue": "6.0.2" - } - }, - "immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - } - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "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 - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" + "node_modules/postcss-sort-media-queries": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "dependencies": { + "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" } }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "iterator.prototype": { + "node_modules/prebuild-webpack-plugin": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", - "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", "dev": true, - "requires": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" + "dependencies": { + "debug": "^4.1.1", + "glob": "^7.1.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8.9.0" } }, - "jest-util": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz", - "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==", - "requires": { - "@jest/types": "^29.2.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "devOptional": true, + "engines": { + "node": ">= 0.8.0" } }, - "jest-worker": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.1.tgz", - "integrity": "sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==", - "requires": { - "@types/node": "*", - "jest-util": "^29.2.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.6.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.4.tgz", - "integrity": "sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "devOptional": true - }, - "js-tokens": { + "node_modules/pretty-error": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } }, - "json-parse-even-better-errors": { + "node_modules/prism-react-renderer": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-to-typescript": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.1.tgz", - "integrity": "sha512-F3CYhtA7F3yPbb8vF7sFchk/2dnr1/yTKf8RcvoNpjnh67ZS/ZMH1ElLt5KHAtf2/bymiejLQQszszPWEeTdSw==", - "dev": true, - "requires": { - "@bcherny/json-schema-ref-parser": "10.0.5-fork", - "@types/json-schema": "^7.0.11", - "@types/lodash": "^4.14.182", - "@types/prettier": "^2.6.1", - "cli-color": "^2.0.2", - "get-stdin": "^8.0.0", - "glob": "^7.1.6", - "glob-promise": "^4.2.2", - "is-glob": "^4.0.3", - "lodash": "^4.17.21", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "mz": "^2.7.0", - "prettier": "^2.6.2" + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", + "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "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==", - "devOptional": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" } }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "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==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + "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==" }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "devOptional": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "node_modules/property-information": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", + "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "lines-and-columns": { + "node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", - "dev": true + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" } }, - "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, - "requires": { - "es5-ext": "~0.10.2" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "safe-buffer": "^5.1.0" } }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "engines": { + "node": ">= 0.6" + } }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "requires": { - "unist-util-remove": "^2.0.0" + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { - "unist-util-visit": "^2.0.0" + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" } }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "mdast-util-mdx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", - "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", - "dev": true, - "requires": { - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0" + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" } }, - "mdast-util-mdx-expression": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.1.tgz", - "integrity": "sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "mdast-util-mdx-jsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.0.tgz", - "integrity": "sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "dependencies": { - "ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true - }, - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true - }, - "character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true - }, - "character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true - }, - "is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true - }, - "is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, - "requires": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - } - }, - "is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true - }, - "is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true - }, - "parse-entities": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", - "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-remove-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", - "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } + "node_modules/react-async": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", + "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", + "peerDependencies": { + "react": ">=16.3.1" } }, - "mdast-util-mdxjs-esm": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.0.tgz", - "integrity": "sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" + "node_modules/react-copy-to-clipboard": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "dependencies": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dependencies": { - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" } }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" } }, - "mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", - "dev": true - } + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" } }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "requires": { - "fs-monkey": "^1.0.3" + "node_modules/react-json-view-lite": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.2.1.tgz", + "integrity": "sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" } }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "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" + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" } }, - "merge-descriptors": { + "node_modules/react-loadable-ssr-addon-v5-slorber": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "dev": true, - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "node_modules/react-toastify": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", + "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" } }, - "micromark-extension-mdx-expression": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", - "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", - "dev": true, - "requires": { - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/react-toastify/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" } }, - "micromark-extension-mdx-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", - "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, - "requires": { - "@types/acorn": "^4.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "micromark-extension-mdx-md": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", - "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "micromark-extension-mdxjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", - "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", - "dev": true, - "requires": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" + "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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "micromark-extension-mdxjs-esm": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", - "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", - "dev": true, - "requires": { - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "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==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" } }, - "micromark-factory-mdx-expression": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", - "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" } }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" } }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" } }, - "micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "dev": true, - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "dev": true + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } }, - "micromark-util-events-to-acorn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.0.tgz", - "integrity": "sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==", - "dev": true, - "requires": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" + "node_modules/remark-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", + "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } - } + "@types/unist": "*" } }, - "micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", - "dev": true - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", + "dependencies": { + "@types/mdast": "^4.0.2", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.0", + "unified": "^11.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" + "node_modules/remark-emoji/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" } }, - "micromark-util-sanitize-uri": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", - "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/remark-frontmatter/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" } }, - "micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", - "dev": true - }, - "micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" + "node_modules/remark-gfm/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "requires": { - "schema-utils": "^4.0.0" - }, + "node_modules/remark-gfm/node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" + "node_modules/remark-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.0.tgz", + "integrity": "sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "node_modules/remark-parse/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" } }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "devOptional": true + "node_modules/remark-parse/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "node_modules/remark-parse/node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "node_modules/remark-parse/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "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 + "node_modules/remark-parse/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" + "node_modules/remark-rehype/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" } }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" + "node_modules/remark-stringify": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", + "integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-releases": { + "node_modules/remark-stringify/node_modules/@types/unist": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" + "node_modules/remark-stringify/node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" + "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "node_modules/remark-stringify/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" } }, - "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==" + "node_modules/remark-stringify/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "node_modules/remark-stringify/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "node_modules/remark-stringify/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "node_modules/remark-stringify/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "node_modules/remark-stringify/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "node_modules/remark-stringify/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "node_modules/remark-stringify/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/remark-stringify/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" } }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "devOptional": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, - "p-map": { + "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" } }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + "node_modules/rtl-detect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", + "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==" }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" + "node_modules/rtlcss": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz", + "integrity": "sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" } }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { + "node_modules/safe-array-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "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==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, + "node_modules/safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, - "postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" } }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "postcss-discard-duplicates": { + "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} + "node_modules/search-insights": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.13.0.tgz", + "integrity": "sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==", + "peer": true }, - "postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "requires": { - "postcss-selector-parser": "^6.0.5" + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" } }, - "postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - } + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, - "postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { - "postcss-selector-parser": "^6.0.5" + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/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==" }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" } }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" } }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" + "node_modules/serve-handler": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", + "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" } }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" } }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" } }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" } }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "postcss-sort-media-queries": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", - "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", - "requires": { - "sort-css-media-queries": "2.1.0" + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { - "postcss-selector-parser": "^6.0.5" + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" } }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "requires": {} + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, - "prebuild-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-H5/VnSl7KZm3NCGj1+8BrBHu0Bn9xzLREdpeE4TRYyp4t4qFnYPExzozk2sfD/CLJRGIuyOFrXbXgJJ4ETdz/g==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "glob": "^7.1.5", - "minimatch": "^3.0.4" + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" } }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "devOptional": true + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, - "prepend-http": { + "node_modules/skin-tone": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" - }, - "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "requires": {} + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } }, - "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==" + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "node_modules/source-map-support/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==", + "engines": { + "node": ">=0.10.0" } }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "pump": { + "node_modules/spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, + "node_modules/string-replace-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", + "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", + "dev": true, "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "peerDependencies": { + "webpack": "^5" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, + "node_modules/string-replace-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==", - "requires": {} - }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "react-copy-to-clipboard": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", - "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", - "requires": { - "copy-to-clipboard": "^3.3.1", - "prop-types": "^15.8.1" - } + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" }, - "dependencies": { - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - } + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "requires": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { - "@babel/runtime": "^7.10.3" + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { - "@babel/runtime": "^7.1.2" + "node_modules/stringify-entities/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "react-textarea-autosize": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", - "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", - "requires": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", - "requires": { - "clsx": "^1.1.1" + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "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==", + "engines": { + "node": ">=0.10.0" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" } }, - "reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" + "node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dependencies": { + "inline-style-parser": "0.1.1" } }, - "reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "requires": { - "@babel/runtime": "^7.8.4" + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "regexpu-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", - "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "node_modules/svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "requires": { - "rc": "1.2.8" + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" + "node_modules/svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, + "node_modules/svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "remark-emoji": { + "node_modules/svgo/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "requires": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" + "node_modules/synckit": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", + "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" } }, - "remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - } + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dependencies": { - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "esbuild": { + "optional": true }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "uglify-js": { + "optional": true } } }, - "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==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "requires": { - "lowercase-keys": "^1.0.0" + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "requires": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "requires": { - "tslib": "^2.1.0" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, - "requires": { - "mri": "^1.1.0" + "dependencies": { + "any-promise": "^1.0.0" } }, - "safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" } }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "select-hose": { + "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" } }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, + "node_modules/to-vfile": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.4.tgz", + "integrity": "sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } + "is-buffer": "^2.0.0", + "vfile": "^5.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "requires": { - "randombytes": "^2.1.0" - } + "node_modules/to-vfile/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, + "node_modules/to-vfile/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, "dependencies": { - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - } + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "node_modules/to-vfile/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "node_modules/to-vfile/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "shallow-clone": { + "node_modules/totalist": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "engines": { + "node": ">=6" } }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "devOptional": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } }, - "sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" } }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - } + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + "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 }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" } }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "engines": { + "node": ">=4" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } }, - "std-env": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", - "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "string-replace-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", - "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", + "node_modules/unified-engine": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-10.1.0.tgz", + "integrity": "sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "@types/concat-stream": "^2.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/node": "^18.0.0", + "@types/unist": "^2.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "fault": "^2.0.0", + "glob": "^8.0.0", + "ignore": "^5.0.0", + "is-buffer": "^2.0.0", + "is-empty": "^1.0.0", + "is-plain-obj": "^4.0.0", + "load-plugin": "^5.0.0", + "parse-json": "^6.0.0", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0", + "yaml": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "node_modules/unified-engine/node_modules/@types/node": { + "version": "18.19.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.6.tgz", + "integrity": "sha512-X36s5CXMrrJOs2lQCdDF68apW4Rfx9ixYMawlepwmE4Anezv/AV2LSpKD1Ub8DAc+urp5bk0BGZ6NtmBitfnsg==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "undici-types": "~5.26.4" } }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "node_modules/unified-engine/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/unified-engine/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "node_modules/unified-engine/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "node_modules/unified-engine/node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "node_modules/unified-engine/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "node_modules/unified-engine/node_modules/parse-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", + "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", "dev": true, - "requires": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" + "dependencies": { + "@babel/code-frame": "^7.16.0", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^2.3.1", + "lines-and-columns": "^2.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified-engine/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, "dependencies": { - "character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true - } + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "node_modules/unified-engine/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" + "node_modules/unified-engine/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" } }, - "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==" + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "node_modules/unist-util-inspect": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.2.tgz", + "integrity": "sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "node_modules/unist-util-inspect/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "synckit": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", - "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", - "dev": true, - "requires": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.4.0" + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" + "node_modules/update-notifier/node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "node_modules/update-notifier/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" } }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" - }, - "trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "devOptional": true, - "requires": { - "prelude-ls": "^1.2.1" + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } } }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - } + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } + "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==" }, - "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" } }, - "typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" - }, - "ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==" + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" } }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" } }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-position-from-estree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", - "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "node_modules/vfile-reporter": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.5.tgz", + "integrity": "sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==", "dev": true, - "requires": { - "@types/unist": "^2.0.0" + "dependencies": { + "@types/supports-color": "^8.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile": "^5.0.0", + "vfile-message": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "requires": { - "unist-util-is": "^4.0.0" - } + "node_modules/vfile-reporter/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" + "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { + "node_modules/vfile-reporter/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { + "node_modules/vfile-reporter/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "node_modules/vfile-sort": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.1.tgz", + "integrity": "sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==", + "dev": true, + "dependencies": { + "vfile": "^5.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } + "node_modules/vfile-sort/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, + "node_modules/vfile-sort/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, + "node_modules/vfile-sort/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "requires": { - "prepend-http": "^2.0.0" + "node_modules/vfile-sort/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} - }, - "use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" + "node_modules/vfile-statistics": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.1.tgz", + "integrity": "sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==", + "dev": true, + "dependencies": { + "vfile": "^5.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "node_modules/vfile-statistics/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, - "uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "node_modules/vfile-statistics/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", "dev": true, - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, "dependencies": { - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true - } + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vfile": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", - "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", + "node_modules/vfile-statistics/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" }, - "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" - }, - "vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "node_modules/vfile-statistics/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" }, - "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - } + "node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true }, - "watchpack": { + "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wbuf": { + "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { + "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "web-tree-sitter": { + "node_modules/web-tree-sitter": { "version": "0.20.8", "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==" }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "requires": { + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", "@webassemblyjs/ast": "^1.11.5", @@ -27839,7 +21471,7 @@ "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", + "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -27849,154 +21481,123 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-bundle-analyzer": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", - "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", - "requires": { + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "webpack-dev-middleware": { + "node_modules/webpack-dev-middleware": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "requires": { + "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" } }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "requires": { + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", @@ -28009,6 +21610,7 @@ "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", @@ -28018,128 +21620,201 @@ "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "ws": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", - "requires": {} + "utf-8-validate": { + "optional": true } } }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" } }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "webpackbar": { + "node_modules/webpackbar": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "requires": { + "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.3", "pretty-time": "^1.1.0", "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" } }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-builtin-type": { + "node_modules/which-builtin-type": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, - "requires": { + "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", "is-async-function": "^2.0.0", @@ -28153,148 +21828,252 @@ "which-collection": "^1.0.1", "which-typed-array": "^1.1.9" }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-collection": { + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, - "requires": { + "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "widest-line": { + "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { + "dependencies": { "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "devOptional": true + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, - "wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "requires": { + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "wrappy": { + "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==" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { + "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "xml-js": { + "node_modules/xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { + "dependencies": { "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/docs/package.json b/docs/package.json index aa48af24d3c..7f468cb53d8 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,18 +15,18 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^2.4.0", - "@docusaurus/preset-classic": "^2.4.0", + "@docusaurus/core": "^3.0.0", + "@docusaurus/preset-classic": "^3.0.0", "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@mdx-js/react": "^1.6.22", + "@mdx-js/react": "^3.0.0", "classnames": "^2.2.6", "js-yaml": "^4.1.0", - "react": "^17.0.2", + "react": "^18.0.0", "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", - "react-dom": "^17.0.2", + "react-dom": "^18.0.0", "react-toastify": "^7.0.4", "web-tree-sitter": "^0.20.8" }, @@ -43,11 +43,11 @@ ] }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.4.0", - "@docusaurus/types": "^2.4.0", - "@tsconfig/docusaurus": "^1.0.7", + "@docusaurus/module-type-aliases": "^3.0.0", + "@docusaurus/types": "^3.0.0", + "@docusaurus/tsconfig": "^3.0.0", "@types/js-yaml": "^4.0.5", - "@types/react": "^17.0.58", + "@types/react": "^18.2.29", "@types/react-helmet": "^6.1.6", "@types/react-router-dom": "^5.1.7", "eslint": "^8.39.0", From 13c856d1d34f2cbcd0eecfecac0b142bd4a4aee9 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 15:21:05 -0800 Subject: [PATCH 0904/1130] fix(docs): Fix mdx 3 incompatibility --- docs/docs/features/debouncing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md index 38ded2d7952..7d194efa061 100644 --- a/docs/docs/features/debouncing.md +++ b/docs/docs/features/debouncing.md @@ -26,7 +26,7 @@ Currently the `zmk,kscan-gpio-matrix` and `zmk,kscan-gpio-direct` [drivers](../c ### Global Options You can set these options in your `.conf` file to control debouncing globally. -Values must be <= 16383. +Values must be `<= 16383`. - `CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS`: Debounce time for key press in milliseconds. Default = 5. - `CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS`: Debounce time for key release in milliseconds. Default = 5. @@ -43,7 +43,7 @@ CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=3 ### Per-driver Options You can add these Devicetree properties to a kscan node to control debouncing for -that instance of the driver. Values must be <= 16383. +that instance of the driver. Values must be `<= 16383`. - `debounce-press-ms`: Debounce time for key press in milliseconds. Default = 5. - `debounce-release-ms`: Debounce time for key release in milliseconds. Default = 5. From a0a952413ab02dceec57fccb52a39155be4c0ac7 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 15:22:40 -0800 Subject: [PATCH 0905/1130] fix(docs): Fix deprecated admonition types --- docs/docs/development/build-flash.md | 2 +- docs/docs/development/clean-room.md | 2 +- docs/docs/development/documentation.md | 2 +- docs/docs/development/new-behavior.md | 6 +++--- docs/docs/development/new-shield.md | 2 +- docs/docs/development/setup.md | 2 +- docs/docs/development/usb-logging.md | 2 +- docs/docs/features/conditional-layers.md | 2 +- docs/docs/user-setup.md | 2 +- docs/src/components/codes/SpellingCaution.jsx | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.md index 1699ac5ce4c..1a677635a5b 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.md @@ -119,7 +119,7 @@ For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" ``` -:::caution +:::warning The above command must still be invoked from the `zmk/app` directory as noted above, rather than the config directory. Otherwise, you will encounter errors such as `ERROR: source directory "." does not contain a CMakeLists.txt; is this really what you want to build?`. Alternatively you can add the `-s /path/to/zmk/app` flag to your `west` command. ::: diff --git a/docs/docs/development/clean-room.md b/docs/docs/development/clean-room.md index 82db3a0406e..45fa324e6bc 100644 --- a/docs/docs/development/clean-room.md +++ b/docs/docs/development/clean-room.md @@ -3,7 +3,7 @@ title: Clean Room Implementation sidebar_label: Clean Room --- -:::warning +:::danger Anyone wanting to contribute code to ZMK _MUST_ read this, and adhere to the steps outlines in order to not violate any licenses/copyright of other projects diff --git a/docs/docs/development/documentation.md b/docs/docs/development/documentation.md index ff45d80aa76..56c4d27699b 100644 --- a/docs/docs/development/documentation.md +++ b/docs/docs/development/documentation.md @@ -48,7 +48,7 @@ The check commands can be run with the following procedure in a terminal that's 3. Run `npm run lint` 4. Run `npm run build` -:::warning +:::danger If any of the above steps throw an error, they need to be addressed and all of the checks re-run prior to submitting a pull request. ::: diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.md index 59872963f10..031bbb8b6ce 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.md @@ -316,7 +316,7 @@ The configuration `struct` stores the properties declared from the behavior's `. The fifth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific configurations are not required. -:::caution +:::warning Remember that `.c` files should be formatted according to `clang-format` to ensure that checks run smoothly once the pull request is submitted. ::: @@ -382,7 +382,7 @@ For the purpose of this section, we will discuss the structure of `app/dts/behav The format of a behavior's `.dtsi` file is identical to declaring an instance of the behavior in a user's keymap. The only major difference is that the value `/omit-if-no-ref/` should be placed adjacent to the label and name of the behavior, as seen in line 11 of the `gresc` example. -:::caution +:::warning If your behavior has its [`locality`](#api-structure) property set to anything other than `BEHAVIOR_LOCALITY_CENTRAL`, then the name of the node must be at most 8 characters long, or it will fail to be invoked on the peripheral half of a split keyboard. @@ -486,7 +486,7 @@ values={[ -:::caution +:::warning Remember to change the copyright year (`XXXX`) to the current year when adding the copyright headers to your newly created files. ::: diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.md index dd63fa9b880..577a5bcbaaf 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.md @@ -100,7 +100,7 @@ which controls the display name of the device over USB and BLE. The updated new default values should always be wrapped inside a conditional on the shield config name defined in the `Kconfig.shield` file. Here's the simplest example file. -:::warning +:::danger The keyboard name must be less than or equal to 16 characters in length, otherwise the bluetooth advertising might fail and you will not be able to find your keyboard from your device. ::: diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.md index 8ce5ffdee9a..ed945e6ef46 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.md @@ -244,7 +244,7 @@ Click `Reopen in Container` in order to reopen the VS Code with the running cont The first time you do this on your machine, it will pull the docker image down from the registry and build the container. Subsequent launches are much faster! -:::caution +:::warning All subsequent steps must be performed from the VS Code terminal _inside_ the container. ::: diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.md index 6a8f8564b04..9b2977bd962 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.md @@ -11,7 +11,7 @@ If you are developing ZMK on a device that does not have a built in UART for deb Zephyr can be configured to create a USB CDC ACM device and the direct all `printk`, console output, and log messages to that device instead. -:::warning Battery Life Impact +:::danger Battery Life Impact Enabling logging increases the power usage of your keyboard, and can have a non-trivial impact to your time on battery. It is recommended to only enable logging when needed, and not leaving it on by default. diff --git a/docs/docs/features/conditional-layers.md b/docs/docs/features/conditional-layers.md index 7ccfdf2338a..44e2a5f2a79 100644 --- a/docs/docs/features/conditional-layers.md +++ b/docs/docs/features/conditional-layers.md @@ -47,7 +47,7 @@ Activating a `then-layer` in one conditional layer configuration can trigger the condition in another configuration, possibly repeatedly. ::: -:::caution +:::warning When configured as a `then-layer`, a layer's activation status is entirely controlled by the conditional layers feature. Even if the layer is activated for another reason (such as a [momentary layer](../behaviors/layers.md#momentary-layer) behavior), it will be immediately deactivated if the diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 2532fe8b128..a05d1f99d15 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -202,7 +202,7 @@ storage device. Once the flash is complete, the controller should unmount the US flashed firmware. It is recommended that you test your keyboard works over USB first to rule out hardware issues, before trying to connect to it wirelessly. -:::caution Split keyboards +:::warning Split keyboards For split keyboards, only the central half (typically the left side) will send keyboard outputs over USB or advertise to other devices over bluetooth. Peripheral half will only send keystrokes to the central once they are paired and connected. For this reason it is diff --git a/docs/src/components/codes/SpellingCaution.jsx b/docs/src/components/codes/SpellingCaution.jsx index 15ba9488ecd..953ab6b5f32 100644 --- a/docs/src/components/codes/SpellingCaution.jsx +++ b/docs/src/components/codes/SpellingCaution.jsx @@ -9,7 +9,7 @@ import Admonition from "@theme/Admonition"; export default function SpellingCaution() { return ( - +

    Take extra notice of the spelling of the keycodes, especially the shorthand spelling. Otherwise, it will result in an elusive parsing From 00962a72556888b62d94cef7ca3e028f391e08cd Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 16:20:34 -0800 Subject: [PATCH 0906/1130] refactor(docs): Remove no longer necessary React imports --- docs/src/components/codes/Context.jsx | 1 - docs/src/components/codes/Description.jsx | 1 - docs/src/components/codes/Footnote.jsx | 1 - docs/src/components/codes/FootnoteRef.jsx | 1 - docs/src/components/codes/FootnoteRefs.jsx | 1 - docs/src/components/codes/Footnotes.jsx | 1 - docs/src/components/codes/LinkIcon.jsx | 1 - docs/src/components/codes/Name.jsx | 1 - docs/src/components/codes/OsLegend.jsx | 1 - docs/src/components/codes/OsSupport.jsx | 1 - docs/src/components/codes/OsSupportIcon.jsx | 1 - docs/src/components/codes/SpellingCaution.jsx | 1 - docs/src/components/codes/Table.jsx | 1 - docs/src/components/codes/TableRow.jsx | 1 - docs/src/components/codes/ToastyContainer.jsx | 1 - docs/src/components/codes/ToastyCopyToClipboard.jsx | 1 - docs/src/components/custom-board-form.js | 1 - docs/src/components/hardware-list.tsx | 2 -- docs/src/components/interconnect-tabs.tsx | 2 -- docs/src/components/power-estimate.js | 1 - docs/src/pages/index.js | 1 - docs/src/pages/power-profiler.js | 2 +- 22 files changed, 1 insertion(+), 24 deletions(-) diff --git a/docs/src/components/codes/Context.jsx b/docs/src/components/codes/Context.jsx index 4fdcbfc03bb..a889af37136 100644 --- a/docs/src/components/codes/Context.jsx +++ b/docs/src/components/codes/Context.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; export default function Context({ children }) { diff --git a/docs/src/components/codes/Description.jsx b/docs/src/components/codes/Description.jsx index 7ad5fc2cca9..c37e54d5e43 100644 --- a/docs/src/components/codes/Description.jsx +++ b/docs/src/components/codes/Description.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; const specialCharactersRegex = diff --git a/docs/src/components/codes/Footnote.jsx b/docs/src/components/codes/Footnote.jsx index c9396a30cd7..6ec16740906 100644 --- a/docs/src/components/codes/Footnote.jsx +++ b/docs/src/components/codes/Footnote.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; export default function Footnote({ children, symbol, id }) { diff --git a/docs/src/components/codes/FootnoteRef.jsx b/docs/src/components/codes/FootnoteRef.jsx index c7b11a7d023..6f7ecf80ed4 100644 --- a/docs/src/components/codes/FootnoteRef.jsx +++ b/docs/src/components/codes/FootnoteRef.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; export default function FootnoteRef({ children, anchor }) { diff --git a/docs/src/components/codes/FootnoteRefs.jsx b/docs/src/components/codes/FootnoteRefs.jsx index 3782c13fba3..05253683c79 100644 --- a/docs/src/components/codes/FootnoteRefs.jsx +++ b/docs/src/components/codes/FootnoteRefs.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import FootnoteRef from "./FootnoteRef"; diff --git a/docs/src/components/codes/Footnotes.jsx b/docs/src/components/codes/Footnotes.jsx index b382141f81d..300cdff6209 100644 --- a/docs/src/components/codes/Footnotes.jsx +++ b/docs/src/components/codes/Footnotes.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import Footnote from "./Footnote"; diff --git a/docs/src/components/codes/LinkIcon.jsx b/docs/src/components/codes/LinkIcon.jsx index 5bfeebd4a1f..123080c0dba 100644 --- a/docs/src/components/codes/LinkIcon.jsx +++ b/docs/src/components/codes/LinkIcon.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faExternalLinkAlt } from "@fortawesome/free-solid-svg-icons"; export default function LinkIcon() { diff --git a/docs/src/components/codes/Name.jsx b/docs/src/components/codes/Name.jsx index 52dc7347fd3..31c24891891 100644 --- a/docs/src/components/codes/Name.jsx +++ b/docs/src/components/codes/Name.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import ToastyCopyToClipboard from "./ToastyCopyToClipboard"; diff --git a/docs/src/components/codes/OsLegend.jsx b/docs/src/components/codes/OsLegend.jsx index c53907fa3bd..cd34e4fe953 100644 --- a/docs/src/components/codes/OsLegend.jsx +++ b/docs/src/components/codes/OsLegend.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import operatingSystems from "@site/src/data/operating-systems"; export default function OsLegend() { diff --git a/docs/src/components/codes/OsSupport.jsx b/docs/src/components/codes/OsSupport.jsx index 2cb60c974f0..d34b499dbff 100644 --- a/docs/src/components/codes/OsSupport.jsx +++ b/docs/src/components/codes/OsSupport.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import OsSupportIcon from "./OsSupportIcon"; import FootnoteRefs from "./FootnoteRefs"; diff --git a/docs/src/components/codes/OsSupportIcon.jsx b/docs/src/components/codes/OsSupportIcon.jsx index a518d62a4a7..f3083ba95bd 100644 --- a/docs/src/components/codes/OsSupportIcon.jsx +++ b/docs/src/components/codes/OsSupportIcon.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; const Icon = ({ children, className, title }) => ( diff --git a/docs/src/components/codes/SpellingCaution.jsx b/docs/src/components/codes/SpellingCaution.jsx index 953ab6b5f32..84e6f800581 100644 --- a/docs/src/components/codes/SpellingCaution.jsx +++ b/docs/src/components/codes/SpellingCaution.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import Admonition from "@theme/Admonition"; export default function SpellingCaution() { diff --git a/docs/src/components/codes/Table.jsx b/docs/src/components/codes/Table.jsx index 0596de6a205..6d1c0f2769a 100644 --- a/docs/src/components/codes/Table.jsx +++ b/docs/src/components/codes/Table.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import TableRow from "./TableRow"; import Footnotes from "./Footnotes"; diff --git a/docs/src/components/codes/TableRow.jsx b/docs/src/components/codes/TableRow.jsx index a560911f46c..ae950ccb177 100644 --- a/docs/src/components/codes/TableRow.jsx +++ b/docs/src/components/codes/TableRow.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import Name from "./Name"; import Description from "./Description"; diff --git a/docs/src/components/codes/ToastyContainer.jsx b/docs/src/components/codes/ToastyContainer.jsx index ee4e3bca21e..42f35acfd6b 100644 --- a/docs/src/components/codes/ToastyContainer.jsx +++ b/docs/src/components/codes/ToastyContainer.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import { ToastContainer } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; diff --git a/docs/src/components/codes/ToastyCopyToClipboard.jsx b/docs/src/components/codes/ToastyCopyToClipboard.jsx index b0e9809233c..ba9406118e6 100644 --- a/docs/src/components/codes/ToastyCopyToClipboard.jsx +++ b/docs/src/components/codes/ToastyCopyToClipboard.jsx @@ -4,7 +4,6 @@ * SPDX-License-Identifier: CC-BY-NC-SA-4.0 */ -import React from "react"; import PropTypes from "prop-types"; import { toast } from "react-toastify"; import { CopyToClipboard } from "react-copy-to-clipboard"; diff --git a/docs/src/components/custom-board-form.js b/docs/src/components/custom-board-form.js index e8ae429454c..9b9795f5ecc 100644 --- a/docs/src/components/custom-board-form.js +++ b/docs/src/components/custom-board-form.js @@ -4,7 +4,6 @@ * SPDX-License-Identifier: MIT */ -import React from "react"; import PropTypes from "prop-types"; function CustomBoardForm({ diff --git a/docs/src/components/hardware-list.tsx b/docs/src/components/hardware-list.tsx index 54034ada3bf..86f9a9d0594 100644 --- a/docs/src/components/hardware-list.tsx +++ b/docs/src/components/hardware-list.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import Heading from "@theme/Heading"; import { HardwareMetadata } from "../hardware-metadata"; diff --git a/docs/src/components/interconnect-tabs.tsx b/docs/src/components/interconnect-tabs.tsx index 3ef69ebf2a7..8a7a0a4e38e 100644 --- a/docs/src/components/interconnect-tabs.tsx +++ b/docs/src/components/interconnect-tabs.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; diff --git a/docs/src/components/power-estimate.js b/docs/src/components/power-estimate.js index 2c0a53cd242..8405cd26703 100644 --- a/docs/src/components/power-estimate.js +++ b/docs/src/components/power-estimate.js @@ -4,7 +4,6 @@ * SPDX-License-Identifier: MIT */ -import React from "react"; import PropTypes from "prop-types"; import { displayPower, diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index ccaab508685..fa7f641ee69 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -1,4 +1,3 @@ -import React from "react"; import classnames from "classnames"; import Layout from "@theme/Layout"; import Link from "@docusaurus/Link"; diff --git a/docs/src/pages/power-profiler.js b/docs/src/pages/power-profiler.js index d28886efb85..032200e31b3 100644 --- a/docs/src/pages/power-profiler.js +++ b/docs/src/pages/power-profiler.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -import React, { useState } from "react"; +import { useState } from "react"; import classnames from "classnames"; import Layout from "@theme/Layout"; import styles from "./styles.module.css"; From f014eb45a7ba15e03791e28a051d0c68059de91f Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 20:18:59 -0800 Subject: [PATCH 0907/1130] refactor(docs): Use .mdx for docs with mdx features Also applies prettier changes in touched files due to precommit --- ...editor.md => 2023-11-09-keymap-editor.mdx} | 13 +++-- docs/docs/behaviors/backlight.md | 2 +- docs/docs/behaviors/bluetooth.md | 2 +- .../behaviors/{hold-tap.md => hold-tap.mdx} | 6 +- docs/docs/behaviors/layers.md | 6 +- docs/docs/behaviors/mod-tap.md | 4 +- .../behaviors/{tap-dance.md => tap-dance.mdx} | 6 +- docs/docs/config/backlight.md | 4 +- docs/docs/config/behaviors.md | 6 +- docs/docs/config/combos.md | 2 +- docs/docs/config/index.md | 2 +- docs/docs/config/keymap.md | 10 ++-- docs/docs/config/kscan.md | 2 +- docs/docs/customization.md | 12 ++-- .../{build-flash.md => build-flash.mdx} | 34 ++++++----- ...ide-integration.md => ide-integration.mdx} | 36 ++++++------ .../{new-behavior.md => new-behavior.mdx} | 12 ++-- .../{new-shield.md => new-shield.mdx} | 24 ++++---- docs/docs/development/{setup.md => setup.mdx} | 36 ++++++------ .../{usb-logging.md => usb-logging.mdx} | 7 ++- .../features/{backlight.md => backlight.mdx} | 4 +- .../{beta-testing.md => beta-testing.mdx} | 4 +- docs/docs/features/combos.md | 2 +- docs/docs/features/encoders.md | 2 +- .../docs/features/{keymaps.md => keymaps.mdx} | 8 +-- docs/docs/features/underglow.md | 2 +- docs/docs/hardware.mdx | 2 +- docs/docs/intro.md | 56 +++++++++---------- docs/docs/troubleshooting.md | 2 +- docs/docs/{user-setup.md => user-setup.mdx} | 6 +- 30 files changed, 165 insertions(+), 149 deletions(-) rename docs/blog/{2023-11-09-keymap-editor.md => 2023-11-09-keymap-editor.mdx} (93%) rename docs/docs/behaviors/{hold-tap.md => hold-tap.mdx} (98%) rename docs/docs/behaviors/{tap-dance.md => tap-dance.mdx} (89%) rename docs/docs/development/{build-flash.md => build-flash.mdx} (94%) rename docs/docs/development/{ide-integration.md => ide-integration.mdx} (86%) rename docs/docs/development/{new-behavior.md => new-behavior.mdx} (97%) rename docs/docs/development/{new-shield.md => new-shield.mdx} (97%) rename docs/docs/development/{setup.md => setup.mdx} (94%) rename docs/docs/development/{usb-logging.md => usb-logging.mdx} (94%) rename docs/docs/features/{backlight.md => backlight.mdx} (99%) rename docs/docs/features/{beta-testing.md => beta-testing.mdx} (97%) rename docs/docs/features/{keymaps.md => keymaps.mdx} (97%) rename docs/docs/{user-setup.md => user-setup.mdx} (98%) diff --git a/docs/blog/2023-11-09-keymap-editor.md b/docs/blog/2023-11-09-keymap-editor.mdx similarity index 93% rename from docs/blog/2023-11-09-keymap-editor.md rename to docs/blog/2023-11-09-keymap-editor.mdx index 1fe3b86772d..f8d8f791244 100644 --- a/docs/blog/2023-11-09-keymap-editor.md +++ b/docs/blog/2023-11-09-keymap-editor.mdx @@ -7,13 +7,16 @@ author_image_url: https://avatars.githubusercontent.com/u/7876996 tags: [keyboards, firmware, community] --- -import ThemedImage from '@theme/ThemedImage'; +import ThemedImage from "@theme/ThemedImage"; diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index 322530e3763..d9fdc4f3112 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -5,7 +5,7 @@ sidebar_label: Backlight ## Summary -This page contains [backlight](../features/backlight.md) behaviors supported by ZMK. +This page contains [backlight](../features/backlight.mdx) behaviors supported by ZMK. ## Backlight Action Defines diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 41ec0ab16d7..61682e28c19 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -103,5 +103,5 @@ Please note there are five available Bluetooth profiles by default. If you need ::: :::note -If you clear bond of a paired profile, make sure you do the same thing on the peer device as well (typically achieved by _removing_ or _forgetting_ the bluetooth connection). Otherwise the peer will try to connect to your keyboard whenever it discovers it. But while the MAC address of both devices could remain the same, the security key no longer match: the peer device still possess the old key negotiated in the previous pairing procedure, but our keyboard firmware has deleted that key. So the connection will fail. If you [enabled USB logging](../development/usb-logging.md), you might see a lot of failed connection attempts due to the reason of “Security failed”. +If you clear bond of a paired profile, make sure you do the same thing on the peer device as well (typically achieved by _removing_ or _forgetting_ the bluetooth connection). Otherwise the peer will try to connect to your keyboard whenever it discovers it. But while the MAC address of both devices could remain the same, the security key no longer match: the peer device still possess the old key negotiated in the previous pairing procedure, but our keyboard firmware has deleted that key. So the connection will fail. If you [enabled USB logging](../development/usb-logging.mdx), you might see a lot of failed connection attempts due to the reason of “Security failed”. ::: diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.mdx similarity index 98% rename from docs/docs/behaviors/hold-tap.md rename to docs/docs/behaviors/hold-tap.mdx index 64fb9396c12..b0bcb07f999 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.mdx @@ -3,8 +3,8 @@ title: Hold-Tap Behavior sidebar_label: Hold-Tap --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; ## Summary @@ -132,7 +132,7 @@ the hold-tap. For homerow mods, this is not always ideal, because it prevents co #### Using different behavior types with hold-taps -You can create instances of hold-taps invoking most [behavior types](../features/keymaps.md#behaviors) for hold or tap actions, by referencing their node labels in the `bindings` value. +You can create instances of hold-taps invoking most [behavior types](../features/keymaps.mdx#behaviors) for hold or tap actions, by referencing their node labels in the `bindings` value. The two parameters that are passed to the hold-tap in your keymap will be forwarded to the referred behaviors, first one to the hold behavior and second one to the tap. If you use behaviors that accept no parameters such as [mod-morphs](mod-morph.md) or [macros](macros.md), you can pass a dummy parameter value such as `0` to the hold-tap when you use it in your keymap. diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 162b792fcd4..1a26f3247ae 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -59,7 +59,7 @@ Example: ### Configuration -You can configure a different tapping term or tweak other properties noted in the [hold-tap](hold-tap.md#advanced-configuration) documentation page in your keymap: +You can configure a different tapping term or tweak other properties noted in the [hold-tap](hold-tap.mdx#advanced-configuration) documentation page in your keymap: ```dts < { @@ -74,11 +74,11 @@ You can configure a different tapping term or tweak other properties noted in th ``` :::info -Functionally, the layer-tap is a [hold-tap](hold-tap.md) of the ["tap-preferred" flavor](hold-tap.md/#flavors) and a [`tapping-term-ms`](hold-tap.md/#tapping-term-ms) of 200 that takes in a [`momentary layer`](#momentary-layer) and a [keypress](key-press.md) as its "hold" and "tap" parameters, respectively. +Functionally, the layer-tap is a [hold-tap](hold-tap.mdx) of the ["tap-preferred" flavor](hold-tap.mdx/#flavors) and a [`tapping-term-ms`](hold-tap.mdx/#tapping-term-ms) of 200 that takes in a [`momentary layer`](#momentary-layer) and a [keypress](key-press.md) as its "hold" and "tap" parameters, respectively. For users who want to send a different [keycode](../codes/index.mdx) depending on if the same key is held or tapped, see [Mod-Tap](mod-tap.md). -Similarly, for users looking to create a keybind like the layer-tap that depending on how long the key is held, invokes behaviors like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.md). +Similarly, for users looking to create a keybind like the layer-tap that depending on how long the key is held, invokes behaviors like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.mdx). ::: diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index d789a8b723c..f60bde459b3 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -45,10 +45,10 @@ You can configure a different tapping term in your keymap: ``` :::info -Under the hood, the mod-tap is simply a [hold-tap](hold-tap.md) of the ["hold-preferred" flavor](hold-tap.md/#flavors) with a [`tapping-term-ms`](hold-tap.md/#tapping-term-ms) of 200 that takes in two [keypresses](key-press.md) as its "hold" and "tap" parameters. This means that the mod-tap can be used to invoke **any** [keycode](../codes/index.mdx), and is not limited to only activating [modifier keys](../codes/modifiers.mdx) when it is held. +Under the hood, the mod-tap is simply a [hold-tap](hold-tap.mdx) of the ["hold-preferred" flavor](hold-tap.mdx/#flavors) with a [`tapping-term-ms`](hold-tap.mdx/#tapping-term-ms) of 200 that takes in two [keypresses](key-press.md) as its "hold" and "tap" parameters. This means that the mod-tap can be used to invoke **any** [keycode](../codes/index.mdx), and is not limited to only activating [modifier keys](../codes/modifiers.mdx) when it is held. For users who want to momentarily access a specific [layer](../features/keymaps#layers) while a key is held and send a keycode when the same key is tapped, see [Layer-Tap](layers.md/#layer-tap). -Similarly, for users looking to create a keybind like the mod-tap that invokes behaviors _other_ than [keypresses](key-press.md), like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.md). +Similarly, for users looking to create a keybind like the mod-tap that invokes behaviors _other_ than [keypresses](key-press.md), like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.mdx). ::: diff --git a/docs/docs/behaviors/tap-dance.md b/docs/docs/behaviors/tap-dance.mdx similarity index 89% rename from docs/docs/behaviors/tap-dance.md rename to docs/docs/behaviors/tap-dance.mdx index 1566cf18faa..b5586e082b2 100644 --- a/docs/docs/behaviors/tap-dance.md +++ b/docs/docs/behaviors/tap-dance.mdx @@ -3,8 +3,8 @@ title: Tap-Dance Behavior sidebar_label: Tap-Dance --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; ## Summary @@ -20,7 +20,7 @@ Defines the maximum elapsed time after the last tap-dance keybind press before a #### `bindings` -An array of one or more keybinds. This list can include [any ZMK keycode](../codes/) and any listed ZMK behavior, like [hold-taps](hold-tap.md), or [sticky keys](sticky-key.md). The index of a keybind in the `bindings` array corresponds to the number of times the tap-dance binding is pressed. For example, in the [basic tap-dance counter](#basic-example-counter) shown below, `&kp N2` is the second binding in the array of `bindings`: we then see an output of `2` when the `td0` binding is pressed twice. +An array of one or more keybinds. This list can include [any ZMK keycode](../codes/) and any listed ZMK behavior, like [hold-taps](hold-tap.mdx), or [sticky keys](sticky-key.md). The index of a keybind in the `bindings` array corresponds to the number of times the tap-dance binding is pressed. For example, in the [basic tap-dance counter](#basic-example-counter) shown below, `&kp N2` is the second binding in the array of `bindings`: we then see an output of `2` when the `td0` binding is pressed twice. The number of bindings in this array also determines the tap-dance's maximum number of keypresses. When a tap-dance reaches its maximum number of keypresses, it will immediately invoke the last behavior in its list of `bindings`, rather than waiting for [`tapping-term-ms`](#tapping-term-ms) to expire before the output is displayed. diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md index 8084be8953d..0db1291050e 100644 --- a/docs/docs/config/backlight.md +++ b/docs/docs/config/backlight.md @@ -3,7 +3,7 @@ title: Backlight Configuration sidebar_label: Backlight --- -See the [backlight feature page](../features/backlight.md) for more details, including instructions for adding backlight support to a board. +See the [backlight feature page](../features/backlight.mdx) for more details, including instructions for adding backlight support to a board. See [Configuration Overview](index.md) for instructions on how to change these settings. @@ -37,4 +37,4 @@ See the Zephyr devicetree bindings for LED drivers: - [gpio-leds](https://docs.zephyrproject.org/3.0.0/reference/devicetree/bindings/gpio/gpio-leds.html) - [pwm-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/led/pwm-leds.html) -See the [backlight feature page](../features/backlight.md) for examples of the properties that must be set to enable backlighting. +See the [backlight feature page](../features/backlight.mdx) for examples of the properties that must be set to enable backlighting. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 09498e6bebd..c31de5dd0a4 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -49,7 +49,7 @@ You can use the following nodes to tweak the default behaviors: Creates a custom behavior that triggers one behavior when a key is held or a different one when the key is tapped. -See the [hold-tap behavior](../behaviors/hold-tap.md) documentation for more details and examples. +See the [hold-tap behavior](../behaviors/hold-tap.mdx) documentation for more details and examples. ### Devicetree @@ -77,7 +77,7 @@ The `flavor` property may be one of: - `"tap-preferred"` - `"tap-unless-interrupted"` -See the [hold-tap behavior documentation](../behaviors/hold-tap.md) for an explanation of each flavor. +See the [hold-tap behavior documentation](../behaviors/hold-tap.mdx) for an explanation of each flavor. `hold-trigger-key-positions` is an array of zero-based key position indices. @@ -243,7 +243,7 @@ You can use the following nodes to tweak the default behaviors: Creates a custom behavior that triggers a different behavior corresponding to the number of times the key is tapped. -See the [tap dance behavior](../behaviors/tap-dance.md) documentation for more details and examples. +See the [tap dance behavior](../behaviors/tap-dance.mdx) documentation for more details and examples. ### Devicetree diff --git a/docs/docs/config/combos.md b/docs/docs/config/combos.md index 4f5ebba3d34..75d3646c49a 100644 --- a/docs/docs/config/combos.md +++ b/docs/docs/config/combos.md @@ -33,7 +33,7 @@ Each child node can have the following properties: | Property | Type | Description | Default | | ----------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `bindings` | phandle-array | A [behavior](../features/keymaps.md#behaviors) to run when the combo is triggered | | +| `bindings` | phandle-array | A [behavior](../features/keymaps.mdx#behaviors) to run when the combo is triggered | | | `key-positions` | array | A list of key position indices for the keys which should trigger the combo | | | `timeout-ms` | int | All the keys in `key-positions` must be pressed within this time in milliseconds to trigger the combo | 50 | | `require-prior-idle-ms` | int | If any non-modifier key is pressed within `require-prior-idle-ms` before a key in the combo, the key will not be considered for the combo | -1 (disabled) | diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index d8a2aecffef..3a430a8b465 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -63,7 +63,7 @@ ZMK will search the shield folder for the following config files: Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in shield folders. -For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/latest/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/new-shield.md) guide. +For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/latest/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/new-shield.mdx) guide. ## Kconfig Files diff --git a/docs/docs/config/keymap.md b/docs/docs/config/keymap.md index 4992438949d..f0498b8cf22 100644 --- a/docs/docs/config/keymap.md +++ b/docs/docs/config/keymap.md @@ -17,11 +17,11 @@ The `zmk,keymap` node itself has no properties. It should have one child node pe Each child node can have the following properties: -| Property | Type | Description | -| ----------------- | ------------- | ---------------------------------------------------------------------- | -| `display-name` | string | Name for the layer on displays | -| `bindings` | phandle-array | List of [key behaviors](../features/keymaps.md#behaviors), one per key | -| `sensor-bindings` | phandle-array | List of sensor behaviors, one per sensor | +| Property | Type | Description | +| ----------------- | ------------- | ----------------------------------------------------------------------- | +| `display-name` | string | Name for the layer on displays | +| `bindings` | phandle-array | List of [key behaviors](../features/keymaps.mdx#behaviors), one per key | +| `sensor-bindings` | phandle-array | List of sensor behaviors, one per sensor | Items for `bindings` must be listed in the order the keys are defined in the [keyboard scan configuration](kscan.md). diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 65ea63ec8b7..5aa9bc0f215 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -320,7 +320,7 @@ Transforms should be used any time the physical layout of a keyboard's keys does Transforms can also be used for keyboards with multiple layouts. You can define multiple matrix transform nodes, one for each layout, and users can select which one they want from the `/chosen` node in their keymaps. -See the [new shield guide](../development/new-shield.md#optional-matrix-transform) for more documentation on how to define a matrix transform. +See the [new shield guide](../development/new-shield.mdx#optional-matrix-transform) for more documentation on how to define a matrix transform. ### Devicetree diff --git a/docs/docs/customization.md b/docs/docs/customization.md index a68e8595fa9..46427b9e2f9 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -4,7 +4,7 @@ sidebar_label: Customizing ZMK --- After verifying you can successfully flash the default firmware, you will probably want to begin customizing your keymap and other keyboard options. -[In the initial setup tutorial](user-setup.md), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works +[In the initial setup tutorial](user-setup.mdx), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works with the main `zmk` firmware repository to build your desired firmware. The main advantage of a discrete configuration folder is ensuring that the working components of ZMK are kept separate from your personal keyboard settings, reducing the amount of file manipulation in the configuration process. This makes flashing ZMK to your keyboard much easier, especially because you don't need to keep an up-to-date copy of zmk on your computer at all times. @@ -28,7 +28,7 @@ Refer to the [Configuration](/docs/config) documentation for more details on thi ## Keymap Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. -Refer to the [Keymap](features/keymaps.md) documentation to learn more. +Refer to the [Keymap](features/keymaps.mdx) documentation to learn more. ## Publishing @@ -40,9 +40,9 @@ If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https: ::: :::note -It is also possible to build firmware locally on your computer by following the [toolchain setup](development/setup.md) and -[building instructions](development/build-flash.md), which includes pointers to -[building using your `zmk-config` folder](development/build-flash.md#building-from-zmk-config-folder). +It is also possible to build firmware locally on your computer by following the [toolchain setup](development/setup.mdx) and +[building instructions](development/build-flash.mdx), which includes pointers to +[building using your `zmk-config` folder](development/build-flash.mdx#building-from-zmk-config-folder). ::: ## Flashing Your Changes @@ -54,7 +54,7 @@ More troubleshooting information for split keyboards can be found [here](trouble ## Building Additional Keyboards -You can build additional keyboards with GitHub actions by appending them to `build.yml` in your `zmk-config` folder. For instance assume that we have set up a Corne shield with nice!nano during [initial setup](user-setup.md) and we want to add a Lily58 shield with nice!nano v2. The following is an example `build.yaml` file that would accomplish that: +You can build additional keyboards with GitHub actions by appending them to `build.yml` in your `zmk-config` folder. For instance assume that we have set up a Corne shield with nice!nano during [initial setup](user-setup.mdx) and we want to add a Lily58 shield with nice!nano v2. The following is an example `build.yaml` file that would accomplish that: ```yaml include: diff --git a/docs/docs/development/build-flash.md b/docs/docs/development/build-flash.mdx similarity index 94% rename from docs/docs/development/build-flash.md rename to docs/docs/development/build-flash.mdx index 1a677635a5b..650192beedf 100644 --- a/docs/docs/development/build-flash.md +++ b/docs/docs/development/build-flash.mdx @@ -3,20 +3,24 @@ title: Building and Flashing sidebar_label: Building and Flashing --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -export const OsTabs = (props) => ({props.children}); +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +export const OsTabs = (props) => ( + + {props.children} + +); ## Building @@ -110,7 +114,7 @@ west build -b nice_nano_v2 -- -DSHIELD=vendor_shield -DZMK_EXTRA_MODULES="C:/Use ### Building from `zmk-config` Folder -Instead of building .uf2 files using the default keymap and config files, you can build directly from your [`zmk-config` folder](../user-setup.md#github-repo) by adding +Instead of building .uf2 files using the default keymap and config files, you can build directly from your [`zmk-config` folder](../user-setup.mdx#github-repo) by adding `-DZMK_CONFIG="C:/the/absolute/path/config"` to your `west build` command. **Notice that this path should point to the folder labelled `config` within your `zmk-config` folder.** For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: diff --git a/docs/docs/development/ide-integration.md b/docs/docs/development/ide-integration.mdx similarity index 86% rename from docs/docs/development/ide-integration.md rename to docs/docs/development/ide-integration.mdx index f0403dbba36..47da1035d69 100644 --- a/docs/docs/development/ide-integration.md +++ b/docs/docs/development/ide-integration.mdx @@ -3,21 +3,25 @@ title: IDE Integration sidebar_label: IDE Integration --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -export const OsTabs = (props) => ({props.children}); +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +export const OsTabs = (props) => ( + + {props.children} + +); ## Visual Studio Code @@ -35,7 +39,7 @@ terminal to the ZMK repository and run the following command: west config build.cmake-args -- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ``` -Every [build](build-flash.md#building) will now update the database. You will +Every [build](build-flash.mdx#building) will now update the database. You will need to build once to create the database before code completion will work. We'll tell Visual Studio Code where to find the database in the next step. diff --git a/docs/docs/development/new-behavior.md b/docs/docs/development/new-behavior.mdx similarity index 97% rename from docs/docs/development/new-behavior.md rename to docs/docs/development/new-behavior.mdx index 031bbb8b6ce..aec9a5ae752 100644 --- a/docs/docs/development/new-behavior.md +++ b/docs/docs/development/new-behavior.mdx @@ -3,14 +3,14 @@ title: New Behavior sidebar_label: New Behavior --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; ## Overview This document outlines how to develop a behavior for ZMK and prepare the changes for a pull request. -Behaviors are assigned to key positions and determine what happens when they are pressed and released. They are implemented in Zephyr as "devices": they consist of a devicetree binding file, which specifies the properties of the behavior, and a driver written in C code. This allows for the ability to create unique instances of these behaviors in [keymaps](../features/keymaps.md) or devicetree-source-include files (`.dtsi`). While instances of behaviors stored in keymaps are created by end-users for their personal needs, the instances that live in the .dtsi files are stored and documented in ZMK directly, which removes the need for end-users to set up common use-cases of these behaviors in their personal keymaps. +Behaviors are assigned to key positions and determine what happens when they are pressed and released. They are implemented in Zephyr as "devices": they consist of a devicetree binding file, which specifies the properties of the behavior, and a driver written in C code. This allows for the ability to create unique instances of these behaviors in [keymaps](../features/keymaps.mdx) or devicetree-source-include files (`.dtsi`). While instances of behaviors stored in keymaps are created by end-users for their personal needs, the instances that live in the .dtsi files are stored and documented in ZMK directly, which removes the need for end-users to set up common use-cases of these behaviors in their personal keymaps. The general process for developing behaviors is: @@ -192,7 +192,7 @@ The dependencies required for any ZMK behavior are: - `device.h`: [Zephyr Device APIs](https://docs.zephyrproject.org/apidoc/latest/group__device__model.html) - `drivers/behavior.h`: ZMK Behavior Functions (e.g. [`locality`](#api-structure), `behavior_keymap_binding_pressed`, `behavior_keymap_binding_released`, `behavior_sensor_keymap_binding_triggered`) -- `logging/log.h`: [Zephyr Logging APIs](https://docs.zephyrproject.org/latest/services/logging/index.html) (for more information on USB Logging in ZMK, see [USB Logging](usb-logging.md)). +- `logging/log.h`: [Zephyr Logging APIs](https://docs.zephyrproject.org/latest/services/logging/index.html) (for more information on USB Logging in ZMK, see [USB Logging](usb-logging.mdx)). - `zmk/behavior.h`: ZMK Behavior Information (e.g. parameters, position and timestamp of events) - `return` values: - `ZMK_BEHAVIOR_OPAQUE`: Used to terminate `on__binding_pressed` and `on__binding_released` functions that accept `(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event)` as parameters @@ -433,7 +433,7 @@ Zephyr currently does not support logging over Bluetooth, so any use of the seri :::info - See [Tests](tests.md) for more information on how to create virtual test sets. -- For hardware-based testing, see [USB Logging](usb-logging.md). +- For hardware-based testing, see [USB Logging](usb-logging.mdx). ::: @@ -444,7 +444,7 @@ Consider the following prompts when writing documentation for new behaviors: - What does it do? Describe some general use-cases for the behavior. - Which properties included in the [devicetree binding](#creating-the-devicetree-binding-yaml) should be configured manually by the user? What do they do, and if applicable, what are their default values? - What does an example implementation in a keymap look like? Include a code-snippet of the example implementation in the keymap file's `behaviors` node. - - Are there any [common use-cases of the behavior](#defining-common-use-cases-for-the-behavior-dtsi-optional)? Consider making a separate documentation page for these predefined variations, like how the [mod-tap](../behaviors/mod-tap.md) has a separate page from the [hold-tap](../behaviors/hold-tap.md). + - Are there any [common use-cases of the behavior](#defining-common-use-cases-for-the-behavior-dtsi-optional)? Consider making a separate documentation page for these predefined variations, like how the [mod-tap](../behaviors/mod-tap.md) has a separate page from the [hold-tap](../behaviors/hold-tap.mdx). - How does the behavior perform in edge cases? For example, tap-dances invoke the last binding in its list of `bindings` once the maximum number of keypresses has been reached. Consider also including visual aids alongside written documentation if it adds clarity. diff --git a/docs/docs/development/new-shield.md b/docs/docs/development/new-shield.mdx similarity index 97% rename from docs/docs/development/new-shield.md rename to docs/docs/development/new-shield.mdx index 577a5bcbaaf..340db3304e8 100644 --- a/docs/docs/development/new-shield.md +++ b/docs/docs/development/new-shield.mdx @@ -2,9 +2,9 @@ title: New Keyboard Shield --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import KeymapExampleFile from '../keymap-example-file.md'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import KeymapExampleFile from "../keymap-example-file.md"; import InterconnectTabs from "@site/src/components/interconnect-tabs"; import Metadata from "@site/src/data/hardware-metadata.json"; @@ -79,7 +79,7 @@ config SHIELD_MY_BOARD def_bool $(shields_list_contains,my_board) ``` -This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.md) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. +This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.mdx) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. **For split boards**, you will need to add configurations for the left and right sides. For example, if your split halves are named `my_board_left` and `my_board_right`, it would look like this: @@ -140,7 +140,7 @@ endif ## Shield Overlays - + To use GPIO pins that are not part of the interconnects as described above, you can use the GPIO labels that are specific to each controller type. For instance, pins numbered `PX.Y` in nRF52840-based boards can be referred to via `&gpioX Y` labels. @@ -374,7 +374,7 @@ Each keyboard should provide a default keymap to be used when building the firmw Here is an example simple keymap for the Kyria, with only one layer: - + :::note The two `#include` lines at the top of the keymap are required in order to bring in the default set of behaviors to make them available to bind, and to import a set of defines for the key codes, so keymaps can use parameters like `N2` or `K` instead of the raw keycode numeric values. @@ -530,7 +530,7 @@ Add the following line to your keymap file to add default encoder behavior bindi sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; ``` -Add additional bindings as necessary to match the default number of encoders on your board. See the [Encoders](../features/encoders.md) and [Keymap](../features/keymaps.md) feature documentation for more details. +Add additional bindings as necessary to match the default number of encoders on your board. See the [Encoders](../features/encoders.md) and [Keymap](../features/keymaps.mdx) feature documentation for more details. @@ -539,7 +539,7 @@ Add additional bindings as necessary to match the default number of encoders on ### GitHub Actions -Using GitHub Actions to build your new firmware can save you from doing any local [development setup](./setup.md), +Using GitHub Actions to build your new firmware can save you from doing any local [development setup](./setup.mdx), at the expense of a longer feedback loop if there are issues. To push your changes and trigger a build: - Add all your pending changes with `git add .` @@ -551,7 +551,7 @@ Once pushed, click on the "Actions" tab of the repo you created in the first ste ### Local Build :::note -To build locally, be sure you've followed the [development setup](./setup.md) guide first. +To build locally, be sure you've followed the [development setup](./setup.mdx) guide first. ::: Once you've fully created the new keyboard shield definition, @@ -562,7 +562,7 @@ west build --pristine -b nice_nano_v2 -- -DSHIELD= -DZMK_EXTRA_MODULE # replace with e.g. _left for split keyboards, then repeat for _right ``` -The above build command generates a `build/zephyr/zmk.uf2` file that you can flash using the steps from the following section. See the dedicated [building and flashing page](build-flash.md) for more details. +The above build command generates a `build/zephyr/zmk.uf2` file that you can flash using the steps from the following section. See the dedicated [building and flashing page](build-flash.mdx) for more details. ### Flashing @@ -581,9 +581,9 @@ west flash ``` Please have a look at documentation specific to -[building and flashing](build-flash.md) for additional information. +[building and flashing](build-flash.mdx) for additional information. :::note Further testing your keyboard shield without altering the root keymap file can be done with the use of `-DZMK_CONFIG` in your `west build` command, -shown [here](build-flash.md#building-from-zmk-config-folder) +shown [here](build-flash.mdx#building-from-zmk-config-folder) ::: diff --git a/docs/docs/development/setup.md b/docs/docs/development/setup.mdx similarity index 94% rename from docs/docs/development/setup.md rename to docs/docs/development/setup.mdx index ed945e6ef46..7d5a1dfe14a 100644 --- a/docs/docs/development/setup.md +++ b/docs/docs/development/setup.mdx @@ -3,21 +3,25 @@ title: Toolchain Setup sidebar_label: Toolchain Setup --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -export const OsTabs = (props) => ({props.children}); +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +export const OsTabs = (props) => ( + + {props.children} + +); This guide will show you how to set up a development environment for building ZMK locally. @@ -270,7 +274,7 @@ This step pulls down quite a bit of tooling. Go grab a cup of coffee, it can tak :::info If you're using Docker, you're done with setup! You must restart the container at this point. The easiest way to do so is to close the VS Code window, verify that the container has stopped in Docker Dashboard, and reopen the container with VS Code. -Once your container is restarted, proceed to [Building and Flashing](development/build-flash.md). +Once your container is restarted, proceed to [Building and Flashing](development/build-flash.mdx). ::: ### Export Zephyr CMake package diff --git a/docs/docs/development/usb-logging.md b/docs/docs/development/usb-logging.mdx similarity index 94% rename from docs/docs/development/usb-logging.md rename to docs/docs/development/usb-logging.mdx index 9b2977bd962..1a1a9a790be 100644 --- a/docs/docs/development/usb-logging.md +++ b/docs/docs/development/usb-logging.mdx @@ -2,8 +2,8 @@ title: USB Logging --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; ## Overview @@ -21,7 +21,7 @@ It is recommended to only enable logging when needed, and not leaving it on by d ## Kconfig The `CONFIG_ZMK_USB_LOGGING` Kconfig enables USB logging. This can be set at the keyboard level, typically in the `config/.conf` -file if you are using a [user config repository](user-setup.md). It can also be enabled at the ZMK level using the `app/prj.conf` file, or other +file if you are using a [user config repository](user-setup.mdx). It can also be enabled at the ZMK level using the `app/prj.conf` file, or other search locations described in the [configuration overview](config/index.md#config-file-locations). Logging can be further configured using Kconfig described in [the Zephyr documentation](https://docs.zephyrproject.org/3.2.0/services/logging/index.html). @@ -79,6 +79,7 @@ sudo tio /dev/tty.usbmodem14401 ``` You should see tio printing `Disconnected` or `Connected` when you disconnect or reconnect the USB cable. + diff --git a/docs/docs/features/backlight.md b/docs/docs/features/backlight.mdx similarity index 99% rename from docs/docs/features/backlight.md rename to docs/docs/features/backlight.mdx index eae4d2f9a2e..4c47305783a 100644 --- a/docs/docs/features/backlight.md +++ b/docs/docs/features/backlight.mdx @@ -3,8 +3,8 @@ title: Backlight sidebar_label: Backlight --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; Backlight is a feature used to control an array of LEDs, usually placed through or under switches. diff --git a/docs/docs/features/beta-testing.md b/docs/docs/features/beta-testing.mdx similarity index 97% rename from docs/docs/features/beta-testing.md rename to docs/docs/features/beta-testing.mdx index 4a159362f13..148005cea67 100644 --- a/docs/docs/features/beta-testing.md +++ b/docs/docs/features/beta-testing.mdx @@ -3,8 +3,8 @@ title: Beta Testing sidebar_label: Beta Testing --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; You may find that ZMK does not support a feature or keyboard that you are interesting in using. You may find that someone has already taken the time to submit the feature you need as a [Pull Request](https://github.com/zmkfirmware/zmk/pulls). If you find the feature you need as a pull request, diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index f4664c546f1..d31e1c3ee5f 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -30,7 +30,7 @@ Combos configured in your `.keymap` file, but are separate from the `keymap` nod - `layers = <0 1...>` will allow limiting a combo to specific layers. This is an _optional_ parameter, when omitted it defaults to global scope. - `bindings` is the behavior that is activated when the behavior is pressed. - (advanced) you can specify `slow-release` if you want the combo binding to be released when all key-positions are released. The default is to release the combo as soon as any of the keys in the combo is released. -- (advanced) you can specify a `require-prior-idle-ms` value much like for [hold-taps](behaviors/hold-tap.md#require-prior-idle-ms). If any non-modifier key is pressed within `require-prior-idle-ms` before a key in the combo, the combo will not trigger. +- (advanced) you can specify a `require-prior-idle-ms` value much like for [hold-taps](behaviors/hold-tap.mdx#require-prior-idle-ms). If any non-modifier key is pressed within `require-prior-idle-ms` before a key in the combo, the combo will not trigger. :::info diff --git a/docs/docs/features/encoders.md b/docs/docs/features/encoders.md index 105757634b1..d3cc6d3f46c 100644 --- a/docs/docs/features/encoders.md +++ b/docs/docs/features/encoders.md @@ -41,4 +41,4 @@ Here, the left encoder is configured to control volume up and down while the rig ## Adding Encoder Support -See the [New Keyboard Shield](../development/new-shield.md#encoders) documentation for how to add or modify additional encoders to your shield. +See the [New Keyboard Shield](../development/new-shield.mdx#encoders) documentation for how to add or modify additional encoders to your shield. diff --git a/docs/docs/features/keymaps.md b/docs/docs/features/keymaps.mdx similarity index 97% rename from docs/docs/features/keymaps.md rename to docs/docs/features/keymaps.mdx index 9778ecbab18..c8d46ef941b 100644 --- a/docs/docs/features/keymaps.md +++ b/docs/docs/features/keymaps.mdx @@ -3,8 +3,8 @@ title: Keymaps & Behaviors sidebar_label: Keymaps --- -import KeymapExample from '../keymap-example.md'; -import KeymapExampleFile from '../keymap-example-file.md'; +import KeymapExample from "../keymap-example.md"; +import KeymapExampleFile from "../keymap-example-file.md"; ZMK uses a declarative approach to keymaps instead of using C code for all keymap configuration. Right now, ZMK uses the devicetree syntax to declare those keymaps; future work is envisioned for @@ -124,7 +124,7 @@ Nested under the devicetree root, is the keymap node. The node _name_ itself is Each layer of your keymap will be nested under the keymap node. Here is a sample that defines just one layer for this keymap: - + Each layer should have: @@ -137,4 +137,4 @@ For the full set of possible behaviors, start at the [Key Press](../behaviors/ke Putting this all together, a complete [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) looks like: - + diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index 13f0d8c71e6..a32306caa0d 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -6,7 +6,7 @@ sidebar_label: RGB Underglow RGB underglow is a feature used to control "strips" of RGB LEDs. Most of the time this is called underglow and creates a glow underneath the board using a ring of LEDs around the edge, hence the name. However, this can be extended to be used to control anything from a single LED to a long string of LEDs anywhere on the keyboard. :::info -RGB underglow can also be used for under-key lighting. If you have RGB LEDs on your keyboard, this is what you want. For PWM/single color LEDs, see [Backlight](backlight.md). +RGB underglow can also be used for under-key lighting. If you have RGB LEDs on your keyboard, this is what you want. For PWM/single color LEDs, see [Backlight](backlight.mdx). ::: ZMK supports all the RGB LEDs supported by Zephyr. Here's the current list supported: diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index 7bc98f96105..15fef39f01a 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -56,4 +56,4 @@ Please see pages under the "Features" header in the sidebar for details. Contributing -If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.md) documentation and note the [clean room design requirements](development/clean-room.md). +If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.mdx) documentation and note the [clean room design requirements](development/clean-room.md). diff --git a/docs/docs/intro.md b/docs/docs/intro.md index d65ac46e405..bfa511844f2 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -14,34 +14,34 @@ ZMK is currently missing some features found in other popular firmware. This tab | Legend: | ✅ Supported | 🚧 Under Development | 💡 Planned | | :------ | :----------- | :------------------- | :--------- | -| **Feature** | ZMK | BlueMicro | QMK | -| ---------------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | -| Low Latency BLE Support | ✅ | ✅ | | -| Multi-Device BLE Support | ✅ | | | -| [USB Connectivity](behaviors/outputs.md) | ✅ | ✅ | ✅ | -| User Configuration Repositories | ✅ | | | -| Split Keyboard Support | ✅ | ✅ | ✅ | -| [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | -| [Hold-Tap](behaviors/hold-tap.md) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md/#layer-tap)) | ✅ | ✅ | ✅ | -| [Tap-Dance](behaviors/tap-dance.md) | ✅ | ✅[^2] | ✅ | -| [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | -| [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | -| [Encoders](features/encoders.md) | ✅ | ✅ | ✅ | -| [Display Support](features/displays.md)[^1] | 🚧 | 🚧 | ✅ | -| [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | -| [Backlight](features/backlight.md) | ✅ | ✅ | ✅ | -| One Shot Keys | ✅ | ✅ | ✅ | -| [Combo Keys](features/combos.md) | ✅ | | ✅ | -| [Macros](behaviors/macros.md) | ✅ | ✅ | ✅ | -| Mouse Keys | 🚧 | ✅ | ✅ | -| Low Active Power Usage | ✅ | | | -| Low Power Sleep States | ✅ | ✅ | | -| [Low Power Mode (VCC Shutoff)](behaviors/power.md) | ✅ | ✅ | | -| Battery Reporting | ✅ | ✅ | | -| Shell over BLE | 💡 | | | -| Realtime Keymap Updating | 💡 | | ✅ | -| AVR/8 Bit | | | ✅ | -| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | +| **Feature** | ZMK | BlueMicro | QMK | +| ----------------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | +| Low Latency BLE Support | ✅ | ✅ | | +| Multi-Device BLE Support | ✅ | | | +| [USB Connectivity](behaviors/outputs.md) | ✅ | ✅ | ✅ | +| User Configuration Repositories | ✅ | | | +| Split Keyboard Support | ✅ | ✅ | ✅ | +| [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | +| [Hold-Tap](behaviors/hold-tap.mdx) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md/#layer-tap)) | ✅ | ✅ | ✅ | +| [Tap-Dance](behaviors/tap-dance.mdx) | ✅ | ✅[^2] | ✅ | +| [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | +| [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | +| [Encoders](features/encoders.md) | ✅ | ✅ | ✅ | +| [Display Support](features/displays.md)[^1] | 🚧 | 🚧 | ✅ | +| [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | +| [Backlight](features/backlight.mdx) | ✅ | ✅ | ✅ | +| One Shot Keys | ✅ | ✅ | ✅ | +| [Combo Keys](features/combos.md) | ✅ | | ✅ | +| [Macros](behaviors/macros.md) | ✅ | ✅ | ✅ | +| Mouse Keys | 🚧 | ✅ | ✅ | +| Low Active Power Usage | ✅ | | | +| Low Power Sleep States | ✅ | ✅ | | +| [Low Power Mode (VCC Shutoff)](behaviors/power.md) | ✅ | ✅ | | +| Battery Reporting | ✅ | ✅ | | +| Shell over BLE | 💡 | | | +| Realtime Keymap Updating | 💡 | | ✅ | +| AVR/8 Bit | | | ✅ | +| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | [^2]: Tap-Dances are limited to single and double-tap on BlueMicro [^1]: OLEDs are currently proof of concept in ZMK. diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 1418f327feb..8c71870c035 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -30,7 +30,7 @@ macOS 13.0 (Ventura) Finder may report an error code 100093 when copying ` Date: Fri, 12 Jan 2024 20:32:33 -0800 Subject: [PATCH 0908/1130] fix(docs): Fix incorrect admonition title --- docs/docs/behaviors/outputs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/outputs.md b/docs/docs/behaviors/outputs.md index 46b567cfdfc..8cba3b1e8e8 100644 --- a/docs/docs/behaviors/outputs.md +++ b/docs/docs/behaviors/outputs.md @@ -44,7 +44,7 @@ The output selection behavior changes the preferred output on press. - Reference: `&out` - Parameter #1: Command, e.g. `OUT_BLE` -:::note External power state persistence +:::note Output selection persistence The endpoint that is selected by the `&out` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. ::: From dcfe07d9f666d23e896d2463ca3f6f8dd8cbc12f Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 20:34:12 -0800 Subject: [PATCH 0909/1130] refactor(docs): Use new admonition title syntax and disable mdx v1 compat --- docs/docs/behaviors/backlight.md | 2 +- docs/docs/behaviors/bluetooth.md | 6 +++--- docs/docs/behaviors/outputs.md | 4 ++-- docs/docs/behaviors/power.md | 2 +- docs/docs/behaviors/reset.md | 2 +- docs/docs/behaviors/underglow.md | 4 ++-- docs/docs/config/battery.md | 4 ++-- docs/docs/config/system.md | 4 ++-- docs/docs/development/usb-logging.mdx | 2 +- docs/docs/features/bluetooth.md | 2 +- docs/docs/features/combos.md | 2 +- docs/docs/user-setup.mdx | 4 ++-- docs/docusaurus.config.js | 7 +++++++ 13 files changed, 26 insertions(+), 19 deletions(-) diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index d9fdc4f3112..12ed01f19f3 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -36,7 +36,7 @@ Here is a table describing the action for each define: - Parameter #1: The backlight action define, e.g. `BL_TOG` or `BL_INC` - Parameter #2: Only applies to `BL_SET`and is the brightness value -:::note Backlight settings persistence +:::note[Backlight settings persistence] The backlight settings that are changed via the `&bl` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. They will also override the start values set by [`CONFIG_ZMK_BACKLIGHT_*_START` settings](../config/backlight.md#kconfig). However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. diff --git a/docs/docs/behaviors/bluetooth.md b/docs/docs/behaviors/bluetooth.md index 61682e28c19..dc2dfbbd2d5 100644 --- a/docs/docs/behaviors/bluetooth.md +++ b/docs/docs/behaviors/bluetooth.md @@ -9,7 +9,7 @@ The bluetooth behavior allows management of various settings and states related between the keyboard and the host. By default, ZMK supports five "profiles" for selecting which bonded host computer/laptop/keyboard should receive the keyboard input; many of the commands here operate on those profiles. -:::note Connection Management +:::note[Connection Management] When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this when you initiate pairing with another device. To pair with a new device, select a profile that doesn't have a pairing with `BT_SEL`, `BT_NXT` or @@ -47,7 +47,7 @@ Here is a table describing the command for each define: | `BT_SEL` | Select the 0-indexed profile by number; must include a number as an argument in the keymap to work correctly, e.g. `BT_SEL 0`. | | `BT_DISC` | Disconnect from the 0-indexed profile by number, if it's currently connected and inactive; must include a number as an argument in the keymap to work correctly, e.g. `BT_DISC 0`. | -:::note Selected profile persistence +:::note[Selected profile persistence] The profile that is selected by the `BT_SEL`/`BT_PRV`/`BT_NXT` actions will be saved to flash storage and hence persist across restarts and firmware flashes. However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. ::: @@ -98,7 +98,7 @@ ZMK support bluetooth “profiles” which allows connection to multiple devices The bluetooth MAC address and negotiated keys during pairing are stored in the permanent storage on your chip and can be reused even after reflashing the firmware. If for some reason you want to delete the stored information, you can bind the `BT_CLR` behavior described above to a key and use it to clear the _current_ profile. -:::note Number of Profiles +:::note[Number of Profiles] Please note there are five available Bluetooth profiles by default. If you need to adjust the number of available profiles, set `CONFIG_BT_MAX_CONN` _and_ `CONFIG_BT_MAX_PAIRED` to the desired number of profiles, `n`, or `n+1` for split keyboards, in your `zmk-config` `.conf` file. ::: diff --git a/docs/docs/behaviors/outputs.md b/docs/docs/behaviors/outputs.md index 8cba3b1e8e8..de81f695699 100644 --- a/docs/docs/behaviors/outputs.md +++ b/docs/docs/behaviors/outputs.md @@ -12,7 +12,7 @@ keyboard to USB for power but outputting to a different device over bluetooth. By default, output is sent to USB when both USB and BLE are connected. Once you select a different output, it will be remembered until you change it again. -:::note Powering the keyboard via USB +:::note[Powering the keyboard via USB] ZMK is not always able to detect if the other end of a USB connection accepts keyboard input or not. So if you are using USB only to power your keyboard (for example with a charger or a portable power bank), you will want to select the BLE output through below behavior to be able to send keystrokes to the selected bluetooth profile. @@ -44,7 +44,7 @@ The output selection behavior changes the preferred output on press. - Reference: `&out` - Parameter #1: Command, e.g. `OUT_BLE` -:::note Output selection persistence +:::note[Output selection persistence] The endpoint that is selected by the `&out` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. ::: diff --git a/docs/docs/behaviors/power.md b/docs/docs/behaviors/power.md index 5251d76cb13..dce7b1555d3 100644 --- a/docs/docs/behaviors/power.md +++ b/docs/docs/behaviors/power.md @@ -43,7 +43,7 @@ Here is a table describing the command for each define: - Reference: `&ext_power` - Parameter#1: Command, e.g `EP_ON` -:::note External power state persistence +:::note[External power state persistence] The on/off state that is set by the `&ext_power` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. ::: diff --git a/docs/docs/behaviors/reset.md b/docs/docs/behaviors/reset.md index b7850eca77d..60e694313d6 100644 --- a/docs/docs/behaviors/reset.md +++ b/docs/docs/behaviors/reset.md @@ -46,6 +46,6 @@ Example: Both basic and bootloader reset behaviors are source-specific: This means that it affects the side of the keyboard that contains the behavior binding for split keyboards. For example if you press a key with the `&sys_reset` binding on the left half of the keyboard, the left half will be reset. If you want to be able to reset both sides you can put the bindings on both sides of the keyboard and activate it on the side you would like to reset. -:::note Peripheral invocation +:::note[Peripheral invocation] The peripheral side of the keyboard has to be paired and connected to the central side in order to be able to activate these behaviors, even if it is possible to trigger the behavior using only keys on that side. This is because the key bindings are processed on the central side which would then instruct the peripheral side to reset. ::: diff --git a/docs/docs/behaviors/underglow.md b/docs/docs/behaviors/underglow.md index f94d9008c04..490789a71be 100644 --- a/docs/docs/behaviors/underglow.md +++ b/docs/docs/behaviors/underglow.md @@ -43,7 +43,7 @@ Here is a table describing the action for each define: - Parameter #1: The RGB action define, e.g. `RGB_TOG` or `RGB_BRI` - Parameter #2: Only applies to `RGB_COLOR_HSB` and is the HSB representation of the color to set (see below for an example) -:::note HSB Values +:::note[HSB Values] When specifying HSB values you'll need to use `RGB_COLOR_HSB(h, s, b)` in your keymap file. @@ -55,7 +55,7 @@ Value Limits: ::: -:::note RGB settings persistence +:::note[RGB settings persistence] The RGB settings that are changed via the `&rgb_ug` behavior will be saved to flash storage and hence persist across restarts and firmware flashes. They will also override the start values set by [`CONFIG_ZMK_RGB_*_START` settings](../config/underglow.md#kconfig). However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../config/system.md#general) milliseconds in order to reduce potential wear on the flash memory. diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 50f16cfea7e..8327a0b8756 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -16,13 +16,13 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | `CONFIG_ZMK_BATTERY_REPORTING` | bool | Enables/disables all battery level detection/reporting | n | | `CONFIG_ZMK_BATTERY_REPORT_INTERVAL` | int | Battery level report interval in seconds | 60 | -:::note Default setting +:::note[Default setting] While `CONFIG_ZMK_BATTERY_REPORTING` is disabled by default it is implied by `CONFIG_ZMK_BLE`, thus any board with BLE enabled will have this automatically enabled unless explicitly overriden. ::: -:::note BLE reporting on MacOS +:::note[BLE reporting on MacOS] On macOS the BLE battery reporting packets can cause the computer to wakeup from sleep. To prevent this, the battery _reporting_ service can be disabled by setting `CONFIG_BT_BAS=n`. This setting is independent of battery _monitoring_, for instance the battery level can still be indicated on a display. diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index f45ee43b61a..27d7ab04a90 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -34,7 +34,7 @@ Exactly zero or one of the following options may be set to `y`. The first is use | `CONFIG_ZMK_HID_REPORT_TYPE_HKRO` | Enable `CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE` key roll over. | | `CONFIG_ZMK_HID_REPORT_TYPE_NKRO` | Enable full N-key roll over. This may prevent the keyboard from working with some BIOS/UEFI versions. | -:::note NKRO usages +:::note[NKRO usages] By default the NKRO max usage is set so as to maximize compatibility, however certain less frequently used keys (F13-F24 and INTL1-8) will not work with it. One solution is to set `CONFIG_ZMK_HID_KEYBOARD_NKRO_EXTENDED_REPORT=y`, however this is known to break compatibility with Android and thus not enabled by default. @@ -72,7 +72,7 @@ Exactly zero or one of the following options may be set to `y`. The first is use | `CONFIG_ZMK_USB_BOOT` | bool | Enable USB Boot protocol support | n | | `CONFIG_ZMK_USB_INIT_PRIORITY` | int | USB init priority | 50 | -:::note USB Boot protocol support +:::note[USB Boot protocol support] By default USB Boot protocol support is disabled, however certain situations such as the input of Bitlocker pins or FileVault passwords may require it to be enabled. diff --git a/docs/docs/development/usb-logging.mdx b/docs/docs/development/usb-logging.mdx index 1a1a9a790be..0f68aff7d37 100644 --- a/docs/docs/development/usb-logging.mdx +++ b/docs/docs/development/usb-logging.mdx @@ -11,7 +11,7 @@ If you are developing ZMK on a device that does not have a built in UART for deb Zephyr can be configured to create a USB CDC ACM device and the direct all `printk`, console output, and log messages to that device instead. -:::danger Battery Life Impact +:::danger[Battery Life Impact] Enabling logging increases the power usage of your keyboard, and can have a non-trivial impact to your time on battery. It is recommended to only enable logging when needed, and not leaving it on by default. diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index e58e16735ef..0d464109cc3 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -22,7 +22,7 @@ The only known vulnerability in the protocol is a risk of an active man-in-the-m By default, ZMK supports five "profiles" for selecting which bonded host device should receive the keyboard input. -:::note Connection Management +:::note[Connection Management] When pairing to a host device ZMK saves bond information to the selected profile. It will not replace this automatically when you initiate pairing with another device. To pair with a new device select an unused profile with or clearing the current profile, using the [`&bt` behavior](../behaviors/bluetooth.md) on your keyboard. diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index d31e1c3ee5f..32f09c1c61e 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -44,7 +44,7 @@ Key positions are numbered like the keys in your keymap, starting at 0. So, if t - Fully overlapping combos like `0 1` and `0 1 2` are supported. - You are not limited to `&kp` bindings. You can use all ZMK behaviors there, like `&mo`, `&bt`, `&mt`, `<` etc. -:::note Source-specific behaviors on split keyboards +:::note[Source-specific behaviors on split keyboards] Invoking a source-specific behavior such as one of the [reset behaviors](behaviors/reset.md) using a combo will always trigger it on the central side of the keyboard, regardless of the side that the keys corresponding to `key-positions` are on. ::: diff --git a/docs/docs/user-setup.mdx b/docs/docs/user-setup.mdx index f63e1cf81f9..8892ecbfc21 100644 --- a/docs/docs/user-setup.mdx +++ b/docs/docs/user-setup.mdx @@ -103,7 +103,7 @@ Keyboard Selection: Pick an keyboard: ``` -:::note For a keyboard not in the included list: +:::note[For a keyboard not in the included list:] If you are building firmware for a new keyboard that is not included in the built-in list of keyboards, you can choose any keyboard from the list that is similar to yours (e.g. in terms of unibody/split and [onboard controller](hardware.mdx#onboard)/[composite](hardware.mdx#composite)) to generate the repository, and edit / add necessary files. You can follow the [new shield guide](development/new-shield.mdx) if you are adding support for a composite keyboard. @@ -202,7 +202,7 @@ storage device. Once the flash is complete, the controller should unmount the US flashed firmware. It is recommended that you test your keyboard works over USB first to rule out hardware issues, before trying to connect to it wirelessly. -:::warning Split keyboards +:::warning[Split keyboards] For split keyboards, only the central half (typically the left side) will send keyboard outputs over USB or advertise to other devices over bluetooth. Peripheral half will only send keystrokes to the central once they are paired and connected. For this reason it is diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 20e6a75c90f..34e9e92ffbc 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -157,4 +157,11 @@ module.exports = { }, ], ], + markdown: { + mdx1Compat: { + comments: false, + admonitions: false, + headingIds: true, + }, + }, }; From 1b326ff856fbc017bdad97a2fe0a350f104035db Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 21:36:05 -0800 Subject: [PATCH 0910/1130] fix(docs): Fix relative links with trailing slashes --- docs/docs/behaviors/hold-tap.mdx | 2 +- docs/docs/behaviors/layers.md | 2 +- docs/docs/behaviors/mod-tap.md | 4 +-- docs/docs/intro.md | 56 ++++++++++++++++---------------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/docs/behaviors/hold-tap.mdx b/docs/docs/behaviors/hold-tap.mdx index b0bcb07f999..26af9f1d83a 100644 --- a/docs/docs/behaviors/hold-tap.mdx +++ b/docs/docs/behaviors/hold-tap.mdx @@ -289,7 +289,7 @@ A popular method of implementing Autoshift in ZMK involves a C-preprocessor macr -This hold-tap example implements a [momentary-layer](layers.md/#momentary-layer) when the keybind is held and a [toggle-layer](layers.md/#toggle-layer) when it is tapped. Similar to the Autoshift and Sticky Hold use-cases, a `MO_TOG(layer)` macro is defined such that the `&mo` and `&tog` behaviors can target a single layer. +This hold-tap example implements a [momentary-layer](layers.md#momentary-layer) when the keybind is held and a [toggle-layer](layers.md#toggle-layer) when it is tapped. Similar to the Autoshift and Sticky Hold use-cases, a `MO_TOG(layer)` macro is defined such that the `&mo` and `&tog` behaviors can target a single layer. ```dts title="Hold-Tap Example: Momentary layer on Hold, Toggle layer on Tap" #include diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 1a26f3247ae..7cfb4df7e00 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -74,7 +74,7 @@ You can configure a different tapping term or tweak other properties noted in th ``` :::info -Functionally, the layer-tap is a [hold-tap](hold-tap.mdx) of the ["tap-preferred" flavor](hold-tap.mdx/#flavors) and a [`tapping-term-ms`](hold-tap.mdx/#tapping-term-ms) of 200 that takes in a [`momentary layer`](#momentary-layer) and a [keypress](key-press.md) as its "hold" and "tap" parameters, respectively. +Functionally, the layer-tap is a [hold-tap](hold-tap.mdx) of the ["tap-preferred" flavor](hold-tap.mdx#flavors) and a [`tapping-term-ms`](hold-tap.mdx#tapping-term-ms) of 200 that takes in a [`momentary layer`](#momentary-layer) and a [keypress](key-press.md) as its "hold" and "tap" parameters, respectively. For users who want to send a different [keycode](../codes/index.mdx) depending on if the same key is held or tapped, see [Mod-Tap](mod-tap.md). diff --git a/docs/docs/behaviors/mod-tap.md b/docs/docs/behaviors/mod-tap.md index f60bde459b3..d80dc078bdf 100644 --- a/docs/docs/behaviors/mod-tap.md +++ b/docs/docs/behaviors/mod-tap.md @@ -45,9 +45,9 @@ You can configure a different tapping term in your keymap: ``` :::info -Under the hood, the mod-tap is simply a [hold-tap](hold-tap.mdx) of the ["hold-preferred" flavor](hold-tap.mdx/#flavors) with a [`tapping-term-ms`](hold-tap.mdx/#tapping-term-ms) of 200 that takes in two [keypresses](key-press.md) as its "hold" and "tap" parameters. This means that the mod-tap can be used to invoke **any** [keycode](../codes/index.mdx), and is not limited to only activating [modifier keys](../codes/modifiers.mdx) when it is held. +Under the hood, the mod-tap is simply a [hold-tap](hold-tap.mdx) of the ["hold-preferred" flavor](hold-tap.mdx#flavors) with a [`tapping-term-ms`](hold-tap.mdx#tapping-term-ms) of 200 that takes in two [keypresses](key-press.md) as its "hold" and "tap" parameters. This means that the mod-tap can be used to invoke **any** [keycode](../codes/index.mdx), and is not limited to only activating [modifier keys](../codes/modifiers.mdx) when it is held. -For users who want to momentarily access a specific [layer](../features/keymaps#layers) while a key is held and send a keycode when the same key is tapped, see [Layer-Tap](layers.md/#layer-tap). +For users who want to momentarily access a specific [layer](../features/keymaps.mdx#layers) while a key is held and send a keycode when the same key is tapped, see [Layer-Tap](layers.md#layer-tap). Similarly, for users looking to create a keybind like the mod-tap that invokes behaviors _other_ than [keypresses](key-press.md), like [sticky keys](sticky-key.md) or [key toggles](key-toggle.md), see [Hold-Tap](hold-tap.mdx). diff --git a/docs/docs/intro.md b/docs/docs/intro.md index bfa511844f2..921319251c6 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -14,34 +14,34 @@ ZMK is currently missing some features found in other popular firmware. This tab | Legend: | ✅ Supported | 🚧 Under Development | 💡 Planned | | :------ | :----------- | :------------------- | :--------- | -| **Feature** | ZMK | BlueMicro | QMK | -| ----------------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | -| Low Latency BLE Support | ✅ | ✅ | | -| Multi-Device BLE Support | ✅ | | | -| [USB Connectivity](behaviors/outputs.md) | ✅ | ✅ | ✅ | -| User Configuration Repositories | ✅ | | | -| Split Keyboard Support | ✅ | ✅ | ✅ | -| [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | -| [Hold-Tap](behaviors/hold-tap.mdx) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md/#layer-tap)) | ✅ | ✅ | ✅ | -| [Tap-Dance](behaviors/tap-dance.mdx) | ✅ | ✅[^2] | ✅ | -| [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | -| [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | -| [Encoders](features/encoders.md) | ✅ | ✅ | ✅ | -| [Display Support](features/displays.md)[^1] | 🚧 | 🚧 | ✅ | -| [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | -| [Backlight](features/backlight.mdx) | ✅ | ✅ | ✅ | -| One Shot Keys | ✅ | ✅ | ✅ | -| [Combo Keys](features/combos.md) | ✅ | | ✅ | -| [Macros](behaviors/macros.md) | ✅ | ✅ | ✅ | -| Mouse Keys | 🚧 | ✅ | ✅ | -| Low Active Power Usage | ✅ | | | -| Low Power Sleep States | ✅ | ✅ | | -| [Low Power Mode (VCC Shutoff)](behaviors/power.md) | ✅ | ✅ | | -| Battery Reporting | ✅ | ✅ | | -| Shell over BLE | 💡 | | | -| Realtime Keymap Updating | 💡 | | ✅ | -| AVR/8 Bit | | | ✅ | -| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | +| **Feature** | ZMK | BlueMicro | QMK | +| ---------------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | +| Low Latency BLE Support | ✅ | ✅ | | +| Multi-Device BLE Support | ✅ | | | +| [USB Connectivity](behaviors/outputs.md) | ✅ | ✅ | ✅ | +| User Configuration Repositories | ✅ | | | +| Split Keyboard Support | ✅ | ✅ | ✅ | +| [Keymaps and Layers](behaviors/layers.md) | ✅ | ✅ | ✅ | +| [Hold-Tap](behaviors/hold-tap.mdx) (which includes [Mod-Tap](behaviors/mod-tap.md) and [Layer-Tap](behaviors/layers.md#layer-tap)) | ✅ | ✅ | ✅ | +| [Tap-Dance](behaviors/tap-dance.mdx) | ✅ | ✅[^2] | ✅ | +| [Keyboard Codes](codes/index.mdx#keyboard) | ✅ | ✅ | ✅ | +| [Media](codes/index.mdx#media-controls) & [Consumer](codes/index.mdx#consumer-controls) Codes | ✅ | ✅ | ✅ | +| [Encoders](features/encoders.md) | ✅ | ✅ | ✅ | +| [Display Support](features/displays.md)[^1] | 🚧 | 🚧 | ✅ | +| [RGB Underglow](features/underglow.md) | ✅ | ✅ | ✅ | +| [Backlight](features/backlight.mdx) | ✅ | ✅ | ✅ | +| One Shot Keys | ✅ | ✅ | ✅ | +| [Combo Keys](features/combos.md) | ✅ | | ✅ | +| [Macros](behaviors/macros.md) | ✅ | ✅ | ✅ | +| Mouse Keys | 🚧 | ✅ | ✅ | +| Low Active Power Usage | ✅ | | | +| Low Power Sleep States | ✅ | ✅ | | +| [Low Power Mode (VCC Shutoff)](behaviors/power.md) | ✅ | ✅ | | +| Battery Reporting | ✅ | ✅ | | +| Shell over BLE | 💡 | | | +| Realtime Keymap Updating | 💡 | | ✅ | +| AVR/8 Bit | | | ✅ | +| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | [^2]: Tap-Dances are limited to single and double-tap on BlueMicro [^1]: OLEDs are currently proof of concept in ZMK. From 5cbffd6625aac48487ddf2361ca44d3db33fa7f1 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 21:59:17 -0800 Subject: [PATCH 0911/1130] fix(docs): Work around docusaurus bug causing broken links Some links ended up broken after docusaurus 3 upgrade, especially if they are the second on the same line and have anchors. Likely due to https://github.com/facebook/docusaurus/issues/9518 --- docs/docs/features/conditional-layers.md | 8 ++++---- docs/docs/hardware.mdx | 3 ++- docs/docs/user-setup.mdx | 4 +++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/docs/features/conditional-layers.md b/docs/docs/features/conditional-layers.md index 44e2a5f2a79..f7a4584052e 100644 --- a/docs/docs/features/conditional-layers.md +++ b/docs/docs/features/conditional-layers.md @@ -49,8 +49,8 @@ condition in another configuration, possibly repeatedly. :::warning When configured as a `then-layer`, a layer's activation status is entirely controlled by the -conditional layers feature. Even if the layer is activated for another reason (such as a [momentary -layer](../behaviors/layers.md#momentary-layer) behavior), it will be immediately deactivated if the -associated `then-layers` configuration is not met. As such, we recommend avoiding using regular -layer behaviors for `then-layer` targets. +conditional layers feature. Even if the layer is activated for another reason (such as a +[momentary layer](../behaviors/layers.md#momentary-layer) behavior), it will be immediately +deactivated if the associated `then-layers` configuration is not met. As such, we recommend +avoiding using regular layer behaviors for `then-layer` targets. ::: diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index 15fef39f01a..4fc4f2a700c 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -41,7 +41,8 @@ export const toc = [ ]; With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. -That being said, there are specific [boards](faq.md#what-is-a-board)/[shields](faq.md#what-is-a-shield) that have been implemented and tested by the ZMK contributors, listed below. +That being said, there are specific [boards](faq.md#what-is-a-board) / +[shields](faq.md#what-is-a-shield) that have been implemented and tested by the ZMK contributors, listed below. diff --git a/docs/docs/user-setup.mdx b/docs/docs/user-setup.mdx index 8892ecbfc21..355fc51d5e2 100644 --- a/docs/docs/user-setup.mdx +++ b/docs/docs/user-setup.mdx @@ -105,7 +105,9 @@ Pick an keyboard: :::note[For a keyboard not in the included list:] If you are building firmware for a new keyboard that is not included in the built-in -list of keyboards, you can choose any keyboard from the list that is similar to yours (e.g. in terms of unibody/split and [onboard controller](hardware.mdx#onboard)/[composite](hardware.mdx#composite)) to generate the repository, +list of keyboards, you can choose any keyboard from the list that is similar to yours +(e.g. in terms of unibody/split and [onboard controller](hardware.mdx#onboard) / +[composite](hardware.mdx#composite)) to generate the repository, and edit / add necessary files. You can follow the [new shield guide](development/new-shield.mdx) if you are adding support for a composite keyboard. ::: From 57684f8a66451ef730de1c340bafe7b62b1021f9 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 22:04:47 -0800 Subject: [PATCH 0912/1130] fix(docs): Fix broken anchors in docs (but not blog) --- docs/docs/development/boards-shields-keymaps.md | 2 +- docs/docs/troubleshooting.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 77d8361a8df..8b5e7762e9b 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -11,7 +11,7 @@ The foundational elements needed to get a specific keyboard working with ZMK can - A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. These three core architectural elements are defined per-keyboard, and _where_ they are defined depends on the specifics of how that -keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and shields](../faq.md#why-boards-and-shields--why-not-just-keyboard). +keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and shields](../faq.md#why-boards-and-shields-why-not-just-keyboard). ## Self-Contained Keyboard diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 8c71870c035..769852d137c 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -30,7 +30,7 @@ macOS 13.0 (Ventura) Finder may report an error code 100093 when copying ` Date: Fri, 12 Jan 2024 22:12:58 -0800 Subject: [PATCH 0913/1130] ci(docs): Fix tsc config for docusaurus 3 --- docs/tsconfig.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/tsconfig.json b/docs/tsconfig.json index a9844e97c53..86f17b07315 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "@tsconfig/docusaurus/tsconfig.json", + "extends": "@docusaurus/tsconfig/tsconfig.json", "include": ["src/"], "compilerOptions": { "types": ["node", "@docusaurus/theme-classic"], - "moduleResolution": "Node16", "esModuleInterop": true, "resolveJsonModule": true, "strict": true, From fa91648cce00f034120bfe48b63e230229ab0352 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 22:54:56 -0800 Subject: [PATCH 0914/1130] ci(docs): Use eslint plugin for automatic JSX runtime Ref: https://docusaurus.io/docs/migration/v3#automatic-jsx-runtime and https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md#when-not-to-use-it --- docs/.eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js index b5fc07457a1..78362f57e9a 100644 --- a/docs/.eslintrc.js +++ b/docs/.eslintrc.js @@ -8,6 +8,7 @@ module.exports = { extends: [ "eslint:recommended", "plugin:react/recommended", + "plugin:react/jsx-runtime", "plugin:mdx/recommended", "prettier", ], From 7196f9f075fa799d9577c948b7b4f2114106f592 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 12 Jan 2024 23:16:22 -0800 Subject: [PATCH 0915/1130] ci(docs): Disable eslint rule for unescaped entities eslint-plugin-react is emitting a lot of react/no-unescaped-entities errors in mdx files, primarily due to apostrophes. It seems not ideal to have to escape every apostrophe in all mdx text, so this commit disables the check. There might be a better way to handle this issue, but I am not aware of one right now. --- docs/.eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js index 78362f57e9a..f29e73d22d3 100644 --- a/docs/.eslintrc.js +++ b/docs/.eslintrc.js @@ -20,7 +20,7 @@ module.exports = { sourceType: "module", }, plugins: ["react"], - rules: {}, + rules: { "react/no-unescaped-entities": "off" }, settings: { react: { version: "detect", From 0dc04df09c896c4abbc4226320b91972426a78d3 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 13 Jan 2024 00:03:31 -0800 Subject: [PATCH 0916/1130] fix(docs): Fix eslint-plugin-react errors Remove unused components, and disable proptype checking for children in OsTabs custom component since I can't figure out a way to assign propTypes to it in an mdx file. --- docs/docs/development/build-flash.mdx | 19 ------------------- docs/docs/development/ide-integration.mdx | 20 -------------------- docs/docs/development/setup.mdx | 1 + 3 files changed, 1 insertion(+), 39 deletions(-) diff --git a/docs/docs/development/build-flash.mdx b/docs/docs/development/build-flash.mdx index 650192beedf..25655c8eefd 100644 --- a/docs/docs/development/build-flash.mdx +++ b/docs/docs/development/build-flash.mdx @@ -3,25 +3,6 @@ title: Building and Flashing sidebar_label: Building and Flashing --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -export const OsTabs = (props) => ( - - {props.children} - -); - ## Building From here on, building and flashing ZMK should all be done from the `app/` subdirectory of the ZMK checkout: diff --git a/docs/docs/development/ide-integration.mdx b/docs/docs/development/ide-integration.mdx index 47da1035d69..87a5a4caf55 100644 --- a/docs/docs/development/ide-integration.mdx +++ b/docs/docs/development/ide-integration.mdx @@ -3,26 +3,6 @@ title: IDE Integration sidebar_label: IDE Integration --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -export const OsTabs = (props) => ( - - {props.children} - -); - ## Visual Studio Code Visual Studio Code needs to know some things about the project such as include diff --git a/docs/docs/development/setup.mdx b/docs/docs/development/setup.mdx index 7d5a1dfe14a..63f1bff8bd5 100644 --- a/docs/docs/development/setup.mdx +++ b/docs/docs/development/setup.mdx @@ -19,6 +19,7 @@ export const OsTabs = (props) => ( { label: "Fedora", value: "fedora" }, ]} > + {/* eslint-disable-next-line */} {props.children} ); From 19613128b901723f7b78c136792d72e6ca7cf4fc Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 19 Jan 2024 14:21:47 -0800 Subject: [PATCH 0917/1130] fix(docs): Fix extra line issue in hardware headers Need to make prettier ignore these, because otherwise it splits them to separate lines and reverts the whole change --- docs/docs/hardware.mdx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/docs/hardware.mdx b/docs/docs/hardware.mdx index 4fc4f2a700c..4e452868120 100644 --- a/docs/docs/hardware.mdx +++ b/docs/docs/hardware.mdx @@ -46,15 +46,13 @@ That being said, there are specific [boards](faq.md#what-is-a-board) / - - Other Hardware - +{/* prettier-ignore */} +Other Hardware In addition to the basic keyboard functionality, there is also support for additional keyboard hardware such as encoders, RGB underglow, backlight and displays. Please see pages under the "Features" header in the sidebar for details. - - Contributing - +{/* prettier-ignore */} +Contributing If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](development/new-shield.mdx) documentation and note the [clean room design requirements](development/clean-room.md). From a3fbc2a5ba36db982c32fafbd6dcf0437477bb48 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sun, 7 Jan 2024 21:15:27 -0500 Subject: [PATCH 0918/1130] docs: suggest zmk,matrix-transform over zmk,matrix_transform * While functionally equivalent, the hyphenated form of this property is more consistent with other ZMK properties and adheres to DTS style guidelines. * Additionally, update links to use Zephyr 3.2 documentation instead of 2.5 where appropriate. --- docs/docs/config/kscan.md | 8 ++++---- docs/docs/development/boards-shields-keymaps.md | 10 +++++----- docs/docs/development/build-flash.mdx | 4 ++-- docs/docs/development/new-shield.mdx | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 5aa9bc0f215..045c35ca602 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -30,7 +30,7 @@ Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/in | Property | Type | Description | | ---------------------- | ---- | ------------------------------------------------------------- | | `zmk,kscan` | path | The node for the keyboard scan driver to use | -| `zmk,matrix_transform` | path | The node for the [matrix transform](#matrix-transform) to use | +| `zmk,matrix-transform` | path | The node for the [matrix transform](#matrix-transform) to use | ## Demux Driver @@ -347,7 +347,7 @@ Any keyboard which is not a grid of 1 unit keys will likely have some unused pos / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; kscan0: kscan { @@ -407,7 +407,7 @@ Consider a keyboard with a [duplex matrix](https://wiki.ai03.com/books/pcb-desig / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; kscan0: kscan { @@ -446,7 +446,7 @@ Note that the entire addressable space does not need to be mapped. / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; kscan0: kscan { diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 8b5e7762e9b..3595cb171b3 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -6,7 +6,7 @@ title: Boards, Shields, and Keymaps The foundational elements needed to get a specific keyboard working with ZMK can be broken down into: -- A [KSCAN driver](https://docs.zephyrproject.org/2.5.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. +- A [KSCAN driver](https://docs.zephyrproject.org/3.2.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. - An optional matrix transform, which defines how the KSCAN row/column events are translated into logical "key positions". This is required for non-rectangular keyboards/matrices, where the key positions don't naturally follow the row/columns from the GPIO matrix. - A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. @@ -27,8 +27,8 @@ in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck - A `${board_name}_defconfig` file that forces specific Kconfig settings that are specific to this hardware configuration. Mostly this is SoC settings around the specific hardware configuration. - `${board_name}.dts` which contains all the devicetree definitions, including: - An `#include` line that pulls in the specific microprocessor that is used, e.g. `#include `. - - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) - - (Optional) A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) + - (Optional) A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `board.cmake` file with CMake directives for how to flash to the device. - A `${board_name}.keymap` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. @@ -47,6 +47,6 @@ in the `app/boards/shields/${board_name}` directory, e.g. `app/boards/shields/cl - A `Kconfig.shield` that defines the toplevel Kconfig value for the shield, which uses a supplied utility to function to default the value based on the shield list, e.g. `def_bool $(shields_list_contains,clueboard_california)`. - A `Kconfig.defconfig` file to set default values for things like `ZMK_KEYBOARD_NAME` - A `${shield_name}.overlay` file, which is a devicetree overlay file, that includes: - - A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. - - (Optional) A [chosen](https://docs.zephyrproject.org/2.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/3.2.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. + - (Optional) A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. diff --git a/docs/docs/development/build-flash.mdx b/docs/docs/development/build-flash.mdx index 25655c8eefd..ece474bd60e 100644 --- a/docs/docs/development/build-flash.mdx +++ b/docs/docs/development/build-flash.mdx @@ -16,7 +16,7 @@ an onboard MCU, or one that uses an MCU board addon. ### Keyboard (Shield) + MCU Board -ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/2.5.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.5.0/guides/porting/board_porting.html) +ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/3.2.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/3.2.0/guides/porting/board_porting.html) Given the following: @@ -32,7 +32,7 @@ west build -b proton_c -- -DSHIELD=kyria_left ### Keyboard With Onboard MCU -Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.5.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/3.2.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. Given the following: diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 340db3304e8..2f52839b3a5 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -201,7 +201,7 @@ For `col2row` directed boards like the iris, the shared .dtsi file may look like / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { @@ -336,7 +336,7 @@ Here is an example for the [nice60](https://github.com/Nicell/nice60), which use / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { @@ -362,7 +362,7 @@ Some important things to note: - The `#include ` is critical. The `RC` macro is used to generate the internal storage in the matrix transform, and is actually replaced by a C preprocessor before the final devicetree is compiled into ZMK. - `RC(row, column)` is placed sequentially to define what row and column values that position corresponds to. -- If you have a keyboard with options for `2u` keys in certain positions, or break away portions, it is a good idea to set the chosen `zmk,matrix_transform` to the default arrangement, and include _other_ possible matrix transform nodes in the devicetree that users can select in their user config by overriding the chosen node. +- If you have a keyboard with options for `2u` keys in certain positions, or break away portions, it is a good idea to set the chosen `zmk,matrix-transform` to the default arrangement, and include _other_ possible matrix transform nodes in the devicetree that users can select in their user config by overriding the chosen node. See the [matrix transform section](../config/kscan.md#matrix-transform) in the Keyboard Scan configuration documentation for details and more examples of matrix transforms. From 6b547019c22236d9be88818cbea0d0e925ba597c Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:52:47 -0500 Subject: [PATCH 0919/1130] refactor: use zmk,matrix-transform instead of zmk,matrix_transform * Align codebase with documentation. --- app/boards/arm/adv360pro/adv360pro.dtsi | 2 +- app/boards/arm/bt60/bt60.dtsi | 2 +- app/boards/arm/bt60/bt60_v1.dts | 2 +- app/boards/arm/bt60/bt60_v1.keymap | 10 +++++----- app/boards/arm/bt60/bt60_v1_hs.dts | 2 +- app/boards/arm/ckp/bt60_v2.dts | 2 +- app/boards/arm/ckp/bt60_v2.keymap | 8 ++++---- app/boards/arm/ckp/bt65_v1.dts | 2 +- app/boards/arm/ckp/bt65_v1.keymap | 8 ++++---- app/boards/arm/ckp/bt75_v1.dts | 2 +- app/boards/arm/ckp/bt75_v1.keymap | 6 +++--- app/boards/arm/corneish_zen/corneish_zen.dtsi | 2 +- app/boards/arm/corneish_zen/corneish_zen.keymap | 4 ++-- app/boards/arm/dz60rgb/dz60rgb_rev1.dts | 2 +- app/boards/arm/ferris/ferris_rev02.dts | 2 +- app/boards/arm/glove80/glove80.dtsi | 2 +- app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts | 2 +- app/boards/arm/nice60/nice60.dts | 2 +- app/boards/arm/planck/planck_rev6.dts | 2 +- app/boards/arm/preonic/preonic_rev3.dts | 2 +- app/boards/arm/preonic/preonic_rev3.keymap | 2 +- app/boards/arm/s40nc/s40nc.dts | 2 +- app/boards/shields/a_dux/a_dux.dtsi | 2 +- app/boards/shields/bat43/bat43.overlay | 2 +- app/boards/shields/bfo9000/bfo9000.dtsi | 2 +- app/boards/shields/chalice/chalice.overlay | 2 +- app/boards/shields/clog/clog.dtsi | 2 +- app/boards/shields/corne/corne.dtsi | 2 +- app/boards/shields/cradio/cradio.dtsi | 2 +- app/boards/shields/eek/eek.overlay | 2 +- app/boards/shields/elephant42/elephant42.dtsi | 2 +- app/boards/shields/ergodash/ergodash.dtsi | 2 +- app/boards/shields/eternal_keypad/eternal_keypad.dtsi | 2 +- .../shields/eternal_keypad/eternal_keypad.keymap | 2 +- .../shields/eternal_keypad/eternal_keypad_lefty.keymap | 2 +- app/boards/shields/fourier/fourier.dtsi | 2 +- app/boards/shields/helix/helix.dtsi | 2 +- app/boards/shields/hummingbird/hummingbird.overlay | 2 +- app/boards/shields/iris/iris.dtsi | 2 +- app/boards/shields/jian/jian.dtsi | 2 +- app/boards/shields/jiran/jiran.dtsi | 2 +- app/boards/shields/jorne/jorne.dtsi | 2 +- app/boards/shields/kyria/kyria.dtsi | 2 +- app/boards/shields/kyria/kyria_common.dtsi | 2 +- app/boards/shields/kyria/kyria_rev2.dtsi | 2 +- app/boards/shields/kyria/kyria_rev3.dtsi | 2 +- app/boards/shields/leeloo/leeloo_common.dtsi | 2 +- app/boards/shields/leeloo_micro/leeloo_micro.dtsi | 2 +- app/boards/shields/lily58/lily58.dtsi | 2 +- app/boards/shields/lotus58/lotus58.dtsi | 2 +- app/boards/shields/m60/m60.overlay | 2 +- app/boards/shields/microdox/microdox_common.dtsi | 2 +- app/boards/shields/nibble/nibble.overlay | 2 +- app/boards/shields/osprette/osprette.overlay | 2 +- app/boards/shields/qaz/qaz.overlay | 2 +- app/boards/shields/quefrency/quefrency.dtsi | 2 +- app/boards/shields/redox/redox.dtsi | 2 +- app/boards/shields/reviung34/README.md | 2 +- app/boards/shields/reviung34/reviung34.keymap | 4 ++-- app/boards/shields/reviung34/reviung34.overlay | 2 +- app/boards/shields/reviung41/reviung41.overlay | 2 +- app/boards/shields/reviung5/reviung5.overlay | 2 +- app/boards/shields/reviung53/reviung53.overlay | 2 +- app/boards/shields/romac_plus/romac_plus.dtsi | 2 +- app/boards/shields/snap/snap.dtsi | 2 +- app/boards/shields/sofle/sofle.dtsi | 2 +- .../splitkb_aurora_corne/splitkb_aurora_corne.dtsi | 2 +- .../splitkb_aurora_helix/splitkb_aurora_helix.dtsi | 2 +- .../splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi | 2 +- .../splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi | 2 +- .../splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi | 2 +- app/boards/shields/splitreus62/splitreus62.dtsi | 2 +- app/boards/shields/tg4x/tg4x.overlay | 2 +- app/boards/shields/tidbit/tidbit.dtsi | 2 +- app/boards/shields/waterfowl/waterfowl.dtsi | 2 +- app/boards/shields/zodiark/zodiark.dtsi | 2 +- 76 files changed, 90 insertions(+), 90 deletions(-) diff --git a/app/boards/arm/adv360pro/adv360pro.dtsi b/app/boards/arm/adv360pro/adv360pro.dtsi index 1bffb81c6bb..c64d0d3f77e 100644 --- a/app/boards/arm/adv360pro/adv360pro.dtsi +++ b/app/boards/arm/adv360pro/adv360pro.dtsi @@ -25,7 +25,7 @@ zmk,kscan = &kscan0; zmk,backlight = &backlight; zmk,battery = &vbatt; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; zmk,underglow = &led_strip; }; diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index 68d817ea9c7..ba106c658e4 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -19,7 +19,7 @@ zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; sensors: sensors { diff --git a/app/boards/arm/bt60/bt60_v1.dts b/app/boards/arm/bt60/bt60_v1.dts index 4f66a0c20e3..53d4e77b41d 100644 --- a/app/boards/arm/bt60/bt60_v1.dts +++ b/app/boards/arm/bt60/bt60_v1.dts @@ -11,7 +11,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; }; ansi_transform: keymap_transform_0 { diff --git a/app/boards/arm/bt60/bt60_v1.keymap b/app/boards/arm/bt60/bt60_v1.keymap index 25ae269d306..10575428540 100644 --- a/app/boards/arm/bt60/bt60_v1.keymap +++ b/app/boards/arm/bt60/bt60_v1.keymap @@ -13,15 +13,15 @@ / { chosen { #ifdef ANSI - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; #elif defined(HHKB) - zmk,matrix_transform = &hhkb_transform; + zmk,matrix-transform = &hhkb_transform; #elif defined(ISO) - zmk,matrix_transform = &iso_transform; + zmk,matrix-transform = &iso_transform; #elif defined(ALL_1U) - zmk,matrix_transform = &all_1u_transform; + zmk,matrix-transform = &all_1u_transform; #else - zmk,matrix_transform = &split_transform; + zmk,matrix-transform = &split_transform; #endif }; diff --git a/app/boards/arm/bt60/bt60_v1_hs.dts b/app/boards/arm/bt60/bt60_v1_hs.dts index 155d626cc27..57b47554fc5 100644 --- a/app/boards/arm/bt60/bt60_v1_hs.dts +++ b/app/boards/arm/bt60/bt60_v1_hs.dts @@ -11,7 +11,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/arm/ckp/bt60_v2.dts b/app/boards/arm/ckp/bt60_v2.dts index 19f92287e3f..a3ef75fb3a9 100644 --- a/app/boards/arm/ckp/bt60_v2.dts +++ b/app/boards/arm/ckp/bt60_v2.dts @@ -13,7 +13,7 @@ compatible = "polarityworks,bt60_v2"; chosen { - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; }; diff --git a/app/boards/arm/ckp/bt60_v2.keymap b/app/boards/arm/ckp/bt60_v2.keymap index eeb5c96e373..39ba186ee59 100644 --- a/app/boards/arm/ckp/bt60_v2.keymap +++ b/app/boards/arm/ckp/bt60_v2.keymap @@ -12,13 +12,13 @@ / { chosen { #ifdef ANSI - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; #elif defined(ISO) - zmk,matrix_transform = &iso_transform; + zmk,matrix-transform = &iso_transform; #elif defined(ALL_1U) - zmk,matrix_transform = &all_1u_transform; + zmk,matrix-transform = &all_1u_transform; #elif defined(HHKB) - zmk,matrix_transform = &hhkb_transform; + zmk,matrix-transform = &hhkb_transform; #else #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt60_v2.keymap" #endif diff --git a/app/boards/arm/ckp/bt65_v1.dts b/app/boards/arm/ckp/bt65_v1.dts index 97d80da2fb1..f79587ce128 100644 --- a/app/boards/arm/ckp/bt65_v1.dts +++ b/app/boards/arm/ckp/bt65_v1.dts @@ -13,7 +13,7 @@ compatible = "polarityworks,bt65_v1"; chosen { - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; }; diff --git a/app/boards/arm/ckp/bt65_v1.keymap b/app/boards/arm/ckp/bt65_v1.keymap index 27411a71c21..86db14cb1a6 100644 --- a/app/boards/arm/ckp/bt65_v1.keymap +++ b/app/boards/arm/ckp/bt65_v1.keymap @@ -12,13 +12,13 @@ / { chosen { #ifdef ANSI - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; #elif defined(ISO) - zmk,matrix_transform = &iso_transform; + zmk,matrix-transform = &iso_transform; #elif defined(ALL_1U) - zmk,matrix_transform = &all_1u_transform; + zmk,matrix-transform = &all_1u_transform; #elif defined(HHKB) - zmk,matrix_transform = &hhkb_transform; + zmk,matrix-transform = &hhkb_transform; #else #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt65_v1.keymap" #endif diff --git a/app/boards/arm/ckp/bt75_v1.dts b/app/boards/arm/ckp/bt75_v1.dts index 42aaf351bb7..41281086544 100644 --- a/app/boards/arm/ckp/bt75_v1.dts +++ b/app/boards/arm/ckp/bt75_v1.dts @@ -13,7 +13,7 @@ compatible = "polarityworks,bt75_v1"; chosen { - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; }; diff --git a/app/boards/arm/ckp/bt75_v1.keymap b/app/boards/arm/ckp/bt75_v1.keymap index 5c95387adab..285df1a8686 100644 --- a/app/boards/arm/ckp/bt75_v1.keymap +++ b/app/boards/arm/ckp/bt75_v1.keymap @@ -11,11 +11,11 @@ / { chosen { #ifdef ANSI - zmk,matrix_transform = &ansi_transform; + zmk,matrix-transform = &ansi_transform; #elif defined(ISO) - zmk,matrix_transform = &iso_transform; + zmk,matrix-transform = &iso_transform; #elif defined(ALL_1U) - zmk,matrix_transform = &all_1u_transform; + zmk,matrix-transform = &all_1u_transform; #else #error "Layout not defined, please define a layout using by uncommenting the appropriate line in bt75_v1.keymap" #endif diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index c6f2b630cbe..881fadb0764 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -21,7 +21,7 @@ zmk,kscan = &kscan0; zmk,display = &epd; zephyr,console = &cdc_acm_uart; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/arm/corneish_zen/corneish_zen.keymap b/app/boards/arm/corneish_zen/corneish_zen.keymap index d2549819c03..636c05135eb 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.keymap +++ b/app/boards/arm/corneish_zen/corneish_zen.keymap @@ -11,8 +11,8 @@ / { chosen { - zmk,matrix_transform = &default_transform; - // zmk,matrix_transform = &five_column_transform; + zmk,matrix-transform = &default_transform; + // zmk,matrix-transform = &five_column_transform; }; }; diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts index 25c95ddf8ee..4e1d4b66579 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts @@ -18,7 +18,7 @@ zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 1b9408d2d9b..eb2194209da 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -19,7 +19,7 @@ zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan; - zmk,matrix_transform = &transform; + zmk,matrix-transform = &transform; /* TODO: Enable once we support the IC for underglow zmk,underglow = &led_strip; */ diff --git a/app/boards/arm/glove80/glove80.dtsi b/app/boards/arm/glove80/glove80.dtsi index 3e3a6233b8d..0078fe627fa 100644 --- a/app/boards/arm/glove80/glove80.dtsi +++ b/app/boards/arm/glove80/glove80.dtsi @@ -11,7 +11,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts index ae2f9521071..18c92671d94 100644 --- a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts @@ -17,7 +17,7 @@ zephyr,shell-uart = &cdc_acm_uart; zephyr,code-partition = &code_partition; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; xtal_clk: xtal-clk { diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index 63b9685d3ca..7397cffaba3 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -23,7 +23,7 @@ zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; zmk,underglow = &led_strip; }; diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index 0951d618272..b6f6fca431d 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -18,7 +18,7 @@ zephyr,flash = &flash0; zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; - zmk,matrix_transform = &layout_grid_transform; + zmk,matrix-transform = &layout_grid_transform; }; kscan0: kscan { diff --git a/app/boards/arm/preonic/preonic_rev3.dts b/app/boards/arm/preonic/preonic_rev3.dts index 249c8f3c6ed..16d2b5f9eaf 100644 --- a/app/boards/arm/preonic/preonic_rev3.dts +++ b/app/boards/arm/preonic/preonic_rev3.dts @@ -18,7 +18,7 @@ zephyr,sram = &sram0; zephyr,flash = &flash0; zmk,kscan = &kscan0; - zmk,matrix_transform = &layout_grid_transform; + zmk,matrix-transform = &layout_grid_transform; }; kscan0: kscan_0 { diff --git a/app/boards/arm/preonic/preonic_rev3.keymap b/app/boards/arm/preonic/preonic_rev3.keymap index 350fe6de917..d25c5ca8f61 100644 --- a/app/boards/arm/preonic/preonic_rev3.keymap +++ b/app/boards/arm/preonic/preonic_rev3.keymap @@ -13,7 +13,7 @@ #define RAISE 2 / { - chosen { zmk,matrix_transform = &layout_grid_transform; }; + chosen { zmk,matrix-transform = &layout_grid_transform; }; keymap { compatible = "zmk,keymap"; default_layer { diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index aff09460853..a04f42e1ffb 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -19,7 +19,7 @@ zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/a_dux/a_dux.dtsi b/app/boards/shields/a_dux/a_dux.dtsi index c13f3dd133a..caeae8dba29 100644 --- a/app/boards/shields/a_dux/a_dux.dtsi +++ b/app/boards/shields/a_dux/a_dux.dtsi @@ -10,7 +10,7 @@ chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/bat43/bat43.overlay b/app/boards/shields/bat43/bat43.overlay index 7ebe653a010..600dccec4ad 100644 --- a/app/boards/shields/bat43/bat43.overlay +++ b/app/boards/shields/bat43/bat43.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/bfo9000/bfo9000.dtsi b/app/boards/shields/bfo9000/bfo9000.dtsi index d9d09a8320c..ea9283ad03a 100644 --- a/app/boards/shields/bfo9000/bfo9000.dtsi +++ b/app/boards/shields/bfo9000/bfo9000.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/chalice/chalice.overlay b/app/boards/shields/chalice/chalice.overlay index 85c9b1ed657..92dfe356101 100644 --- a/app/boards/shields/chalice/chalice.overlay +++ b/app/boards/shields/chalice/chalice.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; diff --git a/app/boards/shields/clog/clog.dtsi b/app/boards/shields/clog/clog.dtsi index bcc08c71bea..feea830c6ab 100644 --- a/app/boards/shields/clog/clog.dtsi +++ b/app/boards/shields/clog/clog.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index 5058f67a617..93eb63ad98d 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/cradio/cradio.dtsi b/app/boards/shields/cradio/cradio.dtsi index 3f7ed01cc2c..4f8a09d715c 100644 --- a/app/boards/shields/cradio/cradio.dtsi +++ b/app/boards/shields/cradio/cradio.dtsi @@ -10,7 +10,7 @@ chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/eek/eek.overlay b/app/boards/shields/eek/eek.overlay index 8ec6714e033..e9e734ac8a9 100644 --- a/app/boards/shields/eek/eek.overlay +++ b/app/boards/shields/eek/eek.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi index d364bef9a09..c14fbae1529 100644 --- a/app/boards/shields/elephant42/elephant42.dtsi +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/ergodash/ergodash.dtsi b/app/boards/shields/ergodash/ergodash.dtsi index 7b9ac0125c2..2e41ca3081d 100644 --- a/app/boards/shields/ergodash/ergodash.dtsi +++ b/app/boards/shields/ergodash/ergodash.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi index 14e877e54f5..3144f986f61 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi +++ b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; kscan0: kscan { diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.keymap b/app/boards/shields/eternal_keypad/eternal_keypad.keymap index da06d2744c4..40ac97dfdd9 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad.keymap +++ b/app/boards/shields/eternal_keypad/eternal_keypad.keymap @@ -17,7 +17,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; keymap { diff --git a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap index 81710032152..4dec0bc87ea 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap +++ b/app/boards/shields/eternal_keypad/eternal_keypad_lefty.keymap @@ -17,7 +17,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; keymap { diff --git a/app/boards/shields/fourier/fourier.dtsi b/app/boards/shields/fourier/fourier.dtsi index fdd54901d82..3b309b8dcda 100644 --- a/app/boards/shields/fourier/fourier.dtsi +++ b/app/boards/shields/fourier/fourier.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; /* diff --git a/app/boards/shields/helix/helix.dtsi b/app/boards/shields/helix/helix.dtsi index 2ee68e0fab7..df80f4caec7 100644 --- a/app/boards/shields/helix/helix.dtsi +++ b/app/boards/shields/helix/helix.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay index 661e9489836..871728a28e5 100644 --- a/app/boards/shields/hummingbird/hummingbird.overlay +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; /delete-property/ zephyr,console; /delete-property/ zephyr,shell-uart; }; diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi index 8c5bb447d81..c979214c316 100644 --- a/app/boards/shields/iris/iris.dtsi +++ b/app/boards/shields/iris/iris.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/jian/jian.dtsi b/app/boards/shields/jian/jian.dtsi index 1962ae1536a..c5ae1b9e444 100644 --- a/app/boards/shields/jian/jian.dtsi +++ b/app/boards/shields/jian/jian.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/jiran/jiran.dtsi b/app/boards/shields/jiran/jiran.dtsi index 55ba2cb0776..b6633b65586 100644 --- a/app/boards/shields/jiran/jiran.dtsi +++ b/app/boards/shields/jiran/jiran.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index e5300c86263..cee794acf39 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/kyria/kyria.dtsi b/app/boards/shields/kyria/kyria.dtsi index b98240e495c..8934776facb 100644 --- a/app/boards/shields/kyria/kyria.dtsi +++ b/app/boards/shields/kyria/kyria.dtsi @@ -8,7 +8,7 @@ / { chosen { - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index f68b743e742..0bb34349b0d 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; kscan0: kscan { diff --git a/app/boards/shields/kyria/kyria_rev2.dtsi b/app/boards/shields/kyria/kyria_rev2.dtsi index e61131bfd53..c2586faf997 100644 --- a/app/boards/shields/kyria/kyria_rev2.dtsi +++ b/app/boards/shields/kyria/kyria_rev2.dtsi @@ -8,7 +8,7 @@ / { chosen { - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/kyria/kyria_rev3.dtsi b/app/boards/shields/kyria/kyria_rev3.dtsi index 0cf91c60a07..a782a6ea08e 100644 --- a/app/boards/shields/kyria/kyria_rev3.dtsi +++ b/app/boards/shields/kyria/kyria_rev3.dtsi @@ -8,7 +8,7 @@ / { chosen { - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi index 7c4ab22d8c1..e4b29ad42a5 100644 --- a/app/boards/shields/leeloo/leeloo_common.dtsi +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -9,7 +9,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi index c07c5093cd2..e9958351b40 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -9,7 +9,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index bd6d04e6d67..f1c7c190d6a 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index c58e9404265..1260522ae38 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/m60/m60.overlay b/app/boards/shields/m60/m60.overlay index 7757abefe62..22eed44f35a 100644 --- a/app/boards/shields/m60/m60.overlay +++ b/app/boards/shields/m60/m60.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; kscan0: kscan { diff --git a/app/boards/shields/microdox/microdox_common.dtsi b/app/boards/shields/microdox/microdox_common.dtsi index 1a762aae6de..98f086cd7a3 100644 --- a/app/boards/shields/microdox/microdox_common.dtsi +++ b/app/boards/shields/microdox/microdox_common.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index 8b5a90dac7b..4a84774239c 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; encoder_1: encoder_1 { diff --git a/app/boards/shields/osprette/osprette.overlay b/app/boards/shields/osprette/osprette.overlay index e972e4daa42..af2e5625479 100644 --- a/app/boards/shields/osprette/osprette.overlay +++ b/app/boards/shields/osprette/osprette.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay index 814e5e1a0a1..d0ec5b3a0eb 100644 --- a/app/boards/shields/qaz/qaz.overlay +++ b/app/boards/shields/qaz/qaz.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/quefrency/quefrency.dtsi b/app/boards/shields/quefrency/quefrency.dtsi index f7dc4489918..aadf8d192ff 100644 --- a/app/boards/shields/quefrency/quefrency.dtsi +++ b/app/boards/shields/quefrency/quefrency.dtsi @@ -10,7 +10,7 @@ chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; /* diff --git a/app/boards/shields/redox/redox.dtsi b/app/boards/shields/redox/redox.dtsi index bf5ec9e843a..505a5c69b0a 100644 --- a/app/boards/shields/redox/redox.dtsi +++ b/app/boards/shields/redox/redox.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/reviung34/README.md b/app/boards/shields/reviung34/README.md index e62c52d65e3..a01a7e8b3a6 100644 --- a/app/boards/shields/reviung34/README.md +++ b/app/boards/shields/reviung34/README.md @@ -7,7 +7,7 @@ By default, the 2x1u layout is used. To use to the 1x2u layout, add the followin ``` / { chosen { - zmk,matrix_transform = &single_2u_transform; + zmk,matrix-transform = &single_2u_transform; }; }; ``` diff --git a/app/boards/shields/reviung34/reviung34.keymap b/app/boards/shields/reviung34/reviung34.keymap index 9a0d982dcd7..f7820d3557c 100644 --- a/app/boards/shields/reviung34/reviung34.keymap +++ b/app/boards/shields/reviung34/reviung34.keymap @@ -12,11 +12,11 @@ / { chosen { // 34 keys. - zmk,matrix_transform = &dual_1u_transform; + zmk,matrix-transform = &dual_1u_transform; // 33 keys. Center two thumb keys replaced by a single 2u key. Remember to adjust your // keymap accordingly! - // zmk,matrix_transform = &single_2u_transform; + // zmk,matrix-transform = &single_2u_transform; }; }; diff --git a/app/boards/shields/reviung34/reviung34.overlay b/app/boards/shields/reviung34/reviung34.overlay index 6b1eb16f0fb..6ec9813df3b 100644 --- a/app/boards/shields/reviung34/reviung34.overlay +++ b/app/boards/shields/reviung34/reviung34.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &dual_1u_transform; + zmk,matrix-transform = &dual_1u_transform; }; dual_1u_transform: keymap_transform_0 { diff --git a/app/boards/shields/reviung41/reviung41.overlay b/app/boards/shields/reviung41/reviung41.overlay index 0aecf61959d..079fd36b96e 100644 --- a/app/boards/shields/reviung41/reviung41.overlay +++ b/app/boards/shields/reviung41/reviung41.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/reviung5/reviung5.overlay b/app/boards/shields/reviung5/reviung5.overlay index b21a634a1b7..0382145c69a 100644 --- a/app/boards/shields/reviung5/reviung5.overlay +++ b/app/boards/shields/reviung5/reviung5.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/reviung53/reviung53.overlay b/app/boards/shields/reviung53/reviung53.overlay index 8c11c061de2..d6037aecdaf 100644 --- a/app/boards/shields/reviung53/reviung53.overlay +++ b/app/boards/shields/reviung53/reviung53.overlay @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/romac_plus/romac_plus.dtsi b/app/boards/shields/romac_plus/romac_plus.dtsi index 12fd4387c90..a26242585f7 100644 --- a/app/boards/shields/romac_plus/romac_plus.dtsi +++ b/app/boards/shields/romac_plus/romac_plus.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi index ef466723b9e..902db143903 100644 --- a/app/boards/shields/snap/snap.dtsi +++ b/app/boards/shields/snap/snap.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan_composite; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; left_encoder: encoder_left { diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index c9bf5c8eb37..9ec8c9877ff 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi index 7911f151814..58d530288c4 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi index 29b6dddea36..f586d6f654f 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi index fb993dbb633..b237b69b95a 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi index c064456a235..872c3f69e27 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi index 404782c74c4..8b17a4bd1c8 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index 4a1a58a5ba2..d80f8731fbe 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -9,7 +9,7 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/tg4x/tg4x.overlay b/app/boards/shields/tg4x/tg4x.overlay index e53275c644b..07a0635d5d4 100644 --- a/app/boards/shields/tg4x/tg4x.overlay +++ b/app/boards/shields/tg4x/tg4x.overlay @@ -49,6 +49,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,4) RC(3,5) RC(7,1) chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; }; diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index 110c3fc8734..93451ebc657 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -86,7 +86,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; }; diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index bbe60acd5b7..62548f069f5 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi index 6e91778e7ad..4cd242a9466 100644 --- a/app/boards/shields/zodiark/zodiark.dtsi +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -10,7 +10,7 @@ chosen { zephyr,display = &oled; zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; + zmk,matrix-transform = &default_transform; }; default_transform: keymap_transform_0 { From 1a3529a3e674af2299a583a27dd92fc4f214c59d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 25 Jan 2024 13:03:40 -0800 Subject: [PATCH 0920/1130] fix(ci): Use proper variable expression. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3fcaee26ee7..e0aa7f1679c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -88,7 +88,7 @@ jobs: } - name: Upload artifacts uses: actions/github-script@v7 - continue-on-error: github.event_name == 'pull_request' + continue-on-error: ${{ github.event_name == 'pull_request' }} id: boards-upload with: script: | From a0465391beb69ff3ccd000a9696e80d73362f5f4 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 21 Jan 2024 17:15:58 -0600 Subject: [PATCH 0921/1130] refactor: Improve keymap upgrader Moved the keymap upgrader to a top-level page like the power profiler to make it more discoverable. It upgrades more things than key codes now, so putting it in the codes category doesn't make much sense. Converted the upgrader code to TypeScript and split it up into smaller files to make it easier to add new upgrade functions. Added upgrade functions to remove/replace "label" properties and rename matrix-transform.h to matrix_transform.h. --- docs/docusaurus.config.js | 5 + docs/sidebars.js | 1 - docs/src/components/KeymapUpgrader/index.jsx | 4 +- docs/src/data/keymap-upgrade.js | 85 ------ docs/src/keymap-upgrade.js | 245 ------------------ docs/src/keymap-upgrade/behaviors.ts | 27 ++ docs/src/keymap-upgrade/headers.ts | 40 +++ docs/src/keymap-upgrade/index.ts | 25 ++ docs/src/keymap-upgrade/keycodes.ts | 150 +++++++++++ docs/src/keymap-upgrade/parser.ts | 56 ++++ docs/src/keymap-upgrade/properties.ts | 65 +++++ docs/src/keymap-upgrade/textedit.ts | 153 +++++++++++ .../codes => src/pages}/keymap-upgrader.mdx | 7 +- docs/tsconfig.json | 2 +- 14 files changed, 528 insertions(+), 337 deletions(-) delete mode 100644 docs/src/data/keymap-upgrade.js delete mode 100644 docs/src/keymap-upgrade.js create mode 100644 docs/src/keymap-upgrade/behaviors.ts create mode 100644 docs/src/keymap-upgrade/headers.ts create mode 100644 docs/src/keymap-upgrade/index.ts create mode 100644 docs/src/keymap-upgrade/keycodes.ts create mode 100644 docs/src/keymap-upgrade/parser.ts create mode 100644 docs/src/keymap-upgrade/properties.ts create mode 100644 docs/src/keymap-upgrade/textedit.ts rename docs/{docs/codes => src/pages}/keymap-upgrader.mdx (52%) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 34e9e92ffbc..c9a07179ea9 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -55,6 +55,11 @@ module.exports = { label: "Power Profiler", position: "left", }, + { + to: "keymap-upgrader", + label: "Keymap Upgrader", + position: "left", + }, { href: "https://github.com/zmkfirmware/zmk", label: "GitHub", diff --git a/docs/sidebars.js b/docs/sidebars.js index 19b0ad7e68c..284eb09b38e 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -53,7 +53,6 @@ module.exports = { "codes/applications", "codes/input-assist", "codes/power", - "codes/keymap-upgrader", ], Configuration: [ "config/index", diff --git a/docs/src/components/KeymapUpgrader/index.jsx b/docs/src/components/KeymapUpgrader/index.jsx index 8d3a60b2b82..90429d834d5 100644 --- a/docs/src/components/KeymapUpgrader/index.jsx +++ b/docs/src/components/KeymapUpgrader/index.jsx @@ -40,7 +40,9 @@ function Editor() { onChange={(e) => setKeymap(e.target.value)} >

    - {upgraded} + + {upgraded} +

    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

    ); diff --git a/docs/src/data/keymap-upgrade.js b/docs/src/data/keymap-upgrade.js deleted file mode 100644 index 8e1538281ff..00000000000 --- a/docs/src/data/keymap-upgrade.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: CC-BY-NC-SA-4.0 - */ - -export const Codes = { - NUM_1: "N1", - NUM_2: "N2", - NUM_3: "N3", - NUM_4: "N4", - NUM_5: "N5", - NUM_6: "N6", - NUM_7: "N7", - NUM_8: "N8", - NUM_9: "N9", - NUM_0: "N0", - BKSP: "BSPC", - SPC: "SPACE", - EQL: "EQUAL", - TILD: "TILDE", - SCLN: "SEMI", - QUOT: "SQT", - GRAV: "GRAVE", - CMMA: "COMMA", - PRSC: "PSCRN", - SCLK: "SLCK", - PAUS: "PAUSE_BREAK", - PGUP: "PG_UP", - PGDN: "PG_DN", - RARW: "RIGHT", - LARW: "LEFT", - DARW: "DOWN", - UARW: "UP", - KDIV: "KP_DIVIDE", - KMLT: "KP_MULTIPLY", - KMIN: "KP_MINUS", - KPLS: "KP_PLUS", - UNDO: "K_UNDO", - CUT: "K_CUT", - COPY: "K_COPY", - PSTE: "K_PASTE", - VOLU: "K_VOL_UP", - VOLD: "K_VOL_DN", - CURU: "DLLR", - LPRN: "LPAR", - RPRN: "RPAR", - LCUR: "LBRC", - RCUR: "RBRC", - CRRT: "CARET", - PRCT: "PRCNT", - LABT: "LT", - RABT: "GT", - COLN: "COLON", - KSPC: null, - ATSN: "AT", - BANG: "EXCL", - LCTL: "LCTRL", - LSFT: "LSHIFT", - RCTL: "RCTRL", - RSFT: "RSHIFT", - M_NEXT: "C_NEXT", - M_PREV: "C_PREV", - M_STOP: "C_STOP", - M_EJCT: "C_EJECT", - M_PLAY: "C_PP", - M_MUTE: "C_MUTE", - M_VOLU: "C_VOL_UP", - M_VOLD: "C_VOL_DN", - GUI: "K_CMENU", - MOD_LCTL: "LCTRL", - MOD_LSFT: "LSHIFT", - MOD_LALT: "LALT", - MOD_LGUI: "LGUI", - MOD_RCTL: "RCTRL", - MOD_RSFT: "RSHIFT", - MOD_RALT: "RALT", - MOD_RGUI: "RGUI", -}; - -export const Behaviors = { - cp: "kp", - inc_dec_cp: "inc_dec_kp", - reset: "sys_reset", -}; diff --git a/docs/src/keymap-upgrade.js b/docs/src/keymap-upgrade.js deleted file mode 100644 index 788ab31ab54..00000000000 --- a/docs/src/keymap-upgrade.js +++ /dev/null @@ -1,245 +0,0 @@ -import Parser from "web-tree-sitter"; - -import { Codes, Behaviors } from "./data/keymap-upgrade"; - -const TREE_SITTER_WASM_URL = new URL( - "/node_modules/web-tree-sitter/tree-sitter.wasm", - import.meta.url -); - -let Devicetree; - -export async function initParser() { - await Parser.init({ - locateFile: (path, prefix) => { - // When locating tree-sitter.wasm, use a path that Webpack can map to the correct URL. - if (path == "tree-sitter.wasm") { - return TREE_SITTER_WASM_URL.href; - } - return prefix + path; - }, - }); - Devicetree = await Parser.Language.load("/tree-sitter-devicetree.wasm"); -} - -function createParser() { - if (!Devicetree) { - throw new Error("Parser not loaded. Call initParser() first."); - } - - const parser = new Parser(); - parser.setLanguage(Devicetree); - return parser; -} - -export function upgradeKeymap(text) { - const parser = createParser(); - const tree = parser.parse(text); - - const edits = [...upgradeBehaviors(tree), ...upgradeKeycodes(tree)]; - - return applyEdits(text, edits); -} - -class TextEdit { - /** - * Creates a text edit to replace a range or node with new text. - * Construct with one of: - * - * * `Edit(startIndex, endIndex, newText)` - * * `Edit(node, newText)` - */ - constructor(startIndex, endIndex, newText) { - if (typeof startIndex !== "number") { - const node = startIndex; - newText = endIndex; - startIndex = node.startIndex; - endIndex = node.endIndex; - } - - /** @type number */ - this.startIndex = startIndex; - /** @type number */ - this.endIndex = endIndex; - /** @type string */ - this.newText = newText; - } -} - -/** - * Upgrades deprecated behavior references. - * @param {Parser.Tree} tree - */ -function upgradeBehaviors(tree) { - /** @type TextEdit[] */ - let edits = []; - - const query = Devicetree.query("(reference label: (identifier) @ref)"); - const matches = query.matches(tree.rootNode); - - for (const { captures } of matches) { - const node = findCapture("ref", captures); - if (node) { - edits.push(...getUpgradeEdits(node, Behaviors)); - } - } - - return edits; -} - -/** - * Upgrades deprecated key code identifiers. - * @param {Parser.Tree} tree - */ -function upgradeKeycodes(tree) { - /** @type TextEdit[] */ - let edits = []; - - // No need to filter to the bindings array. The C preprocessor would have - // replaced identifiers anywhere, so upgrading all identifiers preserves the - // original behavior of the keymap (even if that behavior wasn't intended). - const query = Devicetree.query("(identifier) @name"); - const matches = query.matches(tree.rootNode); - - for (const { captures } of matches) { - const node = findCapture("name", captures); - if (node) { - edits.push(...getUpgradeEdits(node, Codes, keycodeReplaceHandler)); - } - } - - return edits; -} - -/** - * @param {Parser.SyntaxNode} node - * @param {string | null} replacement - * @returns TextEdit[] - */ -function keycodeReplaceHandler(node, replacement) { - if (replacement) { - return [new TextEdit(node, replacement)]; - } - - const nodes = findBehaviorNodes(node); - - if (nodes.length === 0) { - console.warn( - `Found deprecated code "${node.text}" but it is not a parameter to a behavior` - ); - return [new TextEdit(node, `/* "${node.text}" no longer exists */`)]; - } - - const oldText = nodes.map((n) => n.text).join(" "); - const newText = `&none /* "${oldText}" no longer exists */`; - - const startIndex = nodes[0].startIndex; - const endIndex = nodes[nodes.length - 1].endIndex; - - return [new TextEdit(startIndex, endIndex, newText)]; -} - -/** - * Returns the node for the named capture. - * @param {string} name - * @param {any[]} captures - * @returns {Parser.SyntaxNode | null} - */ -function findCapture(name, captures) { - for (const c of captures) { - if (c.name === name) { - return c.node; - } - } - - return null; -} - -/** - * Given a parameter to a keymap behavior, returns a list of nodes beginning - * with the behavior and including all parameters. - * Returns an empty array if no behavior was found. - * @param {Parser.SyntaxNode} paramNode - */ -function findBehaviorNodes(paramNode) { - // Walk backwards from the given parameter to find the behavior reference. - let behavior = paramNode.previousNamedSibling; - while (behavior && behavior.type !== "reference") { - behavior = behavior.previousNamedSibling; - } - - if (!behavior) { - return []; - } - - // Walk forward from the behavior to collect all its parameters. - - let nodes = [behavior]; - let param = behavior.nextNamedSibling; - while (param && param.type !== "reference") { - nodes.push(param); - param = param.nextNamedSibling; - } - - return nodes; -} - -/** - * Gets a list of text edits to apply based on a node and a map of text - * replacements. - * - * If replaceHandler is given, it will be called if the node matches a - * deprecated value and it should return the text edits to apply. - * - * @param {Parser.SyntaxNode} node - * @param {Map} replacementMap - * @param {(node: Parser.SyntaxNode, replacement: string | null) => TextEdit[]} replaceHandler - */ -function getUpgradeEdits(node, replacementMap, replaceHandler = undefined) { - for (const [deprecated, replacement] of Object.entries(replacementMap)) { - if (node.text === deprecated) { - if (replaceHandler) { - return replaceHandler(node, replacement); - } else { - return [new TextEdit(node, replacement)]; - } - } - } - return []; -} - -/** - * Sorts a list of text edits in ascending order by position. - * @param {TextEdit[]} edits - */ -function sortEdits(edits) { - return edits.sort((a, b) => a.startIndex - b.startIndex); -} - -/** - * Returns a string with text replacements applied. - * @param {string} text - * @param {TextEdit[]} edits - */ -function applyEdits(text, edits) { - edits = sortEdits(edits); - - /** @type string[] */ - const chunks = []; - let currentIndex = 0; - - for (const edit of edits) { - if (edit.startIndex < currentIndex) { - console.warn("discarding overlapping edit", edit); - continue; - } - - chunks.push(text.substring(currentIndex, edit.startIndex)); - chunks.push(edit.newText); - currentIndex = edit.endIndex; - } - - chunks.push(text.substring(currentIndex)); - - return chunks.join(""); -} diff --git a/docs/src/keymap-upgrade/behaviors.ts b/docs/src/keymap-upgrade/behaviors.ts new file mode 100644 index 00000000000..37c865e82e2 --- /dev/null +++ b/docs/src/keymap-upgrade/behaviors.ts @@ -0,0 +1,27 @@ +import type { Tree } from "web-tree-sitter"; + +import { Devicetree, findCapture } from "./parser"; +import { TextEdit, getUpgradeEdits } from "./textedit"; + +// Map of { "deprecated": "replacement" } behavior names (not including "&" prefixes). +const BEHAVIORS = { + cp: "kp", + inc_dec_cp: "inc_dec_kp", + reset: "sys_reset", +}; + +export function upgradeBehaviors(tree: Tree) { + const edits: TextEdit[] = []; + + const query = Devicetree.query("(reference label: (identifier) @ref)"); + const matches = query.matches(tree.rootNode); + + for (const { captures } of matches) { + const node = findCapture("ref", captures); + if (node) { + edits.push(...getUpgradeEdits(node, BEHAVIORS)); + } + } + + return edits; +} diff --git a/docs/src/keymap-upgrade/headers.ts b/docs/src/keymap-upgrade/headers.ts new file mode 100644 index 00000000000..8aa1928fc17 --- /dev/null +++ b/docs/src/keymap-upgrade/headers.ts @@ -0,0 +1,40 @@ +import type { SyntaxNode, Tree } from "web-tree-sitter"; +import { Devicetree, findCapture } from "./parser"; +import { getUpgradeEdits, MatchFunc, ReplaceFunc, TextEdit } from "./textedit"; + +// Map of { "deprecated": "replacement" } header paths. +const HEADERS = { + "dt-bindings/zmk/matrix-transform.h": "dt-bindings/zmk/matrix_transform.h", +}; + +export function upgradeHeaders(tree: Tree) { + const edits: TextEdit[] = []; + + const query = Devicetree.query( + "(preproc_include path: [(string_literal) (system_lib_string)] @path)" + ); + const matches = query.matches(tree.rootNode); + + for (const { captures } of matches) { + const node = findCapture("path", captures); + if (node) { + edits.push( + ...getUpgradeEdits(node, HEADERS, headerReplaceHandler, isHeaderMatch) + ); + } + } + + return edits; +} + +const isHeaderMatch: MatchFunc = (node, text) => { + return node.text === `"${text}"` || node.text === `<${text}>`; +}; + +const headerReplaceHandler: ReplaceFunc = (node, replacement) => { + if (!replacement) { + throw new Error("Header replacement does not support removing headers"); + } + + return [new TextEdit(node.startIndex + 1, node.endIndex - 1, replacement)]; +}; diff --git a/docs/src/keymap-upgrade/index.ts b/docs/src/keymap-upgrade/index.ts new file mode 100644 index 00000000000..4d091e23766 --- /dev/null +++ b/docs/src/keymap-upgrade/index.ts @@ -0,0 +1,25 @@ +import { createParser } from "./parser"; +import { applyEdits } from "./textedit"; + +import { upgradeBehaviors } from "./behaviors"; +import { upgradeHeaders } from "./headers"; +import { upgradeKeycodes } from "./keycodes"; +import { upgradeProperties } from "./properties"; + +export { initParser } from "./parser"; + +const upgradeFunctions = [ + upgradeBehaviors, + upgradeHeaders, + upgradeKeycodes, + upgradeProperties, +]; + +export function upgradeKeymap(text: string) { + const parser = createParser(); + const tree = parser.parse(text); + + const edits = upgradeFunctions.map((f) => f(tree)).flat(); + + return applyEdits(text, edits); +} diff --git a/docs/src/keymap-upgrade/keycodes.ts b/docs/src/keymap-upgrade/keycodes.ts new file mode 100644 index 00000000000..9a9ede667a6 --- /dev/null +++ b/docs/src/keymap-upgrade/keycodes.ts @@ -0,0 +1,150 @@ +import type { SyntaxNode, Tree } from "web-tree-sitter"; +import { Devicetree, findCapture } from "./parser"; +import { getUpgradeEdits, TextEdit } from "./textedit"; + +// Map of { "DEPRECATED": "REPLACEMENT" } key codes. +const CODES = { + NUM_1: "N1", + NUM_2: "N2", + NUM_3: "N3", + NUM_4: "N4", + NUM_5: "N5", + NUM_6: "N6", + NUM_7: "N7", + NUM_8: "N8", + NUM_9: "N9", + NUM_0: "N0", + BKSP: "BSPC", + SPC: "SPACE", + EQL: "EQUAL", + TILD: "TILDE", + SCLN: "SEMI", + QUOT: "SQT", + GRAV: "GRAVE", + CMMA: "COMMA", + PRSC: "PSCRN", + SCLK: "SLCK", + PAUS: "PAUSE_BREAK", + PGUP: "PG_UP", + PGDN: "PG_DN", + RARW: "RIGHT", + LARW: "LEFT", + DARW: "DOWN", + UARW: "UP", + KDIV: "KP_DIVIDE", + KMLT: "KP_MULTIPLY", + KMIN: "KP_MINUS", + KPLS: "KP_PLUS", + UNDO: "K_UNDO", + CUT: "K_CUT", + COPY: "K_COPY", + PSTE: "K_PASTE", + VOLU: "K_VOL_UP", + VOLD: "K_VOL_DN", + CURU: "DLLR", + LPRN: "LPAR", + RPRN: "RPAR", + LCUR: "LBRC", + RCUR: "RBRC", + CRRT: "CARET", + PRCT: "PRCNT", + LABT: "LT", + RABT: "GT", + COLN: "COLON", + KSPC: null, + ATSN: "AT", + BANG: "EXCL", + LCTL: "LCTRL", + LSFT: "LSHIFT", + RCTL: "RCTRL", + RSFT: "RSHIFT", + M_NEXT: "C_NEXT", + M_PREV: "C_PREV", + M_STOP: "C_STOP", + M_EJCT: "C_EJECT", + M_PLAY: "C_PP", + M_MUTE: "C_MUTE", + M_VOLU: "C_VOL_UP", + M_VOLD: "C_VOL_DN", + GUI: "K_CMENU", + MOD_LCTL: "LCTRL", + MOD_LSFT: "LSHIFT", + MOD_LALT: "LALT", + MOD_LGUI: "LGUI", + MOD_RCTL: "RCTRL", + MOD_RSFT: "RSHIFT", + MOD_RALT: "RALT", + MOD_RGUI: "RGUI", +}; + +/** + * Upgrades deprecated key code identifiers. + */ +export function upgradeKeycodes(tree: Tree) { + const edits: TextEdit[] = []; + + // No need to filter to the bindings array. The C preprocessor would have + // replaced identifiers anywhere, so upgrading all identifiers preserves the + // original behavior of the keymap (even if that behavior wasn't intended). + const query = Devicetree.query("(identifier) @name"); + const matches = query.matches(tree.rootNode); + + for (const { captures } of matches) { + const node = findCapture("name", captures); + if (node) { + edits.push(...getUpgradeEdits(node, CODES, keycodeReplaceHandler)); + } + } + + return edits; +} + +function keycodeReplaceHandler(node: SyntaxNode, replacement: string | null) { + if (replacement) { + return [new TextEdit(node, replacement)]; + } + + const nodes = findBehaviorNodes(node); + + if (nodes.length === 0) { + console.warn( + `Found deprecated code "${node.text}" but it is not a parameter to a behavior` + ); + return [new TextEdit(node, `/* "${node.text}" no longer exists */`)]; + } + + const oldText = nodes.map((n) => n.text).join(" "); + const newText = `&none /* "${oldText}" no longer exists */`; + + const startIndex = nodes[0].startIndex; + const endIndex = nodes[nodes.length - 1].endIndex; + + return [new TextEdit(startIndex, endIndex, newText)]; +} + +/** + * Given a parameter to a keymap behavior, returns a list of nodes beginning + * with the behavior and including all parameters. + * Returns an empty array if no behavior was found. + */ +function findBehaviorNodes(paramNode: SyntaxNode) { + // Walk backwards from the given parameter to find the behavior reference. + let behavior = paramNode.previousNamedSibling; + while (behavior && behavior.type !== "reference") { + behavior = behavior.previousNamedSibling; + } + + if (!behavior) { + return []; + } + + // Walk forward from the behavior to collect all its parameters. + let nodes = [behavior]; + let param = behavior.nextNamedSibling; + while (param && param.type !== "reference") { + nodes.push(param); + param = param.nextNamedSibling; + } + + return nodes; +} diff --git a/docs/src/keymap-upgrade/parser.ts b/docs/src/keymap-upgrade/parser.ts new file mode 100644 index 00000000000..14ed5f8250a --- /dev/null +++ b/docs/src/keymap-upgrade/parser.ts @@ -0,0 +1,56 @@ +import Parser from "web-tree-sitter"; + +const TREE_SITTER_WASM_URL = new URL( + "/node_modules/web-tree-sitter/tree-sitter.wasm", + import.meta.url +); + +export let Devicetree: Parser.Language; + +export async function initParser() { + await Parser.init({ + locateFile: (path: string, prefix: string) => { + // When locating tree-sitter.wasm, use a path that Webpack can map to the correct URL. + if (path == "tree-sitter.wasm") { + return TREE_SITTER_WASM_URL.href; + } + return prefix + path; + }, + }); + Devicetree = await Parser.Language.load("/tree-sitter-devicetree.wasm"); +} + +export function createParser() { + if (!Devicetree) { + throw new Error("Parser not loaded. Call initParser() first."); + } + + const parser = new Parser(); + parser.setLanguage(Devicetree); + return parser; +} + +/** + * Returns the node for the named capture. + */ +export function findCapture(name: string, captures: Parser.QueryCapture[]) { + for (const c of captures) { + if (c.name === name) { + return c.node; + } + } + + return null; +} + +/** + * Returns whether the node for the named capture exists and has the given text. + */ +export function captureHasText( + name: string, + captures: Parser.QueryCapture[], + text: string +) { + const node = findCapture(name, captures); + return node?.text === text; +} diff --git a/docs/src/keymap-upgrade/properties.ts b/docs/src/keymap-upgrade/properties.ts new file mode 100644 index 00000000000..7edc555a9f7 --- /dev/null +++ b/docs/src/keymap-upgrade/properties.ts @@ -0,0 +1,65 @@ +import type { SyntaxNode, Tree } from "web-tree-sitter"; +import { captureHasText, Devicetree, findCapture } from "./parser"; +import { TextEdit } from "./textedit"; + +/** + * Upgrades deprecated properties. + */ +export function upgradeProperties(tree: Tree) { + return removeLabels(tree); +} + +/** + * Renames "label" properties in keymap layers to "display-name". Removes all + * other "label" properties. + */ +function removeLabels(tree: Tree) { + const edits: TextEdit[] = []; + + const query = Devicetree.query("(property name: (identifier) @name) @prop"); + const matches = query.matches(tree.rootNode); + + for (const { captures } of matches) { + const name = findCapture("name", captures); + const node = findCapture("prop", captures); + if (name?.text === "label" && node) { + if (isLayerLabel(node)) { + edits.push(new TextEdit(name, "display-name")); + } else { + edits.push(new TextEdit(node, "")); + } + } + } + + return edits; +} + +/** + * Given a "label" property node, returns whether it is a label for a keymap layer. + */ +function isLayerLabel(node: SyntaxNode) { + const maybeKeymap = node.parent?.parent; + if (!maybeKeymap) { + return false; + } + + const query = Devicetree.query( + `(property + name: (identifier) @name + value: (string_literal) @value + ) @prop` + ); + const matches = query.matches(maybeKeymap); + + for (const { captures } of matches) { + if ( + findCapture("prop", captures)?.parent?.equals(maybeKeymap) && + captureHasText("name", captures, "compatible") && + captureHasText("value", captures, '"zmk,keymap"') + ) { + return true; + } + } + + return false; +} diff --git a/docs/src/keymap-upgrade/textedit.ts b/docs/src/keymap-upgrade/textedit.ts new file mode 100644 index 00000000000..a791c1a6cbc --- /dev/null +++ b/docs/src/keymap-upgrade/textedit.ts @@ -0,0 +1,153 @@ +import type { SyntaxNode } from "web-tree-sitter"; + +export class TextEdit { + startIndex: number; + endIndex: number; + newText: string; + + /** + * Creates a text edit to replace a range with new text. + */ + constructor(startIndex: number, endIndex: number, newText: string); + /** + * Creates a text edit to replace a node with new text. + */ + constructor(node: SyntaxNode, newText: string); + constructor( + startIndex: number | SyntaxNode, + endIndex: number | string, + newText?: string + ) { + if (typeof startIndex !== "number") { + if (typeof endIndex === "string") { + const node = startIndex; + newText = endIndex; + startIndex = node.startIndex; + endIndex = node.endIndex; + } else { + throw new TypeError(); + } + } else if (typeof endIndex !== "number" || typeof newText !== "string") { + throw new TypeError(); + } + + this.startIndex = startIndex; + this.endIndex = endIndex; + this.newText = newText; + } +} + +export type MatchFunc = (node: SyntaxNode, text: string) => boolean; +export type ReplaceFunc = ( + node: SyntaxNode, + replacement: string | null +) => TextEdit[]; + +/** + * Gets a list of text edits to apply based on a node and a map of text + * replacements. + * + * If replaceHandler is given, it will be called if the node matches a + * deprecated value and it should return the text edits to apply. + * Otherwise, the full node is replaced by the new text. + * + * If isMatch is given, it will be called to check if a node matches a + * deprecated value. Otherwise, the node's text is matched against the + * deprecated text. + * + * @param {SyntaxNode} node + * @param {Record} replacementMap + * @param {ReplaceFunc} [replaceHandler] + * @param {MatchFunc} [isMatch] + */ +export function getUpgradeEdits( + node: SyntaxNode, + replacementMap: Record, + replaceHandler?: ReplaceFunc, + isMatch?: MatchFunc +) { + const defaultReplace: ReplaceFunc = (node, replacement) => [ + new TextEdit(node, replacement ?? ""), + ]; + const defaultMatch: MatchFunc = (node, text) => node.text === text; + + replaceHandler = replaceHandler ?? defaultReplace; + isMatch = isMatch ?? defaultMatch; + + for (const [deprecated, replacement] of Object.entries(replacementMap)) { + if (isMatch(node, deprecated)) { + return replaceHandler(node, replacement); + } + } + return []; +} + +/** + * Sorts a list of text edits in ascending order by position. + */ +function sortEdits(edits: TextEdit[]) { + return edits.sort((a, b) => a.startIndex - b.startIndex); +} + +/** + * Returns a string with text replacements applied. + */ +export function applyEdits(text: string, edits: TextEdit[]) { + // If we are removing text and it's the only thing on a line, remove the whole line. + edits = edits.map((e) => (e.newText ? e : expandEditToLine(text, e))); + + edits = sortEdits(edits); + + const chunks: string[] = []; + let currentIndex = 0; + + for (let edit of edits) { + if (edit.startIndex < currentIndex) { + console.warn("discarding overlapping edit", edit); + continue; + } + + chunks.push(text.substring(currentIndex, edit.startIndex)); + chunks.push(edit.newText); + currentIndex = edit.endIndex; + } + + chunks.push(text.substring(currentIndex)); + + return chunks.join(""); +} + +/** + * If the given edit is surrounded by only whitespace on a line, expands it to + * replace the entire line, else returns it unmodified. + */ +function expandEditToLine(text: string, edit: TextEdit) { + // Expand the selection to adjacent whitespace + let newStart = edit.startIndex; + let newEnd = edit.endIndex; + + while (newStart > 0 && text[newStart - 1].match(/[ \t]/)) { + newStart--; + } + + while (newEnd < text.length && text[newEnd].match(/[ \t]/)) { + newEnd++; + } + + // Check that we selected the entire line + if ( + (newEnd !== text.length && text[newEnd] !== "\n") || + (newStart > 0 && text[newStart - 1] !== "\n") + ) { + return edit; + } + + // Select one of the line breaks to remove. + if (newEnd !== text.length) { + newEnd++; + } else if (newStart !== 0) { + newStart--; + } + + return new TextEdit(newStart, newEnd, edit.newText); +} diff --git a/docs/docs/codes/keymap-upgrader.mdx b/docs/src/pages/keymap-upgrader.mdx similarity index 52% rename from docs/docs/codes/keymap-upgrader.mdx rename to docs/src/pages/keymap-upgrader.mdx index bcee82b5f62..5aafc8be79f 100644 --- a/docs/docs/codes/keymap-upgrader.mdx +++ b/docs/src/pages/keymap-upgrader.mdx @@ -7,14 +7,13 @@ hide_table_of_contents: true # Keymap Upgrader -Many codes have been renamed to be more consistent with each other. -Paste the contents of a `.keymap` file below to upgrade all deprecated codes to their replacements. +Some behaviors, key codes, and other features have been renamed to be more consistent with each other. This tool will upgrade most deprecated features to their replacements. -Hover your mouse over the upgraded keymap and click the `Copy` button to copy it to your clipboard. +Paste the contents of a `.keymap` file below. Then, hover your mouse over the upgraded keymap and click the `Copy` button in the upper-right corner to copy it to your clipboard. You will likely need to realign columns in the upgraded keymap. The upgrader also does not handle codes inside a `#define`, so you will need to update those manually using -[this list of deprecated codes and replacements](https://github.com/zmkfirmware/zmk/blob/main/docs/src/data/keymap-upgrade.js). +[this list of deprecated codes and replacements](https://github.com/zmkfirmware/zmk/blob/main/docs/src/keymap-upgrade/keycodes.ts). import KeymapUpgrader from "@site/src/components/KeymapUpgrader/index"; diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 86f17b07315..f73bc2d9445 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@docusaurus/tsconfig/tsconfig.json", + "extends": "@docusaurus/tsconfig", "include": ["src/"], "compilerOptions": { "types": ["node", "@docusaurus/theme-classic"], From 84e056793b7b1200f85317e97e9eaa527176633d Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 21 Jan 2024 18:12:44 -0600 Subject: [PATCH 0922/1130] fix(docs): Fix links to keymap upgrader --- docs/blog/2021-01-27-zmk-sotf-4.md | 2 +- docs/blog/2023-04-06-zephyr-3-2.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/blog/2021-01-27-zmk-sotf-4.md b/docs/blog/2021-01-27-zmk-sotf-4.md index 823c4c5fdca..73047fa5ab2 100644 --- a/docs/blog/2021-01-27-zmk-sotf-4.md +++ b/docs/blog/2021-01-27-zmk-sotf-4.md @@ -80,7 +80,7 @@ to your keymap will send `ESC` when pressed on its own, but will send `` ` `` wh #### Keymap Upgrader -[joelspadin] completed the [Keymap Upgrader](/docs/codes/keymap-upgrader) which can be used to update your keymap to using the latest supported codes, and move away from the old deprecated codes. +[joelspadin] completed the [Keymap Upgrader](/keymap-upgrader) which can be used to update your keymap to using the latest supported codes, and move away from the old deprecated codes. If you've made keymap customizations, please make sure to run your keymaps through the upgrader, since the old deprecated codes will be removed in a future version of ZMK. diff --git a/docs/blog/2023-04-06-zephyr-3-2.md b/docs/blog/2023-04-06-zephyr-3-2.md index 69ecb6dd032..4ba71cacdb2 100644 --- a/docs/blog/2023-04-06-zephyr-3-2.md +++ b/docs/blog/2023-04-06-zephyr-3-2.md @@ -115,7 +115,7 @@ CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n Due to conflicts with new devicetree node labels added for Zephyr's [reset system](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/reset.html), the `&reset` behavior has been renamed to `&sys_reset`. -All of the in-tree keymaps have been fixed, but you may encounter build failures about duplicate names, requiring you rename the behavior reference in your keymap. Use the [Keymap Upgrader](/docs/codes/keymap-upgrader) and this will get fixed for you automatically. +All of the in-tree keymaps have been fixed, but you may encounter build failures about duplicate names, requiring you rename the behavior reference in your keymap. Use the [Keymap Upgrader](/keymap-upgrader) and this will get fixed for you automatically. ## Board/Shield Changes From 37fcf190e682e1c3b72d9011dfb616268a649e5a Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 21 Jan 2024 19:31:55 -0600 Subject: [PATCH 0923/1130] feat(keymap-upgrader): Highlight changes Updated the keymap upgrader to highlight which lines it changed as well as indicate when nothing needed to be upgraded. Also adjusted the line highlight colors to be more readable in both light and dark color schemes. --- docs/src/components/KeymapUpgrader/index.jsx | 18 ++++- docs/src/css/custom.css | 7 +- docs/src/keymap-upgrade/index.ts | 36 ++++++++- docs/src/keymap-upgrade/keycodes.ts | 4 +- docs/src/keymap-upgrade/properties.ts | 4 +- docs/src/keymap-upgrade/textedit.ts | 85 +++++++++++--------- 6 files changed, 109 insertions(+), 45 deletions(-) diff --git a/docs/src/components/KeymapUpgrader/index.jsx b/docs/src/components/KeymapUpgrader/index.jsx index 90429d834d5..fdd4db4b22f 100644 --- a/docs/src/components/KeymapUpgrader/index.jsx +++ b/docs/src/components/KeymapUpgrader/index.jsx @@ -7,7 +7,11 @@ import React from "react"; import { useAsync } from "react-async"; -import { initParser, upgradeKeymap } from "@site/src/keymap-upgrade"; +import { + initParser, + upgradeKeymap, + rangesToLineNumbers, +} from "@site/src/keymap-upgrade"; import CodeBlock from "@theme/CodeBlock"; import styles from "./styles.module.css"; @@ -28,7 +32,15 @@ export default function KeymapUpgrader() { function Editor() { const [keymap, setKeymap] = React.useState(""); - const upgraded = upgradeKeymap(keymap); + + const { text: upgraded, changedRanges } = upgradeKeymap(keymap); + const highlights = rangesToLineNumbers(upgraded, changedRanges); + + let title = "Upgraded Keymap"; + + if (keymap && upgraded === keymap) { + title += " (No Changes)"; + } return (
    @@ -40,7 +52,7 @@ function Editor() { onChange={(e) => setKeymap(e.target.value)} >
    - + {upgraded}
    diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index d9cddb854bc..c2df00e2c5f 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -15,10 +15,15 @@ --ifm-color-primary-lighter: #0280e3; --ifm-color-primary-lightest: #0690fc; --ifm-code-font-size: 95%; + + --docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 8%); +} + +[data-theme="dark"] { + --docusaurus-highlighted-code-line-bg: rgb(255 255 255 / 8%); } .docusaurus-highlight-code-line { - background-color: rgb(72, 77, 91); display: block; margin: 0 calc(-1 * var(--ifm-pre-padding)); padding: 0 var(--ifm-pre-padding); diff --git a/docs/src/keymap-upgrade/index.ts b/docs/src/keymap-upgrade/index.ts index 4d091e23766..3df9bb9df0a 100644 --- a/docs/src/keymap-upgrade/index.ts +++ b/docs/src/keymap-upgrade/index.ts @@ -1,5 +1,5 @@ import { createParser } from "./parser"; -import { applyEdits } from "./textedit"; +import { applyEdits, Range } from "./textedit"; import { upgradeBehaviors } from "./behaviors"; import { upgradeHeaders } from "./headers"; @@ -23,3 +23,37 @@ export function upgradeKeymap(text: string) { return applyEdits(text, edits); } + +export function rangesToLineNumbers( + text: string, + changedRanges: Range[] +): string { + const lineBreaks = getLineBreakPositions(text); + + const changedLines = changedRanges.map((range) => { + const startLine = positionToLineNumber(range.startIndex, lineBreaks); + const endLine = positionToLineNumber(range.endIndex, lineBreaks); + + return startLine === endLine ? `${startLine}` : `${startLine}-${endLine}`; + }); + + return `{${changedLines.join(",")}}`; +} + +function getLineBreakPositions(text: string) { + const positions: number[] = []; + let index = 0; + + while ((index = text.indexOf("\n", index)) >= 0) { + positions.push(index); + index++; + } + + return positions; +} + +function positionToLineNumber(position: number, lineBreaks: number[]) { + const line = lineBreaks.findIndex((lineBreak) => position <= lineBreak); + + return line < 0 ? 0 : line + 1; +} diff --git a/docs/src/keymap-upgrade/keycodes.ts b/docs/src/keymap-upgrade/keycodes.ts index 9a9ede667a6..5069556c6ef 100644 --- a/docs/src/keymap-upgrade/keycodes.ts +++ b/docs/src/keymap-upgrade/keycodes.ts @@ -101,7 +101,7 @@ export function upgradeKeycodes(tree: Tree) { function keycodeReplaceHandler(node: SyntaxNode, replacement: string | null) { if (replacement) { - return [new TextEdit(node, replacement)]; + return [TextEdit.fromNode(node, replacement)]; } const nodes = findBehaviorNodes(node); @@ -110,7 +110,7 @@ function keycodeReplaceHandler(node: SyntaxNode, replacement: string | null) { console.warn( `Found deprecated code "${node.text}" but it is not a parameter to a behavior` ); - return [new TextEdit(node, `/* "${node.text}" no longer exists */`)]; + return [TextEdit.fromNode(node, `/* "${node.text}" no longer exists */`)]; } const oldText = nodes.map((n) => n.text).join(" "); diff --git a/docs/src/keymap-upgrade/properties.ts b/docs/src/keymap-upgrade/properties.ts index 7edc555a9f7..1cd3210fedc 100644 --- a/docs/src/keymap-upgrade/properties.ts +++ b/docs/src/keymap-upgrade/properties.ts @@ -24,9 +24,9 @@ function removeLabels(tree: Tree) { const node = findCapture("prop", captures); if (name?.text === "label" && node) { if (isLayerLabel(node)) { - edits.push(new TextEdit(name, "display-name")); + edits.push(TextEdit.fromNode(name, "display-name")); } else { - edits.push(new TextEdit(node, "")); + edits.push(TextEdit.fromNode(node, "")); } } } diff --git a/docs/src/keymap-upgrade/textedit.ts b/docs/src/keymap-upgrade/textedit.ts index a791c1a6cbc..263b2ab815b 100644 --- a/docs/src/keymap-upgrade/textedit.ts +++ b/docs/src/keymap-upgrade/textedit.ts @@ -1,40 +1,23 @@ import type { SyntaxNode } from "web-tree-sitter"; -export class TextEdit { - startIndex: number; - endIndex: number; +export class Range { + constructor(public startIndex: number, public endIndex: number) {} +} + +export class TextEdit extends Range { newText: string; /** * Creates a text edit to replace a range with new text. */ - constructor(startIndex: number, endIndex: number, newText: string); - /** - * Creates a text edit to replace a node with new text. - */ - constructor(node: SyntaxNode, newText: string); - constructor( - startIndex: number | SyntaxNode, - endIndex: number | string, - newText?: string - ) { - if (typeof startIndex !== "number") { - if (typeof endIndex === "string") { - const node = startIndex; - newText = endIndex; - startIndex = node.startIndex; - endIndex = node.endIndex; - } else { - throw new TypeError(); - } - } else if (typeof endIndex !== "number" || typeof newText !== "string") { - throw new TypeError(); - } - - this.startIndex = startIndex; - this.endIndex = endIndex; + constructor(startIndex: number, endIndex: number, newText: string) { + super(startIndex, endIndex); this.newText = newText; } + + static fromNode(node: SyntaxNode | Range, newText: string) { + return new TextEdit(node.startIndex, node.endIndex, newText); + } } export type MatchFunc = (node: SyntaxNode, text: string) => boolean; @@ -67,7 +50,7 @@ export function getUpgradeEdits( isMatch?: MatchFunc ) { const defaultReplace: ReplaceFunc = (node, replacement) => [ - new TextEdit(node, replacement ?? ""), + TextEdit.fromNode(node, replacement ?? ""), ]; const defaultMatch: MatchFunc = (node, text) => node.text === text; @@ -89,16 +72,26 @@ function sortEdits(edits: TextEdit[]) { return edits.sort((a, b) => a.startIndex - b.startIndex); } +export interface EditResult { + text: string; + changedRanges: Range[]; +} + +interface TextChunk { + text: string; + changed?: boolean; +} + /** - * Returns a string with text replacements applied. + * Returns a string with text replacements applied and a list of ranges within + * that string that were modified. */ export function applyEdits(text: string, edits: TextEdit[]) { // If we are removing text and it's the only thing on a line, remove the whole line. edits = edits.map((e) => (e.newText ? e : expandEditToLine(text, e))); - edits = sortEdits(edits); - const chunks: string[] = []; + const chunks: TextChunk[] = []; let currentIndex = 0; for (let edit of edits) { @@ -107,14 +100,34 @@ export function applyEdits(text: string, edits: TextEdit[]) { continue; } - chunks.push(text.substring(currentIndex, edit.startIndex)); - chunks.push(edit.newText); + chunks.push({ text: text.substring(currentIndex, edit.startIndex) }); + chunks.push({ text: edit.newText, changed: true }); currentIndex = edit.endIndex; } - chunks.push(text.substring(currentIndex)); + chunks.push({ text: text.substring(currentIndex) }); + + // Join all of the text chunks while recording the ranges of any chunks that were changed. + return chunks.reduce( + (prev, current) => { + return { + text: prev.text + current.text, + changedRanges: reduceChangedRanges(prev, current), + }; + }, + { text: "", changedRanges: [] } + ); +} + +function reduceChangedRanges(prev: EditResult, current: TextChunk): Range[] { + if (current.changed) { + return [ + ...prev.changedRanges, + new Range(prev.text.length, prev.text.length + current.text.length), + ]; + } - return chunks.join(""); + return prev.changedRanges; } /** From d4be70587d9e30795accaa4bf5f84afa50dfb2f1 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Mon, 22 Jan 2024 12:43:24 -0600 Subject: [PATCH 0924/1130] fix(keymap-upgrader): Filter key codes to bindings Changed the key code upgrader to only replace codes that appear in "bindings" properties. Modifier flags such as MOD_LCTL are no longer valid as key codes, but they are still used in "mods" properties and should not be replaced there. --- docs/src/keymap-upgrade/keycodes.ts | 27 +++++++++++++++++++++++---- docs/src/pages/keymap-upgrader.mdx | 7 +++++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/docs/src/keymap-upgrade/keycodes.ts b/docs/src/keymap-upgrade/keycodes.ts index 5069556c6ef..5fc3e66abd7 100644 --- a/docs/src/keymap-upgrade/keycodes.ts +++ b/docs/src/keymap-upgrade/keycodes.ts @@ -77,21 +77,24 @@ const CODES = { MOD_RGUI: "RGUI", }; +// Regex matching names of properties that can have keymap bindings. +const BINDINGS_PROPS = /^(bindings|sensor-bindings)$/; + /** * Upgrades deprecated key code identifiers. */ export function upgradeKeycodes(tree: Tree) { const edits: TextEdit[] = []; - // No need to filter to the bindings array. The C preprocessor would have - // replaced identifiers anywhere, so upgrading all identifiers preserves the - // original behavior of the keymap (even if that behavior wasn't intended). const query = Devicetree.query("(identifier) @name"); const matches = query.matches(tree.rootNode); for (const { captures } of matches) { const node = findCapture("name", captures); - if (node) { + + // Some of the codes are still valid to use in other properties such as + // "mods", so only replace those that are inside a "bindings" array. + if (node && isInBindingsArray(node)) { edits.push(...getUpgradeEdits(node, CODES, keycodeReplaceHandler)); } } @@ -148,3 +151,19 @@ function findBehaviorNodes(paramNode: SyntaxNode) { return nodes; } + +/** + * Given a identifier, returns whether it is inside a "bindings" property value. + */ +function isInBindingsArray(identifier: SyntaxNode) { + let node = identifier.parent; + while (node) { + if (node.type === "property") { + return !!node.childForFieldName("name")?.text.match(BINDINGS_PROPS); + } + + node = node.parent; + } + + return false; +} diff --git a/docs/src/pages/keymap-upgrader.mdx b/docs/src/pages/keymap-upgrader.mdx index 5aafc8be79f..d643ca1493a 100644 --- a/docs/src/pages/keymap-upgrader.mdx +++ b/docs/src/pages/keymap-upgrader.mdx @@ -11,10 +11,13 @@ Some behaviors, key codes, and other features have been renamed to be more consi Paste the contents of a `.keymap` file below. Then, hover your mouse over the upgraded keymap and click the `Copy` button in the upper-right corner to copy it to your clipboard. -You will likely need to realign columns in the upgraded keymap. The upgrader also does not handle -codes inside a `#define`, so you will need to update those manually using +:::warning + +The upgrader does not handle key codes inside a `#define` or a behavior creation macro such as `ZMK_MACRO()`, so you will need to update those manually using [this list of deprecated codes and replacements](https://github.com/zmkfirmware/zmk/blob/main/docs/src/keymap-upgrade/keycodes.ts). +::: + import KeymapUpgrader from "@site/src/components/KeymapUpgrader/index"; From bf5284b3b9b682974c98fab8332da2db4e0bafe5 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Mon, 22 Jan 2024 15:11:17 -0600 Subject: [PATCH 0925/1130] fix(keymap-upgrader): Note that changed lines are highlighted --- docs/src/pages/keymap-upgrader.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/pages/keymap-upgrader.mdx b/docs/src/pages/keymap-upgrader.mdx index d643ca1493a..341e31dec7f 100644 --- a/docs/src/pages/keymap-upgrader.mdx +++ b/docs/src/pages/keymap-upgrader.mdx @@ -11,6 +11,8 @@ Some behaviors, key codes, and other features have been renamed to be more consi Paste the contents of a `.keymap` file below. Then, hover your mouse over the upgraded keymap and click the `Copy` button in the upper-right corner to copy it to your clipboard. +Lines that have been modified in the upgraded keymap will be highlighted. + :::warning The upgrader does not handle key codes inside a `#define` or a behavior creation macro such as `ZMK_MACRO()`, so you will need to update those manually using From 08d9391a8a9458937263d8583d62e37b7b04dba1 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Mon, 22 Jan 2024 15:10:52 -0600 Subject: [PATCH 0926/1130] feat(keymap-upgrader): Upgrade renamed nodes Added an upgrade function to fix renamed behavior nodes in the unlikely event that someone was changing behavior settings this way instead of using references. --- docs/src/keymap-upgrade/index.ts | 2 + docs/src/keymap-upgrade/nodes.ts | 49 ++++++++++++++++++++++ docs/src/keymap-upgrade/parser.ts | 67 +++++++++++++++++++++++++++++++ docs/tsconfig.json | 2 +- 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 docs/src/keymap-upgrade/nodes.ts diff --git a/docs/src/keymap-upgrade/index.ts b/docs/src/keymap-upgrade/index.ts index 3df9bb9df0a..c46cbe075e2 100644 --- a/docs/src/keymap-upgrade/index.ts +++ b/docs/src/keymap-upgrade/index.ts @@ -4,6 +4,7 @@ import { applyEdits, Range } from "./textedit"; import { upgradeBehaviors } from "./behaviors"; import { upgradeHeaders } from "./headers"; import { upgradeKeycodes } from "./keycodes"; +import { upgradeNodeNames } from "./nodes"; import { upgradeProperties } from "./properties"; export { initParser } from "./parser"; @@ -12,6 +13,7 @@ const upgradeFunctions = [ upgradeBehaviors, upgradeHeaders, upgradeKeycodes, + upgradeNodeNames, upgradeProperties, ]; diff --git a/docs/src/keymap-upgrade/nodes.ts b/docs/src/keymap-upgrade/nodes.ts new file mode 100644 index 00000000000..80a80be287f --- /dev/null +++ b/docs/src/keymap-upgrade/nodes.ts @@ -0,0 +1,49 @@ +import type { Tree } from "web-tree-sitter"; + +import { findDevicetreeNode } from "./parser"; +import { TextEdit } from "./textedit"; + +// Map of { "deprecated path": "replacement name" } for devicetree nodes. +// Relocating nodes to another place in the tree is not supported. +const NODES = { + "/behaviors/behavior_backlight": "bcklight", + "/behaviors/behavior_caps_word": "caps_word", + "/behaviors/behavior_ext_power": "extpower", + "/behaviors/behavior_key_press": "key_press", + "/behaviors/behavior_key_repeat": "key_repeat", + "/behaviors/behavior_key_toggle": "key_toggle", + "/behaviors/behavior_layer_tap": "layer_tap", + "/behaviors/behavior_mod_tap": "mod_tap", + "/behaviors/behavior_momentary_layer": "momentary_layer", + "/behaviors/behavior_none": "none", + "/behaviors/behavior_outputs": "outputs", + "/behaviors/behavior_behavior_reset": "sysreset", + "/behaviors/behavior_reset_dfu": "bootload", + "/behaviors/behavior_rgb_underglow": "rgb_ug", + "/behaviors/behavior_sensor_rotate_key_press": "enc_key_press", + "/behaviors/behavior_sticky_key": "sticky_key", + "/behaviors/behavior_sticky_layer": "sticky_layer", + "/behaviors/behavior_to_layer": "to_layer", + "/behaviors/behavior_toggle_layer": "toggle_layer", + "/behaviors/behavior_transparent": "transparent", + "/behaviors/macro_control_mode_tap": "macro_tap", + "/behaviors/macro_control_mode_press": "macro_press", + "/behaviors/macro_control_mode_release": "macro_release", + "/behaviors/macro_control_tap_time": "macro_tap_time", + "/behaviors/macro_control_wait_time": "macro_wait_time", +}; + +export function upgradeNodeNames(tree: Tree) { + const edits: TextEdit[] = []; + + for (const [path, newName] of Object.entries(NODES)) { + for (const node of findDevicetreeNode(tree, path)) { + const name = node.childForFieldName("name"); + if (name) { + edits.push(TextEdit.fromNode(name, newName)); + } + } + } + + return edits; +} diff --git a/docs/src/keymap-upgrade/parser.ts b/docs/src/keymap-upgrade/parser.ts index 14ed5f8250a..9b23cdd810c 100644 --- a/docs/src/keymap-upgrade/parser.ts +++ b/docs/src/keymap-upgrade/parser.ts @@ -54,3 +54,70 @@ export function captureHasText( const node = findCapture(name, captures); return node?.text === text; } + +/** + * Get a list of SyntaxNodes representing a devicetree node with the given path. + * (The same node may be listed multiple times within a file.) + * + * @param path Absolute path to the node (must start with "/") + */ +export function findDevicetreeNode( + tree: Parser.Tree, + path: string +): Parser.SyntaxNode[] { + const query = Devicetree.query("(node) @node"); + const matches = query.matches(tree.rootNode); + + const result: Parser.SyntaxNode[] = []; + + for (const { captures } of matches) { + const node = findCapture("node", captures); + + if (node && getDevicetreeNodePath(node) === path) { + result.push(node); + } + } + + return result; +} + +export function getDevicetreeNodePath(node: Parser.SyntaxNode | null) { + const parts = getDevicetreeNodePathParts(node); + + if (parts.length === 0) { + return ""; + } + + if (parts.length === 1) { + return parts[0]; + } + + const path = parts.join("/"); + + // The top-level node should be named "/", which is a special case since the + // path should not start with "//". + return parts[0] === "/" ? path.substring(1) : path; +} + +export function getDevicetreeNodePathParts( + node: Parser.SyntaxNode | null +): string[] { + // There may be intermediate syntax nodes between devicetree nodes, such as + // #if blocks, so if we aren't currently on a "node" node, traverse up the + // tree until we find one. + const dtnode = getContainingDevicetreeNode(node); + if (!dtnode) { + return []; + } + + const name = dtnode.childForFieldName("name")?.text ?? ""; + + return [...getDevicetreeNodePathParts(dtnode.parent), name]; +} + +function getContainingDevicetreeNode(node: Parser.SyntaxNode | null) { + while (node && node.type !== "node") { + node = node.parent; + } + return node; +} diff --git a/docs/tsconfig.json b/docs/tsconfig.json index f73bc2d9445..e3f649ee404 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -8,6 +8,6 @@ "strict": true, "noEmit": true, "target": "ES6", - "lib": ["ES2019.Array", "DOM", "DOM.Iterable"] + "lib": ["ES2022", "DOM", "DOM.Iterable"] } } From 1dbd6910cbb1897f919a5d87b758b62a30e14c1f Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Mon, 22 Jan 2024 23:24:24 -0600 Subject: [PATCH 0927/1130] chore(docs): Update tree-sitter-devicetree to 0.9.0 --- docs/static/tree-sitter-devicetree.wasm | Bin 40229 -> 160438 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/static/tree-sitter-devicetree.wasm b/docs/static/tree-sitter-devicetree.wasm index cce5ac9656c93720f1840dd7d89cb23b19d6e66b..885c5274ba287206b7d7fb93ec0f8741e4c7f32c 100644 GIT binary patch literal 160438 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

    CLxH0co!>n(IzgAe97YCC|@S#6UWBM z()o3wsJSUkP&v9|&YabU!^97}0GC4MMapY?s z7f1QI`2x!0*~#R1wu>WQ`v8vdzix#-g3ofX;j65%In8sI(RXE@a!sLHpaPFSP=UXQ zIG2?^r6oDT#gp^atW*zld#0&SBT%7%sZcXefm75d)e2OoZz`PbslYR#|CnBFC~=wd z_Eh}zB^T<8QqQzp+taeHP}fwb6R1$fRHz%Mz$t3kspqM{13T(`2)u^Yy#~~DqNkf? z>U)~e6>6CZX9OzLG!+^IDsYNgWM>8{R5umQ3RI|ODx4jtaGI&mFi@eYsc?>mLUa>4 z?ia%=!n?j^RZKSc5lN40XSzaVQ=xI7LM2n7NuUC!s4eojfeIB&h4TUx%9{#J0~Jm+ z6`FY}@FOapxC4WJi?cM8v@PXpI>@BZ*;AgUTY98WUdj1hpUOX%ZSjqg=xb3f5n83Z zXi1^Tz>#VUxI|}AHY9`16h}#if|G#6{bA!4?NdQIoLv327;mgvB})1z|cq zU67>aq%&|6v^335tkRfcmZDAtfLpkYsP#&A(B!UM)^ME6z^^-Qz>-P zCpIT3lre~Xh)eZU@TE$aBuvw_Ws&7In zN)|6Dsm_8gU`Q5z%T&l=VXTN0N)}>8xKwAsS12S4a~%pgzNH(HaxT@~@FmdPEX4(K zkCO#nYVx|s7jz9h%dsxs`E5{A-8xTrIP1UAk`!=R->sy&b)GWK`Z9m+&P(`DREznc zrkmj@(ae14ZARDN!D|}JgEe?Sng;(I!XwSP56)84;2&%RXyh|BRt0Nh#-*Vz{#P(s zyg)kixKu9wXG*F^kT>Hixojz zkQGCl%}Ss>hm}Ixh?POxgq1_vl$A%@oK;49KC6nh6|08!LbkxRSTD8$?bU2G+N;=R zw3o5=X%@SZ6@u5i@LLg&E!hRE1|D0pi&&|&2*fs20b{D&w z-NQPu&a4aT%AR1yI|7}1Es7?w2#Tr*3ZB3SYUd(??ka-x6Bt3=Ttsk{iXh%K(CfWE zJZG>5X!EkO&}O3I`4P|rZE0U6;Rw9gIUdF!g8Nuc_5hB;EUN$O*$wPQc9S{^da(Q1ljxecT=NkM~pc~pO)&p%p z?8W?5;9<1qu*c9g!oJS;|2}A&vVLfrvq5Ns&V4$=6F>JE=z)m-8Eh`vylg(&Otu(pHd}(WI9rCc1Y3@_5nGA230sY}DO-cKIr{|d`D{Jf3)$G1 z{ad`_7)|^4LhRf8oyIz6|857~{C!4+9AD?XcJJJ?7JNS=?%`Mua#)u>VXQYMz`CBp zy7CEQy*UBay-qmmEeWtLy@S`v*0oHv_IO{?Qu%6=7bAap#?w z{vI(K-fUJBZ5k_qHl3A5o53oe&BnEN{vPZ!w2fE|v`yIQXq&RSXqyMT?<$Agg1>7# z!`U@%gLnR(@j@2#&P(#tceJzMF@v3hHZMNX;QL(*wAt(ew8dF#v?bUjXdAK1(KcaM zqHW5qLEAiFk7x>h{QTm2hbOZn&-k*LfqnFNd?IlZxU!I+LIl0{mYF%wsmzT7JsZ7Jf2VJG6OOd$gJCZnUScPH3}PXSBsxSF|NqceIUI5425K zPqaN2e|ycIxuc9C!ct7{<@-Q7}9uB*PXdW%zgk3{#uKUMD@n z-U%@5oYGb9n*hUhDP`C%0fx7vl;MB`81_yn!>1EqSTm&z2PMETwY$x82{5de(i}dY z0K?SgaL7r|aM(%D@TCM8o{`czd^rJz4N}T*L;?)YOew>W2{26Uu{`ReXZZR_&v491 z&v4vH&+x62p5faGFgz!vyUm0I7&b~N!$}D+Y@AYtlM`T=+8ujp0t}m^G>6j?V0dmy z8O}(6VQN=-=1I?Rb^;8qOzA4mO@Lvmlro&30K?SQ;lh)i;o<}s)=23pFG+x5YFByL zNzZWkNzZWQNzZU~0t_!o>5;M~0fwnPQa(w5;l(M<;kpDEUY1gZ>l0v@+ExDSq-VJC zq-VJKq-VG#X$_^`vq+Y_AA;(>>%1E>=4?f z>@eEqY_iWM;P22U;NLr+fdB1$0)AskkL6=v81@tJYf{SazXTXwn^J}r);DYp!|#U? zc*$VtX!EiRw3#eF+H97Ewm2(Kop)z>n zfBT!-IxGi{mj0t~N9DZ`2hFuXpc3@azV@P?E!teODB@W*mn>}lp*Rq@}m zRPCf^SR(<3ccyfeYbC(&f|N3>odCns)?wWQ7+#Um9M(^OVQO>OAOVKMQkuiF5@0wa zr3@P;z%aF|+~}ld*dzgl&!=>i&r5(|$CNT`mH@-MQ_8SK0t_!rDZ`ctFuXUV3|l3@ zFtxi)>jW5Hp3)p%oB+fADP?$R0t{2T%9o$?4BMRa46i!r8D5hB!)kFIDefzrr?Bhb zD}&vLHZQvcZ6<4nHk)-oTb$jEwgkHuZ6nqdZ4-7M+NP{0+MvJjx!t+4^pJC9DYZw+ zqhJ{J%2JQGa+veqNyYz;{_zAD4oE4(UI{Sd-;u_@A<+99(vJ6Ea`jGt;e#n<*f#-& z52ci0zXTYj_E;W}0K4-SVE9r>8NQwX!{I4q zI3@vxsjb6t2{3#)r8#^n0fwo~;oAu?d?lqhoR9#+)aG!~NzZWdNzZWVNzZWFNzZV` zac3BDz8Pw^&3{j!3@gh{XZ6@jyBNOjhX0;IDSU5x75rMlY53iPnyeP9&FZkatUfyf z-#ULLzH|O;)({pVn4O2sH*CyJ$i`yB#=?YbEHi8@Nyx@ZJ3qeLDGlF>m4R!2{F|k- z@qJj$@f}vn?SlBWCjOfb#gLmuxa!vw@67n!Vd7hnWj5CMT38)mA>GO6daQOS_9}9F zCtGL4^oh-{vvL19txL9J=QG&JVjIyGqhGct&A!6()7W;jr?cy=@W^Z67d-Mh*oQ~G7WN~0h8)G_=b&$1WafVN z)%_z-_pq<-UxB*+`05_>)s<@%LAFYNH;)ses8@F-7K@}gJ6AncB$B0$i`acC z)3D>02X{pm!#C_@;ixDQ;lDj2j=8Aq{6_u-!(ym~dZCY;A`$*wZMyve9=64?nW%?6 zh6gYE`VQciA-`k4NW`?C<-tF8p9$|JU5i52Rk4Wv`c)(n&;BTnU9oC%XEW=mkn+Wk z-{`u_*S-v+rrfnDcSX}?er40Nm(Q>jHZRdSb=Q&1Q7I!wCF07F)GgzC+?Mk_Zcnss zd0);I136bUa#cB0uB!R^tr6(=MCsP@RueEn;XuT`ue>*&~F=G-Kzq1bL00KU%%G{`n|zd z_ohJI+;G0d*Y9nCe%t!$whPp4@2lG}Q1@LnlJ>7N0oz8D!2C-_S>szYoh2@?{C6$l$slT^72_=UJ_r6#C;~Nc_P?u@yYFG-`wI80et4tf_;TH z5Br8bi{rn&!as{E?0h;TK7Tvi`2@S3&u7@-eanjY$LBo<|LoBF=sd-_-oFiev)FdD z#n^XfOS7NQp3Z(jTZipKTbJ!eTaO(?Tc71cJAmy(E%Q%icjJ-A_9GtoC$s$5H2Ej9 zf8ddSN^uyE`X{s1e6q{0O~=nOXNG@)VQF?wu6QQC5{YYu&y8ID@S5RwyMK^REA;1z z;r$$=)eHOiQ$eGebFPoDwfi4xSl_p;H2u@QNLt*Vup4?AaqDFodimql%QEx|#jTfZ z=oJanlb;-ltcT5RG5qo!|Ae~)yz(rIPbK9io5H4hmyx?lv9#!??rM!zH=UR8a`bBFzLopP0 zvB|qjyzAVo)BG-7c^81J(K1GjmJ6&=saM|6s~ERlWkauO+#d~tn&jzgLV&MZJhg6vR!+4s)l+M7fUg;z zTGIlws(EVF2w)g?-w?-gVp?rH8D5nXhVwmr%?-%mVo$Aw0a}S=e!uOtV;{tO&YUW0 znJ2>~0Ss4qYAp}Y8sMqb&qu3(^O{l(uPIrqF4{V*KH9ph0or=(EVT7m6SOT@Eu5e7 zbHj#sz&1&GhgTEK%ug7wy?d!>>w+|nwwcIn$D}C}DUlix% zB8tRz$Tgm^uMUVk+zQH!C6?#Je699eoi#qIb0QcfmW{A`g1F9Agz73gE)^QctAxZ=4+j&uTPTV>rqc%5BvDa>+D)35;&s8`&a(nnqPa&<7p{&XDgP* z@66$Qo79x=tHWGxX$HQfL%*9#GdM`QG z3AZYl9+~pXQ8Y9B3W?mC^eoAvIp;IHmXyO_FS=!UJ)$b z`1yN$71Ao93K4s3V);%?>mSd2A49&quc--!Ej{zy$|v8l`kHxawFuBE@2OQ0T3!s} zTbJgyT-cze%fL23KtwsS_ ztv$6a4$$(y2H{mda=lWa6<@7hoQqmb_sm!ZGM3XGeAshO_$y!!F68MeJHS_BdG^1` zmeZR0UzPZut>u5+HmA7!-@TtKTGx11)O7(Bb%UqYO#xbWdunwG(CX}|)iprN|N25s znNOvb|5-s!`-cB3bxvCTuctX_`M;j#q~-s5>ZKLm{(NaJ_GkZBYA-(WwW+6P)jjA_ zb@4@Uc`l;xKXb?_3jZ?)Z!PiewGi>liu2u*%$WcAMozvelCSb1efgiI6X8b7$>~_{xz5A^j!zK9q+s!`c-1{Hf ztr7HIYJZFd|9mW`SAvsMqfJb9ufmQL9Ebj0JMl%HT#eQghwdZj9Y(_#ji7fj?PD~8 z-Z6EL(Fl5H)+9zF=pA5#7>%H67e|zytDqyQR*a9Jcg~lRhQ5Pb9#B^&r^YQYaqv4U zaymZB$K=ZIs)yI!ne(oB3--wO2-@qm#2hJ`1CEqxF&Z^a0*#e1tb*=F5s~X_9u)b>sj)F;=lU#Q zJ;JYfc#TJ6SowWoF871*KFY+bdAWedlc^DYmugSD6#rcq^L61r+k2M^ztZ7XL7X$_ zJBZ&oL-=?*QoP+_;$^N~IlSe&$uj?K9W#?RxGc+B6PeVb^gCw4bLm7}dc<(K$;BnS z<<4aJ!5GW8xGc*k#p>%(1|5U(=SBKRv?jx_3SY%1XB^>Kg^xV^ny-u5se|sL5*qpn z25Iz)*{S{R3k!c#bfu%>?wF$@&F82PT=ds{KQ6Mym&LI6yFWHO`|iZPdkp*Qeb_IK z;o^5Uad<90h)bs!E{%P-%#Yy`bU*Z(7!AKWPQ$bBN$ekpVV~_{AKvnVWSRe>oB8Te zAlH^3Cd&`SSk9Mg%a4-fM`A2zxGc*W7gv<@qvEQ7b18APQP=Rh+9-Vtpw-tk{Or`A7*N^0&tI6TlZBWdS9CR;Z`2FSi7$46C?0Umu zG=l!(F#I0&a*U6lzfTMwxyY`*f!o)EyCc9$- zvio+7##;dz;aRPW@ey=ods&Qz-}_aWEAg&U&#vFQN~s~<`{^1%@BPGin6BY>W-fi4 zoEqY&)#C^{YQ zm*>LT+!$;5UDo9HoXy9~QfwjGDr_;@s%#nBi`f#b2A*)OpsA~CEhjs=ZZ{uYQGt5> ztR!8%aw_`h3eLLU)iHi&#;v<1M)wgP-B`|_#BlEEqZ`Y4U5ww6aqF&+(H-EU8_W5# z7|xx2bYnShjPctkZr#l>y7$JdyCp`qOWe9&#prg8Tlbq7-5XrG@;eCQImgq_?jFhU zc+_iqTMUPRE)M?3c?YcAKlnG*%{;azPNRF$LKyBx9*QIy1nAo z{V7KG`M7m|iP62*M>jUl`$$*MbN#q=_s8hgi(B_#jBeeyb$^f1trNHIA2GVMG5zH*b($SV? z8Kjkowkpe?9z73y1HTD;2W!XLvkt5y&LG8EpwJYvvq)3dc{fm}P>jyofjZeSI+Fu+ zip1zlF?75>^C||N3|0bdURDZiCM$zBA1jA8zj02w2A_QOV*K}pFJoh|Vpn?Rr#$qk z7&)D4aPZ1$#TcFU0(C0K=u8XLsT!kG-U?dpYB4$!1O3#9(U~5oQ!7U2^gwR4V|3;Q z`l%bEGsDo4uk`gXFN>XtwjgVWwiIiOwk$grZ57rGZB?T>-nG+E5x3#k=>t7++~{Wu z=R+fdU4S+(yAW+Ay9jMQb_rVlI(yf*&Mt$VS!Wdj^L0gx&Lq#+b>3G(rxd#yZCQ3L z>0gi5jQxErcCY%rk@WOEqkzHHD_=K5CxhLJHZQv!Z6><|Z9aAc^Rj!;X0m(H=3`yZ`rGSG_GC@O=0)V98*G$i_o1!gTN7UIVDE=U2Kyf0<$tZC zx03c4@%L%lXr~#1?<>EOrQ;XK`7gD5S$Tl0yoq=G*RqAAub+VmD}BgHA^bf*w<5n8 zS&!!-SV?D(kgdni=4DTy%{1cqgsg8SUe8iyy!bpxHcC)bOMLkBAU+KoK3-P(kd>8W zWwDQyVPvJ9<)53U$jW1$ezC98;PM*acoA?a?{%5XZlacP!>+u{S*9mEW|j9|K~q z6UX$M&^3?dNAS&AVuugX9Ur6nqSE!skvRK!2U;0yB3iR1^gN664jJDR%*|r&ddBDF zN4)yHM}DT~=tsQnNI$d4&-@wd>w;_<&Q`@vn1va!ue17*ke802mFW@8opzHNvk=}u1gH!#Z4Z=KPt#;BRK9h5b_CYON&&#rEV=a*ZNUZP`P zL%$&7{-a~k!%mD@Y&Y5n`w?v+_7mE|>=(2})#`~^`)JmFnstz7{q8aA51MtDX8lF8 z{_&V~jAs2uv#dPaV+5_+V>)E0B(#NCCe6z4F)NE^6{1<$G^>cmtYS2)1kEZ%v&zsc zxe_u z)o{k-x1iM`z1nC`Wp&Y(XMf>n?u%6vmF2e{a=botBCG-0LhLNGg;_(iMWHXgv7r%q zjad`4=d$zAHe-*0$GysaGsq&W1=>QaCECKQ722XM?pNcexSh3D+yytkDlp@Ih;%Pj zx`LNrbSZo_W|yOF#vXKdiSag&m19?-J(XR9wmkdZ$%`1jj>d1G@tbJ;4C7yKev=? zA$)cvpWVslOGeB+AS=guqCJ&8h_*aCX2dM?AI3;y_9)tB?0G|9ucF5>Ud~lZen*GN zuNT?xP4-_Q`!cS6kmX~2W8xY>zMe*VDti{KyM~{KEW(DMEyRYQEzDj*TNE;p&k^Y5 zV=pVa<{DI{`WdO#K&-zW>nP~USf$M|Wb^eHo8uslu(!|_V^<=&-m21t>}?vq(_>@; zja=n1GRb#jGL4k-(3wgjr+AD^^R+gEMyh(~%%qWm#)$ZBu-OM)+^K zMc4E{V(>9Wih1T>9qE)abcCPvG*aGUjC==~#de}C#CD@~`}vV{su|owq(9M!7lU7Dq`HUBK3|>vG*ZJu=b*37 z?=(`=L+1|<9e$2fj2*^EY0s+q%R@(G=O2s|V#mwLc!S@TV>_mJ=(tSrV zJVx}hC{ZnP|I^Ra%n`vYldRcB-t+F_J|imytEw*_jJv$a8$tO16iU zB9Ikh#n6^!onfWFtI|t&=m^iHd`HT7jEH@$9QiT#HNl`fjhyMhpdwkTW#p>_)kG<( z2{Xs~8L2r^h;*_&bo6swQ%6Kv*&`k?Qk6y;7~I52HD8??G;)@qQwy?6tTx)p>_&_{ zrB*>yLtTs%V)fCwkAVh|Mc6flHNoI48ZnQ7hLBZajnGzREe${Vdj~TIohhqWs` ztcggkrjceII@i)jNsp21Y2*@*ksE2GgE4Y5WR=*hXx$Ye7_=pwy9^yM(vC*VIuIl6 zY2+T#k!N5XAuG-9&am-L=sZ=0VtywNOQKf%>$9`3j{m;im2|pz#M0fvn&8%hM(*{{ z>FKNUAdTGSq4Th>&Z9JPvxm;(9y%gBJLw4WdVTNZq0<|(V(clj-aB%CO-Ft|`asAU zvuDsY!!=iNe*P@hkpF_A><@POa;0A&J44Y%&*{argBNMUcHWB)hhAgN?ki4hNV`v= z&#zfYF0VqnF?$VdGspy&(PZ%rv{7H;eWMT;vK4v#4$d(V(fN3RrnA8l1NPrQE@*HEOcI1ikKd0ZmmnnS&L zXrpm0AlV{A_5pf@*iy8osP*{JiB-nF!WH`scn4LEJ&sDdUHMx@wm&j#e@wEqB$I3Q zDQxjIlRP(Iv=sXsZB^xelgr;1Wamq=BXj*VdX3puv{75%(!3qcJdp=+HR*dAkv;|g zcW{0ie`r5h@~0x8j#sA6jE^>Za@D=*o~XV|)pY_%m@a-M#c zD`f>px1gchf^=INJWj!kh+>!vdZ!t^ z>gYwe)I=|u%hQdqI)+|7rza}!4D=eSh|V;|&Njx*F~%AjW9K?!qWYQ|Gn*ST&o^dX zVDv6DdKVeJON`!SM(+xvccsz0+UQ+t^sYC0HyXX0joz(B?{=eihta#!>51%iK#ylv z^zJfx_ZYocLoaG`x-s*8^rBp5IeKE<=b#roHs_%iwXy)c z=<&YD(GxZC0eaEb>!rrnhemIO(OYHoJ~DbA8@;tg?^C0_snX zGZ_f9zib}``^acQD;od{MYEQOkK}LFUl;<=;c8#$}=x| zQ7-w6UIC+5(CD3F^a`UFwOQ2Z37*B#i$+w^&?}8zlxJB-PpsIf#>@&vuaeQLV)RZ! zFS=sYjj@{OMR}f%UetRX^rA;jJ!9+)^rBfh(-=G37(2)4HAXLL^IT)BsnKh0%sk&1 zyTIsO==4N(FG4Sx-AmAm#&?;~y8^w^>Ik?Jy=X*NqZh5~Ytf75<$7c0jn0_xelvPe z@3$Ibw;N-3pcnObr!!NmbO&SXE~9sk(YqJD=-PHM#=4;wjp06H?0%#7fYTE(JcM2} zhDXqgX7Dki_XK*;ygZ3sG$QeCO71p&jIpQCV=D9g(TjQzpLa{WfyUS~M(7W1kwm4My*CLr+}okjyq=EPA|uVa)u} z=zWb|l-X9J_pLE=hcWiO(c5M8en2mp3Gv?6X8iuT#!l@?o_jDey3#)zdV39SVVx6wOl*!_A+n~xI7PIlK|YZ#o7Uj zfs%O{>j``c)X0P$@C|TwKE{Rtdx6&Z8G94>6S%klW21n5K(j2yh63LKXB1?tAFv6i zT8OcSfYm_BQyA+6ECBLnGj=O575EouQ<$-_z(L^rB8


    ;ldz%Gf|)3sAinV~+wK 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 wTkRWFT2$Uu*+Oh9jN_W)xWCpzk{`A`v3p{ literal 40229 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 J66B|X{s#)Tb{_x$ From 1f8b45d57ddde21fe6cb917ef72a344cd3071e31 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 25 Jan 2024 23:45:23 -0800 Subject: [PATCH 0928/1130] fix(ci): Updated actions to move away Node 16. --- .github/workflows/ble-test.yml | 6 +++--- .github/workflows/build-user-config.yml | 6 +++--- .github/workflows/build.yml | 18 +++++++++--------- .github/workflows/doc-checks.yml | 4 ++-- .../workflows/hardware-metadata-validation.yml | 2 +- .github/workflows/pre-commit.yml | 2 +- .github/workflows/test.yml | 6 +++--- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ble-test.yml b/.github/workflows/ble-test.yml index 8f545002e73..d5570533145 100644 --- a/.github/workflows/ble-test.yml +++ b/.github/workflows/ble-test.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Find test directories id: test-dirs run: | @@ -38,9 +38,9 @@ jobs: image: docker.io/zmkfirmware/zmk-build-arm:3.2 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Cache west modules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-zephyr-modules with: diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index 7efa6425f92..ce86d46f1f4 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -32,7 +32,7 @@ jobs: build_matrix: ${{ env.build_matrix }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install yaml2json run: python3 -m pip install remarshal @@ -53,7 +53,7 @@ jobs: matrix: ${{ fromJson(needs.matrix.outputs.build_matrix) }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Create build directory run: | @@ -87,7 +87,7 @@ jobs: fi - name: Cache west modules - uses: actions/cache@v3.0.11 + uses: actions/cache@v4 continue-on-error: true env: cache_name: cache-zephyr-${{ env.zephyr_version }}-modules diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e0aa7f1679c..9ecdb5aa185 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,9 +24,9 @@ jobs: include: ${{ fromJSON(needs.compile-matrix.outputs.include-list) }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Cache west modules - uses: actions/cache@v3.0.2 + uses: actions/cache@v4 env: cache-name: cache-zephyr-modules with: @@ -49,7 +49,7 @@ jobs: - name: Export Zephyr CMake package (west zephyr-export) run: west zephyr-export - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: "14.x" - name: Install @actions/artifact @@ -178,9 +178,9 @@ jobs: core-include: ${{ steps.core-list.outputs.result }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: "14.x" - name: Install js-yaml @@ -207,9 +207,9 @@ jobs: boards-include: ${{ steps.boards-list.outputs.result }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: "14.x" - name: Install js-yaml @@ -334,9 +334,9 @@ jobs: organized-metadata: ${{ steps.organize-metadata.outputs.result }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: "14.x" - name: Install js-yaml diff --git a/.github/workflows/doc-checks.yml b/.github/workflows/doc-checks.yml index 91e65e6d31e..5885865f203 100644 --- a/.github/workflows/doc-checks.yml +++ b/.github/workflows/doc-checks.yml @@ -14,7 +14,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: bahmutov/npm-install@v1 with: working-directory: docs @@ -24,7 +24,7 @@ jobs: typecheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: bahmutov/npm-install@v1 with: working-directory: docs diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index 100928368e3..f0107a2dd24 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -20,7 +20,7 @@ jobs: container: image: docker.io/zmkfirmware/zmk-dev-arm:3.2 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install dependencies run: pip install -r app/scripts/requirements.txt - name: West init diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index a6583d4f71b..fc080a29bba 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -8,7 +8,7 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: 3.x diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b9676d87a40..ebb634351ac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Find test directories id: test-dirs run: | @@ -38,9 +38,9 @@ jobs: image: docker.io/zmkfirmware/zmk-build-arm:3.2 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Cache west modules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-zephyr-modules with: From 72d5c01e46c0e0079682bf7536c1da672c244e18 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 26 Jan 2024 07:53:59 +0000 Subject: [PATCH 0929/1130] fix(ci): Move to maintained get-changed files. --- .github/workflows/build.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9ecdb5aa185..ca44e61a124 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -409,19 +409,20 @@ jobs: if: ${{ github.event_name != 'schedule' }} runs-on: ubuntu-latest outputs: - changed-files: ${{ steps.changed-files.outputs.all }} + changed-files: ${{ steps.changed-files.outputs.all_changed_files }} board-changes: ${{ steps.board-changes.outputs.result }} core-changes: ${{ steps.core-changes.outputs.result }} steps: - - uses: Ana06/get-changed-files@v2.0.0 + - uses: tj-actions/changed-files@v42 id: changed-files with: - format: "json" + json: true + escape_json: false - uses: actions/github-script@v7 id: board-changes with: script: | - const changedFiles = JSON.parse(`${{ steps.changed-files.outputs.all }}`); + const changedFiles = JSON.parse(`${{ steps.changed-files.outputs.all_changed_files }}`); const boardChanges = changedFiles.filter(f => f.startsWith('app/boards')); return boardChanges.length ? 'true' : 'false'; result-encoding: string @@ -429,7 +430,7 @@ jobs: id: core-changes with: script: | - const changedFiles = JSON.parse(`${{ steps.changed-files.outputs.all }}`); + const changedFiles = JSON.parse(`${{ steps.changed-files.outputs.all_changed_files }}`); const boardChanges = changedFiles.filter(f => f.startsWith('app/boards')); const appChanges = changedFiles.filter(f => f.startsWith('app')); const ymlChanges = changedFiles.includes('.github/workflows/build.yml'); From 789c11629eff7b71320a166fbe3f6b8e5f35a064 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 26 Jan 2024 08:14:36 +0000 Subject: [PATCH 0930/1130] fix(ci): Bump setup-python version. --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index fc080a29bba..7a4c211e37f 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: 3.x - uses: pre-commit/action@v3.0.0 From 3c14c7c1124cab93a5eb88d53f46cb09316c2f75 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 26 Jan 2024 08:39:07 +0000 Subject: [PATCH 0931/1130] fix(ci): Update one lingering upload-artifacts action. --- .github/workflows/build-user-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index ce86d46f1f4..a32e8c0438b 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -157,7 +157,7 @@ jobs: fi - name: Archive (${{ env.display_name }}) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ inputs.archive_name }} path: ${{ env.build_dir }}/artifacts From 275c0ce271ad3cdff6d1ddf4f7daef50754f33da Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 26 Jan 2024 03:45:35 -0500 Subject: [PATCH 0932/1130] Revert "fix(ci): Update one lingering upload-artifacts action." --- .github/workflows/build-user-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index a32e8c0438b..ce86d46f1f4 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -157,7 +157,7 @@ jobs: fi - name: Archive (${{ env.display_name }}) - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: ${{ inputs.archive_name }} path: ${{ env.build_dir }}/artifacts From b120daa16aa07f34aa4457ffd5d48439f2ef1c88 Mon Sep 17 00:00:00 2001 From: senseored <39708654+senseored@users.noreply.github.com> Date: Sat, 27 Jan 2024 16:18:45 +0100 Subject: [PATCH 0933/1130] fix(boards): Assign preonic_rev3 chosen console Quick fix to make USB-logging work on the Preonic. --- app/boards/arm/preonic/preonic_rev3.dts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/arm/preonic/preonic_rev3.dts b/app/boards/arm/preonic/preonic_rev3.dts index 16d2b5f9eaf..d14355dac93 100644 --- a/app/boards/arm/preonic/preonic_rev3.dts +++ b/app/boards/arm/preonic/preonic_rev3.dts @@ -17,6 +17,7 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix-transform = &layout_grid_transform; }; From 5685074835a02e1e423124c82850657b30117a9f Mon Sep 17 00:00:00 2001 From: Dhruvin Shah <33428164+dhruvinsh@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:23:02 -0500 Subject: [PATCH 0934/1130] docs: correcting file path in config.md --- docs/docs/config/system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 27d7ab04a90..9407772c2cf 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -109,7 +109,7 @@ Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the s ### Split keyboards -Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). +Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/bluetooth/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). | Config | Type | Description | Default | | ------------------------------------------------------- | ---- | -------------------------------------------------------------------------- | ------------------------------------------ | From 0755b7a64c39736f6235ac0403e752692d367400 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 27 Jan 2024 12:18:07 -0800 Subject: [PATCH 0935/1130] fix(ci): Update upload-artifact with merge step --- .github/workflows/build-user-config.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index ce86d46f1f4..af57520bcd2 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -157,7 +157,19 @@ jobs: fi - name: Archive (${{ env.display_name }}) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: ${{ inputs.archive_name }} + name: artifact-${{ env.artifact_name }} path: ${{ env.build_dir }}/artifacts + + merge: + runs-on: ubuntu-latest + needs: build + name: Merge Output Artifacts + steps: + - name: Merge Artifacts + uses: actions/upload-artifact/merge@v4 + with: + name: ${{ inputs.archive_name }} + pattern: artifact-* + delete-merged: true From 4a5806ac73ae32034a8daf5b95dfd62db2bae4d5 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Thu, 23 Nov 2023 17:21:45 -0500 Subject: [PATCH 0936/1130] feat(core): enable FPU if CPU has FPU --- app/Kconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 54b4c0bf24e..0e761bed723 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -606,6 +606,9 @@ config REBOOT config USB_DEVICE_STACK default y if HAS_HW_NRF_USBD +config FPU + default CPU_HAS_FPU + config ZMK_WPM bool "Calculate WPM" default n From aab09d504c976c971729f4cd64b074d3265d6bf0 Mon Sep 17 00:00:00 2001 From: Johan Friis Date: Tue, 30 Jan 2024 09:07:48 +0100 Subject: [PATCH 0937/1130] feat(docs): Document Karabiner interference with Mod-Morphs (#2146) --- docs/docs/behaviors/mod-morph.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index d5b3d589b71..bc1820f24be 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -86,3 +86,10 @@ For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into }; }; ``` + +:::note[Karabiner-Elements (macOS) interfering with mod-morphs] + +If the first modified key press sends the modifier along with the morphed keycode and [Karabiner-Elements](https://karabiner-elements.pqrs.org/) is running, disable the "Modify Events" toggle from Karabiner's "Devices" settings page for the keyboard running ZMK. + +::: + From f24a0bf9c8046a18183a0405178a19887b13da10 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 26 Jan 2024 20:39:35 -0600 Subject: [PATCH 0938/1130] fix(shields): Add labels to all sensors nodes --- app/boards/shields/crbn/crbn.overlay | 2 +- app/boards/shields/leeloo/leeloo_common.dtsi | 2 +- app/boards/shields/leeloo_micro/leeloo_micro.dtsi | 2 +- app/boards/shields/murphpad/murphpad.keymap | 2 +- app/boards/shields/nibble/nibble.keymap | 2 +- app/boards/shields/snap/snap.keymap | 2 +- .../splitkb_aurora_helix/splitkb_aurora_helix.dtsi | 2 +- .../splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi | 2 +- app/boards/shields/tidbit/tidbit.keymap | 2 +- app/boards/shields/tidbit/tidbit_19key.keymap | 2 +- app/boards/shields/waterfowl/waterfowl.dtsi | 2 +- app/boards/shields/zmk_uno/zmk_uno.overlay | 2 +- app/boards/shields/zmk_uno/zmk_uno_split.dtsi | 10 +++++----- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/boards/shields/crbn/crbn.overlay b/app/boards/shields/crbn/crbn.overlay index 5cc9ec6c1d5..9c68bd0bc7d 100644 --- a/app/boards/shields/crbn/crbn.overlay +++ b/app/boards/shields/crbn/crbn.overlay @@ -46,7 +46,7 @@ status = "okay"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; }; diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi index e4b29ad42a5..70896e1c425 100644 --- a/app/boards/shields/leeloo/leeloo_common.dtsi +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -60,7 +60,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; triggers-per-rotation = <30>; diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi index e9958351b40..e0ca21cc4f8 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -58,7 +58,7 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) steps = <60>; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; triggers-per-rotation = <30>; diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap index 069eeea3ba8..fefafb00687 100644 --- a/app/boards/shields/murphpad/murphpad.keymap +++ b/app/boards/shields/murphpad/murphpad.keymap @@ -45,7 +45,7 @@ }; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1 &encoder_2>; triggers-per-rotation = <20>; diff --git a/app/boards/shields/nibble/nibble.keymap b/app/boards/shields/nibble/nibble.keymap index 8b25c5a4133..f1b7512e0e0 100644 --- a/app/boards/shields/nibble/nibble.keymap +++ b/app/boards/shields/nibble/nibble.keymap @@ -9,7 +9,7 @@ #include / { - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1>; triggers-per-rotation = <20>; diff --git a/app/boards/shields/snap/snap.keymap b/app/boards/shields/snap/snap.keymap index 8a95beda153..b5c6396afe6 100644 --- a/app/boards/shields/snap/snap.keymap +++ b/app/boards/shields/snap/snap.keymap @@ -10,7 +10,7 @@ #include / { - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; triggers-per-rotation = <20>; diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi index f586d6f654f..c3a7b4edc6f 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi @@ -49,7 +49,7 @@ b-gpios = <&pro_micro 14 GPIO_PULL_UP>; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; triggers-per-rotation = <36>; diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi index 872c3f69e27..77877ebea60 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi @@ -49,7 +49,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) b-gpios = <&pro_micro 10 GPIO_PULL_UP>; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&left_encoder &right_encoder>; triggers-per-rotation = <36>; diff --git a/app/boards/shields/tidbit/tidbit.keymap b/app/boards/shields/tidbit/tidbit.keymap index a98a2eaa28e..f212bfe3538 100644 --- a/app/boards/shields/tidbit/tidbit.keymap +++ b/app/boards/shields/tidbit/tidbit.keymap @@ -14,7 +14,7 @@ }; / { - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_1_top_row>; triggers-per-rotation = <20>; diff --git a/app/boards/shields/tidbit/tidbit_19key.keymap b/app/boards/shields/tidbit/tidbit_19key.keymap index 1be71e7a9b7..a2991a3f4ca 100644 --- a/app/boards/shields/tidbit/tidbit_19key.keymap +++ b/app/boards/shields/tidbit/tidbit_19key.keymap @@ -15,7 +15,7 @@ }; / { - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder_4>; }; diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index 62548f069f5..b18d92898ee 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -73,7 +73,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) status = "disabled"; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; triggers-per-rotation = <20>; sensors = < diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 07181280015..4999c82c7e1 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -10,7 +10,7 @@ chosen { zmk,matrix-transform = &matrix_transform; }; - sensors { + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; triggers-per-rotation = <20>; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi index f84aacc8e97..516213bd442 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi @@ -53,9 +53,9 @@ b-gpios = <&arduino_header 14 GPIO_PULL_UP>; }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&encoder &right_encoder>; - triggers-per-rotation = <20>; - }; + sensors: sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder &right_encoder>; + triggers-per-rotation = <20>; + }; }; From c2299e2203c869945d94455d002079b72ce7cdf9 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 26 Jan 2024 21:01:28 -0600 Subject: [PATCH 0939/1130] fix(shields): Fix deprecated encoder properties Switched remaining shields over from resolution to steps. --- app/boards/shields/crbn/crbn.overlay | 3 ++- app/boards/shields/kyria/kyria_rev3.dtsi | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/crbn/crbn.overlay b/app/boards/shields/crbn/crbn.overlay index 9c68bd0bc7d..af5910d6993 100644 --- a/app/boards/shields/crbn/crbn.overlay +++ b/app/boards/shields/crbn/crbn.overlay @@ -42,12 +42,13 @@ compatible = "alps,ec11"; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; + steps = <80>; status = "okay"; }; sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; + triggers-per-rotation = <20>; }; }; diff --git a/app/boards/shields/kyria/kyria_rev3.dtsi b/app/boards/shields/kyria/kyria_rev3.dtsi index a782a6ea08e..c8cd8df910b 100644 --- a/app/boards/shields/kyria/kyria_rev3.dtsi +++ b/app/boards/shields/kyria/kyria_rev3.dtsi @@ -29,13 +29,11 @@ }; &left_encoder { - resolution = <2>; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; &right_encoder { - resolution = <2>; a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; }; From be75da096c86d87e414f4089cc27184dc0c6f5bf Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 26 Jan 2024 21:03:49 -0600 Subject: [PATCH 0940/1130] fix(keymap-upgrader): Fix highlight on last line Fixed an issue where a text edit at the very end of a file would cause it to highlight from the start of the edit to the start of the file instead of to the end of the file. --- docs/src/keymap-upgrade/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/src/keymap-upgrade/index.ts b/docs/src/keymap-upgrade/index.ts index c46cbe075e2..0cd3480740b 100644 --- a/docs/src/keymap-upgrade/index.ts +++ b/docs/src/keymap-upgrade/index.ts @@ -55,7 +55,11 @@ function getLineBreakPositions(text: string) { } function positionToLineNumber(position: number, lineBreaks: number[]) { - const line = lineBreaks.findIndex((lineBreak) => position <= lineBreak); + if (position >= lineBreaks[lineBreaks.length - 1]) { + return lineBreaks.length + 1; + } + + const line = lineBreaks.findIndex((lineBreak) => position < lineBreak); return line < 0 ? 0 : line + 1; } From 3a4cf185a1acdb7494286af964a82e13b13dff34 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 26 Jan 2024 21:07:18 -0600 Subject: [PATCH 0941/1130] feat(keymap-upgrader): Upgrade encoder resolution Added an upgrade function to the keymap upgrader to replace the encoder "resolution" property with "steps" and (if it is not already present) "triggers-per-rotation". --- docs/src/keymap-upgrade/encoder.ts | 101 +++++++++++++++++++++++++++++ docs/src/keymap-upgrade/index.ts | 2 + docs/src/keymap-upgrade/parser.ts | 74 +++++++++++++++++++-- 3 files changed, 171 insertions(+), 6 deletions(-) create mode 100644 docs/src/keymap-upgrade/encoder.ts diff --git a/docs/src/keymap-upgrade/encoder.ts b/docs/src/keymap-upgrade/encoder.ts new file mode 100644 index 00000000000..4ac0c50b364 --- /dev/null +++ b/docs/src/keymap-upgrade/encoder.ts @@ -0,0 +1,101 @@ +import type { SyntaxNode, Tree } from "web-tree-sitter"; + +import { + getContainingDevicetreeNode, + getDevicetreeNodePath, + findDevicetreeProperty, +} from "./parser"; +import { TextEdit } from "./textedit"; + +const ALPS_EC11_COMPATIBLE = '"alps,ec11"'; +const DEFAULT_RESOLUTION = 4; +const TRIGGERS_PER_ROTATION = 20; +const TRIGGERS_PER_ROTATION_DT = ` + +&sensors { + // Change this to your encoder's number of detents. + // If you have multiple encoders with different detents, see + // https://zmk.dev/docs/config/encoders#keymap-sensor-config + triggers-per-rotation = <${TRIGGERS_PER_ROTATION}>; +};`; + +export function upgradeEncoderResolution(tree: Tree) { + const edits: TextEdit[] = []; + + const resolutionProps = findEncoderResolution(tree); + edits.push(...resolutionProps.flatMap(upgradeResolutionProperty)); + + if (resolutionProps.length > 0) { + edits.push(...addTriggersPerRotation(tree)); + } + + return edits; +} + +function findEncoderResolution(tree: Tree): SyntaxNode[] { + const props = findDevicetreeProperty(tree.rootNode, "resolution", { + recursive: true, + }); + + return props.filter((prop) => { + const node = getContainingDevicetreeNode(prop); + return node && isEncoderNode(node); + }); +} + +function isEncoderNode(node: SyntaxNode) { + // If a compatible property is set, then we know for sure if this is an encoder. + const compatible = findDevicetreeProperty(node, "compatible"); + if (compatible) { + return compatible.childForFieldName("value")?.text === ALPS_EC11_COMPATIBLE; + } + + // Compatible properties rarely appear in a keymap though, so just guess based + // on the node path/reference otherwise. + return getDevicetreeNodePath(node).toLowerCase().includes("encoder"); +} + +function upgradeResolutionProperty(prop: SyntaxNode): TextEdit[] { + const name = prop.childForFieldName("name"); + const value = prop.childForFieldName("value"); + + if (!name || !value) { + return []; + } + + // Try to set the new steps to be triggers-per-rotation * resolution, but fall + // back to a default if the value is something more complex than a single int. + const resolution = value.text.trim().replaceAll(/^<|>$/g, ""); + const steps = + (parseInt(resolution) || DEFAULT_RESOLUTION) * TRIGGERS_PER_ROTATION; + + const hint = `/* Change this to your encoder's number of detents times ${resolution} */`; + + return [ + TextEdit.fromNode(name, "steps"), + TextEdit.fromNode(value, `<${steps}> ${hint}`), + ]; +} + +function addTriggersPerRotation(tree: Tree): TextEdit[] { + // The keymap might already contain "triggers-per-rotation" for example if the + // user already upgraded some but not all "resolution" properties. Don't add + // another one if it already exists. + if (keymapHasTriggersPerRotation(tree)) { + return []; + } + + // Inserting a new property into an existing node while keeping the code + // readable in all cases is hard, so just append a new &sensors node to the + // end of the keymap. + const end = tree.rootNode.endIndex; + return [new TextEdit(end, end, TRIGGERS_PER_ROTATION_DT)]; +} + +function keymapHasTriggersPerRotation(tree: Tree) { + const props = findDevicetreeProperty(tree.rootNode, "triggers-per-rotation", { + recursive: true, + }); + + return props.length > 0; +} diff --git a/docs/src/keymap-upgrade/index.ts b/docs/src/keymap-upgrade/index.ts index 0cd3480740b..7755fffbe74 100644 --- a/docs/src/keymap-upgrade/index.ts +++ b/docs/src/keymap-upgrade/index.ts @@ -2,6 +2,7 @@ import { createParser } from "./parser"; import { applyEdits, Range } from "./textedit"; import { upgradeBehaviors } from "./behaviors"; +import { upgradeEncoderResolution } from "./encoder"; import { upgradeHeaders } from "./headers"; import { upgradeKeycodes } from "./keycodes"; import { upgradeNodeNames } from "./nodes"; @@ -11,6 +12,7 @@ export { initParser } from "./parser"; const upgradeFunctions = [ upgradeBehaviors, + upgradeEncoderResolution, upgradeHeaders, upgradeKeycodes, upgradeNodeNames, diff --git a/docs/src/keymap-upgrade/parser.ts b/docs/src/keymap-upgrade/parser.ts index 9b23cdd810c..52d6e981235 100644 --- a/docs/src/keymap-upgrade/parser.ts +++ b/docs/src/keymap-upgrade/parser.ts @@ -57,9 +57,15 @@ export function captureHasText( /** * Get a list of SyntaxNodes representing a devicetree node with the given path. - * (The same node may be listed multiple times within a file.) + * The same node may be listed multiple times within a file. * - * @param path Absolute path to the node (must start with "/") + * This function does not evaluate which node a reference points to, so given + * a file containing "/ { foo: bar {}; }; &foo {};" searching for "&foo" will + * return the "&foo {}" node but not "foo: bar {}". + * + * @param path Path to the node to find. May be an absolute path such as + * "/foo/bar", a node reference such as "&foo", or a node reference followed by + * a relative path such as "&foo/bar". */ export function findDevicetreeNode( tree: Parser.Tree, @@ -81,6 +87,64 @@ export function findDevicetreeNode( return result; } +export interface FindPropertyOptions { + /** Search in children of the given node as well */ + recursive?: boolean; +} + +/** + * Find all instances of a devicetree property with the given name which are + * descendants of the given syntax node. + * + * @param node Any syntax node + */ +export function findDevicetreeProperty( + node: Parser.SyntaxNode, + name: string, + options: FindPropertyOptions & { recursive: true } +): Parser.SyntaxNode[]; + +/** + * Find a devicetree node's property with the given name, or null if it doesn't + * have one. + * + * @note If the node contains multiple instances of the same property, this + * returns the last once, since that is the one that will actually be applied. + * + * @param node A syntax node for a devicetree node + */ +export function findDevicetreeProperty( + node: Parser.SyntaxNode, + name: string, + options?: FindPropertyOptions +): Parser.SyntaxNode | null; + +export function findDevicetreeProperty( + node: Parser.SyntaxNode, + name: string, + options?: FindPropertyOptions +): Parser.SyntaxNode[] | Parser.SyntaxNode | null { + const query = Devicetree.query( + `(property name: (identifier) @name (#eq? @name "${name}")) @prop` + ); + const matches = query.matches(node); + const props = matches.map(({ captures }) => findCapture("prop", captures)!); + + if (options?.recursive) { + return props; + } + + // The query finds all descendants. Filter to just the properties that belong + // to the given devicetree node. + const childProps = props.filter((prop) => + getContainingDevicetreeNode(prop)?.equals(node) + ); + + // Sort in descending order to select the last instance of the property. + childProps.sort((a, b) => b.startIndex - a.startIndex); + return childProps[0] ?? null; +} + export function getDevicetreeNodePath(node: Parser.SyntaxNode | null) { const parts = getDevicetreeNodePathParts(node); @@ -99,9 +163,7 @@ export function getDevicetreeNodePath(node: Parser.SyntaxNode | null) { return parts[0] === "/" ? path.substring(1) : path; } -export function getDevicetreeNodePathParts( - node: Parser.SyntaxNode | null -): string[] { +function getDevicetreeNodePathParts(node: Parser.SyntaxNode | null): string[] { // There may be intermediate syntax nodes between devicetree nodes, such as // #if blocks, so if we aren't currently on a "node" node, traverse up the // tree until we find one. @@ -115,7 +177,7 @@ export function getDevicetreeNodePathParts( return [...getDevicetreeNodePathParts(dtnode.parent), name]; } -function getContainingDevicetreeNode(node: Parser.SyntaxNode | null) { +export function getContainingDevicetreeNode(node: Parser.SyntaxNode | null) { while (node && node.type !== "node") { node = node.parent; } From 5826b80374625d448cfbfc739dde4fda1e6f2681 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 3 Feb 2024 17:14:49 -0600 Subject: [PATCH 0942/1130] chore: Fix formatting Fixed the formatting in a file that wasn't passing pre-commit checks. --- docs/docs/behaviors/mod-morph.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index bc1820f24be..7ecb9ab8983 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -92,4 +92,3 @@ For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into If the first modified key press sends the modifier along with the morphed keycode and [Karabiner-Elements](https://karabiner-elements.pqrs.org/) is running, disable the "Modify Events" toggle from Karabiner's "Devices" settings page for the keyboard running ZMK. ::: - From 4b03fcb70993dc277f5268bfac0e129cfe0b73a3 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 4 Feb 2024 13:52:55 -0800 Subject: [PATCH 0943/1130] fix(boards): Add missing battery header include --- app/boards/arm/corneish_zen/widgets/battery_status.c | 2 +- app/boards/arm/corneish_zen/widgets/peripheral_status.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.c b/app/boards/arm/corneish_zen/widgets/battery_status.c index 0d5b0dc54bd..011319c408f 100644 --- a/app/boards/arm/corneish_zen/widgets/battery_status.c +++ b/app/boards/arm/corneish_zen/widgets/battery_status.c @@ -6,12 +6,12 @@ */ #include -#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include +#include #include "battery_status.h" #include #include diff --git a/app/boards/arm/corneish_zen/widgets/peripheral_status.c b/app/boards/arm/corneish_zen/widgets/peripheral_status.c index 39b62fde05a..b94d45f692a 100644 --- a/app/boards/arm/corneish_zen/widgets/peripheral_status.c +++ b/app/boards/arm/corneish_zen/widgets/peripheral_status.c @@ -6,7 +6,6 @@ */ #include -#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); From efbcd3c8f6be2d147949a51503b19bb52e9843ac Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 4 Feb 2024 13:55:48 -0800 Subject: [PATCH 0944/1130] fix(boards): Disable ZMK_USB for peripherals --- app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig | 2 +- app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig index 5284159d83f..d89377bc400 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig @@ -39,7 +39,7 @@ CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y -CONFIG_ZMK_USB=y +CONFIG_ZMK_USB=n CONFIG_ZMK_BLE=y # enable display drivers diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index 506aa67e1b1..83dc57d4dd8 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -35,7 +35,7 @@ CONFIG_FLASH_MAP=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM=y -CONFIG_ZMK_USB=y +CONFIG_ZMK_USB=n CONFIG_ZMK_BLE=y # enable display drivers From b8846cf6355c5d7ae52a191988054b532a264f0c Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 5 Feb 2024 21:05:49 -0800 Subject: [PATCH 0945/1130] refactor(display): Remove unused BAS includes --- app/boards/shields/nice_view/widgets/peripheral_status.c | 1 - app/boards/shields/nice_view/widgets/status.c | 1 - app/src/display/widgets/battery_status.c | 1 - 3 files changed, 3 deletions(-) diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.c b/app/boards/shields/nice_view/widgets/peripheral_status.c index 989681f32c5..cec0f7b238d 100644 --- a/app/boards/shields/nice_view/widgets/peripheral_status.c +++ b/app/boards/shields/nice_view/widgets/peripheral_status.c @@ -6,7 +6,6 @@ */ #include -#include #include #include diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 41c0974380f..3346546ec70 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -6,7 +6,6 @@ */ #include -#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index feb054db736..06f55f3f405 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -5,7 +5,6 @@ */ #include -#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); From f4fce9e15832fd8daee9091d7d77a272aecb8f3e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 23 Jun 2023 07:17:00 +0000 Subject: [PATCH 0946/1130] refactor(display): Move new LVGL DPI Kconfig setting. --- app/boards/shields/corne/Kconfig.defconfig | 5 +---- app/boards/shields/corne/corne.dtsi | 1 + app/boards/shields/elephant42/Kconfig.defconfig | 5 +---- app/boards/shields/elephant42/elephant42.dtsi | 1 + app/boards/shields/jorne/Kconfig.defconfig | 5 +---- app/boards/shields/jorne/jorne.dtsi | 1 + app/boards/shields/knob_goblin/Kconfig.defconfig | 5 +---- app/boards/shields/knob_goblin/knob_goblin.overlay | 1 + app/boards/shields/kyria/Kconfig.defconfig | 5 +---- app/boards/shields/kyria/kyria_common.dtsi | 1 + app/boards/shields/leeloo/Kconfig.defconfig | 5 +---- app/boards/shields/leeloo/leeloo_common.dtsi | 1 + app/boards/shields/leeloo_micro/Kconfig.defconfig | 5 +---- app/boards/shields/leeloo_micro/leeloo_micro.dtsi | 1 + app/boards/shields/lily58/Kconfig.defconfig | 5 +---- app/boards/shields/lily58/lily58.dtsi | 1 + app/boards/shields/lotus58/Kconfig.defconfig | 5 +---- app/boards/shields/lotus58/lotus58.dtsi | 1 + app/boards/shields/microdox/Kconfig.defconfig | 5 +---- app/boards/shields/microdox/microdox_common.dtsi | 1 + app/boards/shields/murphpad/Kconfig.defconfig | 5 +---- app/boards/shields/murphpad/murphpad.overlay | 1 + app/boards/shields/nibble/Kconfig.defconfig | 5 +---- app/boards/shields/nibble/nibble.overlay | 1 + app/boards/shields/nice_view/Kconfig.defconfig | 2 +- app/boards/shields/snap/Kconfig.defconfig | 5 +---- app/boards/shields/snap/snap.dtsi | 1 + app/boards/shields/sofle/Kconfig.defconfig | 5 +---- app/boards/shields/sofle/sofle.dtsi | 1 + app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig | 5 +---- .../splitkb_aurora_corne/splitkb_aurora_corne.dtsi | 1 + app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig | 3 --- .../splitkb_aurora_helix/splitkb_aurora_helix.dtsi | 1 + .../shields/splitkb_aurora_lily58/Kconfig.defconfig | 5 +---- .../splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi | 1 + app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig | 3 --- .../splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi | 1 + app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig | 5 +---- .../splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi | 1 + app/boards/shields/tidbit/Kconfig.defconfig | 5 +---- app/boards/shields/tidbit/tidbit.dtsi | 1 + app/boards/shields/waterfowl/Kconfig.defconfig | 5 +---- app/boards/shields/waterfowl/waterfowl.dtsi | 1 + app/boards/shields/zodiark/Kconfig.defconfig | 5 +---- app/boards/shields/zodiark/zodiark.dtsi | 1 + app/src/display/Kconfig | 8 ++++---- 46 files changed, 47 insertions(+), 91 deletions(-) diff --git a/app/boards/shields/corne/Kconfig.defconfig b/app/boards/shields/corne/Kconfig.defconfig index 07dd07e9c0f..27d50df3570 100644 --- a/app/boards/shields/corne/Kconfig.defconfig +++ b/app/boards/shields/corne/Kconfig.defconfig @@ -21,9 +21,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -31,7 +28,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index 93eb63ad98d..f6d41e3353b 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -76,6 +76,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/elephant42/Kconfig.defconfig b/app/boards/shields/elephant42/Kconfig.defconfig index 70a312c10d5..dc10e980d94 100644 --- a/app/boards/shields/elephant42/Kconfig.defconfig +++ b/app/boards/shields/elephant42/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi index c14fbae1529..22a72708686 100644 --- a/app/boards/shields/elephant42/elephant42.dtsi +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -53,6 +53,7 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; \ No newline at end of file diff --git a/app/boards/shields/jorne/Kconfig.defconfig b/app/boards/shields/jorne/Kconfig.defconfig index 04beb792c4d..ba332226f29 100644 --- a/app/boards/shields/jorne/Kconfig.defconfig +++ b/app/boards/shields/jorne/Kconfig.defconfig @@ -22,9 +22,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -32,7 +29,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index cee794acf39..a2d804b9abc 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -92,6 +92,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/knob_goblin/Kconfig.defconfig b/app/boards/shields/knob_goblin/Kconfig.defconfig index d8d468edb94..3f08e28724f 100644 --- a/app/boards/shields/knob_goblin/Kconfig.defconfig +++ b/app/boards/shields/knob_goblin/Kconfig.defconfig @@ -14,9 +14,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -24,7 +21,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/knob_goblin/knob_goblin.overlay b/app/boards/shields/knob_goblin/knob_goblin.overlay index 53372738773..49306ddf0ab 100644 --- a/app/boards/shields/knob_goblin/knob_goblin.overlay +++ b/app/boards/shields/knob_goblin/knob_goblin.overlay @@ -72,6 +72,7 @@ segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig index 2d162736b49..36e029638c0 100644 --- a/app/boards/shields/kyria/Kconfig.defconfig +++ b/app/boards/shields/kyria/Kconfig.defconfig @@ -22,9 +22,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -32,7 +29,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index 0bb34349b0d..23058f376ad 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -53,5 +53,6 @@ display-offset = <0>; multiplex-ratio = <63>; prechargep = <0x22>; + inversion-on; }; }; diff --git a/app/boards/shields/leeloo/Kconfig.defconfig b/app/boards/shields/leeloo/Kconfig.defconfig index 046bd49a3dd..a3d95f63a39 100644 --- a/app/boards/shields/leeloo/Kconfig.defconfig +++ b/app/boards/shields/leeloo/Kconfig.defconfig @@ -34,9 +34,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -44,7 +41,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi index 70896e1c425..df4f228e9d2 100644 --- a/app/boards/shields/leeloo/leeloo_common.dtsi +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -83,6 +83,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/leeloo_micro/Kconfig.defconfig b/app/boards/shields/leeloo_micro/Kconfig.defconfig index 26256120a76..8af3214d1c8 100644 --- a/app/boards/shields/leeloo_micro/Kconfig.defconfig +++ b/app/boards/shields/leeloo_micro/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi index e0ca21cc4f8..bc314205c28 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -81,6 +81,7 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; \ No newline at end of file diff --git a/app/boards/shields/lily58/Kconfig.defconfig b/app/boards/shields/lily58/Kconfig.defconfig index e77a9c2208d..169a6ad7270 100644 --- a/app/boards/shields/lily58/Kconfig.defconfig +++ b/app/boards/shields/lily58/Kconfig.defconfig @@ -22,9 +22,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -32,7 +29,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index f1c7c190d6a..1a326d62e18 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -74,6 +74,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/lotus58/Kconfig.defconfig b/app/boards/shields/lotus58/Kconfig.defconfig index 62695c2020a..984095c7afe 100644 --- a/app/boards/shields/lotus58/Kconfig.defconfig +++ b/app/boards/shields/lotus58/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index 1260522ae38..afa311d9a6a 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -82,6 +82,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/microdox/Kconfig.defconfig b/app/boards/shields/microdox/Kconfig.defconfig index e355c6411ee..3737b83fd3d 100644 --- a/app/boards/shields/microdox/Kconfig.defconfig +++ b/app/boards/shields/microdox/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/microdox/microdox_common.dtsi b/app/boards/shields/microdox/microdox_common.dtsi index 98f086cd7a3..ed190fcb5a5 100644 --- a/app/boards/shields/microdox/microdox_common.dtsi +++ b/app/boards/shields/microdox/microdox_common.dtsi @@ -45,6 +45,7 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) display-offset = <0>; multiplex-ratio = <31>; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/murphpad/Kconfig.defconfig b/app/boards/shields/murphpad/Kconfig.defconfig index 80e65351dad..9d80a13936b 100644 --- a/app/boards/shields/murphpad/Kconfig.defconfig +++ b/app/boards/shields/murphpad/Kconfig.defconfig @@ -14,9 +14,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -24,7 +21,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index f098ec8b017..a82349684ff 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -66,6 +66,7 @@ segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/nibble/Kconfig.defconfig b/app/boards/shields/nibble/Kconfig.defconfig index 19bddec77b8..3915ff0fb87 100644 --- a/app/boards/shields/nibble/Kconfig.defconfig +++ b/app/boards/shields/nibble/Kconfig.defconfig @@ -14,9 +14,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -24,7 +21,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/nibble/nibble.overlay b/app/boards/shields/nibble/nibble.overlay index 4a84774239c..59db2d8d39c 100644 --- a/app/boards/shields/nibble/nibble.overlay +++ b/app/boards/shields/nibble/nibble.overlay @@ -67,6 +67,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,6) RC(4,9) display-offset = <0>; multiplex-ratio = <31>; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig index 53edc1ccc7f..84fdd7ccd69 100644 --- a/app/boards/shields/nice_view/Kconfig.defconfig +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -6,7 +6,7 @@ if SHIELD_NICE_VIEW config LV_Z_VDB_SIZE default 100 -config LV_Z_DPI +config LV_DPI_DEF default 161 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/snap/Kconfig.defconfig b/app/boards/shields/snap/Kconfig.defconfig index e21111e969a..0338df48489 100644 --- a/app/boards/shields/snap/Kconfig.defconfig +++ b/app/boards/shields/snap/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/snap/snap.dtsi b/app/boards/shields/snap/snap.dtsi index 902db143903..90eec5ae04e 100644 --- a/app/boards/shields/snap/snap.dtsi +++ b/app/boards/shields/snap/snap.dtsi @@ -76,6 +76,7 @@ RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,2) RC(5,0) RC(5,15) display-offset = <0>; multiplex-ratio = <31>; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 4e7bf88488e..4eb3d743b86 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 9ec8c9877ff..f88339d7951 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -82,6 +82,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig index a28792c7bb1..d3ac6c77e26 100644 --- a/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_corne/Kconfig.defconfig @@ -30,9 +30,6 @@ config SSD1306 config I2C default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -40,7 +37,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi index 58d530288c4..56833b629c6 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.dtsi @@ -85,6 +85,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig index 6d7a55691e2..df32b83b237 100644 --- a/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_helix/Kconfig.defconfig @@ -28,9 +28,6 @@ config SSD1306 config I2C default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi index c3a7b4edc6f..34781ecdc2e 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix.dtsi @@ -71,6 +71,7 @@ segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig index e54e2b4332f..861db44f0b1 100644 --- a/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_lily58/Kconfig.defconfig @@ -30,9 +30,6 @@ config SSD1306 config I2C default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -40,7 +37,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi index b237b69b95a..93625d28c97 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58.dtsi @@ -71,6 +71,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,1) RC(4,10) RC(3,6) RC(3,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig index b53c4c8dc16..172548e87d7 100644 --- a/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_sofle/Kconfig.defconfig @@ -28,9 +28,6 @@ config SSD1306 config I2C default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi index 77877ebea60..2586b0c024d 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle.dtsi @@ -71,6 +71,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig index 83cb1bf687c..6a0e37286c9 100644 --- a/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig +++ b/app/boards/shields/splitkb_aurora_sweep/Kconfig.defconfig @@ -30,9 +30,6 @@ config SSD1306 config I2C default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -40,7 +37,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi index 8b17a4bd1c8..883636debb4 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.dtsi @@ -71,6 +71,7 @@ segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/tidbit/Kconfig.defconfig b/app/boards/shields/tidbit/Kconfig.defconfig index 393fbef1bf2..70bb1d74d30 100644 --- a/app/boards/shields/tidbit/Kconfig.defconfig +++ b/app/boards/shields/tidbit/Kconfig.defconfig @@ -15,9 +15,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -25,7 +22,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/tidbit/tidbit.dtsi b/app/boards/shields/tidbit/tidbit.dtsi index 93451ebc657..44fc919275a 100644 --- a/app/boards/shields/tidbit/tidbit.dtsi +++ b/app/boards/shields/tidbit/tidbit.dtsi @@ -105,6 +105,7 @@ segment-remap; com-invdir; com-sequential; + inversion-on; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/waterfowl/Kconfig.defconfig b/app/boards/shields/waterfowl/Kconfig.defconfig index dbee82b87d7..1efc359609c 100644 --- a/app/boards/shields/waterfowl/Kconfig.defconfig +++ b/app/boards/shields/waterfowl/Kconfig.defconfig @@ -22,9 +22,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -32,7 +29,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index b18d92898ee..d46910a3f2a 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -100,5 +100,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) display-offset = <0>; multiplex-ratio = <63>; prechargep = <0x22>; + inversion-on; }; }; diff --git a/app/boards/shields/zodiark/Kconfig.defconfig b/app/boards/shields/zodiark/Kconfig.defconfig index e7538c41815..07ed7dbe706 100644 --- a/app/boards/shields/zodiark/Kconfig.defconfig +++ b/app/boards/shields/zodiark/Kconfig.defconfig @@ -24,9 +24,6 @@ config I2C config SSD1306 default y -config SSD1306_REVERSE_MODE - default y - endif # ZMK_DISPLAY if LVGL @@ -34,7 +31,7 @@ if LVGL config LV_Z_VDB_SIZE default 64 -config LV_Z_DPI +config LV_DPI_DEF default 148 config LV_Z_BITS_PER_PIXEL diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi index 4cd242a9466..3151f31c990 100644 --- a/app/boards/shields/zodiark/zodiark.dtsi +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -80,5 +80,6 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R display-offset = <0>; multiplex-ratio = <31>; prechargep = <0x22>; + inversion-on; }; }; diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index a2029481080..3e17ff76435 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -29,11 +29,11 @@ endchoice config LV_MEM_CUSTOM default y -config LV_Z_MEM_POOL_MIN_SIZE - default 32 +# config LV_Z_MEM_POOL_MIN_SIZE +# default 32 -config LV_Z_MEM_POOL_MAX_SIZE - default 8192 +# config LV_Z_MEM_POOL_MAX_SIZE +# default 8192 choice ZMK_DISPLAY_STATUS_SCREEN prompt "Default status screen for displays" From bf4008da023189b885ebcf1c0ccdb729663312e8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 23 Jun 2023 07:19:57 +0000 Subject: [PATCH 0947/1130] refactor: All SYS_INIT functions are void args. --- app/boards/arm/mikoto/pinmux.c | 3 +-- app/boards/arm/nrfmicro/pinmux.c | 4 +--- app/boards/arm/puchi_ble/pinmux.c | 4 +--- app/include/zmk/hog.h | 2 -- app/src/activity.c | 2 +- app/src/backlight.c | 2 +- app/src/battery.c | 2 +- app/src/behavior.c | 4 +--- app/src/ble.c | 2 +- app/src/combo.c | 2 +- app/src/endpoints.c | 2 +- app/src/hog.c | 2 +- app/src/rgb_underglow.c | 2 +- app/src/sensors.c | 2 +- app/src/split/bluetooth/central.c | 2 +- app/src/split/bluetooth/peripheral.c | 2 +- app/src/split/bluetooth/service.c | 2 +- app/src/usb.c | 2 +- app/src/usb_hid.c | 2 +- app/src/workqueue.c | 2 +- app/src/wpm.c | 2 +- 21 files changed, 20 insertions(+), 29 deletions(-) diff --git a/app/boards/arm/mikoto/pinmux.c b/app/boards/arm/mikoto/pinmux.c index 524aa17e5bf..c34c2dc85b1 100644 --- a/app/boards/arm/mikoto/pinmux.c +++ b/app/boards/arm/mikoto/pinmux.c @@ -11,8 +11,7 @@ #include #include -static int pinmux_mikoto_init(const struct device *port) { - ARG_UNUSED(port); +static int pinmux_mikoto_init(void) { #if CONFIG_BOARD_MIKOTO_520 const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index 6362b39250c..2e6674ada4d 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -11,9 +11,7 @@ #include #include -static int pinmux_nrfmicro_init(const struct device *port) { - ARG_UNUSED(port); - +static int pinmux_nrfmicro_init(void) { #if (CONFIG_BOARD_NRFMICRO_13 || CONFIG_BOARD_NRFMICRO_13_52833) const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); #if CONFIG_BOARD_NRFMICRO_CHARGER diff --git a/app/boards/arm/puchi_ble/pinmux.c b/app/boards/arm/puchi_ble/pinmux.c index 2817827493b..8475cfb1bdc 100644 --- a/app/boards/arm/puchi_ble/pinmux.c +++ b/app/boards/arm/puchi_ble/pinmux.c @@ -11,9 +11,7 @@ #include #include -static int pinmux_puchi_ble_init(const struct device *port) { - ARG_UNUSED(port); - +static int pinmux_puchi_ble_init(void) { #if CONFIG_BOARD_PUCHI_BLE_v1 const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); #if CONFIG_BOARD_PUCHI_BLE_CHARGER diff --git a/app/include/zmk/hog.h b/app/include/zmk/hog.h index 5ea99126644..eb6e653f772 100644 --- a/app/include/zmk/hog.h +++ b/app/include/zmk/hog.h @@ -9,8 +9,6 @@ #include #include -int zmk_hog_init(const struct device *_arg); - int zmk_hog_send_keyboard_report(struct zmk_hid_keyboard_report_body *body); int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body); diff --git a/app/src/activity.c b/app/src/activity.c index 58b11b2112a..330008b3e47 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -84,7 +84,7 @@ void activity_expiry_function(struct k_timer *_timer) { k_work_submit(&activity_ K_TIMER_DEFINE(activity_timer, activity_expiry_function, NULL); -int activity_init(const struct device *_device) { +static int activity_init(void) { activity_last_uptime = k_uptime_get(); k_timer_start(&activity_timer, K_SECONDS(1), K_SECONDS(1)); diff --git a/app/src/backlight.c b/app/src/backlight.c index 9497f313af6..f050978ff94 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -78,7 +78,7 @@ static void backlight_save_work_handler(struct k_work *work) { static struct k_work_delayable backlight_save_work; #endif -static int zmk_backlight_init(const struct device *_arg) { +static int zmk_backlight_init(void) { if (!device_is_ready(backlight_dev)) { LOG_ERR("Backlight device \"%s\" is not ready", backlight_dev->name); return -ENODEV; diff --git a/app/src/battery.c b/app/src/battery.c index 69eee2f4465..1295f822486 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -92,7 +92,7 @@ static void zmk_battery_start_reporting() { } } -static int zmk_battery_init(const struct device *_arg) { +static int zmk_battery_init(void) { #if !DT_HAS_CHOSEN(zmk_battery) battery = device_get_binding("BATTERY"); diff --git a/app/src/behavior.c b/app/src/behavior.c index fd2b0ec1754..fa2005ff1af 100644 --- a/app/src/behavior.c +++ b/app/src/behavior.c @@ -40,9 +40,7 @@ const struct device *z_impl_behavior_get_binding(const char *name) { } #if IS_ENABLED(CONFIG_LOG) -static int check_behavior_names(const struct device *dev) { - ARG_UNUSED(dev); - +static int check_behavior_names(void) { // Behavior names must be unique, but we don't have a good way to enforce this // at compile time, so log an error at runtime if they aren't unique. ptrdiff_t count; diff --git a/app/src/ble.c b/app/src/ble.c index c8509308275..f01ed87153e 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -629,7 +629,7 @@ static void zmk_ble_ready(int err) { update_advertising(); } -static int zmk_ble_init(const struct device *_arg) { +static int zmk_ble_init(void) { int err = bt_enable(NULL); if (err) { diff --git a/app/src/combo.c b/app/src/combo.c index 5003d7f957a..61671d335f9 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -531,7 +531,7 @@ ZMK_SUBSCRIPTION(combo, zmk_keycode_state_changed); DT_INST_FOREACH_CHILD(0, COMBO_INST) -static int combo_init() { +static int combo_init(void) { k_work_init_delayable(&timeout_task, combo_timeout_handler); DT_INST_FOREACH_CHILD(0, INITIALIZE_COMBO); return 0; diff --git a/app/src/endpoints.c b/app/src/endpoints.c index dbe6bcbcd10..395d6ba502a 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -302,7 +302,7 @@ static struct zmk_endpoint_instance get_selected_instance(void) { return instance; } -static int zmk_endpoints_init(const struct device *_arg) { +static int zmk_endpoints_init(void) { #if IS_ENABLED(CONFIG_SETTINGS) settings_subsys_init(); diff --git a/app/src/hog.c b/app/src/hog.c index 204609145c2..f17f759c908 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -398,7 +398,7 @@ int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) -int zmk_hog_init(const struct device *_arg) { +static int zmk_hog_init(void) { static const struct k_work_queue_config queue_config = {.name = "HID Over GATT Send Work"}; k_work_queue_start(&hog_work_q, hog_q_stack, K_THREAD_STACK_SIZEOF(hog_q_stack), CONFIG_ZMK_BLE_THREAD_PRIORITY, &queue_config); diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index ddc0aef1f45..a7a9b4f018f 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -239,7 +239,7 @@ static void zmk_rgb_underglow_save_state_work(struct k_work *_work) { static struct k_work_delayable underglow_save_work; #endif -static int zmk_rgb_underglow_init(const struct device *_arg) { +static int zmk_rgb_underglow_init(void) { led_strip = DEVICE_DT_GET(STRIP_CHOSEN); #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER) diff --git a/app/src/sensors.c b/app/src/sensors.c index b7aeba0b80f..4dcda44d1d1 100644 --- a/app/src/sensors.c +++ b/app/src/sensors.c @@ -140,7 +140,7 @@ static void zmk_sensors_init_item(uint8_t i) { #define SENSOR_INIT(idx, _t) zmk_sensors_init_item(idx); -static int zmk_sensors_init(const struct device *_arg) { +static int zmk_sensors_init(void) { LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_INIT, (), 0) return 0; diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 95fd72603aa..abb37a0b91c 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -865,7 +865,7 @@ int zmk_split_bt_update_hid_indicator(zmk_hid_indicators_t indicators) { #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) -int zmk_split_bt_central_init(const struct device *_arg) { +static int zmk_split_bt_central_init(void) { k_work_queue_start(&split_central_split_run_q, split_central_split_run_q_stack, K_THREAD_STACK_SIZEOF(split_central_split_run_q_stack), CONFIG_ZMK_BLE_THREAD_PRIORITY, NULL); diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index dcf3db63aa3..e3129ceecea 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -146,7 +146,7 @@ bool zmk_split_bt_peripheral_is_connected(void) { return is_connected; } bool zmk_split_bt_peripheral_is_bonded(void) { return is_bonded; } -static int zmk_peripheral_ble_init(const struct device *_arg) { +static int zmk_peripheral_ble_init(void) { int err = bt_enable(NULL); if (err) { diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index d6eb7ce4b2c..505eb363cd8 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -265,7 +265,7 @@ int zmk_split_bt_sensor_triggered(uint8_t sensor_index, } #endif /* ZMK_KEYMAP_HAS_SENSORS */ -int service_init(const struct device *_arg) { +static int service_init(void) { static const struct k_work_queue_config queue_config = { .name = "Split Peripheral Notification Queue"}; k_work_queue_start(&service_work_q, service_q_stack, K_THREAD_STACK_SIZEOF(service_q_stack), diff --git a/app/src/usb.c b/app/src/usb.c index dbfece76564..cd78761834d 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -65,7 +65,7 @@ void usb_status_cb(enum usb_dc_status_code status, const uint8_t *params) { k_work_submit(&usb_status_notifier_work); }; -static int zmk_usb_init(const struct device *_arg) { +static int zmk_usb_init(void) { int usb_enable_ret; usb_enable_ret = usb_enable(usb_status_cb); diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index f3542ffa4a3..cd3ef920391 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -177,7 +177,7 @@ int zmk_usb_hid_send_mouse_report() { } #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) -static int zmk_usb_hid_init(const struct device *_arg) { +static int zmk_usb_hid_init(void) { hid_dev = device_get_binding("HID_0"); if (hid_dev == NULL) { LOG_ERR("Unable to locate HID device"); diff --git a/app/src/workqueue.c b/app/src/workqueue.c index 1aa4f59a125..e6e55c87c14 100644 --- a/app/src/workqueue.c +++ b/app/src/workqueue.c @@ -17,7 +17,7 @@ struct k_work_q *zmk_workqueue_lowprio_work_q(void) { return &lowprio_work_q; } -static int workqueue_init(const struct device *_device) { +static int workqueue_init(void) { static const struct k_work_queue_config queue_config = {.name = "Low Priority Work Queue"}; k_work_queue_start(&lowprio_work_q, lowprio_q_stack, K_THREAD_STACK_SIZEOF(lowprio_q_stack), CONFIG_ZMK_LOW_PRIORITY_THREAD_PRIORITY, &queue_config); diff --git a/app/src/wpm.c b/app/src/wpm.c index f15de74515d..182abf9541b 100644 --- a/app/src/wpm.c +++ b/app/src/wpm.c @@ -71,7 +71,7 @@ void wpm_expiry_function(struct k_timer *_timer) { k_work_submit(&wpm_work); } K_TIMER_DEFINE(wpm_timer, wpm_expiry_function, NULL); -int wpm_init(const struct device *_device) { +static int wpm_init(void) { wpm_state = 0; wpm_update_counter = 0; k_timer_start(&wpm_timer, K_SECONDS(WPM_UPDATE_INTERVAL_SECONDS), From f7e7c9c10b22d52eca1235ca0440911a8a2aa720 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 23 Jun 2023 07:20:30 +0000 Subject: [PATCH 0948/1130] fix: Add missing include for k_work types. --- app/module/drivers/kscan/kscan_mock.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/module/drivers/kscan/kscan_mock.c b/app/module/drivers/kscan/kscan_mock.c index 604e164cbc5..187a16867e9 100644 --- a/app/module/drivers/kscan/kscan_mock.c +++ b/app/module/drivers/kscan/kscan_mock.c @@ -9,6 +9,7 @@ #include #include #include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); From fb99496a73c5ba5f727ef98a38348447bfef4d9d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 23 Jun 2023 07:23:50 +0000 Subject: [PATCH 0949/1130] chore: Switch to 3.5 Zephyr version. --- app/west.yml | 93 +--------------------------------------------------- 1 file changed, 1 insertion(+), 92 deletions(-) diff --git a/app/west.yml b/app/west.yml index f72f2f398bc..95ab9200240 100644 --- a/app/west.yml +++ b/app/west.yml @@ -1,21 +1,13 @@ manifest: - defaults: - remote: upstream - remotes: - name: zephyrproject-rtos url-base: https://github.com/zephyrproject-rtos - name: zmkfirmware url-base: https://github.com/zmkfirmware - - name: upstream - url-base: https://github.com/zephyrproject-rtos - - name: babblesim - url-base: https://github.com/BabbleSim - group-filter: [-babblesim] projects: - name: zephyr remote: zmkfirmware - revision: v3.2.0+zmk-fixes + revision: v3.5.0+zmk-fixes clone-depth: 1 import: name-blocklist: @@ -38,88 +30,5 @@ manifest: - edtt - trusted-firmware-m - sof - - name: bsim - repo-path: babblesim-manifest - revision: 908ffde6298a937c6549dbfa843a62caab26bfc5 - path: tools/bsim - groups: - - babblesim - - name: babblesim_base - remote: babblesim - repo-path: base.git - path: tools/bsim/components - revision: 02838ca04c4562e68dc876196828d8121679e537 - groups: - - babblesim - - name: babblesim_ext_2G4_libPhyComv1 - remote: babblesim - repo-path: ext_2G4_libPhyComv1.git - path: tools/bsim/components/ext_2G4_libPhyComv1 - revision: 9018113a362fa6c9e8f4b9cab9e5a8f12cc46b94 - groups: - - babblesim - - name: babblesim_ext_2G4_phy_v1 - remote: babblesim - repo-path: ext_2G4_phy_v1.git - path: tools/bsim/components/ext_2G4_phy_v1 - revision: cf2d86e736efac4f12fad5093ed2da2c5b406156 - groups: - - babblesim - - name: babblesim_ext_2G4_channel_NtNcable - remote: babblesim - repo-path: ext_2G4_channel_NtNcable.git - path: tools/bsim/components/ext_2G4_channel_NtNcable - revision: 20a38c997f507b0aa53817aab3d73a462fff7af1 - groups: - - babblesim - - name: babblesim_ext_2G4_channel_multiatt - remote: babblesim - repo-path: ext_2G4_channel_multiatt.git - path: tools/bsim/components/ext_2G4_channel_multiatt - revision: e09bc2d14b1975f969ad19c6ed23eb20e5dc3d09 - groups: - - babblesim - - name: babblesim_ext_2G4_modem_magic - remote: babblesim - repo-path: ext_2G4_modem_magic.git - path: tools/bsim/components/ext_2G4_modem_magic - revision: cb70771794f0bf6f262aa474848611c68ae8f1ed - groups: - - babblesim - - name: babblesim_ext_2G4_modem_BLE_simple - remote: babblesim - repo-path: ext_2G4_modem_BLE_simple.git - path: tools/bsim/components/ext_2G4_modem_BLE_simple - revision: ce975a3259fd0dd761d371b60435242d54794bad - groups: - - babblesim - - name: babblesim_ext_2G4_device_burst_interferer - remote: babblesim - repo-path: ext_2G4_device_burst_interferer.git - path: tools/bsim/components/ext_2G4_device_burst_interferer - revision: 5b5339351d6e6a2368c686c734dc8b2fc65698fc - groups: - - babblesim - - name: babblesim_ext_2G4_device_WLAN_actmod - remote: babblesim - repo-path: ext_2G4_device_WLAN_actmod.git - path: tools/bsim/components/ext_2G4_device_WLAN_actmod - revision: 9cb6d8e72695f6b785e57443f0629a18069d6ce4 - groups: - - babblesim - - name: babblesim_ext_2G4_device_playback - remote: babblesim - repo-path: ext_2G4_device_playback.git - path: tools/bsim/components/ext_2G4_device_playback - revision: 85c645929cf1ce995d8537107d9dcbd12ed64036 - groups: - - babblesim - - name: babblesim_ext_libCryptov1 - remote: babblesim - repo-path: ext_libCryptov1.git - path: tools/bsim/components/ext_libCryptov1 - revision: eed6d7038e839153e340bd333bc43541cb90ba64 - groups: - - babblesim self: west-commands: scripts/west-commands.yml From 0b5afbf9c0f752138d533cf52b1458d4e7c90f77 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 28 Jun 2023 13:34:25 -0700 Subject: [PATCH 0950/1130] refacter(bluetooth): Proper HCI header include. --- app/src/ble.c | 2 +- app/src/split/bluetooth/peripheral.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index f01ed87153e..3ed735a18dd 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -19,7 +19,7 @@ #include #include #include -#include +#include #if IS_ENABLED(CONFIG_SETTINGS) diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index e3129ceecea..6ce82d0aa16 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #if IS_ENABLED(CONFIG_SETTINGS) From bd9c71ab0af29f22eda516b3c3541e83aa51b908 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 16 Oct 2023 06:11:21 +0000 Subject: [PATCH 0951/1130] fix(sensors): Avoid duplicate Kconfig/DTS name. * Upstream added an equivalent fuel gauge driver, so namespace our Kconfig symbol and DTS compatible for the MAX17048 driver. --- app/module/drivers/sensor/CMakeLists.txt | 2 +- app/module/drivers/sensor/max17048/CMakeLists.txt | 4 ++-- app/module/drivers/sensor/max17048/Kconfig | 10 ++++------ app/module/drivers/sensor/max17048/max17048.c | 2 +- .../{maxim,max17048.yml => zmk,maxim-max17048.yml} | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) rename app/module/dts/bindings/sensor/{maxim,max17048.yml => zmk,maxim-max17048.yml} (85%) diff --git a/app/module/drivers/sensor/CMakeLists.txt b/app/module/drivers/sensor/CMakeLists.txt index 9654600a756..cd1a1c45066 100644 --- a/app/module/drivers/sensor/CMakeLists.txt +++ b/app/module/drivers/sensor/CMakeLists.txt @@ -3,4 +3,4 @@ add_subdirectory_ifdef(CONFIG_ZMK_BATTERY battery) add_subdirectory_ifdef(CONFIG_EC11 ec11) -add_subdirectory_ifdef(CONFIG_MAX17048 max17048) +add_subdirectory_ifdef(CONFIG_ZMK_MAX17048 max17048) diff --git a/app/module/drivers/sensor/max17048/CMakeLists.txt b/app/module/drivers/sensor/max17048/CMakeLists.txt index e895fa11fb8..43b7af4d097 100644 --- a/app/module/drivers/sensor/max17048/CMakeLists.txt +++ b/app/module/drivers/sensor/max17048/CMakeLists.txt @@ -5,5 +5,5 @@ zephyr_include_directories(.) zephyr_library() -zephyr_library_sources_ifdef(CONFIG_MAX17048 max17048.c) -zephyr_library_sources_ifndef(CONFIG_MAX17048 ${ZEPHYR_BASE}/misc/empty_file.c) +zephyr_library_sources_ifdef(CONFIG_ZMK_MAX17048 max17048.c) +zephyr_library_sources_ifndef(CONFIG_ZMK_MAX17048 ${ZEPHYR_BASE}/misc/empty_file.c) diff --git a/app/module/drivers/sensor/max17048/Kconfig b/app/module/drivers/sensor/max17048/Kconfig index 8a7ec16e85d..432949a2f55 100644 --- a/app/module/drivers/sensor/max17048/Kconfig +++ b/app/module/drivers/sensor/max17048/Kconfig @@ -1,18 +1,16 @@ # Copyright (c) 2022 The ZMK Contributors # SPDX-License-Identifier: MIT -DT_COMPAT_MAXIM_MAX17048 := maxim,max17048 - -menuconfig MAX17048 +menuconfig ZMK_MAX17048 bool "MAX17048/9 I2C-based Fuel Gauge" - default $(dt_compat_enabled,$(DT_COMPAT_MAXIM_MAX17048)) - depends on I2C + default y + depends on DT_HAS_ZMK_MAXIM_MAX17048_ENABLED && I2C select ZMK_BATTERY help Enable driver for MAX17048/9 I2C-based Fuel Gauge. Supports measuring battery voltage and state-of-charge. -if MAX17048 +if ZMK_MAX17048 config SENSOR_MAX17048_INIT_PRIORITY int "Init priority" diff --git a/app/module/drivers/sensor/max17048/max17048.c b/app/module/drivers/sensor/max17048/max17048.c index 24cfe093f4a..43b30af1a3c 100644 --- a/app/module/drivers/sensor/max17048/max17048.c +++ b/app/module/drivers/sensor/max17048/max17048.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT maxim_max17048 +#define DT_DRV_COMPAT zmk_maxim_max17048 #include #include diff --git a/app/module/dts/bindings/sensor/maxim,max17048.yml b/app/module/dts/bindings/sensor/zmk,maxim-max17048.yml similarity index 85% rename from app/module/dts/bindings/sensor/maxim,max17048.yml rename to app/module/dts/bindings/sensor/zmk,maxim-max17048.yml index 786f4b8686d..765aeee5651 100644 --- a/app/module/dts/bindings/sensor/maxim,max17048.yml +++ b/app/module/dts/bindings/sensor/zmk,maxim-max17048.yml @@ -7,6 +7,6 @@ description: > This is a representation of the Maxim max17048 I2C Fuel Gauge. -compatible: "maxim,max17048" +compatible: "zmk,maxim-max17048" include: [i2c-device.yaml] From d06e90e713fd113493bad513513d2f8d88d3a548 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 9 Nov 2023 00:07:10 -0800 Subject: [PATCH 0952/1130] fix: Fix syscalls generation setup. --- app/CMakeLists.txt | 3 +++ app/prj.conf | 1 + 2 files changed, 4 insertions(+) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index e5f489765e8..314714844f4 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -11,6 +11,9 @@ project(zmk) zephyr_linker_sources(SECTIONS include/linker/zmk-behaviors.ld) zephyr_linker_sources(RODATA include/linker/zmk-events.ld) +zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/behavior.h) +zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/ext_power.h) + # Add your source file to the "app" target. This must come after # find_package(Zephyr) which defines the target. target_include_directories(app PRIVATE include) diff --git a/app/prj.conf b/app/prj.conf index e69de29bb2d..cd2bc13ffd2 100644 --- a/app/prj.conf +++ b/app/prj.conf @@ -0,0 +1 @@ +CONFIG_APPLICATION_DEFINED_SYSCALL=y \ No newline at end of file From ba1a6c08adfaf579292efd24b932033ddd66ce22 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 9 Nov 2023 00:10:38 -0800 Subject: [PATCH 0953/1130] refactor: Return int from main function. --- app/src/main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main.c b/app/src/main.c index 3fd6b116608..9bd7af32723 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -17,14 +17,16 @@ LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -void main(void) { +int main(void) { LOG_INF("Welcome to ZMK!\n"); if (zmk_kscan_init(DEVICE_DT_GET(ZMK_MATRIX_NODE_ID)) != 0) { - return; + return -ENOTSUP; } #ifdef CONFIG_ZMK_DISPLAY zmk_display_init(); #endif /* CONFIG_ZMK_DISPLAY */ + + return 0; } From d6de8a3acce86136c2d6fe944ab5afbc3e10be86 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 9 Nov 2023 00:17:44 -0800 Subject: [PATCH 0954/1130] refactor: Move to POST_KERNEL phase for behavior inits. --- app/src/behaviors/behavior_backlight.c | 2 +- app/src/behaviors/behavior_bt.c | 2 +- app/src/behaviors/behavior_caps_word.c | 2 +- app/src/behaviors/behavior_ext_power.c | 2 +- app/src/behaviors/behavior_hold_tap.c | 2 +- app/src/behaviors/behavior_key_press.c | 2 +- app/src/behaviors/behavior_key_repeat.c | 2 +- app/src/behaviors/behavior_key_toggle.c | 2 +- app/src/behaviors/behavior_macro.c | 2 +- app/src/behaviors/behavior_mod_morph.c | 2 +- app/src/behaviors/behavior_momentary_layer.c | 2 +- app/src/behaviors/behavior_mouse_key_press.c | 2 +- app/src/behaviors/behavior_none.c | 2 +- app/src/behaviors/behavior_outputs.c | 2 +- app/src/behaviors/behavior_reset.c | 2 +- app/src/behaviors/behavior_rgb_underglow.c | 2 +- app/src/behaviors/behavior_sensor_rotate.c | 2 +- app/src/behaviors/behavior_sensor_rotate_var.c | 2 +- app/src/behaviors/behavior_sticky_key.c | 2 +- app/src/behaviors/behavior_tap_dance.c | 2 +- app/src/behaviors/behavior_to_layer.c | 2 +- app/src/behaviors/behavior_toggle_layer.c | 2 +- app/src/behaviors/behavior_transparent.c | 2 +- docs/docs/development/new-behavior.mdx | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 42967e398c3..3f836b73d76 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -91,7 +91,7 @@ static const struct behavior_driver_api behavior_backlight_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_backlight_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 13ea2495891..03bb7d8c898 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -56,7 +56,7 @@ static const struct behavior_driver_api behavior_bt_driver_api = { .binding_released = on_keymap_binding_released, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index 53ea489f846..d9b3f24ec7d 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -182,7 +182,7 @@ static int behavior_caps_word_init(const struct device *dev) { .continuations_count = DT_INST_PROP_LEN(n, continue_list), \ }; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_caps_word_init, NULL, &behavior_caps_word_data_##n, \ - &behavior_caps_word_config_##n, APPLICATION, \ + &behavior_caps_word_config_##n, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_caps_word_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index 0af30b0081b..a51a9f6dbd6 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -74,7 +74,7 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 146d5cc5156..8c28531cf42 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -748,7 +748,7 @@ static int behavior_hold_tap_init(const struct device *dev) { .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 5374e6dd158..566cfcfba77 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -34,7 +34,7 @@ static const struct behavior_driver_api behavior_key_press_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; #define KP_INST(n) \ - BEHAVIOR_DT_INST_DEFINE(n, behavior_key_press_init, NULL, NULL, NULL, APPLICATION, \ + BEHAVIOR_DT_INST_DEFINE(n, behavior_key_press_init, NULL, NULL, NULL, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index bf53c384d71..c93fa722734 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -117,7 +117,7 @@ static int behavior_key_repeat_init(const struct device *dev) { .usage_pages_count = DT_INST_PROP_LEN(n, usage_pages), \ }; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_key_repeat_init, NULL, &behavior_key_repeat_data_##n, \ - &behavior_key_repeat_config_##n, APPLICATION, \ + &behavior_key_repeat_config_##n, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_repeat_driver_api); DT_INST_FOREACH_STATUS_OKAY(KR_INST) diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index db77f81412a..0dc0f5abfdc 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -37,7 +37,7 @@ static const struct behavior_driver_api behavior_key_toggle_driver_api = { }; #define KT_INST(n) \ - BEHAVIOR_DT_INST_DEFINE(n, behavior_key_toggle_init, NULL, NULL, NULL, APPLICATION, \ + BEHAVIOR_DT_INST_DEFINE(n, behavior_key_toggle_init, NULL, NULL, NULL, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_toggle_driver_api); DT_INST_FOREACH_STATUS_OKAY(KT_INST) diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index 1cb76dbd1bc..acffe3d8857 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -225,7 +225,7 @@ static const struct behavior_driver_api behavior_macro_driver_api = { .count = DT_PROP_LEN(inst, bindings), \ .bindings = TRANSFORMED_BEHAVIORS(inst)}; \ BEHAVIOR_DT_DEFINE(inst, behavior_macro_init, NULL, &behavior_macro_state_##inst, \ - &behavior_macro_config_##inst, APPLICATION, \ + &behavior_macro_config_##inst, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_macro_driver_api); DT_FOREACH_STATUS_OKAY(zmk_behavior_macro, MACRO_INST) diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index 176b0f696ec..3a8bf08c198 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -98,7 +98,7 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } }; \ static struct behavior_mod_morph_data behavior_mod_morph_data_##n = {}; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_mod_morph_init, NULL, &behavior_mod_morph_data_##n, \ - &behavior_mod_morph_config_##n, APPLICATION, \ + &behavior_mod_morph_config_##n, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mod_morph_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index 94da6441e76..0c86e605b55 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -40,4 +40,4 @@ static const struct behavior_mo_config behavior_mo_config = {}; static struct behavior_mo_data behavior_mo_data; BEHAVIOR_DT_INST_DEFINE(0, behavior_mo_init, NULL, &behavior_mo_data, &behavior_mo_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mo_driver_api); + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mo_driver_api); diff --git a/app/src/behaviors/behavior_mouse_key_press.c b/app/src/behaviors/behavior_mouse_key_press.c index d4c392ac879..9064a1aa5c8 100644 --- a/app/src/behaviors/behavior_mouse_key_press.c +++ b/app/src/behaviors/behavior_mouse_key_press.c @@ -39,7 +39,7 @@ static const struct behavior_driver_api behavior_mouse_key_press_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; #define MKP_INST(n) \ - BEHAVIOR_DT_INST_DEFINE(n, behavior_mouse_key_press_init, NULL, NULL, NULL, APPLICATION, \ + BEHAVIOR_DT_INST_DEFINE(n, behavior_mouse_key_press_init, NULL, NULL, NULL, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_mouse_key_press_driver_api); diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 57208f36ae1..0137622aceb 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -33,7 +33,7 @@ static const struct behavior_driver_api behavior_none_driver_api = { .binding_released = on_keymap_binding_released, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index 1185aaabf2c..d172c3a11b8 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -42,7 +42,7 @@ static const struct behavior_driver_api behavior_outputs_driver_api = { .binding_pressed = on_keymap_binding_pressed, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index 6a2731ecad4..c559f17fd6f 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -44,7 +44,7 @@ static const struct behavior_driver_api behavior_reset_driver_api = { static const struct behavior_reset_config behavior_reset_config_##n = { \ .type = DT_INST_PROP(n, type)}; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_reset_init, NULL, NULL, &behavior_reset_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_reset_driver_api); DT_INST_FOREACH_STATUS_OKAY(RST_INST) diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index 7a478eb781f..a16ee591ed4 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -149,7 +149,7 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { .locality = BEHAVIOR_LOCALITY_GLOBAL, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_rgb_underglow_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_sensor_rotate.c b/app/src/behaviors/behavior_sensor_rotate.c index f77beca188d..94bac506842 100644 --- a/app/src/behaviors/behavior_sensor_rotate.c +++ b/app/src/behaviors/behavior_sensor_rotate.c @@ -37,7 +37,7 @@ static int behavior_sensor_rotate_init(const struct device *dev) { return 0; }; static struct behavior_sensor_rotate_data behavior_sensor_rotate_data_##n = {}; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_sensor_rotate_init, NULL, \ &behavior_sensor_rotate_data_##n, &behavior_sensor_rotate_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_sensor_rotate_driver_api); DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_INST) diff --git a/app/src/behaviors/behavior_sensor_rotate_var.c b/app/src/behaviors/behavior_sensor_rotate_var.c index 0d3d22b29e0..65a9ce347ce 100644 --- a/app/src/behaviors/behavior_sensor_rotate_var.c +++ b/app/src/behaviors/behavior_sensor_rotate_var.c @@ -28,7 +28,7 @@ static int behavior_sensor_rotate_var_init(const struct device *dev) { return 0; static struct behavior_sensor_rotate_data behavior_sensor_rotate_var_data_##n = {}; \ BEHAVIOR_DT_INST_DEFINE( \ n, behavior_sensor_rotate_var_init, NULL, &behavior_sensor_rotate_var_data_##n, \ - &behavior_sensor_rotate_var_config_##n, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_sensor_rotate_var_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_sensor_rotate_var_driver_api); DT_INST_FOREACH_STATUS_OKAY(SENSOR_ROTATE_VAR_INST) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index aabb017eaa1..f1131f66c5d 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -298,7 +298,7 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; .quick_release = DT_INST_PROP(n, quick_release), \ }; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_sticky_key_init, NULL, &behavior_sticky_key_data, \ - &behavior_sticky_key_config_##n, APPLICATION, \ + &behavior_sticky_key_config_##n, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 306d5ca760b..40427ef8377 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -251,7 +251,7 @@ static int behavior_tap_dance_init(const struct device *dev) { .behaviors = behavior_tap_dance_config_##n##_bindings, \ .behavior_count = DT_INST_PROP_LEN(n, bindings)}; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_tap_dance_init, NULL, NULL, \ - &behavior_tap_dance_config_##n, APPLICATION, \ + &behavior_tap_dance_config_##n, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index 9a58bf602c7..1c87a925905 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -37,7 +37,7 @@ static const struct behavior_driver_api behavior_to_driver_api = { .binding_released = to_keymap_binding_released, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index 154cf9cdf40..817462df5aa 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -44,6 +44,6 @@ static const struct behavior_tog_config behavior_tog_config = {}; static struct behavior_tog_data behavior_tog_data; BEHAVIOR_DT_INST_DEFINE(0, behavior_tog_init, NULL, &behavior_tog_data, &behavior_tog_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tog_driver_api); + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tog_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index ddf62ce0ae8..c7bf802b9fc 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -33,7 +33,7 @@ static const struct behavior_driver_api behavior_transparent_driver_api = { .binding_released = on_keymap_binding_released, }; -BEHAVIOR_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, APPLICATION, +BEHAVIOR_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index aec9a5ae752..d76474fd6fb 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -175,7 +175,7 @@ BEHAVIOR_DT_INST_DEFINE(0, // // Equal to n for behaviors that do make use of multiple instances) _init, NULL, // Initialization Function, Power Management Device Pointer &_data, &_config, // Behavior Data Pointer, Behavior Configuration Pointer (Both Optional) - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, // Initialization Level, Device Priority + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, // Initialization Level, Device Priority &_driver_api); // API Structure #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From 58413ca8c578d9dc39972d4eaaccd73415f167e2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 9 Nov 2023 00:20:27 -0800 Subject: [PATCH 0955/1130] refactor(kscan): Clean up warning about shadowed local. --- app/module/drivers/kscan/kscan_gpio_direct.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index 5b227784dad..b5e77f63301 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -192,10 +192,10 @@ static int kscan_direct_read(const struct device *dev) { for (int i = 0; i < data->inputs.len; i++) { const struct kscan_gpio *gpio = &data->inputs.gpios[i]; - struct zmk_debounce_state *state = &data->pin_state[gpio->index]; + struct zmk_debounce_state *deb_state = &data->pin_state[gpio->index]; - if (zmk_debounce_get_changed(state)) { - const bool pressed = zmk_debounce_is_pressed(state); + if (zmk_debounce_get_changed(deb_state)) { + const bool pressed = zmk_debounce_is_pressed(deb_state); LOG_DBG("Sending event at 0,%i state %s", gpio->index, pressed ? "on" : "off"); data->callback(dev, 0, gpio->index, pressed); @@ -204,7 +204,7 @@ static int kscan_direct_read(const struct device *dev) { } } - continue_scan = continue_scan || zmk_debounce_is_active(state); + continue_scan = continue_scan || zmk_debounce_is_active(deb_state); } if (continue_scan) { From b6d9f3c911bc39095825f35c5df176d95ee07d0a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 9 Nov 2023 23:58:28 +0000 Subject: [PATCH 0956/1130] fix(ble): Ensure large enough string for setting name. * Fix warning related to potentially large number of profiles causing overflow of allocated string for the setting name. --- app/src/ble.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index 3ed735a18dd..7e1ae7d4949 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -98,7 +98,7 @@ bool zmk_ble_active_profile_is_open(void) { } void set_profile_address(uint8_t index, const bt_addr_le_t *addr) { - char setting_name[15]; + char setting_name[17]; char addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); From 98e3b8b4350d0d588bb8b8a38bf184090886b3ee Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 9 Nov 2023 23:59:15 +0000 Subject: [PATCH 0957/1130] refactor: Move to new sys_poweroff API. * Move to new `sys_poweroff` API for our deep sleep functionality. --- app/Kconfig | 5 ++--- app/src/activity.c | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 0e761bed723..3a70f294aa6 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -387,13 +387,12 @@ config ZMK_IDLE_TIMEOUT config ZMK_SLEEP bool "Enable deep sleep support" + depends on HAS_POWEROFF + select POWEROFF imply USB if ZMK_SLEEP -config PM_DEVICE - default y - config ZMK_IDLE_SLEEP_TIMEOUT int "Milliseconds of inactivity before entering deep sleep" default 900000 diff --git a/app/src/activity.c b/app/src/activity.c index 330008b3e47..11409151680 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include @@ -70,7 +70,7 @@ void activity_work_handler(struct k_work *work) { if (inactive_time > MAX_SLEEP_MS && !is_usb_power_present()) { // Put devices in suspend power mode before sleeping set_state(ZMK_ACTIVITY_SLEEP); - pm_state_force(0U, &(struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); + sys_poweroff(); } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ if (inactive_time > MAX_IDLE_MS) { From a81a2d37a8bacbae0dbc0aba8a8833232f7a1b39 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Nov 2023 00:03:57 +0000 Subject: [PATCH 0958/1130] refactor: Remove explicit blocklist item. * `sof` is now not enabled by default as a west dep, so need to add it to the blocklist ourselves. --- app/west.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/west.yml b/app/west.yml index 95ab9200240..1b50247786b 100644 --- a/app/west.yml +++ b/app/west.yml @@ -29,6 +29,5 @@ manifest: - openthread - edtt - trusted-firmware-m - - sof self: west-commands: scripts/west-commands.yml From 552347b8a4945f464554c74b261433ebc8f66f43 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 10 Nov 2023 03:51:42 +0000 Subject: [PATCH 0959/1130] fix(kscan): Adjust composite kscan priority * Composite kscan needs a dedicated priority to be sure it is initialized after the other kscan instances. --- app/module/drivers/kscan/Kconfig | 8 ++++++++ app/module/drivers/kscan/kscan_composite.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/module/drivers/kscan/Kconfig b/app/module/drivers/kscan/Kconfig index 6b701936d4f..88848dff939 100644 --- a/app/module/drivers/kscan/Kconfig +++ b/app/module/drivers/kscan/Kconfig @@ -14,6 +14,14 @@ config ZMK_KSCAN_COMPOSITE_DRIVER bool default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_COMPOSITE)) +if ZMK_KSCAN_COMPOSITE_DRIVER + +config ZMK_KSCAN_COMPOSITE_INIT_PRIORITY + int "Init Priority for the composite kscan driver" + default 95 + +endif + config ZMK_KSCAN_GPIO_DRIVER bool select GPIO diff --git a/app/module/drivers/kscan/kscan_composite.c b/app/module/drivers/kscan/kscan_composite.c index 97311ef8e52..2a3643245c5 100644 --- a/app/module/drivers/kscan/kscan_composite.c +++ b/app/module/drivers/kscan/kscan_composite.c @@ -109,4 +109,4 @@ static const struct kscan_composite_config kscan_composite_config = {}; static struct kscan_composite_data kscan_composite_data; DEVICE_DT_INST_DEFINE(0, kscan_composite_init, NULL, &kscan_composite_data, &kscan_composite_config, - POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, &mock_driver_api); + POST_KERNEL, CONFIG_ZMK_KSCAN_COMPOSITE_INIT_PRIORITY, &mock_driver_api); From 94aa7d8d532f1e84e8e8b9fa96c522468dfc259d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 14 Nov 2023 23:56:11 +0000 Subject: [PATCH 0960/1130] chore(ci): Bump to 3.5 Docker images. --- .devcontainer/Dockerfile | 2 +- .github/workflows/ble-test.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/hardware-metadata-validation.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 5b69e18043d..5e123bd59e4 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/zmkfirmware/zmk-dev-arm:3.2 +FROM docker.io/zmkfirmware/zmk-dev-arm:3.5 COPY .bashrc tmp RUN mv /tmp/.bashrc ~/.bashrc diff --git a/.github/workflows/ble-test.yml b/.github/workflows/ble-test.yml index d5570533145..dd7de632bca 100644 --- a/.github/workflows/ble-test.yml +++ b/.github/workflows/ble-test.yml @@ -35,7 +35,7 @@ jobs: test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }} runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:3.2 + image: docker.io/zmkfirmware/zmk-build-arm:3.5 steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ca44e61a124..c2d1992dc43 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: if: ${{ always() }} runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:3.2 + image: docker.io/zmkfirmware/zmk-build-arm:3.5 needs: compile-matrix strategy: matrix: diff --git a/.github/workflows/hardware-metadata-validation.yml b/.github/workflows/hardware-metadata-validation.yml index f0107a2dd24..716cd976277 100644 --- a/.github/workflows/hardware-metadata-validation.yml +++ b/.github/workflows/hardware-metadata-validation.yml @@ -18,7 +18,7 @@ jobs: validate-metadata: runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-dev-arm:3.2 + image: docker.io/zmkfirmware/zmk-dev-arm:3.5 steps: - uses: actions/checkout@v4 - name: Install dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ebb634351ac..0df1f0c640c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,7 +35,7 @@ jobs: test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }} runs-on: ubuntu-latest container: - image: docker.io/zmkfirmware/zmk-build-arm:3.2 + image: docker.io/zmkfirmware/zmk-build-arm:3.5 steps: - name: Checkout uses: actions/checkout@v4 From f4e6d704652e0cfc46bd0018deb6cddeb8c1b9ca Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 15 Nov 2023 00:40:36 +0000 Subject: [PATCH 0961/1130] fix: Proper use of CONTAINER_OF with delayable work. --- app/module/drivers/kscan/kscan_gpio_demux.c | 4 +++- app/module/drivers/kscan/kscan_gpio_matrix.c | 2 +- app/module/drivers/kscan/kscan_mock.c | 3 ++- app/src/behaviors/behavior_hold_tap.c | 3 ++- app/src/behaviors/behavior_sticky_key.c | 3 ++- app/src/behaviors/behavior_tap_dance.c | 4 +++- 6 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/module/drivers/kscan/kscan_gpio_demux.c b/app/module/drivers/kscan/kscan_gpio_demux.c index 2cbe116d9f2..10433c5a1d0 100644 --- a/app/module/drivers/kscan/kscan_gpio_demux.c +++ b/app/module/drivers/kscan/kscan_gpio_demux.c @@ -9,6 +9,7 @@ #include #include #include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -105,7 +106,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); } \ \ static void kscan_gpio_work_handler_##n(struct k_work *work) { \ - struct kscan_gpio_data_##n *data = CONTAINER_OF(work, struct kscan_gpio_data_##n, work); \ + struct k_work_delayable *d_work = k_work_delayable_from_work(work); \ + struct kscan_gpio_data_##n *data = CONTAINER_OF(d_work, struct kscan_gpio_data_##n, work); \ kscan_gpio_read_##n(data->dev); \ } \ \ diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index 0d8a3190659..6e91bf95fb0 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -290,7 +290,7 @@ static int kscan_matrix_read(const struct device *dev) { } static void kscan_matrix_work_handler(struct k_work *work) { - struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); + struct k_work_delayable *dwork = k_work_delayable_from_work(work); struct kscan_matrix_data *data = CONTAINER_OF(dwork, struct kscan_matrix_data, work); kscan_matrix_read(data->dev); } diff --git a/app/module/drivers/kscan/kscan_mock.c b/app/module/drivers/kscan/kscan_mock.c index 187a16867e9..1ffb937e8c4 100644 --- a/app/module/drivers/kscan/kscan_mock.c +++ b/app/module/drivers/kscan/kscan_mock.c @@ -62,7 +62,8 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb } \ } \ static void kscan_mock_work_handler_##n(struct k_work *work) { \ - struct kscan_mock_data *data = CONTAINER_OF(work, struct kscan_mock_data, work); \ + struct k_work_delayable *d_work = k_work_delayable_from_work(work); \ + struct kscan_mock_data *data = CONTAINER_OF(d_work, struct kscan_mock_data, work); \ const struct kscan_mock_config_##n *cfg = data->dev->config; \ uint32_t ev = cfg->events[data->event_index]; \ LOG_DBG("ev %u row %d column %d state %d\n", ev, ZMK_MOCK_ROW(ev), ZMK_MOCK_COL(ev), \ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 8c28531cf42..efc96c1a3f2 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -710,7 +710,8 @@ ZMK_SUBSCRIPTION(behavior_hold_tap, zmk_position_state_changed); ZMK_SUBSCRIPTION(behavior_hold_tap, zmk_keycode_state_changed); void behavior_hold_tap_timer_work_handler(struct k_work *item) { - struct active_hold_tap *hold_tap = CONTAINER_OF(item, struct active_hold_tap, work); + struct k_work_delayable *d_work = k_work_delayable_from_work(item); + struct active_hold_tap *hold_tap = CONTAINER_OF(d_work, struct active_hold_tap, work); if (hold_tap->work_is_cancelled) { clear_hold_tap(hold_tap); diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index f1131f66c5d..05f6846be12 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -262,8 +262,9 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { } void behavior_sticky_key_timer_handler(struct k_work *item) { + struct k_work_delayable *d_work = k_work_delayable_from_work(item); struct active_sticky_key *sticky_key = - CONTAINER_OF(item, struct active_sticky_key, release_timer); + CONTAINER_OF(d_work, struct active_sticky_key, release_timer); if (sticky_key->position == ZMK_BHV_STICKY_KEY_POSITION_FREE) { return; } diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 40427ef8377..4f6fa1a134e 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -169,7 +169,9 @@ static int on_tap_dance_binding_released(struct zmk_behavior_binding *binding, } void behavior_tap_dance_timer_handler(struct k_work *item) { - struct active_tap_dance *tap_dance = CONTAINER_OF(item, struct active_tap_dance, release_timer); + struct k_work_delayable *d_work = k_work_delayable_from_work(item); + struct active_tap_dance *tap_dance = + CONTAINER_OF(d_work, struct active_tap_dance, release_timer); if (tap_dance->position == ZMK_BHV_TAP_DANCE_POSITION_FREE) { return; } From 802881b625664123a99db75e21e7c9dbe2b75c2c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 15 Nov 2023 04:22:09 +0000 Subject: [PATCH 0962/1130] fix(boards): Remove references to PINMUX Kconfig. --- app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig | 3 --- app/boards/arm/ferris/ferris_rev02_defconfig | 2 +- app/boards/arm/mikoto/CMakeLists.txt | 5 +---- app/boards/arm/mikoto/Kconfig.defconfig | 3 --- app/boards/arm/nrfmicro/CMakeLists.txt | 5 +---- app/boards/arm/nrfmicro/Kconfig.defconfig | 3 --- app/boards/arm/planck/planck_rev6_defconfig | 3 --- app/boards/arm/puchi_ble/CMakeLists.txt | 5 +---- app/boards/arm/puchi_ble/Kconfig.defconfig | 3 --- 9 files changed, 4 insertions(+), 28 deletions(-) diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig b/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig index 53bc0e11034..6b6c8a48de6 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig @@ -5,9 +5,6 @@ CONFIG_SOC_STM32F303XC=y # 72MHz system clock CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 -# enable pinmux -CONFIG_PINMUX=y - # enable GPIO CONFIG_GPIO=y diff --git a/app/boards/arm/ferris/ferris_rev02_defconfig b/app/boards/arm/ferris/ferris_rev02_defconfig index 267035c9fb1..bd03c3050d7 100644 --- a/app/boards/arm/ferris/ferris_rev02_defconfig +++ b/app/boards/arm/ferris/ferris_rev02_defconfig @@ -6,7 +6,7 @@ CONFIG_SOC_STM32F072XB=y # 48MHz system clock CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=48000000 -# enable PINMUX +# enable PINCTRL CONFIG_PINCTRL=y # enable GPIO diff --git a/app/boards/arm/mikoto/CMakeLists.txt b/app/boards/arm/mikoto/CMakeLists.txt index 12cf9b1cf1a..05214a680e9 100644 --- a/app/boards/arm/mikoto/CMakeLists.txt +++ b/app/boards/arm/mikoto/CMakeLists.txt @@ -1,6 +1,3 @@ - -if(CONFIG_PINMUX) zephyr_library() zephyr_library_sources(pinmux.c) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) -endif() \ No newline at end of file +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) \ No newline at end of file diff --git a/app/boards/arm/mikoto/Kconfig.defconfig b/app/boards/arm/mikoto/Kconfig.defconfig index 8117cc87329..5702c6de347 100644 --- a/app/boards/arm/mikoto/Kconfig.defconfig +++ b/app/boards/arm/mikoto/Kconfig.defconfig @@ -21,9 +21,6 @@ endif # USB config BT_CTLR default BT -config PINMUX - default y - choice BOARD_MIKOTO_CHARGER_CURRENT default BOARD_MIKOTO_CHARGER_CURRENT_100MA endchoice diff --git a/app/boards/arm/nrfmicro/CMakeLists.txt b/app/boards/arm/nrfmicro/CMakeLists.txt index 12cf9b1cf1a..05214a680e9 100644 --- a/app/boards/arm/nrfmicro/CMakeLists.txt +++ b/app/boards/arm/nrfmicro/CMakeLists.txt @@ -1,6 +1,3 @@ - -if(CONFIG_PINMUX) zephyr_library() zephyr_library_sources(pinmux.c) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) -endif() \ No newline at end of file +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index 659e9c5c173..38daacde3fd 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -18,9 +18,6 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config PINMUX - default y - if BOARD_NRFMICRO_13 || BOARD_NRFMICRO_13_52833 config BOARD_NRFMICRO_CHARGER diff --git a/app/boards/arm/planck/planck_rev6_defconfig b/app/boards/arm/planck/planck_rev6_defconfig index 74050f3d9c1..ce08f41dff8 100644 --- a/app/boards/arm/planck/planck_rev6_defconfig +++ b/app/boards/arm/planck/planck_rev6_defconfig @@ -5,9 +5,6 @@ CONFIG_SOC_STM32F303XC=y # 72MHz system clock CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 - -# enable pinmux -CONFIG_PINMUX=y CONFIG_PINCTRL=y # enable GPIO diff --git a/app/boards/arm/puchi_ble/CMakeLists.txt b/app/boards/arm/puchi_ble/CMakeLists.txt index 12cf9b1cf1a..05214a680e9 100644 --- a/app/boards/arm/puchi_ble/CMakeLists.txt +++ b/app/boards/arm/puchi_ble/CMakeLists.txt @@ -1,6 +1,3 @@ - -if(CONFIG_PINMUX) zephyr_library() zephyr_library_sources(pinmux.c) -zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) -endif() \ No newline at end of file +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) \ No newline at end of file diff --git a/app/boards/arm/puchi_ble/Kconfig.defconfig b/app/boards/arm/puchi_ble/Kconfig.defconfig index 3533104b2a5..0ba7eefd043 100644 --- a/app/boards/arm/puchi_ble/Kconfig.defconfig +++ b/app/boards/arm/puchi_ble/Kconfig.defconfig @@ -16,7 +16,4 @@ endif # USB_DEVICE_STACK config BT_CTLR default BT -config PINMUX - default y - endif # BOARD_PUCHI_BLE_v1 From 413820fc7fba58323a8c2fa0cae8b6c7e59e4548 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 15 Nov 2023 16:06:21 -0800 Subject: [PATCH 0963/1130] fix(shields): LVGL fixes for nice!view screen * Bump the LVGL mem pool size needed for custom screen. * Fixes for LVGL drawing/label usage. --- app/boards/shields/nice_view/Kconfig.defconfig | 3 +++ app/boards/shields/nice_view/widgets/status.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/nice_view/Kconfig.defconfig b/app/boards/shields/nice_view/Kconfig.defconfig index 84fdd7ccd69..c31cec89f0f 100644 --- a/app/boards/shields/nice_view/Kconfig.defconfig +++ b/app/boards/shields/nice_view/Kconfig.defconfig @@ -24,6 +24,9 @@ choice ZMK_DISPLAY_STATUS_SCREEN default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM endchoice +config LV_Z_MEM_POOL_SIZE + default 4096 if ZMK_DISPLAY_STATUS_SCREEN_CUSTOM + config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM imply NICE_VIEW_WIDGET_STATUS diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 3346546ec70..93139eca0a5 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -149,7 +149,7 @@ static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], const struct status for (int i = 0; i < 5; i++) { bool selected = i == state->active_profile_index; - lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 359, + lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 360, &arc_dsc); if (selected) { @@ -180,7 +180,7 @@ static void draw_bottom(lv_obj_t *widget, lv_color_t cbuf[], const struct status // Draw layer if (state->layer_label == NULL) { - char text[9] = {}; + char text[10] = {}; sprintf(text, "LAYER %i", state->layer_index); From 4fcbe3268a6e0fbbd56a9936d75a0d777c9bd065 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 4 Dec 2023 19:44:42 +0000 Subject: [PATCH 0964/1130] fix(bt): Updated snapshots for BLE tests. * Core Zephyr changes tweaked the output from the BT stack for our unit tests. --- .../snapshot.log | 12 ++++++------ .../profiles/bond-to-cleared-profile/snapshot.log | 12 ++++++------ .../connnect-and-output-to-selection/snapshot.log | 6 +++--- .../dont-bond-to-taken-profile/snapshot.log | 14 +++++++------- .../snapshot.log | 14 +++++++------- .../snapshot.log | 12 ++++++------ 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log b/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log index 4939c0d76a8..077634f249d 100644 --- a/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log +++ b/app/tests/ble/profiles/bond-clear-then-bond-second-client/snapshot.log @@ -1,23 +1,23 @@ profile 0 bt_id: No static addresses stored in controller -profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: main: [Bluetooth initialized] profile 0 ble_central: start_scan: [Scanning successfully started] -profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 0 ble_central: eir_found: [AD]: 9 data_len 0 profile 0 ble_central: eir_found: [AD]: 25 data_len 2 profile 0 ble_central: eir_found: [AD]: 1 data_len 1 profile 0 ble_central: eir_found: [AD]: 2 data_len 4 -profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 0 ble_central: connected: [Setting the security for the connection] profile 0 ble_central: pairing_complete: Pairing complete profile 1 bt_id: No static addresses stored in controller -profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: main: [Bluetooth initialized] profile 1 ble_central: start_scan: [Scanning successfully started] -profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 1 ble_central: eir_found: [AD]: 9 data_len 0 profile 1 ble_central: eir_found: [AD]: 25 data_len 2 profile 1 ble_central: eir_found: [AD]: 1 data_len 1 profile 1 ble_central: eir_found: [AD]: 2 data_len 4 -profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 1 ble_central: connected: [Setting the security for the connection] profile 1 ble_central: pairing_complete: Pairing complete profile 1 ble_central: discover_conn: [Discovery started for conn] diff --git a/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log b/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log index 4939c0d76a8..077634f249d 100644 --- a/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log +++ b/app/tests/ble/profiles/bond-to-cleared-profile/snapshot.log @@ -1,23 +1,23 @@ profile 0 bt_id: No static addresses stored in controller -profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: main: [Bluetooth initialized] profile 0 ble_central: start_scan: [Scanning successfully started] -profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 0 ble_central: eir_found: [AD]: 9 data_len 0 profile 0 ble_central: eir_found: [AD]: 25 data_len 2 profile 0 ble_central: eir_found: [AD]: 1 data_len 1 profile 0 ble_central: eir_found: [AD]: 2 data_len 4 -profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 0 ble_central: connected: [Setting the security for the connection] profile 0 ble_central: pairing_complete: Pairing complete profile 1 bt_id: No static addresses stored in controller -profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: main: [Bluetooth initialized] profile 1 ble_central: start_scan: [Scanning successfully started] -profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 1 ble_central: eir_found: [AD]: 9 data_len 0 profile 1 ble_central: eir_found: [AD]: 25 data_len 2 profile 1 ble_central: eir_found: [AD]: 1 data_len 1 profile 1 ble_central: eir_found: [AD]: 2 data_len 4 -profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 1 ble_central: connected: [Setting the security for the connection] profile 1 ble_central: pairing_complete: Pairing complete profile 1 ble_central: discover_conn: [Discovery started for conn] diff --git a/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log b/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log index 092bb034f87..62cb2d6d92f 100644 --- a/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log +++ b/app/tests/ble/profiles/connnect-and-output-to-selection/snapshot.log @@ -1,12 +1,12 @@ bt_id: No static addresses stored in controller - ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: main: [Bluetooth initialized] ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) ble_central: connected: [Setting the security for the connection] ble_central: pairing_complete: Pairing complete ble_central: discover_conn: [Discovery started for conn] diff --git a/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log b/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log index d41eae797df..6ea4fc721b9 100644 --- a/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log +++ b/app/tests/ble/profiles/dont-bond-to-taken-profile/snapshot.log @@ -1,23 +1,23 @@ profile 0 bt_id: No static addresses stored in controller -profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: main: [Bluetooth initialized] profile 0 ble_central: start_scan: [Scanning successfully started] -profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 0 ble_central: eir_found: [AD]: 9 data_len 0 profile 0 ble_central: eir_found: [AD]: 25 data_len 2 profile 0 ble_central: eir_found: [AD]: 1 data_len 1 profile 0 ble_central: eir_found: [AD]: 2 data_len 4 -profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 0 ble_central: connected: [Setting the security for the connection] profile 0 ble_central: pairing_complete: Pairing complete profile 1 bt_id: No static addresses stored in controller -profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: main: [Bluetooth initialized] profile 1 ble_central: start_scan: [Scanning successfully started] -profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 1 ble_central: eir_found: [AD]: 9 data_len 0 profile 1 ble_central: eir_found: [AD]: 25 data_len 2 profile 1 ble_central: eir_found: [AD]: 1 data_len 1 profile 1 ble_central: eir_found: [AD]: 2 data_len 4 -profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 1 ble_central: connected: [Setting the security for the connection] -profile 1 bt_smp: reason 0x8 +profile 1 bt_smp: pairing failed (peer reason 0x8) profile 1 ble_central: security_changed: [Security Change Failed] diff --git a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log index a03bbb09508..1a88748d1df 100644 --- a/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log +++ b/app/tests/ble/profiles/first-and-second-profile-paired-then-send-data/snapshot.log @@ -1,19 +1,19 @@ profile 0 bt_id: No static addresses stored in controller -profile 0 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 0 ble_central: main: [Bluetooth initialized] profile 0 ble_central: start_scan: [Scanning successfully started] -profile 0 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 0 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 0 ble_central: eir_found: [AD]: 9 data_len 0 profile 0 ble_central: eir_found: [AD]: 25 data_len 2 profile 0 ble_central: eir_found: [AD]: 1 data_len 1 profile 0 ble_central: eir_found: [AD]: 2 data_len 4 -profile 0 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 0 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 0 ble_central: connected: [Setting the security for the connection] profile 0 ble_central: pairing_complete: Pairing complete profile 0 ble_central: discover_conn: [Discovery started for conn] -profile 0 ble_central: discover_func: [ATTRIBUTE] handle 23 profile 1 bt_id: No static addresses stored in controller -profile 1 ble_central: _posix_zephyr_main: [Bluetooth initialized] +profile 1 ble_central: main: [Bluetooth initialized] profile 1 ble_central: start_scan: [Scanning successfully started] +profile 0 ble_central: discover_func: [ATTRIBUTE] handle 23 profile 0 ble_central: discover_func: [ATTRIBUTE] handle 28 profile 0 ble_central: discover_func: [ATTRIBUTE] handle 30 profile 0 ble_central: discover_func: [SUBSCRIBED] @@ -21,12 +21,12 @@ profile 0 ble_central: notify_func: payload profile 0 00 00 04 00 00 00 00 00 |........ profile 0 ble_central: notify_func: payload profile 0 00 00 00 00 00 00 00 00 |........ -profile 1 ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 +profile 1 ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 profile 1 ble_central: eir_found: [AD]: 9 data_len 0 profile 1 ble_central: eir_found: [AD]: 25 data_len 2 profile 1 ble_central: eir_found: [AD]: 1 data_len 1 profile 1 ble_central: eir_found: [AD]: 2 data_len 4 -profile 1 ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) +profile 1 ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) profile 1 ble_central: connected: [Setting the security for the connection] profile 1 ble_central: pairing_complete: Pairing complete profile 1 ble_central: discover_conn: [Discovery started for conn] diff --git a/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log b/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log index bf6cc49ea0f..2323de6faae 100644 --- a/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log +++ b/app/tests/ble/profiles/reconnect-then-output-to-selection/snapshot.log @@ -1,22 +1,22 @@ bt_id: No static addresses stored in controller - ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: main: [Bluetooth initialized] ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) ble_central: connected: [Setting the security for the connection] ble_central: pairing_complete: Pairing complete - ble_central: disconnected: [Disconnected]: ED:3B:20:15:18:12 (random) (reason 0x16) + ble_central: disconnected: [Disconnected]: FD:9E:B2:48:47:39 (random) (reason 0x16) ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) ble_central: connected: [Setting the security for the connection] ble_central: discover_conn: [Discovery started for conn] ble_central: discover_func: [ATTRIBUTE] handle 23 From b3f1d769f09635da74fe3878b113d5797a1227d3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 4 Dec 2023 12:58:13 -0800 Subject: [PATCH 0965/1130] fix(bt): Fixes for BLE test BSIM bits. --- .github/workflows/ble-test.yml | 2 +- .../snapshot.log | 12 ++++++------ .../snapshot.log | 6 +++--- .../snapshot.log | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ble-test.yml b/.github/workflows/ble-test.yml index dd7de632bca..867c7f7ece8 100644 --- a/.github/workflows/ble-test.yml +++ b/.github/workflows/ble-test.yml @@ -69,7 +69,7 @@ jobs: run: make everything - name: Test ${{ matrix.test }} working-directory: app - run: BSIM_COMPONENTS_PATH="${GITHUB_WORKSPACE}/tools/bsim/components/" BSIM_OUT_PATH="${GITHUB_WORKSPACE}/tools/bsim/" ./run-ble-test.sh tests/ble/${{ matrix.test }} + run: BSIM_COMPONENTS_PATH="${GITHUB_WORKSPACE}/tools/bsim/components" BSIM_OUT_PATH="${GITHUB_WORKSPACE}/tools/bsim" ./run-ble-test.sh tests/ble/${{ matrix.test }} - name: Archive artifacts if: ${{ always() }} uses: actions/upload-artifact@v4 diff --git a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log index da2a0c772d7..6c0bac58898 100644 --- a/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log +++ b/app/tests/ble/profiles/overwrite-enabled-reconnect-without-bond-then-output-to-selection/snapshot.log @@ -1,22 +1,22 @@ bt_id: No static addresses stored in controller - ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: main: [Bluetooth initialized] ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) ble_central: connected: [Setting the security for the connection] ble_central: pairing_complete: Pairing complete - ble_central: disconnected: [Disconnected]: ED:3B:20:15:18:12 (random) (reason 0x16) + ble_central: disconnected: [Disconnected]: FD:9E:B2:48:47:39 (random) (reason 0x16) ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) ble_central: connected: [Setting the security for the connection] ble_central: pairing_complete: Pairing complete ble_central: discover_conn: [Discovery started for conn] diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log index 1ec7918f17e..0ab1bea5c56 100644 --- a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log +++ b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log @@ -1,12 +1,12 @@ bt_id: No static addresses stored in controller - ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: main: [Bluetooth initialized] ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) ble_central: pairing_complete: Pairing complete ble_central: read_cb: Read err: 0, length 8 ble_central: read_cb: Read err: 0, length 12 diff --git a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log index fc32198c14b..2157fd035d6 100644 --- a/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log +++ b/app/tests/ble/security/read-hid-after-connect-without-auto-sec/snapshot.log @@ -1,10 +1,10 @@ bt_id: No static addresses stored in controller - ble_central: _posix_zephyr_main: [Bluetooth initialized] + ble_central: main: [Bluetooth initialized] ble_central: start_scan: [Scanning successfully started] - ble_central: device_found: [DEVICE]: ED:3B:20:15:18:12 (random), AD evt type 0, AD data len 15, RSSI -59 + ble_central: device_found: [DEVICE]: FD:9E:B2:48:47:39 (random), AD evt type 0, AD data len 15, RSSI -59 ble_central: eir_found: [AD]: 9 data_len 0 ble_central: eir_found: [AD]: 25 data_len 2 ble_central: eir_found: [AD]: 1 data_len 1 ble_central: eir_found: [AD]: 2 data_len 4 - ble_central: connected: [Connected]: ED:3B:20:15:18:12 (random) - ble_central: read_cb: Read err: 15, length 0 + ble_central: connected: [Connected]: FD:9E:B2:48:47:39 (random) + ble_central: read_cb: Read err: 5, length 0 From 3968d9febd434123d7ac3296a934e5913141277d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 4 Dec 2023 13:55:42 -0800 Subject: [PATCH 0966/1130] feat(boards): Make `west flash` work with new UF2 runner. --- app/boards/arm/adv360pro/board.cmake | 1 + app/boards/arm/bluemicro840/board.cmake | 2 +- app/boards/arm/bt60/board.cmake | 2 +- app/boards/arm/ckp/board.cmake | 1 + app/boards/arm/corneish_zen/board.cmake | 2 +- app/boards/arm/glove80/board.cmake | 2 +- app/boards/arm/mikoto/board.cmake | 2 +- app/boards/arm/nice60/board.cmake | 1 + app/boards/arm/nice_nano/board.cmake | 2 +- app/boards/arm/nrfmicro/board.cmake | 2 +- app/boards/arm/pillbug/board.cmake | 1 + app/boards/arm/puchi_ble/board.cmake | 2 +- app/boards/arm/s40nc/board.cmake | 1 + 13 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/boards/arm/adv360pro/board.cmake b/app/boards/arm/adv360pro/board.cmake index 6d62a8a16bf..bee7f6ad82a 100644 --- a/app/boards/arm/adv360pro/board.cmake +++ b/app/boards/arm/adv360pro/board.cmake @@ -5,4 +5,5 @@ board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/bluemicro840/board.cmake b/app/boards/arm/bluemicro840/board.cmake index fa847d50595..73fa64a9aa0 100644 --- a/app/boards/arm/bluemicro840/board.cmake +++ b/app/boards/arm/bluemicro840/board.cmake @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/bt60/board.cmake b/app/boards/arm/bt60/board.cmake index fa847d50595..73fa64a9aa0 100644 --- a/app/boards/arm/bt60/board.cmake +++ b/app/boards/arm/bt60/board.cmake @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/ckp/board.cmake b/app/boards/arm/ckp/board.cmake index b7feee2ee9e..73fa64a9aa0 100644 --- a/app/boards/arm/ckp/board.cmake +++ b/app/boards/arm/ckp/board.cmake @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/corneish_zen/board.cmake b/app/boards/arm/corneish_zen/board.cmake index fa847d50595..73fa64a9aa0 100644 --- a/app/boards/arm/corneish_zen/board.cmake +++ b/app/boards/arm/corneish_zen/board.cmake @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/glove80/board.cmake b/app/boards/arm/glove80/board.cmake index 36030db7b10..ed0e07a508f 100644 --- a/app/boards/arm/glove80/board.cmake +++ b/app/boards/arm/glove80/board.cmake @@ -2,5 +2,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/mikoto/board.cmake b/app/boards/arm/mikoto/board.cmake index fa847d50595..73fa64a9aa0 100644 --- a/app/boards/arm/mikoto/board.cmake +++ b/app/boards/arm/mikoto/board.cmake @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/nice60/board.cmake b/app/boards/arm/nice60/board.cmake index 2aca938a51a..669907b9cb2 100644 --- a/app/boards/arm/nice60/board.cmake +++ b/app/boards/arm/nice60/board.cmake @@ -3,5 +3,6 @@ set(OPENOCD_NRF5_SUBFAMILY nrf52) board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/app/boards/arm/nice_nano/board.cmake b/app/boards/arm/nice_nano/board.cmake index fa847d50595..73fa64a9aa0 100644 --- a/app/boards/arm/nice_nano/board.cmake +++ b/app/boards/arm/nice_nano/board.cmake @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/nrfmicro/board.cmake b/app/boards/arm/nrfmicro/board.cmake index fa847d50595..73fa64a9aa0 100644 --- a/app/boards/arm/nrfmicro/board.cmake +++ b/app/boards/arm/nrfmicro/board.cmake @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/pillbug/board.cmake b/app/boards/arm/pillbug/board.cmake index 992f395d95f..d9d4ed92e29 100644 --- a/app/boards/arm/pillbug/board.cmake +++ b/app/boards/arm/pillbug/board.cmake @@ -2,5 +2,6 @@ set(OPENOCD_NRF5_SUBFAMILY nrf52) board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/app/boards/arm/puchi_ble/board.cmake b/app/boards/arm/puchi_ble/board.cmake index 3b5c4aeafa1..fd74278a5ee 100644 --- a/app/boards/arm/puchi_ble/board.cmake +++ b/app/boards/arm/puchi_ble/board.cmake @@ -2,5 +2,5 @@ # SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/s40nc/board.cmake b/app/boards/arm/s40nc/board.cmake index c50b2d9d8ad..d31c7167bde 100644 --- a/app/boards/arm/s40nc/board.cmake +++ b/app/boards/arm/s40nc/board.cmake @@ -3,5 +3,6 @@ set(OPENOCD_NRF5_SUBFAMILY nrf52) board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) From 8e9b4fa57c69f2ec88883f1dddd0529bed1fa2e8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 4 Dec 2023 14:39:41 -0800 Subject: [PATCH 0967/1130] fix(boards): Make `&bootloader` work on nrf52 for now. * Use `NRF_STORE_REBOOT_TYPE_GPREGRET` to get bootloader behavior to work for now until retained bootmode is implemented. --- app/Kconfig | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 3a70f294aa6..4d6d8401508 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -37,6 +37,17 @@ config BT_DIS_MODEL config BT_DIS_MANUF default "ZMK Project" +# Hardware specific overrides + +if SOC_SERIES_NRF52X + +# Default on for our usage until boards implement retained bootmode. +config NRF_STORE_REBOOT_TYPE_GPREGRET + bool + default y + +endif + menu "HID" choice ZMK_HID_REPORT_TYPE From 324ada1d20a6069ff23e47c7ed0ed3e13ddae44c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 4 Dec 2023 22:47:31 +0000 Subject: [PATCH 0968/1130] fix(boards): Remove unused pin settings. * Remove unused pin settings that used deprecated devicetree properties. --- app/boards/arm/bt60/bt60.dtsi | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index ba106c658e4..655d25769a7 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -70,18 +70,6 @@ status = "okay"; }; -&i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <17>; - scl-pin = <20>; -}; - -&uart0 { - compatible = "nordic,nrf-uarte"; - tx-pin = <6>; - rx-pin = <8>; -}; - &usbd { status = "okay"; cdc_acm_uart: cdc_acm_uart { From a6c03994932994be26cfeb05aa680470ccb97031 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 11 Dec 2023 16:35:16 -0800 Subject: [PATCH 0969/1130] fix(bluetooth): Remove LLCP impl override. --- app/Kconfig | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 4d6d8401508..f9192da4a5e 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -183,11 +183,6 @@ config ZMK_BLE_PASSKEY_ENTRY config BT_SMP_ALLOW_UNAUTH_OVERWRITE imply ZMK_BLE_PASSKEY_ENTRY -choice BT_LL_SW_LLCP_IMPL - default BT_LL_SW_LLCP_LEGACY if !ZMK_BLE_EXPERIMENTAL_CONN - -endchoice - config BT_CTLR_PHY_2M default n if ZMK_BLE_EXPERIMENTAL_CONN From aeb5bed3d69ded562cc0025d737a64a6c12b240f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 14 Jan 2024 19:19:23 +0000 Subject: [PATCH 0970/1130] fix(kscan): Adjust charlieplex init level/priority. --- app/module/drivers/kscan/kscan_gpio_charlieplex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/module/drivers/kscan/kscan_gpio_charlieplex.c b/app/module/drivers/kscan/kscan_gpio_charlieplex.c index f450af2b59c..a4867aa3207 100644 --- a/app/module/drivers/kscan/kscan_gpio_charlieplex.c +++ b/app/module/drivers/kscan/kscan_gpio_charlieplex.c @@ -414,7 +414,7 @@ static const struct kscan_driver_api kscan_charlieplex_api = { COND_THIS_INTERRUPT(n, (.interrupt = KSCAN_INTR_CFG_INIT(n), ))}; \ \ DEVICE_DT_INST_DEFINE(n, &kscan_charlieplex_init, NULL, &kscan_charlieplex_data_##n, \ - &kscan_charlieplex_config_##n, APPLICATION, \ - CONFIG_APPLICATION_INIT_PRIORITY, &kscan_charlieplex_api); + &kscan_charlieplex_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ + &kscan_charlieplex_api); DT_INST_FOREACH_STATUS_OKAY(KSCAN_CHARLIEPLEX_INIT); From d9c0ded40292a4a0cacc257748c116c2b934034a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 16 Jan 2024 16:42:31 -0800 Subject: [PATCH 0971/1130] fix(shields): Fix use of deprecated Zephyr header. --- app/boards/shields/nice_view/widgets/peripheral_status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/nice_view/widgets/peripheral_status.c b/app/boards/shields/nice_view/widgets/peripheral_status.c index cec0f7b238d..b9da19969cb 100644 --- a/app/boards/shields/nice_view/widgets/peripheral_status.c +++ b/app/boards/shields/nice_view/widgets/peripheral_status.c @@ -6,7 +6,7 @@ */ #include -#include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); From b2a0a357e132dc81f64ff2d39096d1a433a8d40f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 17 Jan 2024 14:48:17 -0800 Subject: [PATCH 0972/1130] fix(display): Set a default mem size for built-in * Set a reasonable default LVGL mem pool size for our built-in status screen. --- app/src/display/Kconfig | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 3e17ff76435..356b4760c1b 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -29,11 +29,8 @@ endchoice config LV_MEM_CUSTOM default y -# config LV_Z_MEM_POOL_MIN_SIZE -# default 32 - -# config LV_Z_MEM_POOL_MAX_SIZE -# default 8192 + config LV_Z_MEM_POOL_SIZE + default 4096 if ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN choice ZMK_DISPLAY_STATUS_SCREEN prompt "Default status screen for displays" From cd6f8a680ced404d5b12e1caeed6ca8ecfb2732d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 29 Jan 2024 08:36:02 +0000 Subject: [PATCH 0973/1130] fix(ble): Update security test for changes in 3.5. --- .../security/read-hid-after-connect-with-auto-sec/snapshot.log | 1 - 1 file changed, 1 deletion(-) diff --git a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log index 0ab1bea5c56..b8ee29eb257 100644 --- a/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log +++ b/app/tests/ble/security/read-hid-after-connect-with-auto-sec/snapshot.log @@ -10,4 +10,3 @@ ble_central: pairing_complete: Pairing complete ble_central: read_cb: Read err: 0, length 8 ble_central: read_cb: Read err: 0, length 12 - ble_central: read_cb: Read err: 10, length 0 From 18e5a1a26b141b2ff25db9ade00fa68bc29e2ef6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 15 Jan 2024 01:24:49 +0000 Subject: [PATCH 0974/1130] feat: Add Zephyr 3.5 blog post. --- docs/blog/2024-02-09-zephyr-3-5.md | 143 +++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 docs/blog/2024-02-09-zephyr-3-5.md diff --git a/docs/blog/2024-02-09-zephyr-3-5.md b/docs/blog/2024-02-09-zephyr-3-5.md new file mode 100644 index 00000000000..b3fec6cbda2 --- /dev/null +++ b/docs/blog/2024-02-09-zephyr-3-5.md @@ -0,0 +1,143 @@ +--- +title: "Zephyr 3.5 Update" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [firmware, zephyr, core] +--- + +I'm happy to announce that we have completed the [work](https://github.com/zmkfirmware/zmk/pull/1995) to upgrade ZMK to [Zephyr 3.5](https://docs.zephyrproject.org/3.5.0/releases/release-notes-3.5.html)! + +[petejohanson] did the upgrade work to adjust ZMK for the Zephyr changes: + +- Add `west flash` support to all UF2 capable boards. +- Adjust for LVGL DTS/Kconfig changes +- Zephyr core API changes, including `CONTAINER_OF` work API changes, init priority/callback, and others + +## Getting The Changes + +Use the following steps to update to the latest tooling in order to properly use the new ZMK changes: + +### User Config Repositories Using GitHub Actions + +Existing user config repositories using Github Actions to build will pull down Zephyr 3.5 automatically, however if you created your user config a while ago, you may need to update it to reference our shared build configuration to leverage the correct Docker image. + +1. Replace the contents of your `.github/workflows/build.yml` with: + + ```yaml + on: [push, pull_request, workflow_dispatch] + + jobs: + build: + uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main + ``` + +1. If it doesn't exist already, add a new file to your repository named `build.yaml`: + + ```yaml + # This file generates the GitHub Actions matrix + # For simple board + shield combinations, add them + # to the top level board and shield arrays, for more + # control, add individual board + shield combinations to + # the `include` property, e.g: + # + # board: [ "nice_nano_v2" ] + # shield: [ "corne_left", "corne_right" ] + # include: + # - board: bdn9_rev2 + # - board: nice_nano_v2 + # shield: reviung41 + # + --- + ``` + +and then update it as appropriate to build the right shields/boards for your configuration. + +### VS Code & Docker (Dev Container) + +If you build locally using VS Code & Docker then: + +- Pull the latest ZMK `main` with `git pull` for your ZMK checkout +- Reload the project +- If you are prompted to rebuild the remote container, click `Rebuild` +- Otherwise, press `F1` and run `Remote Containers: Rebuild Container` +- Once the container has rebuilt and reloaded, run `west update` to pull the updated Zephyr version and its dependencies. + +Once the container has rebuilt, VS Code will be running the 3.5 Docker image. + +### Local Host Development + +The following steps will get you building ZMK locally against Zephyr 3.5: + +- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- Install the latest version of `west` by running `pip3 install --user --update west`. +- Pull the latest ZMK `main` with `git pull` for your ZMK checkout +- Run `west update` to pull the updated Zephyr version and its dependencies + +From there, you should be ready to build as normal! + +## Board/Shield Changes + +The following changes have [already been completed](https://github.com/zmkfirmware/zmk/pull/1995/commits) for all boards/shields in ZMK `main` branch. For existing or new PRs, or out of tree boards, the following changes are necessary to properly work with the latest changes. + +### West Flash Support + +If you have a custom board for a target that has a UF2 supporting bootloader, you can easily add support for +flashing via `west flash`. Note that using `west flash` isn't mandatory, it is merely a convenient way to automate copying to the mass storage device, which you can continue to do manually. +To add support, add a line to your board's `board.cmake` file like so: + +``` +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) +``` + +### LVGL DTS/Kconfig Changes + +Two items were changed for LVGL use for displays that may need adjusting for custom shields: + +#### DPI Kconfig Rename + +The old `LV_Z_DPI` Kconfig symbol was promoted to a Kconfig in upstream LVGL, and is now named `LV_DPI_DEF`. You +will need to replace this symbol in your board/shield's `Kconfig.defconfig` file. + +#### SSD1306 OLED Inverse Refactor + +Inverting black/white pixels has moved out of the Kconfig system and into a new DTS property. If you have a custom +shield that uses an SSD1306, you should: + +- Remove any override for the `SSD1306_REVERSE_MODE` from your Kconfig files. +- Add the new `inversion-on;` boolean property to the SSD1306 node in your devicetree file. + +### Maxim max17048 Sensor Driver + +Upstream Zephyr has added a driver for the max17048 fuel gauge, but using the new [fuel gauge API](https://docs.zephyrproject.org/3.5.0/hardware/peripherals/fuel_gauge.html) that ZMK +does not yet consume. To avoid a conflict with the new upstream and keep our existing sensor driver, our driver has been renamed to be namespaced with a ZMK prefix. The following changes are needed for any boards using the driver: + +- Change the `compatible` value for the node to be `zmk,maxim-17048`, e.g. `compatible = "zmk,maxim-max17048";`. +- If enabling the driver explicitly via Kconfig, rename `MAX17048` to the new `ZMK_MAX17048` in your `Kconfig.defconfig` or `_defconfig` files. + +## Upcoming Changes + +Moving to Zephyr 3.5 will unblock several exciting efforts that were dependent on that Zephyr release. + +### BLE Stability Improvements + +Many users have reported various BLE issues with some hardware combinations, including challenges with updated +Intel drivers, and macOS general stability problems. The Zephyr 3.5 release includes many fixes for the BT host and controller portions that, combined with some small upcoming ZMK changes, have been reported to completely resolve previous issues. Further focused testing will immediately commence to fully verify the ZMK changes before +making them the default. + +If you'd like to test those changes, enable `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN=y` for your builds. + +### Pointer Integration + +The Zephyr 3.5 release includes a new [input subsystem](https://docs.zephyrproject.org/3.5.0/services/input/index.html) that we will be leveraging for our upcoming pointer support. The open PR for that work is now unblocked and further testing and code review will begin to work on getting that feature integrated into ZMK as well. + +### Power Domains + +Several power domain related changes are now available as well, which were a necessity for continued work on the improved peripheral power handling that's planned to supersede the existing "VCC cutoff" code that currently exists but causes problems for builds that include multiple powered peripherals like Displays + RGB. + +## Thanks! + +Thanks to all the testers who have helped verify ZMK functionality on the newer Zephyr version. + +[petejohanson]: https://github.com/petejohanson From 2d6c9f797c7eb3a0eef26833303ecf1565e0bde2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 5 Feb 2024 12:49:58 -0800 Subject: [PATCH 0975/1130] refactor(display): Move to proper SPI ready API. --- app/module/drivers/display/il0323.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/module/drivers/display/il0323.c b/app/module/drivers/display/il0323.c index 6555e5c1d9b..372897aa233 100644 --- a/app/module/drivers/display/il0323.c +++ b/app/module/drivers/display/il0323.c @@ -341,7 +341,7 @@ static int il0323_controller_init(const struct device *dev) { static int il0323_init(const struct device *dev) { const struct il0323_cfg *cfg = dev->config; - if (!spi_is_ready(&cfg->spi)) { + if (!spi_is_ready_dt(&cfg->spi)) { LOG_ERR("SPI device not ready for IL0323"); return -EIO; } From 4bcecd98f8b2d0870d6c1e904b5a38cb9c7eb5b8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 5 Feb 2024 13:12:18 -0800 Subject: [PATCH 0976/1130] fix(display): Tweaks to memory Kconfig settings. * Don't default heap mempool by default now that there's a dedicated LVGL mempool * Set proper defaults for CiZ display hardware/custom screen. * Double the dedicated display thread stack size for CiZ. --- app/Kconfig | 3 --- app/boards/arm/corneish_zen/Kconfig.defconfig | 7 +++++++ app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig | 2 +- .../arm/corneish_zen/corneish_zen_v1_right_defconfig | 2 +- app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig | 2 +- .../arm/corneish_zen/corneish_zen_v2_right_defconfig | 2 +- app/module/drivers/display/il0323.c | 1 + 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index f9192da4a5e..14456b5fe8c 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -599,9 +599,6 @@ endmenu #ZMK endmenu -config HEAP_MEM_POOL_SIZE - default 8192 if ZMK_DISPLAY - config KERNEL_BIN_NAME default "zmk" diff --git a/app/boards/arm/corneish_zen/Kconfig.defconfig b/app/boards/arm/corneish_zen/Kconfig.defconfig index f3cc959edd0..11f932b5302 100644 --- a/app/boards/arm/corneish_zen/Kconfig.defconfig +++ b/app/boards/arm/corneish_zen/Kconfig.defconfig @@ -57,6 +57,13 @@ config IL0323 config ZMK_DISPLAY_BLANK_ON_IDLE default n +# Needed for the IL0323 driver which allocs memory to clear the display +config HEAP_MEM_POOL_SIZE + default 1024 + + config LV_Z_MEM_POOL_SIZE + default 4096 + endif # ZMK_DISPLAY menuconfig CUSTOM_WIDGET_BATTERY_STATUS diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig index d738255601b..d4de8ed3ca3 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left_defconfig @@ -44,7 +44,7 @@ CONFIG_ZMK_BLE=y # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y -CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=4096 CONFIG_LV_Z_BITS_PER_PIXEL=1 CONFIG_LV_COLOR_DEPTH_1=y CONFIG_LV_DPI_DEF=145 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig index d89377bc400..ad78217f654 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right_defconfig @@ -44,7 +44,7 @@ CONFIG_ZMK_BLE=y # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y -CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=4096 CONFIG_LV_Z_BITS_PER_PIXEL=1 CONFIG_LV_COLOR_DEPTH_1=y CONFIG_LV_DPI_DEF=145 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig index 29a5f878ac2..b6670fd8df5 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left_defconfig @@ -40,7 +40,7 @@ CONFIG_ZMK_BLE=y # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y -CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=4096 CONFIG_LV_Z_BITS_PER_PIXEL=1 CONFIG_LV_COLOR_DEPTH_1=y CONFIG_LV_DPI_DEF=145 diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig index 83dc57d4dd8..90cfe7698d1 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right_defconfig @@ -40,7 +40,7 @@ CONFIG_ZMK_BLE=y # enable display drivers CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y -CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=2048 +CONFIG_ZMK_DISPLAY_DEDICATED_THREAD_STACK_SIZE=4096 CONFIG_LV_Z_BITS_PER_PIXEL=1 CONFIG_LV_COLOR_DEPTH_1=y CONFIG_LV_DPI_DEF=145 diff --git a/app/module/drivers/display/il0323.c b/app/module/drivers/display/il0323.c index 372897aa233..c9d72fc529b 100644 --- a/app/module/drivers/display/il0323.c +++ b/app/module/drivers/display/il0323.c @@ -177,6 +177,7 @@ static int il0323_clear_and_write_buffer(const struct device *dev, uint8_t patte line = k_malloc(IL0323_NUMOF_PAGES); if (line == NULL) { + LOG_ERR("Failed to allocate memory for the clear"); return -ENOMEM; } From edc72c1166d565c30480ec895bf0aa5d7bd29d2a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 7 Feb 2024 07:03:29 +0000 Subject: [PATCH 0977/1130] chore(docs): Update Zephyr links to 3.5.0 versions. --- docs/docs/config/backlight.md | 6 +-- docs/docs/config/battery.md | 4 +- docs/docs/config/displays.md | 8 ++-- docs/docs/config/index.md | 16 ++++---- docs/docs/config/kscan.md | 6 +-- docs/docs/config/system.md | 2 +- .../development/boards-shields-keymaps.md | 10 ++--- docs/docs/development/build-flash.mdx | 8 ++-- docs/docs/development/new-behavior.mdx | 16 ++++---- docs/docs/development/new-shield.mdx | 4 +- docs/docs/development/setup.mdx | 40 +++++++++---------- docs/docs/development/usb-logging.mdx | 2 +- docs/docs/faq.md | 8 ++-- docs/docs/features/bluetooth.md | 2 +- docs/docs/intro.md | 2 +- 15 files changed, 67 insertions(+), 67 deletions(-) diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md index 0db1291050e..3d554c5791e 100644 --- a/docs/docs/config/backlight.md +++ b/docs/docs/config/backlight.md @@ -26,7 +26,7 @@ The `*_START` settings only determine the initial backlight state. Any changes y ## Devicetree -Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/build/dts/intro.html#aliases-and-chosen-nodes) +Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/build/dts/intro.html#aliases-and-chosen-nodes) | Property | Type | Description | | --------------- | ---- | -------------------------------------------- | @@ -34,7 +34,7 @@ Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/build/dts/int See the Zephyr devicetree bindings for LED drivers: -- [gpio-leds](https://docs.zephyrproject.org/3.0.0/reference/devicetree/bindings/gpio/gpio-leds.html) -- [pwm-leds](https://docs.zephyrproject.org/latest/build/dts/api/bindings/led/pwm-leds.html) +- [gpio-leds](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/led/gpio-leds.html) +- [pwm-leds](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/led/pwm-leds.html) See the [backlight feature page](../features/backlight.mdx) for examples of the properties that must be set to enable backlighting. diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 8327a0b8756..cc725e432f8 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -30,7 +30,7 @@ On macOS the BLE battery reporting packets can cause the computer to wakeup from ### Devicetree -Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/intro.html#aliases-and-chosen-nodes) +Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) | Property | Type | Description | | ------------- | ---- | --------------------------------------------- | @@ -44,7 +44,7 @@ Driver for reading the voltage of a battery using an ADC connected to a voltage Applies to: `compatible = "zmk,battery-voltage-divider"` -See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/latest/build/dts/api/bindings/adc/voltage-divider.html). +See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/adc/voltage-divider.html). ## nRF VDDH Battery Sensor diff --git a/docs/docs/config/displays.md b/docs/docs/config/displays.md index e22f0da8fbb..96a0074a524 100644 --- a/docs/docs/config/displays.md +++ b/docs/docs/config/displays.md @@ -51,14 +51,14 @@ You must also configure the driver for your display. ZMK provides the following - [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/module/drivers/display/Kconfig.il0323) -Zephyr provides several display drivers as well. Search for the name of your display in [Zephyr's Kconfig options](https://docs.zephyrproject.org/latest/kconfig.html) documentation. +Zephyr provides several display drivers as well. Search for the name of your display in [Zephyr's Kconfig options](https://docs.zephyrproject.org/3.5.0/kconfig.html) documentation. ## Devicetree See the Devicetree bindings for your display. Here are the bindings for common displays: - [IL0323](https://github.com/zmkfirmware/zmk/blob/main/app/module/dts/bindings/display/gooddisplay%2Cil0323.yaml) -- [SSD1306 (i2c)](https://docs.zephyrproject.org/latest/build/dts/api/bindings/display/solomon,ssd1306fb-i2c.html) -- [SSD1306 (spi)](https://docs.zephyrproject.org/latest/build/dts/api/bindings/display/solomon,ssd1306fb-spi.html) +- [SSD1306 (i2c)](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/display/solomon,ssd1306fb-i2c.html) +- [SSD1306 (spi)](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/display/solomon,ssd1306fb-spi.html) -A full list of drivers provided by Zephyr can be found in [Zephyr's Devicetree bindings index](https://docs.zephyrproject.org/latest/build/dts/api/bindings.html). +A full list of drivers provided by Zephyr can be found in [Zephyr's Devicetree bindings index](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings.html). diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 3a430a8b465..c8da6d7c385 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -44,7 +44,7 @@ ZMK will search the board folder for the following config files: Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in board folders. -For more documentation on creating and configuring a new board, see [Zephyr's board porting guide](https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html#write-kconfig-files). +For more documentation on creating and configuring a new board, see [Zephyr's board porting guide](https://docs.zephyrproject.org/3.5.0/hardware/porting/board_porting.html#write-kconfig-files). ### Shield Folder @@ -63,7 +63,7 @@ ZMK will search the shield folder for the following config files: Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in shield folders. -For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/latest/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/new-shield.mdx) guide. +For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/3.5.0/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/new-shield.mdx) guide. ## Kconfig Files @@ -79,7 +79,7 @@ CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y The list of available settings is determined by various files in ZMK whose names start with `Kconfig`. Files ending with `_defconfig` use the same syntax, but are intended for setting configuration specific to the hardware which users typically won't need to change. Note that options are _not_ prefixed with `CONFIG_` in these files. -See [Zephyr's Kconfig documentation](https://docs.zephyrproject.org/latest/build/kconfig/index.html) for more details on Kconfig files. +See [Zephyr's Kconfig documentation](https://docs.zephyrproject.org/3.5.0/build/kconfig/index.html) for more details on Kconfig files. ### KConfig Value Types @@ -128,7 +128,7 @@ Devicetree files look like this: Devicetree properties apply to specific nodes in the tree instead of globally. The properties that can be set for each node are determined by `.yaml` files in ZMK in the various `dts/bindings` folders. -See [Zephyr's Devicetree guide](https://docs.zephyrproject.org/latest/build/dts/index.html) for more details on Devicetree files. +See [Zephyr's Devicetree guide](https://docs.zephyrproject.org/3.5.0/build/dts/index.html) for more details on Devicetree files. ### Changing Devicetree Properties @@ -149,7 +149,7 @@ The part before the colon, `kscan0`, is a label. This is optional, and it provid The `compatible` property indicates what type of node it is. Search this documentation for the text inside the quotes to see which properties the node supports. You can also search ZMK for a file whose name is the value of the `compatible` property with a `.yaml` file extension. -To set a property, see below for examples for common property types, or see [Zephyr's Devicetree documentation](https://docs.zephyrproject.org/latest/build/dts/intro.html#writing-property-values) for more details on the syntax for properties. +To set a property, see below for examples for common property types, or see [Zephyr's Devicetree documentation](https://docs.zephyrproject.org/3.5.0/build/dts/intro.html#writing-property-values) for more details on the syntax for properties. To change a property for an existing node, first find the node you want to change and find its label. Next, outside of any other node, write an ampersand (`&`) followed by the node's label, an opening curly brace (`{`), one or more new property values, a closing curly brace (`}`), and a semicolon (`;`). @@ -174,7 +174,7 @@ If the node you want to edit doesn't have a label, you can also write a new tree ### Devicetree Property Types -These are some of the property types you will see most often when working with ZMK. [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/latest/build/dts/bindings.html) provides more detailed information and a full list of types. +These are some of the property types you will see most often when working with ZMK. [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/3.5.0/build/dts/bindings.html) provides more detailed information and a full list of types. #### bool @@ -228,14 +228,14 @@ Example: `property = <&none &mo 1>;` Values can also be split into multiple blocks, e.g. `property = <&none>, <&mo 1>;` -See the documentation for "phandle-array" in [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/latest/build/dts/bindings.html) +See the documentation for "phandle-array" in [Zephyr's Devicetree bindings documentation](https://docs.zephyrproject.org/3.5.0/build/dts/bindings.html) for more details on how parameters are associated with nodes. #### GPIO array This is just a phandle array. The documentation lists this as a different type to make it clear which properties expect an array of GPIOs. -Each item in the array should be a label for a GPIO node (the names of which differ between hardware platforms) followed by an index and configuration flags. See [Zephyr's GPIO documentation](https://docs.zephyrproject.org/latest/hardware/peripherals/gpio.html) for a full list of flags. +Each item in the array should be a label for a GPIO node (the names of which differ between hardware platforms) followed by an index and configuration flags. See [Zephyr's GPIO documentation](https://docs.zephyrproject.org/3.5.0/hardware/peripherals/gpio.html) for a full list of flags. Example: diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 045c35ca602..15457cb062b 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -25,7 +25,7 @@ If the debounce press/release values are set to any value other than `-1`, they ### Devicetree -Applies to: [`/chosen` node](https://docs.zephyrproject.org/latest/guides/dts/intro.html#aliases-and-chosen-nodes) +Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) | Property | Type | Description | | ---------------------- | ---- | ------------------------------------------------------------- | @@ -84,7 +84,7 @@ By default, a switch will drain current through the internal pull up/down resist `toggle-mode` applies to all switches handled by the instance of the driver. To use a toggle switch with other, non-toggle, direct GPIO switches, create two instances of the direct GPIO driver, one with `toggle-mode` and the other without. Then, use a [composite driver](#composite-driver) to combine them. -Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/gpio.html#api-reference) for the elements in `input-gpios` should be `(GPIO_ACTIVE_LOW | GPIO_PULL_UP)`: +Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](https://docs.zephyrproject.org/3.5.0/hardware/peripherals/gpio.html#api-reference) for the elements in `input-gpios` should be `(GPIO_ACTIVE_LOW | GPIO_PULL_UP)`: ```dts kscan0: kscan { @@ -131,7 +131,7 @@ The `diode-direction` property must be one of: | `"row2col"` | Diodes point from rows to columns (cathodes are connected to columns) | | `"col2row"` | Diodes point from columns to rows (cathodes are connected to rows) | -Given the `diode-direction`, the [GPIO flags](https://docs.zephyrproject.org/3.2.0/hardware/peripherals/gpio.html#api-reference) for the elements in `row-` and `col-gpios` should be set appropriately. +Given the `diode-direction`, the [GPIO flags](https://docs.zephyrproject.org/3.5.0/hardware/peripherals/gpio.html#api-reference) for the elements in `row-` and `col-gpios` should be set appropriately. The output pins (e.g. columns for `col2row`) should have the flag `GPIO_ACTIVE_HIGH`, and input pins (e.g. rows for `col2row`) should have the flags `(GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)`: ```dts diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 9407772c2cf..83f2f06545b 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -80,7 +80,7 @@ By default USB Boot protocol support is disabled, however certain situations suc ### Bluetooth -See [Zephyr's Bluetooth stack architecture documentation](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-arch.html) +See [Zephyr's Bluetooth stack architecture documentation](https://docs.zephyrproject.org/3.5.0/connectivity/bluetooth/bluetooth-arch.html) for more information on configuring Bluetooth. | Config | Type | Description | Default | diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 3595cb171b3..d449a1c12be 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -6,7 +6,7 @@ title: Boards, Shields, and Keymaps The foundational elements needed to get a specific keyboard working with ZMK can be broken down into: -- A [KSCAN driver](https://docs.zephyrproject.org/3.2.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. +- A [KSCAN driver](https://docs.zephyrproject.org/3.5.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. - An optional matrix transform, which defines how the KSCAN row/column events are translated into logical "key positions". This is required for non-rectangular keyboards/matrices, where the key positions don't naturally follow the row/columns from the GPIO matrix. - A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. @@ -27,8 +27,8 @@ in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck - A `${board_name}_defconfig` file that forces specific Kconfig settings that are specific to this hardware configuration. Mostly this is SoC settings around the specific hardware configuration. - `${board_name}.dts` which contains all the devicetree definitions, including: - An `#include` line that pulls in the specific microprocessor that is used, e.g. `#include `. - - A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) - - (Optional) A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) + - (Optional) A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `board.cmake` file with CMake directives for how to flash to the device. - A `${board_name}.keymap` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. @@ -47,6 +47,6 @@ in the `app/boards/shields/${board_name}` directory, e.g. `app/boards/shields/cl - A `Kconfig.shield` that defines the toplevel Kconfig value for the shield, which uses a supplied utility to function to default the value based on the shield list, e.g. `def_bool $(shields_list_contains,clueboard_california)`. - A `Kconfig.defconfig` file to set default values for things like `ZMK_KEYBOARD_NAME` - A `${shield_name}.overlay` file, which is a devicetree overlay file, that includes: - - A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/3.2.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. - - (Optional) A [chosen](https://docs.zephyrproject.org/3.2.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/3.5.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. + - (Optional) A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. diff --git a/docs/docs/development/build-flash.mdx b/docs/docs/development/build-flash.mdx index ece474bd60e..c0c7563a4df 100644 --- a/docs/docs/development/build-flash.mdx +++ b/docs/docs/development/build-flash.mdx @@ -16,7 +16,7 @@ an onboard MCU, or one that uses an MCU board addon. ### Keyboard (Shield) + MCU Board -ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/3.2.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/3.2.0/guides/porting/board_porting.html) +ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/3.5.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/3.5.0/guides/porting/board_porting.html) Given the following: @@ -32,7 +32,7 @@ west build -b proton_c -- -DSHIELD=kyria_left ### Keyboard With Onboard MCU -Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/3.2.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/3.5.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. Given the following: @@ -79,7 +79,7 @@ Build times can be significantly reduced after the initial build by omitting all ### Building with external modules -ZMK supports loading additional boards, shields, code, etc. from [external Zephyr modules](https://docs.zephyrproject.org/3.2.0/develop/modules.html), facilitating out-of-tree management and versioning independent of the ZMK repository. To build with any additional modules, use the `ZMK_EXTRA_MODULES` define added to your `west build` command. +ZMK supports loading additional boards, shields, code, etc. from [external Zephyr modules](https://docs.zephyrproject.org/3.5.0/develop/modules.html), facilitating out-of-tree management and versioning independent of the ZMK repository. To build with any additional modules, use the `ZMK_EXTRA_MODULES` define added to your `west build` command. For instance, building with the `my-vendor-keebs-module` checked out to your documents directory, you would build like: @@ -144,7 +144,7 @@ west flash ## Multi-CPU and Dual-Chip Bluetooth Boards -Zephyr supports running the Bluetooth host and controller on separate processors. In such a configuration, ZMK always runs on the host processor, but you may need to build and flash separate firmware for the controller. Zephyr provides sample code which can be used as the controller firmware for Bluetooth HCI over [RPMsg](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_rpmsg/README.html), [SPI](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_spi/README.html), [UART](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_uart/README.html), and [USB](https://docs.zephyrproject.org/3.2.0/samples/bluetooth/hci_usb/README.html). See [Zephyr's Bluetooth Stack Architecture documentation](https://docs.zephyrproject.org/3.2.0/connectivity/bluetooth/bluetooth-arch.html) for more details. +Zephyr supports running the Bluetooth host and controller on separate processors. In such a configuration, ZMK always runs on the host processor, but you may need to build and flash separate firmware for the controller. Zephyr provides sample code which can be used as the controller firmware for Bluetooth HCI over [RPMsg](https://docs.zephyrproject.org/3.5.0/samples/bluetooth/hci_rpmsg/README.html), [SPI](https://docs.zephyrproject.org/3.5.0/samples/bluetooth/hci_spi/README.html), [UART](https://docs.zephyrproject.org/3.5.0/samples/bluetooth/hci_uart/README.html), and [USB](https://docs.zephyrproject.org/3.5.0/samples/bluetooth/hci_usb/README.html). See [Zephyr's Bluetooth Stack Architecture documentation](https://docs.zephyrproject.org/3.5.0/connectivity/bluetooth/bluetooth-arch.html) for more details. The following documentation shows how to build and flash ZMK for boards that use a dual-chip configuration. diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index d76474fd6fb..702547cc86c 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -28,8 +28,8 @@ Before developing new behaviors, developers should have a working knowledge of t The following resources are provided for those seeking further understanding: - [Embedded Linux Wiki - Device Tree Usage](https://elinux.org/Device_Tree_Usage) -- [Zephyr Devicetree API](https://docs.zephyrproject.org/latest/build/dts/api/api.html) -- [Zephyr Device Driver Model](https://docs.zephyrproject.org/latest/kernel/drivers/index.html) +- [Zephyr Devicetree API](https://docs.zephyrproject.org/3.5.0/build/dts/api/api.html) +- [Zephyr Device Driver Model](https://docs.zephyrproject.org/3.5.0/kernel/drivers/index.html) ::: @@ -116,7 +116,7 @@ These are additional variables required to configure a particular instance of a - `phandles` :::info -For more information on additional `properties`, refer to [Zephyr's documentation on Devicetree bindings](https://docs.zephyrproject.org/latest/build/dts/bindings.html#properties). +For more information on additional `properties`, refer to [Zephyr's documentation on Devicetree bindings](https://docs.zephyrproject.org/3.5.0/build/dts/bindings.html#properties). ::: ### Creating the driver (`.c`) @@ -124,8 +124,8 @@ For more information on additional `properties`, refer to [Zephyr's documentatio :::info Developing drivers for behaviors in ZMK makes extensive use of the Zephyr Devicetree API and Device Driver Model. Links to the Zephyr Project Documentation for both of these concepts can be found below: -- [Zephyr Devicetree API](https://docs.zephyrproject.org/latest/build/dts/api/api.html) -- [Zephyr Device Driver Model](https://docs.zephyrproject.org/latest/kernel/drivers/index.html) +- [Zephyr Devicetree API](https://docs.zephyrproject.org/3.5.0/build/dts/api/api.html) +- [Zephyr Device Driver Model](https://docs.zephyrproject.org/3.5.0/kernel/drivers/index.html) ::: @@ -192,7 +192,7 @@ The dependencies required for any ZMK behavior are: - `device.h`: [Zephyr Device APIs](https://docs.zephyrproject.org/apidoc/latest/group__device__model.html) - `drivers/behavior.h`: ZMK Behavior Functions (e.g. [`locality`](#api-structure), `behavior_keymap_binding_pressed`, `behavior_keymap_binding_released`, `behavior_sensor_keymap_binding_triggered`) -- `logging/log.h`: [Zephyr Logging APIs](https://docs.zephyrproject.org/latest/services/logging/index.html) (for more information on USB Logging in ZMK, see [USB Logging](usb-logging.mdx)). +- `logging/log.h`: [Zephyr Logging APIs](https://docs.zephyrproject.org/3.5.0/services/logging/index.html) (for more information on USB Logging in ZMK, see [USB Logging](usb-logging.mdx)). - `zmk/behavior.h`: ZMK Behavior Information (e.g. parameters, position and timestamp of events) - `return` values: - `ZMK_BEHAVIOR_OPAQUE`: Used to terminate `on__binding_pressed` and `on__binding_released` functions that accept `(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event)` as parameters @@ -249,7 +249,7 @@ Listeners, defined by the `ZMK_LISTENER(mod, cb)` function, take in a listener n `BEHAVIOR_DT_INST_DEFINE` is a special ZMK macro. It forwards all the parameters to Zephyr's `DEVICE_DT_INST_DEFINE` macro to define the driver instance, then it adds the driver to a list of ZMK behaviors so they can be found by `zmk_behavior_get_binding()`. :::info -For more information on this function, refer to [Zephyr's documentation on the Device Driver Model](https://docs.zephyrproject.org/latest/kernel/drivers/index.html#c.DEVICE_DT_INST_DEFINE). +For more information on this function, refer to [Zephyr's documentation on the Device Driver Model](https://docs.zephyrproject.org/3.5.0/kernel/drivers/index.html#c.DEVICE_DT_INST_DEFINE). ::: The example `BEHAVIOR_DT_INST_DEFINE` call can be left as is with the first parameter, the instance number, equal to `0` for behaviors that only require a single instance (e.g. external power, backlighting, accessing layers). For behaviors that can have multiple instances (e.g. hold-taps, tap-dances, sticky-keys), `BEHAVIOR_DT_INST_DEFINE` can be placed inside a `#define` statement, usually formatted as `#define _INST(n)`, that sets up any [data pointers](#data-pointers-optional) and/or [configuration pointers](#configuration-pointers-optional) that are unique to each instance. @@ -312,7 +312,7 @@ The fourth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if ins ##### Configuration Pointers (Optional) -The configuration `struct` stores the properties declared from the behavior's `.yaml` for **each new instance** of the behavior. As seen in the `#define KP_INST(n)` of the hold-tap example, the configuration `struct`, `behavior__config_##n`, for each instance number, `n`, can be initialized using the [Zephyr Devicetree Instance-based APIs](https://docs.zephyrproject.org/latest/build/dts/api/api.html#instance-based-apis), which extract the values from the `properties` of each instance of the [devicetree binding](#creating-the-devicetree-binding-yaml) from a user's keymap or [predefined use-case `.dtsi` files](#defining-common-use-cases-for-the-behavior-dtsi-optional) stored in `app/dts/behaviors/`. We illustrate this further by comparing the [`#define KP_INST(n)` from the hold-tap driver](#behavior_dt_inst_define) and the [`properties` of the hold-tap devicetree binding.](#creating-the-devicetree-binding-yaml) +The configuration `struct` stores the properties declared from the behavior's `.yaml` for **each new instance** of the behavior. As seen in the `#define KP_INST(n)` of the hold-tap example, the configuration `struct`, `behavior__config_##n`, for each instance number, `n`, can be initialized using the [Zephyr Devicetree Instance-based APIs](https://docs.zephyrproject.org/3.5.0/build/dts/api/api.html#instance-based-apis), which extract the values from the `properties` of each instance of the [devicetree binding](#creating-the-devicetree-binding-yaml) from a user's keymap or [predefined use-case `.dtsi` files](#defining-common-use-cases-for-the-behavior-dtsi-optional) stored in `app/dts/behaviors/`. We illustrate this further by comparing the [`#define KP_INST(n)` from the hold-tap driver](#behavior_dt_inst_define) and the [`properties` of the hold-tap devicetree binding.](#creating-the-devicetree-binding-yaml) The fifth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific configurations are not required. diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 2f52839b3a5..96d83ce0978 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -15,7 +15,7 @@ This guide will walk through the steps necessary to add ZMK support for a keyboa The high level steps are: -- From a template, create a new [Zephyr module](https://docs.zephyrproject.org/3.2.0/develop/modules.html) housed in a git repository containing one or more custom shields. +- From a template, create a new [Zephyr module](https://docs.zephyrproject.org/3.5.0/develop/modules.html) housed in a git repository containing one or more custom shields. - Create a new shield directory. - Add the base Kconfig files. - Add the shield overlay file to define the KSCAN driver for detecting key press/release. @@ -25,7 +25,7 @@ The high level steps are: - Update the `build.yaml` file from the repository template to have some sample builds of the firmware to test. - Add support for features such as encoders, OLED displays, or RGB underglow. -It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/3.2.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. +It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/3.5.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. :::note ZMK support for split keyboards requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. diff --git a/docs/docs/development/setup.mdx b/docs/docs/development/setup.mdx index 63f1bff8bd5..bc275804cf7 100644 --- a/docs/docs/development/setup.mdx +++ b/docs/docs/development/setup.mdx @@ -46,22 +46,22 @@ The docker container already includes `west`. Skip past the following section to -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions under these sections: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: -- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) -- [Install Zephyr SDK](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-zephyr-sdk) +- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) +- [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk) Return to this guide once you are finished with each section. -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions under these sections: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: -- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) -- [Install Zephyr SDK](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-zephyr-sdk) +- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) +- [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk) Return to this guide once you are finished with each section. @@ -70,11 +70,11 @@ Return to this guide once you are finished with each section. -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions under these sections: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: -- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) -- [Install Zephyr SDK](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-zephyr-sdk) +- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) +- [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk) Return to this guide once you are finished with each section. @@ -83,16 +83,16 @@ Return to this guide once you are finished with each section. #### Install Base Dependencies -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html) and follow the instructions for Ubuntu under these sections: +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions for Ubuntu under these sections: -- [Select and Update OS](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/index.html#install-dependencies) +- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) Return to this guide once you are finished with each section. #### Install Cross-Compile Toolchain -Because Raspberry OS runs on the same architecture (but different ABI) as ARM keyboard MCUs, the operating system's installed [cross compilers](https://docs.zephyrproject.org/3.2.0/develop/toolchains/other_x_compilers.html) can be used to target the different ABI. Building for non-ARM MCUs has not been tested. +Because Raspberry OS runs on the same architecture (but different ABI) as ARM keyboard MCUs, the operating system's installed [cross compilers](https://docs.zephyrproject.org/3.5.0/develop/toolchains/other_x_compilers.html) can be used to target the different ABI. Building for non-ARM MCUs has not been tested. First, the cross compiler should be installed: @@ -100,7 +100,7 @@ First, the cross compiler should be installed: sudo apt install gcc-arm-none-eabi ``` -Next, we'll configure Zephyr with some [environment variables](https://docs.zephyrproject.org/3.2.0/develop/env_vars.html#env-vars) needed to find the cross compiler. Create a file named `~/.zephyrrc` if it doesn't exist, and add these lines to it: +Next, we'll configure Zephyr with some [environment variables](https://docs.zephyrproject.org/3.5.0/develop/env_vars.html#env-vars) needed to find the cross compiler. Create a file named `~/.zephyrrc` if it doesn't exist, and add these lines to it: ```sh export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile @@ -110,16 +110,16 @@ export CROSS_COMPILE=/usr/bin/arm-none-eabi- -Follow Zephyr's [Install Linux Host Dependencies](https://docs.zephyrproject.org/3.2.0/develop/getting_started/installation_linux.html) documentation for Fedora. +Follow Zephyr's [Install Linux Host Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/installation_linux.html) documentation for Fedora. ### Install West -`west` is the [Zephyr® Project's meta-tool](https://docs.zephyrproject.org/3.2.0/develop/west/index.html) used to configure and build Zephyr OS applications. +`west` is the [Zephyr® Project's meta-tool](https://docs.zephyrproject.org/3.5.0/develop/west/index.html) used to configure and build Zephyr OS applications. -West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/3.2.0/develop/west/install.html) are summarized here: +West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/3.5.0/develop/west/install.html) are summarized here: Date: Thu, 8 Feb 2024 18:44:05 +0000 Subject: [PATCH 0978/1130] fix(pm): Tweaks for deep sleep/PM. * Restore enabling of PM_DEVICE, make ZMK_SLEEP work with the ZMK Uno shield on nrf52840dk_nrf52840 board. --- app/Kconfig | 3 +++ app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 14456b5fe8c..8155efd0ae5 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -399,6 +399,9 @@ config ZMK_SLEEP if ZMK_SLEEP +config PM_DEVICE + default y + config ZMK_IDLE_SLEEP_TIMEOUT int "Milliseconds of inactivity before entering deep sleep" default 900000 diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay index 5ac7af7c532..05c7ed9d8e9 100644 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -20,5 +20,6 @@ encoder: &qdec0 { led-pre = <0>; steps = <80>; pinctrl-0 = <&qdec_default>; - pinctrl-names = "default"; + pinctrl-1 = <&qdec_default>; + pinctrl-names = "default", "sleep"; }; From 50a303b8bb86b3f6ef1853c0c7ef841e043eb615 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 9 Feb 2024 18:50:06 +0000 Subject: [PATCH 0979/1130] fix(pm): Restore sleep suspension of devices. * After the move to `sys_poweroff`, restore the behavior of suspending devices before entering sleep state. --- app/CMakeLists.txt | 4 ++ app/include/linker/zmk-pm-devices.ld | 9 ++++ app/src/activity.c | 66 ++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 app/include/linker/zmk-pm-devices.ld diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 314714844f4..6ef00311027 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -8,6 +8,10 @@ set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/modul find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) +if(CONFIG_ZMK_SLEEP) + zephyr_linker_sources(SECTIONS include/linker/zmk-pm-devices.ld) +endif() + zephyr_linker_sources(SECTIONS include/linker/zmk-behaviors.ld) zephyr_linker_sources(RODATA include/linker/zmk-events.ld) diff --git a/app/include/linker/zmk-pm-devices.ld b/app/include/linker/zmk-pm-devices.ld new file mode 100644 index 00000000000..93ec5025ded --- /dev/null +++ b/app/include/linker/zmk-pm-devices.ld @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +ITERABLE_SECTION_RAM(zmk_pm_device_slots, 4) diff --git a/app/src/activity.c b/app/src/activity.c index 11409151680..8f421f85d02 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include @@ -24,6 +26,63 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #endif +// Reimplement some of the device work from Zephyr PM to work with the new `sys_poweroff` API. +// TODO: Tweak this to smarter runtime PM of subsystems on sleep. + +#ifdef CONFIG_PM_DEVICE +TYPE_SECTION_START_EXTERN(const struct device *, zmk_pm_device_slots); + +#if !defined(CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE) +/* Number of devices successfully suspended. */ +static size_t zmk_num_susp; + +static int zmk_pm_suspend_devices(void) { + const struct device *devs; + size_t devc; + + devc = z_device_get_all_static(&devs); + + zmk_num_susp = 0; + + for (const struct device *dev = devs + devc - 1; dev >= devs; dev--) { + int ret; + + /* + * Ignore uninitialized devices, busy devices, wake up sources, and + * devices with runtime PM enabled. + */ + if (!device_is_ready(dev) || pm_device_is_busy(dev) || pm_device_state_is_locked(dev) || + pm_device_wakeup_is_enabled(dev) || pm_device_runtime_is_enabled(dev)) { + continue; + } + + ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND); + /* ignore devices not supporting or already at the given state */ + if ((ret == -ENOSYS) || (ret == -ENOTSUP) || (ret == -EALREADY)) { + continue; + } else if (ret < 0) { + LOG_ERR("Device %s did not enter %s state (%d)", dev->name, + pm_device_state_str(PM_DEVICE_STATE_SUSPENDED), ret); + return ret; + } + + TYPE_SECTION_START(zmk_pm_device_slots)[zmk_num_susp] = dev; + zmk_num_susp++; + } + + return 0; +} + +static void zmk_pm_resume_devices(void) { + for (int i = (zmk_num_susp - 1); i >= 0; i--) { + pm_device_action_run(TYPE_SECTION_START(zmk_pm_device_slots)[i], PM_DEVICE_ACTION_RESUME); + } + + zmk_num_susp = 0; +} +#endif /* !CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE */ +#endif /* CONFIG_PM_DEVICE */ + bool is_usb_power_present(void) { #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) return zmk_usb_is_powered(); @@ -70,6 +129,13 @@ void activity_work_handler(struct k_work *work) { if (inactive_time > MAX_SLEEP_MS && !is_usb_power_present()) { // Put devices in suspend power mode before sleeping set_state(ZMK_ACTIVITY_SLEEP); + + if (zmk_pm_suspend_devices() < 0) { + LOG_ERR("Failed to suspend all the devices"); + zmk_pm_resume_devices(); + return; + } + sys_poweroff(); } else #endif /* IS_ENABLED(CONFIG_ZMK_SLEEP) */ From f72f415c5bd23a89d7e50b1a8e22ede70c0db9e3 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 9 Feb 2024 15:10:35 -0500 Subject: [PATCH 0980/1130] fix(docs): More Zephyr docs link updates. Co-authored-by: Cem Aksoylar --- docs/docs/config/backlight.md | 2 +- docs/docs/config/battery.md | 4 ++-- docs/docs/config/index.md | 2 +- docs/docs/config/kscan.md | 2 +- docs/docs/development/boards-shields-keymaps.md | 8 ++++---- docs/docs/development/build-flash.mdx | 4 ++-- docs/docs/development/new-behavior.mdx | 2 +- docs/docs/development/new-shield.mdx | 2 +- docs/docs/faq.md | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/docs/config/backlight.md b/docs/docs/config/backlight.md index 3d554c5791e..eeba3a8aa35 100644 --- a/docs/docs/config/backlight.md +++ b/docs/docs/config/backlight.md @@ -26,7 +26,7 @@ The `*_START` settings only determine the initial backlight state. Any changes y ## Devicetree -Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/build/dts/intro.html#aliases-and-chosen-nodes) +Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) | Property | Type | Description | | --------------- | ---- | -------------------------------------------- | diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index cc725e432f8..68de8fb8256 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -30,7 +30,7 @@ On macOS the BLE battery reporting packets can cause the computer to wakeup from ### Devicetree -Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) +Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) | Property | Type | Description | | ------------- | ---- | --------------------------------------------- | @@ -44,7 +44,7 @@ Driver for reading the voltage of a battery using an ADC connected to a voltage Applies to: `compatible = "zmk,battery-voltage-divider"` -See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/adc/voltage-divider.html). +See [Zephyr's voltage divider documentation](https://docs.zephyrproject.org/3.5.0/build/dts/api/bindings/iio/afe/voltage-divider.html). ## nRF VDDH Battery Sensor diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index c8da6d7c385..d542d435f1e 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -149,7 +149,7 @@ The part before the colon, `kscan0`, is a label. This is optional, and it provid The `compatible` property indicates what type of node it is. Search this documentation for the text inside the quotes to see which properties the node supports. You can also search ZMK for a file whose name is the value of the `compatible` property with a `.yaml` file extension. -To set a property, see below for examples for common property types, or see [Zephyr's Devicetree documentation](https://docs.zephyrproject.org/3.5.0/build/dts/intro.html#writing-property-values) for more details on the syntax for properties. +To set a property, see below for examples for common property types, or see [Zephyr's Devicetree documentation](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#writing-property-values) for more details on the syntax for properties. To change a property for an existing node, first find the node you want to change and find its label. Next, outside of any other node, write an ampersand (`&`) followed by the node's label, an opening curly brace (`{`), one or more new property values, a closing curly brace (`}`), and a semicolon (`;`). diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 15457cb062b..b49529d9965 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -25,7 +25,7 @@ If the debounce press/release values are set to any value other than `-1`, they ### Devicetree -Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) +Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) | Property | Type | Description | | ---------------------- | ---- | ------------------------------------------------------------- | diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index d449a1c12be..e936f992b06 100644 --- a/docs/docs/development/boards-shields-keymaps.md +++ b/docs/docs/development/boards-shields-keymaps.md @@ -27,8 +27,8 @@ in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck - A `${board_name}_defconfig` file that forces specific Kconfig settings that are specific to this hardware configuration. Mostly this is SoC settings around the specific hardware configuration. - `${board_name}.dts` which contains all the devicetree definitions, including: - An `#include` line that pulls in the specific microprocessor that is used, e.g. `#include `. - - A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) - - (Optional) A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) + - (Optional) A [chosen](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `board.cmake` file with CMake directives for how to flash to the device. - A `${board_name}.keymap` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. @@ -47,6 +47,6 @@ in the `app/boards/shields/${board_name}` directory, e.g. `app/boards/shields/cl - A `Kconfig.shield` that defines the toplevel Kconfig value for the shield, which uses a supplied utility to function to default the value based on the shield list, e.g. `def_bool $(shields_list_contains,clueboard_california)`. - A `Kconfig.defconfig` file to set default values for things like `ZMK_KEYBOARD_NAME` - A `${shield_name}.overlay` file, which is a devicetree overlay file, that includes: - - A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/3.5.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. - - (Optional) A [chosen](https://docs.zephyrproject.org/3.5.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. + - A [chosen](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/3.5.0/hardware/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro` aliases can be used to reference the standard digital pins of a Pro Micro for shields. + - (Optional) A [chosen](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) node named `zmk,matrix-transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. - A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. diff --git a/docs/docs/development/build-flash.mdx b/docs/docs/development/build-flash.mdx index c0c7563a4df..2cbcf5b82ef 100644 --- a/docs/docs/development/build-flash.mdx +++ b/docs/docs/development/build-flash.mdx @@ -16,7 +16,7 @@ an onboard MCU, or one that uses an MCU board addon. ### Keyboard (Shield) + MCU Board -ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/3.5.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/3.5.0/guides/porting/board_porting.html) +ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/3.5.0/hardware/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/3.5.0/hardware/porting/board_porting.html) Given the following: @@ -32,7 +32,7 @@ west build -b proton_c -- -DSHIELD=kyria_left ### Keyboard With Onboard MCU -Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/3.5.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/3.5.0/hardware/porting/board_porting.html) as far as Zephyr™ is concerned. Given the following: diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index 702547cc86c..cabc417f8d3 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -116,7 +116,7 @@ These are additional variables required to configure a particular instance of a - `phandles` :::info -For more information on additional `properties`, refer to [Zephyr's documentation on Devicetree bindings](https://docs.zephyrproject.org/3.5.0/build/dts/bindings.html#properties). +For more information on additional `properties`, refer to [Zephyr's documentation on Devicetree bindings](https://docs.zephyrproject.org/3.5.0/build/dts/bindings-syntax.html#properties). ::: ### Creating the driver (`.c`) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 96d83ce0978..0dcface373b 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -25,7 +25,7 @@ The high level steps are: - Update the `build.yaml` file from the repository template to have some sample builds of the firmware to test. - Add support for features such as encoders, OLED displays, or RGB underglow. -It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/3.5.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. +It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/3.5.0/hardware/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. :::note ZMK support for split keyboards requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 21e5e7da5d4..2100b9726d5 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -9,7 +9,7 @@ As a best-in-class RTOS, Zephyr™ brings many [benefits](https://www.zephyrproj - A _single_ platform [supporting](https://docs.zephyrproject.org/3.5.0/boards/index.html) many architectures, processors and boards. - Optimization for low-powered, small memory footprint devices. -- Powerful hardware abstraction and configuration using [DeviceTree](https://docs.zephyrproject.org/3.5.0/guides/dts/index.html) and [Kconfig](https://docs.zephyrproject.org/3.5.0/build/kconfig/index.html). +- Powerful hardware abstraction and configuration using [DeviceTree](https://docs.zephyrproject.org/3.5.0/build/dts/index.html) and [Kconfig](https://docs.zephyrproject.org/3.5.0/build/kconfig/index.html). - A BLE stack that periodically obtains [qualification](https://docs.zephyrproject.org/3.5.0/connectivity/bluetooth/bluetooth-qual.html) listings, making it easier for final products to obtain qualification from the Bluetooth® SIG. - Multi-processor support, which is critical for power efficiency in upcoming MCUs. - Permissive licensing with its Apache 2.0 open source [license](https://www.apache.org/licenses/LICENSE-2.0). From cdcf4ebfb6d53b6230a65a85f060b6343db3b40b Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sat, 10 Feb 2024 11:01:24 -0500 Subject: [PATCH 0981/1130] feat(boards): allow use of blackpill_f401cc --- .../blackpill_f401cc/blackpill_f401cc.zmk.yml | 9 ++++ app/boards/blackpill_f401cc.conf | 6 +++ app/boards/blackpill_f401cc.overlay | 50 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 app/boards/arm/blackpill_f401cc/blackpill_f401cc.zmk.yml create mode 100644 app/boards/blackpill_f401cc.conf create mode 100644 app/boards/blackpill_f401cc.overlay diff --git a/app/boards/arm/blackpill_f401cc/blackpill_f401cc.zmk.yml b/app/boards/arm/blackpill_f401cc/blackpill_f401cc.zmk.yml new file mode 100644 index 00000000000..329b7371d54 --- /dev/null +++ b/app/boards/arm/blackpill_f401cc/blackpill_f401cc.zmk.yml @@ -0,0 +1,9 @@ +file_format: "1" +id: blackpill_f401cc +name: BlackPill F401CC +type: board +arch: arm +outputs: + - usb +url: https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1 +exposes: [blackpill] diff --git a/app/boards/blackpill_f401cc.conf b/app/boards/blackpill_f401cc.conf new file mode 100644 index 00000000000..c4252425b2d --- /dev/null +++ b/app/boards/blackpill_f401cc.conf @@ -0,0 +1,6 @@ +CONFIG_CONSOLE=n +CONFIG_SERIAL=n +CONFIG_UART_CONSOLE=n +CONFIG_UART_INTERRUPT_DRIVEN=n +CONFIG_ZMK_USB=y +CONFIG_ZMK_KSCAN_MATRIX_POLLING=y diff --git a/app/boards/blackpill_f401cc.overlay b/app/boards/blackpill_f401cc.overlay new file mode 100644 index 00000000000..6ed4c3cf844 --- /dev/null +++ b/app/boards/blackpill_f401cc.overlay @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + blackpill: connector { + compatible = "blackpill"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <2 0 &gpioc 13 0> /* PC13 */ + , <3 0 &gpioc 14 0> /* PC14 */ + , <4 0 &gpioc 15 0> /* PC15 */ + , <10 0 &gpioa 0 0> /* PA0 */ + , <11 0 &gpioa 1 0> /* PA1 */ + , <12 0 &gpioa 2 0> /* PA2 */ + , <13 0 &gpioa 3 0> /* PA3 */ + , <14 0 &gpioa 4 0> /* PA4 */ + , <15 0 &gpioa 5 0> /* PA5 */ + , <16 0 &gpioa 6 0> /* PA6 */ + , <17 0 &gpioa 7 0> /* PA7 */ + , <18 0 &gpiob 0 0> /* PB0 */ + , <19 0 &gpiob 1 0> /* PB1 */ + , <20 0 &gpiob 2 0> /* PB2 */ + , <21 0 &gpiob 10 0> /* PB10 */ + , <25 0 &gpiob 12 0> /* PB12 */ + , <26 0 &gpiob 13 0> /* PB13 */ + , <27 0 &gpiob 14 0> /* PB14 */ + , <28 0 &gpiob 15 0> /* PB15 */ + , <29 0 &gpioa 8 0> /* PA8 */ + , <30 0 &gpioa 9 0> /* PA9 */ + , <31 0 &gpioa 10 0> /* PA10 */ + , <38 0 &gpioa 15 0> /* PA15 */ + , <39 0 &gpiob 3 0> /* PB3 */ + , <40 0 &gpiob 4 0> /* PB4 */ + , <41 0 &gpiob 5 0> /* PB5 */ + , <42 0 &gpiob 6 0> /* PB6 */ + , <43 0 &gpiob 7 0> /* PB7 */ + , <45 0 &gpiob 8 0> /* PB8 */ + , <46 0 &gpiob 9 0> /* PB9 */ + ; + }; +}; + +blackpill_i2c: &i2c1 {}; +blackpill_spi: &spi1 {}; +blackpill_serial: &usart1 {}; From 40adb3858df5509bd6c67b0477e8832fe769a507 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sat, 10 Feb 2024 18:41:03 -0500 Subject: [PATCH 0982/1130] refactor(boards): remove superfluous conf settings --- app/boards/blackpill_f401ce.conf | 1 - app/boards/blackpill_f411ce.conf | 1 - 2 files changed, 2 deletions(-) diff --git a/app/boards/blackpill_f401ce.conf b/app/boards/blackpill_f401ce.conf index 07e304cfa5c..c4252425b2d 100644 --- a/app/boards/blackpill_f401ce.conf +++ b/app/boards/blackpill_f401ce.conf @@ -3,5 +3,4 @@ CONFIG_SERIAL=n CONFIG_UART_CONSOLE=n CONFIG_UART_INTERRUPT_DRIVEN=n CONFIG_ZMK_USB=y -CONFIG_ZMK_BLE=n CONFIG_ZMK_KSCAN_MATRIX_POLLING=y diff --git a/app/boards/blackpill_f411ce.conf b/app/boards/blackpill_f411ce.conf index 07e304cfa5c..c4252425b2d 100644 --- a/app/boards/blackpill_f411ce.conf +++ b/app/boards/blackpill_f411ce.conf @@ -3,5 +3,4 @@ CONFIG_SERIAL=n CONFIG_UART_CONSOLE=n CONFIG_UART_INTERRUPT_DRIVEN=n CONFIG_ZMK_USB=y -CONFIG_ZMK_BLE=n CONFIG_ZMK_KSCAN_MATRIX_POLLING=y From c7fb418e88bc3d5e82f04976c06a1aeeb9b5c736 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 14 Feb 2024 19:47:54 +0000 Subject: [PATCH 0983/1130] fix(build): Used a fixed temp dir for caching. * Improve GHA caching by using a fixed temporary directory when using one. --- .github/workflows/build-user-config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index af57520bcd2..d8ea057e56d 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -68,7 +68,8 @@ jobs: run: | if [ -e zephyr/module.yml ]; then export zmk_load_arg=" -DZMK_EXTRA_MODULES='${GITHUB_WORKSPACE}'" - export new_tmp_dir=$(mktemp -d) + new_tmp_dir="${TMPDIR:-/tmp}/zmk-config" + mkdir -p "${new_tmp_dir}" echo "base_dir=${new_tmp_dir}" >> $GITHUB_ENV else echo "base_dir=${GITHUB_WORKSPACE}" >> $GITHUB_ENV From 0f49fa9ae49b3373ea701c3ecd9da3e149ca8d64 Mon Sep 17 00:00:00 2001 From: ctranstrum Date: Wed, 14 Feb 2024 18:29:19 -0700 Subject: [PATCH 0984/1130] fix(behavior): Proper init priority for ext_power. --- app/src/behaviors/behavior_ext_power.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index a51a9f6dbd6..b2aff3c8670 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -75,6 +75,6 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { }; BEHAVIOR_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, POST_KERNEL, - CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_ext_power_driver_api); #endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From 604af2ebd318a2b8865f98db55b411a8e07f24c2 Mon Sep 17 00:00:00 2001 From: Dennis <47061464+dennisorlando@users.noreply.github.com> Date: Sun, 18 Feb 2024 06:51:09 +0100 Subject: [PATCH 0985/1130] feat(docs): Add pointers for peripheral battery monitoring (#2177) Co-authored-by: Cem Aksoylar Fixes #2166 --- docs/docs/config/battery.md | 11 +++++++++++ docs/docs/features/battery.md | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 68de8fb8256..463dc087b6e 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -28,6 +28,17 @@ On macOS the BLE battery reporting packets can cause the computer to wakeup from ::: +### Peripheral battery monitoring + +You can [configure ZMK to allow support for peripheral battery monitoring over BLE](system.md#split-keyboards) (e.g. when having a split keyboard with two independent and wirelessly connected sides). +If you want to report the battery levels of both sides of a split keyboard, you should have both `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY` and `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING` set to `y`. + +:::note[Displaying both battery levels on your host] + +Host support for multiple battery levels is undefined. It appears that in most of the cases only the main battery is being reported. In order to correctly display all the battery values, you probably need a special application or script. + +::: + ### Devicetree Applies to: [`/chosen` node](https://docs.zephyrproject.org/3.5.0/build/dts/intro-syntax-structure.html#aliases-and-chosen-nodes) diff --git a/docs/docs/features/battery.md b/docs/docs/features/battery.md index 4bfeb129994..29142eedc01 100644 --- a/docs/docs/features/battery.md +++ b/docs/docs/features/battery.md @@ -5,7 +5,7 @@ sidebar_label: Battery Level If your keyboard has a battery sensor, ZMK will report its battery level to the connected bluetooth host and show it on the keyboard's display, if it has one. -For split keyboards, only the battery level of the central (usually left) side is reported over bluetooth. +For split keyboards, only the battery level of the central (usually left) side is reported over bluetooth by default. ZMK can be [configured to report the battery levels for peripherals](../config/battery.md#peripheral-battery-monitoring), but not many host systems will display this information without additional configuration or the use of third party utilities. :::note From fda6a5f18534ac7c480fdec5854f063432733f69 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 17 Feb 2024 21:32:24 -0800 Subject: [PATCH 0986/1130] fix(boards): Tweaks for Ferris rev0.2 for Zephyr. * Enable missing clock and set up USB pinctrl. --- app/boards/arm/ferris/ferris_rev02.dts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index eb2194209da..4fecd280eec 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -112,6 +112,9 @@ &usb { status = "okay"; + + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; cdc_acm_uart: cdc_acm_uart { compatible = "zephyr,cdc-acm-uart"; }; @@ -121,6 +124,10 @@ status = "okay"; }; +&clk_hsi48 { + status = "okay"; +}; + &pll { prediv = <1>; mul = <6>; From a9ae6796a088730d7377f660e78af17f11bb87c7 Mon Sep 17 00:00:00 2001 From: zhiayang <500236+zhiayang@users.noreply.github.com> Date: Mon, 19 Feb 2024 19:15:19 -0500 Subject: [PATCH 0987/1130] fix(display): Proper initial display of battery status * fix initial display of battery status on displays, and also fix a null deref --- app/boards/arm/corneish_zen/widgets/battery_status.c | 4 +++- app/boards/shields/nice_view/widgets/status.c | 4 +++- app/src/display/widgets/battery_status.c | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/boards/arm/corneish_zen/widgets/battery_status.c b/app/boards/arm/corneish_zen/widgets/battery_status.c index 011319c408f..39b811b53f3 100644 --- a/app/boards/arm/corneish_zen/widgets/battery_status.c +++ b/app/boards/arm/corneish_zen/widgets/battery_status.c @@ -66,8 +66,10 @@ void battery_status_update_cb(struct battery_status_state state) { } static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh); + return (struct battery_status_state) { - .level = zmk_battery_state_of_charge(), + .level = (ev != NULL) ? ev->state_of_charge : zmk_battery_state_of_charge(), #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ diff --git a/app/boards/shields/nice_view/widgets/status.c b/app/boards/shields/nice_view/widgets/status.c index 93139eca0a5..061b7127cee 100644 --- a/app/boards/shields/nice_view/widgets/status.c +++ b/app/boards/shields/nice_view/widgets/status.c @@ -210,8 +210,10 @@ static void battery_status_update_cb(struct battery_status_state state) { } static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { + const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh); + return (struct battery_status_state) { - .level = zmk_battery_state_of_charge(), + .level = (ev != NULL) ? ev->state_of_charge : zmk_battery_state_of_charge(), #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ diff --git a/app/src/display/widgets/battery_status.c b/app/src/display/widgets/battery_status.c index 06f55f3f405..bec6964ba94 100644 --- a/app/src/display/widgets/battery_status.c +++ b/app/src/display/widgets/battery_status.c @@ -9,6 +9,7 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include #include #include #include @@ -63,8 +64,9 @@ void battery_status_update_cb(struct battery_status_state state) { static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) { const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh); + return (struct battery_status_state) { - .level = ev->state_of_charge, + .level = (ev != NULL) ? ev->state_of_charge : zmk_battery_state_of_charge(), #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) .usb_present = zmk_usb_is_powered(), #endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */ From c082f8d80280a41fd4d023cd35d71309af167119 Mon Sep 17 00:00:00 2001 From: ton-im Date: Tue, 20 Feb 2024 08:32:12 +0800 Subject: [PATCH 0988/1130] fix(boards): Add ext power init delay for nrfMicro * Address issues with OLED init occurring before display is powered. --- app/boards/arm/nrfmicro/nrfmicro_11.dts | 1 + app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 1 + app/boards/arm/nrfmicro/nrfmicro_13.dts | 1 + app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 1 + 4 files changed, 4 insertions(+) diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index c0c02ee9e34..652df1011a6 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -31,6 +31,7 @@ EXT_POWER { compatible = "zmk,ext-power-generic"; control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + init-delay-ms = <50>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index df3b224bc49..5095d64865d 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -31,6 +31,7 @@ EXT_POWER { compatible = "zmk,ext-power-generic"; control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + init-delay-ms = <50>; }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index f5ae81c9545..7a6a5d4d952 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -32,6 +32,7 @@ EXT_POWER { compatible = "zmk,ext-power-generic"; control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + init-delay-ms = <50>; }; vbatt: vbatt { diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index d6c88692d95..ff2e027fcb9 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -32,6 +32,7 @@ EXT_POWER { compatible = "zmk,ext-power-generic"; control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + init-delay-ms = <50>; }; vbatt: vbatt { From ccf038017993dd2e7f00bdd355e28c5009621dd5 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:52:23 -0500 Subject: [PATCH 0989/1130] refactor: remove redundant Kconfig defaults bool symbols implicitly default to n. --- app/Kconfig | 5 ----- app/Kconfig.behaviors | 1 - app/src/display/Kconfig | 1 - 3 files changed, 7 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 8155efd0ae5..bb6997a43ae 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -177,7 +177,6 @@ config ZMK_BLE_EXPERIMENTAL_FEATURES config ZMK_BLE_PASSKEY_ENTRY bool "Require passkey entry on the keyboard to complete pairing" - default n select RING_BUFFER config BT_SMP_ALLOW_UNAUTH_OVERWRITE @@ -216,7 +215,6 @@ config ZMK_BLE_MOUSE_REPORT_QUEUE_SIZE config ZMK_BLE_CLEAR_BONDS_ON_START bool "Configuration that clears all bond information from the keyboard on startup." - default n # HID GATT notifications sent this way are *not* picked up by Linux, and possibly others. config BT_GATT_NOTIFY_MULTIPLE @@ -373,7 +371,6 @@ menu "Mouse Options" config ZMK_MOUSE bool "Enable ZMK mouse emulation" - default n #Mouse Options endmenu @@ -382,7 +379,6 @@ menu "Power Management" config ZMK_BATTERY_REPORTING bool "Battery level detection/reporting" - default n select SENSOR select ZMK_LOW_PRIORITY_WORK_QUEUE imply BT_BAS if ZMK_BLE @@ -616,7 +612,6 @@ config FPU config ZMK_WPM bool "Calculate WPM" - default n config ZMK_KEYMAP_SENSORS bool "Enable Keymap Sensors support" diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 11bc8c5900f..7a1e44f6db5 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -14,7 +14,6 @@ config ZMK_BEHAVIOR_MOUSE_KEY_PRESS config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool - default n config ZMK_BEHAVIOR_SENSOR_ROTATE bool diff --git a/app/src/display/Kconfig b/app/src/display/Kconfig index 356b4760c1b..1cde0fe4e29 100644 --- a/app/src/display/Kconfig +++ b/app/src/display/Kconfig @@ -3,7 +3,6 @@ menuconfig ZMK_DISPLAY bool "Enable ZMK Display" - default n select DISPLAY select LVGL select LV_CONF_MINIMAL From b44ec381f69233d1c2d32c6501189e4e339ff876 Mon Sep 17 00:00:00 2001 From: Seth Milliken Date: Fri, 9 Feb 2024 01:02:49 -0800 Subject: [PATCH 0990/1130] feat(boards): add encoder support to planck --- app/boards/arm/planck/planck_rev6.dts | 14 ++++++++++++++ app/boards/arm/planck/planck_rev6.keymap | 6 ++++++ app/boards/arm/planck/planck_rev6.zmk.yml | 1 + app/boards/arm/planck/planck_rev6_defconfig | 4 ++++ 4 files changed, 25 insertions(+) diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index b6f6fca431d..5b8e16b2efe 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -44,6 +44,20 @@ ; }; + encoder: encoder { + compatible = "alps,ec11"; + a-gpios = <&gpiob 12 GPIO_PULL_UP>; + b-gpios = <&gpiob 13 GPIO_PULL_UP>; + steps = <80>; + status = "disabled"; + }; + + sensors: sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&encoder>; + triggers-per-rotation = <20>; + }; + layout_grid_transform: keymap_transform_0 { compatible = "zmk,matrix-transform"; diff --git a/app/boards/arm/planck/planck_rev6.keymap b/app/boards/arm/planck/planck_rev6.keymap index 65138057283..1386eadd18b 100644 --- a/app/boards/arm/planck/planck_rev6.keymap +++ b/app/boards/arm/planck/planck_rev6.keymap @@ -7,6 +7,11 @@ #include #include +/* Uncomment this block if using an encoder */ +//&encoder { +// status = "okay"; +//}; + / { keymap { compatible = "zmk,keymap"; @@ -23,6 +28,7 @@ &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RET &trans &kp LCTL &kp LALT &kp LGUI &mo 1 &trans &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; }; lower { diff --git a/app/boards/arm/planck/planck_rev6.zmk.yml b/app/boards/arm/planck/planck_rev6.zmk.yml index 56c0000671f..f9d42424742 100644 --- a/app/boards/arm/planck/planck_rev6.zmk.yml +++ b/app/boards/arm/planck/planck_rev6.zmk.yml @@ -5,6 +5,7 @@ type: board arch: arm features: - keys + - encoder outputs: - usb url: https://olkb.com/collections/planck diff --git a/app/boards/arm/planck/planck_rev6_defconfig b/app/boards/arm/planck/planck_rev6_defconfig index ce08f41dff8..f453063900f 100644 --- a/app/boards/arm/planck/planck_rev6_defconfig +++ b/app/boards/arm/planck/planck_rev6_defconfig @@ -14,3 +14,7 @@ CONFIG_GPIO=y CONFIG_CLOCK_CONTROL=y CONFIG_ZMK_USB=y + +# Uncomment these two lines to add support for encoder to your firmware +#CONFIG_EC11=y +#CONFIG_EC11_TRIGGER_OWN_THREAD=y From 104c73d303dea42d8abe23230035597e5cfa4863 Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Thu, 9 Nov 2023 10:42:56 -0500 Subject: [PATCH 0991/1130] refactor: address transport switch enumeration warning When building without USB or Bluetooth, the compiler emits a warning due to ZMK_TRANSPORT_USB or ZMK_TRANSPORT_BLE not being handled. --- app/src/endpoints.c | 48 +++++++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 395d6ba502a..f8452d93fbb 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -122,57 +122,69 @@ struct zmk_endpoint_instance zmk_endpoints_selected(void) { static int send_keyboard_report(void) { switch (current_instance.transport) { -#if IS_ENABLED(CONFIG_ZMK_USB) case ZMK_TRANSPORT_USB: { +#if IS_ENABLED(CONFIG_ZMK_USB) int err = zmk_usb_hid_send_keyboard_report(); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); } return err; - } +#else + LOG_ERR("USB endpoint is not supported"); + return -ENOTSUP; #endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + } -#if IS_ENABLED(CONFIG_ZMK_BLE) case ZMK_TRANSPORT_BLE: { +#if IS_ENABLED(CONFIG_ZMK_BLE) struct zmk_hid_keyboard_report *keyboard_report = zmk_hid_get_keyboard_report(); int err = zmk_hog_send_keyboard_report(&keyboard_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); } return err; - } +#else + LOG_ERR("BLE HOG endpoint is not supported"); + return -ENOTSUP; #endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ } + } - LOG_ERR("Unsupported endpoint transport %d", current_instance.transport); + LOG_ERR("Unhandled endpoint transport %d", current_instance.transport); return -ENOTSUP; } static int send_consumer_report(void) { switch (current_instance.transport) { -#if IS_ENABLED(CONFIG_ZMK_USB) case ZMK_TRANSPORT_USB: { +#if IS_ENABLED(CONFIG_ZMK_USB) int err = zmk_usb_hid_send_consumer_report(); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); } return err; - } +#else + LOG_ERR("USB endpoint is not supported"); + return -ENOTSUP; #endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + } -#if IS_ENABLED(CONFIG_ZMK_BLE) case ZMK_TRANSPORT_BLE: { +#if IS_ENABLED(CONFIG_ZMK_BLE) struct zmk_hid_consumer_report *consumer_report = zmk_hid_get_consumer_report(); int err = zmk_hog_send_consumer_report(&consumer_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); } return err; - } +#else + LOG_ERR("BLE HOG endpoint is not supported"); + return -ENOTSUP; #endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ } + } - LOG_ERR("Unsupported endpoint transport %d", current_instance.transport); + LOG_ERR("Unhandled endpoint transport %d", current_instance.transport); return -ENOTSUP; } @@ -194,29 +206,35 @@ int zmk_endpoints_send_report(uint16_t usage_page) { #if IS_ENABLED(CONFIG_ZMK_MOUSE) int zmk_endpoints_send_mouse_report() { switch (current_instance.transport) { -#if IS_ENABLED(CONFIG_ZMK_USB) case ZMK_TRANSPORT_USB: { +#if IS_ENABLED(CONFIG_ZMK_USB) int err = zmk_usb_hid_send_mouse_report(); if (err) { LOG_ERR("FAILED TO SEND OVER USB: %d", err); } return err; - } +#else + LOG_ERR("USB endpoint is not supported"); + return -ENOTSUP; #endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + } -#if IS_ENABLED(CONFIG_ZMK_BLE) case ZMK_TRANSPORT_BLE: { +#if IS_ENABLED(CONFIG_ZMK_BLE) struct zmk_hid_mouse_report *mouse_report = zmk_hid_get_mouse_report(); int err = zmk_hog_send_mouse_report(&mouse_report->body); if (err) { LOG_ERR("FAILED TO SEND OVER HOG: %d", err); } return err; - } +#else + LOG_ERR("BLE HOG endpoint is not supported"); + return -ENOTSUP; #endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ } + } - LOG_ERR("Unsupported endpoint transport %d", current_instance.transport); + LOG_ERR("Unhandled endpoint transport %d", current_instance.transport); return -ENOTSUP; } #endif // IS_ENABLED(CONFIG_ZMK_MOUSE) From c007d6035778fc3e34d56e82756e747c745085b8 Mon Sep 17 00:00:00 2001 From: Theo Lemay Date: Mon, 22 May 2023 19:34:29 -0700 Subject: [PATCH 0992/1130] feat(behaviors): hold while undecided --- .../behaviors/zmk,behavior-hold-tap.yaml | 4 + app/src/behaviors/behavior_hold_tap.c | 105 ++++++++++++++---- .../1-tap/events.patterns | 4 + .../1-tap/keycode_events.snapshot | 8 ++ .../1-tap/native_posix_64.keymap | 36 ++++++ .../2-hold/events.patterns | 4 + .../2-hold/keycode_events.snapshot | 6 + .../2-hold/native_posix_64.keymap | 36 ++++++ .../3-linger/events.patterns | 4 + .../3-linger/keycode_events.snapshot | 8 ++ .../3-linger/native_posix_64.keymap | 37 ++++++ .../4-linger-sk/events.patterns | 4 + .../4-linger-sk/keycode_events.snapshot | 7 ++ .../4-linger-sk/native_posix_64.keymap | 37 ++++++ docs/docs/behaviors/hold-tap.mdx | 12 ++ docs/docs/config/behaviors.md | 22 ++-- 16 files changed, 303 insertions(+), 31 deletions(-) create mode 100644 app/tests/hold-tap/hold-while-undecided/1-tap/events.patterns create mode 100644 app/tests/hold-tap/hold-while-undecided/1-tap/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap create mode 100644 app/tests/hold-tap/hold-while-undecided/2-hold/events.patterns create mode 100644 app/tests/hold-tap/hold-while-undecided/2-hold/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap create mode 100644 app/tests/hold-tap/hold-while-undecided/3-linger/events.patterns create mode 100644 app/tests/hold-tap/hold-while-undecided/3-linger/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap create mode 100644 app/tests/hold-tap/hold-while-undecided/4-linger-sk/events.patterns create mode 100644 app/tests/hold-tap/hold-while-undecided/4-linger-sk/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml index 575754116b1..76f14d12d4e 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -37,6 +37,10 @@ properties: - "balanced" - "tap-preferred" - "tap-unless-interrupted" + hold-while-undecided: + type: boolean + hold-while-undecided-linger: + type: boolean retro-tap: type: boolean hold-trigger-key-positions: diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index efc96c1a3f2..01587caf5e4 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -45,6 +45,7 @@ enum status { }; enum decision_moment { + HT_KEY_DOWN, HT_KEY_UP, HT_OTHER_KEY_DOWN, HT_OTHER_KEY_UP, @@ -59,6 +60,8 @@ struct behavior_hold_tap_config { int quick_tap_ms; int require_prior_idle_ms; enum flavor flavor; + bool hold_while_undecided; + bool hold_while_undecided_linger; bool retro_tap; bool hold_trigger_on_release; int32_t hold_trigger_key_positions_len; @@ -387,47 +390,87 @@ static inline const char *decision_moment_str(enum decision_moment decision_mome } } -static int press_binding(struct active_hold_tap *hold_tap) { - if (hold_tap->config->retro_tap && hold_tap->status == STATUS_HOLD_TIMER) { - return 0; - } +static int press_hold_binding(struct active_hold_tap *hold_tap) { + struct zmk_behavior_binding_event event = { + .position = hold_tap->position, + .timestamp = hold_tap->timestamp, + }; + struct zmk_behavior_binding binding = {0}; + binding.behavior_dev = hold_tap->config->hold_behavior_dev; + binding.param1 = hold_tap->param_hold; + return behavior_keymap_binding_pressed(&binding, event); +} + +static int press_tap_binding(struct active_hold_tap *hold_tap) { struct zmk_behavior_binding_event event = { .position = hold_tap->position, .timestamp = hold_tap->timestamp, }; struct zmk_behavior_binding binding = {0}; - if (hold_tap->status == STATUS_HOLD_TIMER || hold_tap->status == STATUS_HOLD_INTERRUPT) { - binding.behavior_dev = hold_tap->config->hold_behavior_dev; - binding.param1 = hold_tap->param_hold; - } else { - binding.behavior_dev = hold_tap->config->tap_behavior_dev; - binding.param1 = hold_tap->param_tap; - store_last_hold_tapped(hold_tap); - } + binding.behavior_dev = hold_tap->config->tap_behavior_dev; + binding.param1 = hold_tap->param_tap; + store_last_hold_tapped(hold_tap); return behavior_keymap_binding_pressed(&binding, event); } -static int release_binding(struct active_hold_tap *hold_tap) { - if (hold_tap->config->retro_tap && hold_tap->status == STATUS_HOLD_TIMER) { - return 0; - } +static int release_hold_binding(struct active_hold_tap *hold_tap) { + struct zmk_behavior_binding_event event = { + .position = hold_tap->position, + .timestamp = hold_tap->timestamp, + }; + struct zmk_behavior_binding binding = {0}; + binding.behavior_dev = hold_tap->config->hold_behavior_dev; + binding.param1 = hold_tap->param_hold; + return behavior_keymap_binding_released(&binding, event); +} + +static int release_tap_binding(struct active_hold_tap *hold_tap) { struct zmk_behavior_binding_event event = { .position = hold_tap->position, .timestamp = hold_tap->timestamp, }; struct zmk_behavior_binding binding = {0}; + binding.behavior_dev = hold_tap->config->tap_behavior_dev; + binding.param1 = hold_tap->param_tap; + return behavior_keymap_binding_released(&binding, event); +} + +static int press_binding(struct active_hold_tap *hold_tap) { + if (hold_tap->config->retro_tap && hold_tap->status == STATUS_HOLD_TIMER) { + return 0; + } + if (hold_tap->status == STATUS_HOLD_TIMER || hold_tap->status == STATUS_HOLD_INTERRUPT) { - binding.behavior_dev = hold_tap->config->hold_behavior_dev; - binding.param1 = hold_tap->param_hold; + if (hold_tap->config->hold_while_undecided) { + // the hold is already active, so we don't need to press it again + return 0; + } else { + return press_hold_binding(hold_tap); + } } else { - binding.behavior_dev = hold_tap->config->tap_behavior_dev; - binding.param1 = hold_tap->param_tap; + if (hold_tap->config->hold_while_undecided && + !hold_tap->config->hold_while_undecided_linger) { + // time to release the hold before pressing the tap + release_hold_binding(hold_tap); + } + return press_tap_binding(hold_tap); + } +} + +static int release_binding(struct active_hold_tap *hold_tap) { + if (hold_tap->config->retro_tap && hold_tap->status == STATUS_HOLD_TIMER) { + return 0; + } + + if (hold_tap->status == STATUS_HOLD_TIMER || hold_tap->status == STATUS_HOLD_INTERRUPT) { + return release_hold_binding(hold_tap); + } else { + return release_tap_binding(hold_tap); } - return behavior_keymap_binding_released(&binding, event); } static bool is_first_other_key_pressed_trigger_key(struct active_hold_tap *hold_tap) { @@ -474,6 +517,12 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, return; } + if (hold_tap->config->hold_while_undecided && decision_moment == HT_KEY_DOWN) { + LOG_DBG("%d hold behavior pressed while undecided", hold_tap->position); + press_hold_binding(hold_tap); + return; + } + // If the hold-tap behavior is still undecided, attempt to decide it. switch (hold_tap->config->flavor) { case FLAVOR_HOLD_PREFERRED: @@ -561,6 +610,8 @@ static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, decide_hold_tap(hold_tap, HT_QUICK_TAP); } + decide_hold_tap(hold_tap, HT_KEY_DOWN); + // if this behavior was queued we have to adjust the timer to only // wait for the remaining time. int32_t tapping_term_ms_left = (hold_tap->timestamp + cfg->tapping_term_ms) - k_uptime_get(); @@ -588,6 +639,10 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, decide_retro_tap(hold_tap); release_binding(hold_tap); + if (hold_tap->config->hold_while_undecided && hold_tap->config->hold_while_undecided_linger) { + release_hold_binding(hold_tap); + } + if (work_cancel_result == -EINPROGRESS) { // let the timer handler clean up // if we'd clear now, the timer may call back for an uninitialized active_hold_tap. @@ -685,6 +740,12 @@ static int keycode_state_changed_listener(const zmk_event_t *eh) { return ZMK_EV_EVENT_BUBBLE; } + // hold-while-undecided can produce a mod, but we don't want to capture it. + if (undecided_hold_tap->config->hold_while_undecided && + undecided_hold_tap->status == STATUS_UNDECIDED) { + return ZMK_EV_EVENT_BUBBLE; + } + // only key-up events will bubble through position_state_changed_listener // if a undecided_hold_tap is active. LOG_DBG("%d capturing 0x%02X %s event", undecided_hold_tap->position, ev->keycode, @@ -743,6 +804,8 @@ static int behavior_hold_tap_init(const struct device *dev) { ? DT_INST_PROP(n, quick_tap_ms) \ : DT_INST_PROP(n, require_prior_idle_ms), \ .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ + .hold_while_undecided = DT_INST_PROP(n, hold_while_undecided), \ + .hold_while_undecided_linger = DT_INST_PROP(n, hold_while_undecided_linger), \ .retro_tap = DT_INST_PROP(n, retro_tap), \ .hold_trigger_on_release = DT_INST_PROP(n, hold_trigger_on_release), \ .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ diff --git a/app/tests/hold-tap/hold-while-undecided/1-tap/events.patterns b/app/tests/hold-tap/hold-while-undecided/1-tap/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/1-tap/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-while-undecided/1-tap/keycode_events.snapshot b/app/tests/hold-tap/hold-while-undecided/1-tap/keycode_events.snapshot new file mode 100644 index 00000000000..7cbc8268869 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/1-tap/keycode_events.snapshot @@ -0,0 +1,8 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 hold behavior pressed while undecided +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (balanced decision moment key-up) +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap new file mode 100644 index 00000000000..09396dd8248 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap @@ -0,0 +1,36 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-while-undecided; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT A &ht_bal LEFT_CONTROL B + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/hold-while-undecided/2-hold/events.patterns b/app/tests/hold-tap/hold-while-undecided/2-hold/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/2-hold/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-while-undecided/2-hold/keycode_events.snapshot b/app/tests/hold-tap/hold-while-undecided/2-hold/keycode_events.snapshot new file mode 100644 index 00000000000..d9eed61285d --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/2-hold/keycode_events.snapshot @@ -0,0 +1,6 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 hold behavior pressed while undecided +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided hold-timer (balanced decision moment timer) +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap new file mode 100644 index 00000000000..e3eaa8e05eb --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap @@ -0,0 +1,36 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <100>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-while-undecided; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT A &ht_bal LEFT_CONTROL B + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,150) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/hold-while-undecided/3-linger/events.patterns b/app/tests/hold-tap/hold-while-undecided/3-linger/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/3-linger/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-while-undecided/3-linger/keycode_events.snapshot b/app/tests/hold-tap/hold-while-undecided/3-linger/keycode_events.snapshot new file mode 100644 index 00000000000..55c9bb32f76 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/3-linger/keycode_events.snapshot @@ -0,0 +1,8 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 hold behavior pressed while undecided +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (balanced decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap new file mode 100644 index 00000000000..4b694eb2d14 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <100>; + quick-tap-ms = <300>; + bindings = <&kp>, <&kp>; + hold-while-undecided; + hold-while-undecided-linger; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT A &ht_bal LEFT_CONTROL B + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/app/tests/hold-tap/hold-while-undecided/4-linger-sk/events.patterns b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/events.patterns new file mode 100644 index 00000000000..fdf2b15cf25 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-while-undecided/4-linger-sk/keycode_events.snapshot b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/keycode_events.snapshot new file mode 100644 index 00000000000..74f88195b36 --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 hold behavior pressed while undecided +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (balanced decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap new file mode 100644 index 00000000000..a748ae51fcf --- /dev/null +++ b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <100>; + quick-tap-ms = <200>; + bindings = <&kp>, <&sk>; + hold-while-undecided; + hold-while-undecided-linger; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT LEFT_SHIFT &ht_bal LEFT_SHIFT LEFT_CONTROL + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; diff --git a/docs/docs/behaviors/hold-tap.mdx b/docs/docs/behaviors/hold-tap.mdx index 26af9f1d83a..191e820dd43 100644 --- a/docs/docs/behaviors/hold-tap.mdx +++ b/docs/docs/behaviors/hold-tap.mdx @@ -83,6 +83,18 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin }; ``` +#### `hold-while-undecided` + +If enabled, the hold behavior will immediately be held on hold-tap press, and will release before the behavior is sent in the event the hold-tap resolves into a tap. With most modifiers this will not affect typing, and is useful for using modifiers with the mouse. + +:::note Alt/Win/Cmd behavior +In some applications/desktop environments, pressing Alt keycodes by itself will have its own behavior like activate a menu and Gui keycodes will bring up the start menu or an application launcher. +::: + +#### `hold-while-undecided-linger` + +If your tap behavior activates the same modifier as the hold behavior, and you want to avoid a double tap when transitioning from the hold to the tap, you can use `hold-while-undecided-linger`. When enabled, the hold behavior will continue to be held until _after_ the tap behavior is released. For example, if the hold is `&kp LGUI` and the tap is `&sk LGUI`, then with `hold-while-undecided-linger` enabled, the host will see `LGUI` held down continuously until the sticky key is finished, instead of seeing a release and press when transitioning from hold to sticky key. + #### Positional hold-tap and `hold-trigger-key-positions` Including `hold-trigger-key-positions` in your hold-tap definition turns on the positional hold-tap feature. With positional hold-tap enabled, if you press any key **NOT** listed in `hold-trigger-key-positions` before `tapping-term-ms` expires, it will produce a tap. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index c31de5dd0a4..f8d2fe39eb6 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -57,16 +57,18 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml](htt Applies to: `compatible = "zmk,behavior-hold-tap"` -| Property | Type | Description | Default | -| ---------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ------------------ | -| `#binding-cells` | int | Must be `<2>` | | -| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | -| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | -| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | -| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | -| `require-prior-idle-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `require-prior-idle-ms` of the hold-tap. | -1 (disabled) | -| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | -| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | +| Property | Type | Description | Default | +| ----------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ------------------ | +| `#binding-cells` | int | Must be `<2>` | | +| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | +| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | +| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | +| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | +| `require-prior-idle-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `require-prior-idle-ms` of the hold-tap. | -1 (disabled) | +| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | +| `hold-while-undecided` | bool | Triggers the hold behavior immediately on press and releases before a tap | false | +| `hold-while-undecided-linger` | bool | Continues to hold the hold behavior until after the tap is released | false | +| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | This behavior forwards the first parameter it receives to the parameter of the first behavior specified in `bindings`, and second parameter to the parameter of the second behavior. From 8b20874c99ea191afbfc5ec3169e7f211986a853 Mon Sep 17 00:00:00 2001 From: Theo Lemay Date: Mon, 18 Dec 2023 21:34:38 -0500 Subject: [PATCH 0993/1130] chore: remove label in test --- .../hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap | 2 -- .../hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap | 2 -- .../hold-while-undecided/3-linger/native_posix_64.keymap | 2 -- .../hold-while-undecided/4-linger-sk/native_posix_64.keymap | 2 -- 4 files changed, 8 deletions(-) diff --git a/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap index 09396dd8248..5f42c30c8b2 100644 --- a/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-while-undecided/1-tap/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <300>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap index e3eaa8e05eb..381a7414a87 100644 --- a/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-while-undecided/2-hold/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <100>; @@ -18,7 +17,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap index 4b694eb2d14..0a296b70fae 100644 --- a/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-while-undecided/3-linger/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <100>; @@ -19,7 +18,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap index a748ae51fcf..557076bc4eb 100644 --- a/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-while-undecided/4-linger-sk/native_posix_64.keymap @@ -6,7 +6,6 @@ behaviors { ht_bal: behavior_hold_tap_balanced { compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <100>; @@ -19,7 +18,6 @@ keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < From c9c620d19f603ea0c9d4264eff885912803ff74d Mon Sep 17 00:00:00 2001 From: Theo Lemay Date: Sat, 3 Feb 2024 17:25:50 -0500 Subject: [PATCH 0994/1130] fix: inline initialise --- app/src/behaviors/behavior_hold_tap.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 01587caf5e4..204e50f478b 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -396,9 +396,8 @@ static int press_hold_binding(struct active_hold_tap *hold_tap) { .timestamp = hold_tap->timestamp, }; - struct zmk_behavior_binding binding = {0}; - binding.behavior_dev = hold_tap->config->hold_behavior_dev; - binding.param1 = hold_tap->param_hold; + struct zmk_behavior_binding binding = {.behavior_dev = hold_tap->config->hold_behavior_dev, + .param1 = hold_tap->param_hold}; return behavior_keymap_binding_pressed(&binding, event); } @@ -408,9 +407,8 @@ static int press_tap_binding(struct active_hold_tap *hold_tap) { .timestamp = hold_tap->timestamp, }; - struct zmk_behavior_binding binding = {0}; - binding.behavior_dev = hold_tap->config->tap_behavior_dev; - binding.param1 = hold_tap->param_tap; + struct zmk_behavior_binding binding = {.behavior_dev = hold_tap->config->tap_behavior_dev, + .param1 = hold_tap->param_tap}; store_last_hold_tapped(hold_tap); return behavior_keymap_binding_pressed(&binding, event); } @@ -421,9 +419,8 @@ static int release_hold_binding(struct active_hold_tap *hold_tap) { .timestamp = hold_tap->timestamp, }; - struct zmk_behavior_binding binding = {0}; - binding.behavior_dev = hold_tap->config->hold_behavior_dev; - binding.param1 = hold_tap->param_hold; + struct zmk_behavior_binding binding = {.behavior_dev = hold_tap->config->hold_behavior_dev, + .param1 = hold_tap->param_hold}; return behavior_keymap_binding_released(&binding, event); } @@ -433,9 +430,8 @@ static int release_tap_binding(struct active_hold_tap *hold_tap) { .timestamp = hold_tap->timestamp, }; - struct zmk_behavior_binding binding = {0}; - binding.behavior_dev = hold_tap->config->tap_behavior_dev; - binding.param1 = hold_tap->param_tap; + struct zmk_behavior_binding binding = {.behavior_dev = hold_tap->config->tap_behavior_dev, + .param1 = hold_tap->param_tap}; return behavior_keymap_binding_released(&binding, event); } From db7b197790c57c3fb5b8281bd8242286921ae77c Mon Sep 17 00:00:00 2001 From: Andrew Kannan Date: Wed, 28 Feb 2024 13:39:04 -0500 Subject: [PATCH 0995/1130] fix(docs): Add underglow brightness min/max (#2180) --- docs/docs/config/underglow.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/config/underglow.md b/docs/docs/config/underglow.md index 1209e60ecc0..e742e79192e 100644 --- a/docs/docs/config/underglow.md +++ b/docs/docs/config/underglow.md @@ -28,6 +28,8 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | `CONFIG_ZMK_RGB_UNDERGLOW_SPD_START` | int | Default effect speed (1-5) | 3 | | `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START` | int | Default effect index from the effect list (see below) | 0 | | `CONFIG_ZMK_RGB_UNDERGLOW_ON_START` | bool | Default on state | y | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN` | int | Minimum brightness in percent (0-100) | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX` | int | Maximum brightness in percent (0-100) | 100 | Values for `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START`: From 37af94edde7b42f1894484831b6d958bc4b27124 Mon Sep 17 00:00:00 2001 From: Thomas Huber <113915837+huber-th@users.noreply.github.com> Date: Sun, 3 Mar 2024 21:05:00 -0800 Subject: [PATCH 0996/1130] feat(docs): Add warning to new shield docs how Kconfig treats whitspaces Added a warning to the shield section explaining that Kconfig does not ignore whitespaces on function calls and therefore adding whitespaces after the comma will break functionality. --- docs/docs/development/new-shield.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 0dcface373b..2cd82bc67e9 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -79,6 +79,10 @@ config SHIELD_MY_BOARD def_bool $(shields_list_contains,my_board) ``` +:::warning +Kconfig uses only commas for delimiters, and keeps all whitespaces in the function call. Therefore do not add a whitespace after the comma when configuring your shield as this would be treated as  my_board (with a leading whitespace) and will cause issues. +::: + This will make sure that a new configuration value named `SHIELD_MY_BOARD` is set to true whenever `my_board` is used as the shield name, either as the `SHIELD` variable [in a local build](build-flash.mdx) or in your `build.yaml` file [when using Github Actions](../customization). Note that this configuration value will be used in `Kconfig.defconfig` to set other properties about your shield, so make sure that they match. **For split boards**, you will need to add configurations for the left and right sides. For example, if your split halves are named `my_board_left` and `my_board_right`, it would look like this: From 08ab45fc7875a042c787d353ff0e3512319af030 Mon Sep 17 00:00:00 2001 From: Thomas Huber <113915837+huber-th@users.noreply.github.com> Date: Sun, 3 Mar 2024 21:10:14 -0800 Subject: [PATCH 0997/1130] feat(CONTRIBUTING.md): Add info regarding ESLint --- CONTRIBUTING.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fe7292a8fee..bcc2aef190a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,6 +86,12 @@ documentation to areas not currently covered are greatly appreciated. ZMK uses `prettier` to format documentation files. You can run prettier with `npm run prettier:format`. You can setup git to run prettier automatically when you commit by installing the pre-commit hooks: `pip3 install pre-commit`, `pre-commit install`. +### Linting + +This repository utilizes ESLint for code linting to ensure consistent code style and identify potential errors or bugs early in the development process. + +You can run ESLint with `npm run lint` to verify your changes. + ## Code Contributions ### Development Setup From 2adaa00d1092e41ce11dfae46ce7d2a5bad97ead Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 8 Mar 2024 10:17:02 -0800 Subject: [PATCH 0998/1130] fix(build): Properly board revision keymaps. * Handle board keymap location for boards with Zephyr board revisions included. * Includes bare non-revision file and a revision specific keymap in case newer revision changes the layout/key positions. --- app/keymap-module/modules/modules.cmake | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/keymap-module/modules/modules.cmake b/app/keymap-module/modules/modules.cmake index c286809df1c..f513bcc4f5f 100644 --- a/app/keymap-module/modules/modules.cmake +++ b/app/keymap-module/modules/modules.cmake @@ -63,6 +63,13 @@ if(DEFINED SHIELD) string(REPLACE " " ";" SHIELD_AS_LIST "${SHIELD}") endif() +string(FIND "${BOARD}" "@" REVISION_SEPARATOR_INDEX) +if(NOT (REVISION_SEPARATOR_INDEX EQUAL -1)) + math(EXPR BOARD_REVISION_INDEX "${REVISION_SEPARATOR_INDEX} + 1") + string(SUBSTRING ${BOARD} ${BOARD_REVISION_INDEX} -1 BOARD_REVISION) + string(SUBSTRING ${BOARD} 0 ${REVISION_SEPARATOR_INDEX} BOARD) +endif() + foreach(root ${BOARD_ROOT}) set(shield_dir ${root}/boards/shields) # Match the Kconfig.shield files in the shield directories to make sure we are @@ -107,6 +114,21 @@ foreach(root ${BOARD_ROOT}) endif() endforeach() +if(EXISTS ${BOARD_DIR}/revision.cmake) + # Board provides revision handling. + include(${BOARD_DIR}/revision.cmake) +elseif(BOARD_REVISION) + message(WARNING "Board revision ${BOARD_REVISION} specified for ${BOARD}, \ + but board has no revision so revision will be ignored.") +endif() + +if(DEFINED BOARD_REVISION) + string(REPLACE "." "_" BOARD_REVISION_STRING ${BOARD_REVISION}) + set(KEYMAP_BOARD_REVISION_PREFIX "${BOARD}_${BOARD_REVISION_STRING}") +else() + set(KEYMAP_BOARD_REVISION_PREFIX "") +endif() + # Give a shield like `kyria_rev2_left` we want to use `kyria_rev2` and `kyria` as candidate names for # overlay/conf/keymap files. if(DEFINED SHIELD) @@ -178,7 +200,7 @@ endif() if(NOT KEYMAP_FILE) foreach(keymap_dir ${KEYMAP_DIRS}) - foreach(keymap_prefix ${shield_candidate_names} ${SHIELD_AS_LIST} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR_NAME}) + foreach(keymap_prefix ${shield_candidate_names} ${SHIELD_AS_LIST} ${SHIELD_DIR} ${KEYMAP_BOARD_REVISION_PREFIX} ${BOARD} ${BOARD_DIR_NAME}) if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap) set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file") message(STATUS "Using keymap file: ${KEYMAP_FILE}") From 610a806c848ba53a454bbc66631fa3f3faaef19f Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 26 Nov 2023 12:27:12 -0600 Subject: [PATCH 0999/1130] feat: Add function to erase all settings Added a zmk_settings_erase() function to clear all saved settings. This does not go through Zephyr's settings subsystem, but instead directly clears the data from the setting storage backend, so a reboot is needed for it to take effect. --- app/CMakeLists.txt | 1 + app/include/zmk/settings.h | 15 ++++++++++ app/src/settings/CMakeLists.txt | 7 +++++ app/src/settings/reset_settings_fcb.c | 15 ++++++++++ app/src/settings/reset_settings_file.c | 23 +++++++++++++++ app/src/settings/reset_settings_none.c | 12 ++++++++ app/src/settings/reset_settings_nvs.c | 39 ++++++++++++++++++++++++++ 7 files changed, 112 insertions(+) create mode 100644 app/include/zmk/settings.h create mode 100644 app/src/settings/CMakeLists.txt create mode 100644 app/src/settings/reset_settings_fcb.c create mode 100644 app/src/settings/reset_settings_file.c create mode 100644 app/src/settings/reset_settings_none.c create mode 100644 app/src/settings/reset_settings_nvs.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 6ef00311027..b12d04742ee 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -99,5 +99,6 @@ target_sources_ifdef(CONFIG_ZMK_LOW_PRIORITY_WORK_QUEUE app PRIVATE src/workqueu target_sources(app PRIVATE src/main.c) add_subdirectory(src/display/) +add_subdirectory_ifdef(CONFIG_SETTINGS src/settings/) zephyr_cc_option(-Wfatal-errors) diff --git a/app/include/zmk/settings.h b/app/include/zmk/settings.h new file mode 100644 index 00000000000..5567d61b421 --- /dev/null +++ b/app/include/zmk/settings.h @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +/** + * Erases all saved settings. + * + * @note This does not automatically update any code using Zephyr's settings + * subsystem. This should typically be followed by a call to sys_reboot(). + */ +int zmk_settings_erase(void); diff --git a/app/src/settings/CMakeLists.txt b/app/src/settings/CMakeLists.txt new file mode 100644 index 00000000000..63bcd7f9522 --- /dev/null +++ b/app/src/settings/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +target_sources_ifdef(CONFIG_SETTINGS_NONE app PRIVATE reset_settings_none.c) +target_sources_ifdef(CONFIG_SETTINGS_FCB app PRIVATE reset_settings_fcb.c) +target_sources_ifdef(CONFIG_SETTINGS_FILE app PRIVATE reset_settings_file.c) +target_sources_ifdef(CONFIG_SETTINGS_NVS app PRIVATE reset_settings_nvs.c) diff --git a/app/src/settings/reset_settings_fcb.c b/app/src/settings/reset_settings_fcb.c new file mode 100644 index 00000000000..1d555d341e3 --- /dev/null +++ b/app/src/settings/reset_settings_fcb.c @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +int zmk_settings_erase(void) { + LOG_ERR("Settings reset is not implemented for deprecated FCB backend."); + return -ENOSYS; +} diff --git a/app/src/settings/reset_settings_file.c b/app/src/settings/reset_settings_file.c new file mode 100644 index 00000000000..1d142868d30 --- /dev/null +++ b/app/src/settings/reset_settings_file.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +int zmk_settings_erase(void) { + LOG_INF("Erasing settings file"); + + int rc = fs_unlink(CONFIG_SETTINGS_FS_FILE); + if (rc) { + LOG_ERR("Failed to unlink '%s': %d", CONFIG_SETTINGS_FS_FILE, rc); + } + + return rc; +} diff --git a/app/src/settings/reset_settings_none.c b/app/src/settings/reset_settings_none.c new file mode 100644 index 00000000000..c5e0ae0419c --- /dev/null +++ b/app/src/settings/reset_settings_none.c @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +int zmk_settings_erase(void) { + // No storage backend; nothing to do + return 0; +} diff --git a/app/src/settings/reset_settings_nvs.c b/app/src/settings/reset_settings_nvs.c new file mode 100644 index 00000000000..65157b3d154 --- /dev/null +++ b/app/src/settings/reset_settings_nvs.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +// SETTINGS_PARTITION must match settings_nvs.c +#if DT_HAS_CHOSEN(zephyr_settings_partition) +#define SETTINGS_PARTITION DT_FIXED_PARTITION_ID(DT_CHOSEN(zephyr_settings_partition)) +#else +#define SETTINGS_PARTITION FIXED_PARTITION_ID(storage_partition) +#endif + +int zmk_settings_erase(void) { + LOG_INF("Erasing settings flash partition"); + + const struct flash_area *fa; + int rc = flash_area_open(SETTINGS_PARTITION, &fa); + if (rc) { + LOG_ERR("Failed to open settings flash: %d", rc); + return rc; + } + + rc = flash_area_erase(fa, 0, fa->fa_size); + if (rc) { + LOG_ERR("Failed to erase settings flash: %d", rc); + } + + flash_area_close(fa); + + return rc; +} From 1dfcfc7d3f074e538900a6df684cc99e92c60a21 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 26 Nov 2023 12:28:27 -0600 Subject: [PATCH 1000/1130] feat(shields): Make settings_reset shield reset all settings Added a new CONFIG_ZMK_SETTINGS_RESET_ON_START option which enables init code to call zmk_settings_erase(), and changed the settings_reset shield to use it instead of CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START, so it now resets all settings instead of just clearing BLE bonds. CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START is left in place for now in case someone still needs it. It may be replaced in the future once we find a better way to repair a broken split connection. --- app/Kconfig | 3 +++ .../settings_reset/settings_reset.conf | 5 ++++- app/src/settings/CMakeLists.txt | 2 ++ app/src/settings/reset_settings_on_start.c | 19 +++++++++++++++++++ docs/docs/config/system.md | 13 +++++++------ 5 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 app/src/settings/reset_settings_on_start.c diff --git a/app/Kconfig b/app/Kconfig index bb6997a43ae..3f797abd41d 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -565,6 +565,9 @@ endmenu if SETTINGS +config ZMK_SETTINGS_RESET_ON_START + bool "Delete all persistent settings when the keyboard boots" + config ZMK_SETTINGS_SAVE_DEBOUNCE int "Milliseconds to debounce settings saves" default 60000 diff --git a/app/boards/shields/settings_reset/settings_reset.conf b/app/boards/shields/settings_reset/settings_reset.conf index 8052a6cf258..4ed84df856a 100644 --- a/app/boards/shields/settings_reset/settings_reset.conf +++ b/app/boards/shields/settings_reset/settings_reset.conf @@ -1 +1,4 @@ -CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START=y +CONFIG_SETTINGS=y +CONFIG_ZMK_SETTINGS_RESET_ON_START=y +# Disable BLE so splits don't try to re-pair until normal firmware is flashed. +CONFIG_ZMK_BLE=n diff --git a/app/src/settings/CMakeLists.txt b/app/src/settings/CMakeLists.txt index 63bcd7f9522..28664a4ef13 100644 --- a/app/src/settings/CMakeLists.txt +++ b/app/src/settings/CMakeLists.txt @@ -5,3 +5,5 @@ target_sources_ifdef(CONFIG_SETTINGS_NONE app PRIVATE reset_settings_none.c) target_sources_ifdef(CONFIG_SETTINGS_FCB app PRIVATE reset_settings_fcb.c) target_sources_ifdef(CONFIG_SETTINGS_FILE app PRIVATE reset_settings_file.c) target_sources_ifdef(CONFIG_SETTINGS_NVS app PRIVATE reset_settings_nvs.c) + +target_sources_ifdef(CONFIG_ZMK_SETTINGS_RESET_ON_START app PRIVATE reset_settings_on_start.c) diff --git a/app/src/settings/reset_settings_on_start.c b/app/src/settings/reset_settings_on_start.c new file mode 100644 index 00000000000..3b3890f469b --- /dev/null +++ b/app/src/settings/reset_settings_on_start.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include + +static int reset_settings_init(const struct device *dev) { + ARG_UNUSED(dev); + return zmk_settings_erase(); +} + +// Reset after the kernel is initialized but before any application code to +// ensure settings are cleared before anything tries to use them. +SYS_INIT(reset_settings_init, POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 83f2f06545b..d60fa24e93f 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -13,12 +13,13 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ### General -| Config | Type | Description | Default | -| ----------------------------------- | ------ | ----------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | | -| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | -| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | -| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | +| Config | Type | Description | Default | +| ------------------------------------ | ------ | ----------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | | +| `CONFIG_ZMK_SETTINGS_RESET_ON_START` | bool | Clears all persistent settings from the keyboard at startup | n | +| `CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE` | int | Milliseconds to wait after a setting change before writing it to flash memory | 60000 | +| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n | +| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 | ### HID From 14b06a36bf5acecb52db57daf29046b334bf18df Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sun, 4 Feb 2024 12:34:26 -0600 Subject: [PATCH 1001/1130] docs: Update settings_reset documentation Updated the section for troubleshooting split halves unable to pair now that the settings_reset shield resets all settings and explicitly disables CONFIG_ZMK_BLE: - Added a note that all settings will be reset. - Removed the section about immediately putting the halves into bootloader mode to prevent pairing, as this is not necessary anymore. - Added a note that you will not be able to see or pair the Bluetooth keyboard until you have flashed regular firmware again. - Added a sentence to clarify that you will need to re-pair the keyboard to all host devices. Also added some text describing common scenarios where this procedure might be needed. --- docs/docs/troubleshooting.md | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 769852d137c..bfa92218f5a 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -68,7 +68,20 @@ A common mistake that leads to this error is to use [key press keycodes](behavio ### Split Keyboard Halves Unable to Pair -Split keyboard halves pairing issue can be resolved by flashing a settings reset firmware to both controllers. You will first need to acquire the reset UF2 image file with one of the following options: +Split keyboard halves will automatically pair with one another, but there are some cases where this breaks, and the pairing needs to be reset, for example: + +- Switching which halves are the central/peripheral. +- Replacing the controller for one of the halves. + +These issues can be resolved by flashing a settings reset firmware to both controllers. + +:::warning + +This procedure will erase all settings, such as Bluetooth profiles, output selection, RGB underglow color, etc. + +::: + +First, acquire the reset UF2 image file with one of the following options: #### Option 1: Build Reset UF2 in 'zmk-config' @@ -101,8 +114,16 @@ Save the file, commit the changes and push them to GitHub. Download the new firm Perform the following steps to reset both halves of your split keyboard: 1. Put each half of the split keyboard into bootloader mode. -1. Flash one of the halves of the split with the downloaded settings reset UF2 image. Immediately after flashing the chosen half, put it into bootloader mode to avoid accidental bonding between the halves. +1. Flash one of the halves of the split with the downloaded settings reset UF2 image. 1. Repeat step 2 with the other half of the split keyboard. 1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half). After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. + +Once this is done, you can remove/forget the keyboard on each host device and pair it again. + +:::info + +The settings reset firmware has Bluetooth disabled to prevent the two sides from automatically re-pairing until you are done resetting them both. You will not be able to pair your keyboard or see it in any Bluetooth device lists until you have flashed the normal firmware again. + +::: From a77288f5274b8cd64aed5dc03bb6c03ec205240f Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Sat, 24 Feb 2024 12:14:37 -0600 Subject: [PATCH 1002/1130] fix: Update settings reset for Zephyr 3.5 --- app/src/settings/reset_settings_on_start.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/settings/reset_settings_on_start.c b/app/src/settings/reset_settings_on_start.c index 3b3890f469b..47f5e8f2259 100644 --- a/app/src/settings/reset_settings_on_start.c +++ b/app/src/settings/reset_settings_on_start.c @@ -4,16 +4,10 @@ * SPDX-License-Identifier: MIT */ -#include #include #include -static int reset_settings_init(const struct device *dev) { - ARG_UNUSED(dev); - return zmk_settings_erase(); -} - // Reset after the kernel is initialized but before any application code to // ensure settings are cleared before anything tries to use them. -SYS_INIT(reset_settings_init, POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY); +SYS_INIT(zmk_settings_erase, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); From 388ad71385efe858a73c24c8dd7a373485ff4c83 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Mon, 18 Mar 2024 16:54:47 +0000 Subject: [PATCH 1003/1130] feat(build): Explicit missing keymap node error * Explicit error if zmk,keymap not set * Document keymap error --------- Co-authored-by: Cem Aksoylar --- app/src/keymap.c | 6 ++++++ docs/docs/troubleshooting.md | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/app/src/keymap.c b/app/src/keymap.c index 75a2dcbe64b..94bd12048cf 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -31,6 +31,12 @@ static uint8_t _zmk_keymap_layer_default = 0; #define DT_DRV_COMPAT zmk_keymap +#if !DT_NODE_EXISTS(DT_DRV_INST(0)) + +#error "Keymap node not found, check a keymap is available and is has compatible = "zmk,keymap" set" + +#endif + #define TRANSFORMED_LAYER(node) \ { LISTIFY(DT_PROP_LEN(node, bindings), ZMK_KEYMAP_EXTRACT_BINDING, (, ), node) } diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index bfa92218f5a..1f3c1706e34 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -40,6 +40,10 @@ West build errors usually indicate syntax problems in the `.keymap` fi If you are reviewing these errors in the GitHub Actions tab, they can be found in the `West Build` step of the build process. ::: +#### Keymap error + +If you get an error stating `Keymap node not found, check a keymap is available and is has compatible = "zmk,keymap" set` this is an indication that the build process cannot find the keymap. Double check that the `.keymap` file is present and has been discovered by the build process. This can be checked by looking for a line in the build log stating `-- Using keymap file: /path/to/keymap/file/.keymap`. Inside the keymap file ensure the keymap node has `compatible = zmk,keymap` and it's not misspelled. For more information see the [Keymap](features/keymaps.mdx) and [Config](config/index.md) documentation. + #### devicetree error A `devicetree error` followed by a reference to the line number on `.keymap` refers to an issue at the exact line position in that file. For example, below error message indicates a missing `;` at line 109 of the `cradio.keymap` file: From bddee70b6b73ccd8f3ff299d5b36dd0537e639e1 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 27 Feb 2024 11:08:58 -0800 Subject: [PATCH 1004/1130] refactor(docs): Remove outdated Windows battery advice and unnecessary header --- docs/docs/features/bluetooth.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index c4e91fafd33..307ac7e18a5 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -56,18 +56,6 @@ This setting can also improve the connection strength between the keyboard halve If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. -## Known Issues - -There are a few known issues related to BLE and ZMK: - -### Windows Battery Reporting - -There is a known issue with Windows failing to update the battery information after connecting to a ZMK keyboard. You can work around this Windows bug by overriding a [Bluetooth config variable](../config/bluetooth.md) to force battery notifications even if a host neglects to subscribe to them: - -```ini -CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n -``` - ### macOS Connected But Not Working If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding issue, macOS may report the keyboard as connected, but fail to actually work. If this occurs: From aa6cfe250d3324f918742c4e0ff232264d44f42c Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 27 Feb 2024 11:25:15 -0800 Subject: [PATCH 1005/1130] feat(docs): Document refreshing the HID descriptor --- docs/docs/features/bluetooth.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index 307ac7e18a5..1f2d795527a 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -36,6 +36,19 @@ Failure to manage the profiles can result in unexpected/broken behavior with hos Management of the bluetooth in ZMK is accomplished using the [`&bt` behavior](../behaviors/bluetooth.md). Be sure to refer to that documentation to learn how to manage profiles, switch between connected hosts, etc. +## Refreshing the HID Descriptor + +Enabling certain features or behaviors in ZMK changes the data structure that ZMK sends over USB or BLE to host devices. +This in turn requires [HID report descriptors](https://docs.kernel.org/hid/hidintro.html) to be modified for the reports to be parsed correctly. +Firmware changes that would modify the descriptor include the following: + +- Changing any of the settings under the [HID category](../config/system.md#hid), including enabling/disabling NKRO or HID indicators +- Enabling mouse features, such as adding [mouse keys](../behaviors/mouse-emulation.md) to your keymap + +While the descriptor refresh happens on boot for USB, hosts will frequently cache this descriptor for BLE devices. +In order to refresh this cache, you need to remove the keyboard from the host device, clear the profile associated with the host on the keyboard, then pair again. +For Windows systems you might need to follow the instructions in [this troubleshooting section](#windows-connected-but-not-working) below. + ## Troubleshooting ### Connectivity Issues From 325e2077817c096feef696a057e29ef4807d3d14 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 27 Feb 2024 11:30:33 -0800 Subject: [PATCH 1006/1130] feat(docs): Add pointers to HID descriptor refresh --- docs/docs/behaviors/mouse-emulation.md | 7 ++++++- docs/docs/config/system.md | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/docs/behaviors/mouse-emulation.md b/docs/docs/behaviors/mouse-emulation.md index 9ed0dd8e07b..7b80bae65d9 100644 --- a/docs/docs/behaviors/mouse-emulation.md +++ b/docs/docs/behaviors/mouse-emulation.md @@ -8,7 +8,12 @@ sidebar_label: Mouse Emulation Mouse emulation behaviors send mouse events. Currently, only mouse button presses are supported, but movement and scroll action support is planned for the future. -Whenever the Mouse Emulation feature is turned on or off, the HID protocol used to communicate events to hosts changes. Unfortunately, those changes are not always detected automatically, and might require re-pairing your keyboard to your devices to work over bluetooth. If mouse behaviors are still not recognized by your device after doing that, you can try [these troubleshooting steps](../features/bluetooth.md#windows-connected-but-not-working). +:::warning[Refreshing the HID descriptor] + +Enabling or disabling the mouse emulation feature modifies the HID report descriptor and requires it to be [refreshed](../features/bluetooth.md#refreshing-the-hid-descriptor). +The mouse functionality will not work over BLE until that is done. + +::: ## Configuration Option diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index d60fa24e93f..675830e4944 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -23,6 +23,12 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ### HID +:::warning[Refreshing the HID descriptor] + +Making changes to any of the settings in this section modifies the HID report descriptor and requires it to be [refreshed](../features/bluetooth.md#refreshing-the-hid-descriptor). + +::: + | Config | Type | Description | Default | | ------------------------------------- | ---- | -------------------------------------------------------------- | ------- | | `CONFIG_ZMK_HID_INDICATORS` | bool | Enable reciept of HID/LED indicator state from connected hosts | n | From c6e0551fb0d29e4bbba967b4ea0264a1b2440b80 Mon Sep 17 00:00:00 2001 From: Hans Kruse Date: Mon, 18 Mar 2024 18:06:09 +0100 Subject: [PATCH 1007/1130] fix(hid): Fix typo in HID usage alias --- app/include/dt-bindings/zmk/hid_usage.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/include/dt-bindings/zmk/hid_usage.h b/app/include/dt-bindings/zmk/hid_usage.h index 0555f004c11..8c0e9470829 100644 --- a/app/include/dt-bindings/zmk/hid_usage.h +++ b/app/include/dt-bindings/zmk/hid_usage.h @@ -1109,7 +1109,7 @@ #define HID_USAGE_CONSUMER_AC_RENAME (0x298) // Sel #define HID_USAGE_CONSUMER_AC_MERGE (0x299) // Sel #define HID_USAGE_CONSUMER_AC_SPLIT (0x29A) // Sel -#define HID_USAGE_CONSUMER_AC_DISRIBUTE_HORIZONTALLY (0x29B) // Sel +#define HID_USAGE_CONSUMER_AC_DISTRIBUTE_HORIZONTALLY (0x29B) // Sel #define HID_USAGE_CONSUMER_AC_DISTRIBUTE_VERTICALLY (0x29C) // Sel #define HID_USAGE_CONSUMER_AC_NEXT_KEYBOARD_LAYOUT_SELECT (0x29D) // Sel #define HID_USAGE_CONSUMER_AC_NAVIGATION_GUIDANCE (0x29E) // Sel @@ -2563,4 +2563,4 @@ #define HID_USAGE_FIDO_UNDEFINED (0x00) #define HID_USAGE_FIDO_U2F_AUTHENTICATOR_DEVICE (0x01) // CA #define HID_USAGE_FIDO_INPUT_REPORT_DATA (0x20) // DV -#define HID_USAGE_FIDO_OUTPUT_REPORT_DATA (0x21) // DV \ No newline at end of file +#define HID_USAGE_FIDO_OUTPUT_REPORT_DATA (0x21) // DV From 3a3897968461141bcf6cf2fadef039ea9ecbd727 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:21:14 -0500 Subject: [PATCH 1008/1130] refactor: replace tapping_term_ms with tapping-term-ms * The underscore form of this property is deprecated. --- app/boards/arm/ferris/ferris_rev02.keymap | 2 +- app/boards/shields/clog/clog.keymap | 2 +- app/boards/shields/hummingbird/hummingbird.keymap | 2 +- app/boards/shields/osprette/osprette.keymap | 2 +- .../shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap | 2 +- app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap | 2 +- .../hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/boards/arm/ferris/ferris_rev02.keymap b/app/boards/arm/ferris/ferris_rev02.keymap index dc298ec8d52..9733570c273 100644 --- a/app/boards/arm/ferris/ferris_rev02.keymap +++ b/app/boards/arm/ferris/ferris_rev02.keymap @@ -21,7 +21,7 @@ hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; - tapping_term_ms = <200>; + tapping-term-ms = <200>; flavor = "tap-preferred"; bindings = <&kp>, <&kp>; }; diff --git a/app/boards/shields/clog/clog.keymap b/app/boards/shields/clog/clog.keymap index 885404f7325..d00b00c9d5b 100644 --- a/app/boards/shields/clog/clog.keymap +++ b/app/boards/shields/clog/clog.keymap @@ -15,7 +15,7 @@ &mt { flavor = "tap-preferred"; - tapping_term_ms = <140>; + tapping-term-ms = <140>; }; / { diff --git a/app/boards/shields/hummingbird/hummingbird.keymap b/app/boards/shields/hummingbird/hummingbird.keymap index 9f1a24c2d03..0b9ee76bb02 100644 --- a/app/boards/shields/hummingbird/hummingbird.keymap +++ b/app/boards/shields/hummingbird/hummingbird.keymap @@ -20,7 +20,7 @@ hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; - tapping_term_ms = <225>; + tapping-term-ms = <225>; flavor = "tap-preferred"; bindings = <&kp>, <&kp>; }; diff --git a/app/boards/shields/osprette/osprette.keymap b/app/boards/shields/osprette/osprette.keymap index 9c9213b6ff2..77e62fa015b 100644 --- a/app/boards/shields/osprette/osprette.keymap +++ b/app/boards/shields/osprette/osprette.keymap @@ -15,7 +15,7 @@ &mt { flavor = "tap-preferred"; - tapping_term_ms = <140>; + tapping-term-ms = <140>; }; / { diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap index 4b57beac644..9198a5572f0 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep.keymap @@ -11,7 +11,7 @@ &mt { // flavor = "tap-preferred"; - // tapping_term_ms = <200>; + // tapping-term-ms = <200>; }; / { diff --git a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap index f9bda1cfd99..c820d191c2e 100644 --- a/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/balanced/6-retro-tap/native_posix_64.keymap @@ -8,7 +8,7 @@ compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "balanced"; - tapping_term_ms = <300>; + tapping-term-ms = <300>; bindings = <&kp>, <&kp>; retro-tap; }; diff --git a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap index 8aa29dec443..0b80ea95b3f 100644 --- a/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap +++ b/app/tests/hold-tap/hold-preferred/6-retro-tap/native_posix_64.keymap @@ -8,7 +8,7 @@ compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "hold-preferred"; - tapping_term_ms = <300>; + tapping-term-ms = <300>; bindings = <&kp>, <&kp>; retro-tap; }; From 6f2e19ff88efcd4ca9da2da4996d10f24d30b333 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:29:11 -0500 Subject: [PATCH 1009/1130] refactor: replace quick_tap_ms with quick-tap-ms * The underscore form of this property is deprecated. --- app/boards/arm/ferris/ferris_rev02.keymap | 2 +- app/boards/shields/hummingbird/hummingbird.keymap | 2 +- app/boards/shields/jian/jian.keymap | 4 ++-- app/tests/tap-dance/behavior_keymap.dtsi | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/boards/arm/ferris/ferris_rev02.keymap b/app/boards/arm/ferris/ferris_rev02.keymap index 9733570c273..b7668416b3c 100644 --- a/app/boards/arm/ferris/ferris_rev02.keymap +++ b/app/boards/arm/ferris/ferris_rev02.keymap @@ -14,7 +14,7 @@ #define SYM_L 4 // Using layer taps on thumbs, having quick tap as well helps w/ repeating space/backspace -< { quick_tap_ms = <200>; }; +< { quick-tap-ms = <200>; }; / { behaviors { diff --git a/app/boards/shields/hummingbird/hummingbird.keymap b/app/boards/shields/hummingbird/hummingbird.keymap index 0b9ee76bb02..c96071f6c25 100644 --- a/app/boards/shields/hummingbird/hummingbird.keymap +++ b/app/boards/shields/hummingbird/hummingbird.keymap @@ -13,7 +13,7 @@ #define SYM_L 3 // Using layer taps on thumbs, having quick tap as well helps w/ repeating space/backspace -< { quick_tap_ms = <200>; }; +< { quick-tap-ms = <200>; }; / { behaviors { diff --git a/app/boards/shields/jian/jian.keymap b/app/boards/shields/jian/jian.keymap index e8f7dcc87a1..bfd2918cc74 100644 --- a/app/boards/shields/jian/jian.keymap +++ b/app/boards/shields/jian/jian.keymap @@ -13,8 +13,8 @@ #define RSE 2 #define ADJ 3 -< { quick_tap_ms = <200>; }; -&mt { quick_tap_ms = <200>; }; +< { quick-tap-ms = <200>; }; +&mt { quick-tap-ms = <200>; }; / { keymap { diff --git a/app/tests/tap-dance/behavior_keymap.dtsi b/app/tests/tap-dance/behavior_keymap.dtsi index 66ffdf2e0cc..e45aba4001a 100644 --- a/app/tests/tap-dance/behavior_keymap.dtsi +++ b/app/tests/tap-dance/behavior_keymap.dtsi @@ -8,7 +8,7 @@ compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; tapping-term-ms = <200>; - quick_tap_ms = <0>; + quick-tap-ms = <0>; flavor = "tap-preferred"; bindings = <&kp>, <&kp>; }; From 8929355ac018ba293f53d6759c9f130d67751e09 Mon Sep 17 00:00:00 2001 From: Pablo Date: Mon, 18 Mar 2024 14:19:27 -0300 Subject: [PATCH 1010/1130] fix(keymap): Replace some keypad keycodes * Change KP_MULTIPLY to ASTRK in defaults keymap --- app/boards/arm/corneish_zen/corneish_zen.keymap | 6 +++--- app/boards/shields/corne/corne.keymap | 6 +++--- app/boards/shields/iris/iris.keymap | 8 ++++---- app/boards/shields/lily58/lily58.keymap | 8 ++++---- app/boards/shields/microdox/microdox.keymap | 6 +++--- app/boards/shields/sofle/sofle.keymap | 10 +++++----- .../splitkb_aurora_corne/splitkb_aurora_corne.keymap | 6 +++--- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/app/boards/arm/corneish_zen/corneish_zen.keymap b/app/boards/arm/corneish_zen/corneish_zen.keymap index 636c05135eb..06eee01c1fa 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.keymap +++ b/app/boards/arm/corneish_zen/corneish_zen.keymap @@ -58,9 +58,9 @@ // | SHFT | | | | | | | _ | + | { | } | "|" | ~ | // | GUI | | SPC | | ENT | | ALT | bindings = < -&kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC -&kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE -&kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE +&kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp BSPC +&kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE +&kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; diff --git a/app/boards/shields/corne/corne.keymap b/app/boards/shields/corne/corne.keymap index 0555cf41757..01350bd5b51 100644 --- a/app/boards/shields/corne/corne.keymap +++ b/app/boards/shields/corne/corne.keymap @@ -46,9 +46,9 @@ // | SHFT | | | | | | | _ | + | { | } | "|" | ~ | // | GUI | | SPC | | ENT | | ALT | bindings = < - &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC - &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE - &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp BSPC + &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE + &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; diff --git a/app/boards/shields/iris/iris.keymap b/app/boards/shields/iris/iris.keymap index 209c2277071..1846509f7e9 100644 --- a/app/boards/shields/iris/iris.keymap +++ b/app/boards/shields/iris/iris.keymap @@ -36,10 +36,10 @@ // | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | bindings = < -&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 -&kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp TILDE -&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp TILDE +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &trans &trans &trans &trans &trans >; }; diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index 7df3277f780..75a2e8ae4c2 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -39,10 +39,10 @@ // | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | | | bindings = < -&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 -&kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp TILDE -&trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &kp PIPE +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAVE &kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp TILDE +&trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &trans &trans &trans &trans &trans &trans &trans >; diff --git a/app/boards/shields/microdox/microdox.keymap b/app/boards/shields/microdox/microdox.keymap index c9298ff8cf4..34b2984bca8 100644 --- a/app/boards/shields/microdox/microdox.keymap +++ b/app/boards/shields/microdox/microdox.keymap @@ -46,9 +46,9 @@ // | | | | | | | _ | + | [ | ] | \ | // | GUI | | SPC | | ENT | | ALT | bindings = < - &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR - &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp PIPE - &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH + &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR + &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index ed9f0f4f42c..c9db56ceb4d 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -58,11 +58,11 @@ // | | = | - | + | { | } | | | | [ | ] | ; | : | \ | | // | | | | | | | | | | | | bindings = < -&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 -&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp F12 -&trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp PIPE -&trans &kp EQUAL &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp COLON &kp BSLH &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp F12 +&trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp PIPE +&trans &kp EQUAL &kp MINUS &kp PLUS &kp LBRC &kp RBRC &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp COLON &kp BSLH &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap index 0555cf41757..01350bd5b51 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne.keymap @@ -46,9 +46,9 @@ // | SHFT | | | | | | | _ | + | { | } | "|" | ~ | // | GUI | | SPC | | ENT | | ALT | bindings = < - &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp BSPC - &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE - &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp BSPC + &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE + &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT >; }; From 341534aa15ebcb1d42f917d2a530f21dd823cae2 Mon Sep 17 00:00:00 2001 From: Theo Lemay Date: Sun, 28 May 2023 23:59:48 -0700 Subject: [PATCH 1011/1130] feat(behaviors): lazy sticky keys --- .../behaviors/zmk,behavior-sticky-key.yaml | 2 + app/src/behaviors/behavior_sticky_key.c | 93 ++++++++++++++----- .../10-callum-mods/keycode_events.snapshot | 2 +- .../11-lazy-timeout-during/events.patterns | 1 + .../keycode_events.snapshot | 6 ++ .../native_posix_64.keymap | 37 ++++++++ .../11-lazy-timeout/events.patterns | 1 + .../11-lazy-timeout/keycode_events.snapshot | 4 + .../11-lazy-timeout/native_posix_64.keymap | 43 +++++++++ app/tests/sticky-keys/11-lazy/events.patterns | 1 + .../11-lazy/keycode_events.snapshot | 16 ++++ .../11-lazy/native_posix_64.keymap | 67 +++++++++++++ .../keycode_events.snapshot | 4 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 2 +- .../keycode_events.snapshot | 4 +- docs/docs/behaviors/sticky-key.md | 6 ++ docs/docs/config/behaviors.md | 1 + 18 files changed, 260 insertions(+), 32 deletions(-) create mode 100644 app/tests/sticky-keys/11-lazy-timeout-during/events.patterns create mode 100644 app/tests/sticky-keys/11-lazy-timeout-during/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap create mode 100644 app/tests/sticky-keys/11-lazy-timeout/events.patterns create mode 100644 app/tests/sticky-keys/11-lazy-timeout/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap create mode 100644 app/tests/sticky-keys/11-lazy/events.patterns create mode 100644 app/tests/sticky-keys/11-lazy/keycode_events.snapshot create mode 100644 app/tests/sticky-keys/11-lazy/native_posix_64.keymap diff --git a/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml b/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml index 172f20a2b18..a0e52879829 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml @@ -16,5 +16,7 @@ properties: required: true quick-release: type: boolean + lazy: + type: boolean ignore-modifiers: type: boolean diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 05f6846be12..193a2370699 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -33,6 +33,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct behavior_sticky_key_config { uint32_t release_after_ms; bool quick_release; + bool lazy; bool ignore_modifiers; struct zmk_behavior_binding behavior; }; @@ -146,8 +147,11 @@ static int on_sticky_key_binding_pressed(struct zmk_behavior_binding *binding, return ZMK_BEHAVIOR_OPAQUE; } - press_sticky_key_behavior(sticky_key, event.timestamp); LOG_DBG("%d new sticky_key", event.position); + if (!sticky_key->config->lazy) { + // press the key now if it's not lazy + press_sticky_key_behavior(sticky_key, event.timestamp); + } return ZMK_BEHAVIOR_OPAQUE; } @@ -191,14 +195,21 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { return ZMK_EV_EVENT_BUBBLE; } - // keep track whether the event has been reraised, so we only reraise it once - bool event_reraised = false; + // we want to make sure every sticky key is given a chance to lazy press their behavior before + // the event gets reraised, and release their behavior after the event is reraised, so we keep + // track of them. this allows us to ensure the sticky key is pressed and released "around" the + // other key, especially in the case of lazy keys. + struct active_sticky_key *sticky_keys_to_press_before_reraise[ZMK_BHV_STICKY_KEY_MAX_HELD]; + struct active_sticky_key *sticky_keys_to_release_after_reraise[ZMK_BHV_STICKY_KEY_MAX_HELD]; // reraising the event frees it, so make a copy of any event data we might // need after it's been freed. const struct zmk_keycode_state_changed ev_copy = *ev; for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { + sticky_keys_to_press_before_reraise[i] = NULL; + sticky_keys_to_release_after_reraise[i] = NULL; + struct active_sticky_key *sticky_key = &active_sticky_keys[i]; if (sticky_key->position == ZMK_BHV_STICKY_KEY_POSITION_FREE) { continue; @@ -212,14 +223,6 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { continue; } - // If this event was queued, the timer may be triggered late or not at all. - // Release the sticky key if the timer should've run out in the meantime. - if (sticky_key->release_at != 0 && ev_copy.timestamp > sticky_key->release_at) { - stop_timer(sticky_key); - release_sticky_key_behavior(sticky_key, sticky_key->release_at); - continue; - } - if (ev_copy.state) { // key down if (sticky_key->config->ignore_modifiers && is_mod(ev_copy.usage_page, ev_copy.keycode)) { @@ -231,17 +234,30 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { // this sticky key is already in use for a keycode continue; } + + // we don't want the timer to release the sticky key before the other key is released + stop_timer(sticky_key); + + // If this event was queued, the timer may be triggered late or not at all. + // Release the sticky key if the timer should've run out in the meantime. + if (sticky_key->release_at != 0 && ev_copy.timestamp > sticky_key->release_at) { + // If the key is lazy, a release is not needed on timeout + if (sticky_key->config->lazy) { + clear_sticky_key(sticky_key); + } else { + release_sticky_key_behavior(sticky_key, sticky_key->release_at); + } + continue; + } + + if (sticky_key->config->lazy) { + // if the sticky key is lazy, we need to press it before the event is reraised + sticky_keys_to_press_before_reraise[i] = sticky_key; + } if (sticky_key->timer_started) { - stop_timer(sticky_key); if (sticky_key->config->quick_release) { // immediately release the sticky key after the key press is handled. - if (!event_reraised) { - struct zmk_keycode_state_changed_event dupe_ev = - copy_raised_zmk_keycode_state_changed(ev); - ZMK_EVENT_RAISE_AFTER(dupe_ev, behavior_sticky_key); - event_reraised = true; - } - release_sticky_key_behavior(sticky_key, ev_copy.timestamp); + sticky_keys_to_release_after_reraise[i] = sticky_key; } } sticky_key->modified_key_usage_page = ev_copy.usage_page; @@ -251,14 +267,35 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { sticky_key->modified_key_usage_page == ev_copy.usage_page && sticky_key->modified_key_keycode == ev_copy.keycode) { stop_timer(sticky_key); - release_sticky_key_behavior(sticky_key, ev_copy.timestamp); + sticky_keys_to_release_after_reraise[i] = sticky_key; } } } - if (event_reraised) { - return ZMK_EV_EVENT_CAPTURED; + + // give each sticky key a chance to press their behavior before the event is reraised + for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { + struct active_sticky_key *sticky_key = sticky_keys_to_press_before_reraise[i]; + if (sticky_key) { + press_sticky_key_behavior(sticky_key, ev_copy.timestamp); + } } - return ZMK_EV_EVENT_BUBBLE; + // give each sticky key a chance to release their behavior after the event is reraised, lazily + // reraising. keep track whether the event has been reraised so we only reraise it once + bool event_reraised = false; + for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { + struct active_sticky_key *sticky_key = sticky_keys_to_release_after_reraise[i]; + if (sticky_key) { + if (!event_reraised) { + struct zmk_keycode_state_changed_event dupe_ev = + copy_raised_zmk_keycode_state_changed(ev); + ZMK_EVENT_RAISE_AFTER(dupe_ev, behavior_sticky_key); + event_reraised = true; + } + release_sticky_key_behavior(sticky_key, ev_copy.timestamp); + } + } + + return event_reraised ? ZMK_EV_EVENT_CAPTURED : ZMK_EV_EVENT_BUBBLE; } void behavior_sticky_key_timer_handler(struct k_work *item) { @@ -271,7 +308,12 @@ void behavior_sticky_key_timer_handler(struct k_work *item) { if (sticky_key->timer_cancelled) { sticky_key->timer_cancelled = false; } else { - release_sticky_key_behavior(sticky_key, sticky_key->release_at); + // If the key is lazy, a release is not needed on timeout + if (sticky_key->config->lazy) { + clear_sticky_key(sticky_key); + } else { + release_sticky_key_behavior(sticky_key, sticky_key->release_at); + } } } @@ -295,8 +337,9 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; static struct behavior_sticky_key_config behavior_sticky_key_config_##n = { \ .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ .release_after_ms = DT_INST_PROP(n, release_after_ms), \ - .ignore_modifiers = DT_INST_PROP(n, ignore_modifiers), \ .quick_release = DT_INST_PROP(n, quick_release), \ + .lazy = DT_INST_PROP(n, lazy), \ + .ignore_modifiers = DT_INST_PROP(n, ignore_modifiers), \ }; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_sticky_key_init, NULL, &behavior_sticky_key_data, \ &behavior_sticky_key_config_##n, POST_KERNEL, \ diff --git a/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot b/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot index 3e46e581165..29be00ff5ac 100644 --- a/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot +++ b/app/tests/sticky-keys/10-callum-mods/keycode_events.snapshot @@ -1,8 +1,8 @@ pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/11-lazy-timeout-during/events.patterns b/app/tests/sticky-keys/11-lazy-timeout-during/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy-timeout-during/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/sticky-keys/11-lazy-timeout-during/keycode_events.snapshot b/app/tests/sticky-keys/11-lazy-timeout-during/keycode_events.snapshot new file mode 100644 index 00000000000..8fc9315f55d --- /dev/null +++ b/app/tests/sticky-keys/11-lazy-timeout-during/keycode_events.snapshot @@ -0,0 +1,6 @@ +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap new file mode 100644 index 00000000000..fb60ba41ed9 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap @@ -0,0 +1,37 @@ +#include +#include +#include + +/* this test ensures that timing out while the other key is being held results in correct behavior */ + +&sk { + lazy; + release-after-ms = <50>; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sk LEFT_CONTROL &kp A + &sk LEFT_SHIFT &sk LEFT_ALT>; + }; + }; +}; + +&kscan { + events = < + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap A */ + ZMK_MOCK_PRESS(0,1,60) + ZMK_MOCK_RELEASE(0,1,10) + /* tap A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; diff --git a/app/tests/sticky-keys/11-lazy-timeout/events.patterns b/app/tests/sticky-keys/11-lazy-timeout/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy-timeout/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/sticky-keys/11-lazy-timeout/keycode_events.snapshot b/app/tests/sticky-keys/11-lazy-timeout/keycode_events.snapshot new file mode 100644 index 00000000000..4d5604616b6 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy-timeout/keycode_events.snapshot @@ -0,0 +1,4 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap new file mode 100644 index 00000000000..d6b34149001 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap @@ -0,0 +1,43 @@ +#include +#include +#include + +/* this test ensures that lazy sticky keys don't emit anything on timeout */ + +&sk { + lazy; + release-after-ms = <50>; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sk LEFT_CONTROL &kp A + &sk LEFT_SHIFT &sk LEFT_ALT>; + }; + }; +}; + +&kscan { + events = < + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,60) + /* tap sk LEFT_ALT */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,60) + /* tap A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap A */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; diff --git a/app/tests/sticky-keys/11-lazy/events.patterns b/app/tests/sticky-keys/11-lazy/events.patterns new file mode 100644 index 00000000000..b1342af4d97 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/sticky-keys/11-lazy/keycode_events.snapshot b/app/tests/sticky-keys/11-lazy/keycode_events.snapshot new file mode 100644 index 00000000000..1c1f86140b0 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy/keycode_events.snapshot @@ -0,0 +1,16 @@ +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x1D implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x1D implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/11-lazy/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy/native_posix_64.keymap new file mode 100644 index 00000000000..4eea1fb9654 --- /dev/null +++ b/app/tests/sticky-keys/11-lazy/native_posix_64.keymap @@ -0,0 +1,67 @@ +#include +#include +#include + +/* this test verifies that lazy sticky keys work similarly to regular sticky keys, and includes cases from 10-callum-mods and 8-lsk-osk. + the only difference is that the lazy key does not exit the sticky layer */ + +&sk { + lazy; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &sk LEFT_CONTROL &sl 1 + &kp A &mo 1>; + }; + + lower_layer { + bindings = < + &sk LEFT_CONTROL &kp X + &sk LEFT_SHIFT &kp Z>; + }; + }; +}; + +&kscan { + events = < + /* tap LEFT_CONTROL on base layer */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap A */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + + /* tap sl lower_layer */ + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap Z */ + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + + /* press mo lower_layer */ + ZMK_MOCK_PRESS(1,1,10) + /* tap sk LEFT_CONTROL */ + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* tap sk LEFT_SHIFT */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* release mo lower_layer */ + ZMK_MOCK_RELEASE(1,1,10) + /* tap A (with left control and left shift enabled) */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + /* tap A (no sticky keys anymore) */ + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/keycode_events.snapshot b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/keycode_events.snapshot index addbca8c155..1b4c078ced3 100644 --- a/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/keycode_events.snapshot +++ b/app/tests/sticky-keys/2-os-dn-up-kcdn-kcup/keycode_events.snapshot @@ -1,8 +1,8 @@ pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/keycode_events.snapshot b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/keycode_events.snapshot index 6e004ec2b46..1b091a6a144 100644 --- a/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/keycode_events.snapshot +++ b/app/tests/sticky-keys/4-os-dn-up-kcdn-timer-kcup/keycode_events.snapshot @@ -1,4 +1,4 @@ pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/keycode_events.snapshot b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/keycode_events.snapshot index 3c757bbb2f2..2b1619b4515 100644 --- a/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/keycode_events.snapshot +++ b/app/tests/sticky-keys/7-os-dn-up-kc1dn-kc2dn-kc1up-kc2up/keycode_events.snapshot @@ -1,6 +1,6 @@ pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot b/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot index f1aa915bf05..0c4054f7719 100644 --- a/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot +++ b/app/tests/sticky-keys/8-lsk-osk-combination/keycode_events.snapshot @@ -1,8 +1,8 @@ pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 -released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0xE0 implicit_mods 0x00 explicit_mods 0x00 diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index f40bb521e10..8c3962f5450 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -34,6 +34,12 @@ By default, sticky keys stay pressed for a second if you don't press any other k Some typists may find that using a sticky shift key interspersed with rapid typing results in two or more capitalized letters instead of one. This happens as the sticky key is active until the next key is released, under which other keys may be pressed and will receive the modifier. You can enable the `quick-release` setting to instead deactivate the sticky key on the next key being pressed, as opposed to released. +#### `lazy` + +By default, sticky keys are activated on press until another key is pressed. You can enable the `lazy` setting to instead activate the sticky key right _before_ the other key is pressed. This is useful for mouse interaction or situations where you don't want the host to see anything during a sticky-key timeout, for example `&sk LGUI`, which can trigger a menu if pressed alone. + +Note that tapping a lazy sticky key will not trigger other behaviors such as the release of other sticky keys or layers. If you want to use a lazy sticky key to activate the release of a sticky layer, potential solutions include wrappping the sticky key in a simple macro which presses the sticky behavior around the sticky key press, doing the same with `&mo LAYER`, or triggering a tap of some key like `K_CANCEL` on sticky key press. + #### `ignore-modifiers` This setting is enabled by default. It ensures that if a sticky key modifier is pressed before a previously pressed sticky key is released, the modifiers will get combined so you can add more sticky keys or press a regular key to apply the modifiers. This is to accommodate _callum-style mods_ where you are prone to rolling sticky keys. If you want sticky key modifiers to only chain after release, you can disable this setting. Please note that activating multiple modifiers via [modifier functions](https://zmk.dev/docs/codes/modifiers#modifier-functions) such as `&sk LS(LALT)`, require `ignore-modifiers` enabled in order to function properly. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index f8d2fe39eb6..1a5b899ab97 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -230,6 +230,7 @@ Applies to: `compatible = "zmk,behavior-sticky-key"` | `bindings` | phandle array | A behavior (without parameters) to trigger | | | `release-after-ms` | int | Releases the key after this many milliseconds if no other key is pressed | 1000 | | `quick-release` | bool | Release the sticky key on the next key press instead of release | false | +| `lazy` | bool | Wait until the next key press to activate the sticky key behavior | false | | `ignore-modifiers` | bool | If enabled, pressing a modifier key does not cancel the sticky key | true | This behavior forwards the one parameter it receives to the parameter of the behavior specified in `bindings`. From 94d9d837e3674a7127190a00361c899197a66ba4 Mon Sep 17 00:00:00 2001 From: Theo Lemay Date: Mon, 18 Dec 2023 17:34:42 -0500 Subject: [PATCH 1012/1130] refactor: extract duplicate logic --- app/src/behaviors/behavior_sticky_key.c | 47 +++++++++++++------------ 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 193a2370699..2c279c3be44 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -121,6 +121,15 @@ static inline int release_sticky_key_behavior(struct active_sticky_key *sticky_k return behavior_keymap_binding_released(&binding, event); } +static inline int on_sticky_key_timeout(struct active_sticky_key *sticky_key) { + // If the key is lazy, a release is not needed on timeout + if (sticky_key->config->lazy) { + clear_sticky_key(sticky_key); + } else { + release_sticky_key_behavior(sticky_key, sticky_key->release_at); + } +} + static int stop_timer(struct active_sticky_key *sticky_key) { int timer_cancel_result = k_work_cancel_delayable(&sticky_key->release_timer); if (timer_cancel_result == -EINPROGRESS) { @@ -241,12 +250,7 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { // If this event was queued, the timer may be triggered late or not at all. // Release the sticky key if the timer should've run out in the meantime. if (sticky_key->release_at != 0 && ev_copy.timestamp > sticky_key->release_at) { - // If the key is lazy, a release is not needed on timeout - if (sticky_key->config->lazy) { - clear_sticky_key(sticky_key); - } else { - release_sticky_key_behavior(sticky_key, sticky_key->release_at); - } + on_sticky_key_timeout(sticky_key); continue; } @@ -275,24 +279,28 @@ static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh) { // give each sticky key a chance to press their behavior before the event is reraised for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { struct active_sticky_key *sticky_key = sticky_keys_to_press_before_reraise[i]; - if (sticky_key) { - press_sticky_key_behavior(sticky_key, ev_copy.timestamp); + if (!sticky_key) { + continue; } + + press_sticky_key_behavior(sticky_key, ev_copy.timestamp); } // give each sticky key a chance to release their behavior after the event is reraised, lazily // reraising. keep track whether the event has been reraised so we only reraise it once bool event_reraised = false; for (int i = 0; i < ZMK_BHV_STICKY_KEY_MAX_HELD; i++) { struct active_sticky_key *sticky_key = sticky_keys_to_release_after_reraise[i]; - if (sticky_key) { - if (!event_reraised) { - struct zmk_keycode_state_changed_event dupe_ev = - copy_raised_zmk_keycode_state_changed(ev); - ZMK_EVENT_RAISE_AFTER(dupe_ev, behavior_sticky_key); - event_reraised = true; - } - release_sticky_key_behavior(sticky_key, ev_copy.timestamp); + if (!sticky_key) { + continue; } + + if (!event_reraised) { + struct zmk_keycode_state_changed_event dupe_ev = + copy_raised_zmk_keycode_state_changed(ev); + ZMK_EVENT_RAISE_AFTER(dupe_ev, behavior_sticky_key); + event_reraised = true; + } + release_sticky_key_behavior(sticky_key, ev_copy.timestamp); } return event_reraised ? ZMK_EV_EVENT_CAPTURED : ZMK_EV_EVENT_BUBBLE; @@ -308,12 +316,7 @@ void behavior_sticky_key_timer_handler(struct k_work *item) { if (sticky_key->timer_cancelled) { sticky_key->timer_cancelled = false; } else { - // If the key is lazy, a release is not needed on timeout - if (sticky_key->config->lazy) { - clear_sticky_key(sticky_key); - } else { - release_sticky_key_behavior(sticky_key, sticky_key->release_at); - } + on_sticky_key_timeout(sticky_key); } } From af7e4198ae3cd2fab16320ebb0ee3a5215e0f674 Mon Sep 17 00:00:00 2001 From: Theo Lemay Date: Mon, 18 Dec 2023 21:31:29 -0500 Subject: [PATCH 1013/1130] chore: remove label in test --- .../sticky-keys/11-lazy-timeout-during/native_posix_64.keymap | 1 - app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap | 1 - app/tests/sticky-keys/11-lazy/native_posix_64.keymap | 1 - 3 files changed, 3 deletions(-) diff --git a/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap index fb60ba41ed9..75d997cb34c 100644 --- a/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap +++ b/app/tests/sticky-keys/11-lazy-timeout-during/native_posix_64.keymap @@ -12,7 +12,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap index d6b34149001..05db46c84ac 100644 --- a/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap +++ b/app/tests/sticky-keys/11-lazy-timeout/native_posix_64.keymap @@ -12,7 +12,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < diff --git a/app/tests/sticky-keys/11-lazy/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy/native_posix_64.keymap index 4eea1fb9654..193354e297b 100644 --- a/app/tests/sticky-keys/11-lazy/native_posix_64.keymap +++ b/app/tests/sticky-keys/11-lazy/native_posix_64.keymap @@ -12,7 +12,6 @@ / { keymap { compatible = "zmk,keymap"; - label ="Default keymap"; default_layer { bindings = < From ce743f2b3566d198e06cb3afe3d335f90f377244 Mon Sep 17 00:00:00 2001 From: Theo Lemay <16546293+theol0403@users.noreply.github.com> Date: Fri, 29 Dec 2023 23:07:19 -0500 Subject: [PATCH 1014/1130] chore: fix whitespace --- app/tests/sticky-keys/11-lazy/native_posix_64.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/tests/sticky-keys/11-lazy/native_posix_64.keymap b/app/tests/sticky-keys/11-lazy/native_posix_64.keymap index 193354e297b..8031987265c 100644 --- a/app/tests/sticky-keys/11-lazy/native_posix_64.keymap +++ b/app/tests/sticky-keys/11-lazy/native_posix_64.keymap @@ -2,7 +2,7 @@ #include #include -/* this test verifies that lazy sticky keys work similarly to regular sticky keys, and includes cases from 10-callum-mods and 8-lsk-osk. +/* this test verifies that lazy sticky keys work similarly to regular sticky keys, and includes cases from 10-callum-mods and 8-lsk-osk. the only difference is that the lazy key does not exit the sticky layer */ &sk { From 736c5fb46eeb570e81a3f1dd0a6dc10b17b31769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Thu, 7 Mar 2024 14:51:47 +0800 Subject: [PATCH 1015/1130] feat(docs): Add a note on macOS v14.3 file copy error message --- docs/docs/troubleshooting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 1f3c1706e34..808808c4ca7 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -27,6 +27,10 @@ Variations of the warnings shown below occur when flashing the `.uf2` macOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. Issue is fixed in macOS version 13.1. +### macOS Sonoma error + +macOS 14.x (Sonoma) Finder may report an "Error code -36" when copying `.uf2` files into microcontrollers. A similar "fcopyfile failed: Input/output error" will also be reported when copying is performed using Terminal command line. These errors can be ignored because they are reported when the bootloader disconnects automatically after the uf2 file is copied successfully. + ### CMake Error An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. From 828943156ab5619f54be629dcee7c0ffc74a22be Mon Sep 17 00:00:00 2001 From: Theo Lemay <16546293+theol0403@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:34:45 -0400 Subject: [PATCH 1016/1130] fix(docs): Fix hold-tap info callout (#2211) The hold-while-undecided callout does not properly render in the docs. This fixes it. --- docs/docs/behaviors/hold-tap.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behaviors/hold-tap.mdx b/docs/docs/behaviors/hold-tap.mdx index 191e820dd43..5217cf79e29 100644 --- a/docs/docs/behaviors/hold-tap.mdx +++ b/docs/docs/behaviors/hold-tap.mdx @@ -87,7 +87,7 @@ For example, if you press `&mt LEFT_SHIFT A` and then release it without pressin If enabled, the hold behavior will immediately be held on hold-tap press, and will release before the behavior is sent in the event the hold-tap resolves into a tap. With most modifiers this will not affect typing, and is useful for using modifiers with the mouse. -:::note Alt/Win/Cmd behavior +:::info[Alt/Win/Cmd behavior] In some applications/desktop environments, pressing Alt keycodes by itself will have its own behavior like activate a menu and Gui keycodes will bring up the start menu or an application launcher. ::: From 1f7cd7a107789055bf58ac6c01af502773cef76a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:49:16 +0800 Subject: [PATCH 1017/1130] feat(docs): Add troubleshooting section for empty_file error --- docs/docs/troubleshooting.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 808808c4ca7..2e9ab4dcb80 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -56,6 +56,14 @@ A `devicetree error` followed by a reference to the line number on `.k devicetree error: /__w/zmk-config/zmk-config/config/cradio.keymap:109 (column 4): parse error: expected ';' or ',' ``` +A `devicetree error` followed by an `empty_file.c` reference with `lacks #binding-cells` string indicates possible problems with improper parameters for specific bindings: + +``` +devicetree error: lacks #binding-cells +``` + +This error can be triggered by incorrect binding syntax such as `&kp BT_SEL 0` instead of `&bt BT_SEL 0`. + #### devicetree_unfixed.h error A `devicetree_unfixed.h` error that follows with an "undeclared here" string indicates a problem with key bindings, like behavior nodes (e.g. `&kp` or `&mt`) with incorrect number of parameters: From 3a3eed2960b9388b8554eb778d56dfd99a477962 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 19 Mar 2024 10:50:04 -0700 Subject: [PATCH 1018/1130] fix: Add settings reset on start init priority. * Add a dedicated settings reset on start init priority and default it to lower priority (high number) than default FLASH_INIT_PRIORITY to be sure flash is initialized before we open the area. --- app/Kconfig | 13 +++++++++++++ app/src/settings/reset_settings_on_start.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 3f797abd41d..c430bcb2d32 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -568,6 +568,19 @@ if SETTINGS config ZMK_SETTINGS_RESET_ON_START bool "Delete all persistent settings when the keyboard boots" +if ZMK_SETTINGS_RESET_ON_START + +config ZMK_SETTINGS_RESET_ON_START_INIT_PRIORITY + int "Settings Reset ON Start Initialization Priority" + default 60 + help + Initialization priority for the settings reset on start. Must be lower priority/ + higher value than FLASH_INIT_PRIORITY if using the NVS/Flash settings backend. + + +endif + + config ZMK_SETTINGS_SAVE_DEBOUNCE int "Milliseconds to debounce settings saves" default 60000 diff --git a/app/src/settings/reset_settings_on_start.c b/app/src/settings/reset_settings_on_start.c index 47f5e8f2259..0f6d4fae9fb 100644 --- a/app/src/settings/reset_settings_on_start.c +++ b/app/src/settings/reset_settings_on_start.c @@ -10,4 +10,4 @@ // Reset after the kernel is initialized but before any application code to // ensure settings are cleared before anything tries to use them. -SYS_INIT(zmk_settings_erase, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +SYS_INIT(zmk_settings_erase, POST_KERNEL, CONFIG_ZMK_SETTINGS_RESET_ON_START_INIT_PRIORITY); From 931a36ff4ad0b30c8165024bbfc0286d05b74b53 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Wed, 28 Feb 2024 00:09:27 -0800 Subject: [PATCH 1019/1130] feat(docs): Add a note on using BT with dual boot systems --- docs/docs/features/bluetooth.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index 1f2d795527a..28ba21367d1 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -69,6 +69,11 @@ This setting can also improve the connection strength between the keyboard halve If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. +### Issues with dual boot setups + +Since ZMK associates pairing/bond keys with hardware addresses of hosts, you cannot pair to two different operating systems in a dual boot system at the same time. +While you can find [documented workarounds](https://wiki.archlinux.org/title/bluetooth#Dual_boot_pairing) that involve copying pairing keys across operating systems and use both OS with a single profile, they can be fairly involved and should be followed with caution. + ### macOS Connected But Not Working If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding issue, macOS may report the keyboard as connected, but fail to actually work. If this occurs: From 44358798d3dae71cc1af118e5a5bc5792f9f7761 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 15 Mar 2024 21:00:37 +0000 Subject: [PATCH 1020/1130] feat: Add ability to fetch battery voltage. * To be able to use the Zephyr `voltage-divider` driver, add a mode for fetching raw voltage from the sensor and do state of charge calculation outside of the driver. --- app/Kconfig | 14 ++++++++++++++ app/src/battery.c | 42 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index c430bcb2d32..21e97ac6354 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -383,6 +383,20 @@ config ZMK_BATTERY_REPORTING select ZMK_LOW_PRIORITY_WORK_QUEUE imply BT_BAS if ZMK_BLE +if ZMK_BATTERY_REPORTING + +choice ZMK_BATTERY_REPORTING_FETCH_MODE + prompt "Battery Reporting Fetch Mode" + +config ZMK_BATTERY_REPORTING_FETCH_MODE_STATE_OF_CHARGE + bool "State of charge" + +config ZMK_BATTERY_REPORTING_FETCH_MODE_LITHIUM_VOLTAGE + bool "Lithium Voltage" + +endchoice +endif + config ZMK_IDLE_TIMEOUT int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" default 30000 diff --git a/app/src/battery.c b/app/src/battery.c index 1295f822486..ae79d5f794c 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -34,11 +34,29 @@ static const struct device *const battery = DEVICE_DT_GET(DT_CHOSEN(zmk_battery) static const struct device *battery; #endif +#if IS_ENABLED(CONFIG_ZMK_BATTERY_REPORTING_FETCH_MODE_LITHIUM_VOLTAGE) +static uint8_t lithium_ion_mv_to_pct(int16_t bat_mv) { + // Simple linear approximation of a battery based off adafruit's discharge graph: + // https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages + + if (bat_mv >= 4200) { + return 100; + } else if (bat_mv <= 3450) { + return 0; + } + + return bat_mv * 2 / 15 - 459; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BATTERY_REPORTING_FETCH_MODE_LITHIUM_VOLTAGE) + static int zmk_battery_update(const struct device *battery) { struct sensor_value state_of_charge; + int rc; - int rc = sensor_sample_fetch_chan(battery, SENSOR_CHAN_GAUGE_STATE_OF_CHARGE); +#if IS_ENABLED(CONFIG_ZMK_BATTERY_REPORTING_FETCH_MODE_STATE_OF_CHARGE) + rc = sensor_sample_fetch_chan(battery, SENSOR_CHAN_GAUGE_STATE_OF_CHARGE); if (rc != 0) { LOG_DBG("Failed to fetch battery values: %d", rc); return rc; @@ -50,6 +68,28 @@ static int zmk_battery_update(const struct device *battery) { LOG_DBG("Failed to get battery state of charge: %d", rc); return rc; } +#elif IS_ENABLED(CONFIG_ZMK_BATTERY_REPORTING_FETCH_MODE_LITHIUM_VOLTAGE) + rc = sensor_sample_fetch_chan(battery, SENSOR_CHAN_VOLTAGE); + if (rc != 0) { + LOG_DBG("Failed to fetch battery values: %d", rc); + return rc; + } + + struct sensor_value voltage; + rc = sensor_channel_get(battery, SENSOR_CHAN_VOLTAGE, &voltage); + + if (rc != 0) { + LOG_DBG("Failed to get battery voltage: %d", rc); + return rc; + } + + uint16_t mv = voltage.val1 * 1000 + (voltage.val2 / 1000); + state_of_charge.val1 = lithium_ion_mv_to_pct(mv); + + LOG_DBG("State of change %d from %d mv", state_of_charge.val1, mv); +#else +#error "Not a supported reporting fetch mode" +#endif if (last_state_of_charge != state_of_charge.val1) { last_state_of_charge = state_of_charge.val1; From f2d8b9b0a31398d9880de6a960b41e3603b3b837 Mon Sep 17 00:00:00 2001 From: Thomas Huber <113915837+huber-th@users.noreply.github.com> Date: Wed, 20 Mar 2024 07:18:44 -0700 Subject: [PATCH 1021/1130] feat(docs): Add Behavior overview page Co-authored-by: Cem Aksoylar --- docs/docs/behaviors/index.mdx | 82 +++++++++++++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 83 insertions(+) create mode 100644 docs/docs/behaviors/index.mdx diff --git a/docs/docs/behaviors/index.mdx b/docs/docs/behaviors/index.mdx new file mode 100644 index 00000000000..32f4b29a97f --- /dev/null +++ b/docs/docs/behaviors/index.mdx @@ -0,0 +1,82 @@ +--- +title: Behavior Overview +sidebar_label: Overview +--- + +# Behaviors Overview + +"Behaviors" are bindings that are assigned to and triggered by key positions on keymap layers, sensors (like an encoder) or combos. They describe what happens e.g. when a certain key position is pressed or released, or an encoder triggers a rotation event. They can also be recursively invoked by other behaviors, such as macros. + +Below is a summary of pre-defined behavior bindings and user-definable behaviors available in ZMK, with references to documentation pages describing them. + +## Key press behaviors + +| Binding | Behavior | Description | +| ------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `&kp` | [Key Press](key-press.md) | Send keycodes to the connected host when a key is pressed | +| `&mt` | [Mod Tap](mod-tap.md) | Sends a different key press depending on whether a key is held or tapped | +| `&kt` | [Key Toggle](key-toggle.md) | Toggles the press of a key. If the key is not currently pressed, key toggle will press it, holding it until the key toggle is pressed again or the key is released in some other way. If the key is currently pressed, key toggle will release it | +| `&sk` | [Sticky Key](sticky-key.md) | Stays pressed until another key is pressed, then is released. It is often used for modifier keys like shift, which allows typing capital letters without holding it down | +| `&gresc` | [Grave Escape](mod-morph.md#behavior-binding) | Sends Grave Accent `` ` `` keycode if shift or GUI is held, sends Escape keycode otherwise | +| `&caps_word` | [Caps Word](caps-word.md) | Behaves similar to caps lock, but automatically deactivates when any key not in a continue list is pressed, or if the caps word key is pressed again | +| `&key_repeat` | [Key Repeat](key-repeat.md) | Sends again whatever keycode was last sent | + +## Miscellaneous behaviors + +| Binding | Behavior | Description | +| -------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `&trans` | [Transparent](misc.md#transparent) | Passes the key press down to the next active layer in the stack for processing | +| `&none` | [None](misc.md#none) | Swallows and stops the key press, no keycode will be sent nor will the key press be passed down to the next active layer in the stack | + +## Layer navigation behaviors + +| Binding | Behavior | Description | +| ------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `&mo` | [Momentary Layer](layers.md#momentary-layer) | Enables a layer while a key is pressed | +| `<` | [Layer-tap](layers.md#layer-tap) | Enables a layer when a key is held, and outputs a key press when the key is only tapped for a short time | +| `&to` | [To Layer](layers.md#to-layer) | Enables a layer and disables all other layers except the default layer | +| `&tog` | [Toggle Layer](layers.md#toggle-layer) | Enables a layer until the layer is manually disabled | +| `&sl` | [Sticky Layer](sticky-layer.md) | Activates a layer until another key is pressed, then deactivates it | + +## Mouse emulation behaviors + +| Binding | Behavior | Description | +| ------- | ----------------------------------------------------------- | ------------------------------- | +| `&mkp` | [Mouse Button Press](mouse-emulation.md#mouse-button-press) | Emulates pressing mouse buttons | + +## Reset behaviors + +| Binding | Behavior | Description | +| ------------- | --------------------------------- | ---------------------------------------------------------------------------------------- | +| `&sys_reset` | [Reset](reset.md#reset) | Resets the keyboard and re-runs the firmware flashed to the device | +| `&bootloader` | [Bootloader](reset.md#bootloader) | Resets the keyboard and puts it into bootloader mode, allowing you to flash new firmware | + +## Output selection behaviors + +| Binding | Behavior | Description | +| ------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `&bt` | [Bluetooth](bluetooth.md#bluetooth-behavior) | Completes a bluetooth action given on press, for example switching between devices | +| `&out` | [Output Selection](outputs.md#output-selection-behavior) | Allows selecting whether output is sent to the USB or bluetooth connection when both are connected | + +## Lighting behaviors + +| Binding | Behavior | Description | +| --------- | ---------------------------------------------- | ---------------------------------------------------------------------------- | +| `&rgb_ug` | [RGB Underglow](underglow.md#behavior-binding) | Controls the RGB underglow, usually placed underneath the keyboard | +| `&bl` | [Backlight](backlight.md#behavior-binding) | Controls the keyboard backlighting, usually placed through or under switches | + +## Power management behaviors + +| Binding | Behavior | Description | +| ------------ | --------------------------------------------- | --------------------------------------------------------------- | +| `&ext_power` | [Power management](power.md#behavior-binding) | Allows enabling or disabling the VCC power output to save power | + +## User-defined behaviors + +| Behavior | Description | +| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [Macros](macros.md) | Allows configuring a list of other behaviors to invoke when the key is pressed and/or released | +| [Hold-Tap](hold-tap.mdx) | Invokes different behaviors depending on key press duration or interrupting keys. This is the basis for [layer-tap](layers.md#layer-tap) and [mod-tap](mod-tap.md) | +| [Tap Dance](tap-dance.mdx) | Invokes different behaviors corresponding to how many times a key is pressed | +| [Mod-Morph](mod-morph.md) | Invokes different behaviors depending on whether a specified modifier is held during a key press | +| [Sensor Rotation](sensor-rotate.md) | Invokes different behaviors depending on whether a sensor is rotated clockwise or counter-clockwise | diff --git a/docs/sidebars.js b/docs/sidebars.js index 284eb09b38e..37613d568a0 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -22,6 +22,7 @@ module.exports = { "features/beta-testing", ], Behaviors: [ + "behaviors/index", "behaviors/key-press", "behaviors/layers", "behaviors/misc", From c684cee76f6732d1da3dc23564b64e9a1ea08671 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 24 Mar 2024 17:58:20 -0700 Subject: [PATCH 1022/1130] refactor(docs): Refer to overview page for behaviors --- docs/docs/development/new-behavior.mdx | 2 +- docs/docs/development/new-shield.mdx | 2 +- docs/docs/features/keymaps.mdx | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index cabc417f8d3..914abf52063 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -8,7 +8,7 @@ import TabItem from "@theme/TabItem"; ## Overview -This document outlines how to develop a behavior for ZMK and prepare the changes for a pull request. +This document outlines how to develop a [behavior](../behaviors/index.mdx) for ZMK and prepare the changes for a pull request. Behaviors are assigned to key positions and determine what happens when they are pressed and released. They are implemented in Zephyr as "devices": they consist of a devicetree binding file, which specifies the properties of the behavior, and a driver written in C code. This allows for the ability to create unique instances of these behaviors in [keymaps](../features/keymaps.mdx) or devicetree-source-include files (`.dtsi`). While instances of behaviors stored in keymaps are created by end-users for their personal needs, the instances that live in the .dtsi files are stored and documented in ZMK directly, which removes the need for end-users to set up common use-cases of these behaviors in their personal keymaps. diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 2cd82bc67e9..e99332a8076 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -386,7 +386,7 @@ The two `#include` lines at the top of the keymap are required in order to bring ### Keymap Behaviors -For the full documentation on the available behaviors for use in keymaps, start with reviewing [`kp`](../behaviors/key-press.md) and then use the sidebar to review the others available within ZMK. +For documentation on the available behaviors for use in keymaps, see the [overview page for behaviors](../behaviors/index.mdx). ## Metadata diff --git a/docs/docs/features/keymaps.mdx b/docs/docs/features/keymaps.mdx index c8d46ef941b..105ca794ab4 100644 --- a/docs/docs/features/keymaps.mdx +++ b/docs/docs/features/keymaps.mdx @@ -33,7 +33,7 @@ For example, the simplest behavior in ZMK is the "key press" behavior, which res (a certain spot on the keyboard), and when that position is pressed, send a keycode to the host, and when the key position is released, updates the host to notify of the keycode being released. -For the full set of possible behaviors, start at the [Key Press](../behaviors/key-press.md) behavior. +For the full set of possible behaviors, see the [overview page for behaviors](../behaviors/index.mdx). ## Layers @@ -128,11 +128,9 @@ that defines just one layer for this keymap: Each layer should have: -1. A `bindings` property this will be a list of behavior bindings, one for each key position for the keyboard. +1. A `bindings` property this will be a list of [behavior bindings](../behaviors/index.mdx), one for each key position for the keyboard. 1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way) -For the full set of possible behaviors, start at the [Key Press](../behaviors/key-press.md) behavior. - ### Complete Example Putting this all together, a complete [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) looks like: From 94c3b9a24607c966e28d44b6634c6084a21f84b2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 24 Mar 2024 21:09:16 +0000 Subject: [PATCH 1023/1130] feat(build): Allow specifying snippets for a build. * Allow using snippets https://docs.zephyrproject.org/latest/build/snippets/using.html for user builds in a `snippets` array properly. --- .github/workflows/build-user-config.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-user-config.yml b/.github/workflows/build-user-config.yml index d8ea057e56d..c3e4789dc5d 100644 --- a/.github/workflows/build-user-config.yml +++ b/.github/workflows/build-user-config.yml @@ -65,6 +65,7 @@ jobs: board: ${{ matrix.board }} shield: ${{ matrix.shield }} artifact_name: ${{ matrix.artifact-name }} + snippet: ${{ matrix.snippet }} run: | if [ -e zephyr/module.yml ]; then export zmk_load_arg=" -DZMK_EXTRA_MODULES='${GITHUB_WORKSPACE}'" @@ -75,7 +76,12 @@ jobs: echo "base_dir=${GITHUB_WORKSPACE}" >> $GITHUB_ENV fi + if [ -n "${snippet}" ]; then + extra_west_args="-S \"${snippet}\"" + fi + echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV + echo "extra_west_args=${extra_west_args}" >> $GITHUB_ENV echo "extra_cmake_args=${shield:+-DSHIELD=\"$shield\"}${zmk_load_arg}" >> $GITHUB_ENV echo "display_name=${shield:+$shield - }${board}" >> $GITHUB_ENV echo "artifact_name=${artifact_name:-${shield:+$shield-}${board}-zmk}" >> $GITHUB_ENV @@ -120,7 +126,7 @@ jobs: - name: West Build (${{ env.display_name }}) working-directory: ${{ env.base_dir }} shell: sh -x {0} - run: west build -s zmk/app -d "${{ env.build_dir }}" -b "${{ matrix.board }}" -- -DZMK_CONFIG=${{ env.base_dir }}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} + run: west build -s zmk/app -d "${{ env.build_dir }}" -b "${{ matrix.board }}" ${{ env.extra_west_args }} -- -DZMK_CONFIG=${{ env.base_dir }}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file run: | From e806cd6da1cd8239f6bf549f2956c567c31cccbc Mon Sep 17 00:00:00 2001 From: Thomas Huber <113915837+huber-th@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:20:53 -0700 Subject: [PATCH 1024/1130] feat(gitignore): add clangd cache folder --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 4ddd08521ed..1ef282a9f82 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,14 @@ /zephyr /zmk-config /build + +# macOS *.DS_Store + +# Python __pycache__ .python-version .venv + +# clangd +app/.cache/ From 58ccc5970dc804857d81609857d4217278ec025c Mon Sep 17 00:00:00 2001 From: Thomas Huber <113915837+huber-th@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:16:34 -0700 Subject: [PATCH 1025/1130] fix(build): Modify function return type Change return type of `sticky_key_timeout` function to `void` given it does not return any value to remove compiler warnings. --- app/src/behaviors/behavior_sticky_key.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 2c279c3be44..b0e9f3ed0c0 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -121,7 +121,7 @@ static inline int release_sticky_key_behavior(struct active_sticky_key *sticky_k return behavior_keymap_binding_released(&binding, event); } -static inline int on_sticky_key_timeout(struct active_sticky_key *sticky_key) { +static inline void on_sticky_key_timeout(struct active_sticky_key *sticky_key) { // If the key is lazy, a release is not needed on timeout if (sticky_key->config->lazy) { clear_sticky_key(sticky_key); From adb3a13dc583e1876d5aa17da0ade4c1024cad7d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 15 Mar 2023 21:48:30 -0400 Subject: [PATCH 1026/1130] feat: Add soft on/off support. Initial work on a soft on/off support for ZMK. Triggering soft off puts the device into deep sleep with only a specific GPIO pin configured to wake the device, avoiding waking from other key presses in the matrix like the normal deep sleep. Co-authored-by: Cem Aksoylar --- app/CMakeLists.txt | 4 + app/Kconfig | 9 + app/Kconfig.behaviors | 10 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/soft_off.dtsi | 15 ++ .../bindings/zmk,behavior-key-scanned.yaml | 31 +++ app/dts/bindings/zmk,behavior-key.yaml | 31 +++ .../bindings/zmk,soft-off-wakeup-sources.yaml | 14 ++ app/dts/bindings/zmk,wakeup-trigger-key.yaml | 18 ++ app/include/zmk/pm.h | 9 + app/src/behavior_key.c | 159 ++++++++++++++ app/src/behavior_key_scanned.c | 194 ++++++++++++++++++ app/src/kscan.c | 6 + app/src/pm.c | 59 ++++++ app/src/wakeup_trigger_key.c | 87 ++++++++ docs/docs/behaviors/soft-off.md | 38 ++++ docs/docs/development/new-shield.mdx | 1 + docs/docs/features/soft-off.md | 164 +++++++++++++++ docs/sidebars.js | 2 + 19 files changed, 852 insertions(+) create mode 100644 app/dts/behaviors/soft_off.dtsi create mode 100644 app/dts/bindings/zmk,behavior-key-scanned.yaml create mode 100644 app/dts/bindings/zmk,behavior-key.yaml create mode 100644 app/dts/bindings/zmk,soft-off-wakeup-sources.yaml create mode 100644 app/dts/bindings/zmk,wakeup-trigger-key.yaml create mode 100644 app/include/zmk/pm.h create mode 100644 app/src/behavior_key.c create mode 100644 app/src/behavior_key_scanned.c create mode 100644 app/src/pm.c create mode 100644 app/src/wakeup_trigger_key.c create mode 100644 docs/docs/behaviors/soft-off.md create mode 100644 docs/docs/features/soft-off.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index b12d04742ee..ac83091c5ef 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -29,7 +29,11 @@ target_sources(app PRIVATE src/matrix_transform.c) target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) target_sources(app PRIVATE src/event_manager.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY app PRIVATE src/behavior_key.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_SCANNED app PRIVATE src/behavior_key_scanned.c) +target_sources_ifdef(CONFIG_ZMK_PM_SOFT_OFF app PRIVATE src/pm.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) +target_sources_ifdef(CONFIG_ZMK_WAKEUP_TRIGGER_KEY app PRIVATE src/wakeup_trigger_key.c) target_sources(app PRIVATE src/events/activity_state_changed.c) target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/events/sensor_event.c) diff --git a/app/Kconfig b/app/Kconfig index 21e97ac6354..60a959d4986 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -423,6 +423,15 @@ config ZMK_EXT_POWER bool "Enable support to control external power output" default y +config ZMK_PM_SOFT_OFF + bool "Soft-off support" + select PM_DEVICE + +config ZMK_WAKEUP_TRIGGER_KEY + bool "Hardware supported wakeup (GPIO)" + default y + depends on DT_HAS_ZMK_WAKEUP_TRIGGER_KEY_ENABLED && ZMK_PM_SOFT_OFF + #Power Management endmenu diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 7a1e44f6db5..e5e0c4d7a23 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -1,6 +1,16 @@ # Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT +config ZMK_BEHAVIOR_KEY + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_KEY_ENABLED + +config ZMK_BEHAVIOR_KEY_SCANNED + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_KEY_SCANNED_ENABLED + config ZMK_BEHAVIOR_KEY_TOGGLE bool default y diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 23f2fee2806..fde75271891 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -20,3 +20,4 @@ #include #include #include +#include diff --git a/app/dts/behaviors/soft_off.dtsi b/app/dts/behaviors/soft_off.dtsi new file mode 100644 index 00000000000..fa6571a1117 --- /dev/null +++ b/app/dts/behaviors/soft_off.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + behaviors { + /omit-if-no-ref/ soft_off: behavior_soft_off { + compatible = "zmk,behavior-soft-off"; + label = "SOFTOFF"; + #binding-cells = <0>; + }; + }; +}; diff --git a/app/dts/bindings/zmk,behavior-key-scanned.yaml b/app/dts/bindings/zmk,behavior-key-scanned.yaml new file mode 100644 index 00000000000..bdb3abaff0e --- /dev/null +++ b/app/dts/bindings/zmk,behavior-key-scanned.yaml @@ -0,0 +1,31 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: | + Driver for a dedicated key triggered by matrix scanning for invoking a connected behavior. + +compatible: "zmk,behavior-key-scanned" + +include: base.yaml + +properties: + key: + type: phandle + required: true + description: The GPIO key that triggers wake via interrupt + bindings: + type: phandle + required: true + description: The GPIO key that triggers wake via interrupt + debounce-press-ms: + type: int + default: 5 + description: Debounce time for key press in milliseconds. Use 0 for eager debouncing. + debounce-release-ms: + type: int + default: 5 + description: Debounce time for key release in milliseconds. + debounce-scan-period-ms: + type: int + default: 1 + description: Time between reads in milliseconds when any key is pressed. diff --git a/app/dts/bindings/zmk,behavior-key.yaml b/app/dts/bindings/zmk,behavior-key.yaml new file mode 100644 index 00000000000..ff7a585eafa --- /dev/null +++ b/app/dts/bindings/zmk,behavior-key.yaml @@ -0,0 +1,31 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: | + Driver for a dedicated key for invoking a connected behavior. + +compatible: "zmk,behavior-key" + +include: base.yaml + +properties: + key: + type: phandle + required: true + description: The GPIO key that triggers wake via interrupt + bindings: + type: phandle + required: true + description: The GPIO key that triggers wake via interrupt + debounce-press-ms: + type: int + default: 5 + description: Debounce time for key press in milliseconds. Use 0 for eager debouncing. + debounce-release-ms: + type: int + default: 5 + description: Debounce time for key release in milliseconds. + debounce-scan-period-ms: + type: int + default: 1 + description: Time between reads in milliseconds when any key is pressed. diff --git a/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml b/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml new file mode 100644 index 00000000000..f98039a0ca9 --- /dev/null +++ b/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml @@ -0,0 +1,14 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: | + Description of all possible wakeup-sources from a forces + soft-off state. + +compatible: "zmk,soft-off-wakeup-sources" + +properties: + wakeup-sources: + type: phandles + required: true + description: List of wakeup-sources that should be enabled to wake the system from forces soft-off state. diff --git a/app/dts/bindings/zmk,wakeup-trigger-key.yaml b/app/dts/bindings/zmk,wakeup-trigger-key.yaml new file mode 100644 index 00000000000..fa7636d1f32 --- /dev/null +++ b/app/dts/bindings/zmk,wakeup-trigger-key.yaml @@ -0,0 +1,18 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: | + Driver for a dedicated key for waking the device from sleep + +compatible: "zmk,wakeup-trigger-key" + +include: base.yaml + +properties: + trigger: + type: phandle + required: true + description: The GPIO key that triggers wake via interrupt + extra-gpios: + type: phandle-array + description: Optional set of pins that should be set active before sleeping. diff --git a/app/include/zmk/pm.h b/app/include/zmk/pm.h new file mode 100644 index 00000000000..dff217afd29 --- /dev/null +++ b/app/include/zmk/pm.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_pm_soft_off(void); \ No newline at end of file diff --git a/app/src/behavior_key.c b/app/src/behavior_key.c new file mode 100644 index 00000000000..3633ce39a40 --- /dev/null +++ b/app/src/behavior_key.c @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_key + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_key_config { + struct zmk_debounce_config debounce_config; + int32_t debounce_scan_period_ms; + struct gpio_dt_spec key; +}; + +struct behavior_key_data { + struct zmk_behavior_binding binding; + struct zmk_debounce_state debounce_state; + struct gpio_callback key_callback; + const struct device *dev; + struct k_work_delayable update_work; + uint32_t read_time; +}; + +static void bk_enable_interrupt(const struct device *dev) { + const struct behavior_key_config *config = dev->config; + + gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_LEVEL_ACTIVE); +} + +static void bk_disable_interrupt(const struct device *dev) { + const struct behavior_key_config *config = dev->config; + + gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_DISABLE); +} + +static void bk_read(const struct device *dev) { + const struct behavior_key_config *config = dev->config; + struct behavior_key_data *data = dev->data; + + zmk_debounce_update(&data->debounce_state, gpio_pin_get_dt(&config->key), + config->debounce_scan_period_ms, &config->debounce_config); + + if (zmk_debounce_get_changed(&data->debounce_state)) { + const bool pressed = zmk_debounce_is_pressed(&data->debounce_state); + + struct zmk_behavior_binding_event event = {.position = INT32_MAX, + .timestamp = k_uptime_get()}; + + if (pressed) { + behavior_keymap_binding_pressed(&data->binding, event); + } else { + behavior_keymap_binding_released(&data->binding, event); + } + } + + if (zmk_debounce_is_active(&data->debounce_state)) { + data->read_time += config->debounce_scan_period_ms; + + k_work_reschedule(&data->update_work, K_TIMEOUT_ABS_MS(data->read_time)); + } else { + bk_enable_interrupt(dev); + } +} + +static void bk_update_work(struct k_work *work) { + struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); + struct behavior_key_data *data = CONTAINER_OF(dwork, struct behavior_key_data, update_work); + bk_read(data->dev); +} + +static void bk_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, + const gpio_port_pins_t pin) { + struct behavior_key_data *data = CONTAINER_OF(cb, struct behavior_key_data, key_callback); + + bk_disable_interrupt(data->dev); + + data->read_time = k_uptime_get(); + k_work_reschedule(&data->update_work, K_NO_WAIT); +} + +static int behavior_key_init(const struct device *dev) { + const struct behavior_key_config *config = dev->config; + struct behavior_key_data *data = dev->data; + + if (!device_is_ready(config->key.port)) { + LOG_ERR("GPIO port is not ready"); + return -ENODEV; + } + + k_work_init_delayable(&data->update_work, bk_update_work); + data->dev = dev; + + gpio_pin_configure_dt(&config->key, GPIO_INPUT); + gpio_init_callback(&data->key_callback, bk_gpio_irq_callback, BIT(config->key.pin)); + gpio_add_callback(config->key.port, &data->key_callback); + + while (gpio_pin_get_dt(&config->key)) { + k_sleep(K_MSEC(100)); + } + + bk_enable_interrupt(dev); + + return 0; +} + +static int behavior_key_pm_action(const struct device *dev, enum pm_device_action action) { + const struct behavior_key_config *config = dev->config; + struct behavior_key_data *data = dev->data; + + int ret; + + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + bk_disable_interrupt(dev); + ret = gpio_remove_callback(config->key.port, &data->key_callback); + break; + case PM_DEVICE_ACTION_RESUME: + ret = gpio_add_callback(config->key.port, &data->key_callback); + bk_enable_interrupt(dev); + break; + default: + ret = -ENOTSUP; + break; + } + + return ret; +} + +#define BK_INST(n) \ + const struct behavior_key_config bk_config_##n = { \ + .key = GPIO_DT_SPEC_GET(DT_INST_PHANDLE(n, key), gpios), \ + .debounce_config = \ + { \ + .debounce_press_ms = DT_INST_PROP(n, debounce_press_ms), \ + .debounce_release_ms = DT_INST_PROP(n, debounce_release_ms), \ + }, \ + .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ + }; \ + struct behavior_key_data bk_data_##n = { \ + .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ + }; \ + PM_DEVICE_DT_INST_DEFINE(n, behavior_key_pm_action); \ + DEVICE_DT_INST_DEFINE(n, behavior_key_init, PM_DEVICE_DT_INST_GET(n), &bk_data_##n, \ + &bk_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL); + +DT_INST_FOREACH_STATUS_OKAY(BK_INST) diff --git a/app/src/behavior_key_scanned.c b/app/src/behavior_key_scanned.c new file mode 100644 index 00000000000..c961b292622 --- /dev/null +++ b/app/src/behavior_key_scanned.c @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_key_scanned + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_key_scanned_config { + struct zmk_debounce_config debounce_config; + int32_t debounce_scan_period_ms; + struct gpio_dt_spec key; +}; + +struct behavior_key_scanned_data { + struct zmk_behavior_binding binding; + struct zmk_debounce_state debounce_state; + struct gpio_callback key_callback; + const struct device *dev; + struct k_work_delayable update_work; + uint32_t read_time; + bool pin_active; + bool active_scan_detected; + struct k_sem sem; +}; + +static void bks_enable_interrupt(const struct device *dev, bool active_scanning) { + const struct behavior_key_scanned_config *config = dev->config; + + gpio_pin_interrupt_configure_dt(&config->key, active_scanning ? GPIO_INT_EDGE_TO_ACTIVE + : GPIO_INT_LEVEL_ACTIVE); +} + +static void bks_disable_interrupt(const struct device *dev) { + const struct behavior_key_scanned_config *config = dev->config; + + gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_DISABLE); +} + +static void bks_read(const struct device *dev) { + const struct behavior_key_scanned_config *config = dev->config; + struct behavior_key_scanned_data *data = dev->data; + + if (k_sem_take(&data->sem, K_NO_WAIT) < 0) { + // k_work_reschedule(&data->update_work, K_NO_WAIT); + return; + } + + zmk_debounce_update(&data->debounce_state, data->active_scan_detected, + config->debounce_scan_period_ms, &config->debounce_config); + + if (zmk_debounce_get_changed(&data->debounce_state)) { + const bool pressed = zmk_debounce_is_pressed(&data->debounce_state); + + struct zmk_behavior_binding_event event = {.position = INT32_MAX, + .timestamp = k_uptime_get()}; + + if (pressed) { + behavior_keymap_binding_pressed(&data->binding, event); + } else { + behavior_keymap_binding_released(&data->binding, event); + } + } + + if (zmk_debounce_is_active(&data->debounce_state)) { + data->active_scan_detected = false; + data->read_time += config->debounce_scan_period_ms; + + k_work_schedule(&data->update_work, K_TIMEOUT_ABS_MS(data->read_time)); + } else { + bks_enable_interrupt(dev, false); + } + + k_sem_give(&data->sem); +} + +static void bks_update_work(struct k_work *work) { + struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); + struct behavior_key_scanned_data *data = + CONTAINER_OF(dwork, struct behavior_key_scanned_data, update_work); + bks_read(data->dev); +} + +static void bks_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, + const gpio_port_pins_t pin) { + struct behavior_key_scanned_data *data = + CONTAINER_OF(cb, struct behavior_key_scanned_data, key_callback); + const struct behavior_key_scanned_config *config = data->dev->config; + + uint32_t time = k_uptime_get(); + + if (k_sem_take(&data->sem, K_MSEC(10)) < 0) { + LOG_ERR("FAILED TO TAKE THE SEMAPHORE"); + // Do more? + return; + } + + data->active_scan_detected = true; + data->read_time = time; + + if (!zmk_debounce_is_active(&data->debounce_state)) { + // When we get that very first interrupt, we need to schedule the update checks to fall in + // between each of the real scans, so we can do our checks for state *after* each scan has + // occurred. + k_work_reschedule(&data->update_work, + K_TIMEOUT_ABS_MS(time + (config->debounce_scan_period_ms / 2))); + + bks_enable_interrupt(data->dev, true); + } + + k_sem_give(&data->sem); +} + +static int behavior_key_scanned_init(const struct device *dev) { + const struct behavior_key_scanned_config *config = dev->config; + struct behavior_key_scanned_data *data = dev->data; + + if (!device_is_ready(config->key.port)) { + LOG_ERR("GPIO port is not ready"); + return -ENODEV; + } + + k_work_init_delayable(&data->update_work, bks_update_work); + k_sem_init(&data->sem, 1, 1); + data->dev = dev; + + gpio_pin_configure_dt(&config->key, GPIO_INPUT); + gpio_init_callback(&data->key_callback, bks_gpio_irq_callback, BIT(config->key.pin)); + gpio_add_callback(config->key.port, &data->key_callback); + + while (gpio_pin_get_dt(&config->key)) { + k_sleep(K_MSEC(100)); + } + + bks_enable_interrupt(dev, false); + + return 0; +} + +static int behavior_key_scanned_pm_action(const struct device *dev, enum pm_device_action action) { + const struct behavior_key_scanned_config *config = dev->config; + struct behavior_key_scanned_data *data = dev->data; + + int ret; + + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + bks_disable_interrupt(dev); + ret = gpio_remove_callback(config->key.port, &data->key_callback); + break; + case PM_DEVICE_ACTION_RESUME: + ret = gpio_add_callback(config->key.port, &data->key_callback); + bks_enable_interrupt(dev, false); + break; + default: + ret = -ENOTSUP; + break; + } + + return ret; +} + +#define BK_INST(n) \ + const struct behavior_key_scanned_config bks_config_##n = { \ + .key = GPIO_DT_SPEC_GET(DT_INST_PHANDLE(n, key), gpios), \ + .debounce_config = \ + { \ + .debounce_press_ms = DT_INST_PROP(n, debounce_press_ms), \ + .debounce_release_ms = DT_INST_PROP(n, debounce_release_ms), \ + }, \ + .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ + }; \ + struct behavior_key_scanned_data bks_data_##n = { \ + .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ + }; \ + PM_DEVICE_DT_INST_DEFINE(n, behavior_key_scanned_pm_action); \ + DEVICE_DT_INST_DEFINE(n, behavior_key_scanned_init, PM_DEVICE_DT_INST_GET(n), &bks_data_##n, \ + &bks_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + NULL); + +DT_INST_FOREACH_STATUS_OKAY(BK_INST) diff --git a/app/src/kscan.c b/app/src/kscan.c index ff55290a3c2..c04ce2d8799 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -75,6 +76,11 @@ int zmk_kscan_init(const struct device *dev) { kscan_config(dev, zmk_kscan_callback); kscan_enable_callback(dev); +#if IS_ENABLED(CONFIG_PM_DEVICE) + if (pm_device_wakeup_is_capable(dev)) { + pm_device_wakeup_enable(dev, true); + } +#endif // IS_ENABLED(CONFIG_PM_DEVICE) return 0; } diff --git a/app/src/pm.c b/app/src/pm.c new file mode 100644 index 00000000000..af12623918f --- /dev/null +++ b/app/src/pm.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define HAS_WAKERS DT_HAS_COMPAT_STATUS_OKAY(zmk_soft_off_wakeup_sources) + +#if HAS_WAKERS + +#define DEVICE_WITH_SEP(node_id, prop, idx) DEVICE_DT_GET(DT_PROP_BY_IDX(node_id, prop, idx)), + +const struct device *soft_off_wakeup_sources[] = { + DT_FOREACH_PROP_ELEM(DT_INST(0, zmk_soft_off_wakeup_sources), wakeup_sources, DEVICE_WITH_SEP)}; + +#endif + +int zmk_pm_soft_off(void) { +#if IS_ENABLED(CONFIG_PM_DEVICE) + size_t device_count; + const struct device *devs; + + device_count = z_device_get_all_static(&devs); + + // There may be some matrix/direct kscan devices that would be used for wakeup + // from normal "inactive goes to sleep" behavior, so disable them as wakeup devices + // and then suspend them so we're ready to take over setting up our system + // and then putting it into an off state. + for (int i = 0; i < device_count; i++) { + const struct device *dev = &devs[i]; + + LOG_DBG("soft-on-off pressed cb: suspend device"); + if (pm_device_wakeup_is_enabled(dev)) { + pm_device_wakeup_enable(dev, false); + } + pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND); + } +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + +#if HAS_WAKERS + for (int i = 0; i < ARRAY_SIZE(soft_off_wakeup_sources); i++) { + const struct device *dev = soft_off_wakeup_sources[i]; + pm_device_wakeup_enable(dev, true); + pm_device_action_run(dev, PM_DEVICE_ACTION_RESUME); + } +#endif // HAS_WAKERS + + LOG_DBG("soft-on-off interrupt: go to sleep"); + return pm_state_force(0U, &(struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); +} diff --git a/app/src/wakeup_trigger_key.c b/app/src/wakeup_trigger_key.c new file mode 100644 index 00000000000..0cc4f250707 --- /dev/null +++ b/app/src/wakeup_trigger_key.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define DT_DRV_COMPAT zmk_wakeup_trigger_key + +struct wakeup_trigger_key_config { + struct gpio_dt_spec trigger; + size_t extra_gpios_count; + struct gpio_dt_spec extra_gpios[]; +}; + +static int zmk_wakeup_trigger_key_init(const struct device *dev) { +#if IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_init_suspended(dev); + pm_device_wakeup_enable(dev, true); +#endif + + return 0; +} + +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int wakeup_trigger_key_pm_action(const struct device *dev, enum pm_device_action action) { + const struct wakeup_trigger_key_config *config = dev->config; + int ret = 0; + + switch (action) { + case PM_DEVICE_ACTION_RESUME: + ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_LEVEL_ACTIVE); + if (ret < 0) { + LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); + return ret; + } + + for (int i = 0; i < config->extra_gpios_count; i++) { + ret = gpio_pin_configure_dt(&config->extra_gpios[i], GPIO_OUTPUT_ACTIVE); + if (ret < 0) { + LOG_WRN("Failed to set extra GPIO pin active for waker (%d)", ret); + } + } + break; + case PM_DEVICE_ACTION_SUSPEND: + + ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_DISABLE); + if (ret < 0) { + LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); + return ret; + } + break; + default: + ret = -ENOTSUP; + break; + } + + return ret; +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + +#define WAKEUP_TRIGGER_EXTRA_GPIO_SPEC(idx, n) \ + GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(n), extra_gpios, idx) + +#define WAKEUP_TRIGGER_KEY_INST(n) \ + const struct wakeup_trigger_key_config wtk_cfg_##n = { \ + .trigger = GPIO_DT_SPEC_GET(DT_INST_PROP(n, trigger), gpios), \ + .extra_gpios = {LISTIFY(DT_PROP_LEN_OR(DT_DRV_INST(n), extra_gpios, 0), \ + WAKEUP_TRIGGER_EXTRA_GPIO_SPEC, (, ), n)}, \ + .extra_gpios_count = DT_PROP_LEN_OR(DT_DRV_INST(n), extra_gpios, 0), \ + }; \ + PM_DEVICE_DT_INST_DEFINE(n, wakeup_trigger_key_pm_action); \ + DEVICE_DT_INST_DEFINE(n, zmk_wakeup_trigger_key_init, PM_DEVICE_DT_INST_GET(n), NULL, \ + &wtk_cfg_##n, PRE_KERNEL_2, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL); + +DT_INST_FOREACH_STATUS_OKAY(WAKEUP_TRIGGER_KEY_INST) diff --git a/docs/docs/behaviors/soft-off.md b/docs/docs/behaviors/soft-off.md new file mode 100644 index 00000000000..05374004955 --- /dev/null +++ b/docs/docs/behaviors/soft-off.md @@ -0,0 +1,38 @@ +--- +title: Soft Off Behavior +sidebar_label: Soft Off +--- + +## Summary + +The soft off behavior is used to force the keyboard into an off state. Depending on the specific keyboard hardware, the keyboard can be turned back on again either with a dedicated on/off button that is available, or using the reset button found on the device. + +For more information, see the [Soft Off Feature](../features/soft-off.md) page. + +### Behavior Binding + +- Reference: `&soft_off` + +Example: + +``` +&soft_off +``` + +### Configuration + +#### Hold Time + +By default, the keyboard will be turned off as soon as the key bound to the behavior is released, even if the key is only tapped briefly. If you would prefer that the key need be held a certain amount of time before releasing, you can set the `hold-time-ms` to a non-zero value in your keymap: + +``` +&soft_off { + hold-time-ms = <5000>; // Only turn off it the key is held for 5 seconds or longer. +}; + +/ { + keymap { + ... + }; +}; +``` diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index e99332a8076..867ccbc8cee 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -171,6 +171,7 @@ this might look something like: kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; diode-direction = "col2row"; + wakeup-source; col-gpios = <&pro_micro 15 GPIO_ACTIVE_HIGH> diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md new file mode 100644 index 00000000000..b0206825cbc --- /dev/null +++ b/docs/docs/features/soft-off.md @@ -0,0 +1,164 @@ +--- +title: Soft Off Feature +sidebar_label: Soft Off +--- + +Similar to the deep sleep feature that sends the keyboard into a low power state after a certain period of inactivity, the soft off feature is used to turn the keyboard on and off explicitly. Depending on the keyboard, this may be through a dedicated on/off push button, or merely through an additional binding in the keymap to turn the device off and the existing reset button to turn the device back on. + +The feature is intended as an alternative to using a hardware switch to physically cut power from the battery to the keyboard. This can be useful for existing PCBs not designed for wireless that don't have a power switch, or for new designs that favor a push button on/off like found on other devices. + +:::note + +The power off is accomplished by putting the MCU into a "soft off" state. Power is _not_ technically removed from the entire system, but the device will only be woken from the state by a few possible events. + +::: + +Once powered off, the keyboard will only wake up when: + +- You press the same button/sequence that you pressed to power off the keyboard, or +- You press a reset button found on the keyboard. + +## Soft Off With Existing Designs + +For existing designs, using soft off is as simple as placing the [Soft Off Behavior](../behaviors/soft-off.md) in your keymap and then invoking it. For splits, at least for now, you'll need to place it somewhere on each side of your keymap and trigger on both sides, starting from the peripheral side first. + +You can then wake up the keyboard by pressing the reset button once, and repeating this for each side for split keyboards. + +## Adding Soft On/Off To New Designs + +### Hardware Design + +ZMK's soft on/off requires a dedicated GPIO pin to be used to trigger powering off, and to wake the core from the +soft off state when it goes active again later. + +#### Simple Direct Pin + +The simplest way to achieve this is with a push button between a GPIO pin and ground. + +#### Matrix-Integrated Hardware Combo + +Another, more complicated option is to tie two of the switch outputs in the matrix together through an AND gate and connect that to the dedicated GPIO pin. This way you can use a key combination in your existing keyboard matrix to trigger soft on/off. To make this work best, the two switches used should both be driven by the same matrix input pin so that both will be active simultaneously on the AND gate inputs. The alternative is to use a combination of diodes and capacitors to ensure both pins are active/high at the same time even if scanning sets them high at different times. + +### Firmware Changes + +Several items work together to make both triggering soft off properly, and setting up the device to _wake_ from soft off work as expected. + +#### GPIO Key + +Zephyr's basic GPIO Key concept is used to configure the GPIO pin that will be used for both triggering soft off and waking the device later. Here is an example for a keyboard with a dedicated on/off push button that is a direct wire between the GPIO pin and ground: + +``` +/ { + keys { + compatible = "gpio-keys"; + wakeup_key: wakeup_key { + gpios = <&gpio0 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + }; + }; +}; +``` + +GPIO keys are defined using child nodes under the `gpio-keys` compatible node. Each child needs just one property defined: + +- The `gpios` property should be a phandle-array with a fully defined GPIO pin and with the correct pull up/down and active high/low flags set. In the above example the soft on/off would be triggered by pulling the specified pin low, typically by pressing a switch that has the other leg connected to ground. + +#### Behavior Key + +Next, we will create a new "behavior key". Behavior keys are an easy way to tie a keymap behavior to a GPIO key outside of the normal keymap processing. They do _not_ do the normal keymap processing, so they are only suitable for use with basic behaviors, not complicated macros, hold-taps, etc. + +In this case, we will be creating a dedicated instance of the [Soft Off Behavior](../behaviors/soft-off.md) that will be used only for our hardware on/off button, then binding it to our key: + +``` +/ { + behaviors { + hw_soft_off: behavior_hw_soft_off { + compatible = "zmk,behavior-soft-off"; + #binding-cells = <0>; + label = "HW_SO"; + hold-time-ms = <5000>; + }; + }; + + soft_off_behavior_key { + compatible = "zmk,behavior-key"; + bindings = <&hw_soft_off>; + key = <&wakeup_key>; + }; +}; +``` + +Here are the properties for the behavior key node: + +- The `compatible` property for the node must be `zmk,behavior-key`. +- The `bindings` property is a phandle to the soft off behavior defined above. +- The `key` property is a phandle to the GPIO key defined earlier. + +If you have set up your on/off to be controlled by a matrix-integrated combo, the behavior key needs use a different driver that will handle detecting the pressed state when the pin is toggled by the other matrix kscan driver: + +``` +/ { + soft_off_behavior_key { + compatible = "zmk,behavior-key-scanned"; + status = "okay"; + bindings = <&hw_soft_off>; + key = <&wakeup_key>; + }; +}; +``` + +Note that the only difference from the `soft_off_behavior_key` definition for GPIO keys above is the `compatible` value of `zmk,behavior-key-scanned`. + +#### Wakeup Sources + +Zephyr has general support for the concept of a device as a "wakeup source", which ZMK has not previously used. Adding soft off requires properly updating the existing `kscan` devices with the `wakeup-source` property, e.g.: + +``` +/ { + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + wakeup-source; + + ... + }; +}; +``` + +#### Soft Off Waker + +Next, we need to add another device which will be enabled only when the keyboard is going into soft off state, and will configure the previously declared GPIO key with the correct interrupt configuration to wake the device from soft off once it is pressed. + +``` +/ { + wakeup_source: wakeup_source { + compatible = "zmk,wakeup-trigger-key"; + + trigger = <&wakeup_key>; + wakeup-source; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,wakeup-trigger-key`. +- The `trigger` property is a phandle to the GPIO key defined earlier. +- The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. +- An optional `output-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. + +Once that is declared, we will list it in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing: + +``` +/ { + soft_off_wakers { + compatible = "zmk,soft-off-wakeup-sources"; + wakeup-sources = <&wakeup_source>; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. +- The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. diff --git a/docs/sidebars.js b/docs/sidebars.js index 37613d568a0..ebf0aef76e6 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -19,6 +19,7 @@ module.exports = { "features/underglow", "features/backlight", "features/battery", + "features/soft-off", "features/beta-testing", ], Behaviors: [ @@ -44,6 +45,7 @@ module.exports = { "behaviors/underglow", "behaviors/backlight", "behaviors/power", + "behaviors/soft-off", ], Codes: [ "codes/index", From 738c3c0e3b3878ddaebafae65becdf5e5f68fe86 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 13 Sep 2023 19:58:53 +0000 Subject: [PATCH 1027/1130] feat(kscan): Add PM support to GPIO kscan drivers. * Add PM device hook to the kscan direct & matrix drivers. --- app/module/drivers/kscan/kscan_gpio_direct.c | 27 +++++++++++++++++++- app/module/drivers/kscan/kscan_gpio_matrix.c | 27 +++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index b5e77f63301..2bc35f4c0b3 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -318,6 +319,28 @@ static int kscan_direct_init(const struct device *dev) { return 0; } +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int kscan_direct_pm_action(const struct device *dev, enum pm_device_action action) { + int ret = 0; + + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + kscan_direct_disable(dev); + break; + case PM_DEVICE_ACTION_RESUME: + kscan_direct_enable(dev); + break; + default: + ret = -ENOTSUP; + break; + } + + return ret; +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + static const struct kscan_driver_api kscan_direct_api = { .config = kscan_direct_configure, .enable_callback = kscan_direct_enable, @@ -354,7 +377,9 @@ static const struct kscan_driver_api kscan_direct_api = { .toggle_mode = DT_INST_PROP(n, toggle_mode), \ }; \ \ - DEVICE_DT_INST_DEFINE(n, &kscan_direct_init, NULL, &kscan_direct_data_##n, \ + PM_DEVICE_DT_INST_DEFINE(n, kscan_direct_pm_action); \ + \ + DEVICE_DT_INST_DEFINE(n, &kscan_direct_init, PM_DEVICE_DT_INST_GET(n), &kscan_direct_data_##n, \ &kscan_direct_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ &kscan_direct_api); diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index 6e91bf95fb0..3917196e6c8 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -421,6 +422,28 @@ static int kscan_matrix_init(const struct device *dev) { return 0; } +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int kscan_matrix_pm_action(const struct device *dev, enum pm_device_action action) { + int ret = 0; + + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + kscan_matrix_disable(dev); + break; + case PM_DEVICE_ACTION_RESUME: + kscan_matrix_enable(dev); + break; + default: + ret = -ENOTSUP; + break; + } + + return ret; +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + static const struct kscan_driver_api kscan_matrix_api = { .config = kscan_matrix_configure, .enable_callback = kscan_matrix_enable, @@ -465,7 +488,9 @@ static const struct kscan_driver_api kscan_matrix_api = { .diode_direction = INST_DIODE_DIR(n), \ }; \ \ - DEVICE_DT_INST_DEFINE(n, &kscan_matrix_init, NULL, &kscan_matrix_data_##n, \ + PM_DEVICE_DT_INST_DEFINE(n, kscan_matrix_pm_action); \ + \ + DEVICE_DT_INST_DEFINE(n, &kscan_matrix_init, PM_DEVICE_DT_INST_GET(n), &kscan_matrix_data_##n, \ &kscan_matrix_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ &kscan_matrix_api); From b19df0cbf053a88a9389bdf463df431e5b7e70a5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 13 Sep 2023 20:01:02 +0000 Subject: [PATCH 1028/1130] feat(behaviors): Add soft off behavior. * New soft-off behavior that can be used to force the device into soft-off state with only certain configured wakeup devices. --- app/CMakeLists.txt | 1 + app/Kconfig.behaviors | 6 ++ app/dts/behaviors/soft_off.dtsi | 3 +- .../behaviors/zmk,behavior-soft-off.yaml | 14 ++++ app/src/behaviors/behavior_soft_off.c | 70 +++++++++++++++++++ 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml create mode 100644 app/src/behaviors/behavior_soft_off.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ac83091c5ef..bf7cfeefb40 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -42,6 +42,7 @@ target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SOFT_OFF app PRIVATE src/behaviors/behavior_soft_off.c) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/hid.c) target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index e5e0c4d7a23..7c30f50ec97 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -22,6 +22,12 @@ config ZMK_BEHAVIOR_MOUSE_KEY_PRESS depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED imply ZMK_MOUSE +config ZMK_BEHAVIOR_SOFT_OFF + bool + default y + select ZMK_PM_SOFT_OFF + depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED + config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool diff --git a/app/dts/behaviors/soft_off.dtsi b/app/dts/behaviors/soft_off.dtsi index fa6571a1117..c68230f3231 100644 --- a/app/dts/behaviors/soft_off.dtsi +++ b/app/dts/behaviors/soft_off.dtsi @@ -6,9 +6,8 @@ / { behaviors { - /omit-if-no-ref/ soft_off: behavior_soft_off { + soft_off: soft_off { compatible = "zmk,behavior-soft-off"; - label = "SOFTOFF"; #binding-cells = <0>; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml b/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml new file mode 100644 index 00000000000..1467ede4772 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml @@ -0,0 +1,14 @@ +# Copyright (c) 2023 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Soft-Off Behavior + +compatible: "zmk,behavior-soft-off" + +include: zero_param.yaml + +properties: + hold-time-ms: + type: int + required: false + description: Number of milliseconds the behavior must be held before releasing will actually trigger a soft-off. diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c new file mode 100644 index 00000000000..0f24a644d9a --- /dev/null +++ b/app/src/behaviors/behavior_soft_off.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_soft_off + +#include +#include +#include + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_soft_off_config { + uint32_t hold_time_ms; +}; + +struct behavior_soft_off_data { + uint32_t press_start; +}; + +static int behavior_soft_off_init(const struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); + struct behavior_soft_off_data *data = dev->data; + +#if IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + zmk_pm_soft_off(); +#else + data->press_start = k_uptime_get(); +#endif + + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); + struct behavior_soft_off_data *data = dev->data; + const struct behavior_soft_off_config *config = dev->config; + + if (config->hold_time_ms == 0 || (k_uptime_get() - data->press_start) >= config->hold_time_ms) { + zmk_pm_soft_off(); + } + + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_soft_off_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, + .locality = BEHAVIOR_LOCALITY_GLOBAL, +}; + +#define BSO_INST(n) \ + static const struct behavior_soft_off_config bso_config_##n = { \ + .hold_time_ms = DT_INST_PROP_OR(n, hold_time_ms, 0), \ + }; \ + static struct behavior_soft_off_data bso_data_##n = {}; \ + BEHAVIOR_DT_INST_DEFINE(0, behavior_soft_off_init, NULL, &bso_data_##n, &bso_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_soft_off_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(BSO_INST) From d3fffb9e8913105bc732eb9cbfbd380a9b98167e Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 16 Sep 2023 11:50:12 -0700 Subject: [PATCH 1029/1130] feat(shields): Add soft-off to the nrf52840dk ZMK Uno * Use Button 1 for soft off on the nrf52840 when using the ZMK Uno shield. --- .../boards/nrf52840dk_nrf52840.overlay | 43 ++++++++++++++++++- app/boards/shields/zmk_uno/zmk_uno.dtsi | 2 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay index 05c7ed9d8e9..d08105c6889 100644 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -12,6 +12,15 @@ bias-pull-up; }; }; + + qdec_sleep: qdec_sleep { + group1 { + psels = , + ; + bias-pull-up; + low-power-enable; + }; + }; }; // Set up the QDEC hardware based driver and give it the same label as the deleted node. @@ -20,6 +29,38 @@ encoder: &qdec0 { led-pre = <0>; steps = <80>; pinctrl-0 = <&qdec_default>; - pinctrl-1 = <&qdec_default>; + pinctrl-1 = <&qdec_sleep>; pinctrl-names = "default", "sleep"; }; + +/ { + behaviors { + soft_off: soft_off { + compatible = "zmk,behavior-soft-off"; + #binding-cells = <0>; + status = "okay"; + }; + }; + + wakeup_source: wakeup_source { + compatible = "zmk,wakeup-trigger-key"; + status = "okay"; + + trigger = <&button0>; + wakeup-source; + }; + + soft_off_wakers { + compatible = "zmk,soft-off-wakeup-sources"; + status = "okay"; + + wakeup-sources = <&wakeup_source>; + }; + + soft_off_behavior_key { + compatible = "zmk,behavior-key"; + status = "okay"; + bindings = <&soft_off>; + key = <&button0>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/zmk_uno/zmk_uno.dtsi b/app/boards/shields/zmk_uno/zmk_uno.dtsi index 63deb06a4d1..196ac8b5002 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno.dtsi @@ -124,6 +124,7 @@ nice_view_spi: &arduino_spi { kscan_matrix: kscan_matrix { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; @@ -141,6 +142,7 @@ nice_view_spi: &arduino_spi { kscan_direct: kscan_direct { compatible = "zmk,kscan-gpio-direct"; + wakeup-source; status = "disabled"; input-gpios From 860e53b33ac3b09b233a0ec4c6cb0621895fb16c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 7 Dec 2023 00:36:02 +0000 Subject: [PATCH 1030/1130] refactor: Promote new endpoints API * Add ability for external callers to clear the current endpoint. --- app/include/zmk/endpoints.h | 2 ++ app/src/endpoints.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/include/zmk/endpoints.h b/app/include/zmk/endpoints.h index 70240183e36..f2aff2bcc2d 100644 --- a/app/include/zmk/endpoints.h +++ b/app/include/zmk/endpoints.h @@ -73,3 +73,5 @@ int zmk_endpoints_send_report(uint16_t usage_page); #if IS_ENABLED(CONFIG_ZMK_MOUSE) int zmk_endpoints_send_mouse_report(); #endif // IS_ENABLE(CONFIG_ZMK_MOUSE) + +void zmk_endpoints_clear_current(void); diff --git a/app/src/endpoints.c b/app/src/endpoints.c index f8452d93fbb..7c9d15a31fe 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -340,7 +340,7 @@ static int zmk_endpoints_init(void) { return 0; } -static void disconnect_current_endpoint(void) { +void zmk_endpoints_clear_current(void) { zmk_hid_keyboard_clear(); zmk_hid_consumer_clear(); #if IS_ENABLED(CONFIG_ZMK_MOUSE) @@ -356,7 +356,7 @@ static void update_current_endpoint(void) { if (!zmk_endpoint_instance_eq(new_instance, current_instance)) { // Cancel all current keypresses so keys don't stay held on the old endpoint. - disconnect_current_endpoint(); + zmk_endpoints_clear_current(); current_instance = new_instance; From 0d4d4fb2b5bdfd2b259febe14a9b1dfbf991872d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 7 Dec 2023 00:37:31 +0000 Subject: [PATCH 1031/1130] feat(pm): Clear HID data before soft off. * Make sure the connected host has no held HID usages before we sleep. --- app/src/pm.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/pm.c b/app/src/pm.c index af12623918f..a78b6ae53cb 100644 --- a/app/src/pm.c +++ b/app/src/pm.c @@ -13,6 +13,8 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include + #define HAS_WAKERS DT_HAS_COMPAT_STATUS_OKAY(zmk_soft_off_wakeup_sources) #if HAS_WAKERS @@ -29,6 +31,10 @@ int zmk_pm_soft_off(void) { size_t device_count; const struct device *devs; +#if !IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + zmk_endpoints_clear_current(); +#endif + device_count = z_device_get_all_static(&devs); // There may be some matrix/direct kscan devices that would be used for wakeup From e78249ee067910725cd7fcf447b016ce3cdcf318 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 7 Dec 2023 04:04:13 +0000 Subject: [PATCH 1032/1130] fix(bt): Fix BT tests after soft off work. * Move to explicit enable of `ZMK_PM_SOFT_OFF` to turn on the feature and use the behaviors, which matches how other features work, and helps with split and testing schemes. --- app/Kconfig.behaviors | 3 +-- .../shields/zmk_uno/boards/nrf52840dk_nrf52840.conf | 1 + app/dts/behaviors/soft_off.dtsi | 3 ++- docs/docs/config/power.md | 12 ++++++++++++ 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 7c30f50ec97..18fd5c15b0f 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -25,8 +25,7 @@ config ZMK_BEHAVIOR_MOUSE_KEY_PRESS config ZMK_BEHAVIOR_SOFT_OFF bool default y - select ZMK_PM_SOFT_OFF - depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED + depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED && ZMK_PM_SOFT_OFF config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf new file mode 100644 index 00000000000..ac92c4d8f00 --- /dev/null +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf @@ -0,0 +1 @@ +CONFIG_ZMK_PM_SOFT_OFF=y \ No newline at end of file diff --git a/app/dts/behaviors/soft_off.dtsi b/app/dts/behaviors/soft_off.dtsi index c68230f3231..c88e1b51f12 100644 --- a/app/dts/behaviors/soft_off.dtsi +++ b/app/dts/behaviors/soft_off.dtsi @@ -6,8 +6,9 @@ / { behaviors { - soft_off: soft_off { + /omit-if-no-ref/ soft_off: soft_off { compatible = "zmk,behavior-soft-off"; + label = "SOFTOFF"; #binding-cells = <0>; }; }; diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index 75e1b26ab8b..396456b2589 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -24,6 +24,18 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | `CONFIG_ZMK_SLEEP` | bool | Enable deep sleep support | n | | `CONFIG_ZMK_IDLE_SLEEP_TIMEOUT` | int | Milliseconds of inactivity before entering deep sleep | 900000 | +## Soft Off + +The [soft off feature](../features/soft-off.md) allows turning the keyboard on/off from either dedicated hardware of using the [`&soft_off` behavior](../behaviors/soft-off.md) to turn off and a reset button to turn back on again. + +### Kconfig + +Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) + +| Config | Type | Description | Default | +| ------------------------ | ---- | ------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_PM_SOFT_OFF` | bool | Enable soft off functionality from the keymap of dedicated hardware | n | + ## External Power Control Driver for enabling or disabling power to peripherals such as displays and lighting. This driver must be configured to use [power management behaviors](../behaviors/power.md). From 96968514e378cd134889637ee3e0c6311e08e13a Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 9 Dec 2023 17:18:04 -0500 Subject: [PATCH 1033/1130] fix(docs): Apply suggestions from code review Co-authored-by: Cem Aksoylar --- docs/docs/config/kscan.md | 8 +++++++- docs/docs/config/power.md | 4 ++-- docs/docs/features/soft-off.md | 9 ++++----- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index b49529d9965..3076edc0f41 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -79,6 +79,7 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml]( | `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | | `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `CONFIG_ZMK_KSCAN_DIRECT_POLLING` is enabled. | 10 | | `toggle-mode` | bool | Use toggle switch mode. | n | +| `wakeup-source` | bool | Mark this kscan instance as able to wake the keyboard from deep sleep | n | By default, a switch will drain current through the internal pull up/down resistor whenever it is pressed. This is not ideal for a toggle switch, where the switch may be left in the "pressed" state for a long time. Enabling `toggle-mode` will make the driver flip between pull up and down as the switch is toggled to optimize for power. @@ -89,6 +90,7 @@ Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](http ```dts kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; + wakeup-source; input-gpios = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> @@ -123,6 +125,7 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-matrix.yaml]( | `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | | `diode-direction` | string | The direction of the matrix diodes | `"row2col"` | | `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `CONFIG_ZMK_KSCAN_MATRIX_POLLING` is enabled. | 10 | +| `wakeup-source` | bool | Mark this kscan instance as able to wake the keyboard from deep sleep | n | The `diode-direction` property must be one of: @@ -137,6 +140,7 @@ The output pins (e.g. columns for `col2row`) should have the flag `GPIO_ACTIVE_H ```dts kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; col-gpios = <&pro_micro 4 GPIO_ACTIVE_HIGH> @@ -177,6 +181,7 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-charlieplex.y | `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | | `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | | `poll-period-ms` | int | Time between reads in milliseconds when no key is pressed and `interrupt-gpois` is not set. | 10 | +| `wakeup-source` | bool | Mark this kscan instance as able to wake the keyboard from deep sleep | n | Define the transform with a [matrix transform](#matrix-transform). The row is always the driven pin, and the column always the receiving pin (input to the controller). For example, in `RC(5,0)` power flows from the 6th pin in `gpios` to the 1st pin in `gpios`. @@ -450,7 +455,8 @@ Note that the entire addressable space does not need to be mapped. }; kscan0: kscan { - compatible = "zmk,kscan-gpio-charlieplex"; + compatible = "zmk,kscan-gpio-charlieplex";k + wakeup-source; interrupt-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) >; gpios diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index 396456b2589..1a142eb2e4b 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -26,7 +26,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ ## Soft Off -The [soft off feature](../features/soft-off.md) allows turning the keyboard on/off from either dedicated hardware of using the [`&soft_off` behavior](../behaviors/soft-off.md) to turn off and a reset button to turn back on again. +The [soft off feature](../features/soft-off.md) allows turning the keyboard on/off from either dedicated hardware, or using the [`&soft_off` behavior](../behaviors/soft-off.md) to turn off and a reset button to turn back on again. ### Kconfig @@ -34,7 +34,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ | Config | Type | Description | Default | | ------------------------ | ---- | ------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_PM_SOFT_OFF` | bool | Enable soft off functionality from the keymap of dedicated hardware | n | +| `CONFIG_ZMK_PM_SOFT_OFF` | bool | Enable soft off functionality from the keymap or dedicated hardware | n | ## External Power Control diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index b0206825cbc..a3a5d7a1cb7 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -20,15 +20,15 @@ Once powered off, the keyboard will only wake up when: ## Soft Off With Existing Designs -For existing designs, using soft off is as simple as placing the [Soft Off Behavior](../behaviors/soft-off.md) in your keymap and then invoking it. For splits, at least for now, you'll need to place it somewhere on each side of your keymap and trigger on both sides, starting from the peripheral side first. +For existing designs, using soft off is as simple as placing the [Soft Off Behavior](../behaviors/soft-off.md) in your keymap and then invoking it. You can then wake up the keyboard by pressing the reset button once, and repeating this for each side for split keyboards. -## Adding Soft On/Off To New Designs +## Adding Dedicated Soft On/Off GPIO Pin To New Designs ### Hardware Design -ZMK's soft on/off requires a dedicated GPIO pin to be used to trigger powering off, and to wake the core from the +ZMK's dedicated soft on/off pin feature requires a dedicated GPIO pin to be used to trigger powering off, and to wake the core from the soft off state when it goes active again later. #### Simple Direct Pin @@ -71,10 +71,9 @@ In this case, we will be creating a dedicated instance of the [Soft Off Behavior ``` / { behaviors { - hw_soft_off: behavior_hw_soft_off { + hw_soft_off: hw_soft_off { compatible = "zmk,behavior-soft-off"; #binding-cells = <0>; - label = "HW_SO"; hold-time-ms = <5000>; }; }; From fceb0351a58622e7a89a649efdb387c1c2ea2df1 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 20 Dec 2023 18:08:40 -0800 Subject: [PATCH 1034/1130] refactor: Fixes for soft-off based on review. * Better naming for gpio-key behavior triggers. * Tweaks to scanned behavior trigger to avoid bad semaphore use, and reduce chance of issues with slowly scanned matrixes. * Various code cleanups of style issues. --- app/CMakeLists.txt | 6 +- app/Kconfig | 4 +- app/Kconfig.behaviors | 8 +- app/boards/shields/zmk_uno/Kconfig.defconfig | 3 + .../zmk_uno/boards/nrf52840dk_nrf52840.conf | 1 - .../boards/nrf52840dk_nrf52840.overlay | 4 +- app/dts/behaviors/soft_off.dtsi | 1 - ...aml => zmk,gpio-key-behavior-trigger.yaml} | 4 +- ....yaml => zmk,gpio-key-wakeup-trigger.yaml} | 2 +- ...mk,gpio-scanned-key-behavior-trigger.yaml} | 4 +- .../bindings/zmk,soft-off-wakeup-sources.yaml | 4 +- app/module/drivers/kscan/kscan_gpio_direct.c | 7 +- app/module/drivers/kscan/kscan_gpio_matrix.c | 7 +- app/src/behaviors/behavior_soft_off.c | 2 +- ...vior_key.c => gpio_key_behavior_trigger.c} | 88 +++++++------ app/src/gpio_key_wakeup_trigger.c | 96 +++++++++++++++ ....c => gpio_scanned_key_behavior_trigger.c} | 116 ++++++++---------- app/src/pm.c | 4 +- app/src/wakeup_trigger_key.c | 87 ------------- docs/docs/config/kscan.md | 2 +- docs/docs/features/soft-off.md | 12 +- 21 files changed, 230 insertions(+), 232 deletions(-) delete mode 100644 app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf rename app/dts/bindings/{zmk,behavior-key.yaml => zmk,gpio-key-behavior-trigger.yaml} (86%) rename app/dts/bindings/{zmk,wakeup-trigger-key.yaml => zmk,gpio-key-wakeup-trigger.yaml} (90%) rename app/dts/bindings/{zmk,behavior-key-scanned.yaml => zmk,gpio-scanned-key-behavior-trigger.yaml} (86%) rename app/src/{behavior_key.c => gpio_key_behavior_trigger.c} (61%) create mode 100644 app/src/gpio_key_wakeup_trigger.c rename app/src/{behavior_key_scanned.c => gpio_scanned_key_behavior_trigger.c} (57%) delete mode 100644 app/src/wakeup_trigger_key.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index bf7cfeefb40..908800db7d8 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -29,11 +29,11 @@ target_sources(app PRIVATE src/matrix_transform.c) target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) target_sources(app PRIVATE src/event_manager.c) -target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY app PRIVATE src/behavior_key.c) -target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_SCANNED app PRIVATE src/behavior_key_scanned.c) +target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_key_behavior_trigger.c) +target_sources_ifdef(CONFIG_ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_scanned_key_behavior_trigger.c) target_sources_ifdef(CONFIG_ZMK_PM_SOFT_OFF app PRIVATE src/pm.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) -target_sources_ifdef(CONFIG_ZMK_WAKEUP_TRIGGER_KEY app PRIVATE src/wakeup_trigger_key.c) +target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key_wakeup_trigger.c) target_sources(app PRIVATE src/events/activity_state_changed.c) target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/events/sensor_event.c) diff --git a/app/Kconfig b/app/Kconfig index 60a959d4986..3ca56793605 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -427,10 +427,10 @@ config ZMK_PM_SOFT_OFF bool "Soft-off support" select PM_DEVICE -config ZMK_WAKEUP_TRIGGER_KEY +config ZMK_GPIO_KEY_WAKEUP_TRIGGER bool "Hardware supported wakeup (GPIO)" default y - depends on DT_HAS_ZMK_WAKEUP_TRIGGER_KEY_ENABLED && ZMK_PM_SOFT_OFF + depends on DT_HAS_ZMK_GPIO_KEY_WAKEUP_TRIGGER_ENABLED && ZMK_PM_SOFT_OFF #Power Management endmenu diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 18fd5c15b0f..ecd06ffbff1 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -1,15 +1,15 @@ # Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT -config ZMK_BEHAVIOR_KEY +config ZMK_GPIO_KEY_BEHAVIOR_TRIGGER bool default y - depends on DT_HAS_ZMK_BEHAVIOR_KEY_ENABLED + depends on DT_HAS_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER_ENABLED -config ZMK_BEHAVIOR_KEY_SCANNED +config ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER bool default y - depends on DT_HAS_ZMK_BEHAVIOR_KEY_SCANNED_ENABLED + depends on DT_HAS_ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER_ENABLED config ZMK_BEHAVIOR_KEY_TOGGLE bool diff --git a/app/boards/shields/zmk_uno/Kconfig.defconfig b/app/boards/shields/zmk_uno/Kconfig.defconfig index cccca1d2dee..95602ca73f9 100644 --- a/app/boards/shields/zmk_uno/Kconfig.defconfig +++ b/app/boards/shields/zmk_uno/Kconfig.defconfig @@ -20,4 +20,7 @@ config ZMK_RGB_UNDERGLOW select WS2812_STRIP select SPI +config ZMK_PM_SOFT_OFF + default y if BOARD_NRF52840DK_NRF52840 + endif diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf deleted file mode 100644 index ac92c4d8f00..00000000000 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_ZMK_PM_SOFT_OFF=y \ No newline at end of file diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay index d08105c6889..b068b431e25 100644 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -43,7 +43,7 @@ encoder: &qdec0 { }; wakeup_source: wakeup_source { - compatible = "zmk,wakeup-trigger-key"; + compatible = "zmk,gpio-key-wakeup-trigger"; status = "okay"; trigger = <&button0>; @@ -58,7 +58,7 @@ encoder: &qdec0 { }; soft_off_behavior_key { - compatible = "zmk,behavior-key"; + compatible = "zmk,gpio-key-behavior-trigger"; status = "okay"; bindings = <&soft_off>; key = <&button0>; diff --git a/app/dts/behaviors/soft_off.dtsi b/app/dts/behaviors/soft_off.dtsi index c88e1b51f12..1e58c7711d0 100644 --- a/app/dts/behaviors/soft_off.dtsi +++ b/app/dts/behaviors/soft_off.dtsi @@ -8,7 +8,6 @@ behaviors { /omit-if-no-ref/ soft_off: soft_off { compatible = "zmk,behavior-soft-off"; - label = "SOFTOFF"; #binding-cells = <0>; }; }; diff --git a/app/dts/bindings/zmk,behavior-key.yaml b/app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml similarity index 86% rename from app/dts/bindings/zmk,behavior-key.yaml rename to app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml index ff7a585eafa..2a1387f0220 100644 --- a/app/dts/bindings/zmk,behavior-key.yaml +++ b/app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml @@ -4,7 +4,7 @@ description: | Driver for a dedicated key for invoking a connected behavior. -compatible: "zmk,behavior-key" +compatible: "zmk,gpio-key-behavior-trigger" include: base.yaml @@ -16,7 +16,7 @@ properties: bindings: type: phandle required: true - description: The GPIO key that triggers wake via interrupt + description: The behavior to invoke when the GPIO key is pressed debounce-press-ms: type: int default: 5 diff --git a/app/dts/bindings/zmk,wakeup-trigger-key.yaml b/app/dts/bindings/zmk,gpio-key-wakeup-trigger.yaml similarity index 90% rename from app/dts/bindings/zmk,wakeup-trigger-key.yaml rename to app/dts/bindings/zmk,gpio-key-wakeup-trigger.yaml index fa7636d1f32..4e16ff3307d 100644 --- a/app/dts/bindings/zmk,wakeup-trigger-key.yaml +++ b/app/dts/bindings/zmk,gpio-key-wakeup-trigger.yaml @@ -4,7 +4,7 @@ description: | Driver for a dedicated key for waking the device from sleep -compatible: "zmk,wakeup-trigger-key" +compatible: "zmk,gpio-key-wakeup-trigger" include: base.yaml diff --git a/app/dts/bindings/zmk,behavior-key-scanned.yaml b/app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml similarity index 86% rename from app/dts/bindings/zmk,behavior-key-scanned.yaml rename to app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml index bdb3abaff0e..860155dda72 100644 --- a/app/dts/bindings/zmk,behavior-key-scanned.yaml +++ b/app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml @@ -4,7 +4,7 @@ description: | Driver for a dedicated key triggered by matrix scanning for invoking a connected behavior. -compatible: "zmk,behavior-key-scanned" +compatible: "zmk,gpio-scanned-key-behavior-trigger" include: base.yaml @@ -16,7 +16,7 @@ properties: bindings: type: phandle required: true - description: The GPIO key that triggers wake via interrupt + description: The behavior to invoke when the GPIO key is pressed debounce-press-ms: type: int default: 5 diff --git a/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml b/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml index f98039a0ca9..6b55d5d265a 100644 --- a/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml +++ b/app/dts/bindings/zmk,soft-off-wakeup-sources.yaml @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT description: | - Description of all possible wakeup-sources from a forces + Description of all possible wakeup-sources from a forced soft-off state. compatible: "zmk,soft-off-wakeup-sources" @@ -11,4 +11,4 @@ properties: wakeup-sources: type: phandles required: true - description: List of wakeup-sources that should be enabled to wake the system from forces soft-off state. + description: List of wakeup-sources that should be enabled to wake the system from forced soft-off state. diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index 2bc35f4c0b3..7cfdb480f10 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -322,8 +322,6 @@ static int kscan_direct_init(const struct device *dev) { #if IS_ENABLED(CONFIG_PM_DEVICE) static int kscan_direct_pm_action(const struct device *dev, enum pm_device_action action) { - int ret = 0; - switch (action) { case PM_DEVICE_ACTION_SUSPEND: kscan_direct_disable(dev); @@ -332,11 +330,8 @@ static int kscan_direct_pm_action(const struct device *dev, enum pm_device_actio kscan_direct_enable(dev); break; default: - ret = -ENOTSUP; - break; + return -ENOTSUP; } - - return ret; } #endif // IS_ENABLED(CONFIG_PM_DEVICE) diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index 3917196e6c8..0daf97dc22d 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -425,8 +425,6 @@ static int kscan_matrix_init(const struct device *dev) { #if IS_ENABLED(CONFIG_PM_DEVICE) static int kscan_matrix_pm_action(const struct device *dev, enum pm_device_action action) { - int ret = 0; - switch (action) { case PM_DEVICE_ACTION_SUSPEND: kscan_matrix_disable(dev); @@ -435,11 +433,8 @@ static int kscan_matrix_pm_action(const struct device *dev, enum pm_device_actio kscan_matrix_enable(dev); break; default: - ret = -ENOTSUP; - break; + return -ENOTSUP; } - - return ret; } #endif // IS_ENABLED(CONFIG_PM_DEVICE) diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index 0f24a644d9a..e6096bb4841 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 The ZMK Contributors + * Copyright (c) 2023 The ZMK Contributors * * SPDX-License-Identifier: MIT */ diff --git a/app/src/behavior_key.c b/app/src/gpio_key_behavior_trigger.c similarity index 61% rename from app/src/behavior_key.c rename to app/src/gpio_key_behavior_trigger.c index 3633ce39a40..a72f8e48925 100644 --- a/app/src/behavior_key.c +++ b/app/src/gpio_key_behavior_trigger.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT zmk_behavior_key +#define DT_DRV_COMPAT zmk_gpio_key_behavior_trigger #include #include @@ -19,13 +19,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -struct behavior_key_config { +struct gkbt_config { struct zmk_debounce_config debounce_config; int32_t debounce_scan_period_ms; struct gpio_dt_spec key; }; -struct behavior_key_data { +struct gkbt_data { struct zmk_behavior_binding binding; struct zmk_debounce_state debounce_state; struct gpio_callback key_callback; @@ -34,21 +34,21 @@ struct behavior_key_data { uint32_t read_time; }; -static void bk_enable_interrupt(const struct device *dev) { - const struct behavior_key_config *config = dev->config; +static void gkbt_enable_interrupt(const struct device *dev) { + const struct gkbt_config *config = dev->config; gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_LEVEL_ACTIVE); } -static void bk_disable_interrupt(const struct device *dev) { - const struct behavior_key_config *config = dev->config; +static void gkbt_disable_interrupt(const struct device *dev) { + const struct gkbt_config *config = dev->config; gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_DISABLE); } -static void bk_read(const struct device *dev) { - const struct behavior_key_config *config = dev->config; - struct behavior_key_data *data = dev->data; +static void gkbt_read(const struct device *dev) { + const struct gkbt_config *config = dev->config; + struct gkbt_data *data = dev->data; zmk_debounce_update(&data->debounce_state, gpio_pin_get_dt(&config->key), config->debounce_scan_period_ms, &config->debounce_config); @@ -71,65 +71,72 @@ static void bk_read(const struct device *dev) { k_work_reschedule(&data->update_work, K_TIMEOUT_ABS_MS(data->read_time)); } else { - bk_enable_interrupt(dev); + gkbt_enable_interrupt(dev); } } -static void bk_update_work(struct k_work *work) { +static void gkbt_update_work(struct k_work *work) { struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); - struct behavior_key_data *data = CONTAINER_OF(dwork, struct behavior_key_data, update_work); - bk_read(data->dev); + struct gkbt_data *data = CONTAINER_OF(dwork, struct gkbt_data, update_work); + gkbt_read(data->dev); } -static void bk_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, - const gpio_port_pins_t pin) { - struct behavior_key_data *data = CONTAINER_OF(cb, struct behavior_key_data, key_callback); +static void gkbt_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, + const gpio_port_pins_t pin) { + struct gkbt_data *data = CONTAINER_OF(cb, struct gkbt_data, key_callback); - bk_disable_interrupt(data->dev); + gkbt_disable_interrupt(data->dev); data->read_time = k_uptime_get(); k_work_reschedule(&data->update_work, K_NO_WAIT); } -static int behavior_key_init(const struct device *dev) { - const struct behavior_key_config *config = dev->config; - struct behavior_key_data *data = dev->data; +static void gkbt_wait_for_key_release(const struct device *dev) { + const struct gkbt_config *config = dev->config; + + while (gpio_pin_get_dt(&config->key)) { + k_sleep(K_MSEC(100)); + } +} + +static int gkbt_init(const struct device *dev) { + const struct gkbt_config *config = dev->config; + struct gkbt_data *data = dev->data; if (!device_is_ready(config->key.port)) { - LOG_ERR("GPIO port is not ready"); + LOG_ERR("GPIO port %s is not ready", config->key.port->name); return -ENODEV; } - k_work_init_delayable(&data->update_work, bk_update_work); + k_work_init_delayable(&data->update_work, gkbt_update_work); data->dev = dev; gpio_pin_configure_dt(&config->key, GPIO_INPUT); - gpio_init_callback(&data->key_callback, bk_gpio_irq_callback, BIT(config->key.pin)); + gpio_init_callback(&data->key_callback, gkbt_gpio_irq_callback, BIT(config->key.pin)); gpio_add_callback(config->key.port, &data->key_callback); - while (gpio_pin_get_dt(&config->key)) { - k_sleep(K_MSEC(100)); - } + // Be sure our wakeup key is released before startup continues to avoid wake/sleep loop. + gkbt_wait_for_key_release(dev); - bk_enable_interrupt(dev); + gkbt_enable_interrupt(dev); return 0; } -static int behavior_key_pm_action(const struct device *dev, enum pm_device_action action) { - const struct behavior_key_config *config = dev->config; - struct behavior_key_data *data = dev->data; +static int gkbt_pm_action(const struct device *dev, enum pm_device_action action) { + const struct gkbt_config *config = dev->config; + struct gkbt_data *data = dev->data; int ret; switch (action) { case PM_DEVICE_ACTION_SUSPEND: - bk_disable_interrupt(dev); + gkbt_disable_interrupt(dev); ret = gpio_remove_callback(config->key.port, &data->key_callback); break; case PM_DEVICE_ACTION_RESUME: ret = gpio_add_callback(config->key.port, &data->key_callback); - bk_enable_interrupt(dev); + gkbt_enable_interrupt(dev); break; default: ret = -ENOTSUP; @@ -139,8 +146,8 @@ static int behavior_key_pm_action(const struct device *dev, enum pm_device_actio return ret; } -#define BK_INST(n) \ - const struct behavior_key_config bk_config_##n = { \ +#define GKBT_INST(n) \ + const struct gkbt_config gkbt_config_##n = { \ .key = GPIO_DT_SPEC_GET(DT_INST_PHANDLE(n, key), gpios), \ .debounce_config = \ { \ @@ -149,11 +156,12 @@ static int behavior_key_pm_action(const struct device *dev, enum pm_device_actio }, \ .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ }; \ - struct behavior_key_data bk_data_##n = { \ + struct gkbt_data gkbt_data_##n = { \ .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ }; \ - PM_DEVICE_DT_INST_DEFINE(n, behavior_key_pm_action); \ - DEVICE_DT_INST_DEFINE(n, behavior_key_init, PM_DEVICE_DT_INST_GET(n), &bk_data_##n, \ - &bk_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL); + PM_DEVICE_DT_INST_DEFINE(n, gkbt_pm_action); \ + DEVICE_DT_INST_DEFINE(n, gkbt_init, PM_DEVICE_DT_INST_GET(n), &gkbt_data_##n, \ + &gkbt_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + NULL); -DT_INST_FOREACH_STATUS_OKAY(BK_INST) +DT_INST_FOREACH_STATUS_OKAY(GKBT_INST) diff --git a/app/src/gpio_key_wakeup_trigger.c b/app/src/gpio_key_wakeup_trigger.c new file mode 100644 index 00000000000..ac0c6b228db --- /dev/null +++ b/app/src/gpio_key_wakeup_trigger.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define DT_DRV_COMPAT zmk_gpio_key_wakeup_trigger + +struct gpio_key_wakeup_trigger_config { + struct gpio_dt_spec trigger; + size_t extra_gpios_count; + struct gpio_dt_spec extra_gpios[]; +}; + +static int zmk_gpio_key_wakeup_trigger_init(const struct device *dev) { +#if IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_init_suspended(dev); + pm_device_wakeup_enable(dev, true); +#endif + + return 0; +} + +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int gpio_key_wakeup_trigger_pm_resume(const struct device *dev) { + const struct gpio_key_wakeup_trigger_config *config = dev->config; + + int ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_LEVEL_ACTIVE); + if (ret < 0) { + LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); + goto exit; + } + + for (int i = 0; i < config->extra_gpios_count; i++) { + ret = gpio_pin_configure_dt(&config->extra_gpios[i], GPIO_OUTPUT_ACTIVE); + if (ret < 0) { + LOG_WRN("Failed to set extra GPIO pin active for waker (%d)", ret); + goto exit; + } + } + +exit: + return ret; +} + +static int gpio_key_wakeup_trigger_pm_suspend(const struct device *dev) { + const struct gpio_key_wakeup_trigger_config *config = dev->config; + + int ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_DISABLE); + if (ret < 0) { + LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); + } + + return ret; +} + +static int gpio_key_wakeup_trigger_pm_action(const struct device *dev, + enum pm_device_action action) { + switch (action) { + case PM_DEVICE_ACTION_RESUME: + return gpio_key_wakeup_trigger_pm_resume(dev); + case PM_DEVICE_ACTION_SUSPEND: + return gpio_key_wakeup_trigger_pm_suspend(dev); + default: + return -ENOTSUP; + } +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + +#define WAKEUP_TRIGGER_EXTRA_GPIO_SPEC(idx, n) \ + GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(n), extra_gpios, idx) + +#define GPIO_KEY_WAKEUP_TRIGGER_INST(n) \ + const struct gpio_key_wakeup_trigger_config wtk_cfg_##n = { \ + .trigger = GPIO_DT_SPEC_GET(DT_INST_PROP(n, trigger), gpios), \ + .extra_gpios = {LISTIFY(DT_PROP_LEN_OR(DT_DRV_INST(n), extra_gpios, 0), \ + WAKEUP_TRIGGER_EXTRA_GPIO_SPEC, (, ), n)}, \ + .extra_gpios_count = DT_PROP_LEN_OR(DT_DRV_INST(n), extra_gpios, 0), \ + }; \ + PM_DEVICE_DT_INST_DEFINE(n, gpio_key_wakeup_trigger_pm_action); \ + DEVICE_DT_INST_DEFINE(n, zmk_gpio_key_wakeup_trigger_init, PM_DEVICE_DT_INST_GET(n), NULL, \ + &wtk_cfg_##n, PRE_KERNEL_2, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL); + +DT_INST_FOREACH_STATUS_OKAY(GPIO_KEY_WAKEUP_TRIGGER_INST) diff --git a/app/src/behavior_key_scanned.c b/app/src/gpio_scanned_key_behavior_trigger.c similarity index 57% rename from app/src/behavior_key_scanned.c rename to app/src/gpio_scanned_key_behavior_trigger.c index c961b292622..d27b162b191 100644 --- a/app/src/behavior_key_scanned.c +++ b/app/src/gpio_scanned_key_behavior_trigger.c @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT zmk_behavior_key_scanned +#define DT_DRV_COMPAT zmk_gpio_scanned_key_behavior_trigger #include #include @@ -19,45 +19,41 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -struct behavior_key_scanned_config { +struct gskbt_config { struct zmk_debounce_config debounce_config; int32_t debounce_scan_period_ms; struct gpio_dt_spec key; }; -struct behavior_key_scanned_data { +struct gskbt_data { struct zmk_behavior_binding binding; struct zmk_debounce_state debounce_state; struct gpio_callback key_callback; const struct device *dev; struct k_work_delayable update_work; + struct k_work gpio_trigger_work; uint32_t read_time; + uint32_t trigger_time; bool pin_active; bool active_scan_detected; - struct k_sem sem; }; -static void bks_enable_interrupt(const struct device *dev, bool active_scanning) { - const struct behavior_key_scanned_config *config = dev->config; +static void gskbt_enable_interrupt(const struct device *dev, bool active_scanning) { + const struct gskbt_config *config = dev->config; gpio_pin_interrupt_configure_dt(&config->key, active_scanning ? GPIO_INT_EDGE_TO_ACTIVE : GPIO_INT_LEVEL_ACTIVE); } -static void bks_disable_interrupt(const struct device *dev) { - const struct behavior_key_scanned_config *config = dev->config; +static void gskbt_disable_interrupt(const struct device *dev) { + const struct gskbt_config *config = dev->config; gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_DISABLE); } -static void bks_read(const struct device *dev) { - const struct behavior_key_scanned_config *config = dev->config; - struct behavior_key_scanned_data *data = dev->data; - - if (k_sem_take(&data->sem, K_NO_WAIT) < 0) { - // k_work_reschedule(&data->update_work, K_NO_WAIT); - return; - } +static void gskbt_read(const struct device *dev) { + const struct gskbt_config *config = dev->config; + struct gskbt_data *data = dev->data; zmk_debounce_update(&data->debounce_state, data->active_scan_detected, config->debounce_scan_period_ms, &config->debounce_config); @@ -81,89 +77,83 @@ static void bks_read(const struct device *dev) { k_work_schedule(&data->update_work, K_TIMEOUT_ABS_MS(data->read_time)); } else { - bks_enable_interrupt(dev, false); + gskbt_enable_interrupt(dev, false); } - - k_sem_give(&data->sem); } -static void bks_update_work(struct k_work *work) { +static void gskbt_update_work(struct k_work *work) { struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); - struct behavior_key_scanned_data *data = - CONTAINER_OF(dwork, struct behavior_key_scanned_data, update_work); - bks_read(data->dev); + struct gskbt_data *data = CONTAINER_OF(dwork, struct gskbt_data, update_work); + gskbt_read(data->dev); } -static void bks_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, - const gpio_port_pins_t pin) { - struct behavior_key_scanned_data *data = - CONTAINER_OF(cb, struct behavior_key_scanned_data, key_callback); - const struct behavior_key_scanned_config *config = data->dev->config; - - uint32_t time = k_uptime_get(); - - if (k_sem_take(&data->sem, K_MSEC(10)) < 0) { - LOG_ERR("FAILED TO TAKE THE SEMAPHORE"); - // Do more? - return; - } +static void gskbt_gpio_interrupt_work(struct k_work *work) { + struct gskbt_data *data = CONTAINER_OF(work, struct gskbt_data, gpio_trigger_work); - data->active_scan_detected = true; - data->read_time = time; + const struct gskbt_config *config = data->dev->config; if (!zmk_debounce_is_active(&data->debounce_state)) { - // When we get that very first interrupt, we need to schedule the update checks to fall in - // between each of the real scans, so we can do our checks for state *after* each scan has + // When we get that very first interrupt, we need to schedule the update checks right before + // the next real scan, so we can do our checks for state *after* each scan has // occurred. + data->read_time = data->trigger_time; k_work_reschedule(&data->update_work, - K_TIMEOUT_ABS_MS(time + (config->debounce_scan_period_ms / 2))); - - bks_enable_interrupt(data->dev, true); + K_TIMEOUT_ABS_MS(data->read_time + config->debounce_scan_period_ms - 1)); } +} - k_sem_give(&data->sem); +static void gskbt_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, + const gpio_port_pins_t pin) { + struct gskbt_data *data = CONTAINER_OF(cb, struct gskbt_data, key_callback); + + // LOG_DBG("IRQ"); + data->active_scan_detected = true; + data->trigger_time = k_uptime_get(); + gskbt_enable_interrupt(data->dev, true); + k_work_submit(&data->gpio_trigger_work); } -static int behavior_key_scanned_init(const struct device *dev) { - const struct behavior_key_scanned_config *config = dev->config; - struct behavior_key_scanned_data *data = dev->data; +static int gskbt_init(const struct device *dev) { + const struct gskbt_config *config = dev->config; + struct gskbt_data *data = dev->data; if (!device_is_ready(config->key.port)) { LOG_ERR("GPIO port is not ready"); return -ENODEV; } - k_work_init_delayable(&data->update_work, bks_update_work); - k_sem_init(&data->sem, 1, 1); + k_work_init_delayable(&data->update_work, gskbt_update_work); + k_work_init(&data->gpio_trigger_work, gskbt_gpio_interrupt_work); + data->dev = dev; gpio_pin_configure_dt(&config->key, GPIO_INPUT); - gpio_init_callback(&data->key_callback, bks_gpio_irq_callback, BIT(config->key.pin)); + gpio_init_callback(&data->key_callback, gskbt_gpio_irq_callback, BIT(config->key.pin)); gpio_add_callback(config->key.port, &data->key_callback); while (gpio_pin_get_dt(&config->key)) { k_sleep(K_MSEC(100)); } - bks_enable_interrupt(dev, false); + gskbt_enable_interrupt(dev, false); return 0; } -static int behavior_key_scanned_pm_action(const struct device *dev, enum pm_device_action action) { - const struct behavior_key_scanned_config *config = dev->config; - struct behavior_key_scanned_data *data = dev->data; +static int gskbt_pm_action(const struct device *dev, enum pm_device_action action) { + const struct gskbt_config *config = dev->config; + struct gskbt_data *data = dev->data; int ret; switch (action) { case PM_DEVICE_ACTION_SUSPEND: - bks_disable_interrupt(dev); + gskbt_disable_interrupt(dev); ret = gpio_remove_callback(config->key.port, &data->key_callback); break; case PM_DEVICE_ACTION_RESUME: ret = gpio_add_callback(config->key.port, &data->key_callback); - bks_enable_interrupt(dev, false); + gskbt_enable_interrupt(dev, false); break; default: ret = -ENOTSUP; @@ -173,8 +163,8 @@ static int behavior_key_scanned_pm_action(const struct device *dev, enum pm_devi return ret; } -#define BK_INST(n) \ - const struct behavior_key_scanned_config bks_config_##n = { \ +#define GSKBT_INST(n) \ + const struct gskbt_config gskbt_config_##n = { \ .key = GPIO_DT_SPEC_GET(DT_INST_PHANDLE(n, key), gpios), \ .debounce_config = \ { \ @@ -183,12 +173,12 @@ static int behavior_key_scanned_pm_action(const struct device *dev, enum pm_devi }, \ .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ }; \ - struct behavior_key_scanned_data bks_data_##n = { \ + struct gskbt_data gskbt_data_##n = { \ .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ }; \ - PM_DEVICE_DT_INST_DEFINE(n, behavior_key_scanned_pm_action); \ - DEVICE_DT_INST_DEFINE(n, behavior_key_scanned_init, PM_DEVICE_DT_INST_GET(n), &bks_data_##n, \ - &bks_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + PM_DEVICE_DT_INST_DEFINE(n, gskbt_pm_action); \ + DEVICE_DT_INST_DEFINE(n, gskbt_init, PM_DEVICE_DT_INST_GET(n), &gskbt_data_##n, \ + &gskbt_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ NULL); -DT_INST_FOREACH_STATUS_OKAY(BK_INST) +DT_INST_FOREACH_STATUS_OKAY(GSKBT_INST) diff --git a/app/src/pm.c b/app/src/pm.c index a78b6ae53cb..41d72eeed30 100644 --- a/app/src/pm.c +++ b/app/src/pm.c @@ -41,10 +41,10 @@ int zmk_pm_soft_off(void) { // from normal "inactive goes to sleep" behavior, so disable them as wakeup devices // and then suspend them so we're ready to take over setting up our system // and then putting it into an off state. + LOG_DBG("soft-on-off pressed cb: suspend devices"); for (int i = 0; i < device_count; i++) { const struct device *dev = &devs[i]; - LOG_DBG("soft-on-off pressed cb: suspend device"); if (pm_device_wakeup_is_enabled(dev)) { pm_device_wakeup_enable(dev, false); } @@ -60,6 +60,6 @@ int zmk_pm_soft_off(void) { } #endif // HAS_WAKERS - LOG_DBG("soft-on-off interrupt: go to sleep"); + LOG_DBG("soft-off: go to sleep"); return pm_state_force(0U, &(struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); } diff --git a/app/src/wakeup_trigger_key.c b/app/src/wakeup_trigger_key.c deleted file mode 100644 index 0cc4f250707..00000000000 --- a/app/src/wakeup_trigger_key.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2023 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#include -#include -#include -#include -#include - -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -#define DT_DRV_COMPAT zmk_wakeup_trigger_key - -struct wakeup_trigger_key_config { - struct gpio_dt_spec trigger; - size_t extra_gpios_count; - struct gpio_dt_spec extra_gpios[]; -}; - -static int zmk_wakeup_trigger_key_init(const struct device *dev) { -#if IS_ENABLED(CONFIG_PM_DEVICE) - pm_device_init_suspended(dev); - pm_device_wakeup_enable(dev, true); -#endif - - return 0; -} - -#if IS_ENABLED(CONFIG_PM_DEVICE) - -static int wakeup_trigger_key_pm_action(const struct device *dev, enum pm_device_action action) { - const struct wakeup_trigger_key_config *config = dev->config; - int ret = 0; - - switch (action) { - case PM_DEVICE_ACTION_RESUME: - ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_LEVEL_ACTIVE); - if (ret < 0) { - LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); - return ret; - } - - for (int i = 0; i < config->extra_gpios_count; i++) { - ret = gpio_pin_configure_dt(&config->extra_gpios[i], GPIO_OUTPUT_ACTIVE); - if (ret < 0) { - LOG_WRN("Failed to set extra GPIO pin active for waker (%d)", ret); - } - } - break; - case PM_DEVICE_ACTION_SUSPEND: - - ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_DISABLE); - if (ret < 0) { - LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); - return ret; - } - break; - default: - ret = -ENOTSUP; - break; - } - - return ret; -} - -#endif // IS_ENABLED(CONFIG_PM_DEVICE) - -#define WAKEUP_TRIGGER_EXTRA_GPIO_SPEC(idx, n) \ - GPIO_DT_SPEC_GET_BY_IDX(DT_DRV_INST(n), extra_gpios, idx) - -#define WAKEUP_TRIGGER_KEY_INST(n) \ - const struct wakeup_trigger_key_config wtk_cfg_##n = { \ - .trigger = GPIO_DT_SPEC_GET(DT_INST_PROP(n, trigger), gpios), \ - .extra_gpios = {LISTIFY(DT_PROP_LEN_OR(DT_DRV_INST(n), extra_gpios, 0), \ - WAKEUP_TRIGGER_EXTRA_GPIO_SPEC, (, ), n)}, \ - .extra_gpios_count = DT_PROP_LEN_OR(DT_DRV_INST(n), extra_gpios, 0), \ - }; \ - PM_DEVICE_DT_INST_DEFINE(n, wakeup_trigger_key_pm_action); \ - DEVICE_DT_INST_DEFINE(n, zmk_wakeup_trigger_key_init, PM_DEVICE_DT_INST_GET(n), NULL, \ - &wtk_cfg_##n, PRE_KERNEL_2, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL); - -DT_INST_FOREACH_STATUS_OKAY(WAKEUP_TRIGGER_KEY_INST) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 3076edc0f41..4a3954f9f03 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -455,7 +455,7 @@ Note that the entire addressable space does not need to be mapped. }; kscan0: kscan { - compatible = "zmk,kscan-gpio-charlieplex";k + compatible = "zmk,kscan-gpio-charlieplex"; wakeup-source; interrupt-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) >; diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index a3a5d7a1cb7..6b6b5cf4b33 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -79,7 +79,7 @@ In this case, we will be creating a dedicated instance of the [Soft Off Behavior }; soft_off_behavior_key { - compatible = "zmk,behavior-key"; + compatible = "zmk,gpio-key-behavior-trigger"; bindings = <&hw_soft_off>; key = <&wakeup_key>; }; @@ -88,7 +88,7 @@ In this case, we will be creating a dedicated instance of the [Soft Off Behavior Here are the properties for the behavior key node: -- The `compatible` property for the node must be `zmk,behavior-key`. +- The `compatible` property for the node must be `zmk,gpio-key-behavior-trigger`. - The `bindings` property is a phandle to the soft off behavior defined above. - The `key` property is a phandle to the GPIO key defined earlier. @@ -97,7 +97,7 @@ If you have set up your on/off to be controlled by a matrix-integrated combo, th ``` / { soft_off_behavior_key { - compatible = "zmk,behavior-key-scanned"; + compatible = "zmk,gpio-scanned-key-behavior-trigger"; status = "okay"; bindings = <&hw_soft_off>; key = <&wakeup_key>; @@ -105,7 +105,7 @@ If you have set up your on/off to be controlled by a matrix-integrated combo, th }; ``` -Note that the only difference from the `soft_off_behavior_key` definition for GPIO keys above is the `compatible` value of `zmk,behavior-key-scanned`. +Note that the only difference from the `soft_off_behavior_key` definition for GPIO keys above is the `compatible` value of `zmk,gpio-scanned-key-behavior-trigger`. #### Wakeup Sources @@ -131,7 +131,7 @@ Next, we need to add another device which will be enabled only when the keyboard ``` / { wakeup_source: wakeup_source { - compatible = "zmk,wakeup-trigger-key"; + compatible = "zmk,gpio-key-wakeup-trigger"; trigger = <&wakeup_key>; wakeup-source; @@ -141,7 +141,7 @@ Next, we need to add another device which will be enabled only when the keyboard Here are the properties for the node: -- The `compatible` property for the node must be `zmk,wakeup-trigger-key`. +- The `compatible` property for the node must be `zmk,gpio-key-wakeup-trigger`. - The `trigger` property is a phandle to the GPIO key defined earlier. - The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. - An optional `output-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. From 5ebe924e941ba00e81d1c66ad2333e6a73826754 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 29 Dec 2023 15:03:14 -0800 Subject: [PATCH 1035/1130] chore: Various soft-off review fixes * Code style to avoid goto. * Enable pm.c compilation via dedicated Kconfig flag. * Comment wakeup trigger PM behavior. --- app/CMakeLists.txt | 2 +- app/Kconfig | 4 ++++ app/module/drivers/kscan/kscan_gpio_direct.c | 6 ++---- app/module/drivers/kscan/kscan_gpio_matrix.c | 6 ++---- app/src/gpio_key_wakeup_trigger.c | 16 +++++++++++++--- app/src/pm.c | 4 ++++ 6 files changed, 26 insertions(+), 12 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 908800db7d8..a56a63b369d 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -31,7 +31,7 @@ target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) target_sources(app PRIVATE src/event_manager.c) target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_key_behavior_trigger.c) target_sources_ifdef(CONFIG_ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_scanned_key_behavior_trigger.c) -target_sources_ifdef(CONFIG_ZMK_PM_SOFT_OFF app PRIVATE src/pm.c) +target_sources_ifdef(CONFIG_ZMK_PM app PRIVATE src/pm.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key_wakeup_trigger.c) target_sources(app PRIVATE src/events/activity_state_changed.c) diff --git a/app/Kconfig b/app/Kconfig index 3ca56793605..df84d97d253 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -423,8 +423,12 @@ config ZMK_EXT_POWER bool "Enable support to control external power output" default y +config ZMK_PM + bool + config ZMK_PM_SOFT_OFF bool "Soft-off support" + select ZMK_PM select PM_DEVICE config ZMK_GPIO_KEY_WAKEUP_TRIGGER diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index 7cfdb480f10..a10190da9e7 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -324,11 +324,9 @@ static int kscan_direct_init(const struct device *dev) { static int kscan_direct_pm_action(const struct device *dev, enum pm_device_action action) { switch (action) { case PM_DEVICE_ACTION_SUSPEND: - kscan_direct_disable(dev); - break; + return kscan_direct_disable(dev); case PM_DEVICE_ACTION_RESUME: - kscan_direct_enable(dev); - break; + return kscan_direct_enable(dev); default: return -ENOTSUP; } diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index 0daf97dc22d..8a3c39f2ba9 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -427,11 +427,9 @@ static int kscan_matrix_init(const struct device *dev) { static int kscan_matrix_pm_action(const struct device *dev, enum pm_device_action action) { switch (action) { case PM_DEVICE_ACTION_SUSPEND: - kscan_matrix_disable(dev); - break; + return kscan_matrix_disable(dev); case PM_DEVICE_ACTION_RESUME: - kscan_matrix_enable(dev); - break; + return kscan_matrix_enable(dev); default: return -ENOTSUP; } diff --git a/app/src/gpio_key_wakeup_trigger.c b/app/src/gpio_key_wakeup_trigger.c index ac0c6b228db..308c4973d67 100644 --- a/app/src/gpio_key_wakeup_trigger.c +++ b/app/src/gpio_key_wakeup_trigger.c @@ -39,18 +39,17 @@ static int gpio_key_wakeup_trigger_pm_resume(const struct device *dev) { int ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_LEVEL_ACTIVE); if (ret < 0) { LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); - goto exit; + return ret; } for (int i = 0; i < config->extra_gpios_count; i++) { ret = gpio_pin_configure_dt(&config->extra_gpios[i], GPIO_OUTPUT_ACTIVE); if (ret < 0) { LOG_WRN("Failed to set extra GPIO pin active for waker (%d)", ret); - goto exit; + return ret; } } -exit: return ret; } @@ -62,9 +61,20 @@ static int gpio_key_wakeup_trigger_pm_suspend(const struct device *dev) { LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); } + for (int i = 0; i < config->extra_gpios_count; i++) { + ret = gpio_pin_configure_dt(&config->extra_gpios[i], GPIO_DISCONNECTED); + if (ret < 0) { + LOG_WRN("Failed to set extra GPIO pin disconnected for waker (%d)", ret); + return ret; + } + } + return ret; } +// The waker is "backwards", in as much as it is designed to be resumed/enabled immediately +// before a soft-off state is entered, so it can wake the device from that state later. +// So this waker correctly resumes and is ready to wake the device later. static int gpio_key_wakeup_trigger_pm_action(const struct device *dev, enum pm_device_action action) { switch (action) { diff --git a/app/src/pm.c b/app/src/pm.c index 41d72eeed30..a4599ac8fce 100644 --- a/app/src/pm.c +++ b/app/src/pm.c @@ -15,6 +15,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include +#if IS_ENABLED(CONFIG_ZMK_PM_SOFT_OFF) + #define HAS_WAKERS DT_HAS_COMPAT_STATUS_OKAY(zmk_soft_off_wakeup_sources) #if HAS_WAKERS @@ -63,3 +65,5 @@ int zmk_pm_soft_off(void) { LOG_DBG("soft-off: go to sleep"); return pm_state_force(0U, &(struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); } + +#endif // IS_ENABLED(CONFIG_ZMK_PM_SOFT_OFF) \ No newline at end of file From 933fdcd36400ea9d2f73284ff5936e0c6cefe879 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 29 Dec 2023 16:28:22 -0800 Subject: [PATCH 1036/1130] refactor(pm): Remove scanned behavior trigger. * Remove the painful scanned behavior trigger for now, future enhancement will restore this high level functionality using kscan directly. --- app/CMakeLists.txt | 1 - app/Kconfig.behaviors | 5 - ...zmk,gpio-scanned-key-behavior-trigger.yaml | 31 --- app/src/gpio_scanned_key_behavior_trigger.c | 184 ------------------ docs/docs/features/soft-off.md | 17 +- 5 files changed, 2 insertions(+), 236 deletions(-) delete mode 100644 app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml delete mode 100644 app/src/gpio_scanned_key_behavior_trigger.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index a56a63b369d..4ee9135d23c 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -30,7 +30,6 @@ target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) target_sources(app PRIVATE src/event_manager.c) target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_key_behavior_trigger.c) -target_sources_ifdef(CONFIG_ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_scanned_key_behavior_trigger.c) target_sources_ifdef(CONFIG_ZMK_PM app PRIVATE src/pm.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key_wakeup_trigger.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index ecd06ffbff1..6abdbddd774 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -6,11 +6,6 @@ config ZMK_GPIO_KEY_BEHAVIOR_TRIGGER default y depends on DT_HAS_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER_ENABLED -config ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER - bool - default y - depends on DT_HAS_ZMK_GPIO_SCANNED_KEY_BEHAVIOR_TRIGGER_ENABLED - config ZMK_BEHAVIOR_KEY_TOGGLE bool default y diff --git a/app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml b/app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml deleted file mode 100644 index 860155dda72..00000000000 --- a/app/dts/bindings/zmk,gpio-scanned-key-behavior-trigger.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (c) 2023 The ZMK Contributors -# SPDX-License-Identifier: MIT - -description: | - Driver for a dedicated key triggered by matrix scanning for invoking a connected behavior. - -compatible: "zmk,gpio-scanned-key-behavior-trigger" - -include: base.yaml - -properties: - key: - type: phandle - required: true - description: The GPIO key that triggers wake via interrupt - bindings: - type: phandle - required: true - description: The behavior to invoke when the GPIO key is pressed - debounce-press-ms: - type: int - default: 5 - description: Debounce time for key press in milliseconds. Use 0 for eager debouncing. - debounce-release-ms: - type: int - default: 5 - description: Debounce time for key release in milliseconds. - debounce-scan-period-ms: - type: int - default: 1 - description: Time between reads in milliseconds when any key is pressed. diff --git a/app/src/gpio_scanned_key_behavior_trigger.c b/app/src/gpio_scanned_key_behavior_trigger.c deleted file mode 100644 index d27b162b191..00000000000 --- a/app/src/gpio_scanned_key_behavior_trigger.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2023 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#define DT_DRV_COMPAT zmk_gpio_scanned_key_behavior_trigger - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -struct gskbt_config { - struct zmk_debounce_config debounce_config; - int32_t debounce_scan_period_ms; - struct gpio_dt_spec key; -}; - -struct gskbt_data { - struct zmk_behavior_binding binding; - struct zmk_debounce_state debounce_state; - struct gpio_callback key_callback; - const struct device *dev; - struct k_work_delayable update_work; - struct k_work gpio_trigger_work; - uint32_t read_time; - uint32_t trigger_time; - bool pin_active; - bool active_scan_detected; -}; - -static void gskbt_enable_interrupt(const struct device *dev, bool active_scanning) { - const struct gskbt_config *config = dev->config; - - gpio_pin_interrupt_configure_dt(&config->key, active_scanning ? GPIO_INT_EDGE_TO_ACTIVE - : GPIO_INT_LEVEL_ACTIVE); -} - -static void gskbt_disable_interrupt(const struct device *dev) { - const struct gskbt_config *config = dev->config; - - gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_DISABLE); -} - -static void gskbt_read(const struct device *dev) { - const struct gskbt_config *config = dev->config; - struct gskbt_data *data = dev->data; - - zmk_debounce_update(&data->debounce_state, data->active_scan_detected, - config->debounce_scan_period_ms, &config->debounce_config); - - if (zmk_debounce_get_changed(&data->debounce_state)) { - const bool pressed = zmk_debounce_is_pressed(&data->debounce_state); - - struct zmk_behavior_binding_event event = {.position = INT32_MAX, - .timestamp = k_uptime_get()}; - - if (pressed) { - behavior_keymap_binding_pressed(&data->binding, event); - } else { - behavior_keymap_binding_released(&data->binding, event); - } - } - - if (zmk_debounce_is_active(&data->debounce_state)) { - data->active_scan_detected = false; - data->read_time += config->debounce_scan_period_ms; - - k_work_schedule(&data->update_work, K_TIMEOUT_ABS_MS(data->read_time)); - } else { - gskbt_enable_interrupt(dev, false); - } -} - -static void gskbt_update_work(struct k_work *work) { - struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); - struct gskbt_data *data = CONTAINER_OF(dwork, struct gskbt_data, update_work); - gskbt_read(data->dev); -} - -static void gskbt_gpio_interrupt_work(struct k_work *work) { - struct gskbt_data *data = CONTAINER_OF(work, struct gskbt_data, gpio_trigger_work); - - const struct gskbt_config *config = data->dev->config; - - if (!zmk_debounce_is_active(&data->debounce_state)) { - // When we get that very first interrupt, we need to schedule the update checks right before - // the next real scan, so we can do our checks for state *after* each scan has - // occurred. - data->read_time = data->trigger_time; - k_work_reschedule(&data->update_work, - K_TIMEOUT_ABS_MS(data->read_time + config->debounce_scan_period_ms - 1)); - } -} - -static void gskbt_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, - const gpio_port_pins_t pin) { - struct gskbt_data *data = CONTAINER_OF(cb, struct gskbt_data, key_callback); - - // LOG_DBG("IRQ"); - data->active_scan_detected = true; - data->trigger_time = k_uptime_get(); - gskbt_enable_interrupt(data->dev, true); - k_work_submit(&data->gpio_trigger_work); -} - -static int gskbt_init(const struct device *dev) { - const struct gskbt_config *config = dev->config; - struct gskbt_data *data = dev->data; - - if (!device_is_ready(config->key.port)) { - LOG_ERR("GPIO port is not ready"); - return -ENODEV; - } - - k_work_init_delayable(&data->update_work, gskbt_update_work); - k_work_init(&data->gpio_trigger_work, gskbt_gpio_interrupt_work); - - data->dev = dev; - - gpio_pin_configure_dt(&config->key, GPIO_INPUT); - gpio_init_callback(&data->key_callback, gskbt_gpio_irq_callback, BIT(config->key.pin)); - gpio_add_callback(config->key.port, &data->key_callback); - - while (gpio_pin_get_dt(&config->key)) { - k_sleep(K_MSEC(100)); - } - - gskbt_enable_interrupt(dev, false); - - return 0; -} - -static int gskbt_pm_action(const struct device *dev, enum pm_device_action action) { - const struct gskbt_config *config = dev->config; - struct gskbt_data *data = dev->data; - - int ret; - - switch (action) { - case PM_DEVICE_ACTION_SUSPEND: - gskbt_disable_interrupt(dev); - ret = gpio_remove_callback(config->key.port, &data->key_callback); - break; - case PM_DEVICE_ACTION_RESUME: - ret = gpio_add_callback(config->key.port, &data->key_callback); - gskbt_enable_interrupt(dev, false); - break; - default: - ret = -ENOTSUP; - break; - } - - return ret; -} - -#define GSKBT_INST(n) \ - const struct gskbt_config gskbt_config_##n = { \ - .key = GPIO_DT_SPEC_GET(DT_INST_PHANDLE(n, key), gpios), \ - .debounce_config = \ - { \ - .debounce_press_ms = DT_INST_PROP(n, debounce_press_ms), \ - .debounce_release_ms = DT_INST_PROP(n, debounce_release_ms), \ - }, \ - .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ - }; \ - struct gskbt_data gskbt_data_##n = { \ - .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ - }; \ - PM_DEVICE_DT_INST_DEFINE(n, gskbt_pm_action); \ - DEVICE_DT_INST_DEFINE(n, gskbt_init, PM_DEVICE_DT_INST_GET(n), &gskbt_data_##n, \ - &gskbt_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - NULL); - -DT_INST_FOREACH_STATUS_OKAY(GSKBT_INST) diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index 6b6b5cf4b33..370a3880769 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -37,7 +37,7 @@ The simplest way to achieve this is with a push button between a GPIO pin and gr #### Matrix-Integrated Hardware Combo -Another, more complicated option is to tie two of the switch outputs in the matrix together through an AND gate and connect that to the dedicated GPIO pin. This way you can use a key combination in your existing keyboard matrix to trigger soft on/off. To make this work best, the two switches used should both be driven by the same matrix input pin so that both will be active simultaneously on the AND gate inputs. The alternative is to use a combination of diodes and capacitors to ensure both pins are active/high at the same time even if scanning sets them high at different times. +Another, more complicated option is to tie two of the switch outputs in the matrix together through an AND gate and connect that to the dedicated GPIO pin. This way you can use a key combination in your existing keyboard matrix to trigger soft on/off. To make this work best, the two switches used should both be driven by the same matrix input pin so that both will be active simultaneously on the AND gate inputs. The alternative is to use a combination of diodes and capacitors to ensure both pins are active/high at the same time even if scanning sets them high at different times. Support for this mode will be coming soon. ### Firmware Changes @@ -92,20 +92,7 @@ Here are the properties for the behavior key node: - The `bindings` property is a phandle to the soft off behavior defined above. - The `key` property is a phandle to the GPIO key defined earlier. -If you have set up your on/off to be controlled by a matrix-integrated combo, the behavior key needs use a different driver that will handle detecting the pressed state when the pin is toggled by the other matrix kscan driver: - -``` -/ { - soft_off_behavior_key { - compatible = "zmk,gpio-scanned-key-behavior-trigger"; - status = "okay"; - bindings = <&hw_soft_off>; - key = <&wakeup_key>; - }; -}; -``` - -Note that the only difference from the `soft_off_behavior_key` definition for GPIO keys above is the `compatible` value of `zmk,gpio-scanned-key-behavior-trigger`. +If you have set up your on/off to be controlled by a matrix-integrated combo, the behavior key will need to be integrated into your existing kscan setup. Full details to come when this is supported. #### Wakeup Sources From e78b25a445b5bfc4b0c9b979d68964729c3e8fa1 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 31 Dec 2023 00:34:20 +0000 Subject: [PATCH 1037/1130] feat(kscan): Direct kscan driver can use gpio-keys. * Allow specifying direct kscan driver pins using gpio-key list as an alternative. --- app/module/drivers/kscan/kscan_gpio_direct.c | 11 +++++++++-- .../dts/bindings/kscan/zmk,kscan-gpio-direct.yaml | 6 +++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index a10190da9e7..e05eb2f3da1 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -42,9 +42,14 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define COND_POLL_OR_INTERRUPTS(pollcode, intcode) \ COND_CODE_1(CONFIG_ZMK_KSCAN_DIRECT_POLLING, pollcode, intcode) -#define INST_INPUTS_LEN(n) DT_INST_PROP_LEN(n, input_gpios) +#define INST_INPUTS_LEN(n) \ + COND_CODE_1(DT_INST_NODE_HAS_PROP(n, input_gpios), (DT_INST_PROP_LEN(n, input_gpios)), \ + (DT_INST_PROP_LEN(n, input_keys))) + #define KSCAN_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ KSCAN_GPIO_GET_BY_IDX(DT_DRV_INST(inst_idx), input_gpios, idx) +#define KSCAN_KEY_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ + KSCAN_GPIO_GET_BY_IDX(DT_INST_PROP_BY_IDX(inst_idx, input_keys, idx), gpios, 0) struct kscan_direct_irq_callback { const struct device *dev; @@ -347,7 +352,9 @@ static const struct kscan_driver_api kscan_direct_api = { "ZMK_KSCAN_DEBOUNCE_RELEASE_MS or debounce-release-ms is too large"); \ \ static struct kscan_gpio kscan_direct_inputs_##n[] = { \ - LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (, ), n)}; \ + COND_CODE_1(DT_INST_NODE_HAS_PROP(n, input_gpios), \ + (LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (, ), n)), \ + (LISTIFY(INST_INPUTS_LEN(n), KSCAN_KEY_DIRECT_INPUT_CFG_INIT, (, ), n)))}; \ \ static struct zmk_debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ \ diff --git a/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml b/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml index f477b591f87..4953d5cfaf9 100644 --- a/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml +++ b/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml @@ -10,7 +10,11 @@ include: kscan.yaml properties: input-gpios: type: phandle-array - required: true + required: false + input-keys: + type: phandles + required: false + description: List of gpio-key references debounce-period: type: int required: false From a0ad1d4c9402fbfe5e3dee8996057150a3f0f209 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 30 Dec 2023 16:38:52 -0800 Subject: [PATCH 1038/1130] refactor: Add kscan sideband behavior driver * Instead of gpio key behavior trigger, add new kscan driver that decorates/wraps a given kscan driver and will invoke basic system behavior assigned to a given row + column, without the need for keymap mapping in the matrix transform, bypassing keymaps entirely. --- app/CMakeLists.txt | 2 +- app/Kconfig | 6 + app/Kconfig.behaviors | 5 - .../boards/nrf52840dk_nrf52840.overlay | 19 +- .../kscan/zmk,kscan-sideband-behaviors.yaml | 29 +++ .../zmk,gpio-key-behavior-trigger.yaml | 31 ---- app/src/gpio_key_behavior_trigger.c | 167 ------------------ app/src/kscan_sideband_behaviors.c | 142 +++++++++++++++ 8 files changed, 192 insertions(+), 209 deletions(-) create mode 100644 app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml delete mode 100644 app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml delete mode 100644 app/src/gpio_key_behavior_trigger.c create mode 100644 app/src/kscan_sideband_behaviors.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 4ee9135d23c..2abf943fb39 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -25,11 +25,11 @@ target_sources(app PRIVATE src/stdlib.c) target_sources(app PRIVATE src/activity.c) target_sources(app PRIVATE src/behavior.c) target_sources(app PRIVATE src/kscan.c) +target_sources_ifdef(CONFIG_ZMK_KSCAN_SIDEBAND_BEHAVIORS app PRIVATE src/kscan_sideband_behaviors.c) target_sources(app PRIVATE src/matrix_transform.c) target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) target_sources(app PRIVATE src/event_manager.c) -target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER app PRIVATE src/gpio_key_behavior_trigger.c) target_sources_ifdef(CONFIG_ZMK_PM app PRIVATE src/pm.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key_wakeup_trigger.c) diff --git a/app/Kconfig b/app/Kconfig index df84d97d253..15c31375d3c 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -512,6 +512,12 @@ config ZMK_KSCAN_EVENT_QUEUE_SIZE endif # ZMK_KSCAN +config ZMK_KSCAN_SIDEBAND_BEHAVIORS + bool + default y + depends on DT_HAS_ZMK_KSCAN_SIDEBAND_BEHAVIORS_ENABLED + select KSCAN + menu "Logging" config ZMK_LOGGING_MINIMAL diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 6abdbddd774..c9754bf7d83 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -1,11 +1,6 @@ # Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT -config ZMK_GPIO_KEY_BEHAVIOR_TRIGGER - bool - default y - depends on DT_HAS_ZMK_GPIO_KEY_BEHAVIOR_TRIGGER_ENABLED - config ZMK_BEHAVIOR_KEY_TOGGLE bool default y diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay index b068b431e25..47b67dc0029 100644 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -57,10 +57,19 @@ encoder: &qdec0 { wakeup-sources = <&wakeup_source>; }; - soft_off_behavior_key { - compatible = "zmk,gpio-key-behavior-trigger"; - status = "okay"; - bindings = <&soft_off>; - key = <&button0>; + soft_off_direct_kscan: soft_off_direct_kscan { + compatible = "zmk,kscan-gpio-direct"; + input-keys = <&button0>; }; + + soft_off_sideband_behaviors { + compatible = "zmk,kscan-sideband-behaviors"; + kscan = <&soft_off_direct_kscan>; + soft_off { + row = <0>; + column = <0>; + bindings = <&soft_off>; + }; + }; + }; \ No newline at end of file diff --git a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml new file mode 100644 index 00000000000..7289b9e1692 --- /dev/null +++ b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml @@ -0,0 +1,29 @@ +# Copyright (c) 2023, The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: | + kscan sideband behavior runner. Only basic system behavior should be used, + since no keymap processing occurs when using them. + +compatible: "zmk,kscan-sideband-behaviors" + +include: [kscan.yaml] + +properties: + kscan: + type: phandle + required: true + +child-binding: + description: "A sideband behavior tied to a row/column pair" + + properties: + row: + type: int + required: true + column: + type: int + required: true + bindings: + type: phandle-array + required: true diff --git a/app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml b/app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml deleted file mode 100644 index 2a1387f0220..00000000000 --- a/app/dts/bindings/zmk,gpio-key-behavior-trigger.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (c) 2023 The ZMK Contributors -# SPDX-License-Identifier: MIT - -description: | - Driver for a dedicated key for invoking a connected behavior. - -compatible: "zmk,gpio-key-behavior-trigger" - -include: base.yaml - -properties: - key: - type: phandle - required: true - description: The GPIO key that triggers wake via interrupt - bindings: - type: phandle - required: true - description: The behavior to invoke when the GPIO key is pressed - debounce-press-ms: - type: int - default: 5 - description: Debounce time for key press in milliseconds. Use 0 for eager debouncing. - debounce-release-ms: - type: int - default: 5 - description: Debounce time for key release in milliseconds. - debounce-scan-period-ms: - type: int - default: 1 - description: Time between reads in milliseconds when any key is pressed. diff --git a/app/src/gpio_key_behavior_trigger.c b/app/src/gpio_key_behavior_trigger.c deleted file mode 100644 index a72f8e48925..00000000000 --- a/app/src/gpio_key_behavior_trigger.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2023 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#define DT_DRV_COMPAT zmk_gpio_key_behavior_trigger - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -struct gkbt_config { - struct zmk_debounce_config debounce_config; - int32_t debounce_scan_period_ms; - struct gpio_dt_spec key; -}; - -struct gkbt_data { - struct zmk_behavior_binding binding; - struct zmk_debounce_state debounce_state; - struct gpio_callback key_callback; - const struct device *dev; - struct k_work_delayable update_work; - uint32_t read_time; -}; - -static void gkbt_enable_interrupt(const struct device *dev) { - const struct gkbt_config *config = dev->config; - - gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_LEVEL_ACTIVE); -} - -static void gkbt_disable_interrupt(const struct device *dev) { - const struct gkbt_config *config = dev->config; - - gpio_pin_interrupt_configure_dt(&config->key, GPIO_INT_DISABLE); -} - -static void gkbt_read(const struct device *dev) { - const struct gkbt_config *config = dev->config; - struct gkbt_data *data = dev->data; - - zmk_debounce_update(&data->debounce_state, gpio_pin_get_dt(&config->key), - config->debounce_scan_period_ms, &config->debounce_config); - - if (zmk_debounce_get_changed(&data->debounce_state)) { - const bool pressed = zmk_debounce_is_pressed(&data->debounce_state); - - struct zmk_behavior_binding_event event = {.position = INT32_MAX, - .timestamp = k_uptime_get()}; - - if (pressed) { - behavior_keymap_binding_pressed(&data->binding, event); - } else { - behavior_keymap_binding_released(&data->binding, event); - } - } - - if (zmk_debounce_is_active(&data->debounce_state)) { - data->read_time += config->debounce_scan_period_ms; - - k_work_reschedule(&data->update_work, K_TIMEOUT_ABS_MS(data->read_time)); - } else { - gkbt_enable_interrupt(dev); - } -} - -static void gkbt_update_work(struct k_work *work) { - struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work); - struct gkbt_data *data = CONTAINER_OF(dwork, struct gkbt_data, update_work); - gkbt_read(data->dev); -} - -static void gkbt_gpio_irq_callback(const struct device *port, struct gpio_callback *cb, - const gpio_port_pins_t pin) { - struct gkbt_data *data = CONTAINER_OF(cb, struct gkbt_data, key_callback); - - gkbt_disable_interrupt(data->dev); - - data->read_time = k_uptime_get(); - k_work_reschedule(&data->update_work, K_NO_WAIT); -} - -static void gkbt_wait_for_key_release(const struct device *dev) { - const struct gkbt_config *config = dev->config; - - while (gpio_pin_get_dt(&config->key)) { - k_sleep(K_MSEC(100)); - } -} - -static int gkbt_init(const struct device *dev) { - const struct gkbt_config *config = dev->config; - struct gkbt_data *data = dev->data; - - if (!device_is_ready(config->key.port)) { - LOG_ERR("GPIO port %s is not ready", config->key.port->name); - return -ENODEV; - } - - k_work_init_delayable(&data->update_work, gkbt_update_work); - data->dev = dev; - - gpio_pin_configure_dt(&config->key, GPIO_INPUT); - gpio_init_callback(&data->key_callback, gkbt_gpio_irq_callback, BIT(config->key.pin)); - gpio_add_callback(config->key.port, &data->key_callback); - - // Be sure our wakeup key is released before startup continues to avoid wake/sleep loop. - gkbt_wait_for_key_release(dev); - - gkbt_enable_interrupt(dev); - - return 0; -} - -static int gkbt_pm_action(const struct device *dev, enum pm_device_action action) { - const struct gkbt_config *config = dev->config; - struct gkbt_data *data = dev->data; - - int ret; - - switch (action) { - case PM_DEVICE_ACTION_SUSPEND: - gkbt_disable_interrupt(dev); - ret = gpio_remove_callback(config->key.port, &data->key_callback); - break; - case PM_DEVICE_ACTION_RESUME: - ret = gpio_add_callback(config->key.port, &data->key_callback); - gkbt_enable_interrupt(dev); - break; - default: - ret = -ENOTSUP; - break; - } - - return ret; -} - -#define GKBT_INST(n) \ - const struct gkbt_config gkbt_config_##n = { \ - .key = GPIO_DT_SPEC_GET(DT_INST_PHANDLE(n, key), gpios), \ - .debounce_config = \ - { \ - .debounce_press_ms = DT_INST_PROP(n, debounce_press_ms), \ - .debounce_release_ms = DT_INST_PROP(n, debounce_release_ms), \ - }, \ - .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ - }; \ - struct gkbt_data gkbt_data_##n = { \ - .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ - }; \ - PM_DEVICE_DT_INST_DEFINE(n, gkbt_pm_action); \ - DEVICE_DT_INST_DEFINE(n, gkbt_init, PM_DEVICE_DT_INST_GET(n), &gkbt_data_##n, \ - &gkbt_config_##n, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - NULL); - -DT_INST_FOREACH_STATUS_OKAY(GKBT_INST) diff --git a/app/src/kscan_sideband_behaviors.c b/app/src/kscan_sideband_behaviors.c new file mode 100644 index 00000000000..3a03a293839 --- /dev/null +++ b/app/src/kscan_sideband_behaviors.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_kscan_sideband_behaviors + +#include +#include +#include +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct ksbb_entry { + uint8_t row; + uint8_t column; + struct zmk_behavior_binding binding; +}; + +struct ksbb_config { + const struct device *kscan; + struct ksbb_entry *entries; + size_t entries_len; +}; + +struct ksbb_data { + kscan_callback_t callback; + bool enabled; +}; + +#define GET_KSBB_DEV(n) DEVICE_DT_GET(DT_DRV_INST(n)), + +// The kscan callback has no context with it, so we keep a static array of all possible +// KSBBs to check when a kscan callback from the "wrapped" inner kscan fires. +static const struct device *ksbbs[DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT)] = { + DT_INST_FOREACH_STATUS_OKAY(GET_KSBB_DEV)}; + +void ksbb_inner_kscan_callback(const struct device *dev, uint32_t row, uint32_t column, + bool pressed) { + for (int i = 0; i < ARRAY_SIZE(ksbbs); i++) { + const struct device *ksbb = ksbbs[i]; + const struct ksbb_config *cfg = ksbb->config; + struct ksbb_data *data = ksbb->data; + + if (cfg->kscan != dev) { + continue; + } + + for (int e = 0; e < cfg->entries_len; e++) { + struct ksbb_entry *entry = &cfg->entries[e]; + if (entry->row == row && entry->column == column) { + struct zmk_behavior_binding_event event = {.position = INT32_MAX, + .timestamp = k_uptime_get()}; + + if (pressed) { + behavior_keymap_binding_pressed(&entry->binding, event); + } else { + behavior_keymap_binding_released(&entry->binding, event); + } + return; + } + } + + if (data->enabled && data->callback) { + data->callback(ksbb, row, column, pressed); + } + } +} + +static int ksbb_configure(const struct device *dev, kscan_callback_t callback) { + struct ksbb_data *data = dev->data; + + if (!callback) { + return -EINVAL; + } + + data->callback = callback; + return 0; +} + +static int ksbb_enable(const struct device *dev) { + struct ksbb_data *data = dev->data; + data->enabled = true; + + return 0; +} + +static int ksbb_disable(const struct device *dev) { + struct ksbb_data *data = dev->data; + data->enabled = false; + + return 0; +} + +static int ksbb_init(const struct device *dev) { + const struct ksbb_config *config = dev->config; + + if (!device_is_ready(config->kscan)) { + LOG_ERR("kscan %s is not ready", config->kscan->name); + return -ENODEV; + } + + kscan_config(config->kscan, &ksbb_inner_kscan_callback); + kscan_enable_callback(config->kscan); + + return 0; +} + +static const struct kscan_driver_api ksbb_api = { + .config = ksbb_configure, + .enable_callback = ksbb_enable, + .disable_callback = ksbb_disable, +}; + +#define JUST_ONE(_id) 1 + +#define ENTRY(e) \ + { \ + .row = DT_PROP(e, row), .column = DT_PROP(e, column), \ + .binding = ZMK_KEYMAP_EXTRACT_BINDING(0, e), \ + } + +#define KSBB_INST(n) \ + static struct ksbb_entry entries_##n[] = { \ + DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(n, ENTRY, (, ))}; \ + const struct ksbb_config ksbb_config_##n = { \ + .kscan = DEVICE_DT_GET(DT_INST_PHANDLE(n, kscan)), \ + .entries = entries_##n, \ + .entries_len = DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(n, JUST_ONE, (+)), \ + }; \ + struct ksbb_data ksbb_data_##n = {}; \ + DEVICE_DT_INST_DEFINE(n, ksbb_init, NULL, &ksbb_data_##n, &ksbb_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &ksbb_api); + +DT_INST_FOREACH_STATUS_OKAY(KSBB_INST) From c3144055e8534169bf1a6d798b1ee712f6c1d002 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 31 Dec 2023 00:57:00 +0000 Subject: [PATCH 1039/1130] refactor(boards): Move ZMK Uno 1P3T slider to sideband * Invoke output selection from the slider on the ZMK Uno via sideband behavior setup, to simplify keymap. --- app/boards/shields/zmk_uno/zmk_uno.dtsi | 36 +---------------- app/boards/shields/zmk_uno/zmk_uno.keymap | 21 +--------- app/boards/shields/zmk_uno/zmk_uno.overlay | 40 +++++++++++++++++++ app/boards/shields/zmk_uno/zmk_uno_split.dtsi | 10 ++--- .../shields/zmk_uno/zmk_uno_split.keymap | 18 --------- 5 files changed, 46 insertions(+), 79 deletions(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno.dtsi b/app/boards/shields/zmk_uno/zmk_uno.dtsi index 196ac8b5002..e8ba79d6d09 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno.dtsi @@ -40,7 +40,7 @@ nice_view_spi: &arduino_spi { / { chosen { - zmk,kscan = &kscan_matrix_comp; + zmk,kscan = &kscan_matrix; zmk,backlight = &backlight; zmk,underglow = &led_strip; zmk,matrix-transform = &matrix_transform; @@ -74,7 +74,6 @@ nice_view_spi: &arduino_spi { map = < RC(0,0) RC(0,1) RC(1,0) RC(1,1) - RC(2,0) RC(2,1) RC(2,2) >; }; @@ -86,42 +85,9 @@ nice_view_spi: &arduino_spi { map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) - RC(1,0) RC(1,1) RC(1,2) >; }; - - kscan_matrix_comp: kscan_matrix_comp { - compatible = "zmk,kscan-composite"; - rows = <1>; - columns = <7>; - - matrix { - kscan = <&kscan_matrix>; - }; - - toggle { - kscan = <&kscan_sp3t_toggle>; - row-offset = <2>; - }; - - }; - - kscan_direct_comp: kscan_direct_comp { - compatible = "zmk,kscan-composite"; - status = "disabled"; - - matrix { - kscan = <&kscan_direct>; - }; - - toggle { - kscan = <&kscan_sp3t_toggle>; - row-offset = <1>; - }; - - }; - kscan_matrix: kscan_matrix { compatible = "zmk,kscan-gpio-matrix"; wakeup-source; diff --git a/app/boards/shields/zmk_uno/zmk_uno.keymap b/app/boards/shields/zmk_uno/zmk_uno.keymap index 0e0fc7954c1..e416ff5e6c8 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno.keymap @@ -9,42 +9,25 @@ #include #include #include -#include #include // Uncomment the following block if using the "Direct Wire" jumper to switch the matrix to a direct wire. /* :REMOVE ME -&kscan_direct_comp { status = "okay"; }; &kscan_direct { status = "okay"; }; -&kscan_matrix_comp { status = "disabled"; }; &kscan_matrix { status = "disabled"; }; / { chosen { zmk,matrix-transform = &direct_matrix_transform; - zmk,kscan = &kscan_direct_comp; + zmk,kscan = &kscan_direct; }; }; REMOVE ME: */ - / { - macros { - ZMK_MACRO(ble_zero, - wait-ms = <1>; - tap-ms = <1>; - bindings = <&out OUT_BLE &bt BT_SEL 0>; - ) - ZMK_MACRO(ble_one, - wait-ms = <1>; - tap-ms = <1>; - bindings = <&out OUT_BLE &bt BT_SEL 1>; - ) - }; - keymap { compatible = "zmk,keymap"; @@ -52,8 +35,6 @@ REMOVE ME: */ bindings = < &kp A &bl BL_TOG &rgb_ug RGB_EFF &bt BT_CLR - - &out OUT_USB &ble_zero &ble_one >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 4999c82c7e1..c86f6e5c9ee 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -6,6 +6,10 @@ #include "zmk_uno.dtsi" +#include +#include +#include + / { chosen { zmk,matrix-transform = &matrix_transform; @@ -19,4 +23,40 @@ }; }; + macros { + ZMK_MACRO(ble_zero, + wait-ms = <1>; + tap-ms = <1>; + bindings = <&out OUT_BLE &bt BT_SEL 0>; + ) + ZMK_MACRO(ble_one, + wait-ms = <1>; + tap-ms = <1>; + bindings = <&out OUT_BLE &bt BT_SEL 1>; + ) + }; + + endpoint_sideband_behaviors { + compatible = "zmk,kscan-sideband-behaviors"; + kscan = <&kscan_sp3t_toggle>; + + usb { + row = <0>; + column = <0>; + bindings = <&out OUT_USB>; + }; + + ble_zero { + row = <0>; + column = <1>; + bindings = <&ble_zero>; + }; + + ble_one { + row = <0>; + column = <2>; + bindings = <&ble_one>; + }; + }; + }; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi index 516213bd442..dac6fc3e4ee 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi @@ -17,16 +17,15 @@ split_matrix_transform: split_matrix_transform { compatible = "zmk,matrix-transform"; - rows = <3>; - columns = <4>; + rows = <4>; + columns = <2>; map = < RC(0,0) RC(0,1) RC(1,0) RC(1,1) - RC(2,0) RC(2,1) RC(2,2) + RC(3,0) RC(3,1) RC(4,0) RC(4,1) - RC(5,0) RC(5,1) RC(5,2) >; }; @@ -38,10 +37,9 @@ map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) - RC(1,0) RC(1,1) RC(1,2) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) - RC(3,0) RC(3,1) RC(3,2) >; }; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.keymap b/app/boards/shields/zmk_uno/zmk_uno_split.keymap index 05f0ffb0b04..1e46042a7e1 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno_split.keymap @@ -16,9 +16,7 @@ /* :REMOVE ME -&kscan_direct_comp { status = "okay"; }; &kscan_direct { status = "okay"; }; -&kscan_matrix_comp { status = "disabled"; }; &kscan_matrix { status = "disabled"; }; / { @@ -30,20 +28,7 @@ REMOVE ME: */ - / { - macros { - ZMK_MACRO(ble_zero, - wait-ms = <1>; - tap-ms = <1>; - bindings = <&out OUT_BLE &bt BT_SEL 0>; - ) - ZMK_MACRO(ble_one, - wait-ms = <1>; - tap-ms = <1>; - bindings = <&out OUT_BLE &bt BT_SEL 1>; - ) - }; keymap { compatible = "zmk,keymap"; @@ -53,11 +38,8 @@ REMOVE ME: */ &kp A &bl BL_TOG &rgb_ug RGB_EFF &bt BT_CLR - &out OUT_USB &ble_zero &ble_one - &kp C &kp D &kp E &kp F - &none &none &none >; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; From 09111f1cf36099690bf96091b46214c421b1fb3b Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sun, 31 Dec 2023 06:36:52 +0000 Subject: [PATCH 1040/1130] fix: Sleep after clearing endpoints to wait for send. * Add a small sleep to allow other threads to send data for the endpoint clearing before sleep. --- app/src/pm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/pm.c b/app/src/pm.c index a4599ac8fce..8525046f049 100644 --- a/app/src/pm.c +++ b/app/src/pm.c @@ -35,6 +35,8 @@ int zmk_pm_soft_off(void) { #if !IS_ENABLED(CONFIG_ZMK_SPLIT) || IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) zmk_endpoints_clear_current(); + // Need to sleep to give any other threads a chance so submit endpoint data. + k_sleep(K_MSEC(100)); #endif device_count = z_device_get_all_static(&devs); From 4198fac90f4f35e7464cb3793632f81601bbf1d5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 3 Jan 2024 11:11:24 -0800 Subject: [PATCH 1041/1130] fix(pm): Fix deep sleep with sideband behaviors. * Properly implement the PM hook needed for sideband behavior kscan device to have wakeup source enabled on it. --- .../kscan/zmk,kscan-sideband-behaviors.yaml | 2 +- app/src/kscan.c | 5 ++-- app/src/kscan_sideband_behaviors.c | 29 +++++++++++++++++-- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml index 7289b9e1692..57b54a6041c 100644 --- a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml +++ b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml @@ -7,7 +7,7 @@ description: | compatible: "zmk,kscan-sideband-behaviors" -include: [kscan.yaml] +include: kscan.yaml properties: kscan: diff --git a/app/src/kscan.c b/app/src/kscan.c index c04ce2d8799..5c7a5535a5b 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -74,13 +74,14 @@ int zmk_kscan_init(const struct device *dev) { k_work_init(&msg_processor.work, zmk_kscan_process_msgq); - kscan_config(dev, zmk_kscan_callback); - kscan_enable_callback(dev); #if IS_ENABLED(CONFIG_PM_DEVICE) if (pm_device_wakeup_is_capable(dev)) { pm_device_wakeup_enable(dev, true); } #endif // IS_ENABLED(CONFIG_PM_DEVICE) + kscan_config(dev, zmk_kscan_callback); + kscan_enable_callback(dev); + return 0; } diff --git a/app/src/kscan_sideband_behaviors.c b/app/src/kscan_sideband_behaviors.c index 3a03a293839..cff28e49d18 100644 --- a/app/src/kscan_sideband_behaviors.c +++ b/app/src/kscan_sideband_behaviors.c @@ -75,6 +75,7 @@ void ksbb_inner_kscan_callback(const struct device *dev, uint32_t row, uint32_t } static int ksbb_configure(const struct device *dev, kscan_callback_t callback) { + const struct ksbb_config *cfg = dev->config; struct ksbb_data *data = dev->data; if (!callback) { @@ -82,6 +83,13 @@ static int ksbb_configure(const struct device *dev, kscan_callback_t callback) { } data->callback = callback; + +#if IS_ENABLED(CONFIG_PM_DEVICE) + if (pm_device_wakeup_is_enabled(dev) && pm_device_wakeup_is_capable(cfg->kscan)) { + pm_device_wakeup_enable(cfg->kscan, true); + } +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + return 0; } @@ -119,6 +127,21 @@ static const struct kscan_driver_api ksbb_api = { .disable_callback = ksbb_disable, }; +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int ksbb_pm_action(const struct device *dev, enum pm_device_action action) { + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + return ksbb_disable(dev); + case PM_DEVICE_ACTION_RESUME: + return ksbb_disable(dev); + default: + return -ENOTSUP; + } +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + #define JUST_ONE(_id) 1 #define ENTRY(e) \ @@ -136,7 +159,9 @@ static const struct kscan_driver_api ksbb_api = { .entries_len = DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(n, JUST_ONE, (+)), \ }; \ struct ksbb_data ksbb_data_##n = {}; \ - DEVICE_DT_INST_DEFINE(n, ksbb_init, NULL, &ksbb_data_##n, &ksbb_config_##n, APPLICATION, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &ksbb_api); + PM_DEVICE_DT_INST_DEFINE(n, ksbb_pm_action); \ + DEVICE_DT_INST_DEFINE(n, ksbb_init, PM_DEVICE_DT_INST_GET(n), &ksbb_data_##n, \ + &ksbb_config_##n, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &ksbb_api); DT_INST_FOREACH_STATUS_OKAY(KSBB_INST) From 5d960a758f6067ae82eccb01d8508114b2a98c6a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 22 Jan 2024 13:39:08 -0800 Subject: [PATCH 1042/1130] fix: Cleanups of sideband and direct kscan from review. * Add dedicated init priority for the sideband kscan. * Refactor sideband code for clarity. * Tweaks to direct kscan for clarity. * Make sideband behavior row optional for brevity. * Allow overriding ZMK Uno sideband behaviors. --- app/Kconfig | 9 +++ app/boards/shields/zmk_uno/zmk_uno.keymap | 22 +++--- app/boards/shields/zmk_uno/zmk_uno.overlay | 9 +-- .../shields/zmk_uno/zmk_uno_split.keymap | 21 +++--- .../kscan/zmk,kscan-sideband-behaviors.yaml | 7 +- app/module/drivers/kscan/kscan_gpio_direct.c | 4 +- app/src/kscan_sideband_behaviors.c | 69 ++++++++++++------- 7 files changed, 79 insertions(+), 62 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 15c31375d3c..a719875e6b1 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -518,6 +518,15 @@ config ZMK_KSCAN_SIDEBAND_BEHAVIORS depends on DT_HAS_ZMK_KSCAN_SIDEBAND_BEHAVIORS_ENABLED select KSCAN +if ZMK_KSCAN_SIDEBAND_BEHAVIORS + +config ZMK_KSCAN_SIDEBAND_BEHAVIORS_INIT_PRIORITY + int "Keyboard scan sideband behaviors driver init priority" + # The default kscan init priority is 90, so be sure we are lower. + default 95 + +endif # ZMK_KSCAN_SIDEBAND_BEHAVIORS + menu "Logging" config ZMK_LOGGING_MINIMAL diff --git a/app/boards/shields/zmk_uno/zmk_uno.keymap b/app/boards/shields/zmk_uno/zmk_uno.keymap index e416ff5e6c8..a7f6a2675d5 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno.keymap @@ -11,21 +11,17 @@ #include #include -// Uncomment the following block if using the "Direct Wire" jumper to switch the matrix to a direct wire. +// Uncomment the following lines if using the "Direct Wire" jumper to switch the matrix to a direct wire. -/* :REMOVE ME +// &kscan_direct { status = "okay"; }; +// &kscan_matrix { status = "disabled"; }; -&kscan_direct { status = "okay"; }; -&kscan_matrix { status = "disabled"; }; - -/ { - chosen { - zmk,matrix-transform = &direct_matrix_transform; - zmk,kscan = &kscan_direct; - }; -}; - -REMOVE ME: */ +// / { +// chosen { +// zmk,matrix-transform = &direct_matrix_transform; +// zmk,kscan = &kscan_direct; +// }; +// }; / { keymap { diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index c86f6e5c9ee..3d105abf8d7 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -40,20 +40,17 @@ compatible = "zmk,kscan-sideband-behaviors"; kscan = <&kscan_sp3t_toggle>; - usb { - row = <0>; + first_toggle_sideband: first_toggle_sideband { column = <0>; bindings = <&out OUT_USB>; }; - ble_zero { - row = <0>; + second_toggle_sideband: second_toggle_sideband { column = <1>; bindings = <&ble_zero>; }; - ble_one { - row = <0>; + third_toggle_sideband: third_toggle_sideband { column = <2>; bindings = <&ble_one>; }; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.keymap b/app/boards/shields/zmk_uno/zmk_uno_split.keymap index 1e46042a7e1..37672a7dbdb 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno_split.keymap @@ -12,21 +12,18 @@ #include #include -// Uncomment the following block if using the "Direct Wire" jumper to switch the matrix to a direct wire. +// Uncomment the following lines if using the "Direct Wire" jumper to switch the matrix to a direct wire. -/* :REMOVE ME -&kscan_direct { status = "okay"; }; -&kscan_matrix { status = "disabled"; }; +// &kscan_direct { status = "okay"; }; +// &kscan_matrix { status = "disabled"; }; -/ { - chosen { - zmk,matrix-transform = &split_direct_matrix_transform; - zmk,kscan = &kscan_direct_comp; - }; -}; - -REMOVE ME: */ +// / { +// chosen { +// zmk,matrix-transform = &split_direct_matrix_transform; +// zmk,kscan = &kscan_direct_comp; +// }; +// }; / { diff --git a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml index 57b54a6041c..f3ed180d14b 100644 --- a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml +++ b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml @@ -2,8 +2,9 @@ # SPDX-License-Identifier: MIT description: | - kscan sideband behavior runner. Only basic system behavior should be used, - since no keymap processing occurs when using them. + kscan sideband behavior runner. Only basic system behaviors should be used, + since no keymap processing occurs when using them. Primarily, that means avoiding + using tap-holds, sticky keys, etc. as sideband behaviors. compatible: "zmk,kscan-sideband-behaviors" @@ -20,7 +21,7 @@ child-binding: properties: row: type: int - required: true + default: 0 column: type: int required: true diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index e05eb2f3da1..fa24e69e895 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -46,7 +46,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); COND_CODE_1(DT_INST_NODE_HAS_PROP(n, input_gpios), (DT_INST_PROP_LEN(n, input_gpios)), \ (DT_INST_PROP_LEN(n, input_keys))) -#define KSCAN_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ +#define KSCAN_GPIO_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ KSCAN_GPIO_GET_BY_IDX(DT_DRV_INST(inst_idx), input_gpios, idx) #define KSCAN_KEY_DIRECT_INPUT_CFG_INIT(idx, inst_idx) \ KSCAN_GPIO_GET_BY_IDX(DT_INST_PROP_BY_IDX(inst_idx, input_keys, idx), gpios, 0) @@ -353,7 +353,7 @@ static const struct kscan_driver_api kscan_direct_api = { \ static struct kscan_gpio kscan_direct_inputs_##n[] = { \ COND_CODE_1(DT_INST_NODE_HAS_PROP(n, input_gpios), \ - (LISTIFY(INST_INPUTS_LEN(n), KSCAN_DIRECT_INPUT_CFG_INIT, (, ), n)), \ + (LISTIFY(INST_INPUTS_LEN(n), KSCAN_GPIO_DIRECT_INPUT_CFG_INIT, (, ), n)), \ (LISTIFY(INST_INPUTS_LEN(n), KSCAN_KEY_DIRECT_INPUT_CFG_INIT, (, ), n)))}; \ \ static struct zmk_debounce_state kscan_direct_state_##n[INST_INPUTS_LEN(n)]; \ diff --git a/app/src/kscan_sideband_behaviors.c b/app/src/kscan_sideband_behaviors.c index cff28e49d18..5b8a30a85e3 100644 --- a/app/src/kscan_sideband_behaviors.c +++ b/app/src/kscan_sideband_behaviors.c @@ -19,9 +19,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct ksbb_entry { + struct zmk_behavior_binding binding; uint8_t row; uint8_t column; - struct zmk_behavior_binding binding; }; struct ksbb_config { @@ -39,32 +39,53 @@ struct ksbb_data { // The kscan callback has no context with it, so we keep a static array of all possible // KSBBs to check when a kscan callback from the "wrapped" inner kscan fires. -static const struct device *ksbbs[DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT)] = { - DT_INST_FOREACH_STATUS_OKAY(GET_KSBB_DEV)}; +static const struct device *ksbbs[] = {DT_INST_FOREACH_STATUS_OKAY(GET_KSBB_DEV)}; -void ksbb_inner_kscan_callback(const struct device *dev, uint32_t row, uint32_t column, - bool pressed) { +int find_ksbb_for_inner(const struct device *inner_dev, const struct device **ksbb_dev) { for (int i = 0; i < ARRAY_SIZE(ksbbs); i++) { const struct device *ksbb = ksbbs[i]; const struct ksbb_config *cfg = ksbb->config; - struct ksbb_data *data = ksbb->data; - if (cfg->kscan != dev) { - continue; + if (cfg->kscan == inner_dev) { + *ksbb_dev = ksbb; + return 0; + } + } + + return -ENODEV; +} + +int find_sideband_behavior(const struct device *dev, uint32_t row, uint32_t column, + struct ksbb_entry **entry) { + const struct ksbb_config *cfg = dev->config; + + for (int e = 0; e < cfg->entries_len; e++) { + struct ksbb_entry *candidate = &cfg->entries[e]; + + if (candidate->row == row && candidate->column == column) { + *entry = candidate; + return 0; } + } - for (int e = 0; e < cfg->entries_len; e++) { - struct ksbb_entry *entry = &cfg->entries[e]; - if (entry->row == row && entry->column == column) { - struct zmk_behavior_binding_event event = {.position = INT32_MAX, - .timestamp = k_uptime_get()}; - - if (pressed) { - behavior_keymap_binding_pressed(&entry->binding, event); - } else { - behavior_keymap_binding_released(&entry->binding, event); - } - return; + return -ENODEV; +} + +void ksbb_inner_kscan_callback(const struct device *dev, uint32_t row, uint32_t column, + bool pressed) { + struct ksbb_entry *entry = NULL; + const struct device *ksbb = NULL; + + if (find_ksbb_for_inner(dev, &ksbb) >= 0) { + struct ksbb_data *data = ksbb->data; + if (find_sideband_behavior(ksbb, row, column, &entry) >= 0) { + struct zmk_behavior_binding_event event = {.position = INT32_MAX, + .timestamp = k_uptime_get()}; + + if (pressed) { + behavior_keymap_binding_pressed(&entry->binding, event); + } else { + behavior_keymap_binding_released(&entry->binding, event); } } @@ -78,10 +99,6 @@ static int ksbb_configure(const struct device *dev, kscan_callback_t callback) { const struct ksbb_config *cfg = dev->config; struct ksbb_data *data = dev->data; - if (!callback) { - return -EINVAL; - } - data->callback = callback; #if IS_ENABLED(CONFIG_PM_DEVICE) @@ -161,7 +178,7 @@ static int ksbb_pm_action(const struct device *dev, enum pm_device_action action struct ksbb_data ksbb_data_##n = {}; \ PM_DEVICE_DT_INST_DEFINE(n, ksbb_pm_action); \ DEVICE_DT_INST_DEFINE(n, ksbb_init, PM_DEVICE_DT_INST_GET(n), &ksbb_data_##n, \ - &ksbb_config_##n, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &ksbb_api); + &ksbb_config_##n, POST_KERNEL, \ + CONFIG_ZMK_KSCAN_SIDEBAND_BEHAVIORS_INIT_PRIORITY, &ksbb_api); DT_INST_FOREACH_STATUS_OKAY(KSBB_INST) From bd21f41412eaff5822a17efa86ce1dadf831cbcc Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 26 Jan 2024 01:48:46 -0800 Subject: [PATCH 1043/1130] refactor: Fixes for review feedback. --- app/Kconfig | 2 +- app/src/kscan_sideband_behaviors.c | 29 ++++++++++++----------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index a719875e6b1..28d3c22ac5a 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -522,7 +522,7 @@ if ZMK_KSCAN_SIDEBAND_BEHAVIORS config ZMK_KSCAN_SIDEBAND_BEHAVIORS_INIT_PRIORITY int "Keyboard scan sideband behaviors driver init priority" - # The default kscan init priority is 90, so be sure we are lower. + # The default kscan init priority is 90, so be sure we are initialized later. default 95 endif # ZMK_KSCAN_SIDEBAND_BEHAVIORS diff --git a/app/src/kscan_sideband_behaviors.c b/app/src/kscan_sideband_behaviors.c index 5b8a30a85e3..7a9922afdae 100644 --- a/app/src/kscan_sideband_behaviors.c +++ b/app/src/kscan_sideband_behaviors.c @@ -41,44 +41,41 @@ struct ksbb_data { // KSBBs to check when a kscan callback from the "wrapped" inner kscan fires. static const struct device *ksbbs[] = {DT_INST_FOREACH_STATUS_OKAY(GET_KSBB_DEV)}; -int find_ksbb_for_inner(const struct device *inner_dev, const struct device **ksbb_dev) { +const struct device *find_ksbb_for_inner(const struct device *inner_dev) { for (int i = 0; i < ARRAY_SIZE(ksbbs); i++) { const struct device *ksbb = ksbbs[i]; const struct ksbb_config *cfg = ksbb->config; if (cfg->kscan == inner_dev) { - *ksbb_dev = ksbb; - return 0; + return ksbb; } } - return -ENODEV; + return NULL; } -int find_sideband_behavior(const struct device *dev, uint32_t row, uint32_t column, - struct ksbb_entry **entry) { +struct ksbb_entry *find_sideband_behavior(const struct device *dev, uint32_t row, uint32_t column) { const struct ksbb_config *cfg = dev->config; for (int e = 0; e < cfg->entries_len; e++) { struct ksbb_entry *candidate = &cfg->entries[e]; if (candidate->row == row && candidate->column == column) { - *entry = candidate; - return 0; + return candidate; } } - return -ENODEV; + return NULL; } void ksbb_inner_kscan_callback(const struct device *dev, uint32_t row, uint32_t column, bool pressed) { - struct ksbb_entry *entry = NULL; - const struct device *ksbb = NULL; - - if (find_ksbb_for_inner(dev, &ksbb) >= 0) { + const struct device *ksbb = find_ksbb_for_inner(dev); + if (ksbb) { struct ksbb_data *data = ksbb->data; - if (find_sideband_behavior(ksbb, row, column, &entry) >= 0) { + + struct ksbb_entry *entry = find_sideband_behavior(ksbb, row, column); + if (entry) { struct zmk_behavior_binding_event event = {.position = INT32_MAX, .timestamp = k_uptime_get()}; @@ -159,8 +156,6 @@ static int ksbb_pm_action(const struct device *dev, enum pm_device_action action #endif // IS_ENABLED(CONFIG_PM_DEVICE) -#define JUST_ONE(_id) 1 - #define ENTRY(e) \ { \ .row = DT_PROP(e, row), .column = DT_PROP(e, column), \ @@ -173,7 +168,7 @@ static int ksbb_pm_action(const struct device *dev, enum pm_device_action action const struct ksbb_config ksbb_config_##n = { \ .kscan = DEVICE_DT_GET(DT_INST_PHANDLE(n, kscan)), \ .entries = entries_##n, \ - .entries_len = DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(n, JUST_ONE, (+)), \ + .entries_len = ARRAY_SIZE(entries_##n), \ }; \ struct ksbb_data ksbb_data_##n = {}; \ PM_DEVICE_DT_INST_DEFINE(n, ksbb_pm_action); \ From 8d54e287f019baa44540c8d8120eac594a630b03 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 19 Feb 2024 02:18:23 -0800 Subject: [PATCH 1044/1130] fix: Adjustments for Zephyr 3.5. --- app/Kconfig | 6 +++ app/include/zmk/pm.h | 3 ++ app/src/activity.c | 61 +----------------------- app/src/behaviors/behavior_soft_off.c | 2 +- app/src/pm.c | 68 ++++++++++++++++++++++++++- 5 files changed, 79 insertions(+), 61 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 28d3c22ac5a..5068e91fdfc 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -405,6 +405,7 @@ config ZMK_SLEEP bool "Enable deep sleep support" depends on HAS_POWEROFF select POWEROFF + select ZMK_PM_DEVICE_SUSPEND_RESUME imply USB if ZMK_SLEEP @@ -426,10 +427,15 @@ config ZMK_EXT_POWER config ZMK_PM bool +config ZMK_PM_DEVICE_SUSPEND_RESUME + bool + select ZMK_PM + config ZMK_PM_SOFT_OFF bool "Soft-off support" select ZMK_PM select PM_DEVICE + select ZMK_PM_DEVICE_SUSPEND_RESUME config ZMK_GPIO_KEY_WAKEUP_TRIGGER bool "Hardware supported wakeup (GPIO)" diff --git a/app/include/zmk/pm.h b/app/include/zmk/pm.h index dff217afd29..a733856d09a 100644 --- a/app/include/zmk/pm.h +++ b/app/include/zmk/pm.h @@ -6,4 +6,7 @@ #pragma once +int zmk_pm_suspend_devices(void); +void zmk_pm_resume_devices(void); + int zmk_pm_soft_off(void); \ No newline at end of file diff --git a/app/src/activity.c b/app/src/activity.c index 8f421f85d02..454e91e5da0 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -7,8 +7,6 @@ #include #include #include -#include -#include #include #include @@ -20,69 +18,14 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include + #include #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) #include #endif -// Reimplement some of the device work from Zephyr PM to work with the new `sys_poweroff` API. -// TODO: Tweak this to smarter runtime PM of subsystems on sleep. - -#ifdef CONFIG_PM_DEVICE -TYPE_SECTION_START_EXTERN(const struct device *, zmk_pm_device_slots); - -#if !defined(CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE) -/* Number of devices successfully suspended. */ -static size_t zmk_num_susp; - -static int zmk_pm_suspend_devices(void) { - const struct device *devs; - size_t devc; - - devc = z_device_get_all_static(&devs); - - zmk_num_susp = 0; - - for (const struct device *dev = devs + devc - 1; dev >= devs; dev--) { - int ret; - - /* - * Ignore uninitialized devices, busy devices, wake up sources, and - * devices with runtime PM enabled. - */ - if (!device_is_ready(dev) || pm_device_is_busy(dev) || pm_device_state_is_locked(dev) || - pm_device_wakeup_is_enabled(dev) || pm_device_runtime_is_enabled(dev)) { - continue; - } - - ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND); - /* ignore devices not supporting or already at the given state */ - if ((ret == -ENOSYS) || (ret == -ENOTSUP) || (ret == -EALREADY)) { - continue; - } else if (ret < 0) { - LOG_ERR("Device %s did not enter %s state (%d)", dev->name, - pm_device_state_str(PM_DEVICE_STATE_SUSPENDED), ret); - return ret; - } - - TYPE_SECTION_START(zmk_pm_device_slots)[zmk_num_susp] = dev; - zmk_num_susp++; - } - - return 0; -} - -static void zmk_pm_resume_devices(void) { - for (int i = (zmk_num_susp - 1); i >= 0; i--) { - pm_device_action_run(TYPE_SECTION_START(zmk_pm_device_slots)[i], PM_DEVICE_ACTION_RESUME); - } - - zmk_num_susp = 0; -} -#endif /* !CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE */ -#endif /* CONFIG_PM_DEVICE */ - bool is_usb_power_present(void) { #if IS_ENABLED(CONFIG_USB_DEVICE_STACK) return zmk_usb_is_powered(); diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index e6096bb4841..878a2fc5869 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -64,7 +64,7 @@ static const struct behavior_driver_api behavior_soft_off_driver_api = { }; \ static struct behavior_soft_off_data bso_data_##n = {}; \ BEHAVIOR_DT_INST_DEFINE(0, behavior_soft_off_init, NULL, &bso_data_##n, &bso_config_##n, \ - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_soft_off_driver_api); DT_INST_FOREACH_STATUS_OKAY(BSO_INST) diff --git a/app/src/pm.c b/app/src/pm.c index 8525046f049..4f151875ba3 100644 --- a/app/src/pm.c +++ b/app/src/pm.c @@ -8,13 +8,72 @@ #include #include #include +#include #include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include +// Reimplement some of the device work from Zephyr PM to work with the new `sys_poweroff` API. +// TODO: Tweak this to smarter runtime PM of subsystems on sleep. + +#ifdef CONFIG_ZMK_PM_DEVICE_SUSPEND_RESUME +TYPE_SECTION_START_EXTERN(const struct device *, zmk_pm_device_slots); + +#if !defined(CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE) +/* Number of devices successfully suspended. */ +static size_t zmk_num_susp; + +int zmk_pm_suspend_devices(void) { + const struct device *devs; + size_t devc; + + devc = z_device_get_all_static(&devs); + + zmk_num_susp = 0; + + for (const struct device *dev = devs + devc - 1; dev >= devs; dev--) { + int ret; + + /* + * Ignore uninitialized devices, busy devices, wake up sources, and + * devices with runtime PM enabled. + */ + if (!device_is_ready(dev) || pm_device_is_busy(dev) || pm_device_state_is_locked(dev) || + pm_device_wakeup_is_enabled(dev) || pm_device_runtime_is_enabled(dev)) { + continue; + } + + ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND); + /* ignore devices not supporting or already at the given state */ + if ((ret == -ENOSYS) || (ret == -ENOTSUP) || (ret == -EALREADY)) { + continue; + } else if (ret < 0) { + LOG_ERR("Device %s did not enter %s state (%d)", dev->name, + pm_device_state_str(PM_DEVICE_STATE_SUSPENDED), ret); + return ret; + } + + TYPE_SECTION_START(zmk_pm_device_slots)[zmk_num_susp] = dev; + zmk_num_susp++; + } + + return 0; +} + +void zmk_pm_resume_devices(void) { + for (int i = (zmk_num_susp - 1); i >= 0; i--) { + pm_device_action_run(TYPE_SECTION_START(zmk_pm_device_slots)[i], PM_DEVICE_ACTION_RESUME); + } + + zmk_num_susp = 0; +} +#endif /* !CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE */ +#endif /* CONFIG_ZMK_PM_DEVICE_SUSPEND_RESUME */ + #if IS_ENABLED(CONFIG_ZMK_PM_SOFT_OFF) #define HAS_WAKERS DT_HAS_COMPAT_STATUS_OKAY(zmk_soft_off_wakeup_sources) @@ -64,8 +123,15 @@ int zmk_pm_soft_off(void) { } #endif // HAS_WAKERS + int err = zmk_pm_suspend_devices(); + if (err < 0) { + zmk_pm_resume_devices(); + return err; + } + LOG_DBG("soft-off: go to sleep"); - return pm_state_force(0U, &(struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0}); + sys_poweroff(); + return 0; } #endif // IS_ENABLED(CONFIG_ZMK_PM_SOFT_OFF) \ No newline at end of file From cac999b1d6f09cb9f11fbdb832bed64b888baef5 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Feb 2024 07:59:26 +0000 Subject: [PATCH 1045/1130] feat: Updated soft-off docs. * Document new sideband behavior kscan driver for integrated soft-off support. --- docs/docs/features/soft-off.md | 193 +++++++++++++++++++++++++-------- 1 file changed, 149 insertions(+), 44 deletions(-) diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index 370a3880769..ff47e7f15b4 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -37,11 +37,28 @@ The simplest way to achieve this is with a push button between a GPIO pin and gr #### Matrix-Integrated Hardware Combo -Another, more complicated option is to tie two of the switch outputs in the matrix together through an AND gate and connect that to the dedicated GPIO pin. This way you can use a key combination in your existing keyboard matrix to trigger soft on/off. To make this work best, the two switches used should both be driven by the same matrix input pin so that both will be active simultaneously on the AND gate inputs. The alternative is to use a combination of diodes and capacitors to ensure both pins are active/high at the same time even if scanning sets them high at different times. Support for this mode will be coming soon. +Another, more complicated option is to tie two of the switch outputs in the matrix together through an AND gate and connect that to the dedicated GPIO pin. This way you can use a key combination in your existing keyboard matrix to trigger soft on/off. To make this work best, the two switches used should both be driven by the same matrix input pin so that both will be active simultaneously on the AND gate inputs. The alternative is to connect the switch to two MOSFETs that trigger both the regular matrix connect and the connect to the AND gate to ensure both pins are active/high at the same time even if scanning sets them high at different times. ### Firmware Changes -Several items work together to make both triggering soft off properly, and setting up the device to _wake_ from soft off work as expected. +Several items work together to make both triggering soft off properly, and setting up the device to _wake_ from soft off work as expected. In addition, some small changes are needed to keep the regular idle deep sleep functionality working. + +#### Wakeup Sources + +Zephyr has general support for the concept of a device as a "wakeup source", which ZMK has not previously used. Adding soft off requires properly updating the existing `kscan` devices with the `wakeup-source` property to ensure they will still work to wake the device from regular inactive deep sleep, e.g.: + +``` +/ { + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + wakeup-source; + + ... + }; +}; +``` #### GPIO Key @@ -62,11 +79,47 @@ GPIO keys are defined using child nodes under the `gpio-keys` compatible node. E - The `gpios` property should be a phandle-array with a fully defined GPIO pin and with the correct pull up/down and active high/low flags set. In the above example the soft on/off would be triggered by pulling the specified pin low, typically by pressing a switch that has the other leg connected to ground. -#### Behavior Key +#### Soft Off Waker -Next, we will create a new "behavior key". Behavior keys are an easy way to tie a keymap behavior to a GPIO key outside of the normal keymap processing. They do _not_ do the normal keymap processing, so they are only suitable for use with basic behaviors, not complicated macros, hold-taps, etc. +Next, we need to add another device which will be enabled only when the keyboard is going into soft off state, and will configure the previously declared GPIO key with the correct interrupt configuration to wake the device from soft off once it is pressed. -In this case, we will be creating a dedicated instance of the [Soft Off Behavior](../behaviors/soft-off.md) that will be used only for our hardware on/off button, then binding it to our key: +``` +/ { + wakeup_source: wakeup_source { + compatible = "zmk,gpio-key-wakeup-trigger"; + + trigger = <&wakeup_key>; + wakeup-source; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,gpio-key-wakeup-trigger`. +- The `trigger` property is a phandle to the GPIO key defined earlier. +- The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. +- An optional `output-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. + +Once that is declared, we will list it in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing: + +``` +/ { + soft_off_wakers { + compatible = "zmk,soft-off-wakeup-sources"; + wakeup-sources = <&wakeup_source>; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. +- The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. + +#### Soft Off Behavior Instance + +To use the [soft off behavior](../behaviors/soft-off.md) outside of a keymap, add an instance of the behavior to your `.overlay`/`.dts` file: ``` / { @@ -77,74 +130,126 @@ In this case, we will be creating a dedicated instance of the [Soft Off Behavior hold-time-ms = <5000>; }; }; - - soft_off_behavior_key { - compatible = "zmk,gpio-key-behavior-trigger"; - bindings = <&hw_soft_off>; - key = <&wakeup_key>; - }; }; ``` -Here are the properties for the behavior key node: +#### KScan Sideband Behavior -- The `compatible` property for the node must be `zmk,gpio-key-behavior-trigger`. -- The `bindings` property is a phandle to the soft off behavior defined above. -- The `key` property is a phandle to the GPIO key defined earlier. +The kscan sideband behavior driver will be used to trigger the [soft off behavior](../behaviors/soft-off.md) "out of band" from the normal keymap processing. To do so, it will decorate/wrap an underlying kscan driver. What kscan driver will vary for simple direct pin vs. matrix-integrated hardware combo. -If you have set up your on/off to be controlled by a matrix-integrated combo, the behavior key will need to be integrated into your existing kscan setup. Full details to come when this is supported. +##### Simple Direct Pin -#### Wakeup Sources +With a simple direct pin setup, the The [direct kscan](../config/kscan.md) driver can be used with a GPIO key, to make a small "side matrix": -Zephyr has general support for the concept of a device as a "wakeup source", which ZMK has not previously used. Adding soft off requires properly updating the existing `kscan` devices with the `wakeup-source` property, e.g.: +``` + soft_off_direct_scan: soft_off_direct_scan { + compatible = "zmk,kscan-gpio-direct"; + input-keys = <&wakeup_key>; + }; +``` + +With that in place, the kscan sideband behavior will wrap the new driver: ``` / { - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - diode-direction = "col2row"; + side_band_behavior_triggers: side_band_behavior_triggers { + compatible = "zmk,kscan-sideband-behaviors"; + + kscan = <&soft_off_direct_scan>; wakeup-source; - ... + soft_off { + column = <0>; + row = <0>; + bindings = <&hw_soft_off>; + }; }; }; ``` -#### Soft Off Waker +##### Matrix-Integrated Hardware Combo -Next, we need to add another device which will be enabled only when the keyboard is going into soft off state, and will configure the previously declared GPIO key with the correct interrupt configuration to wake the device from soft off once it is pressed. +For this case, you will supplement the existing kscan matrix, by adding the additional pin as another entry in +the `row-gpios`/`col-gpios` for whichever pins are used to read the matrix state. For example, for an existing matrix like: ``` -/ { - wakeup_source: wakeup_source { - compatible = "zmk,gpio-key-wakeup-trigger"; + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + label = "KSCAN"; + debounce-press-ms = <1>; + debounce-release-ms = <5>; - trigger = <&wakeup_key>; + diode-direction = "col2row"; + + col-gpios + = <&gpio0 12 (GPIO_ACTIVE_HIGH)> + , <&gpio1 9 (GPIO_ACTIVE_HIGH)> + ; + row-gpios + = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +``` + +you would add another row value: + +``` + kscan: kscan { + compatible = "zmk,kscan-gpio-matrix"; wakeup-source; + label = "KSCAN"; + debounce-press-ms = <1>; + debounce-release-ms = <5>; + + diode-direction = "col2row"; + + col-gpios + = <&gpio0 12 (GPIO_ACTIVE_HIGH)> + , <&gpio1 9 (GPIO_ACTIVE_HIGH)> + ; + row-gpios + = <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; }; -}; ``` -Here are the properties for the node: +With that in place, you would decorate the kscan driver: -- The `compatible` property for the node must be `zmk,gpio-key-wakeup-trigger`. -- The `trigger` property is a phandle to the GPIO key defined earlier. -- The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. -- An optional `output-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. +``` + side_band_behavior_triggers: side_band_behavior_triggers { + compatible = "zmk,kscan-sideband-behaviors"; + wakeup-source; + kscan = <&kscan>; + soft_off { + column = <0>; + row = <3>; + bindings = <&hw_soft_off>; + }; + }; +``` -Once that is declared, we will list it in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing: +Critically, the `column` and `row` values would correspond to the location of the added entry. + +Lastly, which is critical, you would update the `zmk,kscan` chosen value to point to the new kscan instance: ``` -/ { - soft_off_wakers { - compatible = "zmk,soft-off-wakeup-sources"; - wakeup-sources = <&wakeup_source>; + chosen { + ... + zmk,kscan = &side_band_behavior_triggers; + ... }; -}; ``` -Here are the properties for the node: +Here are the properties for the kscan sideband behaviors node: -- The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. -- The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. +- The `compatible` property for the node must be `zmk,kscan-sideband-behaviors`. +- The `kscan` property is a phandle to the inner kscan instance that will have press/release events intercepted. + +The child nodes allow setting up the behaviors to invoke directly for a certain row and column: + +- The `row` and `column` properties set the values to intercept and trigger the behavior for. +- The `bindings` property references the behavior that should be triggered when the matching row and column event triggers. From bb94a7aafeb3d3d2f4165f58a654e79f8f6e6c9f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 20 Feb 2024 00:10:15 -0800 Subject: [PATCH 1046/1130] fix: Fixes for building soft off without deep sleep. --- app/CMakeLists.txt | 2 +- app/Kconfig | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 2abf943fb39..2744f53d595 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -8,7 +8,7 @@ set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/modul find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) -if(CONFIG_ZMK_SLEEP) +if(CONFIG_ZMK_PM_DEVICE_SUSPEND_RESUME) zephyr_linker_sources(SECTIONS include/linker/zmk-pm-devices.ld) endif() diff --git a/app/Kconfig b/app/Kconfig index 5068e91fdfc..8f2fe837317 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -433,9 +433,11 @@ config ZMK_PM_DEVICE_SUSPEND_RESUME config ZMK_PM_SOFT_OFF bool "Soft-off support" + depends on HAS_POWEROFF select ZMK_PM select PM_DEVICE select ZMK_PM_DEVICE_SUSPEND_RESUME + select POWEROFF config ZMK_GPIO_KEY_WAKEUP_TRIGGER bool "Hardware supported wakeup (GPIO)" From fa9ea9ea8b171a86765b5b08bed31922e9b2af76 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 15 Mar 2024 20:22:54 -0400 Subject: [PATCH 1047/1130] fix(docs): Fix soft off waker prop name, headers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use the correct property for extra GPIOs to make active for the waker before going into soft off state. * Change header depth for easier navigation of the soft off feature page. Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com> --- docs/docs/features/soft-off.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index ff47e7f15b4..20a5bbe4709 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -24,26 +24,24 @@ For existing designs, using soft off is as simple as placing the [Soft Off Behav You can then wake up the keyboard by pressing the reset button once, and repeating this for each side for split keyboards. -## Adding Dedicated Soft On/Off GPIO Pin To New Designs - -### Hardware Design +## Hardware Changes For New Designs ZMK's dedicated soft on/off pin feature requires a dedicated GPIO pin to be used to trigger powering off, and to wake the core from the soft off state when it goes active again later. -#### Simple Direct Pin +### Simple Direct Pin The simplest way to achieve this is with a push button between a GPIO pin and ground. -#### Matrix-Integrated Hardware Combo +### Matrix-Integrated Hardware Combo Another, more complicated option is to tie two of the switch outputs in the matrix together through an AND gate and connect that to the dedicated GPIO pin. This way you can use a key combination in your existing keyboard matrix to trigger soft on/off. To make this work best, the two switches used should both be driven by the same matrix input pin so that both will be active simultaneously on the AND gate inputs. The alternative is to connect the switch to two MOSFETs that trigger both the regular matrix connect and the connect to the AND gate to ensure both pins are active/high at the same time even if scanning sets them high at different times. -### Firmware Changes +## Firmware Changes For New Designs Several items work together to make both triggering soft off properly, and setting up the device to _wake_ from soft off work as expected. In addition, some small changes are needed to keep the regular idle deep sleep functionality working. -#### Wakeup Sources +### Wakeup Sources Zephyr has general support for the concept of a device as a "wakeup source", which ZMK has not previously used. Adding soft off requires properly updating the existing `kscan` devices with the `wakeup-source` property to ensure they will still work to wake the device from regular inactive deep sleep, e.g.: @@ -60,7 +58,7 @@ Zephyr has general support for the concept of a device as a "wakeup source", whi }; ``` -#### GPIO Key +### GPIO Key Zephyr's basic GPIO Key concept is used to configure the GPIO pin that will be used for both triggering soft off and waking the device later. Here is an example for a keyboard with a dedicated on/off push button that is a direct wire between the GPIO pin and ground: @@ -79,7 +77,7 @@ GPIO keys are defined using child nodes under the `gpio-keys` compatible node. E - The `gpios` property should be a phandle-array with a fully defined GPIO pin and with the correct pull up/down and active high/low flags set. In the above example the soft on/off would be triggered by pulling the specified pin low, typically by pressing a switch that has the other leg connected to ground. -#### Soft Off Waker +### Soft Off Waker Next, we need to add another device which will be enabled only when the keyboard is going into soft off state, and will configure the previously declared GPIO key with the correct interrupt configuration to wake the device from soft off once it is pressed. @@ -99,7 +97,7 @@ Here are the properties for the node: - The `compatible` property for the node must be `zmk,gpio-key-wakeup-trigger`. - The `trigger` property is a phandle to the GPIO key defined earlier. - The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. -- An optional `output-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. +- An optional `extra-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. Once that is declared, we will list it in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing: @@ -117,7 +115,7 @@ Here are the properties for the node: - The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. - The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. -#### Soft Off Behavior Instance +### Soft Off Behavior Instance To use the [soft off behavior](../behaviors/soft-off.md) outside of a keymap, add an instance of the behavior to your `.overlay`/`.dts` file: @@ -133,11 +131,11 @@ To use the [soft off behavior](../behaviors/soft-off.md) outside of a keymap, ad }; ``` -#### KScan Sideband Behavior +### KScan Sideband Behavior The kscan sideband behavior driver will be used to trigger the [soft off behavior](../behaviors/soft-off.md) "out of band" from the normal keymap processing. To do so, it will decorate/wrap an underlying kscan driver. What kscan driver will vary for simple direct pin vs. matrix-integrated hardware combo. -##### Simple Direct Pin +#### Simple Direct Pin With a simple direct pin setup, the The [direct kscan](../config/kscan.md) driver can be used with a GPIO key, to make a small "side matrix": @@ -167,7 +165,7 @@ With that in place, the kscan sideband behavior will wrap the new driver: }; ``` -##### Matrix-Integrated Hardware Combo +#### Matrix-Integrated Hardware Combo For this case, you will supplement the existing kscan matrix, by adding the additional pin as another entry in the `row-gpios`/`col-gpios` for whichever pins are used to read the matrix state. For example, for an existing matrix like: From 2df6dcd973776c0c0d1047d13178a72b5c0b6ca7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 16 Mar 2024 14:15:52 -0700 Subject: [PATCH 1048/1130] feat(behaviors): More logging in soft off. --- app/src/behaviors/behavior_soft_off.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index 878a2fc5869..8b8ba4f9add 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -45,8 +45,18 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, struct behavior_soft_off_data *data = dev->data; const struct behavior_soft_off_config *config = dev->config; - if (config->hold_time_ms == 0 || (k_uptime_get() - data->press_start) >= config->hold_time_ms) { + if (config->hold_time_ms == 0) { + LOG_DBG("No hold time set, triggering soft off"); zmk_pm_soft_off(); + } else { + uint32_t hold_time = k_uptime_get() - data->press_start; + + if (hold_time > config->hold_time_ms) { + zmk_pm_soft_off(); + } else { + LOG_INF("Not triggering soft off: held for %d and hold time is %d", hold_time, + config->hold_time_ms); + } } return ZMK_BEHAVIOR_OPAQUE; From d0e0ecb4e3d11b5303c1dc5c857ff1f75c1d0aaa Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 25 Mar 2024 01:47:11 -0700 Subject: [PATCH 1049/1130] refactor: Use kscan directly to wake when we can. * When adding a dedicated GPIO pin for soft off/on, use the direct kscan as the waker, instead of adding an additional node. --- .../boards/nrf52840dk_nrf52840.overlay | 22 ++--- docs/docs/features/soft-off.md | 95 +++++++++++-------- 2 files changed, 63 insertions(+), 54 deletions(-) diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay index 47b67dc0029..b9c68e5a2ff 100644 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -42,24 +42,10 @@ encoder: &qdec0 { }; }; - wakeup_source: wakeup_source { - compatible = "zmk,gpio-key-wakeup-trigger"; - status = "okay"; - - trigger = <&button0>; - wakeup-source; - }; - - soft_off_wakers { - compatible = "zmk,soft-off-wakeup-sources"; - status = "okay"; - - wakeup-sources = <&wakeup_source>; - }; - soft_off_direct_kscan: soft_off_direct_kscan { compatible = "zmk,kscan-gpio-direct"; input-keys = <&button0>; + wakeup-source; }; soft_off_sideband_behaviors { @@ -72,4 +58,10 @@ encoder: &qdec0 { }; }; + soft_off_wakers { + compatible = "zmk,soft-off-wakeup-sources"; + status = "okay"; + + wakeup-sources = <&soft_off_direct_kscan>; + }; }; \ No newline at end of file diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index 20a5bbe4709..b08e1643fcc 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -66,7 +66,7 @@ Zephyr's basic GPIO Key concept is used to configure the GPIO pin that will be u / { keys { compatible = "gpio-keys"; - wakeup_key: wakeup_key { + soft_off_key: soft_off_key { gpios = <&gpio0 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; }; }; @@ -77,44 +77,6 @@ GPIO keys are defined using child nodes under the `gpio-keys` compatible node. E - The `gpios` property should be a phandle-array with a fully defined GPIO pin and with the correct pull up/down and active high/low flags set. In the above example the soft on/off would be triggered by pulling the specified pin low, typically by pressing a switch that has the other leg connected to ground. -### Soft Off Waker - -Next, we need to add another device which will be enabled only when the keyboard is going into soft off state, and will configure the previously declared GPIO key with the correct interrupt configuration to wake the device from soft off once it is pressed. - -``` -/ { - wakeup_source: wakeup_source { - compatible = "zmk,gpio-key-wakeup-trigger"; - - trigger = <&wakeup_key>; - wakeup-source; - }; -}; -``` - -Here are the properties for the node: - -- The `compatible` property for the node must be `zmk,gpio-key-wakeup-trigger`. -- The `trigger` property is a phandle to the GPIO key defined earlier. -- The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. -- An optional `extra-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. - -Once that is declared, we will list it in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing: - -``` -/ { - soft_off_wakers { - compatible = "zmk,soft-off-wakeup-sources"; - wakeup-sources = <&wakeup_source>; - }; -}; -``` - -Here are the properties for the node: - -- The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. -- The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. - ### Soft Off Behavior Instance To use the [soft off behavior](../behaviors/soft-off.md) outside of a keymap, add an instance of the behavior to your `.overlay`/`.dts` file: @@ -143,6 +105,7 @@ With a simple direct pin setup, the The [direct kscan](../config/kscan.md) drive soft_off_direct_scan: soft_off_direct_scan { compatible = "zmk,kscan-gpio-direct"; input-keys = <&wakeup_key>; + wakeup-source; }; ``` @@ -165,6 +128,22 @@ With that in place, the kscan sideband behavior will wrap the new driver: }; ``` +Finally, we will list the kscan instance in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing so it can _also_ wake the keyboard from soft off when pressed: + +``` +/ { + soft_off_wakers { + compatible = "zmk,soft-off-wakeup-sources"; + wakeup-sources = <&soft_off_direct_scan>; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. +- The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. + #### Matrix-Integrated Hardware Combo For this case, you will supplement the existing kscan matrix, by adding the additional pin as another entry in @@ -251,3 +230,41 @@ The child nodes allow setting up the behaviors to invoke directly for a certain - The `row` and `column` properties set the values to intercept and trigger the behavior for. - The `bindings` property references the behavior that should be triggered when the matching row and column event triggers. + +### Soft Off Waker + +Next, we need to add another device which will be enabled only when the keyboard is going into soft off state, and will configure the previously declared GPIO key with the correct interrupt configuration to wake the device from soft off once it is pressed. + +``` +/ { + wakeup_source: wakeup_source { + compatible = "zmk,gpio-key-wakeup-trigger"; + + trigger = <&wakeup_key>; + wakeup-source; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,gpio-key-wakeup-trigger`. +- The `trigger` property is a phandle to the GPIO key defined earlier. +- The `wakeup-source` property signals to Zephyr this device should not be suspended during the shutdown procedure. +- An optional `extra-gpios` property contains a list of GPIO pins (including the appropriate flags) to set active before going into power off, if needed to ensure the GPIO pin will trigger properly to wake the keyboard. This is only needed for matrix integrated combos. For those keyboards, the list should include the matrix output needs needed so the combo hardware is properly "driven" when the keyboard is off. + +Once that is declared, we will list it in an additional configuration section so that the ZMK soft off process knows it needs to enable this device as part of the soft off processing: + +``` +/ { + soft_off_wakers { + compatible = "zmk,soft-off-wakeup-sources"; + wakeup-sources = <&wakeup_source>; + }; +}; +``` + +Here are the properties for the node: + +- The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. +- The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. From 41d81801ed11a1dca918c9c0088351856e4e1808 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 25 Mar 2024 09:37:14 +0000 Subject: [PATCH 1050/1130] fix(pm): Use Zephyr created device slots. * Avoid overwriting random memory by using iterable section created by Zephyr PM. --- app/CMakeLists.txt | 4 ---- app/include/linker/zmk-pm-devices.ld | 9 --------- app/src/pm.c | 6 +++--- 3 files changed, 3 insertions(+), 16 deletions(-) delete mode 100644 app/include/linker/zmk-pm-devices.ld diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 2744f53d595..0b681ea9531 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -8,10 +8,6 @@ set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/modul find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) -if(CONFIG_ZMK_PM_DEVICE_SUSPEND_RESUME) - zephyr_linker_sources(SECTIONS include/linker/zmk-pm-devices.ld) -endif() - zephyr_linker_sources(SECTIONS include/linker/zmk-behaviors.ld) zephyr_linker_sources(RODATA include/linker/zmk-events.ld) diff --git a/app/include/linker/zmk-pm-devices.ld b/app/include/linker/zmk-pm-devices.ld deleted file mode 100644 index 93ec5025ded..00000000000 --- a/app/include/linker/zmk-pm-devices.ld +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (c) 2023 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#include - -ITERABLE_SECTION_RAM(zmk_pm_device_slots, 4) diff --git a/app/src/pm.c b/app/src/pm.c index 4f151875ba3..447eb351c9b 100644 --- a/app/src/pm.c +++ b/app/src/pm.c @@ -21,7 +21,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); // TODO: Tweak this to smarter runtime PM of subsystems on sleep. #ifdef CONFIG_ZMK_PM_DEVICE_SUSPEND_RESUME -TYPE_SECTION_START_EXTERN(const struct device *, zmk_pm_device_slots); +TYPE_SECTION_START_EXTERN(const struct device *, pm_device_slots); #if !defined(CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE) /* Number of devices successfully suspended. */ @@ -57,7 +57,7 @@ int zmk_pm_suspend_devices(void) { return ret; } - TYPE_SECTION_START(zmk_pm_device_slots)[zmk_num_susp] = dev; + TYPE_SECTION_START(pm_device_slots)[zmk_num_susp] = dev; zmk_num_susp++; } @@ -66,7 +66,7 @@ int zmk_pm_suspend_devices(void) { void zmk_pm_resume_devices(void) { for (int i = (zmk_num_susp - 1); i >= 0; i--) { - pm_device_action_run(TYPE_SECTION_START(zmk_pm_device_slots)[i], PM_DEVICE_ACTION_RESUME); + pm_device_action_run(TYPE_SECTION_START(pm_device_slots)[i], PM_DEVICE_ACTION_RESUME); } zmk_num_susp = 0; From 7e7110d85f0fe24948b319382bed723e38f5336c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 25 Mar 2024 02:39:54 -0700 Subject: [PATCH 1051/1130] fix(pm): Fixes for dedicated on/off on peripherals. * Add new flag to differentiate soft off on peripherals that is invoked by split GATT svc and dedicated additional ones tied to GPIO pin. --- .../zmk_uno/boards/nrf52840dk_nrf52840.overlay | 5 ++--- app/dts/behaviors/soft_off.dtsi | 3 ++- .../behaviors/zmk,behavior-soft-off.yaml | 3 +++ app/src/behaviors/behavior_soft_off.c | 17 ++++++++++++----- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay index b9c68e5a2ff..d798eca7acc 100644 --- a/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay +++ b/app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay @@ -35,10 +35,9 @@ encoder: &qdec0 { / { behaviors { - soft_off: soft_off { + hw_soft_off: hw_soft_off { compatible = "zmk,behavior-soft-off"; #binding-cells = <0>; - status = "okay"; }; }; @@ -54,7 +53,7 @@ encoder: &qdec0 { soft_off { row = <0>; column = <0>; - bindings = <&soft_off>; + bindings = <&hw_soft_off>; }; }; diff --git a/app/dts/behaviors/soft_off.dtsi b/app/dts/behaviors/soft_off.dtsi index 1e58c7711d0..63c04b1dd7e 100644 --- a/app/dts/behaviors/soft_off.dtsi +++ b/app/dts/behaviors/soft_off.dtsi @@ -6,9 +6,10 @@ / { behaviors { - /omit-if-no-ref/ soft_off: soft_off { + /omit-if-no-ref/ soft_off: keymap_soft_off { compatible = "zmk,behavior-soft-off"; #binding-cells = <0>; + split-peripheral-off-on-press; }; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml b/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml index 1467ede4772..865e656f0d1 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-soft-off.yaml @@ -12,3 +12,6 @@ properties: type: int required: false description: Number of milliseconds the behavior must be held before releasing will actually trigger a soft-off. + split-peripheral-off-on-press: + type: boolean + description: When built for a split peripheral, turn off on press, not release diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index 8b8ba4f9add..3a4ae42486d 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -16,6 +16,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct behavior_soft_off_config { + bool split_peripheral_turn_off_on_press; uint32_t hold_time_ms; }; @@ -23,18 +24,22 @@ struct behavior_soft_off_data { uint32_t press_start; }; +#define IS_SPLIT_PERIPHERAL \ + (IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL)) + static int behavior_soft_off_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev); struct behavior_soft_off_data *data = dev->data; + const struct behavior_soft_off_config *config = dev->config; -#if IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) - zmk_pm_soft_off(); -#else - data->press_start = k_uptime_get(); -#endif + if (IS_SPLIT_PERIPHERAL && config->split_peripheral_turn_off_on_press) { + zmk_pm_soft_off(); + } else { + data->press_start = k_uptime_get(); + } return ZMK_BEHAVIOR_OPAQUE; } @@ -71,6 +76,8 @@ static const struct behavior_driver_api behavior_soft_off_driver_api = { #define BSO_INST(n) \ static const struct behavior_soft_off_config bso_config_##n = { \ .hold_time_ms = DT_INST_PROP_OR(n, hold_time_ms, 0), \ + .split_peripheral_turn_off_on_press = \ + DT_INST_PROP_OR(n, split_peripheral_off_on_press, false), \ }; \ static struct behavior_soft_off_data bso_data_##n = {}; \ BEHAVIOR_DT_INST_DEFINE(0, behavior_soft_off_init, NULL, &bso_data_##n, &bso_config_##n, \ From 29c0cdb3abce98708f5961e01d96eefc9efb7d42 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 25 Mar 2024 09:41:33 +0000 Subject: [PATCH 1052/1130] fix(shields): Fix for direct use with ZMK Uno split. --- app/boards/shields/zmk_uno/zmk_uno_split.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.keymap b/app/boards/shields/zmk_uno/zmk_uno_split.keymap index 37672a7dbdb..0e50a2833f0 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno_split.keymap @@ -21,7 +21,7 @@ // / { // chosen { // zmk,matrix-transform = &split_direct_matrix_transform; -// zmk,kscan = &kscan_direct_comp; +// zmk,kscan = &kscan_direct; // }; // }; From e66f068fb5d53f3e6071359970021d04a338c176 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 27 Mar 2024 20:35:40 -0700 Subject: [PATCH 1053/1130] fix(docs): Minor soft-off docs tweaks from review. --- docs/docs/behaviors/soft-off.md | 2 ++ docs/docs/config/kscan.md | 2 +- docs/docs/features/soft-off.md | 8 ++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/docs/behaviors/soft-off.md b/docs/docs/behaviors/soft-off.md index 05374004955..14b5f36aee7 100644 --- a/docs/docs/behaviors/soft-off.md +++ b/docs/docs/behaviors/soft-off.md @@ -7,6 +7,8 @@ sidebar_label: Soft Off The soft off behavior is used to force the keyboard into an off state. Depending on the specific keyboard hardware, the keyboard can be turned back on again either with a dedicated on/off button that is available, or using the reset button found on the device. +Refer to the [soft off config](../config/power.md#soft-off) for details on enabling soft off in order to use this behavior. + For more information, see the [Soft Off Feature](../features/soft-off.md) page. ### Behavior Binding diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 4a3954f9f03..3aa1b37875c 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -73,7 +73,7 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml]( | Property | Type | Description | Default | | ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- | ------- | -| `input-gpios` | GPIO array | Input GPIOs (one per key) | | +| `input-gpios` | GPIO array | Input GPIOs (one per key). Can be either direct GPIO pin or `gpio-key` references. | | | `debounce-press-ms` | int | Debounce time for key press in milliseconds. Use 0 for eager debouncing. | 5 | | `debounce-release-ms` | int | Debounce time for key release in milliseconds. | 5 | | `debounce-scan-period-ms` | int | Time between reads in milliseconds when any key is pressed. | 1 | diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index b08e1643fcc..bd631f1b42e 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -18,6 +18,10 @@ Once powered off, the keyboard will only wake up when: - You press the same button/sequence that you pressed to power off the keyboard, or - You press a reset button found on the keyboard. +## Config + +Refer to the [soft off config](../config/power.md#soft-off) for details on enabling soft off. + ## Soft Off With Existing Designs For existing designs, using soft off is as simple as placing the [Soft Off Behavior](../behaviors/soft-off.md) in your keymap and then invoking it. @@ -104,7 +108,7 @@ With a simple direct pin setup, the The [direct kscan](../config/kscan.md) drive ``` soft_off_direct_scan: soft_off_direct_scan { compatible = "zmk,kscan-gpio-direct"; - input-keys = <&wakeup_key>; + input-keys = <&on_off_key>; wakeup-source; }; ``` @@ -240,7 +244,7 @@ Next, we need to add another device which will be enabled only when the keyboard wakeup_source: wakeup_source { compatible = "zmk,gpio-key-wakeup-trigger"; - trigger = <&wakeup_key>; + trigger = <&on_off_key>; wakeup-source; }; }; From f9bb18b67631288a7ee8046e796775e34b61c0f6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 28 Mar 2024 04:14:02 +0000 Subject: [PATCH 1054/1130] fix(docs): Add `&soft_off` to behaviors index. --- docs/docs/behaviors/index.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/behaviors/index.mdx b/docs/docs/behaviors/index.mdx index 32f4b29a97f..4a05f5653a0 100644 --- a/docs/docs/behaviors/index.mdx +++ b/docs/docs/behaviors/index.mdx @@ -70,6 +70,7 @@ Below is a summary of pre-defined behavior bindings and user-definable behaviors | Binding | Behavior | Description | | ------------ | --------------------------------------------- | --------------------------------------------------------------- | | `&ext_power` | [Power management](power.md#behavior-binding) | Allows enabling or disabling the VCC power output to save power | +| `&soft_off` | [Soft off](soft-off.md#behavior-binding) | Turns the keyboard off. | ## User-defined behaviors From 34910787ff68d7e977a2f74b4bc51ef8f99d2cb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 23 Mar 2024 06:44:29 +0000 Subject: [PATCH 1055/1130] chore(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /docs Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) from 5.3.3 to 5.3.4. - [Release notes](https://github.com/webpack/webpack-dev-middleware/releases) - [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v5.3.4) --- updated-dependencies: - dependency-name: webpack-dev-middleware dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 16525e7c4ef..b0b7e4f6058 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -21538,9 +21538,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", From 25bb126a11736545401e351a68649b7626763963 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:16:57 +0000 Subject: [PATCH 1056/1130] chore(deps): bump express from 4.18.2 to 4.19.2 in /docs Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2) --- updated-dependencies: - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index b0b7e4f6058..afdc8248cf4 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -4809,12 +4809,12 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -4822,7 +4822,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -5542,9 +5542,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -9042,16 +9042,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -17802,9 +17802,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", From 18b86b7720201dde045fddb42965cd64d1082a9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:23:05 +0000 Subject: [PATCH 1057/1130] chore(deps): bump follow-redirects from 1.15.5 to 1.15.6 in /docs Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.5 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index afdc8248cf4..379360a9660 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9387,9 +9387,9 @@ "devOptional": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", From d672b0c70512aa9c880c76f34dd448f9cffe4ae6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:32:02 +0000 Subject: [PATCH 1058/1130] chore(deps): bump react-toastify from 7.0.4 to 10.0.5 in /docs Bumps [react-toastify](https://github.com/fkhadra/react-toastify) from 7.0.4 to 10.0.5. - [Release notes](https://github.com/fkhadra/react-toastify/releases) - [Commits](https://github.com/fkhadra/react-toastify/compare/v7.0.4...v10.0.5) --- updated-dependencies: - dependency-name: react-toastify dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- docs/package-lock.json | 22 +++++++--------------- docs/package.json | 2 +- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 379360a9660..3c76a963b88 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -20,7 +20,7 @@ "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", "react-dom": "^18.0.0", - "react-toastify": "^7.0.4", + "react-toastify": "^10.0.5", "web-tree-sitter": "^0.20.8" }, "devDependencies": { @@ -18049,23 +18049,15 @@ } }, "node_modules/react-toastify": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.4.tgz", - "integrity": "sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz", + "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==", "dependencies": { - "clsx": "^1.1.1" + "clsx": "^2.1.0" }, "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/react-toastify/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/read-package-json-fast": { diff --git a/docs/package.json b/docs/package.json index 7f468cb53d8..a0801763030 100644 --- a/docs/package.json +++ b/docs/package.json @@ -27,7 +27,7 @@ "react-async": "^10.0.1", "react-copy-to-clipboard": "^5.0.3", "react-dom": "^18.0.0", - "react-toastify": "^7.0.4", + "react-toastify": "^10.0.5", "web-tree-sitter": "^0.20.8" }, "browserslist": { From fff1cbecdcc75302b6280a469ed31687cfc79776 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 29 Mar 2024 18:15:06 +0000 Subject: [PATCH 1059/1130] fix: Add wakeup-source; to kscan nodes for ZMK_SLEEP. * ZMK_SLEEP also enables PM_DEVICE, so be sure to mark kscan nodes as wakeup sources so they can wake keyboards from sleep. --- app/boards/arm/adv360pro/adv360pro_left.dts | 1 + app/boards/arm/adv360pro/adv360pro_right.dts | 1 + app/boards/arm/bt60/bt60_v1.dts | 2 ++ app/boards/arm/bt60/bt60_v1_hs.dts | 2 ++ app/boards/arm/ckp/ckp.dtsi | 2 ++ app/boards/arm/corneish_zen/corneish_zen_v1_left.dts | 1 + app/boards/arm/corneish_zen/corneish_zen_v1_right.dts | 1 + app/boards/arm/corneish_zen/corneish_zen_v2_left.dts | 1 + app/boards/arm/corneish_zen/corneish_zen_v2_right.dts | 1 + app/boards/arm/glove80/glove80.dtsi | 2 ++ app/boards/arm/nice60/nice60.dts | 1 + app/boards/arm/s40nc/s40nc.dts | 1 + app/boards/shields/a_dux/a_dux.dtsi | 2 ++ app/boards/shields/bat43/bat43.overlay | 1 + app/boards/shields/bfo9000/bfo9000.dtsi | 1 + app/boards/shields/boardsource3x4/boardsource3x4.overlay | 2 ++ app/boards/shields/boardsource5x12/boardsource5x12.overlay | 2 ++ app/boards/shields/chalice/chalice.overlay | 2 ++ app/boards/shields/clog/clog.dtsi | 1 + app/boards/shields/contra/contra.overlay | 2 ++ app/boards/shields/corne/corne.dtsi | 1 + app/boards/shields/cradio/cradio.dtsi | 2 ++ app/boards/shields/crbn/crbn.overlay | 2 ++ app/boards/shields/eek/eek.overlay | 2 ++ app/boards/shields/elephant42/elephant42.dtsi | 1 + app/boards/shields/ergodash/ergodash.dtsi | 1 + app/boards/shields/eternal_keypad/eternal_keypad.dtsi | 1 + app/boards/shields/fourier/fourier.dtsi | 1 + app/boards/shields/helix/helix.dtsi | 1 + app/boards/shields/hummingbird/hummingbird.overlay | 2 ++ app/boards/shields/iris/iris.dtsi | 1 + app/boards/shields/jian/jian.dtsi | 1 + app/boards/shields/jiran/jiran.dtsi | 1 + app/boards/shields/jorne/jorne.dtsi | 1 + app/boards/shields/knob_goblin/knob_goblin.overlay | 2 ++ app/boards/shields/kyria/kyria_common.dtsi | 1 + app/boards/shields/leeloo/leeloo_common.dtsi | 1 + app/boards/shields/leeloo_micro/leeloo_micro.dtsi | 1 + app/boards/shields/lily58/lily58.dtsi | 1 + app/boards/shields/lotus58/lotus58.dtsi | 1 + app/boards/shields/m60/m60.overlay | 1 + app/boards/shields/microdox/microdox.dtsi | 1 + app/boards/shields/microdox/microdox_v2.dtsi | 1 + app/boards/shields/murphpad/murphpad.overlay | 1 + app/boards/shields/naked60/naked60.overlay | 1 + app/boards/shields/osprette/osprette.overlay | 1 + app/boards/shields/pancake/pancake.overlay | 1 + app/boards/shields/qaz/qaz.overlay | 1 + app/boards/shields/quefrency/quefrency_left.overlay | 2 ++ app/boards/shields/quefrency/quefrency_right.overlay | 2 ++ app/boards/shields/redox/redox.dtsi | 1 + app/boards/shields/reviung34/reviung34.overlay | 2 ++ app/boards/shields/reviung41/reviung41.overlay | 2 ++ app/boards/shields/reviung5/reviung5.overlay | 1 + app/boards/shields/reviung53/reviung53.overlay | 2 ++ app/boards/shields/romac/romac.overlay | 1 + app/boards/shields/romac_plus/romac_plus.overlay | 1 + app/boards/shields/sofle/sofle.dtsi | 1 + .../splitkb_aurora_corne/splitkb_aurora_corne_left.overlay | 2 ++ .../splitkb_aurora_corne/splitkb_aurora_corne_right.overlay | 2 ++ .../splitkb_aurora_helix/splitkb_aurora_helix_left.overlay | 2 ++ .../splitkb_aurora_helix/splitkb_aurora_helix_right.overlay | 2 ++ .../splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay | 2 ++ .../splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay | 2 ++ .../splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay | 2 ++ .../splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay | 2 ++ .../splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay | 2 ++ .../splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay | 1 + app/boards/shields/splitreus62/splitreus62.dtsi | 1 + app/boards/shields/tg4x/tg4x.overlay | 1 + app/boards/shields/two_percent_milk/two_percent_milk.overlay | 1 + app/boards/shields/waterfowl/waterfowl.dtsi | 1 + app/boards/shields/zodiark/zodiark.dtsi | 1 + 73 files changed, 101 insertions(+) diff --git a/app/boards/arm/adv360pro/adv360pro_left.dts b/app/boards/arm/adv360pro/adv360pro_left.dts index 6ef5f59071b..459a2232f1e 100644 --- a/app/boards/arm/adv360pro/adv360pro_left.dts +++ b/app/boards/arm/adv360pro/adv360pro_left.dts @@ -10,6 +10,7 @@ /{ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/adv360pro/adv360pro_right.dts b/app/boards/arm/adv360pro/adv360pro_right.dts index 97d846f855c..748cc42aeb0 100644 --- a/app/boards/arm/adv360pro/adv360pro_right.dts +++ b/app/boards/arm/adv360pro/adv360pro_right.dts @@ -10,6 +10,7 @@ /{ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/bt60/bt60_v1.dts b/app/boards/arm/bt60/bt60_v1.dts index 53d4e77b41d..315d8cceb84 100644 --- a/app/boards/arm/bt60/bt60_v1.dts +++ b/app/boards/arm/bt60/bt60_v1.dts @@ -81,6 +81,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/arm/bt60/bt60_v1_hs.dts b/app/boards/arm/bt60/bt60_v1_hs.dts index 57b47554fc5..27e38286178 100644 --- a/app/boards/arm/bt60/bt60_v1_hs.dts +++ b/app/boards/arm/bt60/bt60_v1_hs.dts @@ -30,6 +30,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/arm/ckp/ckp.dtsi b/app/boards/arm/ckp/ckp.dtsi index 6bbbbdd74fb..4142622ac86 100644 --- a/app/boards/arm/ckp/ckp.dtsi +++ b/app/boards/arm/ckp/ckp.dtsi @@ -34,6 +34,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts index 6683b1b2408..2c77f01c0ba 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts @@ -15,6 +15,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts index 492c79fa108..536e46eab2d 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts @@ -15,6 +15,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts index dacb24c3a24..42839b61646 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_left.dts @@ -15,6 +15,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts index f1baea42656..b47d122fe54 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v2_right.dts @@ -15,6 +15,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/glove80/glove80.dtsi b/app/boards/arm/glove80/glove80.dtsi index 0078fe627fa..4803488b078 100644 --- a/app/boards/arm/glove80/glove80.dtsi +++ b/app/boards/arm/glove80/glove80.dtsi @@ -34,6 +34,8 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; debounce-press-ms = <4>; debounce-release-ms = <20>; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index 7397cffaba3..d1b9f9927cc 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -42,6 +42,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index a04f42e1ffb..a2eb89ea207 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -37,6 +37,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/a_dux/a_dux.dtsi b/app/boards/shields/a_dux/a_dux.dtsi index caeae8dba29..46aa8fda2c1 100644 --- a/app/boards/shields/a_dux/a_dux.dtsi +++ b/app/boards/shields/a_dux/a_dux.dtsi @@ -27,6 +27,8 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; + wakeup-source; + input-gpios = <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, diff --git a/app/boards/shields/bat43/bat43.overlay b/app/boards/shields/bat43/bat43.overlay index 600dccec4ad..89c2428d1e2 100644 --- a/app/boards/shields/bat43/bat43.overlay +++ b/app/boards/shields/bat43/bat43.overlay @@ -28,6 +28,7 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(6,0) RC(6,1) RC(6,2) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/bfo9000/bfo9000.dtsi b/app/boards/shields/bfo9000/bfo9000.dtsi index ea9283ad03a..1108067196e 100644 --- a/app/boards/shields/bfo9000/bfo9000.dtsi +++ b/app/boards/shields/bfo9000/bfo9000.dtsi @@ -28,6 +28,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/boardsource3x4/boardsource3x4.overlay b/app/boards/shields/boardsource3x4/boardsource3x4.overlay index 389f5b7ab7c..0d63214dde4 100644 --- a/app/boards/shields/boardsource3x4/boardsource3x4.overlay +++ b/app/boards/shields/boardsource3x4/boardsource3x4.overlay @@ -13,6 +13,8 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/boardsource5x12/boardsource5x12.overlay b/app/boards/shields/boardsource5x12/boardsource5x12.overlay index 9a721d0c4aa..15ae7b68f25 100644 --- a/app/boards/shields/boardsource5x12/boardsource5x12.overlay +++ b/app/boards/shields/boardsource5x12/boardsource5x12.overlay @@ -13,6 +13,8 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/chalice/chalice.overlay b/app/boards/shields/chalice/chalice.overlay index 92dfe356101..8631d73572d 100644 --- a/app/boards/shields/chalice/chalice.overlay +++ b/app/boards/shields/chalice/chalice.overlay @@ -44,6 +44,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/clog/clog.dtsi b/app/boards/shields/clog/clog.dtsi index feea830c6ab..883aaa29bb3 100644 --- a/app/boards/shields/clog/clog.dtsi +++ b/app/boards/shields/clog/clog.dtsi @@ -26,6 +26,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; + wakeup-source; input-gpios = <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/contra/contra.overlay b/app/boards/shields/contra/contra.overlay index 0ac042d6357..45cc3088f23 100644 --- a/app/boards/shields/contra/contra.overlay +++ b/app/boards/shields/contra/contra.overlay @@ -11,6 +11,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index f6d41e3353b..e1edcce81e4 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -47,6 +47,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/cradio/cradio.dtsi b/app/boards/shields/cradio/cradio.dtsi index 4f8a09d715c..b510c636f64 100644 --- a/app/boards/shields/cradio/cradio.dtsi +++ b/app/boards/shields/cradio/cradio.dtsi @@ -27,6 +27,8 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; + wakeup-source; + input-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/crbn/crbn.overlay b/app/boards/shields/crbn/crbn.overlay index af5910d6993..c6a2b87c040 100644 --- a/app/boards/shields/crbn/crbn.overlay +++ b/app/boards/shields/crbn/crbn.overlay @@ -13,6 +13,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/eek/eek.overlay b/app/boards/shields/eek/eek.overlay index e9e734ac8a9..28aab7efb8c 100644 --- a/app/boards/shields/eek/eek.overlay +++ b/app/boards/shields/eek/eek.overlay @@ -26,6 +26,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/elephant42/elephant42.dtsi b/app/boards/shields/elephant42/elephant42.dtsi index 22a72708686..d72aa9a8761 100644 --- a/app/boards/shields/elephant42/elephant42.dtsi +++ b/app/boards/shields/elephant42/elephant42.dtsi @@ -26,6 +26,7 @@ RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/ergodash/ergodash.dtsi b/app/boards/shields/ergodash/ergodash.dtsi index 2e41ca3081d..b6ef7fc41c2 100644 --- a/app/boards/shields/ergodash/ergodash.dtsi +++ b/app/boards/shields/ergodash/ergodash.dtsi @@ -35,6 +35,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,13) RC(4,12 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; diff --git a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi index 3144f986f61..1274e3dd958 100644 --- a/app/boards/shields/eternal_keypad/eternal_keypad.dtsi +++ b/app/boards/shields/eternal_keypad/eternal_keypad.dtsi @@ -14,6 +14,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; diff --git a/app/boards/shields/fourier/fourier.dtsi b/app/boards/shields/fourier/fourier.dtsi index 3b309b8dcda..f486e0a44e5 100644 --- a/app/boards/shields/fourier/fourier.dtsi +++ b/app/boards/shields/fourier/fourier.dtsi @@ -30,6 +30,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) /**/ RC(3,6) RC(3,9 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/helix/helix.dtsi b/app/boards/shields/helix/helix.dtsi index df80f4caec7..8566ffc6bf2 100644 --- a/app/boards/shields/helix/helix.dtsi +++ b/app/boards/shields/helix/helix.dtsi @@ -32,6 +32,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/hummingbird/hummingbird.overlay b/app/boards/shields/hummingbird/hummingbird.overlay index 871728a28e5..2474d089dff 100644 --- a/app/boards/shields/hummingbird/hummingbird.overlay +++ b/app/boards/shields/hummingbird/hummingbird.overlay @@ -29,6 +29,8 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "row2col"; col-gpios diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi index c979214c316..8ddbd359ebb 100644 --- a/app/boards/shields/iris/iris.dtsi +++ b/app/boards/shields/iris/iris.dtsi @@ -32,6 +32,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/jian/jian.dtsi b/app/boards/shields/jian/jian.dtsi index c5ae1b9e444..439bf93c05c 100644 --- a/app/boards/shields/jian/jian.dtsi +++ b/app/boards/shields/jian/jian.dtsi @@ -62,6 +62,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/jiran/jiran.dtsi b/app/boards/shields/jiran/jiran.dtsi index b6633b65586..517cbe5f7c5 100644 --- a/app/boards/shields/jiran/jiran.dtsi +++ b/app/boards/shields/jiran/jiran.dtsi @@ -67,6 +67,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/jorne/jorne.dtsi b/app/boards/shields/jorne/jorne.dtsi index a2d804b9abc..e7b81e5f113 100644 --- a/app/boards/shields/jorne/jorne.dtsi +++ b/app/boards/shields/jorne/jorne.dtsi @@ -63,6 +63,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/knob_goblin/knob_goblin.overlay b/app/boards/shields/knob_goblin/knob_goblin.overlay index 49306ddf0ab..c42482dbf49 100644 --- a/app/boards/shields/knob_goblin/knob_goblin.overlay +++ b/app/boards/shields/knob_goblin/knob_goblin.overlay @@ -14,6 +14,8 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/kyria/kyria_common.dtsi b/app/boards/shields/kyria/kyria_common.dtsi index 23058f376ad..f662fa1c402 100644 --- a/app/boards/shields/kyria/kyria_common.dtsi +++ b/app/boards/shields/kyria/kyria_common.dtsi @@ -15,6 +15,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; }; diff --git a/app/boards/shields/leeloo/leeloo_common.dtsi b/app/boards/shields/leeloo/leeloo_common.dtsi index df4f228e9d2..8ae5b0648e0 100644 --- a/app/boards/shields/leeloo/leeloo_common.dtsi +++ b/app/boards/shields/leeloo/leeloo_common.dtsi @@ -32,6 +32,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; diff --git a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi index bc314205c28..f23396533fa 100644 --- a/app/boards/shields/leeloo_micro/leeloo_micro.dtsi +++ b/app/boards/shields/leeloo_micro/leeloo_micro.dtsi @@ -31,6 +31,7 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,5) RC(2,5) RC(2,6) RC(2,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 1a326d62e18..c82b197cc51 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -33,6 +33,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/lotus58/lotus58.dtsi b/app/boards/shields/lotus58/lotus58.dtsi index afa311d9a6a..e4595930cd0 100644 --- a/app/boards/shields/lotus58/lotus58.dtsi +++ b/app/boards/shields/lotus58/lotus58.dtsi @@ -33,6 +33,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7 kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/m60/m60.overlay b/app/boards/shields/m60/m60.overlay index 22eed44f35a..c479233cd52 100644 --- a/app/boards/shields/m60/m60.overlay +++ b/app/boards/shields/m60/m60.overlay @@ -14,6 +14,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/microdox/microdox.dtsi b/app/boards/shields/microdox/microdox.dtsi index 4869cfeabbd..65c670f01ef 100644 --- a/app/boards/shields/microdox/microdox.dtsi +++ b/app/boards/shields/microdox/microdox.dtsi @@ -9,6 +9,7 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> diff --git a/app/boards/shields/microdox/microdox_v2.dtsi b/app/boards/shields/microdox/microdox_v2.dtsi index 6eb7efa58f4..95aaf79dbeb 100644 --- a/app/boards/shields/microdox/microdox_v2.dtsi +++ b/app/boards/shields/microdox/microdox_v2.dtsi @@ -9,6 +9,7 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; }; }; diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay index a82349684ff..e2c9117f93d 100644 --- a/app/boards/shields/murphpad/murphpad.overlay +++ b/app/boards/shields/murphpad/murphpad.overlay @@ -14,6 +14,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/naked60/naked60.overlay b/app/boards/shields/naked60/naked60.overlay index 843c867f109..4e36bc762f9 100644 --- a/app/boards/shields/naked60/naked60.overlay +++ b/app/boards/shields/naked60/naked60.overlay @@ -11,6 +11,7 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/osprette/osprette.overlay b/app/boards/shields/osprette/osprette.overlay index af2e5625479..ed893f4737e 100644 --- a/app/boards/shields/osprette/osprette.overlay +++ b/app/boards/shields/osprette/osprette.overlay @@ -26,6 +26,7 @@ RC(0,0) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "row2col"; col-gpios diff --git a/app/boards/shields/pancake/pancake.overlay b/app/boards/shields/pancake/pancake.overlay index 0ceb2d5c6f7..0538bf71ed9 100644 --- a/app/boards/shields/pancake/pancake.overlay +++ b/app/boards/shields/pancake/pancake.overlay @@ -11,6 +11,7 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay index d0ec5b3a0eb..5c76b98f873 100644 --- a/app/boards/shields/qaz/qaz.overlay +++ b/app/boards/shields/qaz/qaz.overlay @@ -27,6 +27,7 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/quefrency/quefrency_left.overlay b/app/boards/shields/quefrency/quefrency_left.overlay index cf7958410c6..a40d47c1bb0 100644 --- a/app/boards/shields/quefrency/quefrency_left.overlay +++ b/app/boards/shields/quefrency/quefrency_left.overlay @@ -12,6 +12,8 @@ */ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; diff --git a/app/boards/shields/quefrency/quefrency_right.overlay b/app/boards/shields/quefrency/quefrency_right.overlay index 446a614a229..ebb9f8447ac 100644 --- a/app/boards/shields/quefrency/quefrency_right.overlay +++ b/app/boards/shields/quefrency/quefrency_right.overlay @@ -17,6 +17,8 @@ */ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; diff --git a/app/boards/shields/redox/redox.dtsi b/app/boards/shields/redox/redox.dtsi index 505a5c69b0a..098be434481 100644 --- a/app/boards/shields/redox/redox.dtsi +++ b/app/boards/shields/redox/redox.dtsi @@ -32,6 +32,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/reviung34/reviung34.overlay b/app/boards/shields/reviung34/reviung34.overlay index 6ec9813df3b..0f58b99da3a 100644 --- a/app/boards/shields/reviung34/reviung34.overlay +++ b/app/boards/shields/reviung34/reviung34.overlay @@ -38,6 +38,8 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(3,7) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/reviung41/reviung41.overlay b/app/boards/shields/reviung41/reviung41.overlay index 079fd36b96e..f8503fc35a8 100644 --- a/app/boards/shields/reviung41/reviung41.overlay +++ b/app/boards/shields/reviung41/reviung41.overlay @@ -27,6 +27,8 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/reviung5/reviung5.overlay b/app/boards/shields/reviung5/reviung5.overlay index 0382145c69a..0abd3a06ecc 100644 --- a/app/boards/shields/reviung5/reviung5.overlay +++ b/app/boards/shields/reviung5/reviung5.overlay @@ -22,6 +22,7 @@ kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/reviung53/reviung53.overlay b/app/boards/shields/reviung53/reviung53.overlay index d6037aecdaf..fa784478bfb 100644 --- a/app/boards/shields/reviung53/reviung53.overlay +++ b/app/boards/shields/reviung53/reviung53.overlay @@ -28,6 +28,8 @@ RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) RC(6,5) kscan0: kscan_0 { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; col-gpios diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index 3d99e51bfe9..8c11a8ac531 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -13,6 +13,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/romac_plus/romac_plus.overlay b/app/boards/shields/romac_plus/romac_plus.overlay index 229b4a2cfe8..39e123c0c21 100644 --- a/app/boards/shields/romac_plus/romac_plus.overlay +++ b/app/boards/shields/romac_plus/romac_plus.overlay @@ -13,6 +13,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index f88339d7951..ef89e4a5922 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -33,6 +33,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay index df930cd2547..ec40a0165d3 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_left.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay index 3823cdfb76e..7341f072be5 100644 --- a/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay +++ b/app/boards/shields/splitkb_aurora_corne/splitkb_aurora_corne_right.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay index 59d825530ef..61b663e605d 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_left.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay index 95cea9ecc3c..5aee19bdbb1 100644 --- a/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay +++ b/app/boards/shields/splitkb_aurora_helix/splitkb_aurora_helix_right.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay index fc38bbcbc76..8d56890f313 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_left.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay index c9a96491ee9..6b719020a2b 100644 --- a/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay +++ b/app/boards/shields/splitkb_aurora_lily58/splitkb_aurora_lily58_right.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay index 024c9e75b29..2a3f485da55 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_left.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay index 58df0026f06..6eb0d113829 100644 --- a/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay +++ b/app/boards/shields/splitkb_aurora_sofle/splitkb_aurora_sofle_right.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay index 4a1bec902af..9c1fd975769 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_left.overlay @@ -13,6 +13,8 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay index c3655477617..b280b42d31c 100644 --- a/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay +++ b/app/boards/shields/splitkb_aurora_sweep/splitkb_aurora_sweep_right.overlay @@ -13,6 +13,7 @@ kscan: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index d80f8731fbe..1a4f3af1b95 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -34,6 +34,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "row2col"; row-gpios diff --git a/app/boards/shields/tg4x/tg4x.overlay b/app/boards/shields/tg4x/tg4x.overlay index 07a0635d5d4..ac05e8108d7 100644 --- a/app/boards/shields/tg4x/tg4x.overlay +++ b/app/boards/shields/tg4x/tg4x.overlay @@ -9,6 +9,7 @@ / { kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; diff --git a/app/boards/shields/two_percent_milk/two_percent_milk.overlay b/app/boards/shields/two_percent_milk/two_percent_milk.overlay index 474150ef2fa..7647f55151d 100644 --- a/app/boards/shields/two_percent_milk/two_percent_milk.overlay +++ b/app/boards/shields/two_percent_milk/two_percent_milk.overlay @@ -11,6 +11,7 @@ kscan0: kscan { compatible = "zmk,kscan-gpio-direct"; + wakeup-source; input-gpios = <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/waterfowl/waterfowl.dtsi b/app/boards/shields/waterfowl/waterfowl.dtsi index d46910a3f2a..2329ca78f70 100644 --- a/app/boards/shields/waterfowl/waterfowl.dtsi +++ b/app/boards/shields/waterfowl/waterfowl.dtsi @@ -31,6 +31,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios diff --git a/app/boards/shields/zodiark/zodiark.dtsi b/app/boards/shields/zodiark/zodiark.dtsi index 3151f31c990..aa68e20d8cc 100644 --- a/app/boards/shields/zodiark/zodiark.dtsi +++ b/app/boards/shields/zodiark/zodiark.dtsi @@ -33,6 +33,7 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) R kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; diode-direction = "col2row"; row-gpios From 4bef4e98f52c3ea57630a3cd1e0e2d078d67758b Mon Sep 17 00:00:00 2001 From: zhiayang <500236+zhiayang@users.noreply.github.com> Date: Sat, 30 Mar 2024 19:12:37 -0400 Subject: [PATCH 1060/1130] feat(boards): Support board revisions in setup scripts. * Make setup.sh/ps1 prompt for board revision for boards that have revisions --- docs/src/templates/setup.ps1.mustache | 29 ++++++++++++++++++++++ docs/src/templates/setup.sh.mustache | 35 +++++++++++++++++++++++++++ schema/hardware-metadata.schema.json | 15 +++++++++++- 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index 90f9cdcfaec..b8ecc2937f4 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -131,6 +131,19 @@ if ($keyboard_type -eq "shield") { {{/boards}} } + $boards_revisions = [ordered]@{ + {{#boards}} + {{id}} = @({{#revisions}} + "{{.}}"{{/revisions}}); + {{/boards}} + } + + $boards_default_revision=[ordered]@{ + {{#boards}} + {{id}} = "{{{default_revision}}}"; + {{/boards}} + } + Write-Host "$title" Write-Host "" Write-Host "MCU Board Selection:" @@ -145,6 +158,22 @@ if ($keyboard_type -eq "shield") { $shields = $keyboard_siblings $board = $($($boards.keys)[$choice]) $boards = ( $board ) + + if ($($($boards_revisions.values)[$choice]).count -gt 0) { + $valid_revisions = $($($boards_revisions.values)[$choice]) + $revision_choices = @() + $valid_revisions + + for ($i = 0; $i -lt $valid_revisions.count; $i += 1) { + if ($valid_revisions[$i] -eq $($($boards_default_revision.values)[$choice])) { + $revision_choices[$i] += " (default)" + } + } + + $revision_choice = Get-Choice-From-Options -Options $revision_choices -Prompt $prompt + $board = $board + "@" + $valid_revisions[$revision_choice] + $boards = ( $board ) + } + } else { $boards = ( $keyboard_siblings ) $shields = @( ) diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index c711dbc5b1c..dd7a7a2d2f2 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -122,6 +122,9 @@ if [ "$keyboard_shield" == "y" ]; then board_ids=({{#boards}}"{{id}}" {{/boards}}) boards_usb_only=({{#boards}}"{{#usb_only}}y{{/usb_only}}{{^usb_only}}n{{/usb_only}}" {{/boards}}) + boards_revisions=({{#boards}}"{{#revisions}}{{.}} {{/revisions}}" {{/boards}}) + boards_default_revision=({{#boards}}"{{{default_revision}}}" {{/boards}}) + echo "" echo "MCU Board Selection:" PS3="$prompt " @@ -151,6 +154,38 @@ if [ "$keyboard_shield" == "y" ]; then esac done + + if [ -n "${boards_revisions[$board_index]}" ]; then + read -a _valid_revisions <<< "${boards_revisions[$board_index]}" + + _rev_choices=("${_valid_revisions[@]}") + for (( _i=0; _i<${#_valid_revisions}; _i++ )); do + if [ "${boards_default_revision[board_index]}" = "${_valid_revisions[_i]}" ]; then + _rev_choices[_i]+=" (default)" + fi + done + + echo "" + echo "MCU Board Revision:" + select opt in "${_rev_choices[@]}" "Quit"; do + case "$REPLY" in + ''|*[!0-9]*) echo "Invalid option. Try another one."; continue;; + + $(( ${#_valid_revisions[@]}+1 )) ) echo "Goodbye!"; exit 1;; + *) + if [ $REPLY -gt $(( ${#_valid_revisions[@]}+1 )) ] || [ $REPLY -lt 0 ]; then + echo "Invalid option. Try another one." + continue + fi + + _rev_index=$(( $REPLY-1 )) + board="${board_ids[$board_index]}@${_valid_revisions[_rev_index]}" + boards=( "${board}" ) + break + ;; + esac + done + fi else board=${keyboard} boards=$keyboard_siblings diff --git a/schema/hardware-metadata.schema.json b/schema/hardware-metadata.schema.json index 4c2bdf3b730..9710c792392 100644 --- a/schema/hardware-metadata.schema.json +++ b/schema/hardware-metadata.schema.json @@ -16,7 +16,11 @@ "$defs": { "id": { "type": "string", - "pattern": "^[a-z0-9_]+$" + "pattern": "^[a-z0-9_]+(@([A-Z]|[0-9]+|([0-9]+(\\.[0-9]+){1,2})))?$" + }, + "revision": { + "type": "string", + "pattern": "[A-Z]|[0-9]+|([0-9]+(\\.[0-9]+){1,2})" }, "keyboard_siblings": { "type": "array", @@ -202,6 +206,15 @@ }, "exposes": { "$ref": "#/$defs/interconnects" + }, + "revisions": { + "type": "array", + "items": { + "$ref": "#/$defs/revision" + } + }, + "default_revision": { + "$ref": "#/$defs/revision" } } }, From e65a1227d8cddc2edc2e5da2276f992d8a91ed49 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 29 Mar 2024 14:41:18 -0700 Subject: [PATCH 1061/1130] fix(docs): Correct property types for behavior bindings --- docs/docs/config/behaviors.md | 52 +++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 1a5b899ab97..06e87850e38 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -57,18 +57,18 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml](htt Applies to: `compatible = "zmk,behavior-hold-tap"` -| Property | Type | Description | Default | -| ----------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ------------------ | -| `#binding-cells` | int | Must be `<2>` | | -| `bindings` | phandle array | A list of two behaviors (without parameters): one for hold and one for tap | | -| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | -| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | -| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | -| `require-prior-idle-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `require-prior-idle-ms` of the hold-tap. | -1 (disabled) | -| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | -| `hold-while-undecided` | bool | Triggers the hold behavior immediately on press and releases before a tap | false | -| `hold-while-undecided-linger` | bool | Continues to hold the hold behavior until after the tap is released | false | -| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | +| Property | Type | Description | Default | +| ----------------------------- | -------- | -------------------------------------------------------------------------------------------------------------- | ------------------ | +| `#binding-cells` | int | Must be `<2>` | | +| `bindings` | phandles | A list of two behaviors (without parameters): one for hold and one for tap | | +| `flavor` | string | Adjusts how the behavior chooses between hold and tap | `"hold-preferred"` | +| `tapping-term-ms` | int | How long in milliseconds the key must be held to trigger a hold | | +| `quick-tap-ms` | int | Tap twice within this period (in milliseconds) to trigger a tap, even when held | -1 (disabled) | +| `require-prior-idle-ms` | int | Triggers a tap immediately if any non-modifier key was pressed within `require-prior-idle-ms` of the hold-tap. | -1 (disabled) | +| `retro-tap` | bool | Triggers the tap behavior on release if no other key was pressed during a hold | false | +| `hold-while-undecided` | bool | Triggers the hold behavior immediately on press and releases before a tap | false | +| `hold-while-undecided-linger` | bool | Continues to hold the hold behavior until after the tap is released | false | +| `hold-trigger-key-positions` | array | If set, pressing the hold-tap and then any key position _not_ in the list triggers a tap. | | This behavior forwards the first parameter it receives to the parameter of the first behavior specified in `bindings`, and second parameter to the parameter of the second behavior. @@ -203,12 +203,12 @@ Definition files: - [zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sensor-rotate.yaml) - [zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sensor-rotate-var.yaml) -| Property | Type | Description | Default | -| ----------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `compatible` | string | Sensor rotation type, **must be _one_ of**:
    • `"zmk,behavior-sensor-rotate"`
    • `"zmk,behavior-sensor-rotate-var"`
    | | -| `#sensor-binding-cells` | int | Must be
    • `<0>` if `compatible = "zmk,behavior-sensor-rotate"`
    • `<2>` if `compatible = "zmk,behavior-sensor-rotate-var"`
    | | -| `bindings` | phandle array | A list of two behaviors to trigger for each rotation direction, must include parameters for `"zmk,behavior-sensor-rotate"` and exclude them for `"zmk,behavior-sensor-rotate-var"` | | -| `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | +| Property | Type | Description | Default | +| ----------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `compatible` | string | Sensor rotation type, **must be _one_ of**:
    • `"zmk,behavior-sensor-rotate"`
    • `"zmk,behavior-sensor-rotate-var"`
    | | +| `#sensor-binding-cells` | int | Must be
    • `<0>` if `compatible = "zmk,behavior-sensor-rotate"`
    • `<2>` if `compatible = "zmk,behavior-sensor-rotate-var"`
    | | +| `bindings` | phandles for `"zmk,behavior-sensor-rotate"`, phandle array for `"zmk,behavior-sensor-rotate-var"` | A list of two behaviors to trigger for each rotation direction, must include parameters for `"zmk,behavior-sensor-rotate"` and exclude them for `"zmk,behavior-sensor-rotate-var"` | | +| `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | With `compatible = "zmk,behavior-sensor-rotate-var"`, this behavior forwards the first parameter it receives to the parameter of the first behavior specified in `bindings`, and second parameter to the parameter of the second behavior. @@ -224,14 +224,14 @@ Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml](h Applies to: `compatible = "zmk,behavior-sticky-key"` -| Property | Type | Description | Default | -| ------------------ | ------------- | ------------------------------------------------------------------------ | ------- | -| `#binding-cells` | int | Must be `<1>` | | -| `bindings` | phandle array | A behavior (without parameters) to trigger | | -| `release-after-ms` | int | Releases the key after this many milliseconds if no other key is pressed | 1000 | -| `quick-release` | bool | Release the sticky key on the next key press instead of release | false | -| `lazy` | bool | Wait until the next key press to activate the sticky key behavior | false | -| `ignore-modifiers` | bool | If enabled, pressing a modifier key does not cancel the sticky key | true | +| Property | Type | Description | Default | +| ------------------ | -------- | ------------------------------------------------------------------------ | ------- | +| `#binding-cells` | int | Must be `<1>` | | +| `bindings` | phandles | A behavior (without parameters) to trigger | | +| `release-after-ms` | int | Releases the key after this many milliseconds if no other key is pressed | 1000 | +| `quick-release` | bool | Release the sticky key on the next key press instead of release | false | +| `lazy` | bool | Wait until the next key press to activate the sticky key behavior | false | +| `ignore-modifiers` | bool | If enabled, pressing a modifier key does not cancel the sticky key | true | This behavior forwards the one parameter it receives to the parameter of the behavior specified in `bindings`. From eb5a6fcfe19b32df13488d2ec751f90cb9fa3362 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 29 Mar 2024 14:44:00 -0700 Subject: [PATCH 1062/1130] refactor(docs): Split DT props table for sensor rotate variants --- docs/docs/config/behaviors.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 06e87850e38..28abdf2722a 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -203,12 +203,21 @@ Definition files: - [zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sensor-rotate.yaml) - [zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-var.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sensor-rotate-var.yaml) -| Property | Type | Description | Default | -| ----------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `compatible` | string | Sensor rotation type, **must be _one_ of**:
    • `"zmk,behavior-sensor-rotate"`
    • `"zmk,behavior-sensor-rotate-var"`
    | | -| `#sensor-binding-cells` | int | Must be
    • `<0>` if `compatible = "zmk,behavior-sensor-rotate"`
    • `<2>` if `compatible = "zmk,behavior-sensor-rotate-var"`
    | | -| `bindings` | phandles for `"zmk,behavior-sensor-rotate"`, phandle array for `"zmk,behavior-sensor-rotate-var"` | A list of two behaviors to trigger for each rotation direction, must include parameters for `"zmk,behavior-sensor-rotate"` and exclude them for `"zmk,behavior-sensor-rotate-var"` | | -| `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | +Applies to: `compatible = "zmk,behavior-sensor-rotate"` + +| Property | Type | Description | Default | +| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------ | ------- | +| `#sensor-binding-cells` | int | Must be `<0>` | | +| `bindings` | phandles | A list of two behaviors to trigger for each rotation direction, must _include_ any behavior parameters | | +| `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | + +Applies to: `compatible = "zmk,behavior-sensor-rotate-var"` + +| Property | Type | Description | Default | +| ----------------------- | ------------- | ------------------------------------------------------------------------------------------------------ | ------- | +| `#sensor-binding-cells` | int | Must be `<2>` | | +| `bindings` | phandle array | A list of two behaviors to trigger for each rotation direction, must _exclude_ any behavior parameters | | +| `tap-ms` | int | The tap duration (between press and release events) in milliseconds for behaviors in `bindings` | 5 | With `compatible = "zmk,behavior-sensor-rotate-var"`, this behavior forwards the first parameter it receives to the parameter of the first behavior specified in `bindings`, and second parameter to the parameter of the second behavior. From e7d6519534231525e6173635061ab8e8bda5a997 Mon Sep 17 00:00:00 2001 From: Tobias Arndt Date: Sat, 30 Mar 2024 18:24:11 -0700 Subject: [PATCH 1063/1130] fix(docs): Fix and note GPIO flags for charlieplex config --- docs/docs/config/kscan.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 3aa1b37875c..e6e8bb620be 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -187,6 +187,8 @@ Define the transform with a [matrix transform](#matrix-transform). The row is al For example, in `RC(5,0)` power flows from the 6th pin in `gpios` to the 1st pin in `gpios`. Exclude all positions where the row and column are the same as these pairs will never be triggered, since no pin can be both input and output at the same time. +The [GPIO flags](https://docs.zephyrproject.org/3.5.0/hardware/peripherals/gpio.html#api-reference) for the elements in `gpios` should be `GPIO_ACTIVE_HIGH`, and interrupt pins set in `interrupt-gpios` should have the flags `(GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)`. + ## Composite Driver Keyboard scan driver which combines multiple other keyboard scan drivers. @@ -460,11 +462,11 @@ Note that the entire addressable space does not need to be mapped. interrupt-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) >; gpios - = <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > - , <&pro_micro 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > - , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > - , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > - , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) > + = <&pro_micro 16 GPIO_ACTIVE_HIGH> + , <&pro_micro 17 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> ; // addressable space is 5x5, (minus paired values) }; From fe509c466f818471c677b069094d1e84e33ccf2e Mon Sep 17 00:00:00 2001 From: Tobias Arndt Date: Sat, 30 Mar 2024 18:24:51 -0700 Subject: [PATCH 1064/1130] fix(kscan): Enable charlieplex interrupts for single compatible device Fixes #2201 --- app/module/drivers/kscan/kscan_gpio_charlieplex.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/module/drivers/kscan/kscan_gpio_charlieplex.c b/app/module/drivers/kscan/kscan_gpio_charlieplex.c index a4867aa3207..3ecbcd6a0e1 100644 --- a/app/module/drivers/kscan/kscan_gpio_charlieplex.c +++ b/app/module/drivers/kscan/kscan_gpio_charlieplex.c @@ -47,14 +47,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define USES_POLLING DT_INST_FOREACH_STATUS_OKAY(WITHOUT_INTR) > 0 #define USES_INTERRUPT DT_INST_FOREACH_STATUS_OKAY(WITH_INTR) > 0 -#if USES_POLLING && USES_INTERRUPT -#define USES_POLL_AND_INTR 1 -#else -#define USES_POLL_AND_INTR 0 -#endif - #define COND_ANY_POLLING(code) COND_CODE_1(USES_POLLING, code, ()) -#define COND_POLL_AND_INTR(code) COND_CODE_1(USES_POLL_AND_INTR, code, ()) #define COND_THIS_INTERRUPT(n, code) COND_CODE_1(INST_INTR_DEFINED(n), code, ()) #define KSCAN_INTR_CFG_INIT(inst_idx) GPIO_DT_SPEC_GET(DT_DRV_INST(inst_idx), interrupt_gpios) @@ -410,7 +403,7 @@ static const struct kscan_driver_api kscan_charlieplex_api = { }, \ .debounce_scan_period_ms = DT_INST_PROP(n, debounce_scan_period_ms), \ COND_ANY_POLLING((.poll_period_ms = DT_INST_PROP(n, poll_period_ms), )) \ - COND_POLL_AND_INTR((.use_interrupt = INST_INTR_DEFINED(n), )) \ + COND_THIS_INTERRUPT(n, (.use_interrupt = INST_INTR_DEFINED(n), )) \ COND_THIS_INTERRUPT(n, (.interrupt = KSCAN_INTR_CFG_INIT(n), ))}; \ \ DEVICE_DT_INST_DEFINE(n, &kscan_charlieplex_init, NULL, &kscan_charlieplex_data_##n, \ From 7d5aa0c0bf7283ce484f467338c7e04ff1f7cf25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Thu, 4 Apr 2024 08:04:28 +0800 Subject: [PATCH 1065/1130] feat(docs): Update section for devicetree_generated error --- docs/docs/troubleshooting.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 2e9ab4dcb80..09efdecf770 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -48,7 +48,7 @@ If you are reviewing these errors in the GitHub Actions tab, they can be found i If you get an error stating `Keymap node not found, check a keymap is available and is has compatible = "zmk,keymap" set` this is an indication that the build process cannot find the keymap. Double check that the `.keymap` file is present and has been discovered by the build process. This can be checked by looking for a line in the build log stating `-- Using keymap file: /path/to/keymap/file/.keymap`. Inside the keymap file ensure the keymap node has `compatible = zmk,keymap` and it's not misspelled. For more information see the [Keymap](features/keymaps.mdx) and [Config](config/index.md) documentation. -#### devicetree error +#### Devicetree errors A `devicetree error` followed by a reference to the line number on `.keymap` refers to an issue at the exact line position in that file. For example, below error message indicates a missing `;` at line 109 of the `cradio.keymap` file: @@ -64,12 +64,10 @@ devicetree error: Date: Fri, 23 Feb 2024 16:59:48 -0500 Subject: [PATCH 1066/1130] refactor(underglow): fix uninitialized variable warning --- app/src/rgb_underglow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index a7a9b4f018f..a055a4d7d9f 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -82,7 +82,7 @@ static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) { } static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) { - float r, g, b; + float r = 0, g = 0, b = 0; uint8_t i = hsb.h / 60; float v = hsb.b / ((float)BRT_MAX); From 7a51a46b9fa6c97c6060b086b73d96d0c6d97b35 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 27 Feb 2024 11:41:46 -0800 Subject: [PATCH 1067/1130] feat(docs): Add pointer to shields folder in new shield docs --- docs/docs/development/new-shield.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 867ccbc8cee..ecf798309e5 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -67,6 +67,10 @@ mkdir boards/shields/ ## Base Kconfig Files +:::tip[Example shields] +You can check out the [`shields` folder](https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields) in the ZMK repo that houses [the in-tree supported shields](../hardware.mdx) in order to copy and modify as a starting point. +::: + There are two required Kconfig files that need to be created for your new keyboard shield to get it picked up for ZMK, `Kconfig.shield` and `Kconfig.defconfig`. From dfc6dc84b8bc06504a9542c1464c8e80f357be09 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 27 Feb 2024 11:50:54 -0800 Subject: [PATCH 1068/1130] fix(docs): Make clear the matrix transform example is incomplete --- docs/docs/development/new-shield.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index ecf798309e5..de65f0ac765 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -348,6 +348,8 @@ Here is an example for the [nice60](https://github.com/Nicell/nice60), which use zmk,matrix-transform = &default_transform; }; + /* define kscan node with label `kscan0`... */ + default_transform: keymap_transform_0 { compatible = "zmk,matrix-transform"; columns = <8>; @@ -365,6 +367,9 @@ RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(5,3) RC(6,4) RC(5,4) RC(6,5) RC(5,5) RC RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,5) RC(7,6) RC(6,7) RC(7,7) >; }; + + /* potentially other overlay nodes... */ +}; ``` Some important things to note: From a9021deef6abe9c168f7cd111137f79ef8fd9655 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 9 Apr 2024 10:25:33 -0700 Subject: [PATCH 1069/1130] fix(docs): Add wakeup-source to split new shield example --- docs/docs/development/new-shield.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index de65f0ac765..a542fc84995 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -233,8 +233,9 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) kscan0: kscan { compatible = "zmk,kscan-gpio-matrix"; - diode-direction = "col2row"; + wakeup-source; + row-gpios = <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A from the schematic file , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B from the schematic file From e22bc7620cef763d9ad80e9b98182273de9973db Mon Sep 17 00:00:00 2001 From: Keeley Hoek Date: Sun, 7 Apr 2024 07:05:51 -0400 Subject: [PATCH 1070/1130] fix(hid): Correct off-by-one buffer overflow with NKRO --- app/include/zmk/hid.h | 4 +++- app/src/hid.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index d1d3b7d47db..41f559b5189 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -6,6 +6,8 @@ #pragma once +#include + #include #include @@ -200,7 +202,7 @@ struct zmk_hid_keyboard_report_body { zmk_mod_flags_t modifiers; uint8_t _reserved; #if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO) - uint8_t keys[(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1) / 8]; + uint8_t keys[DIV_ROUND_UP(ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1, 8)]; #elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) uint8_t keys[CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE]; #endif diff --git a/app/src/hid.c b/app/src/hid.c index 8b0c23f37ed..582db6763de 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -126,7 +126,7 @@ zmk_hid_boot_report_t *zmk_hid_get_boot_report(void) { memset(&boot_report.keys, 0, HID_BOOT_KEY_LEN); int ix = 0; uint8_t base_code = 0; - for (int i = 0; i < (ZMK_HID_KEYBOARD_NKRO_MAX_USAGE + 1) / 8; ++i) { + for (int i = 0; i < sizeof(keyboard_report.body.keys); ++i) { if (ix == keys_held) { break; } From 16e92cf6652e4dbe56ba4f18f6ca6cec510b147c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 18 Apr 2024 06:38:46 +0000 Subject: [PATCH 1071/1130] fix(behaviors): Add multiple soft-off instances properly. * Properly pass the node id for the unique soft-off behavior instance when defining it. --- app/src/behaviors/behavior_soft_off.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index 3a4ae42486d..8c6ba4225f7 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -80,7 +80,7 @@ static const struct behavior_driver_api behavior_soft_off_driver_api = { DT_INST_PROP_OR(n, split_peripheral_off_on_press, false), \ }; \ static struct behavior_soft_off_data bso_data_##n = {}; \ - BEHAVIOR_DT_INST_DEFINE(0, behavior_soft_off_init, NULL, &bso_data_##n, &bso_config_##n, \ + BEHAVIOR_DT_INST_DEFINE(n, behavior_soft_off_init, NULL, &bso_data_##n, &bso_config_##n, \ POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &behavior_soft_off_driver_api); From f4a070aacf775c50b6f01a22dc3e898d49abe7b0 Mon Sep 17 00:00:00 2001 From: Sadek Baroudi Date: Sun, 21 Apr 2024 12:37:47 -0700 Subject: [PATCH 1072/1130] fix(boards): nrf boards missing SPI in pinctrl and dtsi, requiring users to manually define in their shield definitions if they wanted to use SPI --- .../bluemicro840/arduino_pro_micro_pins.dtsi | 2 +- .../bluemicro840/bluemicro840_v1-pinctrl.dtsi | 17 +++++++++++++++++ app/boards/arm/bluemicro840/bluemicro840_v1.dts | 7 +++++++ .../arm/mikoto/arduino_pro_micro_pins.dtsi | 2 +- app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi | 17 +++++++++++++++++ app/boards/arm/mikoto/mikoto_520.dts | 7 +++++++ .../arm/nice_nano/arduino_pro_micro_pins.dtsi | 2 +- app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi | 17 +++++++++++++++++ app/boards/arm/nice_nano/nice_nano.dtsi | 7 +++++++ .../arm/nrfmicro/arduino_pro_micro_pins.dtsi | 2 +- .../nrfmicro/arduino_pro_micro_pins_52833.dtsi | 2 +- .../arduino_pro_micro_pins_flipped.dtsi | 2 +- .../arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi | 17 +++++++++++++++++ app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi | 17 +++++++++++++++++ app/boards/arm/nrfmicro/nrfmicro_11.dts | 7 +++++++ app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 7 +++++++ app/boards/arm/nrfmicro/nrfmicro_13.dts | 7 +++++++ app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 7 +++++++ 18 files changed, 140 insertions(+), 6 deletions(-) diff --git a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi index cdb8fcdd3fd..b2026b6f2c0 100644 --- a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -53,5 +53,5 @@ pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; +pro_micro_spi: &spi1 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi index 868d3c27ad7..046c0346f37 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi +++ b/app/boards/arm/bluemicro840/bluemicro840_v1-pinctrl.dtsi @@ -36,4 +36,21 @@ low-power-enable; }; }; + + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index 408cca3be76..aabdf310a28 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -67,6 +67,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; diff --git a/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi b/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi index ed6097ec6b9..b2e2d6a3cf1 100644 --- a/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi @@ -55,5 +55,5 @@ pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; +pro_micro_spi: &spi1 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi b/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi index df43c407eec..8cd1e0afc13 100644 --- a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi +++ b/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi @@ -36,4 +36,21 @@ low-power-enable; }; }; + + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index 05ec72dfcda..a6ca50812f8 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -66,6 +66,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; diff --git a/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi b/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi index f1b569c05db..2c257ef016f 100644 --- a/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi @@ -53,5 +53,5 @@ pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; +pro_micro_spi: &spi1 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi b/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi index 15c48509202..bcabf4ab376 100644 --- a/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi +++ b/app/boards/arm/nice_nano/nice_nano-pinctrl.dtsi @@ -36,4 +36,21 @@ low-power-enable; }; }; + + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index 81f10906b92..41770dd310e 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -50,6 +50,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi index 01e342c0df5..1f88a4eb0e0 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi @@ -55,5 +55,5 @@ pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; +pro_micro_spi: &spi1 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi index 76ece25f786..b16465e6aac 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_52833.dtsi @@ -55,5 +55,5 @@ pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; +pro_micro_spi: &spi1 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi index 923efbbf256..3ab31900b06 100644 --- a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi @@ -53,5 +53,5 @@ pro_micro_d: &pro_micro {}; pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; +pro_micro_spi: &spi1 {}; pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi b/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi index 22bc11d4013..57e868a4871 100644 --- a/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi +++ b/app/boards/arm/nrfmicro/nrfmicro-flipped-pinctrl.dtsi @@ -36,4 +36,21 @@ low-power-enable; }; }; + + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi b/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi index 35a46e5ae52..c4b9f5a7c67 100644 --- a/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi +++ b/app/boards/arm/nrfmicro/nrfmicro-pinctrl.dtsi @@ -36,4 +36,21 @@ low-power-enable; }; }; + + spi1_default: spi1_default { + group1 { + psels = , + , + ; + }; + }; + + spi1_sleep: spi1_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 652df1011a6..04368ab8741 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -54,6 +54,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index 5095d64865d..600935aa0a6 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -54,6 +54,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index 7a6a5d4d952..716e5b181dd 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -66,6 +66,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index ff2e027fcb9..f57c413da8b 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -66,6 +66,13 @@ pinctrl-names = "default", "sleep"; }; +&spi1 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi1_default>; + pinctrl-1 = <&spi1_sleep>; + pinctrl-names = "default", "sleep"; +}; + &uart0 { compatible = "nordic,nrf-uarte"; current-speed = <115200>; From 4d566853af93860fb00d5eaf9e8cc5403d6fcf23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Mart=C3=ADnez?= <58857054+elpekenin@users.noreply.github.com> Date: Thu, 25 Apr 2024 10:55:42 +0200 Subject: [PATCH 1073/1130] fix(rgb): auto-off logic --- app/src/rgb_underglow.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index a055a4d7d9f..9173058f816 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -468,17 +468,31 @@ int zmk_rgb_underglow_change_spd(int direction) { #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE) || \ IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB) -static int rgb_underglow_auto_state(bool *prev_state, bool new_state) { - if (state.on == new_state) { +struct rgb_underglow_sleep_state { + bool is_awake; + bool rgb_state_before_sleeping; +}; + +static int rgb_underglow_auto_state(bool target_wake_state) { + static struct rgb_underglow_sleep_state sleep_state = { + is_awake : true, + rgb_state_before_sleeping : false + }; + + // wake up event while awake, or sleep event while sleeping -> no-op + if (target_wake_state == sleep_state.is_awake) { return 0; } - if (new_state) { - state.on = *prev_state; - *prev_state = false; - return zmk_rgb_underglow_on(); + sleep_state.is_awake = target_wake_state; + + if (sleep_state.is_awake) { + if (sleep_state.rgb_state_before_sleeping) { + return zmk_rgb_underglow_on(); + } else { + return zmk_rgb_underglow_off(); + } } else { - state.on = false; - *prev_state = true; + sleep_state.rgb_state_before_sleeping = sleep_state.on; return zmk_rgb_underglow_off(); } } @@ -487,16 +501,13 @@ static int rgb_underglow_event_listener(const zmk_event_t *eh) { #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE) if (as_zmk_activity_state_changed(eh)) { - static bool prev_state = false; - return rgb_underglow_auto_state(&prev_state, - zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE); + return rgb_underglow_auto_state(zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE); } #endif #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB) if (as_zmk_usb_conn_state_changed(eh)) { - static bool prev_state = false; - return rgb_underglow_auto_state(&prev_state, zmk_usb_is_powered()); + return rgb_underglow_auto_state(zmk_usb_is_powered()); } #endif From 0d3a4b7bbb199103d151ee1cadde613101859054 Mon Sep 17 00:00:00 2001 From: Jarryd Tilbrook Date: Thu, 25 Apr 2024 22:26:26 +0800 Subject: [PATCH 1074/1130] fix(underglow): Correctly set underglow state This fixes a bug introduced in #2244 --- app/src/rgb_underglow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 9173058f816..5bf1ef25e8e 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -492,7 +492,7 @@ static int rgb_underglow_auto_state(bool target_wake_state) { return zmk_rgb_underglow_off(); } } else { - sleep_state.rgb_state_before_sleeping = sleep_state.on; + sleep_state.rgb_state_before_sleeping = state.on; return zmk_rgb_underglow_off(); } } From d1ad34761a0a98fd8e36edbf978ebd4938797472 Mon Sep 17 00:00:00 2001 From: German Gutierrez Date: Mon, 29 Apr 2024 18:22:40 +0200 Subject: [PATCH 1075/1130] fix: shortening keymap_soft_off behavior node * Shorten the soft off node in order for it to work across splits. --- app/dts/behaviors/soft_off.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/dts/behaviors/soft_off.dtsi b/app/dts/behaviors/soft_off.dtsi index 63c04b1dd7e..a5c9d255bc1 100644 --- a/app/dts/behaviors/soft_off.dtsi +++ b/app/dts/behaviors/soft_off.dtsi @@ -6,7 +6,7 @@ / { behaviors { - /omit-if-no-ref/ soft_off: keymap_soft_off { + /omit-if-no-ref/ soft_off: z_so_off { compatible = "zmk,behavior-soft-off"; #binding-cells = <0>; split-peripheral-off-on-press; From af908826cd750f666f41fc9bb0b0a148941956c2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 1 May 2024 11:01:32 -0700 Subject: [PATCH 1076/1130] fix: Initialize sideband kscan in APPLICATION. * In order to be sure the rest of the system is fully ready before intializing, because init may result in immediate events being triggered when used with toggle direct kscan inner devices. --- app/src/kscan_sideband_behaviors.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/kscan_sideband_behaviors.c b/app/src/kscan_sideband_behaviors.c index 7a9922afdae..f3992ebc512 100644 --- a/app/src/kscan_sideband_behaviors.c +++ b/app/src/kscan_sideband_behaviors.c @@ -173,7 +173,7 @@ static int ksbb_pm_action(const struct device *dev, enum pm_device_action action struct ksbb_data ksbb_data_##n = {}; \ PM_DEVICE_DT_INST_DEFINE(n, ksbb_pm_action); \ DEVICE_DT_INST_DEFINE(n, ksbb_init, PM_DEVICE_DT_INST_GET(n), &ksbb_data_##n, \ - &ksbb_config_##n, POST_KERNEL, \ + &ksbb_config_##n, APPLICATION, \ CONFIG_ZMK_KSCAN_SIDEBAND_BEHAVIORS_INIT_PRIORITY, &ksbb_api); DT_INST_FOREACH_STATUS_OKAY(KSBB_INST) From 2423136788148158e76976223555bb017277b72a Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Fri, 3 May 2024 08:22:05 +0100 Subject: [PATCH 1077/1130] fix(boards): Fix pulls on ZMK uno toggle switch The devicetree pulls always add on to the extra pulls configured by toggle mode, so these should not have pulls defined in the devicetree. Saved ~200uA avg on another board with a 3t toggle switch --- app/boards/shields/zmk_uno/zmk_uno.dtsi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno.dtsi b/app/boards/shields/zmk_uno/zmk_uno.dtsi index e8ba79d6d09..ba1d3b5da80 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno.dtsi @@ -125,9 +125,9 @@ nice_view_spi: &arduino_spi { toggle-mode; input-gpios - = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + = <&arduino_header 4 GPIO_ACTIVE_LOW> + , <&arduino_header 3 GPIO_ACTIVE_LOW> + , <&arduino_header 2 GPIO_ACTIVE_LOW> ; }; From 4dfc45d4ab38c23cae61dae4699bd0fbef4e33eb Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Fri, 3 May 2024 19:17:09 +0100 Subject: [PATCH 1078/1130] feat(docs): Document example toggle-mode implementation --------- Co-authored-by: Cem Aksoylar --- docs/docs/config/kscan.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index e6e8bb620be..4fb0cf168ad 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -81,10 +81,6 @@ Definition file: [zmk/app/module/dts/bindings/kscan/zmk,kscan-gpio-direct.yaml]( | `toggle-mode` | bool | Use toggle switch mode. | n | | `wakeup-source` | bool | Mark this kscan instance as able to wake the keyboard from deep sleep | n | -By default, a switch will drain current through the internal pull up/down resistor whenever it is pressed. This is not ideal for a toggle switch, where the switch may be left in the "pressed" state for a long time. Enabling `toggle-mode` will make the driver flip between pull up and down as the switch is toggled to optimize for power. - -`toggle-mode` applies to all switches handled by the instance of the driver. To use a toggle switch with other, non-toggle, direct GPIO switches, create two instances of the direct GPIO driver, one with `toggle-mode` and the other without. Then, use a [composite driver](#composite-driver) to combine them. - Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](https://docs.zephyrproject.org/3.5.0/hardware/peripherals/gpio.html#api-reference) for the elements in `input-gpios` should be `(GPIO_ACTIVE_LOW | GPIO_PULL_UP)`: ```dts @@ -98,6 +94,25 @@ Assuming the switches connect each GPIO pin to the ground, the [GPIO flags](http }; ``` +By default, a switch will drain current through the internal pull up/down resistor whenever it is pressed. This is not ideal for a toggle switch, where the switch may be left in the "pressed" state for a long time. Enabling `toggle-mode` will make the driver enable and disable the internal pull up/down resistor as needed when the switch is toggled to minimise power draw. For `toggle-mode` to work correctly each pole of the switch needs a dedicated GPIO pin. + +`toggle-mode` applies to all switches handled by the instance of the driver. To use a toggle switch with other, non-toggle, direct GPIO switches, create two instances of the direct GPIO driver, one with `toggle-mode` and the other without. Then, use a [composite driver](#composite-driver) to combine them. The state of the switch is read on power on, so if the switch is moved whilst the board is off this will get correctly interpreted by the driver. + +When using `toggle-mode` the pull resistors get automatically set by the driver and should not be set in the devicetree via GPIO flags. Assuming the common pole of the switch is connected to ground with an SP3T switch: + +```dts + kscan_sp3t_toggle: kscan_sp3t_toggle { + compatible = "zmk,kscan-gpio-direct"; + toggle-mode; + + input-gpios + = <&pro_micro 4 GPIO_ACTIVE_LOW> + , <&pro_micro 3 GPIO_ACTIVE_LOW> + , <&pro_micro 2 GPIO_ACTIVE_LOW> + ; + }; +``` + ## Matrix Driver Keyboard scan driver where keys are arranged on a matrix with one GPIO per row and column. From 7d1f84e3eb889da9093841a2cd8d813eca15ded8 Mon Sep 17 00:00:00 2001 From: Horu <73709188+HigherOrderLogic@users.noreply.github.com> Date: Tue, 14 May 2024 03:47:33 +0700 Subject: [PATCH 1079/1130] chore: fix typos in various places --- app/Kconfig | 4 ++-- .../arm/corneish_zen/corneish_zen_v1_left.dts | 2 +- .../arm/corneish_zen/corneish_zen_v1_right.dts | 2 +- .../interconnects/seeed_xiao/seeed_xiao.zmk.yml | 2 +- app/dts/common/arduino_uno_pro_micro_map.dtsi | 2 +- app/include/zmk/display.h | 6 +++--- app/src/behaviors/behavior_hold_tap.c | 2 +- app/src/combo.c | 2 +- app/src/split/Kconfig | 2 +- app/src/split/bluetooth/central.c | 2 +- .../native_posix_64.keymap | 2 +- docs/blog/2024-01-05-zmk-tools.md | 2 +- docs/docs/config/battery.md | 2 +- docs/docs/config/bluetooth.md | 14 +++++++------- docs/docs/config/system.md | 2 +- docs/src/templates/setup.ps1.mustache | 2 +- docs/src/templates/setup.sh.mustache | 2 +- 17 files changed, 26 insertions(+), 26 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 8f2fe837317..5aedd9d9030 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -157,7 +157,7 @@ config ZMK_BLE_EXPERIMENTAL_CONN bool "Experimental BLE connection changes" help Enables a combination of settings that are planned to be default in future versions of ZMK - to improve connection stability. This includes changes to timing on BLE pairing initation, + to improve connection stability. This includes changes to timing on BLE pairing initiation, restores use of the updated/new LLCP implementation, and disables 2M PHY support. config ZMK_BLE_EXPERIMENTAL_SEC @@ -257,7 +257,7 @@ menu "Display/LED Options" rsource "src/display/Kconfig" menuconfig ZMK_RGB_UNDERGLOW - bool "RGB Adressable LED Underglow" + bool "RGB Addressable LED Underglow" select LED_STRIP select ZMK_LOW_PRIORITY_WORK_QUEUE diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts index 2c77f01c0ba..4230147ecd9 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_left.dts @@ -88,7 +88,7 @@ fuelgauge: bq274xx@55 { compatible = "ti,bq274xx"; reg = <0x55>; - design-voltage = <3700>; //Battery Design Volatge in mV + design-voltage = <3700>; //Battery Design Voltage in mV design-capacity = <180>; //Battery Design Capacity in mAh taper-current = <2>; //Battery Taper current in mAh terminate-voltage = <2750>; //Battery Terminate Voltage in mV diff --git a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts index 536e46eab2d..820d316378b 100644 --- a/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts +++ b/app/boards/arm/corneish_zen/corneish_zen_v1_right.dts @@ -96,7 +96,7 @@ fuelgauge: bq274xx@55 { compatible = "ti,bq274xx"; reg = <0x55>; - design-voltage = <3700>; //Battery Design Volatge in mV + design-voltage = <3700>; //Battery Design Voltage in mV design-capacity = <180>; //Battery Design Capacity in mAh taper-current = <2>; //Battery Taper current in mAh 2.1 terminate-voltage = <2750>; //Battery Terminate Voltage in mV diff --git a/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml b/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml index 48080c7f2f9..e9b20507226 100644 --- a/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml +++ b/app/boards/interconnects/seeed_xiao/seeed_xiao.zmk.yml @@ -5,7 +5,7 @@ type: interconnect url: https://wiki.seeedstudio.com/Seeeduino-XIAO/ manufacturer: Seeed description: | - The Seeed(uino) XIAO is a popular smaller format micro-controller, that has gained popularity as an alterative + The Seeed(uino) XIAO is a popular smaller format micro-controller, that has gained popularity as an alternative to the SparkFun Pro Micro. Since its creation, several pin compatible controllers, such as the Seeeduino XIAO BLE, Adafruit QT Py and Adafruit QT Py RP2040, have become available. node_labels: diff --git a/app/dts/common/arduino_uno_pro_micro_map.dtsi b/app/dts/common/arduino_uno_pro_micro_map.dtsi index a6b8d792d1a..885661d4705 100644 --- a/app/dts/common/arduino_uno_pro_micro_map.dtsi +++ b/app/dts/common/arduino_uno_pro_micro_map.dtsi @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ -/* This provies a mapping from Arduino Uno to Arduino Pro Micro pins for development */ +/* This provides a mapping from Arduino Uno to Arduino Pro Micro pins for development */ / { pro_micro_d: connector_d { diff --git a/app/include/zmk/display.h b/app/include/zmk/display.h index 1ef41f48d36..d206d357d9a 100644 --- a/app/include/zmk/display.h +++ b/app/include/zmk/display.h @@ -23,12 +23,12 @@ int zmk_display_init(void); * * @param listener THe ZMK Event manager listener name. * @param state_type The struct/enum type used to store/transfer state. - * @param cb The callback to invoke in the dispaly queue context to update the UI. Should be `void + * @param cb The callback to invoke in the display queue context to update the UI. Should be `void * func(state_type)` signature. * @param state_func The callback function to invoke to fetch the updated state from ZMK core. * Should be `state type func(const zmk_event_t *eh)` signature. - * @retval listner##_init Generates a function `listener##_init` that should be called by the widget - * once ready to be updated. + * @retval listener##_init Generates a function `listener##_init` that should be called by the + * widget once ready to be updated. **/ #define ZMK_DISPLAY_WIDGET_LISTENER(listener, state_type, cb, state_func) \ K_MUTEX_DEFINE(listener##_mutex); \ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 204e50f478b..57263d1c85e 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -181,7 +181,7 @@ static void release_captured_events() { // // Events for different mod-tap instances are separated by a NULL pointer. // - // The first event popped will never be catched by the next active hold-tap + // The first event popped will never be caught by the next active hold-tap // because to start capturing a mod-tap-key-down event must first completely // go through the events queue. // diff --git a/app/src/combo.c b/app/src/combo.c index 61671d335f9..3f78878f01f 100644 --- a/app/src/combo.c +++ b/app/src/combo.c @@ -162,7 +162,7 @@ static int setup_candidates_for_first_keypress(int32_t position, int64_t timesta static int filter_candidates(int32_t position) { // this code iterates over candidates and the lookup together to filter in O(n) - // assuming they are both sorted on key_position_len, virtal_key_position + // assuming they are both sorted on key_position_len, virtual_key_position int matches = 0, lookup_idx = 0, candidate_idx = 0; while (lookup_idx < CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY && candidate_idx < CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY) { diff --git a/app/src/split/Kconfig b/app/src/split/Kconfig index 1134937056f..ce90037b1ea 100644 --- a/app/src/split/Kconfig +++ b/app/src/split/Kconfig @@ -24,7 +24,7 @@ config ZMK_SPLIT_PERIPHERAL_HID_INDICATORS bool "Peripheral HID Indicators" depends on ZMK_HID_INDICATORS help - Enable propogating the HID (LED) Indicator state to the split peripheral(s). + Enable propagating the HID (LED) Indicator state to the split peripheral(s). #ZMK_SPLIT endif diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index abb37a0b91c..ee21a12fa03 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -585,7 +585,7 @@ static bool split_central_eir_found(const bt_addr_le_t *addr) { return false; } - LOG_DBG("Initiating new connnection"); + LOG_DBG("Initiating new connection"); struct bt_le_conn_param *param = BT_LE_CONN_PARAM(CONFIG_ZMK_SPLIT_BLE_PREF_INT, CONFIG_ZMK_SPLIT_BLE_PREF_INT, CONFIG_ZMK_SPLIT_BLE_PREF_LATENCY, CONFIG_ZMK_SPLIT_BLE_PREF_TIMEOUT); diff --git a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap index 8f7b2cdb02a..1a0642f127f 100644 --- a/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap +++ b/app/tests/mod-morph/2b-masked-morph-implicit-overwrite/native_posix_64.keymap @@ -7,7 +7,7 @@ mod_morph: mod_morph { compatible = "zmk,behavior-mod-morph"; #binding-cells = <0>; - bindings = <&kp A>, <&kp LS(B)>; // implict mod overwrite + bindings = <&kp A>, <&kp LS(B)>; // implicit mod overwrite mods = <(MOD_LSFT|MOD_RSFT)>; }; }; diff --git a/docs/blog/2024-01-05-zmk-tools.md b/docs/blog/2024-01-05-zmk-tools.md index b48e57357b5..5ea3fd1394b 100755 --- a/docs/blog/2024-01-05-zmk-tools.md +++ b/docs/blog/2024-01-05-zmk-tools.md @@ -145,7 +145,7 @@ I should note that, as a native English speaker and typer, I don't use any of th ## Keyboard Latency Testing -The last project I want to mention is a tool for testing keyboard latency. It requires only a Rasbperry Pi, an optocoupler IC, a resistor, and some wire. If you've ever wondered how ZMK's latency compares to other keyboards, you can [check the results here](https://github.com/joelspadin/keyboard-latency-tester/blob/main/results/chart.ipynb)! +The last project I want to mention is a tool for testing keyboard latency. It requires only a Raspberry Pi, an optocoupler IC, a resistor, and some wire. If you've ever wondered how ZMK's latency compares to other keyboards, you can [check the results here](https://github.com/joelspadin/keyboard-latency-tester/blob/main/results/chart.ipynb)! I don't have a very large collection of keyboards though, so the data is pretty limited so far. If you want to try it on your own keyboard, see the instructions on the [keyboard latency tester README](https://github.com/joelspadin/keyboard-latency-tester), and please send me a PR with your results! diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index 463dc087b6e..c95e78841e8 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -18,7 +18,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/ :::note[Default setting] -While `CONFIG_ZMK_BATTERY_REPORTING` is disabled by default it is implied by `CONFIG_ZMK_BLE`, thus any board with BLE enabled will have this automatically enabled unless explicitly overriden. +While `CONFIG_ZMK_BATTERY_REPORTING` is disabled by default it is implied by `CONFIG_ZMK_BLE`, thus any board with BLE enabled will have this automatically enabled unless explicitly overridden. ::: diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md index 9149b36bf37..02d203510dd 100644 --- a/docs/docs/config/bluetooth.md +++ b/docs/docs/config/bluetooth.md @@ -9,10 +9,10 @@ See [Configuration Overview](index.md) for instructions on how to change these s ## Kconfig -| Option | Type | Description | Default | -| -------------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK to improve connection stability. This includes changes to timing on BLE pairing initation, restores use of the updated/new LLCP implementation, and disables 2M PHY support. | n | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC` | bool | Enables a combination of settings that are planned to be officially supported in the future. This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from previously paired hosts. | n | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Aggregate config that enables both `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` and `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC`. | n | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts.) | n | -| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | +| Option | Type | Description | Default | +| -------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK to improve connection stability. This includes changes to timing on BLE pairing initiation, restores use of the updated/new LLCP implementation, and disables 2M PHY support. | n | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC` | bool | Enables a combination of settings that are planned to be officially supported in the future. This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from previously paired hosts. | n | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Aggregate config that enables both `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` and `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC`. | n | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts.) | n | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 675830e4944..27923453207 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -31,7 +31,7 @@ Making changes to any of the settings in this section modifies the HID report de | Config | Type | Description | Default | | ------------------------------------- | ---- | -------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable reciept of HID/LED indicator state from connected hosts | n | +| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable receipt of HID/LED indicator state from connected hosts | n | | `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | Exactly zero or one of the following options may be set to `y`. The first is used if none are set. diff --git a/docs/src/templates/setup.ps1.mustache b/docs/src/templates/setup.ps1.mustache index b8ecc2937f4..33a4be38845 100644 --- a/docs/src/templates/setup.ps1.mustache +++ b/docs/src/templates/setup.ps1.mustache @@ -308,6 +308,6 @@ if ($github_repo -ne "") { if ($github_repo -imatch "https") { $actions = "$($github_repo.substring(0, $github_repo.length - 4))/actions" - Write-Host "Your firmware should be availalbe from GitHub Actions shortly: $actions" + Write-Host "Your firmware should be available from GitHub Actions shortly: $actions" } } diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index dd7a7a2d2f2..cde3a8a17d8 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -297,7 +297,7 @@ if [ -n "$github_repo" ]; then exit 1 fi - # TODO: Support determing the actions URL when non-https:// repo URL is used. + # TODO: Support determining the actions URL when non-https:// repo URL is used. if [ "${github_repo}" != "${github_repo#https://}" ]; then echo "Your firmware should be available from GitHub Actions shortly: ${github_repo%.git}/actions" fi From 8f5c7bbfd471d6720410980d6d905673411c363c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 05:52:14 +0000 Subject: [PATCH 1080/1130] chore(deps): bump pre-commit/action from 3.0.0 to 3.0.1 Bumps [pre-commit/action](https://github.com/pre-commit/action) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/pre-commit/action/releases) - [Commits](https://github.com/pre-commit/action/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: pre-commit/action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 7a4c211e37f..cc9672f40f8 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -12,4 +12,4 @@ jobs: - uses: actions/setup-python@v5 with: python-version: 3.x - - uses: pre-commit/action@v3.0.0 + - uses: pre-commit/action@v3.0.1 From f0b20c1c938da6dfd51f4639a2a71b587cab4205 Mon Sep 17 00:00:00 2001 From: Joel Spadin Date: Fri, 13 Oct 2023 13:07:55 -0500 Subject: [PATCH 1081/1130] feat(boards): Add nRF52 high voltage DC/DC config Added a Kconfig option to enable SOC_DCDC_NRF52X_HV for nice_nano_v2 and mikoto. According to Nordic's documentation, the DC/DC regulator is more efficient than the LDO regulator, so this is enabled by default. The following boards do not support this mode and were not changed: - nice_nano - nice60 - nrfmicro_11, nrfmicro_13 - nrf52840_m2 - bluemicro840 I could not find schematics to confirm whether the following boards support this mode: - bt60_v1, bt60_v2 - bt65_v1 - bt75_v1 - corneish_zen_v1, corneish_zen_v2 - pillbug - puchi_ble_v1 - s40nc --- app/boards/arm/mikoto/Kconfig | 6 ++++++ app/boards/arm/nice_nano/Kconfig | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/app/boards/arm/mikoto/Kconfig b/app/boards/arm/mikoto/Kconfig index 71ec9411738..fab2218c049 100644 --- a/app/boards/arm/mikoto/Kconfig +++ b/app/boards/arm/mikoto/Kconfig @@ -4,6 +4,12 @@ config BOARD_ENABLE_DCDC default y depends on (BOARD_MIKOTO_520) +config BOARD_ENABLE_DCDC_HV + bool "High voltage DCDC converter" + select SOC_DCDC_NRF52X_HV + default y + depends on (BOARD_MIKOTO_520) + choice BOARD_MIKOTO_CHARGER_CURRENT prompt "Charge current to supply to attached batteries" depends on (BOARD_MIKOTO_520) diff --git a/app/boards/arm/nice_nano/Kconfig b/app/boards/arm/nice_nano/Kconfig index ac6828a4bbe..dbeb82cd126 100644 --- a/app/boards/arm/nice_nano/Kconfig +++ b/app/boards/arm/nice_nano/Kconfig @@ -5,3 +5,9 @@ config BOARD_ENABLE_DCDC select SOC_DCDC_NRF52X default y depends on (BOARD_NICE_NANO || BOARD_NICE_NANO_V2) + +config BOARD_ENABLE_DCDC_HV + bool "High voltage DCDC converter" + select SOC_DCDC_NRF52X_HV + default y + depends on (BOARD_NICE_NANO_V2) From 2ee76be6fee671042d9740ac0271eb69e2558165 Mon Sep 17 00:00:00 2001 From: German Gutierrez Date: Mon, 13 May 2024 23:43:35 +0200 Subject: [PATCH 1082/1130] fix(soft_off): central waits 100ms in split if hold_time enabled --- app/src/behaviors/behavior_soft_off.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index 8c6ba4225f7..461ce933cf7 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -57,6 +57,9 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, uint32_t hold_time = k_uptime_get() - data->press_start; if (hold_time > config->hold_time_ms) { + if (IS_ENABLED(CONFIG_ZMK_SPLIT) && IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL)) { + k_sleep(K_MSEC(100)); + } zmk_pm_soft_off(); } else { LOG_INF("Not triggering soft off: held for %d and hold time is %d", hold_time, From 2d96f469c815cb84d4cfde7c052a7ee33e2da7ae Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> Date: Sun, 26 May 2024 07:16:33 +0200 Subject: [PATCH 1083/1130] fix(docs): Removing to-to typos (#2310) --- docs/blog/2023-04-06-zephyr-3-2.md | 2 +- docs/docs/behaviors/caps-word.md | 2 +- docs/docs/features/backlight.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/blog/2023-04-06-zephyr-3-2.md b/docs/blog/2023-04-06-zephyr-3-2.md index 4ba71cacdb2..4bb21999422 100644 --- a/docs/blog/2023-04-06-zephyr-3-2.md +++ b/docs/blog/2023-04-06-zephyr-3-2.md @@ -57,7 +57,7 @@ and then update it as appropriate to build the right shields/boards for your con ### Upgrade a manual script -If you have a custom GitHub Actions workflow you need to maintain for some reason, you can update the workflow to to use the `stable` Docker image tag for the build: +If you have a custom GitHub Actions workflow you need to maintain for some reason, you can update the workflow to use the `stable` Docker image tag for the build: - Open `.github/workflows/build.yml` in your editor/IDE - Change `zmkfirmware/zmk-build-arm:2.5` to `zmkfirmware/zmk-build-arm:stable` wherever it is found diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index 77c8fd20d2a..4551884dd50 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -7,7 +7,7 @@ sidebar_label: Caps Word The caps word behavior behaves similar to a caps lock, but will automatically deactivate when any key not in a continue list is pressed, or if the caps word key is pressed again. For smaller keyboards using [mod-taps](/docs/behaviors/mod-tap), this can help avoid repeated alternating holds when typing words in all caps. -The modifiers are applied only to to the alphabetic (`A` to `Z`) keycodes, to avoid automatically applying them to numeric values, etc. +The modifiers are applied only to the alphabetic (`A` to `Z`) keycodes, to avoid automatically applying them to numeric values, etc. ### Behavior Binding diff --git a/docs/docs/features/backlight.mdx b/docs/docs/features/backlight.mdx index 4c47305783a..674e8633014 100644 --- a/docs/docs/features/backlight.mdx +++ b/docs/docs/features/backlight.mdx @@ -58,7 +58,7 @@ config LED_PWM endif # ZMK_BACKLIGHT ``` -Create a `-pinctrl.dtsi` file if it does not already exist, and include it at the beginning of the `.dts` file. `CONFIG_PINCTRL=y` must be added to to `_defconfig` if it isn't already enabled. +Create a `-pinctrl.dtsi` file if it does not already exist, and include it at the beginning of the `.dts` file. `CONFIG_PINCTRL=y` must be added to `_defconfig` if it isn't already enabled. The pinctrl file has a `&pinctrl` node that encompasses all pinctrl settings, including I2C or SPI peripherals (e.g. WS2812 LEDs, Battery fuel gauges): From 308d6bce6eb338f387a454c7366d0bcb07463d7b Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> Date: Sun, 2 Jun 2024 06:51:08 +0200 Subject: [PATCH 1084/1130] feat(docs): Improve the toolchain setup page (#2272) Split the toolchain setup into separate docker and native pages and improve instructions to better refer to Zephyr docs in certain steps. Also refactor to improve consistency and add virtualenv instructions. --------- Co-authored-by: KemoNine Co-authored-by: Cem Aksoylar --- docs/blog/2020-08-12-zmk-sotf-1.md | 2 +- docs/blog/2021-07-17-zephyr-2-5.md | 2 +- docs/blog/2022-04-02-zephyr-3-0.md | 2 +- docs/blog/2022-04-10-zmk-sotf-5.md | 2 +- docs/blog/2023-04-06-zephyr-3-2.md | 2 +- docs/blog/2024-02-09-zephyr-3-5.md | 2 +- docs/docs/behaviors/index.mdx | 8 +- docs/docs/customization.md | 2 +- docs/docs/development/new-shield.mdx | 4 +- docs/docs/development/setup.mdx | 322 ---------------------- docs/docs/development/setup/docker.md | 53 ++++ docs/docs/development/setup/index.md | 20 ++ docs/docs/development/setup/native.mdx | 353 +++++++++++++++++++++++++ docs/docs/troubleshooting.md | 2 +- docs/docusaurus.config.js | 3 +- docs/sidebars.js | 11 +- docs/src/css/custom.css | 4 + 17 files changed, 456 insertions(+), 338 deletions(-) delete mode 100644 docs/docs/development/setup.mdx create mode 100644 docs/docs/development/setup/docker.md create mode 100644 docs/docs/development/setup/index.md create mode 100644 docs/docs/development/setup/native.mdx diff --git a/docs/blog/2020-08-12-zmk-sotf-1.md b/docs/blog/2020-08-12-zmk-sotf-1.md index afa03405a70..89cfffabe65 100644 --- a/docs/blog/2020-08-12-zmk-sotf-1.md +++ b/docs/blog/2020-08-12-zmk-sotf-1.md @@ -19,7 +19,7 @@ There's been lots of various activity in ZMK land! - Tons of [documentation](/docs) work. - Refactoring ([#73](https://github.com/zmkfirmware/zmk/pull/73), [#74](https://github.com/zmkfirmware/zmk/pull/74)) of [keymaps](/docs/features/keymaps) to make them simpler for users. - Mod-Tap Behavior (docs coming!) is much improved ([#69](https://github.com/zmkfirmware/zmk/pull/69)) and usable now. -- An initial [`setup.sh`](http://localhost:3000/docs/user-setup#user-config-setup-script) script was created, allowing users to quickly bootstrap a "user config" setup and push it to GitHub, where GitHub Actions will build the firmware for you. +- An initial [`setup.sh`](/docs/user-setup#user-config-setup-script) script was created, allowing users to quickly bootstrap a "user config" setup and push it to GitHub, where GitHub Actions will build the firmware for you. - Corne shield ([#80](https://github.com/zmkfirmware/zmk/pull/80)) shield definition was added. - Initial [encoder](/docs/features/encoders) support ([#61](https://github.com/zmkfirmware/zmk/pull/61)) was added. diff --git a/docs/blog/2021-07-17-zephyr-2-5.md b/docs/blog/2021-07-17-zephyr-2-5.md index 153027bb4cd..789a644caee 100644 --- a/docs/blog/2021-07-17-zephyr-2-5.md +++ b/docs/blog/2021-07-17-zephyr-2-5.md @@ -61,7 +61,7 @@ Once the container has rebuilt, VS Code will be running the 2.5 Docker image. The following steps will get you building ZMK locally against Zephyr 2.5: -- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- Run the updated [toolchain installation](/docs/development/setup) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) - pull the latest ZMK `main` with `git pull` for your ZMK checkout - run `west update` to pull the updated Zephyr version and its dependencies diff --git a/docs/blog/2022-04-02-zephyr-3-0.md b/docs/blog/2022-04-02-zephyr-3-0.md index 3b16b87ea78..92e8b33bc1c 100644 --- a/docs/blog/2022-04-02-zephyr-3-0.md +++ b/docs/blog/2022-04-02-zephyr-3-0.md @@ -62,7 +62,7 @@ Once the container has rebuilt, VS Code will be running the 3.0 Docker image. The following steps will get you building ZMK locally against Zephyr 3.0: -- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- Run the updated [toolchain installation](/docs/development/setup) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) - pull the latest ZMK `main` with `git pull` for your ZMK checkout - run `west update` to pull the updated Zephyr version and its dependencies diff --git a/docs/blog/2022-04-10-zmk-sotf-5.md b/docs/blog/2022-04-10-zmk-sotf-5.md index 43cb4e67209..1a0ea270c8d 100644 --- a/docs/blog/2022-04-10-zmk-sotf-5.md +++ b/docs/blog/2022-04-10-zmk-sotf-5.md @@ -132,7 +132,7 @@ Another persistent bug that Apple users experienced was related to crashes and p The long awaited locality enhancement was finally merged by [petejohanson] in [#547](https://github.com/zmkfirmware/zmk/pull/547), allowing more fine grained control of where certain behaviors are invoked. Some key improvements thanks to the changes: - [RGB Underglow](/docs/features/underglow) behaviors now run globally, so enabling/disabling RGB, changing the color, animation, etc. applies to both sides of a split properly. -- [Reset](/docs/behaviors/reset#reset)/[Bootloader](/docs/behaviors/reset#bootloader) behaviors now run wherever the key was pressed. For example, adding a `&bootloader` reference to the peripheral side of a split will now put that side of the split into the bootloader when pressed. +- [Reset](/docs/behaviors/reset#reset)/[Bootloader](/docs/behaviors/reset#bootloader-reset) behaviors now run wherever the key was pressed. For example, adding a `&bootloader` reference to the peripheral side of a split will now put that side of the split into the bootloader when pressed. #### Split Connections diff --git a/docs/blog/2023-04-06-zephyr-3-2.md b/docs/blog/2023-04-06-zephyr-3-2.md index 4bb21999422..21058ca9544 100644 --- a/docs/blog/2023-04-06-zephyr-3-2.md +++ b/docs/blog/2023-04-06-zephyr-3-2.md @@ -87,7 +87,7 @@ Once the container has rebuilt, VS Code will be running the 3.2 Docker image. The following steps will get you building ZMK locally against Zephyr 3.2: -- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- Run the updated [toolchain installation](/docs/development/setup) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) - Install the latest version of `west` by running `pip3 install --user --update west`. - pull the latest ZMK `main` with `git pull` for your ZMK checkout - run `west update` to pull the updated Zephyr version and its dependencies diff --git a/docs/blog/2024-02-09-zephyr-3-5.md b/docs/blog/2024-02-09-zephyr-3-5.md index b3fec6cbda2..738f22daa81 100644 --- a/docs/blog/2024-02-09-zephyr-3-5.md +++ b/docs/blog/2024-02-09-zephyr-3-5.md @@ -70,7 +70,7 @@ Once the container has rebuilt, VS Code will be running the 3.5 Docker image. The following steps will get you building ZMK locally against Zephyr 3.5: -- Run the updated [toolchain installation](/docs/development/setup#toolchain-installation) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) +- Run the updated [toolchain installation](/docs/development/setup) steps, and once completed, remove the previously installed SDK version (optional, existing SDK should still work) - Install the latest version of `west` by running `pip3 install --user --update west`. - Pull the latest ZMK `main` with `git pull` for your ZMK checkout - Run `west update` to pull the updated Zephyr version and its dependencies diff --git a/docs/docs/behaviors/index.mdx b/docs/docs/behaviors/index.mdx index 4a05f5653a0..7cd82d3e4b8 100644 --- a/docs/docs/behaviors/index.mdx +++ b/docs/docs/behaviors/index.mdx @@ -46,10 +46,10 @@ Below is a summary of pre-defined behavior bindings and user-definable behaviors ## Reset behaviors -| Binding | Behavior | Description | -| ------------- | --------------------------------- | ---------------------------------------------------------------------------------------- | -| `&sys_reset` | [Reset](reset.md#reset) | Resets the keyboard and re-runs the firmware flashed to the device | -| `&bootloader` | [Bootloader](reset.md#bootloader) | Resets the keyboard and puts it into bootloader mode, allowing you to flash new firmware | +| Binding | Behavior | Description | +| ------------- | --------------------------------------- | ---------------------------------------------------------------------------------------- | +| `&sys_reset` | [Reset](reset.md#reset) | Resets the keyboard and re-runs the firmware flashed to the device | +| `&bootloader` | [Bootloader](reset.md#bootloader-reset) | Resets the keyboard and puts it into bootloader mode, allowing you to flash new firmware | ## Output selection behaviors diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 46427b9e2f9..96b5e4ea9a0 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -40,7 +40,7 @@ If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https: ::: :::note -It is also possible to build firmware locally on your computer by following the [toolchain setup](development/setup.mdx) and +It is also possible to build firmware locally on your computer by following the [toolchain setup](development/setup/index.md) and [building instructions](development/build-flash.mdx), which includes pointers to [building using your `zmk-config` folder](development/build-flash.mdx#building-from-zmk-config-folder). ::: diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index a542fc84995..d48e0d1de97 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -554,7 +554,7 @@ Add additional bindings as necessary to match the default number of encoders on ### GitHub Actions -Using GitHub Actions to build your new firmware can save you from doing any local [development setup](./setup.mdx), +Using GitHub Actions to build your new firmware can save you from doing any local [development setup](./setup/index.md), at the expense of a longer feedback loop if there are issues. To push your changes and trigger a build: - Add all your pending changes with `git add .` @@ -566,7 +566,7 @@ Once pushed, click on the "Actions" tab of the repo you created in the first ste ### Local Build :::note -To build locally, be sure you've followed the [development setup](./setup.mdx) guide first. +To build locally, be sure you've followed the [development setup](./setup/index.md) guide first. ::: Once you've fully created the new keyboard shield definition, diff --git a/docs/docs/development/setup.mdx b/docs/docs/development/setup.mdx deleted file mode 100644 index bc275804cf7..00000000000 --- a/docs/docs/development/setup.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: Toolchain Setup -sidebar_label: Toolchain Setup ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -export const OsTabs = (props) => ( - - {/* eslint-disable-next-line */} - {props.children} - -); - -This guide will show you how to set up a development environment for building ZMK locally. - -## Install Dependencies - -Click the operating system you are using. (The VS Code & Docker option can be used on any OS.) - - - - -This option use the same [Docker image which is used by the GitHub action](https://github.com/zmkfirmware/zmk-docker) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach is also the easiest to set up. No toolchain or dependencies are necessary when using Docker; the container image you'll be using already has the toolchain installed and set up to use. - -1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop) for your operating system. -2. Install [Visual Studio Code](https://code.visualstudio.com/) -3. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) - -:::info -The docker container already includes `west`. Skip past the following section to [Get Source Code](#get-source-code). -::: - - - - -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: - -- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) -- [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk) - -Return to this guide once you are finished with each section. - - - - -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: - -- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) -- [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk) - -Return to this guide once you are finished with each section. - -`dfu-util` is required to flash devices that use DFU, but there is currently no maintained package for it on Chocolatey. [QMK Toolbox](https://github.com/qmk/qmk_toolbox) contains a working version of it though. - - - - -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: - -- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) -- [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk) - -Return to this guide once you are finished with each section. - - - - -#### Install Base Dependencies - -Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions for Ubuntu under these sections: - -- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) -- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) - -Return to this guide once you are finished with each section. - -#### Install Cross-Compile Toolchain - -Because Raspberry OS runs on the same architecture (but different ABI) as ARM keyboard MCUs, the operating system's installed [cross compilers](https://docs.zephyrproject.org/3.5.0/develop/toolchains/other_x_compilers.html) can be used to target the different ABI. Building for non-ARM MCUs has not been tested. - -First, the cross compiler should be installed: - -```sh -sudo apt install gcc-arm-none-eabi -``` - -Next, we'll configure Zephyr with some [environment variables](https://docs.zephyrproject.org/3.5.0/develop/env_vars.html#env-vars) needed to find the cross compiler. Create a file named `~/.zephyrrc` if it doesn't exist, and add these lines to it: - -```sh -export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile -export CROSS_COMPILE=/usr/bin/arm-none-eabi- -``` - - - - -Follow Zephyr's [Install Linux Host Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/installation_linux.html) documentation for Fedora. - - - - -### Install West - -`west` is the [Zephyr® Project's meta-tool](https://docs.zephyrproject.org/3.5.0/develop/west/index.html) used to configure and build Zephyr OS applications. - -West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/3.5.0/develop/west/install.html) are summarized here: - - - - -Install west: - -```sh -pip3 install --user -U west -``` - -Verify that west is installed: - -```sh -west --version -``` - -This should print a message like "West version: v0.14.0". If it prints an error instead, make sure `~/.local/bin` is on your `PATH` environment variable. You can add it with these commands: - -```sh -echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc -source ~/.bashrc -``` - - - - -Install west: - -```sh -pip3 install -U west -``` - -Verify that west is installed: - -```sh -west --version -``` - -This should print a message like "West version: v0.14.0". If it prints an error instead, make sure that the Python scripts directory is on your `PATH` environment variable. You can add it by opening a PowerShell window and running the following commands: - -```powershell -$Scripts = python -c "import sysconfig; print(sysconfig.get_path('scripts'))" -$Path = [Environment]::GetEnvironmentVariable('PATH', 'User') -[Environment]::SetEnvironmentVariable('PATH', "$Path;$Scripts", 'User') -$env:PATH += ";$Scripts" -``` - - - - -Install west: - -```sh -pip3 install -U west -``` - - - - -## Get Source Code - -Next, you'll need to clone the ZMK source repository if you haven't already. Navigate to the folder you would like to place your `zmk` directory in and run the following command: - -``` -git clone https://github.com/zmkfirmware/zmk.git -``` - -## Initialize & Update Zephyr Workspace - -Since ZMK is built as a Zephyr™ application, the next step is -to use `west` to initialize and update your workspace. The ZMK -Zephyr™ application is in the `app/` source directory: - -### Step into the repository - - - - -```sh -cd zmk -``` - - - - -```sh -cd zmk -``` - - - - -```sh -cd zmk -``` - - - - -```sh -cd zmk -``` - - - - -```sh -cd zmk -``` - - - - - -Open the `zmk` checkout folder in VS Code. The repository includes a configuration for containerized development, so an alert will pop up: - -![VS Code Dev Container Configuration Alert](../assets/dev-setup/vscode_devcontainer.png) - -Click `Reopen in Container` in order to reopen the VS Code with the running container. - -The first time you do this on your machine, it will pull the docker image down from the registry and build the container. Subsequent launches are much faster! - -:::warning -All subsequent steps must be performed from the VS Code terminal _inside_ the container. -::: - - - - -### Initialize the Application - -```sh -west init -l app/ -``` - -### Update to Fetch Modules - -```sh -west update -``` - -:::tip -This step pulls down quite a bit of tooling. Go grab a cup of coffee, it can take 10-15 minutes even on a good internet connection! -::: - -:::info -If you're using Docker, you're done with setup! You must restart the container at this point. The easiest way to do so is to close the VS Code window, verify that the container has stopped in Docker Dashboard, and reopen the container with VS Code. - -Once your container is restarted, proceed to [Building and Flashing](development/build-flash.mdx). -::: - -### Export Zephyr CMake package - -This allows CMake to load the code needed to build ZMK. - -```sh -west zephyr-export -``` - -### Install Zephyr Python Dependencies - -Some additional Python dependencies are listed in Zephyr's `scripts/requirements.txt` file. - - - - -```sh -pip3 install --user -r zephyr/scripts/requirements.txt -``` - - - - -```sh -pip3 install -r zephyr/scripts/requirements.txt -``` - - - - -```sh -pip3 install -r zephyr/scripts/requirements.txt -``` - - - diff --git a/docs/docs/development/setup/docker.md b/docs/docs/development/setup/docker.md new file mode 100644 index 00000000000..767331e409f --- /dev/null +++ b/docs/docs/development/setup/docker.md @@ -0,0 +1,53 @@ +--- +title: Docker +sidebar_label: Docker +--- + +:::note +Currently the Docker approach is only documented for [VS Code](https://github.com/microsoft/vscode) (not [Code OSS](https://github.com/microsoft/vscode/wiki/Differences-between-the-repository-and-Visual-Studio-Code)). While it can be replicated using [devcontainers](https://containers.dev/) this is not documented yet - contributions are welcome! +::: + +### Source Code + +First, you'll need to clone the ZMK source repository if you haven't already. Open a terminal and navigate to the folder you would like to place your `zmk` directory in, then run the following command: + +```sh +git clone https://github.com/zmkfirmware/zmk.git +``` + +### Installing Development Tools + +1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop) for your operating system. +2. Install [VS Code](https://code.visualstudio.com/). +3. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). + +### Initialize & Update Zephyr Workspace + +Open the `zmk` checkout folder in VS Code. The repository includes a configuration for containerized development, so an alert will pop up: + +![VS Code Dev Container Configuration Alert](../../assets/dev-setup/vscode_devcontainer.png) + +Click `Reopen in Container` in order to reopen the VS Code with the running container. If the alert fails to pop up or you accidentally close it, you can perform the same action by pressing `ctrl+shift+p` and selecting `Remote: Show Remote Menu`. + +The first time you do this on your machine, it will pull the docker image down from the registry and build the container. Subsequent launches are much faster! + +:::caution +The following step and any future [build commands](../build-flash.mdx) must be executed from the VS Code terminal _inside_ the container. +::: + +Initialize the application and update to fetch modules, including Zephyr: + +```sh +west init -l app/ +west update +``` + +:::tip +This step pulls down quite a bit of tooling, be patient! +::: + +:::info +You must restart the container at this point. The easiest way to do so is to close the VS Code window, verify that the container has stopped in Docker Dashboard, and reopen the container with VS Code. + +Your setup is complete once your container has restarted. +::: diff --git a/docs/docs/development/setup/index.md b/docs/docs/development/setup/index.md new file mode 100644 index 00000000000..5c795fa22c7 --- /dev/null +++ b/docs/docs/development/setup/index.md @@ -0,0 +1,20 @@ +--- +title: Getting Started +sidebar_label: Getting Started +--- + +:::tip +We recommend reading through the setup process before following it step by step, to ensure that you are happy with installing the required dependencies. +::: + +## Environment Setup + +There are two ways to set up the ZMK development environment: + +- [Docker](/docs/development/setup/docker): \ + A self-contained development environment. It uses the same [Docker image which is used by the GitHub action](https://github.com/zmkfirmware/zmk-docker) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach may be easier to set up for some operating systems. No toolchain or dependencies are necessary when using Docker; the container image has the toolchain installed and set up to use. + +- [Native](/docs/development/setup/native):\ + This uses your operating system directly. Usually runs slightly faster than the Docker approach, and can be preferable for users who already have the dependencies on their system. + +Please see the [Docker](/docs/development/setup/docker) instructions or [native](/docs/development/setup/native) instructions to continue setup. diff --git a/docs/docs/development/setup/native.mdx b/docs/docs/development/setup/native.mdx new file mode 100644 index 00000000000..d077d7d1d7d --- /dev/null +++ b/docs/docs/development/setup/native.mdx @@ -0,0 +1,353 @@ +--- +title: Native Setup +sidebar_label: Native +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +export const OsTabs = (props) => ( + + {/* eslint-disable-next-line */} + {props.children} + + +); + +export const OsNoteTabs = (props) => ( + + {/* eslint-disable-next-line */} + {props.children} + + +); + +export const EnvTabs = (props) => ( + + {/* eslint-disable-next-line */} + {props.children} + + +); + +export const WinTermTabs = (props) => ( + + {/* eslint-disable-next-line */} + {props.children} + + +); + +## 1. Install Zephyr Dependencies + +Open Zephyr's [Getting Started Guide](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html) and follow the instructions under these sections: + +- [Select and Update OS](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#select-and-update-os) +- [Install Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-dependencies) + +:::info +Zephyr's [Install Linux Host Dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/installation_linux.html) page may be of use for users of Linux distributions which are not based on Ubuntu. +::: + +## 2. Source Code + +Next, you'll need to clone the ZMK source repository if you haven't already. Open a terminal and navigate to the folder you would like to place your `zmk` directory in, then run the following command: + +```sh +git clone https://github.com/zmkfirmware/zmk.git +``` + +Then step into the repository. + +```sh +cd zmk +``` + +## 3. Get Zephyr and install Python dependencies + +:::note +These steps are very similar to Zephyr's [Get Zephyr and install Python dependencies](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#get-zephyr-and-install-python-dependencies) instructions, but specialized for ZMK. +::: + + + + + + +1. Use `apt` to install Python `venv` package: + +```sh +sudo apt install python3-venv +``` + +2. Create a new virtual environment and activate it: + +```sh +python3 -m venv .venv +source .venv/bin/activate +``` + + + + +1. Create a new virtual environment: + +```sh +python -m venv .venv +``` + +2. Activate the virtual environment: + + + + +```sh +.venv\Scripts\activate.bat +``` + + + + + +```powershell +.venv\Scripts\Activate.ps1 +``` + + + + + + + + +1. Create a new virtual environment: + +```sh +python3 -m venv .venv +``` + +2. Activate the virtual environment: + +```sh +source .venv/bin/activate +``` + + + + +Once activated your shell will be prefixed with `(.venv)`. The virtual environment can be deactivated at any time by running `deactivate`. + +:::note +Remember to activate the virtual environment every time you start working. +::: + +4. Install west: + +```sh +pip install west +``` + +5. Initialize the application and update to fetch modules, including Zephyr: + +```sh +west init -l app/ +west update +``` + +:::tip +This step pulls down quite a bit of tooling, be patient! +::: + +6. Export a [Zephyr CMake package](https://docs.zephyrproject.org/3.5.0/build/zephyr_cmake_package.html#cmake-pkg). This allows CMake to automatically load boilerplate code required for building Zephyr applications. + +```sh +west zephyr-export +``` + +7. Install the additional dependencies found in Zephyr's `requirements-base.txt`: + +```sh +pip install -r zephyr/scripts/requirements-base.txt +``` + + + + + +1. Install `west`: + +```sh +pip3 install --user -U west +``` + +:::note +You need `~/.local/bin` to be on your `PATH` environment variable; verify that it is by running + +```sh +west --version +``` + +If this prints an error rather than a `west` version number, then add `~/.local/bin` to your `PATH`: + +```sh +echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc +source ~/.bashrc +``` + +::: + + + + +1. Install `west`: + +```sh +pip install -U west +``` + +:::note +You need the Python scripts directory to be on your PATH environment variable; verify that it is by running + +```sh +west --version +``` + +If this prints an error rather than a `west` version number, then add said directory to your `PATH` with PowerShell: + +```powershell +$Scripts = python -c "import sysconfig; print(sysconfig.get_path('scripts'))" +$Path = [Environment]::GetEnvironmentVariable('PATH', 'User') +[Environment]::SetEnvironmentVariable('PATH', "$Path;$Scripts", 'User') +$env:PATH += ";$Scripts" +``` + +::: + + + + + +1. Install `west`: + +```sh +pip3 install -U west +``` + + + + +2. Initialize the application and update to fetch modules, including Zephyr: + +```sh +west init -l app/ +west update +``` + +:::tip +This step pulls down quite a bit of tooling, be patient! +::: + +3. Export a [Zephyr CMake package](https://docs.zephyrproject.org/3.5.0/build/zephyr_cmake_package.html#cmake-pkg). This allows CMake to automatically load boilerplate code required for building Zephyr applications. + +```sh +west zephyr-export +``` + + + + +4. Install the additional dependencies found in Zephyr's `requirements-base.txt`: + +```sh +pip3 install --user -r zephyr/scripts/requirements-base.txt +``` + + + + + +4. Install the additional dependencies found in Zephyr's `requirements-base.txt`: + +```sh +pip install -r zephyr/scripts/requirements-base.txt +``` + + + + +4. Install the additional dependencies found in Zephyr's `requirements-base.txt`. + +```sh +pip3 install -r zephyr/scripts/requirements-base.txt +``` + + + + + + +## 4. Install Zephyr SDK + +Return to Zephyr's Getting Started Guide and [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk). + +### OS specific notes + + + + `dfu-util` is required to flash devices that use DFU, but there is currently + no maintained package for it on Chocolatey. [QMK + Toolbox](https://github.com/qmk/qmk_toolbox) contains a working version of it + though. + + + +#### Install Cross-Compile Toolchain + +Because Raspberry OS runs on the same architecture (but different ABI) as ARM keyboard MCUs, the operating system's installed [cross compilers](https://docs.zephyrproject.org/3.5.0/develop/toolchains/other_x_compilers.html) can be used to target the different ABI. Building for non-ARM MCUs has not been tested. + +First, the cross compiler should be installed: + +```sh +sudo apt install gcc-arm-none-eabi +``` + +Next, we'll configure Zephyr with some [environment variables](https://docs.zephyrproject.org/3.5.0/develop/env_vars.html#env-vars) needed to find the cross compiler. Create a file named `~/.zephyrrc` if it doesn't exist, and add these lines to it: + +```sh +export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile +export CROSS_COMPILE=/usr/bin/arm-none-eabi- +``` + + + + +Your setup is now complete. diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 09efdecf770..876cbb9b4d2 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -34,7 +34,7 @@ macOS 14.x (Sonoma) Finder may report an "Error code -36" when copying ` Date: Sun, 9 Jun 2024 21:32:26 -0700 Subject: [PATCH 1085/1130] refactor(docs): Split up troubleshooting page into a section --- docs/blog/2023-10-05-zmk-sotf-6.md | 2 +- docs/docs/customization.md | 2 +- docs/docs/features/bluetooth.md | 50 +----- docs/docs/troubleshooting.md | 143 ------------------ docs/docs/troubleshooting/building-issues.md | 54 +++++++ .../troubleshooting/connection-issues.mdx | 140 +++++++++++++++++ docs/docs/troubleshooting/flashing-issues.md | 29 ++++ docs/docs/troubleshooting/index.mdx | 10 ++ docs/docs/user-setup.mdx | 2 +- docs/sidebars.js | 15 +- 10 files changed, 251 insertions(+), 196 deletions(-) delete mode 100644 docs/docs/troubleshooting.md create mode 100644 docs/docs/troubleshooting/building-issues.md create mode 100644 docs/docs/troubleshooting/connection-issues.mdx create mode 100644 docs/docs/troubleshooting/flashing-issues.md create mode 100644 docs/docs/troubleshooting/index.mdx diff --git a/docs/blog/2023-10-05-zmk-sotf-6.md b/docs/blog/2023-10-05-zmk-sotf-6.md index fb8dc131d21..bd818cf67dc 100644 --- a/docs/blog/2023-10-05-zmk-sotf-6.md +++ b/docs/blog/2023-10-05-zmk-sotf-6.md @@ -105,7 +105,7 @@ Note that documentation is still lacking for utilizing more than one peripheral [petejohanson] contributed a fix to release held keys on peripheral disconnect [#1340](https://github.com/zmkfirmware/zmk/pull/1340), which makes scenarios where a split disconnects unexpectedly less painful. -[petejohanson] also improved [the `settings_reset` shield](/docs/troubleshooting#split-keyboard-halves-unable-to-pair) by making it clear bonds more reliably, and allow it to build for all boards in [#1879](https://github.com/zmkfirmware/zmk/pull/1879). +[petejohanson] also improved [the `settings_reset` shield](/docs/troubleshooting/connection-issues#split-keyboard-halves-unable-to-pair) by making it clear bonds more reliably, and allow it to build for all boards in [#1879](https://github.com/zmkfirmware/zmk/pull/1879). [petejohanson] and [xudongzheng] contributed additional split connectivity improvements, via using directed advertising in [#1913](https://github.com/zmkfirmware/zmk/pull/1913) and improving the robustness of central scanning in [#1912](https://github.com/zmkfirmware/zmk/pull/1912). diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 96b5e4ea9a0..87d78a22b1c 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -50,7 +50,7 @@ It is also possible to build firmware locally on your computer by following the For normal keyboards, follow the same flashing instructions as before to flash your updated firmware. For split keyboards, only the central (left) side will need to be reflashed if you are just updating your keymap. -More troubleshooting information for split keyboards can be found [here](troubleshooting.md#split-keyboard-halves-unable-to-pair). +More troubleshooting information for split keyboards can be found [here](troubleshooting/connection-issues.mdx#split-keyboard-halves-unable-to-pair). ## Building Additional Keyboards diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index 28ba21367d1..d148acd82db 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -47,52 +47,4 @@ Firmware changes that would modify the descriptor include the following: While the descriptor refresh happens on boot for USB, hosts will frequently cache this descriptor for BLE devices. In order to refresh this cache, you need to remove the keyboard from the host device, clear the profile associated with the host on the keyboard, then pair again. -For Windows systems you might need to follow the instructions in [this troubleshooting section](#windows-connected-but-not-working) below. - -## Troubleshooting - -### Connectivity Issues - -Some users may experience a poor connection between the keyboard and the host. This might be due to poor quality BLE hardware, a metal enclosure on the keyboard or host, or the distance between them. Increasing the transmit power of the keyboard's BLE radio may reduce the severity of this problem. To do this, set the `CONFIG_BT_CTLR_TX_PWR_PLUS_8` configuration value in the `.conf` file of your user config directory as such: - -```ini -CONFIG_BT_CTLR_TX_PWR_PLUS_8=y -``` - -For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/3.5.0/kconfig.html#CONFIG_BT_CTLR_TX_PWR) - -:::info -This setting can also improve the connection strength between the keyboard halves for split keyboards. -::: - -### Using bluetooth output with USB power - -If you want to test bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../behaviors/outputs.md) to prefer sending keystrokes over bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. - -### Issues with dual boot setups - -Since ZMK associates pairing/bond keys with hardware addresses of hosts, you cannot pair to two different operating systems in a dual boot system at the same time. -While you can find [documented workarounds](https://wiki.archlinux.org/title/bluetooth#Dual_boot_pairing) that involve copying pairing keys across operating systems and use both OS with a single profile, they can be fairly involved and should be followed with caution. - -### macOS Connected But Not Working - -If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding issue, macOS may report the keyboard as connected, but fail to actually work. If this occurs: - -1. Remove the keyboard from macOS using the Bluetooth control panel. -1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the macOS device is active, by pressing the correct keys for your particular keymap. -1. Try connecting again from macOS. - -### Windows Connected But Not Working - -Occasionally pairing the keyboard to a Windows device might result in a state where the keyboard is connected but does not send any key strokes. -If this occurs: - -1. Remove the keyboard from Windows using the Bluetooth settings. -1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the Windows device is active, by pressing the correct keys for your particular keymap. -1. Turn off Bluetooth from Windows settings, then turn it back on. -1. Pair the keyboard to the Windows device. - -If this doesn't help, try following the procedure above but replace step 3 with one of the following: - -- Restart the Windows device -- Open "Device Manager," turn on "Show hidden devices" from the "View" menu, then find and delete the keyboard under the "Bluetooth" item +For Windows systems you might need to follow the additional instructions in [the section on troubleshooting connection issues](troubleshooting/connection-issues.mdx#windows-connected-but-not-working). diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md deleted file mode 100644 index 876cbb9b4d2..00000000000 --- a/docs/docs/troubleshooting.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Troubleshooting -sidebar_title: Troubleshooting ---- - -The following page provides suggestions for common errors that may occur during firmware compilation or other issues with keyboard usage. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite). - -Please also see [the troubleshooting section](features/bluetooth.md#troubleshooting) under the Bluetooth feature page for issues related to bluetooth. - -### File Transfer Error - -Variations of the warnings shown below occur when flashing the `.uf2` onto the microcontroller. This is because the microcontroller resets itself before the OS receives confirmation that the file transfer is complete. Errors like this are normal and can generally be ignored. Verification of a functional board can be done by attempting to pair your newly flashed keyboard to your computer via Bluetooth or plugging in a USB cable if `ZMK_USB` is enabled in your Kconfig.defconfig. - -| ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/windows.png) | -| :------------------------------------------------------------------------------: | -| An example of the file transfer error on Windows 10 | - -| ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/linux.png) | -| :----------------------------------------------------------------------------: | -| An example of the file transfer error on Linux | - -| ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/mac.png) | -| :--------------------------------------------------------------------------: | -| An example of the file transfer error on macOS | - -### macOS Ventura error - -macOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. Issue is fixed in macOS version 13.1. - -### macOS Sonoma error - -macOS 14.x (Sonoma) Finder may report an "Error code -36" when copying `.uf2` files into microcontrollers. A similar "fcopyfile failed: Input/output error" will also be reported when copying is performed using Terminal command line. These errors can be ignored because they are reported when the bootloader disconnects automatically after the uf2 file is copied successfully. - -### CMake Error - -An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. -For more information, see [Zephyr's CMake Package](https://docs.zephyrproject.org/3.5.0/build/zephyr_cmake_package.html). - -### West Build Errors - -West build errors usually indicate syntax problems in the `.keymap` file during the compilation process. The following are some examples and root causes. - -:::note -If you are reviewing these errors in the GitHub Actions tab, they can be found in the `West Build` step of the build process. -::: - -#### Keymap error - -If you get an error stating `Keymap node not found, check a keymap is available and is has compatible = "zmk,keymap" set` this is an indication that the build process cannot find the keymap. Double check that the `.keymap` file is present and has been discovered by the build process. This can be checked by looking for a line in the build log stating `-- Using keymap file: /path/to/keymap/file/.keymap`. Inside the keymap file ensure the keymap node has `compatible = zmk,keymap` and it's not misspelled. For more information see the [Keymap](features/keymaps.mdx) and [Config](config/index.md) documentation. - -#### Devicetree errors - -A `devicetree error` followed by a reference to the line number on `.keymap` refers to an issue at the exact line position in that file. For example, below error message indicates a missing `;` at line 109 of the `cradio.keymap` file: - -``` -devicetree error: /__w/zmk-config/zmk-config/config/cradio.keymap:109 (column 4): parse error: expected ';' or ',' -``` - -A `devicetree error` followed by an `empty_file.c` reference with `lacks #binding-cells` string indicates possible problems with improper parameters for specific bindings: - -``` -devicetree error: lacks #binding-cells -``` - -This error can be triggered by incorrect binding syntax such as `&kp BT_SEL 0` instead of `&bt BT_SEL 0`. - -A `devicetree_generated.h` error that follows with an "undeclared here" string indicates a problem with key bindings, like behavior nodes (e.g. `&kp` or `&mt`) with incorrect number of parameters: - -``` -/__w/zmk-config/zmk-config/build/zephyr/include/generated/devicetree_generated.h:3756:145: error: 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label' undeclared here (not in a function); did you mean 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_16_PH'? -``` - -In this example, the error string `DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label` indicates a problem with the key binding in position `12` in the `symbol_layer` of the keymap. - -:::info -Key positions are numbered starting from `0` at the top left key on the keymap, incrementing horizontally, row by row. -::: - -:::tip -A common mistake that leads to this error is to use [key press keycodes](behaviors/key-press.md) without the leading `&kp` binding. That is, having entries such as `SPACE` that should have been `&kp SPACE`. -::: - -### Split Keyboard Halves Unable to Pair - -Split keyboard halves will automatically pair with one another, but there are some cases where this breaks, and the pairing needs to be reset, for example: - -- Switching which halves are the central/peripheral. -- Replacing the controller for one of the halves. - -These issues can be resolved by flashing a settings reset firmware to both controllers. - -:::warning - -This procedure will erase all settings, such as Bluetooth profiles, output selection, RGB underglow color, etc. - -::: - -First, acquire the reset UF2 image file with one of the following options: - -#### Option 1: Build Reset UF2 in 'zmk-config' - -Find the `build.yaml` file in your `zmk-config` folder and add an additional settings reset build for the board used by your split keyboard. For example assuming that the config repo is setup for nice!nano v2 with Corne, append the `settings_reset` shield to the `build.yaml` file as follows: - -```yml -include: - - board: nice_nano_v2 - shield: corne_left - - board: nice_nano_v2 - shield: corne_right - - board: nice_nano_v2 - shield: settings_reset -``` - -Save the file, commit the changes and push them to GitHub. Download the new firmware zip file build by the latest GitHub Actions job. In it you will find an additional `settings_reset` UF2 image file. - -#### Option 2: Download Reset UF2 from ZMK's Workflow - -1. [Open the GitHub `Actions` tab and select the `Build` workflow](https://github.com/zmkfirmware/zmk/actions?query=workflow%3ABuild+branch%3Amain+event%3Apush). -1. Find one of the 'results' for which the core-coverage job was successfully run, indicated by a green checkmark in the core-coverage bubble like the image example below. -1. From the next page under "Artifacts", download and unzip the `-settings_reset-zmk` zip file for the UF2 image. - -| ![Successful core-coverage Job](../docs/assets/troubleshooting/splitpairing/corecoverage.png) | -| :-------------------------------------------------------------------------------------------: | -| An example of a successful core-coverage job which will produce a settings_reset firmware. | - -#### Reset Split Keyboard Procedure - -Perform the following steps to reset both halves of your split keyboard: - -1. Put each half of the split keyboard into bootloader mode. -1. Flash one of the halves of the split with the downloaded settings reset UF2 image. -1. Repeat step 2 with the other half of the split keyboard. -1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half). - -After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. - -Once this is done, you can remove/forget the keyboard on each host device and pair it again. - -:::info - -The settings reset firmware has Bluetooth disabled to prevent the two sides from automatically re-pairing until you are done resetting them both. You will not be able to pair your keyboard or see it in any Bluetooth device lists until you have flashed the normal firmware again. - -::: diff --git a/docs/docs/troubleshooting/building-issues.md b/docs/docs/troubleshooting/building-issues.md new file mode 100644 index 00000000000..e37d3934d79 --- /dev/null +++ b/docs/docs/troubleshooting/building-issues.md @@ -0,0 +1,54 @@ +--- +title: Building Issues +sidebar_label: Building Issues +description: Troubleshooting issues when compiling ZMK firmware. +--- + +## CMake Error + +An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. +For more information, see [Zephyr's CMake Package](https://docs.zephyrproject.org/3.5.0/build/zephyr_cmake_package.html). + +## West Build Errors + +West build errors usually indicate syntax problems in the `.keymap` file during the compilation process. The following are some examples and root causes. + +:::note +If you are reviewing these errors in the GitHub Actions tab, they can be found in the `West Build` step of the build process. +::: + +### Keymap Error + +If you get an error stating `Keymap node not found, check a keymap is available and is has compatible = "zmk,keymap" set` this is an indication that the build process cannot find the keymap. Double check that the `.keymap` file is present and has been discovered by the build process. This can be checked by looking for a line in the build log stating `-- Using keymap file: /path/to/keymap/file/.keymap`. Inside the keymap file ensure the keymap node has `compatible = zmk,keymap` and it's not misspelled. For more information see the [Keymap](features/keymaps.mdx) and [Config](config/index.md) documentation. + +### Devicetree Errors + +A `devicetree error` followed by a reference to the line number on `.keymap` refers to an issue at the exact line position in that file. For example, below error message indicates a missing `;` at line 109 of the `cradio.keymap` file: + +``` +devicetree error: /__w/zmk-config/zmk-config/config/cradio.keymap:109 (column 4): parse error: expected ';' or ',' +``` + +A `devicetree error` followed by an `empty_file.c` reference with `lacks #binding-cells` string indicates possible problems with improper parameters for specific bindings: + +``` +devicetree error: lacks #binding-cells +``` + +This error can be triggered by incorrect binding syntax such as `&kp BT_SEL 0` instead of `&bt BT_SEL 0`. + +A `devicetree_generated.h` error that follows with an "undeclared here" string indicates a problem with key bindings, like behavior nodes (e.g. `&kp` or `&mt`) with incorrect number of parameters: + +``` +/__w/zmk-config/zmk-config/build/zephyr/include/generated/devicetree_generated.h:3756:145: error: 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label' undeclared here (not in a function); did you mean 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_16_PH'? +``` + +In this example, the error string `DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label` indicates a problem with the key binding in position `12` in the `symbol_layer` of the keymap. + +:::info +Key positions are numbered starting from `0` at the top left key on the keymap, incrementing horizontally, row by row. +::: + +:::tip +A common mistake that leads to this error is to use [key press keycodes](behaviors/key-press.md) without the leading `&kp` binding. That is, having entries such as `SPACE` that should have been `&kp SPACE`. +::: diff --git a/docs/docs/troubleshooting/connection-issues.mdx b/docs/docs/troubleshooting/connection-issues.mdx new file mode 100644 index 00000000000..59a6a20811d --- /dev/null +++ b/docs/docs/troubleshooting/connection-issues.mdx @@ -0,0 +1,140 @@ +--- +title: Connection Issues +sidebar_label: Connection Issues +description: Troubleshooting wireless connection issues of ZMK devices. +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +export const Uf2Tabs = (props) => ( + + {/* eslint-disable-next-line */} + {props.children} + + +); + +## Split Keyboard Halves Unable to Pair + +Split keyboard halves will automatically pair with one another, but there are some cases where this breaks, and the pairing needs to be reset, for example: + +- Switching which halves are the central/peripheral. +- Replacing the controller for one of the halves. + +These issues can be resolved by flashing a settings reset firmware to both controllers. + +:::warning + +This procedure will erase all settings, such as Bluetooth profiles, output selection, RGB underglow color, etc. + +::: + +### Acquiring a Reset UF2 + +First, acquire the reset UF2 image file with one of the following options: + + + + +Find the `build.yaml` file in your `zmk-config` folder and add an additional settings reset build for the board used by your split keyboard. For example assuming that the config repo is setup for nice!nano v2 with Corne, append the `settings_reset` shield to the `build.yaml` file as follows: + +```yml +include: + - board: nice_nano_v2 + shield: corne_left + - board: nice_nano_v2 + shield: corne_right + - board: nice_nano_v2 + shield: settings_reset +``` + +Save the file, commit the changes and push them to GitHub. Download the new firmware zip file build by the latest GitHub Actions job. In it you will find an additional `settings_reset` UF2 image file. + + + + +1. [Open the GitHub `Actions` tab and select the `Build` workflow](https://github.com/zmkfirmware/zmk/actions?query=workflow%3ABuild+branch%3Amain+event%3Apush). +1. Find one of the 'results' for which the core-coverage job was successfully run, indicated by a green checkmark in the core-coverage bubble like the image example below. +1. From the next page under "Artifacts", download and unzip the `-settings_reset-zmk` zip file for the UF2 image. + +| ![Successful core-coverage Job](../../docs/assets/troubleshooting/splitpairing/corecoverage.png) | +| :----------------------------------------------------------------------------------------------: | +| An example of a successful core-coverage job which will produce a settings_reset firmware. | + + + + +### Reset Split Keyboard Procedure + +Perform the following steps to reset **_both_** halves of your split keyboard: + +1. Put each half of the split keyboard into bootloader mode. +1. Flash one of the halves of the split with the downloaded settings reset UF2 image. +1. Repeat step 2 with the other half of the split keyboard. +1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half). + +After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. + +Once this is done, you can remove/forget the keyboard on each host device and pair it again. + +:::info + +The settings reset firmware has Bluetooth disabled to prevent the two sides from automatically re-pairing until you are done resetting them both. You will not be able to pair your keyboard or see it in any Bluetooth device lists until you have flashed the normal firmware again. + +::: + +## Issues While Connected + +### Unreliable/Weak Connection + +Some users may experience a poor connection between the keyboard and the host. This might be due to poor quality BLE hardware, a metal enclosure on the keyboard or host, or the distance between them. Increasing the transmit power of the keyboard's BLE radio may reduce the severity of this problem. To do this, set the `CONFIG_BT_CTLR_TX_PWR_PLUS_8` configuration value in the `.conf` file of your user config directory as such: + +```ini +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +``` + +For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/3.5.0/kconfig.html#CONFIG_BT_CTLR_TX_PWR) + +:::info +This setting can also improve the connection strength between the keyboard halves for split keyboards. +::: + +### Using Bluetooth Output With USB Power + +If you want to test Bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../behaviors/outputs.md) to prefer sending keystrokes over Bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. + +### Issues With Dual Boot Setups + +Since ZMK associates pairing/bond keys with hardware addresses of hosts, you cannot pair to two different operating systems in a dual boot system at the same time. +While you can find [documented workarounds](https://wiki.archlinux.org/title/bluetooth#Dual_boot_pairing) that involve copying pairing keys across operating systems and use both OS with a single profile, they can be fairly involved and should be followed with caution. + +### macOS Connected but Not Working + +If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding issue, macOS may report the keyboard as connected, but fail to actually work. If this occurs: + +1. Remove the keyboard from macOS using the Bluetooth control panel. +1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the macOS device is active, by pressing the correct keys for your particular keymap. +1. Try connecting again from macOS. + +### Windows Connected but Not Working + +Occasionally pairing the keyboard to a Windows device might result in a state where the keyboard is connected but does not send any key strokes. +If this occurs: + +1. Remove the keyboard from Windows using the Bluetooth settings. +1. Invoke `&bt BT_CLR` on the keyboard while the profile associated with the Windows device is active, by pressing the correct keys for your particular keymap. +1. Turn off Bluetooth from Windows settings, then turn it back on. +1. Pair the keyboard to the Windows device. + +If this doesn't help, try following the procedure above but replace step 3 with one of the following: + +- Restart the Windows device +- Open "Device Manager," turn on "Show hidden devices" from the "View" menu, then find and delete the keyboard under the "Bluetooth" item diff --git a/docs/docs/troubleshooting/flashing-issues.md b/docs/docs/troubleshooting/flashing-issues.md new file mode 100644 index 00000000000..699555d5f92 --- /dev/null +++ b/docs/docs/troubleshooting/flashing-issues.md @@ -0,0 +1,29 @@ +--- +title: Flashing Issues +sidebar_label: Flashing Issues +description: Troubleshooting issues when flashing ZMK firmware to devices. +--- + +## File Transfer Error + +Variations of the warnings shown below occur when flashing the `.uf2` onto the microcontroller. This is because the microcontroller resets itself before the OS receives confirmation that the file transfer is complete. Errors like this are normal and can generally be ignored. Verification of a functional board can be done by attempting to pair your newly flashed keyboard to your computer via Bluetooth or plugging in a USB cable if `ZMK_USB` is enabled in your Kconfig.defconfig. + +| ![Example Error Screen](../../docs/assets/troubleshooting/filetransfer/windows.png) | +| :---------------------------------------------------------------------------------: | +| An example of the file transfer error on Windows 10 | + +| ![Example Error Screen](../../docs/assets/troubleshooting/filetransfer/linux.png) | +| :-------------------------------------------------------------------------------: | +| An example of the file transfer error on Linux | + +| ![Example Error Screen](../../docs/assets/troubleshooting/filetransfer/mac.png) | +| :-----------------------------------------------------------------------------: | +| An example of the file transfer error on macOS | + +## macOS Ventura Error + +macOS 13.0 (Ventura) Finder may report an error code 100093 when copying `.uf2` files into microcontrollers. This bug is limited to the operating system's Finder. You can work around it by copying on Terminal command line or use a third party file manager. Issue is fixed in macOS version 13.1. + +## macOS Sonoma Error + +macOS 14.x (Sonoma) Finder may report an "Error code -36" when copying `.uf2` files into microcontrollers. A similar "fcopyfile failed: Input/output error" will also be reported when copying is performed using Terminal command line. These errors can be ignored because they are reported when the bootloader disconnects automatically after the uf2 file is copied successfully. diff --git a/docs/docs/troubleshooting/index.mdx b/docs/docs/troubleshooting/index.mdx new file mode 100644 index 00000000000..45a93191b16 --- /dev/null +++ b/docs/docs/troubleshooting/index.mdx @@ -0,0 +1,10 @@ +--- +title: Troubleshooting +sidebar_label: Troubleshooting +--- + +import DocCardList from "@theme/DocCardList"; + +The following pages provide suggestions for common errors that may occur while setting up or using devices running ZMK. If the information provided is insufficient to resolve an issue, feel free to seek out additional help from the [ZMK Discord](https://zmk.dev/community/discord/invite). + + diff --git a/docs/docs/user-setup.mdx b/docs/docs/user-setup.mdx index 355fc51d5e2..78d4362857e 100644 --- a/docs/docs/user-setup.mdx +++ b/docs/docs/user-setup.mdx @@ -225,7 +225,7 @@ For split keyboards, after flashing each half individually you can connect them :::note If you have issues connecting the halves, make sure that both sides are getting powered properly through USB or batteries, then follow the -[recommended troubleshooting procedure](troubleshooting.md#split-keyboard-halves-unable-to-pair). This is typically necessary if you +[recommended troubleshooting procedure](troubleshooting/connection-issues.mdx#split-keyboard-halves-unable-to-pair). This is typically necessary if you swapped firmware sides between controllers, like flashing left side firmware to the same controller after flashing the right, or vice versa. ::: diff --git a/docs/sidebars.js b/docs/sidebars.js index a3b4ea2ce74..e8c715c8c76 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -6,7 +6,20 @@ module.exports = { "faq", "user-setup", "customization", - "troubleshooting", + { + type: "category", + label: "Troubleshooting", + link: { + type: "doc", + id: "troubleshooting/index", + }, + collapsed: true, + items: [ + "troubleshooting/building-issues", + "troubleshooting/flashing-issues", + "troubleshooting/connection-issues", + ], + }, ], Features: [ "features/keymaps", From 7c09eb217e8ef8e667db15bf71efa3748a010c16 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 9 Jun 2024 21:35:10 -0700 Subject: [PATCH 1086/1130] refactor(docs): Document and enforce header casing conventions --- docs/docs/behaviors/caps-word.md | 4 ++-- docs/docs/behaviors/hold-tap.mdx | 2 +- docs/docs/behaviors/index.mdx | 18 ++++++++-------- docs/docs/behaviors/key-repeat.md | 2 +- docs/docs/behaviors/layers.md | 4 ++-- docs/docs/behaviors/macros.md | 4 ++-- docs/docs/behaviors/mod-morph.md | 2 +- docs/docs/behaviors/soft-off.md | 2 +- docs/docs/behaviors/sticky-key.md | 2 +- docs/docs/behaviors/sticky-layer.md | 2 +- docs/docs/config/battery.md | 2 +- docs/docs/config/encoders.md | 4 ++-- docs/docs/development/build-flash.mdx | 2 +- docs/docs/development/documentation.md | 8 ++++++- docs/docs/development/ide-integration.mdx | 4 ++-- docs/docs/development/new-behavior.mdx | 26 +++++++++++------------ docs/docs/development/setup/native.mdx | 4 ++-- docs/docs/features/backlight.mdx | 4 ++-- docs/docs/features/beta-testing.mdx | 2 +- docs/docs/features/combos.md | 2 +- docs/docs/features/debouncing.md | 2 +- docs/docs/features/keymaps.mdx | 2 +- docs/docs/features/soft-off.md | 4 ++-- docs/docs/features/underglow.md | 6 +++--- docs/docs/intro.md | 2 +- docs/docs/user-setup.mdx | 4 ++-- 26 files changed, 63 insertions(+), 57 deletions(-) diff --git a/docs/docs/behaviors/caps-word.md b/docs/docs/behaviors/caps-word.md index 4551884dd50..c79ebae01a6 100644 --- a/docs/docs/behaviors/caps-word.md +++ b/docs/docs/behaviors/caps-word.md @@ -21,7 +21,7 @@ Example: ### Configuration -#### Continue List +#### Continue list By default, the caps word will remain active when any alphanumeric character or underscore (`UNDERSCORE`), backspace (`BACKSPACE`), or delete (`DELETE`) characters are pressed. Any other non-modifier keycode sent will turn off caps word. If you would like to override this, you can set a new array of keys in the `continue-list` property in your keymap: @@ -37,7 +37,7 @@ By default, the caps word will remain active when any alphanumeric character or }; ``` -#### Applied Modifier(s) +#### Applied modifier(s) In addition, if you would like _multiple_ modifiers, instead of just `MOD_LSFT`, you can override the `mods` property: diff --git a/docs/docs/behaviors/hold-tap.mdx b/docs/docs/behaviors/hold-tap.mdx index 5217cf79e29..20aaf810a8c 100644 --- a/docs/docs/behaviors/hold-tap.mdx +++ b/docs/docs/behaviors/hold-tap.mdx @@ -35,7 +35,7 @@ When the hold-tap key is released and the hold behavior has not been triggered, ![Hold-tap comparison](../assets/hold-tap/comparison.svg) -### Basic usage +### Basic Usage For basic usage, please see the [mod-tap](mod-tap.md) and [layer-tap](layers.md#layer-tap) pages. diff --git a/docs/docs/behaviors/index.mdx b/docs/docs/behaviors/index.mdx index 7cd82d3e4b8..bdacc209ad7 100644 --- a/docs/docs/behaviors/index.mdx +++ b/docs/docs/behaviors/index.mdx @@ -9,7 +9,7 @@ sidebar_label: Overview Below is a summary of pre-defined behavior bindings and user-definable behaviors available in ZMK, with references to documentation pages describing them. -## Key press behaviors +## Key Press Behaviors | Binding | Behavior | Description | | ------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -21,14 +21,14 @@ Below is a summary of pre-defined behavior bindings and user-definable behaviors | `&caps_word` | [Caps Word](caps-word.md) | Behaves similar to caps lock, but automatically deactivates when any key not in a continue list is pressed, or if the caps word key is pressed again | | `&key_repeat` | [Key Repeat](key-repeat.md) | Sends again whatever keycode was last sent | -## Miscellaneous behaviors +## Miscellaneous Behaviors | Binding | Behavior | Description | | -------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | `&trans` | [Transparent](misc.md#transparent) | Passes the key press down to the next active layer in the stack for processing | | `&none` | [None](misc.md#none) | Swallows and stops the key press, no keycode will be sent nor will the key press be passed down to the next active layer in the stack | -## Layer navigation behaviors +## Layer Navigation Behaviors | Binding | Behavior | Description | | ------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------- | @@ -38,41 +38,41 @@ Below is a summary of pre-defined behavior bindings and user-definable behaviors | `&tog` | [Toggle Layer](layers.md#toggle-layer) | Enables a layer until the layer is manually disabled | | `&sl` | [Sticky Layer](sticky-layer.md) | Activates a layer until another key is pressed, then deactivates it | -## Mouse emulation behaviors +## Mouse Emulation Behaviors | Binding | Behavior | Description | | ------- | ----------------------------------------------------------- | ------------------------------- | | `&mkp` | [Mouse Button Press](mouse-emulation.md#mouse-button-press) | Emulates pressing mouse buttons | -## Reset behaviors +## Reset Behaviors | Binding | Behavior | Description | | ------------- | --------------------------------------- | ---------------------------------------------------------------------------------------- | | `&sys_reset` | [Reset](reset.md#reset) | Resets the keyboard and re-runs the firmware flashed to the device | | `&bootloader` | [Bootloader](reset.md#bootloader-reset) | Resets the keyboard and puts it into bootloader mode, allowing you to flash new firmware | -## Output selection behaviors +## Output Selection Behaviors | Binding | Behavior | Description | | ------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `&bt` | [Bluetooth](bluetooth.md#bluetooth-behavior) | Completes a bluetooth action given on press, for example switching between devices | | `&out` | [Output Selection](outputs.md#output-selection-behavior) | Allows selecting whether output is sent to the USB or bluetooth connection when both are connected | -## Lighting behaviors +## Lighting Behaviors | Binding | Behavior | Description | | --------- | ---------------------------------------------- | ---------------------------------------------------------------------------- | | `&rgb_ug` | [RGB Underglow](underglow.md#behavior-binding) | Controls the RGB underglow, usually placed underneath the keyboard | | `&bl` | [Backlight](backlight.md#behavior-binding) | Controls the keyboard backlighting, usually placed through or under switches | -## Power management behaviors +## Power Management Behaviors | Binding | Behavior | Description | | ------------ | --------------------------------------------- | --------------------------------------------------------------- | | `&ext_power` | [Power management](power.md#behavior-binding) | Allows enabling or disabling the VCC power output to save power | | `&soft_off` | [Soft off](soft-off.md#behavior-binding) | Turns the keyboard off. | -## User-defined behaviors +## User-Defined Behaviors | Behavior | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | diff --git a/docs/docs/behaviors/key-repeat.md b/docs/docs/behaviors/key-repeat.md index 9772fdb4e0a..2187008417a 100644 --- a/docs/docs/behaviors/key-repeat.md +++ b/docs/docs/behaviors/key-repeat.md @@ -19,7 +19,7 @@ Example: ### Configuration -#### Usage Pages +#### Usage pages By default, the key repeat will only track the last pressed key from the HID "Key" usage page, and ignore events from other usages, e.g. Consumer page. diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 7cfb4df7e00..511fbe08b7a 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -8,7 +8,7 @@ sidebar_label: Layers Often, you may want a certain key position to alter which layers are enabled, change the default layer, etc. Some of those behaviors are still in the works; the ones that are working now are documented here. -## Defines To Refer To Layers +## Defines to Refer to Layers When working with layers, you may have several different key positions with bindings that enable/disable those layers. To make it easier to refer to those layers in your key bindings, and to change which layers are where later, you can @@ -41,7 +41,7 @@ Example: &mo LOWER ``` -## Layer-tap +## Layer-Tap The "layer-tap" behavior enables a layer when a key is held, and outputs a [keypress](key-press.md) when the key is only tapped for a short time. diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index 37ca80ffbb5..50c8945eb80 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -223,7 +223,7 @@ Common examples are enabling one or more modifiers when the layer is active, or To achieve this, a combination of a 0ms wait time and splitting the press and release between a `¯o_pause_for_release` is used: -#### Layer + Modifier +#### Layer + modifier ```dts /** @@ -256,7 +256,7 @@ lm: lm { }; ``` -#### Layer + Underglow Color +#### Layer + underglow color To trigger a different underglow when the macro is pressed, and when it is released, we use the macro "press" activation mode whenever triggering the `&rgb_ug` behavior: diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index 7ecb9ab8983..8949ec2c788 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -65,7 +65,7 @@ Example: mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; ``` -### Advanced configuration +### Advanced Configuration `keep-mods` diff --git a/docs/docs/behaviors/soft-off.md b/docs/docs/behaviors/soft-off.md index 14b5f36aee7..086b5d75d75 100644 --- a/docs/docs/behaviors/soft-off.md +++ b/docs/docs/behaviors/soft-off.md @@ -23,7 +23,7 @@ Example: ### Configuration -#### Hold Time +#### Hold time By default, the keyboard will be turned off as soon as the key bound to the behavior is released, even if the key is only tapped briefly. If you would prefer that the key need be held a certain amount of time before releasing, you can set the `hold-time-ms` to a non-zero value in your keymap: diff --git a/docs/docs/behaviors/sticky-key.md b/docs/docs/behaviors/sticky-key.md index 8c3962f5450..30345882a66 100644 --- a/docs/docs/behaviors/sticky-key.md +++ b/docs/docs/behaviors/sticky-key.md @@ -81,7 +81,7 @@ This configuration would apply to all sticky keys. This may not be appropriate i }; ``` -### Advanced usage +### Advanced Usage Sticky keys can be combined; if you tap `&sk LCTRL` and then `&sk LSHIFT` and then `&kp A`, the output will be ctrl+shift+a. diff --git a/docs/docs/behaviors/sticky-layer.md b/docs/docs/behaviors/sticky-layer.md index 41c2ccf55d7..6a231f08995 100644 --- a/docs/docs/behaviors/sticky-layer.md +++ b/docs/docs/behaviors/sticky-layer.md @@ -36,7 +36,7 @@ You can configure a different `release-after-ms` in your keymap: }; ``` -### Advanced usage +### Advanced Usage Sticky layers behave slightly different from sticky keys. They are configured to `quick-release`. This means that the layer is released immediately when another key is pressed. "Normal" sticky keys are not `quick-release`; they are released when the next key is released. This makes it possible to combine sticky layers and sticky keys as such: tap `&sl 1`, tap `&sk LSHIFT` on layer 1, tap `&kp A` on base layer to output shift+A. diff --git a/docs/docs/config/battery.md b/docs/docs/config/battery.md index c95e78841e8..4596395b806 100644 --- a/docs/docs/config/battery.md +++ b/docs/docs/config/battery.md @@ -28,7 +28,7 @@ On macOS the BLE battery reporting packets can cause the computer to wakeup from ::: -### Peripheral battery monitoring +### Peripheral Battery Monitoring You can [configure ZMK to allow support for peripheral battery monitoring over BLE](system.md#split-keyboards) (e.g. when having a split keyboard with two independent and wirelessly connected sides). If you want to report the battery levels of both sides of a split keyboard, you should have both `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY` and `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING` set to `y`. diff --git a/docs/docs/config/encoders.md b/docs/docs/config/encoders.md index b242f49b5ba..c8966846efb 100644 --- a/docs/docs/config/encoders.md +++ b/docs/docs/config/encoders.md @@ -29,7 +29,7 @@ If `CONFIG_EC11` is enabled, exactly one of the following options must be set to ### Devicetree -#### Keymap Sensor Config +#### Keymap sensor config For shields/boards that export a `sensors` node configuration label, both global and per-sensor settings can be set by overriding the properties there. @@ -69,7 +69,7 @@ Definition file: [zmk/app/drivers/zephyr/dts/bindings/zmk,keymap-sensors.yaml](h | ----------------------- | ---- | --------------------------------------------------------------- | ------- | | `triggers-per-rotation` | int | Number of times to trigger the bound behavior per full rotation | | -#### EC11 Nodes +#### EC11 nodes Applies to: `compatible = "alps,ec11"` diff --git a/docs/docs/development/build-flash.mdx b/docs/docs/development/build-flash.mdx index 2cbcf5b82ef..20e9e20a34c 100644 --- a/docs/docs/development/build-flash.mdx +++ b/docs/docs/development/build-flash.mdx @@ -77,7 +77,7 @@ This produces `left` and `right` subfolders under the `build` directory and two Build times can be significantly reduced after the initial build by omitting all build arguments except the build directory, e.g. `west build -d build/left`. The additional options and intermediate build outputs from your initial build are cached and reused for unchanged files. ::: -### Building with external modules +### Building With External Modules ZMK supports loading additional boards, shields, code, etc. from [external Zephyr modules](https://docs.zephyrproject.org/3.5.0/develop/modules.html), facilitating out-of-tree management and versioning independent of the ZMK repository. To build with any additional modules, use the `ZMK_EXTRA_MODULES` define added to your `west build` command. diff --git a/docs/docs/development/documentation.md b/docs/docs/development/documentation.md index 56c4d27699b..169642ba714 100644 --- a/docs/docs/development/documentation.md +++ b/docs/docs/development/documentation.md @@ -5,7 +5,7 @@ sidebar_label: Documentation This document outlines how to test your documentation changes locally and prepare the changes for a pull request. -The documentation is written with [Docusaurus](https://docusaurus.io/). The ZMK source code has all of the necessary Docusaurus dependencies included but referencing their documentation can be helpful at times. +The documentation is written with [Docusaurus](https://docusaurus.io/). The ZMK source code has all of the necessary Docusaurus dependencies included, but referencing their documentation can be helpful at times. The general process for updating the ZMK documentation is: @@ -52,6 +52,12 @@ The check commands can be run with the following procedure in a terminal that's If any of the above steps throw an error, they need to be addressed and all of the checks re-run prior to submitting a pull request. ::: +:::note +The documentation uses American English spelling and grammar conventions. Title case is used for the first three heading levels, with sentence case used beyond that. + +Please make sure your changes conform to these conventions - prettier and lint are unfortunately unable to do this automatically. +::: + ## Submitting a Pull Request Once the above sections are complete the documentation updates are ready to submit as a pull request. diff --git a/docs/docs/development/ide-integration.mdx b/docs/docs/development/ide-integration.mdx index 87a5a4caf55..cee12f4b3bf 100644 --- a/docs/docs/development/ide-integration.mdx +++ b/docs/docs/development/ide-integration.mdx @@ -51,7 +51,7 @@ Change these options: If you are developing inside a Docker container, set the IntelliSense mode to `linux-gcc-arm` regardless of the host operating system. -#### Compiler Path +#### Compiler path Open VS Code's integrated terminal and run the following command: @@ -79,7 +79,7 @@ If you are building for an platform other than ARM, replace `/arm-zephyr-eabi/bi /home/marvin/.local/zephyr-sdk-0.15.2/riscv64-zephyr-elf/bin/riscv64-zephyr-elf-gcc ``` -#### Compiler Commands Path +#### Compiler commands path When building with all default options, the path to the compilation database file is `${workspaceFolder}/app/build/compile_commands.json` as shown in the table above, diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index 914abf52063..dca19288dc0 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -35,7 +35,7 @@ The following resources are provided for those seeking further understanding: ## Creating the Behavior -### Creating the devicetree binding (`.yaml`) +### Creating the Devicetree Binding (`.yaml`) The properties of the behavior are listed in the behavior's devicetree binding, which comes in the form of a `.yaml` file. Devicetree bindings are stored in the directory `app/dts/bindings/behaviors/` and are labelled in lowercase, beginning with the prefix `zmk,behavior-`, and ending with the behavior's name, using dashes to separate multiple words. For example, the directory for the hold-tap's devicetree binding would be located at `app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml`, which is shown below as a reference: @@ -119,7 +119,7 @@ These are additional variables required to configure a particular instance of a For more information on additional `properties`, refer to [Zephyr's documentation on Devicetree bindings](https://docs.zephyrproject.org/3.5.0/build/dts/bindings-syntax.html#properties). ::: -### Creating the driver (`.c`) +### Creating the Driver (`.c`) :::info Developing drivers for behaviors in ZMK makes extensive use of the Zephyr Devicetree API and Device Driver Model. Links to the Zephyr Project Documentation for both of these concepts can be found below: @@ -203,7 +203,7 @@ The dependencies required for any ZMK behavior are: Other common dependencies include `zmk/keymap.h`, which allows behaviors to access layer information and extract behavior bindings from keymaps, and `zmk/event_manager.h` which is detailed below. -##### ZMK Event Manager +##### ZMK event manager Including `zmk/event_manager.h` is required for the following dependencies to function properly. @@ -213,7 +213,7 @@ Including `zmk/event_manager.h` is required for the following dependencies to fu Events can be used similarly to hardware interrupts, through the use of [listeners](#listeners-and-subscriptions). -###### Listeners and Subscriptions +###### Listeners and subscriptions The condensed form of lines 192-225 of the tap-dance driver, shown below, does an excellent job of showcasing the function of listeners and subscriptions with respect to the [ZMK Event Manager](#zmk-event-manager). @@ -279,11 +279,11 @@ Note that in the hold-tap example, the instance number, `0`, has been replaced b Behaviors also require the following parameters of `BEHAVIOR_DT_INST_DEFINE` to be changed: -##### Initialization Function +##### Initialization function Comes in the form `static int _init(const struct device *dev)`. Initialization functions preconfigure any data, like resetting timers and position for hold-taps and tap-dances. All initialization functions `return 0;` once complete. -##### API Structure +##### API structure Comes in the form `static const struct behavior_driver_api _driver_api)`. Common items to include in the API Structure are: @@ -297,7 +297,7 @@ Comes in the form `static const struct behavior_driver_api _drive For unibody keyboards, all locality values perform the same as `BEHAVIOR_LOCALITY_GLOBAL`. ::: -##### Data Pointers (Optional) +##### Data pointers (optional) The data `struct` stores additional data required for **each new instance** of the behavior. Regardless of the instance number, `n`, `behavior__data_##n` is typically initialized as an empty `struct`. The data respective to each instance of the behavior can be accessed in functions like [`on__binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event)`](#dependencies) by extracting the behavior device from the keybind like so: @@ -310,7 +310,7 @@ The variables stored inside the data `struct`, `data`, can be then modified as n The fourth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if instance-specific data is not required. -##### Configuration Pointers (Optional) +##### Configuration pointers (optional) The configuration `struct` stores the properties declared from the behavior's `.yaml` for **each new instance** of the behavior. As seen in the `#define KP_INST(n)` of the hold-tap example, the configuration `struct`, `behavior__config_##n`, for each instance number, `n`, can be initialized using the [Zephyr Devicetree Instance-based APIs](https://docs.zephyrproject.org/3.5.0/build/dts/api/api.html#instance-based-apis), which extract the values from the `properties` of each instance of the [devicetree binding](#creating-the-devicetree-binding-yaml) from a user's keymap or [predefined use-case `.dtsi` files](#defining-common-use-cases-for-the-behavior-dtsi-optional) stored in `app/dts/behaviors/`. We illustrate this further by comparing the [`#define KP_INST(n)` from the hold-tap driver](#behavior_dt_inst_define) and the [`properties` of the hold-tap devicetree binding.](#creating-the-devicetree-binding-yaml) @@ -320,7 +320,7 @@ The fifth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if inst Remember that `.c` files should be formatted according to `clang-format` to ensure that checks run smoothly once the pull request is submitted. ::: -### Updating `app/CmakeLists.txt` to include the new driver +### Updating `app/CmakeLists.txt` to Include the New Driver Most behavior drivers' are invoked according to the central half's [locality](#api-structure), and are therefore stored after the line `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` in the form, `target_sources(app PRIVATE src/behaviors/.c)`, as shown below. @@ -353,7 +353,7 @@ For behaviors that do not require central locality, the following options for up - Behavior applies to _only_ peripheral half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT AND (NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL))` - Behavior requires certain condition in a keyboard's `.conf` file to be met: use `target_sources_ifdef(CONFIG_ app PRIVATE .c)` instead of `target_sources(.c)` -### Defining common use-cases for the behavior (`.dtsi`) (Optional) +### Defining Common Use-Cases for the Behavior (`.dtsi`) (Optional) `.dtsi` files, found in the directory `app/dts/behaviors/`, are only necessary for behaviors with more common use-cases. A common example is the mod-tap (`&mt`), which is a predefined type of hold-tap that takes a modifier key as the hold parameter and another key as the tap parameter. @@ -422,7 +422,7 @@ After creating the `.dtsi` from above, update `app/dts/behaviors.dtsi` to includ #include ``` -## Testing changes locally +## Testing Changes Locally Create a new folder in `app/tests/` to develop virtual test sets for all common use cases of the behavior. Behaviors should be tested thoroughly on both virtual testing environments using `west test` and real hardware. @@ -437,7 +437,7 @@ Zephyr currently does not support logging over Bluetooth, so any use of the seri ::: -## Documenting behavior functionality +## Documenting Behavior Functionality Consider the following prompts when writing documentation for new behaviors: @@ -453,7 +453,7 @@ Consider also including visual aids alongside written documentation if it adds c See [Documentation](documentation.md) for more information on writing, testing, and formatting ZMK documentation. ::: -## Submitting a pull request +## Submitting a Pull Request Once the above sections are complete, the behavior is almost ready to submit as a pull request. New [devicetree bindings](#creating-the-devicetree-binding-yaml), new [drivers](#creating-the-driver-c), and [predefined use-cases](#defining-common-use-cases-for-the-behavior-dtsi-optional) of the new behavior must contain the appropriate copyright headers, which can be copied and pasted from the tabs below. diff --git a/docs/docs/development/setup/native.mdx b/docs/docs/development/setup/native.mdx index d077d7d1d7d..40c1bbed6ee 100644 --- a/docs/docs/development/setup/native.mdx +++ b/docs/docs/development/setup/native.mdx @@ -319,7 +319,7 @@ pip3 install -r zephyr/scripts/requirements-base.txt Return to Zephyr's Getting Started Guide and [Install Zephyr SDK](https://docs.zephyrproject.org/3.5.0/develop/getting_started/index.html#install-zephyr-sdk). -### OS specific notes +### OS-Specific Notes @@ -330,7 +330,7 @@ Return to Zephyr's Getting Started Guide and [Install Zephyr SDK](https://docs.z -#### Install Cross-Compile Toolchain +#### Install cross-compile toolchain Because Raspberry OS runs on the same architecture (but different ABI) as ARM keyboard MCUs, the operating system's installed [cross compilers](https://docs.zephyrproject.org/3.5.0/develop/toolchains/other_x_compilers.html) can be used to target the different ABI. Building for non-ARM MCUs has not been tested. diff --git a/docs/docs/features/backlight.mdx b/docs/docs/features/backlight.mdx index 674e8633014..5debc375010 100644 --- a/docs/docs/features/backlight.mdx +++ b/docs/docs/features/backlight.mdx @@ -34,7 +34,7 @@ There are various Kconfig options used to configure the backlight feature. These | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE` | Turn off backlight when keyboard goes into idle state | n | | `CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB` | Turn off backlight when USB is disconnected | n | -## Adding Backlight to a board or a shield +## Adding Backlight to a Board or a Shield -### Multiple backlight LEDs +### Multiple Backlight LEDs It is possible to control multiple backlight LEDs at the same time. This is useful if, for example, you have a Caps Lock LED connected to a different pin and you want it to be part of the backlight. diff --git a/docs/docs/features/beta-testing.mdx b/docs/docs/features/beta-testing.mdx index 148005cea67..1a8d28633cb 100644 --- a/docs/docs/features/beta-testing.mdx +++ b/docs/docs/features/beta-testing.mdx @@ -28,7 +28,7 @@ branch and create the pull request. ![Repository URL](../assets/features/beta-testing/repo-branch.png) -## Testing features +## Testing Features Testing features will require you to modify the `west.yml` file. You will need to add a new remote for the pull request you would like to test, and change the selected remote and revision (or branch) for the `zmk` project. diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 32f09c1c61e..63c57c38cc3 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -38,7 +38,7 @@ Key positions are numbered like the keys in your keymap, starting at 0. So, if t ::: -### Advanced usage +### Advanced Usage - Partially overlapping combos like `0 1` and `0 2` are supported. - Fully overlapping combos like `0 1` and `0 1 2` are supported. diff --git a/docs/docs/features/debouncing.md b/docs/docs/features/debouncing.md index 7d194efa061..31e00843211 100644 --- a/docs/docs/features/debouncing.md +++ b/docs/docs/features/debouncing.md @@ -40,7 +40,7 @@ CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=3 CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=3 ``` -### Per-driver Options +### Per-Driver Options You can add these Devicetree properties to a kscan node to control debouncing for that instance of the driver. Values must be `<= 16383`. diff --git a/docs/docs/features/keymaps.mdx b/docs/docs/features/keymaps.mdx index 105ca794ab4..95df3e86842 100644 --- a/docs/docs/features/keymaps.mdx +++ b/docs/docs/features/keymaps.mdx @@ -96,7 +96,7 @@ The first defines the nodes for all the available behaviors in ZMK, which will b The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, `C_PLAY`) and the modifiers (e.g. `LSHIFT`) used for various behavior bindings. -### Root devicetree Node +### Root Devicetree Node All the remaining keymap nodes will be nested inside of the root devicetree node, like so: diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index bd631f1b42e..7018afa08f2 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -101,7 +101,7 @@ To use the [soft off behavior](../behaviors/soft-off.md) outside of a keymap, ad The kscan sideband behavior driver will be used to trigger the [soft off behavior](../behaviors/soft-off.md) "out of band" from the normal keymap processing. To do so, it will decorate/wrap an underlying kscan driver. What kscan driver will vary for simple direct pin vs. matrix-integrated hardware combo. -#### Simple Direct Pin +#### Simple direct pin With a simple direct pin setup, the The [direct kscan](../config/kscan.md) driver can be used with a GPIO key, to make a small "side matrix": @@ -148,7 +148,7 @@ Here are the properties for the node: - The `compatible` property for the node must be `zmk,soft-off-wakeup-sources`. - The `wakeup-sources` property is a [phandle array](../config/index.md#devicetree-property-types) pointing to all the devices that should be enabled during the shutdown process to be sure they can later wake the keyboard. -#### Matrix-Integrated Hardware Combo +#### Matrix-integrated hardware combo For this case, you will supplement the existing kscan matrix, by adding the additional pin as another entry in the `row-gpios`/`col-gpios` for whichever pins are used to read the matrix state. For example, for an existing matrix like: diff --git a/docs/docs/features/underglow.md b/docs/docs/features/underglow.md index a32306caa0d..ba6c0092340 100644 --- a/docs/docs/features/underglow.md +++ b/docs/docs/features/underglow.md @@ -39,7 +39,7 @@ use Kconfig. If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). -### Modifying the number of LEDs +### Modifying the Number of LEDs A common issue when enabling underglow is that some of the installed LEDs do not illuminate. This can happen when a board's default underglow configuration accounts only for either the downward facing LEDs or the upward facing LEDs under each key. On a split keyboard, a good sign that this may be the problem is that the unilluminated LEDs on each half are symmetrical. @@ -64,7 +64,7 @@ If you have a shield with RGB underglow, you must add a `boards/` directory with Inside the `boards/` folder, you define a `.overlay` for each different board. For example, the Kyria shield has a `boards/nice_nano.overlay` file that defines the RGB underglow for the `nice_nano` board specifically. -### nRF52-based boards +### nRF52-Based Boards With nRF52 boards, you can just use `&spi3` and define the pins you want to use. @@ -128,7 +128,7 @@ If your board/shield uses LEDs that require the data sent in a different order, ::: -### Other boards +### Other Boards For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. diff --git a/docs/docs/intro.md b/docs/docs/intro.md index da01e8297e7..e11eda71f02 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -46,7 +46,7 @@ ZMK is currently missing some features found in other popular firmware. This tab [^2]: Tap-Dances are limited to single and double-tap on BlueMicro [^1]: OLEDs are currently proof of concept in ZMK. -## Code Of Conduct +## Code of Conduct Please note that this project is released with a [Contributor Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/). diff --git a/docs/docs/user-setup.mdx b/docs/docs/user-setup.mdx index 78d4362857e..f6cb5eb2717 100644 --- a/docs/docs/user-setup.mdx +++ b/docs/docs/user-setup.mdx @@ -177,9 +177,9 @@ push the initial commit. ::: -## Installing The Firmware +## Installing the Firmware -### Download The Archive +### Download the Archive Once the setup script is complete and the new user config repository has been pushed, GitHub will automatically run the action to build your keyboard firmware files. You can view the actions by clicking on the "Actions" tab on your GitHub repository. From a080b5287f9814d90166be523c3cd2969f4d69a3 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 17 Jun 2024 15:39:32 -0600 Subject: [PATCH 1087/1130] refactor: Remove static CDC ACM logging nodes. * To avoid spurious CDC ACM instances when usint CDC ACM for something other than logging, move to the approach used by Zephyr of using a snippet to redirect console output to a CDC ACM node added by the snippet. Remove all the existing static CDC ACM nodes. * Add new `zmk-usb-logging` snippet that mirrors the upstream `cdc-acm-logging` snippet, but still does our extra USB logging configuration. * Updated logging docs accordingly. Co-authored-by: Cem Aksoylar --- app/boards/01space_rp2040_042lcd.overlay | 2 - app/boards/adafruit_kb2040.overlay | 2 - app/boards/adafruit_qt_py_rp2040.overlay | 2 - app/boards/arm/adv360pro/adv360pro.dtsi | 6 +- app/boards/arm/bdn9/bdn9_rev2.dts | 6 +- .../arm/bluemicro840/bluemicro840_v1.dts | 6 +- app/boards/arm/bt60/bt60.dtsi | 6 +- app/boards/arm/ckp/ckp.dtsi | 2 +- app/boards/arm/corneish_zen/corneish_zen.dtsi | 6 +- app/boards/arm/dz60rgb/dz60rgb_rev1.dts | 6 +- app/boards/arm/ferris/ferris_rev02.dts | 6 +- app/boards/arm/glove80/glove80.dtsi | 6 +- .../arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts | 7 +- app/boards/arm/mikoto/mikoto_520.dts | 6 +- app/boards/arm/nice60/nice60.dts | 6 +- app/boards/arm/nice_nano/nice_nano.dtsi | 6 +- app/boards/arm/nrf52840_m2/nrf52840_m2.dts | 6 +- app/boards/arm/nrfmicro/nrfmicro_11.dts | 6 +- .../arm/nrfmicro/nrfmicro_11_flipped.dts | 6 +- app/boards/arm/nrfmicro/nrfmicro_13.dts | 6 +- app/boards/arm/nrfmicro/nrfmicro_13_52833.dts | 6 +- app/boards/arm/pillbug/pillbug.dts | 6 +- app/boards/arm/planck/planck_rev6.dts | 6 +- app/boards/arm/preonic/preonic_rev3.dts | 6 +- app/boards/arm/proton_c/proton_c.dts | 6 +- app/boards/arm/puchi_ble/puchi_ble_v1.dts | 6 +- app/boards/arm/s40nc/s40nc.dts | 6 +- app/boards/boardsource_blok.overlay | 2 - app/boards/rpi_pico.overlay | 8 --- app/boards/seeeduino_xiao.overlay | 18 ----- app/boards/seeeduino_xiao_ble.overlay | 7 -- app/boards/seeeduino_xiao_rp2040.overlay | 2 - app/boards/sparkfun_pro_micro_rp2040.overlay | 2 - app/boards/usb_console.dtsi | 19 ------ docs/docs/development/usb-logging.mdx | 67 +++++++++++-------- 35 files changed, 62 insertions(+), 210 deletions(-) delete mode 100644 app/boards/rpi_pico.overlay delete mode 100644 app/boards/seeeduino_xiao.overlay delete mode 100644 app/boards/usb_console.dtsi diff --git a/app/boards/01space_rp2040_042lcd.overlay b/app/boards/01space_rp2040_042lcd.overlay index d89e53f4a8e..b5d2cdb2fd1 100644 --- a/app/boards/01space_rp2040_042lcd.overlay +++ b/app/boards/01space_rp2040_042lcd.overlay @@ -4,6 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "usb_console.dtsi" - &xiao_serial { status = "disabled"; }; diff --git a/app/boards/adafruit_kb2040.overlay b/app/boards/adafruit_kb2040.overlay index b14e0d04d47..72b3adcaf41 100644 --- a/app/boards/adafruit_kb2040.overlay +++ b/app/boards/adafruit_kb2040.overlay @@ -4,6 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "usb_console.dtsi" - &pro_micro_serial { status = "disabled"; }; diff --git a/app/boards/adafruit_qt_py_rp2040.overlay b/app/boards/adafruit_qt_py_rp2040.overlay index d89e53f4a8e..b5d2cdb2fd1 100644 --- a/app/boards/adafruit_qt_py_rp2040.overlay +++ b/app/boards/adafruit_qt_py_rp2040.overlay @@ -4,6 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "usb_console.dtsi" - &xiao_serial { status = "disabled"; }; diff --git a/app/boards/arm/adv360pro/adv360pro.dtsi b/app/boards/arm/adv360pro/adv360pro.dtsi index c64d0d3f77e..ea68624b981 100644 --- a/app/boards/arm/adv360pro/adv360pro.dtsi +++ b/app/boards/arm/adv360pro/adv360pro.dtsi @@ -21,7 +21,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,backlight = &backlight; zmk,battery = &vbatt; @@ -90,11 +89,8 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &flash0 { diff --git a/app/boards/arm/bdn9/bdn9_rev2.dts b/app/boards/arm/bdn9/bdn9_rev2.dts index 6e15408a2cd..2189530d4d2 100644 --- a/app/boards/arm/bdn9/bdn9_rev2.dts +++ b/app/boards/arm/bdn9/bdn9_rev2.dts @@ -16,7 +16,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan; zmk,underglow = &led_strip; }; @@ -106,13 +105,10 @@ apb1-prescaler = <1>; }; -&usb { +zephyr_udc0: &usb { status = "okay"; pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; pinctrl-names = "default"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &rtc { diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts index aabdf310a28..84d3ebaec99 100644 --- a/app/boards/arm/bluemicro840/bluemicro840_v1.dts +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -82,11 +81,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/bt60/bt60.dtsi b/app/boards/arm/bt60/bt60.dtsi index 655d25769a7..83ff3f04aa9 100644 --- a/app/boards/arm/bt60/bt60.dtsi +++ b/app/boards/arm/bt60/bt60.dtsi @@ -16,7 +16,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; zmk,kscan = &kscan0; zmk,matrix-transform = &default_transform; @@ -70,11 +69,8 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/ckp/ckp.dtsi b/app/boards/arm/ckp/ckp.dtsi index 4142622ac86..b127cabc71a 100644 --- a/app/boards/arm/ckp/ckp.dtsi +++ b/app/boards/arm/ckp/ckp.dtsi @@ -142,7 +142,7 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; }; diff --git a/app/boards/arm/corneish_zen/corneish_zen.dtsi b/app/boards/arm/corneish_zen/corneish_zen.dtsi index 881fadb0764..dbd6f93e805 100644 --- a/app/boards/arm/corneish_zen/corneish_zen.dtsi +++ b/app/boards/arm/corneish_zen/corneish_zen.dtsi @@ -20,7 +20,6 @@ zephyr,flash = &flash0; zmk,kscan = &kscan0; zmk,display = &epd; - zephyr,console = &cdc_acm_uart; zmk,matrix-transform = &default_transform; }; @@ -76,11 +75,8 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &flash0 { diff --git a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts index 4e1d4b66579..b8fac4e2807 100644 --- a/app/boards/arm/dz60rgb/dz60rgb_rev1.dts +++ b/app/boards/arm/dz60rgb/dz60rgb_rev1.dts @@ -16,7 +16,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix-transform = &default_transform; }; @@ -65,11 +64,8 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC( }; -&usb { +zephyr_udc0: &usb { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &flash0 { diff --git a/app/boards/arm/ferris/ferris_rev02.dts b/app/boards/arm/ferris/ferris_rev02.dts index 4fecd280eec..a0e28f03833 100644 --- a/app/boards/arm/ferris/ferris_rev02.dts +++ b/app/boards/arm/ferris/ferris_rev02.dts @@ -17,7 +17,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan; zmk,matrix-transform = &transform; /* TODO: Enable once we support the IC for underglow @@ -110,14 +109,11 @@ }; }; -&usb { +zephyr_udc0: &usb { status = "okay"; pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; pinctrl-names = "default"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &clk_hsi { diff --git a/app/boards/arm/glove80/glove80.dtsi b/app/boards/arm/glove80/glove80.dtsi index 4803488b078..d51a73ac066 100644 --- a/app/boards/arm/glove80/glove80.dtsi +++ b/app/boards/arm/glove80/glove80.dtsi @@ -15,7 +15,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; }; default_transform: keymap_transform_0 { @@ -59,11 +58,8 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &flash0 { diff --git a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts index 18c92671d94..60ba1da0143 100644 --- a/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts +++ b/app/boards/arm/kbdfans_tofu65/kbdfans_tofu65_v2.dts @@ -13,8 +13,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; - zephyr,shell-uart = &cdc_acm_uart; zephyr,code-partition = &code_partition; zmk,kscan = &kscan0; zmk,matrix-transform = &default_transform; @@ -108,11 +106,8 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,8) RC(4,9) }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto_520.dts index a6ca50812f8..3ea48cd9911 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto_520.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -81,11 +80,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/nice60/nice60.dts b/app/boards/arm/nice60/nice60.dts index d1b9f9927cc..4eefbb9d8f3 100644 --- a/app/boards/arm/nice60/nice60.dts +++ b/app/boards/arm/nice60/nice60.dts @@ -20,7 +20,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; zmk,kscan = &kscan0; zmk,matrix-transform = &default_transform; @@ -129,11 +128,8 @@ RC(4,0) RC(4,1) RC(4,2) RC(4,5) R }; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &flash0 { diff --git a/app/boards/arm/nice_nano/nice_nano.dtsi b/app/boards/arm/nice_nano/nice_nano.dtsi index 41770dd310e..839845c8e8c 100644 --- a/app/boards/arm/nice_nano/nice_nano.dtsi +++ b/app/boards/arm/nice_nano/nice_nano.dtsi @@ -16,7 +16,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; }; leds { @@ -65,11 +64,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts index 85e9ce2107f..39569f0b760 100644 --- a/app/boards/arm/nrf52840_m2/nrf52840_m2.dts +++ b/app/boards/arm/nrf52840_m2/nrf52840_m2.dts @@ -15,7 +15,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -57,12 +56,9 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { compatible = "nordic,nrf-usbd"; status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts index 04368ab8741..b80ed4c62c1 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; }; leds { @@ -69,11 +68,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts index 600935aa0a6..7b89b62f88a 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; }; leds { @@ -69,11 +68,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts index 716e5b181dd..0cb22e63ca9 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -81,11 +80,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts index f57c413da8b..866276bbec4 100644 --- a/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts +++ b/app/boards/arm/nrfmicro/nrfmicro_13_52833.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -81,11 +80,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/pillbug/pillbug.dts b/app/boards/arm/pillbug/pillbug.dts index c30d306e275..cf4f62fc98b 100644 --- a/app/boards/arm/pillbug/pillbug.dts +++ b/app/boards/arm/pillbug/pillbug.dts @@ -18,7 +18,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -83,11 +82,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts index 5b8e16b2efe..85b751400a1 100644 --- a/app/boards/arm/planck/planck_rev6.dts +++ b/app/boards/arm/planck/planck_rev6.dts @@ -16,7 +16,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix-transform = &layout_grid_transform; }; @@ -96,13 +95,10 @@ layout_2x2u_transform: }; }; -&usb { +zephyr_udc0: &usb { pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; pinctrl-names = "default"; status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &clk_hse { diff --git a/app/boards/arm/preonic/preonic_rev3.dts b/app/boards/arm/preonic/preonic_rev3.dts index d14355dac93..79f88c33b0a 100644 --- a/app/boards/arm/preonic/preonic_rev3.dts +++ b/app/boards/arm/preonic/preonic_rev3.dts @@ -17,7 +17,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,kscan = &kscan0; zmk,matrix-transform = &layout_grid_transform; }; @@ -90,13 +89,10 @@ }; }; -&usb { +zephyr_udc0: &usb { pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; pinctrl-names = "default"; status = "okay"; -cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &clk_hse { diff --git a/app/boards/arm/proton_c/proton_c.dts b/app/boards/arm/proton_c/proton_c.dts index 3aad62c8f30..05872b25dde 100644 --- a/app/boards/arm/proton_c/proton_c.dts +++ b/app/boards/arm/proton_c/proton_c.dts @@ -16,7 +16,6 @@ chosen { zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart0; }; aliases { @@ -66,13 +65,10 @@ apb2-prescaler = <1>; }; -&usb { +zephyr_udc0: &usb { pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; pinctrl-names = "default"; status = "okay"; - cdc_acm_uart0: cdc_acm_uart0 { - compatible = "zephyr,cdc-acm-uart"; - }; }; &rtc { diff --git a/app/boards/arm/puchi_ble/puchi_ble_v1.dts b/app/boards/arm/puchi_ble/puchi_ble_v1.dts index 05aba8d3780..9f3194e036f 100644 --- a/app/boards/arm/puchi_ble/puchi_ble_v1.dts +++ b/app/boards/arm/puchi_ble/puchi_ble_v1.dts @@ -17,7 +17,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -72,11 +71,8 @@ pinctrl-names = "default", "sleep"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; diff --git a/app/boards/arm/s40nc/s40nc.dts b/app/boards/arm/s40nc/s40nc.dts index a2eb89ea207..4c37030db33 100644 --- a/app/boards/arm/s40nc/s40nc.dts +++ b/app/boards/arm/s40nc/s40nc.dts @@ -16,7 +16,6 @@ zephyr,code-partition = &code_partition; zephyr,sram = &sram0; zephyr,flash = &flash0; - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; zmk,kscan = &kscan0; zmk,matrix-transform = &default_transform; @@ -93,11 +92,8 @@ status = "okay"; }; -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; &flash0 { diff --git a/app/boards/boardsource_blok.overlay b/app/boards/boardsource_blok.overlay index b14e0d04d47..72b3adcaf41 100644 --- a/app/boards/boardsource_blok.overlay +++ b/app/boards/boardsource_blok.overlay @@ -4,6 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "usb_console.dtsi" - &pro_micro_serial { status = "disabled"; }; diff --git a/app/boards/rpi_pico.overlay b/app/boards/rpi_pico.overlay deleted file mode 100644 index efc8e080f15..00000000000 --- a/app/boards/rpi_pico.overlay +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright (c) 2023 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#include "usb_console.dtsi" - diff --git a/app/boards/seeeduino_xiao.overlay b/app/boards/seeeduino_xiao.overlay deleted file mode 100644 index 285ee4de332..00000000000 --- a/app/boards/seeeduino_xiao.overlay +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2022 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -/ { - chosen { - zephyr,console = &cdc_acm_uart; - }; -}; - -&usb0 { - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; -}; - diff --git a/app/boards/seeeduino_xiao_ble.overlay b/app/boards/seeeduino_xiao_ble.overlay index e0934691d84..f6a608582e6 100644 --- a/app/boards/seeeduino_xiao_ble.overlay +++ b/app/boards/seeeduino_xiao_ble.overlay @@ -7,7 +7,6 @@ / { chosen { - zephyr,console = &cdc_acm_uart; zmk,battery = &vbatt; }; @@ -24,12 +23,6 @@ status = "okay"; }; -&usbd { - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; -}; - &qspi { status = "okay"; pinctrl-0 = <&qspi_default>; diff --git a/app/boards/seeeduino_xiao_rp2040.overlay b/app/boards/seeeduino_xiao_rp2040.overlay index d89e53f4a8e..b5d2cdb2fd1 100644 --- a/app/boards/seeeduino_xiao_rp2040.overlay +++ b/app/boards/seeeduino_xiao_rp2040.overlay @@ -4,6 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "usb_console.dtsi" - &xiao_serial { status = "disabled"; }; diff --git a/app/boards/sparkfun_pro_micro_rp2040.overlay b/app/boards/sparkfun_pro_micro_rp2040.overlay index b14e0d04d47..72b3adcaf41 100644 --- a/app/boards/sparkfun_pro_micro_rp2040.overlay +++ b/app/boards/sparkfun_pro_micro_rp2040.overlay @@ -4,6 +4,4 @@ * SPDX-License-Identifier: MIT */ -#include "usb_console.dtsi" - &pro_micro_serial { status = "disabled"; }; diff --git a/app/boards/usb_console.dtsi b/app/boards/usb_console.dtsi deleted file mode 100644 index adf3bd19bf1..00000000000 --- a/app/boards/usb_console.dtsi +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2023 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - - -/ { - chosen { - zephyr,console = &cdc_acm_uart; - }; -}; - -&usbd { - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; -}; - diff --git a/docs/docs/development/usb-logging.mdx b/docs/docs/development/usb-logging.mdx index cb9508a2be0..b7c3d233820 100644 --- a/docs/docs/development/usb-logging.mdx +++ b/docs/docs/development/usb-logging.mdx @@ -18,26 +18,33 @@ It is recommended to only enable logging when needed, and not leaving it on by d ::: -## Kconfig +## USB Logging Snippet -The `CONFIG_ZMK_USB_LOGGING` Kconfig enables USB logging. This can be set at the keyboard level, typically in the `config/.conf` -file if you are using a [user config repository](user-setup.mdx). It can also be enabled at the ZMK level using the `app/prj.conf` file, or other -search locations described in the [configuration overview](config/index.md#config-file-locations). +The `zmk-usb-logging` snippet is used to enable logging. -Logging can be further configured using Kconfig described in [the Zephyr documentation](https://docs.zephyrproject.org/3.5.0/services/logging/index.html). -For instance, setting `CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS` to a large value such as `8000` might help catch issues that happen near keyboard -boot, before you can connect to view the logs. +If using GitHub Actions to build your firmware, enabling logging +requires adding a `snippet: zmk-usb-logging` to your `build.yaml` file for any build you want logging enabled, e.g. -:::note -In Github Actions, you can check the ` Kconfig file` step output to verify the options above have been enabled -for you successfully. -::: +```yaml +--- +include: + - board: nice_nano_v2 + shield: corne_left + snippet: zmk-usb-logging +``` -```ini -# Turn on logging, and set ZMK logging to debug output -CONFIG_ZMK_USB_LOGGING=y +When building locally, the `-S`/`--snippet` flag can be passed to `west build` to enable the snippet, e.g. + +```sh +west build -b nice_nano_v2 -S zmk-usb-logging -- -DSHIELD="corne_left" ``` +### Additional Config + +Logging can be further configured using Kconfig described in [the Zephyr documentation](https://docs.zephyrproject.org/3.5.0/services/logging/index.html). +For instance, setting `CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS` to a large value such as `8000` might help catch issues that happen near keyboard +boot, before you can connect to view the logs. + ## Viewing Logs After flashing the updated ZMK image, the board should expose a USB CDC ACM device that you can connect to and view the logs. @@ -89,27 +96,29 @@ From there, you should see the various log messages from ZMK and Zephyr, dependi Standard boards such as the nice!nano and Seeeduino XIAO family have the necessary configuration for logging already added, however if you are developing your own standalone board you may wish to add the ability to use USB logging in the future. -To add USB logging to a board you need to define the USB CDC ACM device that the serial output gets piped to, as well as adding the console in the `chosen` node inside `.dts`. +To do so, you need to follow the upstream Zephyr [`cdc-acm-console` snippet requirements](https://docs.zephyrproject.org/3.5.0/snippets/cdc-acm-console/README.html#requirements) steps. -Inside the USB device (`&usbd`), add the CDC ACM node: +Usually, this just requires ensuring that the USB node has been tagged with the `zephyr_udc0` label, e.g. ```dts -&usbd { +zephyr_udc0: &usbd { status = "okay"; - cdc_acm_uart: cdc_acm_uart { - compatible = "zephyr,cdc-acm-uart"; - }; }; ``` -Then you can add the `zephyr,console` binding in the `chosen` node: +## Enabling Logging on Older Boards -```dts -/ { - chosen { - ... - zephyr,console = &cdc_acm_uart; - }; - ... -}; +Previously, enabling logging required setting the `CONFIG_ZMK_USB_LOGGING` Kconfig symbol. If for whatever reason +a custom board definition does not support the new `zmk-usb-logging` snippet, you can try setting this symbol at the keyboard level, typically in the `config/.conf` +file if you are using a [user config repository](user-setup.mdx). It can also be enabled at the ZMK level using the `app/prj.conf` file, or other +search locations described in the [configuration overview](config/index.md#config-file-locations). + +:::note +In Github Actions, you can check the ` Kconfig file` step output to verify the options above have been enabled +for you successfully. +::: + +```ini +# Turn on logging, and set ZMK logging to debug output +CONFIG_ZMK_USB_LOGGING=y ``` From 7be955ff7285a1003455b4d573e843ef713ac584 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 21 Jun 2024 13:12:13 -0600 Subject: [PATCH 1088/1130] fix(usb): Ensure USB init is last * To avoid USB init issues due to other initialization disrupting USB setup, move USB setup to a lower priority. --- app/Kconfig | 6 +++++- app/src/usb_hid.c | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 5aedd9d9030..8f690175ddc 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -490,7 +490,11 @@ if USB_DEVICE_STACK config ZMK_USB_INIT_PRIORITY int "USB Init Priority" - default 50 + default 94 + +config ZMK_USB_HID_INIT_PRIORITY + int "USB HID Init Priority" + default 95 #USB endif diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index cd3ef920391..9db10952c95 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -195,4 +195,4 @@ static int zmk_usb_hid_init(void) { return 0; } -SYS_INIT(zmk_usb_hid_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); +SYS_INIT(zmk_usb_hid_init, APPLICATION, CONFIG_ZMK_USB_HID_INIT_PRIORITY); From 7cdf1e42ea1ef7e1f90b44096145f9bc7a95b66d Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 24 Jun 2024 10:48:21 -0600 Subject: [PATCH 1089/1130] fix: Actually add the `zmk-usb-logging` snippet. * D'oh. --- app/snippets/zmk-usb-logging/snippet.yml | 4 ++++ .../zmk-usb-logging/zmk-usb-logging.conf | 2 ++ .../zmk-usb-logging/zmk-usb-logging.overlay | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 app/snippets/zmk-usb-logging/snippet.yml create mode 100644 app/snippets/zmk-usb-logging/zmk-usb-logging.conf create mode 100644 app/snippets/zmk-usb-logging/zmk-usb-logging.overlay diff --git a/app/snippets/zmk-usb-logging/snippet.yml b/app/snippets/zmk-usb-logging/snippet.yml new file mode 100644 index 00000000000..8f218085008 --- /dev/null +++ b/app/snippets/zmk-usb-logging/snippet.yml @@ -0,0 +1,4 @@ +name: zmk-usb-logging +append: + EXTRA_CONF_FILE: zmk-usb-logging.conf + EXTRA_DTC_OVERLAY_FILE: zmk-usb-logging.overlay diff --git a/app/snippets/zmk-usb-logging/zmk-usb-logging.conf b/app/snippets/zmk-usb-logging/zmk-usb-logging.conf new file mode 100644 index 00000000000..57893df5f9d --- /dev/null +++ b/app/snippets/zmk-usb-logging/zmk-usb-logging.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_USB_LOGGING=y + diff --git a/app/snippets/zmk-usb-logging/zmk-usb-logging.overlay b/app/snippets/zmk-usb-logging/zmk-usb-logging.overlay new file mode 100644 index 00000000000..5ceda583f49 --- /dev/null +++ b/app/snippets/zmk-usb-logging/zmk-usb-logging.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2024 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zephyr,console = &snippet_zmk_usb_logging_uart; + zephyr,shell-uart = &snippet_zmk_usb_logging_uart; + }; +}; + +&zephyr_udc0 { + snippet_zmk_usb_logging_uart: snippet_zmk_usb_logging_uart { + compatible = "zephyr,cdc-acm-uart"; + }; +}; From 03099b04b68bf65bc455b3b7ae921261ed47f3a7 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 27 Mar 2024 12:27:49 -0700 Subject: [PATCH 1090/1130] feat(behaviors): Add behavior metadata information. * For upcoming ZMK studio work, make a set of rich metadata available to provide a friendly name for a behavior, and allow super flexible descriptions of the parameters the behaviors take. * Add ability to validate a zmk_behavior_binding against the behavior metadata available. --- app/Kconfig.behaviors | 8 +- app/dts/behaviors/backlight.dtsi | 1 + app/dts/behaviors/bluetooth.dtsi | 1 + app/dts/behaviors/caps_word.dtsi | 1 + app/dts/behaviors/ext_power.dtsi | 1 + app/dts/behaviors/gresc.dtsi | 1 + app/dts/behaviors/key_press.dtsi | 1 + app/dts/behaviors/key_repeat.dtsi | 1 + app/dts/behaviors/key_toggle.dtsi | 1 + app/dts/behaviors/layer_tap.dtsi | 1 + app/dts/behaviors/mod_tap.dtsi | 1 + app/dts/behaviors/momentary_layer.dtsi | 1 + app/dts/behaviors/none.dtsi | 1 + app/dts/behaviors/outputs.dtsi | 1 + app/dts/behaviors/reset.dtsi | 2 + app/dts/behaviors/rgb_underglow.dtsi | 1 + app/dts/behaviors/sticky_key.dtsi | 2 + app/dts/behaviors/to_layer.dtsi | 1 + app/dts/behaviors/toggle_layer.dtsi | 1 + app/dts/behaviors/transparent.dtsi | 1 + .../bindings/behaviors/behavior-metadata.yaml | 6 + app/dts/bindings/behaviors/one_param.yaml | 2 + app/dts/bindings/behaviors/two_param.yaml | 2 + app/dts/bindings/behaviors/zero_param.yaml | 2 + app/include/drivers/behavior.h | 158 +++++++++++++++++- app/include/zmk/behavior.h | 2 +- app/src/behavior.c | 146 ++++++++++++++++ app/src/behaviors/behavior_backlight.c | 79 +++++++++ app/src/behaviors/behavior_bt.c | 71 ++++++++ app/src/behaviors/behavior_hold_tap.c | 58 ++++++- app/src/behaviors/behavior_key_press.c | 28 +++- app/src/behaviors/behavior_key_toggle.c | 25 +++ app/src/behaviors/behavior_macro.c | 95 +++++++++++ app/src/behaviors/behavior_momentary_layer.c | 28 +++- app/src/behaviors/behavior_none.c | 3 + app/src/behaviors/behavior_outputs.c | 39 +++++ app/src/behaviors/behavior_rgb_underglow.c | 116 +++++++++++++ app/src/behaviors/behavior_soft_off.c | 3 + app/src/behaviors/behavior_sticky_key.c | 34 +++- app/src/behaviors/behavior_tap_dance.c | 3 + app/src/behaviors/behavior_to_layer.c | 25 +++ app/src/behaviors/behavior_toggle_layer.c | 25 +++ 42 files changed, 965 insertions(+), 14 deletions(-) create mode 100644 app/dts/bindings/behaviors/behavior-metadata.yaml diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index c9754bf7d83..c6cc45f3b87 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -1,6 +1,12 @@ # Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT +config ZMK_BEHAVIOR_METADATA + bool "Metadata" + help + Enabling this option adds APIs for documenting and fetching + metadata describing a behaviors name, and supported parameters. + config ZMK_BEHAVIOR_KEY_TOGGLE bool default y @@ -35,4 +41,4 @@ config ZMK_BEHAVIOR_SENSOR_ROTATE_VAR config ZMK_BEHAVIOR_MACRO bool default y - depends on DT_HAS_ZMK_BEHAVIOR_MACRO_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_ONE_PARAM_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_TWO_PARAM_ENABLED \ No newline at end of file + depends on DT_HAS_ZMK_BEHAVIOR_MACRO_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_ONE_PARAM_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_TWO_PARAM_ENABLED diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi index 54c83ff44c1..dd045effed3 100644 --- a/app/dts/behaviors/backlight.dtsi +++ b/app/dts/behaviors/backlight.dtsi @@ -10,6 +10,7 @@ /omit-if-no-ref/ bl: bcklight { compatible = "zmk,behavior-backlight"; #binding-cells = <2>; + display-name = "Backlight"; }; }; }; diff --git a/app/dts/behaviors/bluetooth.dtsi b/app/dts/behaviors/bluetooth.dtsi index 40557b7a28c..bece156f8fb 100644 --- a/app/dts/behaviors/bluetooth.dtsi +++ b/app/dts/behaviors/bluetooth.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ bt: bluetooth { compatible = "zmk,behavior-bluetooth"; #binding-cells = <2>; + display-name = "Bluetooth"; }; }; }; diff --git a/app/dts/behaviors/caps_word.dtsi b/app/dts/behaviors/caps_word.dtsi index 795fbc08439..05431bd8db2 100644 --- a/app/dts/behaviors/caps_word.dtsi +++ b/app/dts/behaviors/caps_word.dtsi @@ -12,6 +12,7 @@ compatible = "zmk,behavior-caps-word"; #binding-cells = <0>; continue-list = ; + display-name = "Caps Word"; }; }; }; diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index 2ae1daf84a8..08113f94bbe 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -10,6 +10,7 @@ ext_power: extpower { compatible = "zmk,behavior-ext-power"; #binding-cells = <1>; + display-name = "External Power"; }; }; }; diff --git a/app/dts/behaviors/gresc.dtsi b/app/dts/behaviors/gresc.dtsi index 59a7329178f..2643a383d81 100644 --- a/app/dts/behaviors/gresc.dtsi +++ b/app/dts/behaviors/gresc.dtsi @@ -13,6 +13,7 @@ #binding-cells = <0>; bindings = <&kp ESC>, <&kp GRAVE>; mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; + display-name = "Grave/Escape"; }; }; }; diff --git a/app/dts/behaviors/key_press.dtsi b/app/dts/behaviors/key_press.dtsi index ddaf7eed374..2435699b6ab 100644 --- a/app/dts/behaviors/key_press.dtsi +++ b/app/dts/behaviors/key_press.dtsi @@ -10,6 +10,7 @@ /omit-if-no-ref/ cp: kp: key_press { compatible = "zmk,behavior-key-press"; #binding-cells = <1>; + display-name = "Key Press"; }; }; }; diff --git a/app/dts/behaviors/key_repeat.dtsi b/app/dts/behaviors/key_repeat.dtsi index 88910f6271c..cd5d3771dcb 100644 --- a/app/dts/behaviors/key_repeat.dtsi +++ b/app/dts/behaviors/key_repeat.dtsi @@ -12,6 +12,7 @@ compatible = "zmk,behavior-key-repeat"; #binding-cells = <0>; usage-pages = ; + display-name = "Key Repeat"; }; }; }; diff --git a/app/dts/behaviors/key_toggle.dtsi b/app/dts/behaviors/key_toggle.dtsi index a3e3f36f270..a7b66aab1af 100644 --- a/app/dts/behaviors/key_toggle.dtsi +++ b/app/dts/behaviors/key_toggle.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ kt: key_toggle { compatible = "zmk,behavior-key-toggle"; #binding-cells = <1>; + display-name = "Key Toggle"; }; }; }; diff --git a/app/dts/behaviors/layer_tap.dtsi b/app/dts/behaviors/layer_tap.dtsi index dc953e9358b..2858bf17bc5 100644 --- a/app/dts/behaviors/layer_tap.dtsi +++ b/app/dts/behaviors/layer_tap.dtsi @@ -12,6 +12,7 @@ flavor = "tap-preferred"; tapping-term-ms = <200>; bindings = <&mo>, <&kp>; + display-name = "Layer-Tap"; }; }; }; diff --git a/app/dts/behaviors/mod_tap.dtsi b/app/dts/behaviors/mod_tap.dtsi index 38bb34fe5c4..0b46f77e739 100644 --- a/app/dts/behaviors/mod_tap.dtsi +++ b/app/dts/behaviors/mod_tap.dtsi @@ -12,6 +12,7 @@ flavor = "hold-preferred"; tapping-term-ms = <200>; bindings = <&kp>, <&kp>; + display-name = "Mod-Tap"; }; }; }; diff --git a/app/dts/behaviors/momentary_layer.dtsi b/app/dts/behaviors/momentary_layer.dtsi index 6d85165dbb3..cae08d5f101 100644 --- a/app/dts/behaviors/momentary_layer.dtsi +++ b/app/dts/behaviors/momentary_layer.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ mo: momentary_layer { compatible = "zmk,behavior-momentary-layer"; #binding-cells = <1>; + display-name = "Momentary Layer"; }; }; }; diff --git a/app/dts/behaviors/none.dtsi b/app/dts/behaviors/none.dtsi index 13d056f0cf2..a9a820c30b5 100644 --- a/app/dts/behaviors/none.dtsi +++ b/app/dts/behaviors/none.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ none: none { compatible = "zmk,behavior-none"; #binding-cells = <0>; + display-name = "None"; }; }; }; diff --git a/app/dts/behaviors/outputs.dtsi b/app/dts/behaviors/outputs.dtsi index f7737196719..3047852adce 100644 --- a/app/dts/behaviors/outputs.dtsi +++ b/app/dts/behaviors/outputs.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ out: outputs { compatible = "zmk,behavior-outputs"; #binding-cells = <1>; + display-name = "Output Selection"; }; }; }; diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index e407b107b90..2aa41d7d6e8 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -12,6 +12,7 @@ sys_reset: sysreset { compatible = "zmk,behavior-reset"; #binding-cells = <0>; + display-name = "Reset"; }; // Behavior can be invoked on peripherals, so name must be <= 8 characters. @@ -19,6 +20,7 @@ compatible = "zmk,behavior-reset"; type = ; #binding-cells = <0>; + display-name = "Bootloader"; }; }; }; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index 969518a6ff3..0764005872d 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -10,6 +10,7 @@ rgb_ug: rgb_ug { compatible = "zmk,behavior-rgb-underglow"; #binding-cells = <2>; + display-name = "Underglow"; }; }; }; diff --git a/app/dts/behaviors/sticky_key.dtsi b/app/dts/behaviors/sticky_key.dtsi index c8973d4df2c..382a7254e7b 100644 --- a/app/dts/behaviors/sticky_key.dtsi +++ b/app/dts/behaviors/sticky_key.dtsi @@ -12,6 +12,7 @@ release-after-ms = <1000>; bindings = <&kp>; ignore-modifiers; + display-name = "Sticky Key"; }; /omit-if-no-ref/ sl: sticky_layer { compatible = "zmk,behavior-sticky-key"; @@ -19,6 +20,7 @@ release-after-ms = <1000>; bindings = <&mo>; quick-release; + display-name = "Sticky Layer"; }; }; diff --git a/app/dts/behaviors/to_layer.dtsi b/app/dts/behaviors/to_layer.dtsi index 904f023da53..3c740209cb1 100644 --- a/app/dts/behaviors/to_layer.dtsi +++ b/app/dts/behaviors/to_layer.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ to: to_layer { compatible = "zmk,behavior-to-layer"; #binding-cells = <1>; + display-name = "To Layer"; }; }; }; diff --git a/app/dts/behaviors/toggle_layer.dtsi b/app/dts/behaviors/toggle_layer.dtsi index 05f2988e08c..ea9b25b7c1d 100644 --- a/app/dts/behaviors/toggle_layer.dtsi +++ b/app/dts/behaviors/toggle_layer.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ tog: toggle_layer { compatible = "zmk,behavior-toggle-layer"; #binding-cells = <1>; + display-name = "Toggle Layer"; }; }; }; diff --git a/app/dts/behaviors/transparent.dtsi b/app/dts/behaviors/transparent.dtsi index 3586f02afab..03ec36a64e8 100644 --- a/app/dts/behaviors/transparent.dtsi +++ b/app/dts/behaviors/transparent.dtsi @@ -9,6 +9,7 @@ /omit-if-no-ref/ trans: transparent { compatible = "zmk,behavior-transparent"; #binding-cells = <0>; + display-name = "Transparent"; }; }; }; diff --git a/app/dts/bindings/behaviors/behavior-metadata.yaml b/app/dts/bindings/behaviors/behavior-metadata.yaml new file mode 100644 index 00000000000..3a758ba3e22 --- /dev/null +++ b/app/dts/bindings/behaviors/behavior-metadata.yaml @@ -0,0 +1,6 @@ +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT + +properties: + display-name: + type: string diff --git a/app/dts/bindings/behaviors/one_param.yaml b/app/dts/bindings/behaviors/one_param.yaml index 9a503e8a815..fa4c2dc0b44 100644 --- a/app/dts/bindings/behaviors/one_param.yaml +++ b/app/dts/bindings/behaviors/one_param.yaml @@ -1,6 +1,8 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT +include: behavior-metadata.yaml + properties: label: type: string diff --git a/app/dts/bindings/behaviors/two_param.yaml b/app/dts/bindings/behaviors/two_param.yaml index 4f342301bb3..af9618e1624 100644 --- a/app/dts/bindings/behaviors/two_param.yaml +++ b/app/dts/bindings/behaviors/two_param.yaml @@ -1,6 +1,8 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT +include: behavior-metadata.yaml + properties: label: type: string diff --git a/app/dts/bindings/behaviors/zero_param.yaml b/app/dts/bindings/behaviors/zero_param.yaml index 79d0dcaed3f..deed5a1218b 100644 --- a/app/dts/bindings/behaviors/zero_param.yaml +++ b/app/dts/bindings/behaviors/zero_param.yaml @@ -1,6 +1,8 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT +include: behavior-metadata.yaml + properties: label: type: string diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 3936da5e4be..3dd6e0623f7 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -23,6 +23,39 @@ * (Internal use only.) */ +struct behavior_parameter_value_metadata { + char *display_name; + + union { + uint32_t value; + struct { + int32_t min; + int32_t max; + } range; + }; + + enum { + BEHAVIOR_PARAMETER_VALUE_TYPE_NIL = 0, + BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE = 1, + BEHAVIOR_PARAMETER_VALUE_TYPE_RANGE = 2, + BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE = 3, + BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_INDEX = 4, + } type; +}; + +struct behavior_parameter_metadata_set { + size_t param1_values_len; + const struct behavior_parameter_value_metadata *param1_values; + + size_t param2_values_len; + const struct behavior_parameter_value_metadata *param2_values; +}; + +struct behavior_parameter_metadata { + size_t sets_len; + const struct behavior_parameter_metadata_set *sets; +}; + enum behavior_sensor_binding_process_mode { BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER, BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_DISCARD, @@ -37,6 +70,10 @@ typedef int (*behavior_sensor_keymap_binding_accept_data_callback_t)( struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event, const struct zmk_sensor_config *sensor_config, size_t channel_data_size, const struct zmk_sensor_channel_data channel_data[channel_data_size]); +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +typedef int (*behavior_get_parameter_metadata_t)( + const struct device *behavior, struct behavior_parameter_metadata *param_metadata); +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) enum behavior_locality { BEHAVIOR_LOCALITY_CENTRAL, @@ -51,23 +88,54 @@ __subsystem struct behavior_driver_api { behavior_keymap_binding_callback_t binding_released; behavior_sensor_keymap_binding_accept_data_callback_t sensor_binding_accept_data; behavior_sensor_keymap_binding_process_callback_t sensor_binding_process; +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + behavior_get_parameter_metadata_t get_parameter_metadata; + const struct behavior_parameter_metadata *parameter_metadata; +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; /** * @endcond */ +struct zmk_behavior_metadata { +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + const char *display_name; +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +}; + struct zmk_behavior_ref { const struct device *device; + const struct zmk_behavior_metadata metadata; }; +#define ZMK_BEHAVIOR_REF_DT_NAME(node_id) _CONCAT(zmk_behavior_, DEVICE_DT_NAME_GET(node_id)) + +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +#define ZMK_BEHAVIOR_METADATA_INITIALIZER(node_id) \ + { .display_name = DT_PROP_OR(node_id, display_name, DEVICE_DT_NAME(node_id)), } + +#else + +#define ZMK_BEHAVIOR_METADATA_INITIALIZER(node_id) \ + {} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +#define ZMK_BEHAVIOR_REF_INITIALIZER(node_id, _dev) \ + { .device = _dev, .metadata = ZMK_BEHAVIOR_METADATA_INITIALIZER(node_id), } + +#define ZMK_BEHAVIOR_REF_DEFINE(name, node_id, _dev) \ + static const STRUCT_SECTION_ITERABLE(zmk_behavior_ref, name) = \ + ZMK_BEHAVIOR_REF_INITIALIZER(node_id, _dev) + +#define ZMK_BEHAVIOR_REF_DT_DEFINE(node_id) \ + ZMK_BEHAVIOR_REF_DEFINE(ZMK_BEHAVIOR_REF_DT_NAME(node_id), node_id, DEVICE_DT_GET(node_id)) + /** * Registers @p node_id as a behavior. */ -#define BEHAVIOR_DEFINE(node_id) \ - static const STRUCT_SECTION_ITERABLE(zmk_behavior_ref, \ - _CONCAT(zmk_behavior_, DEVICE_DT_NAME_GET(node_id))) = { \ - .device = DEVICE_DT_GET(node_id), \ - } +#define BEHAVIOR_DEFINE(node_id) ZMK_BEHAVIOR_REF_DT_DEFINE(node_id) /** * @brief Like DEVICE_DT_DEFINE(), but also registers the device as a behavior. @@ -89,6 +157,52 @@ struct zmk_behavior_ref { DEVICE_DT_INST_DEFINE(inst, __VA_ARGS__); \ BEHAVIOR_DEFINE(DT_DRV_INST(inst)) +/** + * @brief Validate a given behavior binding is valid, including parameter validation + * if the metadata feature is enablued. + * + * @param binding The behavior binding to validate. + * + * @retval 0 if the passed in binding is valid. + * @retval -ENODEV if the binding references a non-existant behavior. + * @retval -EINVAL if parameters are not valid for the behavior metadata. + */ +int zmk_behavior_validate_binding(const struct zmk_behavior_binding *binding); + +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +int zmk_behavior_get_empty_param_metadata(const struct device *dev, + struct behavior_parameter_metadata *metadata); + +/** + * @brief Validate a given behavior parameters match the behavior metadata. + * + * @param metadata The behavior metadata to validate against + * @param param1 The first parameter value + * @param param2 The second parameter value + * + * @retval 0 if the passed in parameters are valid. + * @retval -ENODEV if metadata is NULL. + * @retval -EINVAL if parameters are not valid for the metadata. + */ +int zmk_behavior_check_params_match_metadata(const struct behavior_parameter_metadata *metadata, + uint32_t param1, uint32_t param2); +/** + * @brief Validate a given behavior parameter matches the behavior metadata parameter values. + * + * @param values The values to validate against + * @param values_len How many values to check + * @param param The value to check. + * + * @retval 0 if the passed in parameter is valid. + * @retval -ENODEV if values is NULL. + * @retval -EINVAL if parameter is not valid for the value metadata. + */ +int zmk_behavior_validate_param_values(const struct behavior_parameter_value_metadata *values, + size_t values_len, uint32_t param); + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + /** * Syscall wrapper for zmk_behavior_get_binding(). * @@ -120,6 +234,40 @@ static inline int z_impl_behavior_keymap_binding_convert_central_state_dependent return api->binding_convert_central_state_dependent_params(binding, event); } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +/** + * @brief Determine where the behavior should be run + * @param behavior Pointer to the device structure for the driver instance. + * + * @retval Zero if successful. + * @retval Negative errno code if failure. + */ +__syscall int behavior_get_parameter_metadata(const struct device *behavior, + struct behavior_parameter_metadata *param_metadata); + +static inline int +z_impl_behavior_get_parameter_metadata(const struct device *behavior, + struct behavior_parameter_metadata *param_metadata) { + if (behavior == NULL || param_metadata == NULL) { + return -EINVAL; + } + + const struct behavior_driver_api *api = (const struct behavior_driver_api *)behavior->api; + + if (api->get_parameter_metadata) { + return api->get_parameter_metadata(behavior, param_metadata); + } else if (api->parameter_metadata) { + *param_metadata = *api->parameter_metadata; + } else { + return -ENODEV; + } + + return 0; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + /** * @brief Determine where the behavior should be run * @param behavior Pointer to the device structure for the driver instance. diff --git a/app/include/zmk/behavior.h b/app/include/zmk/behavior.h index ab95fd8e728..016fa3bc063 100644 --- a/app/include/zmk/behavior.h +++ b/app/include/zmk/behavior.h @@ -12,7 +12,7 @@ #define ZMK_BEHAVIOR_TRANSPARENT 1 struct zmk_behavior_binding { - char *behavior_dev; + const char *behavior_dev; uint32_t param1; uint32_t param2; }; diff --git a/app/src/behavior.c b/app/src/behavior.c index fa2005ff1af..7777155f404 100644 --- a/app/src/behavior.c +++ b/app/src/behavior.c @@ -11,6 +11,8 @@ #include #include +#include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -39,6 +41,150 @@ const struct device *z_impl_behavior_get_binding(const char *name) { return NULL; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +int zmk_behavior_get_empty_param_metadata(const struct device *dev, + struct behavior_parameter_metadata *metadata) { + metadata->sets_len = 0; + return 0; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +static int validate_hid_usage(uint16_t usage_page, uint16_t usage_id) { + LOG_DBG("Validate usage %d in page %d", usage_id, usage_page); + switch (usage_page) { + case HID_USAGE_KEY: + if (usage_id == 0 || (usage_id > ZMK_HID_KEYBOARD_NKRO_MAX_USAGE && + usage_id < LEFT_CONTROL && usage_id > RIGHT_GUI)) { + return -EINVAL; + } + break; + case HID_USAGE_CONSUMER: + if (usage_id > + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC), (0xFF), (0xFFF))) { + return -EINVAL; + } + break; + default: + LOG_WRN("Unsupported HID usage page %d", usage_page); + return -EINVAL; + } + + return 0; +} + +#define PARAM_MATCHES 0 + +static int check_param_matches_value(const struct behavior_parameter_value_metadata *value_meta, + uint32_t param) { + switch (value_meta->type) { + case BEHAVIOR_PARAMETER_VALUE_TYPE_NIL: + if (param == 0) { + return PARAM_MATCHES; + } + break; + case BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE: + if (validate_hid_usage(ZMK_HID_USAGE_PAGE(param), ZMK_HID_USAGE_ID(param)) >= 0) { + return PARAM_MATCHES; + } + + break; + case BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_INDEX: + if (param >= 0 && param < ZMK_KEYMAP_LEN) { + return PARAM_MATCHES; + } + break; + /* TODO: Restore with HSV -> RGB refactor + case BEHAVIOR_PARAMETER_STANDARD_DOMAIN_HSV: + // TODO: No real way to validate? Maybe max brightness? + break; + */ + case BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE: + if (param == value_meta->value) { + return PARAM_MATCHES; + } + break; + case BEHAVIOR_PARAMETER_VALUE_TYPE_RANGE: + if (param >= value_meta->range.min && param <= value_meta->range.max) { + return PARAM_MATCHES; + } + break; + default: + LOG_WRN("Unknown type %d", value_meta->type); + break; + } + + return -ENOTSUP; +} + +int zmk_behavior_validate_param_values(const struct behavior_parameter_value_metadata *values, + size_t values_len, uint32_t param) { + if (values_len == 0) { + return -ENODEV; + } + + for (int v = 0; v < values_len; v++) { + int ret = check_param_matches_value(&values[v], param); + if (ret >= 0) { + return ret; + } + } + + return -EINVAL; +} + +int zmk_behavior_check_params_match_metadata(const struct behavior_parameter_metadata *metadata, + uint32_t param1, uint32_t param2) { + if (!metadata || metadata->sets_len == 0) { + if (!metadata) { + LOG_ERR("No metadata to check against"); + } + + return (param1 == 0 && param2 == 0) ? 0 : -ENODEV; + } + + for (int s = 0; s < metadata->sets_len; s++) { + const struct behavior_parameter_metadata_set *set = &metadata->sets[s]; + int param1_ret = + zmk_behavior_validate_param_values(set->param1_values, set->param1_values_len, param1); + int param2_ret = + zmk_behavior_validate_param_values(set->param2_values, set->param2_values_len, param2); + + if ((param1_ret >= 0 || (param1_ret == -ENODEV && param1 == 0)) && + (param2_ret >= 0 || (param2_ret == -ENODEV && param2 == 0))) { + return 0; + } + } + + return -EINVAL; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +int zmk_behavior_validate_binding(const struct zmk_behavior_binding *binding) { +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + const struct device *behavior = zmk_behavior_get_binding(binding->behavior_dev); + + if (!behavior) { + return -ENODEV; + } + + struct behavior_parameter_metadata metadata; + int ret = behavior_get_parameter_metadata(behavior, &metadata); + + if (ret < 0) { + LOG_WRN("Failed getting metadata for %s: %d", binding->behavior_dev, ret); + return ret; + } + + return zmk_behavior_check_params_match_metadata(&metadata, binding->param1, binding->param2); +#else + return 0; +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +} + #if IS_ENABLED(CONFIG_LOG) static int check_behavior_names(void) { // Behavior names must be unique, but we don't have a good way to enforce this diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 3f836b73d76..d67ce2e7a8a 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -18,6 +18,82 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata no_arg_values[] = { + { + .display_name = "Toggle On/Off", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_TOG_CMD, + }, + { + .display_name = "Turn On", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_ON_CMD, + }, + { + .display_name = "Turn OFF", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_OFF_CMD, + }, + { + .display_name = "Increase Brightness", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_INC_CMD, + }, + { + .display_name = "Decrease Brightness", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_DEC_CMD, + }, + { + .display_name = "Cycle Brightness", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_CYCLE_CMD, + }, +}; + +static const struct behavior_parameter_value_metadata one_arg_p1_values[] = { + { + .display_name = "Set Brightness", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BL_SET_CMD, + }, +}; + +static const struct behavior_parameter_value_metadata one_arg_p2_values[] = { + { + .display_name = "Brightness", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_RANGE, + .range = + { + .min = 0, + .max = 255, + }, + }, +}; + +static const struct behavior_parameter_metadata_set no_args_set = { + .param1_values = no_arg_values, + .param1_values_len = ARRAY_SIZE(no_arg_values), +}; + +static const struct behavior_parameter_metadata_set one_args_set = { + .param1_values = one_arg_p1_values, + .param1_values_len = ARRAY_SIZE(one_arg_p1_values), + .param2_values = one_arg_p2_values, + .param2_values_len = ARRAY_SIZE(one_arg_p2_values), +}; + +static const struct behavior_parameter_metadata_set sets[] = {no_args_set, one_args_set}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(sets), + .sets = sets, +}; + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static int behavior_backlight_init(const struct device *dev) { return 0; } static int @@ -89,6 +165,9 @@ static const struct behavior_driver_api behavior_backlight_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, .locality = BEHAVIOR_LOCALITY_GLOBAL, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif }; BEHAVIOR_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, POST_KERNEL, diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 03bb7d8c898..f439e49b1cf 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -20,6 +20,74 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata no_arg_values[] = { + { + .display_name = "Next Profile", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BT_NXT_CMD, + }, + { + .display_name = "Previous Profile", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BT_PRV_CMD, + }, + { + .display_name = "Clear All Profiles", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BT_CLR_ALL_CMD, + }, + { + .display_name = "Clear Selected Profile", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BT_CLR_CMD, + }, +}; + +static const struct behavior_parameter_metadata_set no_args_set = { + .param1_values = no_arg_values, + .param1_values_len = ARRAY_SIZE(no_arg_values), +}; + +static const struct behavior_parameter_value_metadata prof_index_param1_values[] = { + { + .display_name = "Select Profile", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BT_SEL_CMD, + }, + { + .display_name = "Disconnect Profile", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = BT_DISC_CMD, + }, +}; + +static const struct behavior_parameter_value_metadata prof_index_param2_values[] = { + { + .display_name = "Profile", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_RANGE, + .range = {.min = 0, .max = ZMK_BLE_PROFILE_COUNT}, + }, +}; + +static const struct behavior_parameter_metadata_set profile_index_metadata_set = { + .param1_values = prof_index_param1_values, + .param1_values_len = ARRAY_SIZE(prof_index_param1_values), + .param2_values = prof_index_param2_values, + .param2_values_len = ARRAY_SIZE(prof_index_param2_values), +}; + +static const struct behavior_parameter_metadata_set metadata_sets[] = {no_args_set, + profile_index_metadata_set}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(metadata_sets), + .sets = metadata_sets, +}; + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { @@ -54,6 +122,9 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_bt_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; BEHAVIOR_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, POST_KERNEL, diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 57263d1c85e..1c050c44fe5 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -68,6 +68,12 @@ struct behavior_hold_tap_config { int32_t hold_trigger_key_positions[]; }; +struct behavior_hold_tap_data { +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + struct behavior_parameter_metadata_set set; +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +}; + // this data is specific for each hold-tap struct active_hold_tap { int32_t position; @@ -652,9 +658,52 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, return ZMK_BEHAVIOR_OPAQUE; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +static int hold_tap_parameter_metadata(const struct device *hold_tap, + struct behavior_parameter_metadata *param_metadata) { + const struct behavior_hold_tap_config *cfg = hold_tap->config; + struct behavior_hold_tap_data *data = hold_tap->data; + int err; + struct behavior_parameter_metadata child_meta; + + err = behavior_get_parameter_metadata(zmk_behavior_get_binding(cfg->hold_behavior_dev), + &child_meta); + if (err < 0) { + LOG_WRN("Failed to get the hold behavior parameter: %d", err); + return err; + } + + if (child_meta.sets_len > 0) { + data->set.param1_values = child_meta.sets[0].param1_values; + data->set.param1_values_len = child_meta.sets[0].param1_values_len; + } + + err = behavior_get_parameter_metadata(zmk_behavior_get_binding(cfg->tap_behavior_dev), + &child_meta); + if (err < 0) { + LOG_WRN("Failed to get the tap behavior parameter: %d", err); + return err; + } + + if (child_meta.sets_len > 0) { + data->set.param2_values = child_meta.sets[0].param1_values; + data->set.param2_values_len = child_meta.sets[0].param1_values_len; + } + + param_metadata->sets = &data->set; + param_metadata->sets_len = 1; + + return 0; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static const struct behavior_driver_api behavior_hold_tap_driver_api = { .binding_pressed = on_hold_tap_binding_pressed, .binding_released = on_hold_tap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = hold_tap_parameter_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static int position_state_changed_listener(const zmk_event_t *eh) { @@ -791,7 +840,7 @@ static int behavior_hold_tap_init(const struct device *dev) { } #define KP_INST(n) \ - static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ + static const struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ .hold_behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(n, bindings, 0)), \ .tap_behavior_dev = DEVICE_DT_NAME(DT_INST_PHANDLE_BY_IDX(n, bindings, 1)), \ @@ -807,9 +856,10 @@ static int behavior_hold_tap_init(const struct device *dev) { .hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \ .hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \ }; \ - BEHAVIOR_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \ - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ - &behavior_hold_tap_driver_api); + static struct behavior_hold_tap_data behavior_hold_tap_data_##n = {}; \ + BEHAVIOR_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, &behavior_hold_tap_data_##n, \ + &behavior_hold_tap_config_##n, POST_KERNEL, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 566cfcfba77..b090401ec50 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -16,6 +16,27 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata param_values[] = { + { + .display_name = "Key", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE, + }, +}; + +static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ + .param1_values = param_values, + .param1_values_len = ARRAY_SIZE(param_values), +}}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(param_metadata_set), + .sets = param_metadata_set, +}; + +#endif + static int behavior_key_press_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, @@ -31,7 +52,12 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, } static const struct behavior_driver_api behavior_key_press_driver_api = { - .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +}; #define KP_INST(n) \ BEHAVIOR_DT_INST_DEFINE(n, behavior_key_press_init, NULL, NULL, NULL, POST_KERNEL, \ diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index 0dc0f5abfdc..d967af0146b 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -31,9 +31,34 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, return 0; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata param_values[] = { + { + .display_name = "Key", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, + .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_HID_USAGE, + }, +}; + +static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ + .param1_values = param_values, + .param1_values_len = ARRAY_SIZE(param_values), +}}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(param_metadata_set), + .sets = param_metadata_set, +}; + +#endif + static const struct behavior_driver_api behavior_key_toggle_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; #define KT_INST(n) \ diff --git a/app/src/behaviors/behavior_macro.c b/app/src/behaviors/behavior_macro.c index acffe3d8857..b535ed8be07 100644 --- a/app/src/behaviors/behavior_macro.c +++ b/app/src/behaviors/behavior_macro.c @@ -34,6 +34,10 @@ struct behavior_macro_trigger_state { struct behavior_macro_state { struct behavior_macro_trigger_state release_state; +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + struct behavior_parameter_metadata_set set; +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + uint32_t press_bindings_count; }; @@ -209,9 +213,100 @@ static int on_macro_binding_released(struct zmk_behavior_binding *binding, return ZMK_BEHAVIOR_OPAQUE; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static void assign_values_to_set(enum param_source param_source, + struct behavior_parameter_metadata_set *set, + const struct behavior_parameter_value_metadata *values, + size_t values_len) { + if (param_source == PARAM_SOURCE_MACRO_1ST) { + set->param1_values = values; + set->param1_values_len = values_len; + } else { + set->param2_values = values; + set->param2_values_len = values_len; + } +} + +// This function will dynamically determine the parameter metadata for a particular macro by +// inspecting the macro *bindings* to see what behaviors in that list receive the macro parameters, +// and then using the metadata from those behaviors for the macro itself. +// +// Care need be taken, where a behavior in the list takes two parameters, and the macro passes along +// a value for the *second* parameter, we need to make sure we find the right metadata set for the +// referenced behavior that matches the first parameter. +static int get_macro_parameter_metadata(const struct device *macro, + struct behavior_parameter_metadata *param_metadata) { + const struct behavior_macro_config *cfg = macro->config; + struct behavior_macro_state *data = macro->data; + struct behavior_macro_trigger_state state = {0}; + + for (int i = 0; (i < cfg->count) && (!data->set.param1_values || !data->set.param2_values); + i++) { + if (handle_control_binding(&state, &cfg->bindings[i]) || + (state.param1_source == PARAM_SOURCE_BINDING && + state.param2_source == PARAM_SOURCE_BINDING)) { + continue; + } + + LOG_DBG("checking %d for the given state", i); + + struct behavior_parameter_metadata binding_meta; + int err = behavior_get_parameter_metadata( + zmk_behavior_get_binding(cfg->bindings[i].behavior_dev), &binding_meta); + if (err < 0 || binding_meta.sets_len == 0) { + LOG_WRN("Failed to fetch macro binding parameter details %d", err); + return -ENOTSUP; + } + + // If both macro parameters get passed to this one entry, use + // the metadata for this behavior verbatim. + if (state.param1_source != PARAM_SOURCE_BINDING && + state.param2_source != PARAM_SOURCE_BINDING) { + param_metadata->sets_len = binding_meta.sets_len; + param_metadata->sets = binding_meta.sets; + return 0; + } + + if (state.param1_source != PARAM_SOURCE_BINDING) { + assign_values_to_set(state.param1_source, &data->set, + binding_meta.sets[0].param1_values, + binding_meta.sets[0].param1_values_len); + } + + if (state.param2_source != PARAM_SOURCE_BINDING) { + // For the param2 metadata, we need to find a set that matches fully bound first + // parameter of our macro entry, and use the metadata from that set. + for (int s = 0; s < binding_meta.sets_len; s++) { + if (zmk_behavior_validate_param_values(binding_meta.sets[s].param1_values, + binding_meta.sets[s].param1_values_len, + cfg->bindings[i].param1) >= 0) { + assign_values_to_set(state.param2_source, &data->set, + binding_meta.sets[s].param2_values, + binding_meta.sets[s].param2_values_len); + break; + } + } + } + + state.param1_source = PARAM_SOURCE_BINDING; + state.param2_source = PARAM_SOURCE_BINDING; + } + + param_metadata->sets_len = 1; + param_metadata->sets = &data->set; + + return 0; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static const struct behavior_driver_api behavior_macro_driver_api = { .binding_pressed = on_macro_binding_pressed, .binding_released = on_macro_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = get_macro_parameter_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; #define TRANSFORMED_BEHAVIORS(n) \ diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index 0c86e605b55..e27889df96f 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -15,6 +15,27 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata param_values[] = { + { + .display_name = "Layer", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_INDEX, + }, +}; + +static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ + .param1_values = param_values, + .param1_values_len = ARRAY_SIZE(param_values), +}}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(param_metadata_set), + .sets = param_metadata_set, +}; + +#endif + struct behavior_mo_config {}; struct behavior_mo_data {}; @@ -33,7 +54,12 @@ static int mo_keymap_binding_released(struct zmk_behavior_binding *binding, } static const struct behavior_driver_api behavior_mo_driver_api = { - .binding_pressed = mo_keymap_binding_pressed, .binding_released = mo_keymap_binding_released}; + .binding_pressed = mo_keymap_binding_pressed, + .binding_released = mo_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +}; static const struct behavior_mo_config behavior_mo_config = {}; diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 0137622aceb..b1dc4ad3327 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -31,6 +31,9 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_none_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; BEHAVIOR_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, POST_KERNEL, diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index d172c3a11b8..ffa57d16357 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -20,6 +20,42 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata std_values[] = { + { + .value = OUT_TOG, + .display_name = "Toggle Outputs", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + }, +#if IS_ENABLED(CONFIG_ZMK_USB) + { + .value = OUT_USB, + .display_name = "USB Output", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + }, +#endif // IS_ENABLED(CONFIG_ZMK_USB) +#if IS_ENABLED(CONFIG_ZMK_BLE) + { + .value = OUT_BLE, + .display_name = "BLE Output", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + }, +#endif // IS_ENABLED(CONFIG_ZMK_BLE) +}; + +static const struct behavior_parameter_metadata_set std_set = { + .param1_values = std_values, + .param1_values_len = ARRAY_SIZE(std_values), +}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = 1, + .sets = &std_set, +}; + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { @@ -40,6 +76,9 @@ static int behavior_out_init(const struct device *dev) { return 0; } static const struct behavior_driver_api behavior_outputs_driver_api = { .binding_pressed = on_keymap_binding_pressed, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; BEHAVIOR_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, POST_KERNEL, diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index a16ee591ed4..c37e5217c73 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -18,6 +18,119 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata no_arg_values[] = { + { + .display_name = "Toggle On/Off", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_TOG_CMD, + }, + { + .display_name = "Turn On", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_ON_CMD, + }, + { + .display_name = "Turn OFF", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_OFF_CMD, + }, + { + .display_name = "Hue Up", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_HUI_CMD, + }, + { + .display_name = "Hue Down", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_HUD_CMD, + }, + { + .display_name = "Saturation Up", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_SAI_CMD, + }, + { + .display_name = "Saturation Down", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_SAD_CMD, + }, + { + .display_name = "Brightness Up", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_BRI_CMD, + }, + { + .display_name = "Brightness Down", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_BRD_CMD, + }, + { + .display_name = "Speed Up", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_SPI_CMD, + }, + { + .display_name = "Speed Down", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_SPD_CMD, + }, + { + .display_name = "Next Effect", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_EFF_CMD, + }, + { + .display_name = "Previous Effect", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_EFR_CMD, + }, +}; + +static const struct behavior_parameter_metadata_set no_args_set = { + .param1_values = no_arg_values, + .param1_values_len = ARRAY_SIZE(no_arg_values), +}; + +/* +static const struct behavior_parameter_value_metadata hsv_p1_value_metadata_values[] = { + { + .display_name = "Set Color", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE, + .value = RGB_COLOR_HSB_CMD, + }, +}; + +static const struct behavior_parameter_value_metadata hsv_p2_value_metadata_values[] = { + { + .display_name = "Color", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, + .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_HSV, + }, +}; + +static const struct behavior_parameter_metadata_set hsv_value_metadata_set = { + .param1_values = hsv_p1_value_metadata_values, + .param1_values_len = ARRAY_SIZE(hsv_p1_value_metadata_values), + .param_values = hsv_p2_value_metadata_values, + .param_values_len = ARRAY_SIZE(hsv_p2_value_metadata_values), +}; + +*/ + +static const struct behavior_parameter_metadata_set sets[] = { + no_args_set, + // hsv_value_metadata_set, +}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(sets), + .sets = sets, +}; + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static int behavior_rgb_underglow_init(const struct device *dev) { return 0; } static int @@ -147,6 +260,9 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, .locality = BEHAVIOR_LOCALITY_GLOBAL, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif }; BEHAVIOR_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, POST_KERNEL, diff --git a/app/src/behaviors/behavior_soft_off.c b/app/src/behaviors/behavior_soft_off.c index 461ce933cf7..fcffd09ae5e 100644 --- a/app/src/behaviors/behavior_soft_off.c +++ b/app/src/behaviors/behavior_soft_off.c @@ -74,6 +74,9 @@ static const struct behavior_driver_api behavior_soft_off_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, .locality = BEHAVIOR_LOCALITY_GLOBAL, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; #define BSO_INST(n) \ diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index b0e9f3ed0c0..d1299c78d7f 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -188,9 +188,41 @@ static int on_sticky_key_binding_released(struct zmk_behavior_binding *binding, return ZMK_BEHAVIOR_OPAQUE; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static int sticky_key_parameter_domains(const struct device *sk, + struct behavior_parameter_metadata *param_metadata) { + const struct behavior_sticky_key_config *cfg = sk->config; + + struct behavior_parameter_metadata child_metadata; + + int err = behavior_get_parameter_metadata(zmk_behavior_get_binding(cfg->behavior.behavior_dev), + &child_metadata); + if (err < 0) { + LOG_WRN("Failed to get the sticky key bound behavior parameter: %d", err); + } + + for (int s = 0; s < child_metadata.sets_len; s++) { + const struct behavior_parameter_metadata_set *set = &child_metadata.sets[s]; + + if (set->param2_values_len > 0) { + return -ENOTSUP; + } + } + + *param_metadata = child_metadata; + + return 0; +} + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + static const struct behavior_driver_api behavior_sticky_key_driver_api = { .binding_pressed = on_sticky_key_binding_pressed, .binding_released = on_sticky_key_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = sticky_key_parameter_domains, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static int sticky_key_keycode_state_changed_listener(const zmk_event_t *eh); @@ -337,7 +369,7 @@ struct behavior_sticky_key_data {}; static struct behavior_sticky_key_data behavior_sticky_key_data; #define KP_INST(n) \ - static struct behavior_sticky_key_config behavior_sticky_key_config_##n = { \ + static const struct behavior_sticky_key_config behavior_sticky_key_config_##n = { \ .behavior = ZMK_KEYMAP_EXTRACT_BINDING(0, DT_DRV_INST(n)), \ .release_after_ms = DT_INST_PROP(n, release_after_ms), \ .quick_release = DT_INST_PROP(n, quick_release), \ diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 4f6fa1a134e..ce57b70fc4b 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -189,6 +189,9 @@ void behavior_tap_dance_timer_handler(struct k_work *item) { static const struct behavior_driver_api behavior_tap_dance_driver_api = { .binding_pressed = on_tap_dance_binding_pressed, .binding_released = on_tap_dance_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static int tap_dance_position_state_changed_listener(const zmk_event_t *eh); diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index 1c87a925905..d260087efce 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -32,9 +32,34 @@ static int to_keymap_binding_released(struct zmk_behavior_binding *binding, return ZMK_BEHAVIOR_OPAQUE; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata param_values[] = { + { + .display_name = "Layer", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, + .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_LAYER_INDEX, + }, +}; + +static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ + .param1_values = param_values, + .param1_values_len = ARRAY_SIZE(param_values), +}}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(param_metadata_set), + .sets = param_metadata_set, +}; + +#endif + static const struct behavior_driver_api behavior_to_driver_api = { .binding_pressed = to_keymap_binding_pressed, .binding_released = to_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; BEHAVIOR_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, POST_KERNEL, diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index 817462df5aa..df261ed3a34 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -34,9 +34,34 @@ static int tog_keymap_binding_released(struct zmk_behavior_binding *binding, return ZMK_BEHAVIOR_OPAQUE; } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata param_values[] = { + { + .display_name = "Layer", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, + .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_LAYER_INDEX, + }, +}; + +static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ + .param1_values = param_values, + .param1_values_len = ARRAY_SIZE(param_values), +}}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(param_metadata_set), + .sets = param_metadata_set, +}; + +#endif + static const struct behavior_driver_api behavior_tog_driver_api = { .binding_pressed = tog_keymap_binding_pressed, .binding_released = tog_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static const struct behavior_tog_config behavior_tog_config = {}; From 3e2c428fca717d9e699dda371311b28e7791204c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 24 Jun 2024 10:58:34 -0600 Subject: [PATCH 1091/1130] chore: Add rp2040/USB logging core coverage. * Include an rp2040 core build target, and include USB logging snippet for completeness. --- app/core-coverage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/core-coverage.yml b/app/core-coverage.yml index 4a60aad9caf..7eef35cf70f 100644 --- a/app/core-coverage.yml +++ b/app/core-coverage.yml @@ -22,6 +22,9 @@ include: shield: kyria_left cmake-args: "-DCONFIG_ZMK_DISPLAY=y" nickname: "display" + - board: sparkfun_pro_micro_rp2040 + shield: reviung41 + cmake-args: "-DSNIPPET='zmk-usb-logging'" - board: nice_nano_v2 shield: kyria_right cmake-args: "-DCONFIG_ZMK_DISPLAY=y" From 0bea7832e99a2c7cc0c33c68de8abbd2e52c844c Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Mon, 25 Mar 2024 14:08:19 -0400 Subject: [PATCH 1092/1130] ci(build): amend changed-files invocation --- .github/workflows/build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c2d1992dc43..804c35f1eb2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -413,7 +413,9 @@ jobs: board-changes: ${{ steps.board-changes.outputs.result }} core-changes: ${{ steps.core-changes.outputs.result }} steps: - - uses: tj-actions/changed-files@v42 + - name: Checkout + uses: actions/checkout@v4 + - uses: tj-actions/changed-files@v44 id: changed-files with: json: true From 7c9477be6ed3b2b05b96cb0210f9ec2724f09ad5 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Mon, 25 Mar 2024 14:26:35 -0400 Subject: [PATCH 1093/1130] ci(build): improve security posture * Limit unnecessary permissions. * Avoid storing credentials. --- .github/workflows/build.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 804c35f1eb2..b54c9eefa9c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,8 @@ on: schedule: - cron: "22 4 * * *" +permissions: {} + jobs: build: if: ${{ always() }} @@ -25,6 +27,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + persist-credentials: false - name: Cache west modules uses: actions/cache@v4 env: @@ -179,6 +183,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + persist-credentials: false - name: Use Node.js uses: actions/setup-node@v4 with: @@ -335,6 +341,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + persist-credentials: false - name: Use Node.js uses: actions/setup-node@v4 with: @@ -415,6 +423,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + persist-credentials: false - uses: tj-actions/changed-files@v44 id: changed-files with: From 9c6d1af102bd5986b254fc8def72cc3c80c74785 Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Mon, 25 Mar 2024 14:43:54 -0400 Subject: [PATCH 1094/1130] ci(build): limit run scope * Cancel redundant non-nightly runs and jobs dependent on canceled jobs. * Limit scheduled runs to zmkfirmware-owned repos. --- .github/workflows/build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b54c9eefa9c..9e09dc21074 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,10 @@ on: schedule: - cron: "22 4 * * *" +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name == 'schedule' }} + cancel-in-progress: true + permissions: {} jobs: @@ -135,7 +139,7 @@ jobs: throw new Error('Failed to build one or more configurations'); } compile-matrix: - if: ${{ always() }} + if: ${{ !cancelled() }} runs-on: ubuntu-latest needs: [core-coverage, board-changes, nightly] outputs: @@ -290,7 +294,7 @@ jobs: }); }))).flat(); nightly: - if: ${{ github.event_name == 'schedule' }} + if: ${{ github.event_name == 'schedule' && github.repository_owner == 'zmkfirmware' }} runs-on: ubuntu-latest needs: get-grouped-hardware outputs: From 4dce0961611a2297959ab27579f145a4fb9b097e Mon Sep 17 00:00:00 2001 From: honorless <86894501+lesshonor@users.noreply.github.com> Date: Sun, 7 Apr 2024 18:13:35 -0400 Subject: [PATCH 1095/1130] docs: improve settings_reset link --- docs/docs/troubleshooting/connection-issues.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/troubleshooting/connection-issues.mdx b/docs/docs/troubleshooting/connection-issues.mdx index 59a6a20811d..5fdd1c836a0 100644 --- a/docs/docs/troubleshooting/connection-issues.mdx +++ b/docs/docs/troubleshooting/connection-issues.mdx @@ -61,8 +61,8 @@ Save the file, commit the changes and push them to GitHub. Download the new firm -1. [Open the GitHub `Actions` tab and select the `Build` workflow](https://github.com/zmkfirmware/zmk/actions?query=workflow%3ABuild+branch%3Amain+event%3Apush). -1. Find one of the 'results' for which the core-coverage job was successfully run, indicated by a green checkmark in the core-coverage bubble like the image example below. +1. [Open the `Build` workflow](https://github.com/zmkfirmware/zmk/actions/workflows/build.yml?query=event%3Apush+branch%3Amain+is%3Asuccess) from the `Actions` tab of the ZMK GitHub repository. +1. Find one of the results for which the `core-coverage` job ran successfully, indicated by a green checkmark in the "core-coverage" bubble like the image example below. 1. From the next page under "Artifacts", download and unzip the `-settings_reset-zmk` zip file for the UF2 image. | ![Successful core-coverage Job](../../docs/assets/troubleshooting/splitpairing/corecoverage.png) | From 10d03ca46c84a2530701ef82e28ec018d34df905 Mon Sep 17 00:00:00 2001 From: Timoyoungster Date: Fri, 14 Jun 2024 02:28:49 +0200 Subject: [PATCH 1096/1130] fix: adding option to separate implicit mod release from key release This adds a new config value `ZMK_HID_SEPARATE_MOD_RELEASE_REPORT` where, if enabled, the report for a key release is sent separately to the accompanying modifier release signals, which are then sent in a second report. This fixes an issue where certain applications are unable to work with implicitly modified keys (e.g. colon) due to them registering the modifier release prior to the actual key release. Have tested this on my personal keyboard and `wev` now shows the signals in the correct order. => **Previously:** ```LSHIFT (pressed) -> colon (pressed) -> LSHIFT (released) -> **semi**colon (released)``` => **Now:** ```LSHIFT (pressed) -> colon (pressed) -> colon (released) -> LSHIFT (released)``` (This time without accidental files) --- app/Kconfig | 6 ++++++ app/src/hid_listener.c | 13 ++++++++++++- docs/docs/config/system.md | 9 +++++---- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 8f690175ddc..a45f2dc23f0 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -113,6 +113,12 @@ config ZMK_HID_INDICATORS Enable HID indicators, used for detecting state of Caps/Scroll/Num Lock, Kata, and Compose. +config ZMK_HID_SEPARATE_MOD_RELEASE_REPORT + bool "Release Modifiers Separately" + help + Send a separate release event for the modifiers, to make sure the release + of the modifier doesn't get recognized before the actual key's release event. + menu "Output Types" config ZMK_USB diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c index 2b8470820a1..2d17a395407 100644 --- a/app/src/hid_listener.c +++ b/app/src/hid_listener.c @@ -66,6 +66,17 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed return err; } +#if IS_ENABLED(CONFIG_ZMK_HID_SEPARATE_MOD_RELEASE_REPORT) + + // send report of normal key release early to fix the issue + // of some programs recognizing the implicit_mod release before the actual key release + err = zmk_endpoints_send_report(ev->usage_page); + if (err < 0) { + LOG_ERR("Failed to send key report for the released keycode (%d)", err); + } + +#endif // IS_ENABLED(CONFIG_ZMK_HID_SEPARATE_MOD_RELEASE_REPORT) + explicit_mods_changed = zmk_hid_unregister_mods(ev->explicit_modifiers); // There is a minor issue with this code. // If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released @@ -73,7 +84,7 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed // Solving this would require keeping track of which key's implicit modifiers are currently // active and only releasing modifiers at that time. implicit_mods_changed = zmk_hid_implicit_modifiers_release(); - ; + if (ev->usage_page != HID_USAGE_KEY && (explicit_mods_changed > 0 || implicit_mods_changed > 0)) { err = zmk_endpoints_send_report(HID_USAGE_KEY); diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 27923453207..cc34219543d 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -29,10 +29,11 @@ Making changes to any of the settings in this section modifies the HID report de ::: -| Config | Type | Description | Default | -| ------------------------------------- | ---- | -------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable receipt of HID/LED indicator state from connected hosts | n | -| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | +| Config | Type | Description | Default | +| -------------------------------------------- | ---- | -------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable receipt of HID/LED indicator state from connected hosts | n | +| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | +| `CONFIG_ZMK_HID_SEPARATE_MOD_RELEASE_REPORT` | bool | Release the Modifiers separate from and after the modified key | n | Exactly zero or one of the following options may be set to `y`. The first is used if none are set. From 29599e8b0acbe425d190f17da9bf6569abbda9f1 Mon Sep 17 00:00:00 2001 From: Timoyoungster Date: Fri, 14 Jun 2024 15:23:37 +0200 Subject: [PATCH 1097/1130] docs: hopefully more clear description of the new setting --- docs/docs/config/system.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index cc34219543d..5d63ca529f4 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -29,11 +29,11 @@ Making changes to any of the settings in this section modifies the HID report de ::: -| Config | Type | Description | Default | -| -------------------------------------------- | ---- | -------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable receipt of HID/LED indicator state from connected hosts | n | -| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | -| `CONFIG_ZMK_HID_SEPARATE_MOD_RELEASE_REPORT` | bool | Release the Modifiers separate from and after the modified key | n | +| Config | Type | Description | Default | +| -------------------------------------------- | ---- | ---------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_HID_INDICATORS` | bool | Enable receipt of HID/LED indicator state from connected hosts | n | +| `CONFIG_ZMK_HID_CONSUMER_REPORT_SIZE` | int | Number of consumer keys simultaneously reportable | 6 | +| `CONFIG_ZMK_HID_SEPARATE_MOD_RELEASE_REPORT` | bool | Send modifier release event **after** non-modifier release event | n | Exactly zero or one of the following options may be set to `y`. The first is used if none are set. From 49f7275bebc73a49065f419c6d05eac1c398596c Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 25 Jun 2024 11:57:54 -0600 Subject: [PATCH 1098/1130] fix: Add metadata to missed behaviors. --- app/src/behaviors/behavior_caps_word.c | 3 +++ app/src/behaviors/behavior_key_repeat.c | 24 ++++++++++++++++++++++++ app/src/behaviors/behavior_mod_morph.c | 3 +++ app/src/behaviors/behavior_reset.c | 3 +++ app/src/behaviors/behavior_transparent.c | 3 +++ 5 files changed, 36 insertions(+) diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index d9b3f24ec7d..bf74a4b3dd3 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -75,6 +75,9 @@ static int on_caps_word_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_caps_word_driver_api = { .binding_pressed = on_caps_word_binding_pressed, .binding_released = on_caps_word_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh); diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index c93fa722734..f2cd569f635 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -19,6 +19,27 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + +static const struct behavior_parameter_value_metadata param_values[] = { + { + .display_name = "Key", + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE, + }, +}; + +static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ + .param1_values = param_values, + .param1_values_len = ARRAY_SIZE(param_values), +}}; + +static const struct behavior_parameter_metadata metadata = { + .sets_len = ARRAY_SIZE(param_metadata_set), + .sets = param_metadata_set, +}; + +#endif + struct behavior_key_repeat_config { uint8_t index; uint8_t usage_pages_count; @@ -67,6 +88,9 @@ static int on_key_repeat_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_key_repeat_driver_api = { .binding_pressed = on_key_repeat_binding_pressed, .binding_released = on_key_repeat_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .parameter_metadata = &metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static int key_repeat_keycode_state_changed_listener(const zmk_event_t *eh); diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index 3a8bf08c198..303f96a7d05 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -75,6 +75,9 @@ static int on_mod_morph_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_mod_morph_driver_api = { .binding_pressed = on_mod_morph_binding_pressed, .binding_released = on_mod_morph_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; static int behavior_mod_morph_init(const struct device *dev) { return 0; } diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index c559f17fd6f..554132f4a1e 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -38,6 +38,9 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_reset_driver_api = { .binding_pressed = on_keymap_binding_pressed, .locality = BEHAVIOR_LOCALITY_EVENT_SOURCE, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; #define RST_INST(n) \ diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index c7bf802b9fc..32357046724 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -31,6 +31,9 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_driver_api behavior_transparent_driver_api = { .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; BEHAVIOR_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, POST_KERNEL, From b576d52d58eade3d909e536acffac282d71651c8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 27 Mar 2024 22:17:32 +0000 Subject: [PATCH 1099/1130] feat(core): Support adding subs to other listeners. * Used for ZMK Studio event remappers to be sure the one RPC event listener subscribes to their mapped events. --- app/include/zmk/event_manager.h | 1 + 1 file changed, 1 insertion(+) diff --git a/app/include/zmk/event_manager.h b/app/include/zmk/event_manager.h index e44207152d3..0eb63ad73d5 100644 --- a/app/include/zmk/event_manager.h +++ b/app/include/zmk/event_manager.h @@ -64,6 +64,7 @@ struct zmk_event_subscription { #define ZMK_LISTENER(mod, cb) const struct zmk_listener zmk_listener_##mod = {.callback = cb}; #define ZMK_SUBSCRIPTION(mod, ev_type) \ + extern const struct zmk_listener zmk_listener_##mod; \ const Z_DECL_ALIGN(struct zmk_event_subscription) \ _CONCAT(_CONCAT(zmk_event_sub_, mod), ev_type) __used \ __attribute__((__section__(".event_subscription"))) = { \ From f7c34c70bad6d09dbdb4bfdfad5a196179dbb8c8 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Apr 2024 16:44:42 +0000 Subject: [PATCH 1100/1130] refactor(ble): Extract API to get active profile connection. * Add `struct bt_conn *zmk_ble_active_profile_conn(void)` function for fetching a connection for the current profile. --- app/include/zmk/ble.h | 3 +++ app/src/ble.c | 15 +++++++++++++++ app/src/hog.c | 19 ++----------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index 773323c1cf9..cc55a6ce142 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -29,7 +29,10 @@ int zmk_ble_prof_disconnect(uint8_t index); int zmk_ble_active_profile_index(void); int zmk_ble_profile_index(const bt_addr_le_t *addr); + bt_addr_le_t *zmk_ble_active_profile_addr(void); +struct bt_conn *zmk_ble_active_profile_conn(void); + bool zmk_ble_active_profile_is_open(void); bool zmk_ble_active_profile_is_connected(void); char *zmk_ble_active_profile_name(void); diff --git a/app/src/ble.c b/app/src/ble.c index 7e1ae7d4949..b2dfbfa1eac 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -318,6 +318,21 @@ int zmk_ble_prof_disconnect(uint8_t index) { bt_addr_le_t *zmk_ble_active_profile_addr(void) { return &profiles[active_profile].peer; } +struct bt_conn *zmk_ble_active_profile_conn(void) { + struct bt_conn *conn; + bt_addr_le_t *addr = zmk_ble_active_profile_addr(); + + if (!bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) { + LOG_WRN("Not sending, no active address for current profile"); + return NULL; + } else if ((conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr)) == NULL) { + LOG_WRN("Not sending, not connected to active profile"); + return NULL; + } + + return conn; +} + char *zmk_ble_active_profile_name(void) { return profiles[active_profile].name; } #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) diff --git a/app/src/hog.c b/app/src/hog.c index f17f759c908..77dde989e3a 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -220,21 +220,6 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); -struct bt_conn *destination_connection(void) { - struct bt_conn *conn; - bt_addr_le_t *addr = zmk_ble_active_profile_addr(); - LOG_DBG("Address pointer %p", addr); - if (!bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) { - LOG_WRN("Not sending, no active address for current profile"); - return NULL; - } else if ((conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr)) == NULL) { - LOG_WRN("Not sending, not connected to active profile"); - return NULL; - } - - return conn; -} - K_THREAD_STACK_DEFINE(hog_q_stack, CONFIG_ZMK_BLE_THREAD_STACK_SIZE); struct k_work_q hog_work_q; @@ -246,7 +231,7 @@ void send_keyboard_report_callback(struct k_work *work) { struct zmk_hid_keyboard_report_body report; while (k_msgq_get(&zmk_hog_keyboard_msgq, &report, K_NO_WAIT) == 0) { - struct bt_conn *conn = destination_connection(); + struct bt_conn *conn = zmk_ble_active_profile_conn(); if (conn == NULL) { return; } @@ -298,7 +283,7 @@ void send_consumer_report_callback(struct k_work *work) { struct zmk_hid_consumer_report_body report; while (k_msgq_get(&zmk_hog_consumer_msgq, &report, K_NO_WAIT) == 0) { - struct bt_conn *conn = destination_connection(); + struct bt_conn *conn = zmk_ble_active_profile_conn(); if (conn == NULL) { return; } From 483a4930e992a219d9fe941d1e7369194d34b15f Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 17 Apr 2024 16:44:22 -0700 Subject: [PATCH 1101/1130] feat(behaviors): Add local ID system for behaviors * Add a new feature for tracking a given behavior by a new concept of a "behavior local ID" which is a stable 16-bit identifier for a given behavior, that is resilient to new behaviors being added and requires no additional work on the part of the behavior authors. * Add implementations for either settings lookup table, or CRC16 hashing of behavior device names for generating behavior local IDs. --- app/CMakeLists.txt | 4 + app/Kconfig.behaviors | 29 ++++ app/include/drivers/behavior.h | 19 ++- .../linker/zmk-behavior-local-id-map.ld | 9 ++ app/include/zmk/behavior.h | 22 +++ app/src/behavior.c | 135 ++++++++++++++++++ 6 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 app/include/linker/zmk-behavior-local-id-map.ld diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 0b681ea9531..2818e932256 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -11,6 +11,10 @@ project(zmk) zephyr_linker_sources(SECTIONS include/linker/zmk-behaviors.ld) zephyr_linker_sources(RODATA include/linker/zmk-events.ld) +if(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS) + zephyr_linker_sources(DATA_SECTIONS include/linker/zmk-behavior-local-id-map.ld) +endif() + zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/behavior.h) zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/ext_power.h) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index c6cc45f3b87..0fa345462dc 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -7,6 +7,35 @@ config ZMK_BEHAVIOR_METADATA Enabling this option adds APIs for documenting and fetching metadata describing a behaviors name, and supported parameters. +config ZMK_BEHAVIOR_LOCAL_IDS + bool "Local IDs" + +if ZMK_BEHAVIOR_LOCAL_IDS + +choice ZMK_BEHAVIOR_LOCAL_ID_TYPE + prompt "Local ID Type" + +config ZMK_BEHAVIOR_LOCAL_ID_TYPE_SETTINGS_TABLE + bool "Settings Table" + depends on SETTINGS + help + Use persistent entries in the settings subsystem to identify + behaviors by local ID, which uses the device name to generate + a new settings entry tying a presistant local ID to that name. + This guarantees stable, colllision-free local IDs at the expense + of settings storage used. + +config ZMK_BEHAVIOR_LOCAL_ID_TYPE_CRC16 + bool "CRC16 Hash" + help + Use the CRC16-ANSI hash of behavior device names to generate + stable behavior local IDs. This saves on settings storage at + the expense of (highly unlikely) risk of collisions. + +endchoice + +endif + config ZMK_BEHAVIOR_KEY_TOGGLE bool default y diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 3dd6e0623f7..0b814ff2828 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -108,6 +108,15 @@ struct zmk_behavior_ref { const struct zmk_behavior_metadata metadata; }; +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS) + +struct zmk_behavior_local_id_map { + const struct device *device; + zmk_behavior_local_id_t local_id; +}; + +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS) + #define ZMK_BEHAVIOR_REF_DT_NAME(node_id) _CONCAT(zmk_behavior_, DEVICE_DT_NAME_GET(node_id)) #if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) @@ -125,9 +134,17 @@ struct zmk_behavior_ref { #define ZMK_BEHAVIOR_REF_INITIALIZER(node_id, _dev) \ { .device = _dev, .metadata = ZMK_BEHAVIOR_METADATA_INITIALIZER(node_id), } +#define ZMK_BEHAVIOR_LOCAL_ID_MAP_INITIALIZER(node_id, _dev) \ + { .device = _dev, } + #define ZMK_BEHAVIOR_REF_DEFINE(name, node_id, _dev) \ static const STRUCT_SECTION_ITERABLE(zmk_behavior_ref, name) = \ - ZMK_BEHAVIOR_REF_INITIALIZER(node_id, _dev) + ZMK_BEHAVIOR_REF_INITIALIZER(node_id, _dev); \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS), \ + (static const STRUCT_SECTION_ITERABLE(zmk_behavior_local_id_map, \ + _CONCAT(_zmk_behavior_local_id_map, name)) = \ + ZMK_BEHAVIOR_LOCAL_ID_MAP_INITIALIZER(node_id, _dev)), \ + ()); #define ZMK_BEHAVIOR_REF_DT_DEFINE(node_id) \ ZMK_BEHAVIOR_REF_DEFINE(ZMK_BEHAVIOR_REF_DT_NAME(node_id), node_id, DEVICE_DT_GET(node_id)) diff --git a/app/include/linker/zmk-behavior-local-id-map.ld b/app/include/linker/zmk-behavior-local-id-map.ld new file mode 100644 index 00000000000..c91e64c43b1 --- /dev/null +++ b/app/include/linker/zmk-behavior-local-id-map.ld @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +ITERABLE_SECTION_RAM(zmk_behavior_local_id_map, 4) diff --git a/app/include/zmk/behavior.h b/app/include/zmk/behavior.h index 016fa3bc063..34a415ca06e 100644 --- a/app/include/zmk/behavior.h +++ b/app/include/zmk/behavior.h @@ -23,6 +23,8 @@ struct zmk_behavior_binding_event { int64_t timestamp; }; +typedef uint16_t zmk_behavior_local_id_t; + /** * @brief Get a const struct device* for a behavior from its @p name field. * @@ -36,3 +38,23 @@ struct zmk_behavior_binding_event { * unrelated node which shares the same name as a behavior. */ const struct device *zmk_behavior_get_binding(const char *name); + +/** + * @brief Get a local ID for a behavior from its @p name field. + * + * @param name Behavior name to search for. + * + * @retval The local ID value that can be used to reference the behavior later, across reboots. + * @retval UINT16_MAX if the behavior is not found or its initialization function failed. + */ +zmk_behavior_local_id_t zmk_behavior_get_local_id(const char *name); + +/** + * @brief Get a behavior name for a behavior from its @p local_id . + * + * @param local_id Behavior local ID used to search for the behavior + * + * @retval The name of the behavior that is associated with that local ID. + * @retval NULL if the behavior is not found or its initialization function failed. + */ +const char *zmk_behavior_find_behavior_name_from_local_id(zmk_behavior_local_id_t local_id); diff --git a/app/src/behavior.c b/app/src/behavior.c index 7777155f404..7505aa7f1c1 100644 --- a/app/src/behavior.c +++ b/app/src/behavior.c @@ -6,9 +6,17 @@ #include #include +#include #include #include +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS) && \ + IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_ID_TYPE_SETTINGS_TABLE) + +#include + +#endif + #include #include #include @@ -185,6 +193,133 @@ int zmk_behavior_validate_binding(const struct zmk_behavior_binding *binding) { #endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) } +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS) + +zmk_behavior_local_id_t zmk_behavior_get_local_id(const char *name) { + if (!name) { + return UINT16_MAX; + } + + STRUCT_SECTION_FOREACH(zmk_behavior_local_id_map, item) { + if (z_device_is_ready(item->device) && strcmp(item->device->name, name) == 0) { + return item->local_id; + } + } + + return UINT16_MAX; +} + +const char *zmk_behavior_find_behavior_name_from_local_id(zmk_behavior_local_id_t local_id) { + STRUCT_SECTION_FOREACH(zmk_behavior_local_id_map, item) { + if (z_device_is_ready(item->device) && item->local_id == local_id) { + return item->device->name; + } + } + + return NULL; +} + +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_ID_TYPE_CRC16) + +static int behavior_local_id_init(void) { + STRUCT_SECTION_FOREACH(zmk_behavior_local_id_map, item) { + item->local_id = crc16_ansi(item->device->name, strlen(item->device->name)); + } + + return 0; +} + +#elif IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_ID_TYPE_SETTINGS_TABLE) + +static zmk_behavior_local_id_t largest_local_id = 0; + +static int behavior_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + const char *next; + + if (settings_name_steq(name, "local_id", &next) && next) { + char *endptr; + uint8_t local_id = strtoul(next, &endptr, 10); + if (*endptr != '\0') { + LOG_WRN("Invalid behavior local ID: %s with endptr %s", next, endptr); + return -EINVAL; + } + + if (len >= 64) { + LOG_ERR("Too large binding setting size (got %d expected less than %d)", len, 64); + return -EINVAL; + } + + char name[len + 1]; + + int err = read_cb(cb_arg, name, len); + if (err <= 0) { + LOG_ERR("Failed to handle keymap binding from settings (err %d)", err); + return err; + } + + name[len] = '\0'; + STRUCT_SECTION_FOREACH(zmk_behavior_local_id_map, item) { + if (strcmp(name, item->device->name) == 0) { + item->local_id = local_id; + largest_local_id = MAX(largest_local_id, local_id); + return 0; + } + } + + return -EINVAL; + } + + return 0; +} + +static int behavior_handle_commit(void) { + STRUCT_SECTION_FOREACH(zmk_behavior_local_id_map, item) { + if (item->local_id != 0) { + continue; + } + + if (!item->device || !item->device->name || !device_is_ready(item->device)) { + LOG_WRN("Skipping ID for device that doesn't exist or isn't ready"); + continue; + } + + item->local_id = ++largest_local_id; + char setting_name[32]; + sprintf(setting_name, "behavior/local_id/%d", item->local_id); + + // If the `device->name` is readonly in flash, settings save can fail to copy/read it while + // persisting to flash, so copy the device name into memory first before saving. + char device_name[32]; + snprintf(device_name, ARRAY_SIZE(device_name), "%s", item->device->name); + + settings_save_one(setting_name, device_name, strlen(device_name)); + } + + return 0; +} + +SETTINGS_STATIC_HANDLER_DEFINE(behavior, "behavior", NULL, behavior_handle_set, + behavior_handle_commit, NULL); + +static int behavior_local_id_init(void) { + settings_subsys_init(); + + settings_load_subtree("behavior"); + + return 0; +} + +#else + +#error "A behavior local ID mechanism must be selected" + +#endif + +SYS_INIT(behavior_local_id_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); + +#endif + #if IS_ENABLED(CONFIG_LOG) static int check_behavior_names(void) { // Behavior names must be unique, but we don't have a good way to enforce this From 96e55c8be61e9a12cf06147ece38dd7596023bc6 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 28 Jun 2024 17:40:49 -0600 Subject: [PATCH 1102/1130] fix: BLE refactor mouse keys fix. --- app/core-coverage.yml | 4 ++++ app/src/hog.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/core-coverage.yml b/app/core-coverage.yml index 7eef35cf70f..1350044cffb 100644 --- a/app/core-coverage.yml +++ b/app/core-coverage.yml @@ -22,6 +22,10 @@ include: shield: kyria_left cmake-args: "-DCONFIG_ZMK_DISPLAY=y" nickname: "display" + - board: nice_nano_v2 + shield: kyria_left + cmake-args: "-DCONFIG_ZMK_MOUSE=y" + nickname: "mouse" - board: sparkfun_pro_micro_rp2040 shield: reviung41 cmake-args: "-DSNIPPET='zmk-usb-logging'" diff --git a/app/src/hog.c b/app/src/hog.c index 77dde989e3a..82fafc29cd7 100644 --- a/app/src/hog.c +++ b/app/src/hog.c @@ -336,7 +336,7 @@ K_MSGQ_DEFINE(zmk_hog_mouse_msgq, sizeof(struct zmk_hid_mouse_report_body), void send_mouse_report_callback(struct k_work *work) { struct zmk_hid_mouse_report_body report; while (k_msgq_get(&zmk_hog_mouse_msgq, &report, K_NO_WAIT) == 0) { - struct bt_conn *conn = destination_connection(); + struct bt_conn *conn = zmk_ble_active_profile_conn(); if (conn == NULL) { return; } From f2ea1da036f7c54199c3bcb79fcbda9753f91028 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Sun, 30 Jun 2024 17:59:46 +0100 Subject: [PATCH 1103/1130] fix(boards): Suppress devicetree warning nRF5x boards throw a spurious warning for duplicate unit-address when the devicetree gets processed Upstream issue: https://github.com/zephyrproject-rtos/zephyr/issues/29713 Warning suppressed as per: https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html --- app/boards/arm/adv360pro/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/bluemicro840/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/bt60/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/ckp/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/corneish_zen/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/glove80/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/mikoto/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/nice60/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/nice_nano/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/nrf52840_m2/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/nrfmicro/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/pillbug/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/puchi_ble/pre_dt_board.cmake | 9 +++++++++ app/boards/arm/s40nc/pre_dt_board.cmake | 9 +++++++++ 14 files changed, 126 insertions(+) create mode 100644 app/boards/arm/adv360pro/pre_dt_board.cmake create mode 100644 app/boards/arm/bluemicro840/pre_dt_board.cmake create mode 100644 app/boards/arm/bt60/pre_dt_board.cmake create mode 100644 app/boards/arm/ckp/pre_dt_board.cmake create mode 100644 app/boards/arm/corneish_zen/pre_dt_board.cmake create mode 100644 app/boards/arm/glove80/pre_dt_board.cmake create mode 100644 app/boards/arm/mikoto/pre_dt_board.cmake create mode 100644 app/boards/arm/nice60/pre_dt_board.cmake create mode 100644 app/boards/arm/nice_nano/pre_dt_board.cmake create mode 100644 app/boards/arm/nrf52840_m2/pre_dt_board.cmake create mode 100644 app/boards/arm/nrfmicro/pre_dt_board.cmake create mode 100644 app/boards/arm/pillbug/pre_dt_board.cmake create mode 100644 app/boards/arm/puchi_ble/pre_dt_board.cmake create mode 100644 app/boards/arm/s40nc/pre_dt_board.cmake diff --git a/app/boards/arm/adv360pro/pre_dt_board.cmake b/app/boards/arm/adv360pro/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/adv360pro/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/bluemicro840/pre_dt_board.cmake b/app/boards/arm/bluemicro840/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/bluemicro840/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/bt60/pre_dt_board.cmake b/app/boards/arm/bt60/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/bt60/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/ckp/pre_dt_board.cmake b/app/boards/arm/ckp/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/ckp/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/corneish_zen/pre_dt_board.cmake b/app/boards/arm/corneish_zen/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/corneish_zen/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/glove80/pre_dt_board.cmake b/app/boards/arm/glove80/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/glove80/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/mikoto/pre_dt_board.cmake b/app/boards/arm/mikoto/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/mikoto/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/nice60/pre_dt_board.cmake b/app/boards/arm/nice60/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/nice60/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/nice_nano/pre_dt_board.cmake b/app/boards/arm/nice_nano/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/nice_nano/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/nrf52840_m2/pre_dt_board.cmake b/app/boards/arm/nrf52840_m2/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/nrf52840_m2/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/pre_dt_board.cmake b/app/boards/arm/nrfmicro/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/nrfmicro/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/pillbug/pre_dt_board.cmake b/app/boards/arm/pillbug/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/pillbug/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/puchi_ble/pre_dt_board.cmake b/app/boards/arm/puchi_ble/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/puchi_ble/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file diff --git a/app/boards/arm/s40nc/pre_dt_board.cmake b/app/boards/arm/s40nc/pre_dt_board.cmake new file mode 100644 index 00000000000..05b0efe5f04 --- /dev/null +++ b/app/boards/arm/s40nc/pre_dt_board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +# Suppresses duplicate unit-address warning at build time for power, clock, acl and flash-controller +# https://docs.zephyrproject.org/latest/build/dts/intro-input-output.html + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") \ No newline at end of file From f18974e8c401b139058549dcd95ab7a4cdc7a6e9 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 1 Jul 2024 18:26:43 +0000 Subject: [PATCH 1104/1130] fix: Adjust hid indicator listeners for event refactor * Avoid static listener to prevent subscription issue. --- app/src/hid_indicators.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/hid_indicators.c b/app/src/hid_indicators.c index 1b489068956..a2220b1bead 100644 --- a/app/src/hid_indicators.c +++ b/app/src/hid_indicators.c @@ -64,5 +64,5 @@ static int profile_listener(const zmk_event_t *eh) { return 0; } -static ZMK_LISTENER(profile_listener, profile_listener); -static ZMK_SUBSCRIPTION(profile_listener, zmk_endpoint_changed); +ZMK_LISTENER(profile_listener, profile_listener); +ZMK_SUBSCRIPTION(profile_listener, zmk_endpoint_changed); From 80173f8ea33e592bba2aa59ae08f036ec44f4e81 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 3 Jul 2024 02:33:26 -0600 Subject: [PATCH 1105/1130] fix: Improve startup time with proper settings loading. * Avoid doing duplicate calls to setings_load_subtree, which iterates NVS fully each time under the hood, and instead use on settings_load later in the lifecycle. --- app/Kconfig.behaviors | 4 +++ app/include/zmk/behavior.h | 7 ++-- app/src/backlight.c | 14 ++++---- app/src/behavior.c | 14 ++------ app/src/ble.c | 48 ++++++++++++++-------------- app/src/endpoints.c | 13 ++------ app/src/ext_power_generic.c | 39 +++++++++++----------- app/src/main.c | 5 +++ app/src/rgb_underglow.c | 16 +++------- app/src/split/bluetooth/central.c | 24 +++++++++++++- app/src/split/bluetooth/peripheral.c | 47 ++++++++++++++++++--------- 11 files changed, 129 insertions(+), 102 deletions(-) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 0fa345462dc..d3f4537ec22 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -12,12 +12,16 @@ config ZMK_BEHAVIOR_LOCAL_IDS if ZMK_BEHAVIOR_LOCAL_IDS +config ZMK_BEHAVIOR_LOCAL_IDS_IN_BINDINGS + bool "Track in behavior bindings" + choice ZMK_BEHAVIOR_LOCAL_ID_TYPE prompt "Local ID Type" config ZMK_BEHAVIOR_LOCAL_ID_TYPE_SETTINGS_TABLE bool "Settings Table" depends on SETTINGS + select ZMK_BEHAVIOR_LOCAL_IDS_IN_BINDINGS help Use persistent entries in the settings subsystem to identify behaviors by local ID, which uses the device name to generate diff --git a/app/include/zmk/behavior.h b/app/include/zmk/behavior.h index 34a415ca06e..d45bbfffe75 100644 --- a/app/include/zmk/behavior.h +++ b/app/include/zmk/behavior.h @@ -11,7 +11,12 @@ #define ZMK_BEHAVIOR_OPAQUE 0 #define ZMK_BEHAVIOR_TRANSPARENT 1 +typedef uint16_t zmk_behavior_local_id_t; + struct zmk_behavior_binding { +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS_IN_BINDINGS) + zmk_behavior_local_id_t local_id; +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS_IN_BINDINGS) const char *behavior_dev; uint32_t param1; uint32_t param2; @@ -23,8 +28,6 @@ struct zmk_behavior_binding_event { int64_t timestamp; }; -typedef uint16_t zmk_behavior_local_id_t; - /** * @brief Get a const struct device* for a behavior from its @p name field. * diff --git a/app/src/backlight.c b/app/src/backlight.c index f050978ff94..22b730669ab 100644 --- a/app/src/backlight.c +++ b/app/src/backlight.c @@ -58,7 +58,7 @@ static int zmk_backlight_update(void) { #if IS_ENABLED(CONFIG_SETTINGS) static int backlight_settings_load_cb(const char *name, size_t len, settings_read_cb read_cb, - void *cb_arg, void *param) { + void *cb_arg) { const char *next; if (settings_name_steq(name, "state", &next) && !next) { if (len != sizeof(state)) { @@ -66,11 +66,18 @@ static int backlight_settings_load_cb(const char *name, size_t len, settings_rea } int rc = read_cb(cb_arg, &state, sizeof(state)); + if (rc >= 0) { + rc = zmk_backlight_update(); + } + return MIN(rc, 0); } return -ENOENT; } +SETTINGS_STATIC_HANDLER_DEFINE(backlight, "backlight", NULL, backlight_settings_load_cb, NULL, + NULL); + static void backlight_save_work_handler(struct k_work *work) { settings_save_one("backlight/state", &state, sizeof(state)); } @@ -85,11 +92,6 @@ static int zmk_backlight_init(void) { } #if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - int rc = settings_load_subtree_direct("backlight", backlight_settings_load_cb, NULL); - if (rc != 0) { - LOG_ERR("Failed to load backlight settings: %d", rc); - } k_work_init_delayable(&backlight_save_work, backlight_save_work_handler); #endif #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) diff --git a/app/src/behavior.c b/app/src/behavior.c index 7505aa7f1c1..0d9a4cdf38f 100644 --- a/app/src/behavior.c +++ b/app/src/behavior.c @@ -229,6 +229,8 @@ static int behavior_local_id_init(void) { return 0; } +SYS_INIT(behavior_local_id_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); + #elif IS_ENABLED(CONFIG_ZMK_BEHAVIOR_LOCAL_ID_TYPE_SETTINGS_TABLE) static zmk_behavior_local_id_t largest_local_id = 0; @@ -239,7 +241,7 @@ static int behavior_handle_set(const char *name, size_t len, settings_read_cb re if (settings_name_steq(name, "local_id", &next) && next) { char *endptr; - uint8_t local_id = strtoul(next, &endptr, 10); + zmk_behavior_local_id_t local_id = strtoul(next, &endptr, 10); if (*endptr != '\0') { LOG_WRN("Invalid behavior local ID: %s with endptr %s", next, endptr); return -EINVAL; @@ -302,22 +304,12 @@ static int behavior_handle_commit(void) { SETTINGS_STATIC_HANDLER_DEFINE(behavior, "behavior", NULL, behavior_handle_set, behavior_handle_commit, NULL); -static int behavior_local_id_init(void) { - settings_subsys_init(); - - settings_load_subtree("behavior"); - - return 0; -} - #else #error "A behavior local ID mechanism must be selected" #endif -SYS_INIT(behavior_local_id_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); - #endif #if IS_ENABLED(CONFIG_LOG) diff --git a/app/src/ble.c b/app/src/ble.c index b2dfbfa1eac..776730fe5c3 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -445,7 +445,11 @@ static int ble_profiles_handle_set(const char *name, size_t len, settings_read_c return 0; }; -struct settings_handler profiles_handler = {.name = "ble", .h_set = ble_profiles_handle_set}; +static int zmk_ble_complete_startup(void); + +static struct settings_handler profiles_handler = { + .name = "ble", .h_set = ble_profiles_handle_set, .h_commit = zmk_ble_complete_startup}; + #endif /* IS_ENABLED(CONFIG_SETTINGS) */ static bool is_conn_active_profile(const struct bt_conn *conn) { @@ -644,29 +648,7 @@ static void zmk_ble_ready(int err) { update_advertising(); } -static int zmk_ble_init(void) { - int err = bt_enable(NULL); - - if (err) { - LOG_ERR("BLUETOOTH FAILED (%d)", err); - return err; - } - -#if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - - err = settings_register(&profiles_handler); - if (err) { - LOG_ERR("Failed to setup the profile settings handler (err %d)", err); - return err; - } - - k_work_init_delayable(&ble_save_work, ble_save_profile_work); - - settings_load_subtree("ble"); - settings_load_subtree("bt"); - -#endif +static int zmk_ble_complete_startup(void) { #if IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) LOG_WRN("Clearing all existing BLE bond information from the keyboard"); @@ -706,6 +688,24 @@ static int zmk_ble_init(void) { return 0; } +static int zmk_ble_init(void) { + int err = bt_enable(NULL); + + if (err < 0 && err != -EALREADY) { + LOG_ERR("BLUETOOTH FAILED (%d)", err); + return err; + } + +#if IS_ENABLED(CONFIG_SETTINGS) + settings_register(&profiles_handler); + k_work_init_delayable(&ble_save_work, ble_save_profile_work); +#else + zmk_ble_complete_startup(); +#endif + + return 0; +} + #if IS_ENABLED(CONFIG_ZMK_BLE_PASSKEY_ENTRY) static bool zmk_ble_numeric_usage_to_value(const zmk_key_t key, const zmk_key_t one, diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 7c9d15a31fe..652438531f0 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -263,7 +263,8 @@ static int endpoints_handle_set(const char *name, size_t len, settings_read_cb r return 0; } -struct settings_handler endpoints_handler = {.name = "endpoints", .h_set = endpoints_handle_set}; +SETTINGS_STATIC_HANDLER_DEFINE(endpoints, "endpoints", NULL, endpoints_handle_set, NULL, NULL); + #endif /* IS_ENABLED(CONFIG_SETTINGS) */ static bool is_usb_ready(void) { @@ -322,17 +323,7 @@ static struct zmk_endpoint_instance get_selected_instance(void) { static int zmk_endpoints_init(void) { #if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - - int err = settings_register(&endpoints_handler); - if (err) { - LOG_ERR("Failed to register the endpoints settings handler (err %d)", err); - return err; - } - k_work_init_delayable(&endpoints_save_work, endpoints_save_preferred_work); - - settings_load_subtree("endpoints"); #endif current_instance = get_selected_instance(); diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 2586f436852..5a9cc5b86a9 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -121,12 +121,27 @@ static int ext_power_settings_set(const char *name, size_t len, settings_read_cb return -ENOENT; } -struct settings_handler ext_power_conf = {.name = "ext_power/state", - .h_set = ext_power_settings_set}; +static int ext_power_settings_commit() { + const struct device *dev = DEVICE_DT_GET(DT_DRV_INST(0)); + struct ext_power_generic_data *data = dev->data; + + if (!data->settings_init) { + + data->status = true; + k_work_schedule(&ext_power_save_work, K_NO_WAIT); + + ext_power_enable(dev); + } + + return 0; +} + +SETTINGS_STATIC_HANDLER_DEFINE(ext_power, "ext_power/state", NULL, ext_power_settings_set, + ext_power_settings_commit, NULL); + #endif static int ext_power_generic_init(const struct device *dev) { - struct ext_power_generic_data *data = dev->data; const struct ext_power_generic_config *config = dev->config; if (gpio_pin_configure_dt(&config->control, GPIO_OUTPUT_INACTIVE)) { @@ -135,25 +150,7 @@ static int ext_power_generic_init(const struct device *dev) { } #if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - - int err = settings_register(&ext_power_conf); - if (err) { - LOG_ERR("Failed to register the ext_power settings handler (err %d)", err); - return err; - } - k_work_init_delayable(&ext_power_save_work, ext_power_save_state_work); - - // Set default value (on) if settings isn't set - settings_load_subtree("ext_power"); - if (!data->settings_init) { - - data->status = true; - k_work_schedule(&ext_power_save_work, K_NO_WAIT); - - ext_power_enable(dev); - } #else // Default to the ext_power being open when no settings ext_power_enable(dev); diff --git a/app/src/main.c b/app/src/main.c index 9bd7af32723..0d9caf65b0d 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -24,6 +24,11 @@ int main(void) { return -ENOTSUP; } +#if IS_ENABLED(CONFIG_SETTINGS) + settings_subsys_init(); + settings_load(); +#endif + #ifdef CONFIG_ZMK_DISPLAY zmk_display_init(); #endif /* CONFIG_ZMK_DISPLAY */ diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 5bf1ef25e8e..3453fb44e0d 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -221,6 +221,10 @@ static int rgb_settings_set(const char *name, size_t len, settings_read_cb read_ rc = read_cb(cb_arg, &state, sizeof(state)); if (rc >= 0) { + if (state.on) { + k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50)); + } + return 0; } @@ -230,7 +234,7 @@ static int rgb_settings_set(const char *name, size_t len, settings_read_cb read_ return -ENOENT; } -struct settings_handler rgb_conf = {.name = "rgb/underglow", .h_set = rgb_settings_set}; +SETTINGS_STATIC_HANDLER_DEFINE(rgb_underglow, "rgb/underglow", NULL, rgb_settings_set, NULL, NULL); static void zmk_rgb_underglow_save_state_work(struct k_work *_work) { settings_save_one("rgb/underglow/state", &state, sizeof(state)); @@ -262,17 +266,7 @@ static int zmk_rgb_underglow_init(void) { }; #if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - - int err = settings_register(&rgb_conf); - if (err) { - LOG_ERR("Failed to register the ext_power settings handler (err %d)", err); - return err; - } - k_work_init_delayable(&underglow_save_work, zmk_rgb_underglow_save_state_work); - - settings_load_subtree("rgb/underglow"); #endif #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index ee21a12fa03..0f4cd78b531 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -865,13 +866,34 @@ int zmk_split_bt_update_hid_indicator(zmk_hid_indicators_t indicators) { #endif // IS_ENABLED(CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS) +static int finish_init() { + return IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) ? 0 : start_scanning(); +} + +#if IS_ENABLED(CONFIG_SETTINGS) + +static int central_ble_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + return 0; +} + +static struct settings_handler ble_central_settings_handler = { + .name = "ble_central", .h_set = central_ble_handle_set, .h_commit = finish_init}; + +#endif // IS_ENABLED(CONFIG_SETTINGS) + static int zmk_split_bt_central_init(void) { k_work_queue_start(&split_central_split_run_q, split_central_split_run_q_stack, K_THREAD_STACK_SIZEOF(split_central_split_run_q_stack), CONFIG_ZMK_BLE_THREAD_PRIORITY, NULL); bt_conn_cb_register(&conn_callbacks); - return IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) ? 0 : start_scanning(); +#if IS_ENABLED(CONFIG_SETTINGS) + settings_register(&ble_central_settings_handler); + return 0; +#else + return finish_init(); +#endif // IS_ENABLED(CONFIG_SETTINGS) } SYS_INIT(zmk_split_bt_central_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); diff --git a/app/src/split/bluetooth/peripheral.c b/app/src/split/bluetooth/peripheral.c index 6ce82d0aa16..5a12e0fc4dd 100644 --- a/app/src/split/bluetooth/peripheral.c +++ b/app/src/split/bluetooth/peripheral.c @@ -146,21 +146,7 @@ bool zmk_split_bt_peripheral_is_connected(void) { return is_connected; } bool zmk_split_bt_peripheral_is_bonded(void) { return is_bonded; } -static int zmk_peripheral_ble_init(void) { - int err = bt_enable(NULL); - - if (err) { - LOG_ERR("BLUETOOTH FAILED (%d)", err); - return err; - } - -#if IS_ENABLED(CONFIG_SETTINGS) - settings_subsys_init(); - - settings_load_subtree("ble"); - settings_load_subtree("bt"); -#endif - +static int zmk_peripheral_ble_complete_startup(void) { #if IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) LOG_WRN("Clearing all existing BLE bond information from the keyboard"); @@ -176,4 +162,35 @@ static int zmk_peripheral_ble_init(void) { return 0; } +#if IS_ENABLED(CONFIG_SETTINGS) + +static int peripheral_ble_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + return 0; +} + +static struct settings_handler ble_peripheral_settings_handler = { + .name = "ble_peripheral", + .h_set = peripheral_ble_handle_set, + .h_commit = zmk_peripheral_ble_complete_startup}; + +#endif // IS_ENABLED(CONFIG_SETTINGS) + +static int zmk_peripheral_ble_init(void) { + int err = bt_enable(NULL); + + if (err) { + LOG_ERR("BLUETOOTH FAILED (%d)", err); + return err; + } + +#if IS_ENABLED(CONFIG_SETTINGS) + settings_register(&ble_peripheral_settings_handler); +#else + zmk_peripheral_ble_complete_startup(); +#endif + + return 0; +} + SYS_INIT(zmk_peripheral_ble_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); From c5cca5b34f53263892257460acf681ffa490a240 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 24 Apr 2024 18:14:02 -0700 Subject: [PATCH 1106/1130] feat: Add keyboard physical layout system. * Add bindings to allow creating multiple physical layouts that specify their key's physical attributes, and the matching matrix transform and dependant kscan to use. * Synthesize a basic physical layout if none specified, for backwards compatibility. * Update matrix transform API to explicitly pass in the selected transform to the API instead of using a fixed chosen transform. * Move kscan subscription and handling into the physical layout code, so that selecting a different physical layout at runtime can also use the correct kscan instance. * Add `physical_layouts.dtsi` file to include so you can use the pre-configured `&key_physical_attrs` for adding you layout keys. --- app/CMakeLists.txt | 2 +- app/dts/bindings/zmk,key-physical-attrs.yaml | 24 ++ .../zmk,physical-layout-position-map.yaml | 23 ++ app/dts/bindings/zmk,physical-layout.yaml | 26 ++ app/dts/physical_layouts.dtsi | 13 + app/include/zmk/kscan.h | 11 - app/include/zmk/matrix.h | 18 +- app/include/zmk/matrix_transform.h | 14 +- app/include/zmk/physical_layouts.h | 43 ++ app/src/kscan.c | 87 ---- app/src/main.c | 7 - app/src/matrix_transform.c | 79 ++-- app/src/physical_layouts.c | 386 ++++++++++++++++++ 13 files changed, 598 insertions(+), 135 deletions(-) create mode 100644 app/dts/bindings/zmk,key-physical-attrs.yaml create mode 100644 app/dts/bindings/zmk,physical-layout-position-map.yaml create mode 100644 app/dts/bindings/zmk,physical-layout.yaml create mode 100644 app/dts/physical_layouts.dtsi delete mode 100644 app/include/zmk/kscan.h create mode 100644 app/include/zmk/physical_layouts.h delete mode 100644 app/src/kscan.c create mode 100644 app/src/physical_layouts.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 2818e932256..ab2e1502ac4 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -24,9 +24,9 @@ target_include_directories(app PRIVATE include) target_sources(app PRIVATE src/stdlib.c) target_sources(app PRIVATE src/activity.c) target_sources(app PRIVATE src/behavior.c) -target_sources(app PRIVATE src/kscan.c) target_sources_ifdef(CONFIG_ZMK_KSCAN_SIDEBAND_BEHAVIORS app PRIVATE src/kscan_sideband_behaviors.c) target_sources(app PRIVATE src/matrix_transform.c) +target_sources(app PRIVATE src/physical_layouts.c) target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) target_sources(app PRIVATE src/event_manager.c) diff --git a/app/dts/bindings/zmk,key-physical-attrs.yaml b/app/dts/bindings/zmk,key-physical-attrs.yaml new file mode 100644 index 00000000000..9ea070f8ce1 --- /dev/null +++ b/app/dts/bindings/zmk,key-physical-attrs.yaml @@ -0,0 +1,24 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# +# SPDX-License-Identifier: MIT + +description: | + The physical attributes of a key, including size, location, and rotation + +compatible: "zmk,key-physical-attrs" + +properties: + "#key-cells": + type: int + required: true + const: 7 + +key-cells: + - width + - height + - x + - y + - r + - rx + - ry diff --git a/app/dts/bindings/zmk,physical-layout-position-map.yaml b/app/dts/bindings/zmk,physical-layout-position-map.yaml new file mode 100644 index 00000000000..8647404b998 --- /dev/null +++ b/app/dts/bindings/zmk,physical-layout-position-map.yaml @@ -0,0 +1,23 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# +# SPDX-License-Identifier: MIT + +description: | + Describes how to correlate equivalent keys between layouts that don't have the exact same X,Y location. + +compatible: "zmk,physical-layout-position-map" + +properties: + complete: + type: boolean + description: If the mapping complete describes the key mapping, and no position based mapping should be used. + +child-binding: + properties: + physical-layout: + type: phandle + description: The physical layout that corresponds to this mapping entry. + positions: + type: array + description: Array of key positions that match the same array entry in the other sibling nodes. diff --git a/app/dts/bindings/zmk,physical-layout.yaml b/app/dts/bindings/zmk,physical-layout.yaml new file mode 100644 index 00000000000..3f9b8c244bd --- /dev/null +++ b/app/dts/bindings/zmk,physical-layout.yaml @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024 The ZMK Contributors +# +# SPDX-License-Identifier: MIT + +description: | + Describe the physical layout of a keyboard, including deps like the transform and kscan + that are needed for that layout to work. + +compatible: "zmk,physical-layout" + +properties: + display-name: + type: string + required: true + description: The name of this layout to display in the UI + transform: + type: phandle + required: true + description: The matrix transform to use along with this layout. + kscan: + type: phandle + description: The kscan to use along with this layout. The `zmk,kscan` chosen will be used as a fallback if this property is omitted. + keys: + type: phandle-array + description: Array of key physical attributes. diff --git a/app/dts/physical_layouts.dtsi b/app/dts/physical_layouts.dtsi new file mode 100644 index 00000000000..1c8703ec1ce --- /dev/null +++ b/app/dts/physical_layouts.dtsi @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2024 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + key_physical_attrs: key_physical_attrs { + compatible = "zmk,key-physical-attrs"; + + #key-cells = <7>; + }; +}; \ No newline at end of file diff --git a/app/include/zmk/kscan.h b/app/include/zmk/kscan.h deleted file mode 100644 index eebe41e743b..00000000000 --- a/app/include/zmk/kscan.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#pragma once - -#include - -int zmk_kscan_init(const struct device *dev); diff --git a/app/include/zmk/matrix.h b/app/include/zmk/matrix.h index 5f8cd7d7697..e38f5a4967c 100644 --- a/app/include/zmk/matrix.h +++ b/app/include/zmk/matrix.h @@ -9,15 +9,25 @@ #include #define ZMK_MATRIX_NODE_ID DT_CHOSEN(zmk_kscan) +#define ZMK_MATRIX_HAS_TRANSFORM DT_HAS_CHOSEN(zmk_matrix_transform) -#if DT_HAS_CHOSEN(zmk_matrix_transform) +#if DT_HAS_COMPAT_STATUS_OKAY(zmk_physical_layout) + +#if ZMK_MATRIX_HAS_TRANSFORM +#error "To use physical layouts, remove the chosen `zmk,matrix-transform` value." +#endif + +#define ZMK_PHYSICAL_LAYOUT_BYTE_ARRAY(node_id) \ + uint8_t _CONCAT(prop_, node_id)[DT_PROP_LEN(DT_PHANDLE(node_id, transform), map)]; + +#define ZMK_KEYMAP_LEN \ + sizeof(union {DT_FOREACH_STATUS_OKAY(zmk_physical_layout, ZMK_PHYSICAL_LAYOUT_BYTE_ARRAY)}) + +#elif ZMK_MATRIX_HAS_TRANSFORM #define ZMK_KEYMAP_TRANSFORM_NODE DT_CHOSEN(zmk_matrix_transform) #define ZMK_KEYMAP_LEN DT_PROP_LEN(ZMK_KEYMAP_TRANSFORM_NODE, map) -#define ZMK_MATRIX_ROWS DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, rows) -#define ZMK_MATRIX_COLS DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, columns) - #else /* DT_HAS_CHOSEN(zmk_matrix_transform) */ #if DT_NODE_HAS_PROP(ZMK_MATRIX_NODE_ID, row_gpios) diff --git a/app/include/zmk/matrix_transform.h b/app/include/zmk/matrix_transform.h index ffd3e3f1d29..42a98151bb2 100644 --- a/app/include/zmk/matrix_transform.h +++ b/app/include/zmk/matrix_transform.h @@ -6,4 +6,16 @@ #pragma once -int32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t column); \ No newline at end of file +#include + +typedef const struct zmk_matrix_transform *zmk_matrix_transform_t; + +#define ZMK_MATRIX_TRANSFORM_DEFAULT_EXTERN() \ + extern const struct zmk_matrix_transform zmk_matrix_transform_default +#define ZMK_MATRIX_TRANSFORM_EXTERN(node_id) \ + extern const struct zmk_matrix_transform _CONCAT(zmk_matrix_transform_, node_id) + +#define ZMK_MATRIX_TRANSFORM_T_FOR_NODE(node_id) &_CONCAT(zmk_matrix_transform_, node_id) + +int32_t zmk_matrix_transform_row_column_to_position(zmk_matrix_transform_t mt, uint32_t row, + uint32_t column); diff --git a/app/include/zmk/physical_layouts.h b/app/include/zmk/physical_layouts.h new file mode 100644 index 00000000000..8d8188e3c91 --- /dev/null +++ b/app/include/zmk/physical_layouts.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +struct zmk_key_physical_attrs { + int16_t width; + int16_t height; + int16_t x; + int16_t y; + int16_t rx; + int16_t ry; + int16_t r; +}; + +struct zmk_physical_layout { + const char *display_name; + + zmk_matrix_transform_t matrix_transform; + const struct device *kscan; + + const struct zmk_key_physical_attrs *keys; + size_t keys_len; +}; + +#define ZMK_PHYS_LAYOUTS_FOREACH(_ref) STRUCT_SECTION_FOREACH(zmk_physical_layout, _ref) + +size_t zmk_physical_layouts_get_list(struct zmk_physical_layout const *const **phys_layouts); + +int zmk_physical_layouts_select(uint8_t index); +int zmk_physical_layouts_get_selected(void); + +int zmk_physical_layouts_check_unsaved_selection(void); +int zmk_physical_layouts_save_selected(void); +int zmk_physical_layouts_revert_selected(void); + +int zmk_physical_layouts_get_position_map(uint8_t source, uint8_t dest, uint32_t *map); diff --git a/app/src/kscan.c b/app/src/kscan.c deleted file mode 100644 index 5c7a5535a5b..00000000000 --- a/app/src/kscan.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2020 The ZMK Contributors - * - * SPDX-License-Identifier: MIT - */ - -#include -#include -#include -#include -#include -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -#include -#include -#include - -#define ZMK_KSCAN_EVENT_STATE_PRESSED 0 -#define ZMK_KSCAN_EVENT_STATE_RELEASED 1 - -struct zmk_kscan_event { - uint32_t row; - uint32_t column; - uint32_t state; -}; - -struct zmk_kscan_msg_processor { - struct k_work work; -} msg_processor; - -K_MSGQ_DEFINE(zmk_kscan_msgq, sizeof(struct zmk_kscan_event), CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE, 4); - -static void zmk_kscan_callback(const struct device *dev, uint32_t row, uint32_t column, - bool pressed) { - struct zmk_kscan_event ev = { - .row = row, - .column = column, - .state = (pressed ? ZMK_KSCAN_EVENT_STATE_PRESSED : ZMK_KSCAN_EVENT_STATE_RELEASED)}; - - k_msgq_put(&zmk_kscan_msgq, &ev, K_NO_WAIT); - k_work_submit(&msg_processor.work); -} - -void zmk_kscan_process_msgq(struct k_work *item) { - struct zmk_kscan_event ev; - - while (k_msgq_get(&zmk_kscan_msgq, &ev, K_NO_WAIT) == 0) { - bool pressed = (ev.state == ZMK_KSCAN_EVENT_STATE_PRESSED); - int32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); - - if (position < 0) { - LOG_WRN("Not found in transform: row: %d, col: %d, pressed: %s", ev.row, ev.column, - (pressed ? "true" : "false")); - continue; - } - - LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, - (pressed ? "true" : "false")); - raise_zmk_position_state_changed( - (struct zmk_position_state_changed){.source = ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL, - .state = pressed, - .position = position, - .timestamp = k_uptime_get()}); - } -} - -int zmk_kscan_init(const struct device *dev) { - if (dev == NULL) { - LOG_ERR("Failed to get the KSCAN device"); - return -EINVAL; - } - - k_work_init(&msg_processor.work, zmk_kscan_process_msgq); - -#if IS_ENABLED(CONFIG_PM_DEVICE) - if (pm_device_wakeup_is_capable(dev)) { - pm_device_wakeup_enable(dev, true); - } -#endif // IS_ENABLED(CONFIG_PM_DEVICE) - - kscan_config(dev, zmk_kscan_callback); - kscan_enable_callback(dev); - - return 0; -} diff --git a/app/src/main.c b/app/src/main.c index 0d9caf65b0d..60df1a45d83 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -12,18 +12,11 @@ #include LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); -#include -#include #include -#include int main(void) { LOG_INF("Welcome to ZMK!\n"); - if (zmk_kscan_init(DEVICE_DT_GET(ZMK_MATRIX_NODE_ID)) != 0) { - return -ENOTSUP; - } - #if IS_ENABLED(CONFIG_SETTINGS) settings_subsys_init(); settings_load(); diff --git a/app/src/matrix_transform.c b/app/src/matrix_transform.c index 6c616d5e824..97ab0efef50 100644 --- a/app/src/matrix_transform.c +++ b/app/src/matrix_transform.c @@ -4,12 +4,23 @@ * SPDX-License-Identifier: MIT */ +#include #include +#include #include #include #include -#ifdef ZMK_KEYMAP_TRANSFORM_NODE +#define DT_DRV_COMPAT zmk_matrix_transform + +struct zmk_matrix_transform { + uint32_t const *lookup_table; + size_t len; + uint8_t rows; + uint8_t columns; + uint8_t col_offset; + uint8_t row_offset; +}; /* the transform in the device tree is a list of (row,column) pairs that is * indexed by by the keymap position of that key. We want to invert this in @@ -28,38 +39,58 @@ #define INDEX_OFFSET 1 -#define TRANSFORM_ENTRY(i, _) \ - [(KT_ROW(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i)) * ZMK_MATRIX_COLS) + \ - KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i + INDEX_OFFSET +#if DT_HAS_COMPAT_STATUS_OKAY(zmk_matrix_transform) + +#define TRANSFORM_LOOKUP_ENTRY(i, n) \ + [(KT_ROW(DT_INST_PROP_BY_IDX(n, map, i)) * DT_INST_PROP(n, columns)) + \ + KT_COL(DT_INST_PROP_BY_IDX(n, map, i))] = i + INDEX_OFFSET -static uint32_t transform[] = {LISTIFY(ZMK_KEYMAP_LEN, TRANSFORM_ENTRY, (, ), 0)}; +#define MATRIX_TRANSFORM_INIT(n) \ + static const uint32_t _CONCAT(zmk_transform_lookup_table_, n)[] = { \ + LISTIFY(DT_INST_PROP_LEN(n, map), TRANSFORM_LOOKUP_ENTRY, (, ), n)}; \ + const struct zmk_matrix_transform _CONCAT(zmk_matrix_transform_, DT_DRV_INST(n)) = { \ + .rows = DT_INST_PROP(n, rows), \ + .columns = DT_INST_PROP(n, columns), \ + .col_offset = DT_INST_PROP(n, col_offset), \ + .row_offset = DT_INST_PROP(n, row_offset), \ + .lookup_table = _CONCAT(zmk_transform_lookup_table_, n), \ + .len = ARRAY_SIZE(_CONCAT(zmk_transform_lookup_table_, n)), \ + }; -#endif +DT_INST_FOREACH_STATUS_OKAY(MATRIX_TRANSFORM_INIT); -int32_t zmk_matrix_transform_row_column_to_position(uint32_t row, uint32_t column) { -#if DT_NODE_HAS_PROP(ZMK_KEYMAP_TRANSFORM_NODE, col_offset) - column += DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, col_offset); -#endif +#elif DT_HAS_CHOSEN(zmk_kscan) && defined(ZMK_MATRIX_COLS) && defined(ZMK_MATRIX_ROWS) -#if DT_NODE_HAS_PROP(ZMK_KEYMAP_TRANSFORM_NODE, row_offset) - row += DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, row_offset); -#endif +const struct zmk_matrix_transform zmk_matrix_transform_default = { + .rows = ZMK_MATRIX_ROWS, + .columns = ZMK_MATRIX_COLS, + .len = ZMK_KEYMAP_LEN, +}; - const uint32_t matrix_index = (row * ZMK_MATRIX_COLS) + column; +#else -#ifdef ZMK_KEYMAP_TRANSFORM_NODE - if (matrix_index >= ARRAY_SIZE(transform)) { - return -EINVAL; +#error "Need a matrix transform or compatible kscan selected to determine keymap size!" +` +#endif // DT_HAS_COMPAT_STATUS_OKAY(zmk_matrix_transform) + +int32_t zmk_matrix_transform_row_column_to_position(zmk_matrix_transform_t mt, uint32_t row, + uint32_t column) { + column += mt->col_offset; + row += mt->row_offset; + + if (!mt->lookup_table) { + return (row * mt->columns) + column; } - const uint32_t value = transform[matrix_index]; + uint16_t lookup_index = ((row * mt->columns) + column); + if (lookup_index >= mt->len) { + return -EINVAL; + } - if (!value) { + int32_t val = mt->lookup_table[lookup_index]; + if (val == 0) { return -EINVAL; } - return value - INDEX_OFFSET; -#else - return matrix_index; -#endif /* ZMK_KEYMAP_TRANSFORM_NODE */ -}; + return val - INDEX_OFFSET; +}; \ No newline at end of file diff --git a/app/src/physical_layouts.c b/app/src/physical_layouts.c new file mode 100644 index 00000000000..16b13e710c9 --- /dev/null +++ b/app/src/physical_layouts.c @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2024 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#if IS_ENABLED(CONFIG_SETTINGS) +#include +#endif + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include + +#define DT_DRV_COMPAT zmk_physical_layout + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +#define ZKPA_INIT(i, n) \ + (const struct zmk_key_physical_attrs) { \ + .width = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, width), \ + .height = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, height), \ + .x = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, x), \ + .y = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, y), \ + .rx = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, rx), \ + .ry = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, ry), \ + .r = (int16_t)(int32_t)DT_INST_PHA_BY_IDX(n, keys, i, r), \ + } + +#define ZMK_LAYOUT_INST(n) \ + static const struct zmk_key_physical_attrs const _CONCAT( \ + _zmk_physical_layout_keys_, n)[DT_INST_PROP_LEN_OR(n, keys, 0)] = { \ + LISTIFY(DT_INST_PROP_LEN_OR(n, keys, 0), ZKPA_INIT, (, ), n)}; \ + ZMK_MATRIX_TRANSFORM_EXTERN(DT_INST_PHANDLE(n, transform)); \ + static const struct zmk_physical_layout const _CONCAT(_zmk_physical_layout_, \ + DT_DRV_INST(n)) = { \ + .display_name = DT_INST_PROP_OR(n, display_name, "Layout #" #n), \ + .matrix_transform = ZMK_MATRIX_TRANSFORM_T_FOR_NODE(DT_INST_PHANDLE(n, transform)), \ + .keys = _CONCAT(_zmk_physical_layout_keys_, n), \ + .keys_len = DT_INST_PROP_LEN_OR(n, keys, 0), \ + .kscan = DEVICE_DT_GET(COND_CODE_1(DT_INST_PROP_LEN(n, kscan), \ + (DT_INST_PHANDLE(n, kscan)), (DT_CHOSEN(zmk_kscan))))}; + +DT_INST_FOREACH_STATUS_OKAY(ZMK_LAYOUT_INST) + +#define POS_MAP_COMPAT zmk_physical_layout_position_map +#define HAVE_POS_MAP DT_HAS_COMPAT_STATUS_OKAY(POS_MAP_COMPAT) + +#define POS_MAP_COMPLETE (HAVE_POS_MAP && DT_PROP(DT_INST(0, POS_MAP_COMPAT), complete)) + +#if HAVE_POS_MAP + +// Using sizeof + union trick to calculate the "positions" length statically. +#define ZMK_POS_MAP_POSITIONS_ARRAY(node_id) \ + uint8_t _CONCAT(prop_, node_id)[DT_PROP_LEN(node_id, positions)]; + +#define ZMK_POS_MAP_LEN \ + sizeof(union {DT_FOREACH_CHILD(DT_INST(0, POS_MAP_COMPAT), ZMK_POS_MAP_POSITIONS_ARRAY)}) + +struct position_map_entry { + const struct zmk_physical_layout *layout; + const uint32_t positions[ZMK_POS_MAP_LEN]; +}; + +#define ZMK_POS_MAP_ENTRY(node_id) \ + { \ + .layout = &_CONCAT(_zmk_physical_layout_, DT_PHANDLE(node_id, physical_layout)), \ + .positions = DT_PROP(node_id, positions), \ + } + +static const struct position_map_entry positions_maps[] = { + DT_FOREACH_CHILD_SEP(DT_INST(0, POS_MAP_COMPAT), ZMK_POS_MAP_ENTRY, (, ))}; + +#endif + +#define ZMK_LAYOUT_REF(n) &_CONCAT(_zmk_physical_layout_, DT_DRV_INST(n)), + +static const struct zmk_physical_layout *const layouts[] = { + DT_INST_FOREACH_STATUS_OKAY(ZMK_LAYOUT_REF)}; + +#elif DT_HAS_CHOSEN(zmk_matrix_transform) + +ZMK_MATRIX_TRANSFORM_EXTERN(DT_CHOSEN(zmk_matrix_transform)); + +static const struct zmk_physical_layout _CONCAT(_zmk_physical_layout_, chosen) = { + .display_name = "Default", + .matrix_transform = ZMK_MATRIX_TRANSFORM_T_FOR_NODE(DT_CHOSEN(zmk_matrix_transform)), + COND_CODE_1(DT_HAS_CHOSEN(zmk_kscan), (.kscan = DEVICE_DT_GET(DT_CHOSEN(zmk_kscan)), ), ())}; + +static const struct zmk_physical_layout *const layouts[] = { + &_CONCAT(_zmk_physical_layout_, chosen)}; + +#elif DT_HAS_CHOSEN(zmk_kscan) + +ZMK_MATRIX_TRANSFORM_DEFAULT_EXTERN(); +static const struct zmk_physical_layout _CONCAT(_zmk_physical_layout_, chosen) = { + .display_name = "Default", + .matrix_transform = &zmk_matrix_transform_default, + .kscan = DEVICE_DT_GET(DT_CHOSEN(zmk_kscan)), +}; + +static const struct zmk_physical_layout *const layouts[] = { + &_CONCAT(_zmk_physical_layout_, chosen)}; + +#endif + +const struct zmk_physical_layout *active; + +size_t zmk_physical_layouts_get_list(struct zmk_physical_layout const *const **dest_layouts) { + *dest_layouts = &layouts[0]; + + return ARRAY_SIZE(layouts); +} + +#define ZMK_KSCAN_EVENT_STATE_PRESSED 0 +#define ZMK_KSCAN_EVENT_STATE_RELEASED 1 + +struct zmk_kscan_event { + uint32_t row; + uint32_t column; + uint32_t state; +}; + +static struct zmk_kscan_msg_processor { struct k_work work; } msg_processor; + +K_MSGQ_DEFINE(physical_layouts_kscan_msgq, sizeof(struct zmk_kscan_event), + CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE, 4); + +static void zmk_physical_layout_kscan_callback(const struct device *dev, uint32_t row, + uint32_t column, bool pressed) { + if (dev != active->kscan) { + return; + } + + struct zmk_kscan_event ev = { + .row = row, + .column = column, + .state = (pressed ? ZMK_KSCAN_EVENT_STATE_PRESSED : ZMK_KSCAN_EVENT_STATE_RELEASED)}; + + k_msgq_put(&physical_layouts_kscan_msgq, &ev, K_NO_WAIT); + k_work_submit(&msg_processor.work); +} + +static void zmk_physical_layouts_kscan_process_msgq(struct k_work *item) { + struct zmk_kscan_event ev; + + while (k_msgq_get(&physical_layouts_kscan_msgq, &ev, K_NO_WAIT) == 0) { + bool pressed = (ev.state == ZMK_KSCAN_EVENT_STATE_PRESSED); + int32_t position = zmk_matrix_transform_row_column_to_position(active->matrix_transform, + ev.row, ev.column); + + if (position < 0) { + LOG_WRN("Not found in transform: row: %d, col: %d, pressed: %s", ev.row, ev.column, + (pressed ? "true" : "false")); + continue; + } + + LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s", ev.row, ev.column, position, + (pressed ? "true" : "false")); + raise_zmk_position_state_changed( + (struct zmk_position_state_changed){.source = ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL, + .state = pressed, + .position = position, + .timestamp = k_uptime_get()}); + } +} + +int zmk_physical_layouts_select_layout(const struct zmk_physical_layout *dest_layout) { + if (!dest_layout) { + return -ENODEV; + } + + if (dest_layout == active) { + return 0; + } + + if (active) { + if (active->kscan) { + kscan_disable_callback(active->kscan); +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + pm_device_runtime_put(active->kscan); +#elif IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_action_run(active->kscan, PM_DEVICE_ACTION_SUSPEND); +#endif + } + } + + active = dest_layout; + + if (active->kscan) { +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + int err = pm_device_runtime_get(active->kscan); + if (err < 0) { + LOG_WRN("PM runtime get of kscan device to enable it %d", err); + return err; + } +#elif IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_action_run(active->kscan, PM_DEVICE_ACTION_RESUME); +#endif + kscan_config(active->kscan, zmk_physical_layout_kscan_callback); + kscan_enable_callback(active->kscan); + } + + return 0; +} + +int zmk_physical_layouts_select(uint8_t index) { + if (index >= ARRAY_SIZE(layouts)) { + return -EINVAL; + } + + return zmk_physical_layouts_select_layout(layouts[index]); +} + +int zmk_physical_layouts_get_selected(void) { + for (int i = 0; i < ARRAY_SIZE(layouts); i++) { + if (layouts[i] == active) { + return i; + } + } + + return -ENODEV; +} + +#if IS_ENABLED(CONFIG_SETTINGS) + +static int8_t saved_selected_index = -1; + +#endif + +int zmk_physical_layouts_select_initial(void) { + const struct zmk_physical_layout *initial; + +#if DT_HAS_CHOSEN(zmk_physical_layout) + initial = &_CONCAT(_zmk_physical_layout_, DT_CHOSEN(zmk_physical_layout)); +#else + initial = layouts[0]; +#endif + + int ret = zmk_physical_layouts_select_layout(initial); + + return ret; +} + +int zmk_physical_layouts_check_unsaved_selection(void) { +#if IS_ENABLED(CONFIG_SETTINGS) + return saved_selected_index < 0 || + saved_selected_index == (uint8_t)zmk_physical_layouts_get_selected() + ? 0 + : 1; +#else + return -ENOTSUP; +#endif +} + +int zmk_physical_layouts_save_selected(void) { +#if IS_ENABLED(CONFIG_SETTINGS) + uint8_t val = (uint8_t)zmk_physical_layouts_get_selected(); + + return settings_save_one("physical_layouts/selected", &val, sizeof(val)); +#else + return -ENOTSUP; +#endif +} + +int zmk_physical_layouts_revert_selected(void) { return zmk_physical_layouts_select_initial(); } + +int zmk_physical_layouts_get_position_map(uint8_t source, uint8_t dest, uint32_t *map) { + if (source >= ARRAY_SIZE(layouts) || dest >= ARRAY_SIZE(layouts)) { + return -EINVAL; + } + + const struct zmk_physical_layout *src_layout = layouts[source]; + const struct zmk_physical_layout *dest_layout = layouts[dest]; + +#if HAVE_POS_MAP + const struct position_map_entry *src_pos_map = NULL; + const struct position_map_entry *dest_pos_map = NULL; + + for (int pm = 0; pm < ARRAY_SIZE(positions_maps); pm++) { + if (positions_maps[pm].layout == src_layout) { + src_pos_map = &positions_maps[pm]; + } + + if (positions_maps[pm].layout == dest_layout) { + dest_pos_map = &positions_maps[pm]; + } + } +#endif + + memset(map, UINT32_MAX, dest_layout->keys_len); + + for (int b = 0; b < dest_layout->keys_len; b++) { + bool found = false; + +#if HAVE_POS_MAP + if (src_pos_map && dest_pos_map) { + for (int m = 0; m < ZMK_POS_MAP_LEN; m++) { + if (dest_pos_map->positions[m] == b) { + map[b] = src_pos_map->positions[m]; + found = true; + break; + } + } + } +#endif + +#if !POS_MAP_COMPLETE + if (!found) { + const struct zmk_key_physical_attrs *key = &dest_layout->keys[b]; + for (int old_b = 0; old_b < src_layout->keys_len; old_b++) { + const struct zmk_key_physical_attrs *candidate_key = &src_layout->keys[old_b]; + + if (candidate_key->x == key->x && candidate_key->y == key->y) { + map[b] = old_b; + found = true; + break; + } + } + } +#endif + + if (!found || map[b] >= src_layout->keys_len) { + map[b] = UINT32_MAX; + } + } + + return dest_layout->keys_len; +} + +#if IS_ENABLED(CONFIG_SETTINGS) + +static int physical_layouts_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + const char *next; + + if (settings_name_steq(name, "selected", &next) && !next) { + if (len != sizeof(saved_selected_index)) { + return -EINVAL; + } + + int err = read_cb(cb_arg, &saved_selected_index, len); + if (err <= 0) { + LOG_ERR("Failed to handle selected physical dest_layout from settings (err %d)", err); + return err; + } + + return zmk_physical_layouts_select(saved_selected_index); + } + + return 0; +}; + +SETTINGS_STATIC_HANDLER_DEFINE(physical_layouts, "physical_layouts", NULL, + physical_layouts_handle_set, NULL, NULL); + +#endif // IS_ENABLED(CONFIG_SETTINGS) + +static int zmk_physical_layouts_init(void) { + k_work_init(&msg_processor.work, zmk_physical_layouts_kscan_process_msgq); + +#if IS_ENABLED(CONFIG_PM_DEVICE) + for (int l = 0; l < ARRAY_SIZE(layouts); l++) { + const struct zmk_physical_layout *pl = layouts[l]; + if (pl->kscan) { + if (pm_device_wakeup_is_capable(pl->kscan)) { + pm_device_wakeup_enable(pl->kscan, true); + } + } + } +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + + return zmk_physical_layouts_select_initial(); +} + +SYS_INIT(zmk_physical_layouts_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); From 0438cb0ee532a31291aee3dabe24362f16146fd2 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 24 Apr 2024 21:11:16 -0700 Subject: [PATCH 1107/1130] feat(kscan): More complete PM support to drivers. * Update our GPIO kscan drivers to more completely support PM device, by doing proper hardare init/deinit in the PM action hook. --- app/boards/shields/zmk_uno/zmk_uno.overlay | 2 + .../kscan/zmk,kscan-sideband-behaviors.yaml | 3 + .../drivers/kscan/kscan_gpio_charlieplex.c | 69 +++++++++++++++-- app/module/drivers/kscan/kscan_gpio_direct.c | 33 +++++++- app/module/drivers/kscan/kscan_gpio_matrix.c | 57 +++++++++++++- app/src/kscan_sideband_behaviors.c | 76 +++++++++++++------ docs/docs/features/soft-off.md | 1 + 7 files changed, 203 insertions(+), 38 deletions(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 3d105abf8d7..6948112b8b0 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -38,6 +38,8 @@ endpoint_sideband_behaviors { compatible = "zmk,kscan-sideband-behaviors"; + + auto-enable; kscan = <&kscan_sp3t_toggle>; first_toggle_sideband: first_toggle_sideband { diff --git a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml index f3ed180d14b..e38beeb437c 100644 --- a/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml +++ b/app/dts/bindings/kscan/zmk,kscan-sideband-behaviors.yaml @@ -11,6 +11,9 @@ compatible: "zmk,kscan-sideband-behaviors" include: kscan.yaml properties: + auto-enable: + type: boolean + kscan: type: phandle required: true diff --git a/app/module/drivers/kscan/kscan_gpio_charlieplex.c b/app/module/drivers/kscan/kscan_gpio_charlieplex.c index 3ecbcd6a0e1..f48a6a2f40c 100644 --- a/app/module/drivers/kscan/kscan_gpio_charlieplex.c +++ b/app/module/drivers/kscan/kscan_gpio_charlieplex.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -167,6 +168,21 @@ static int kscan_charlieplex_set_all_outputs(const struct device *dev, const int return 0; } +static int kscan_charlieplex_disconnect_all(const struct device *dev) { + const struct kscan_charlieplex_config *config = dev->config; + + for (int i = 0; i < config->cells.len; i++) { + const struct gpio_dt_spec *gpio = &config->cells.gpios[i]; + int err = gpio_pin_configure_dt(gpio, GPIO_DISCONNECTED); + if (err) { + LOG_ERR("Unable to configure pin %u on %s for input", gpio->pin, gpio->port->name); + return err; + } + } + + return 0; +} + static int kscan_charlieplex_interrupt_configure(const struct device *dev, const gpio_flags_t flags) { const struct kscan_charlieplex_config *config = dev->config; @@ -359,11 +375,7 @@ static int kscan_charlieplex_init_interrupt(const struct device *dev) { return err; } -static int kscan_charlieplex_init(const struct device *dev) { - struct kscan_charlieplex_data *data = dev->data; - - data->dev = dev; - +static void kscan_charlieplex_setup_pins(const struct device *dev) { kscan_charlieplex_init_inputs(dev); kscan_charlieplex_set_all_outputs(dev, 0); @@ -371,7 +383,46 @@ static int kscan_charlieplex_init(const struct device *dev) { if (config->use_interrupt) { kscan_charlieplex_init_interrupt(dev); } +} + +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int kscan_charlieplex_pm_action(const struct device *dev, enum pm_device_action action) { + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + kscan_charlieplex_interrupt_configure(dev, GPIO_INT_DISABLE); + kscan_charlieplex_disconnect_all(dev); + + return kscan_charlieplex_disable(dev); + case PM_DEVICE_ACTION_RESUME: + kscan_charlieplex_setup_pins(dev); + + return kscan_charlieplex_enable(dev); + default: + return -ENOTSUP; + } +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + +static int kscan_charlieplex_init(const struct device *dev) { + struct kscan_charlieplex_data *data = dev->data; + + data->dev = dev; + k_work_init_delayable(&data->work, kscan_charlieplex_work_handler); + +#if IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_init_suspended(dev); + +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + pm_device_runtime_enable(dev); +#endif + +#else + kscan_charlieplex_setup_pins(dev); +#endif + return 0; } @@ -406,8 +457,10 @@ static const struct kscan_driver_api kscan_charlieplex_api = { COND_THIS_INTERRUPT(n, (.use_interrupt = INST_INTR_DEFINED(n), )) \ COND_THIS_INTERRUPT(n, (.interrupt = KSCAN_INTR_CFG_INIT(n), ))}; \ \ - DEVICE_DT_INST_DEFINE(n, &kscan_charlieplex_init, NULL, &kscan_charlieplex_data_##n, \ - &kscan_charlieplex_config_##n, POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY, \ - &kscan_charlieplex_api); + PM_DEVICE_DT_INST_DEFINE(n, kscan_charlieplex_pm_action); \ + \ + DEVICE_DT_INST_DEFINE(n, &kscan_charlieplex_init, PM_DEVICE_DT_INST_GET(n), \ + &kscan_charlieplex_data_##n, &kscan_charlieplex_config_##n, POST_KERNEL, \ + CONFIG_KSCAN_INIT_PRIORITY, &kscan_charlieplex_api); DT_INST_FOREACH_STATUS_OKAY(KSCAN_CHARLIEPLEX_INIT); diff --git a/app/module/drivers/kscan/kscan_gpio_direct.c b/app/module/drivers/kscan/kscan_gpio_direct.c index fa24e69e895..245e78b50cc 100644 --- a/app/module/drivers/kscan/kscan_gpio_direct.c +++ b/app/module/drivers/kscan/kscan_gpio_direct.c @@ -294,6 +294,24 @@ static int kscan_direct_init_input_inst(const struct device *dev, const struct g return 0; } +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int kscan_direct_disconnect_inputs(const struct device *dev) { + const struct kscan_direct_data *data = dev->data; + + for (int i = 0; i < data->inputs.len; i++) { + const struct gpio_dt_spec *gpio = &data->inputs.gpios[i].spec; + int err = gpio_pin_configure_dt(gpio, GPIO_DISCONNECTED); + if (err) { + return err; + } + } + + return 0; +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + static int kscan_direct_init_inputs(const struct device *dev) { const struct kscan_direct_data *data = dev->data; const struct kscan_direct_config *config = dev->config; @@ -317,9 +335,20 @@ static int kscan_direct_init(const struct device *dev) { // Sort inputs by port so we can read each port just once per scan. kscan_gpio_list_sort_by_port(&data->inputs); + k_work_init_delayable(&data->work, kscan_direct_work_handler); + +#if IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_init_suspended(dev); + +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + pm_device_runtime_enable(dev); +#endif + +#else + kscan_direct_init_inputs(dev); - k_work_init_delayable(&data->work, kscan_direct_work_handler); +#endif return 0; } @@ -329,8 +358,10 @@ static int kscan_direct_init(const struct device *dev) { static int kscan_direct_pm_action(const struct device *dev, enum pm_device_action action) { switch (action) { case PM_DEVICE_ACTION_SUSPEND: + kscan_direct_disconnect_inputs(dev); return kscan_direct_disable(dev); case PM_DEVICE_ACTION_RESUME: + kscan_direct_init_inputs(dev); return kscan_direct_enable(dev); default: return -ENOTSUP; diff --git a/app/module/drivers/kscan/kscan_gpio_matrix.c b/app/module/drivers/kscan/kscan_gpio_matrix.c index 8a3c39f2ba9..e0c76395f63 100644 --- a/app/module/drivers/kscan/kscan_gpio_matrix.c +++ b/app/module/drivers/kscan/kscan_gpio_matrix.c @@ -405,6 +405,44 @@ static int kscan_matrix_init_outputs(const struct device *dev) { return 0; } +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int kscan_matrix_disconnect_inputs(const struct device *dev) { + const struct kscan_matrix_data *data = dev->data; + + for (int i = 0; i < data->inputs.len; i++) { + const struct gpio_dt_spec *gpio = &data->inputs.gpios[i].spec; + int err = gpio_pin_configure_dt(gpio, GPIO_DISCONNECTED); + if (err) { + return err; + } + } + + return 0; +} + +static int kscan_matrix_disconnect_outputs(const struct device *dev) { + const struct kscan_matrix_config *config = dev->config; + + for (int i = 0; i < config->outputs.len; i++) { + const struct gpio_dt_spec *gpio = &config->outputs.gpios[i].spec; + int err = gpio_pin_configure_dt(gpio, GPIO_DISCONNECTED); + if (err) { + return err; + } + } + + return 0; +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + +static void kscan_matrix_setup_pins(const struct device *dev) { + kscan_matrix_init_inputs(dev); + kscan_matrix_init_outputs(dev); + kscan_matrix_set_all_outputs(dev, 0); +} + static int kscan_matrix_init(const struct device *dev) { struct kscan_matrix_data *data = dev->data; @@ -413,12 +451,19 @@ static int kscan_matrix_init(const struct device *dev) { // Sort inputs by port so we can read each port just once per scan. kscan_gpio_list_sort_by_port(&data->inputs); - kscan_matrix_init_inputs(dev); - kscan_matrix_init_outputs(dev); - kscan_matrix_set_all_outputs(dev, 0); - k_work_init_delayable(&data->work, kscan_matrix_work_handler); +#if IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_init_suspended(dev); + +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + pm_device_runtime_enable(dev); +#endif + +#else + kscan_matrix_setup_pins(dev); +#endif + return 0; } @@ -427,8 +472,12 @@ static int kscan_matrix_init(const struct device *dev) { static int kscan_matrix_pm_action(const struct device *dev, enum pm_device_action action) { switch (action) { case PM_DEVICE_ACTION_SUSPEND: + kscan_matrix_disconnect_inputs(dev); + kscan_matrix_disconnect_outputs(dev); + return kscan_matrix_disable(dev); case PM_DEVICE_ACTION_RESUME: + kscan_matrix_setup_pins(dev); return kscan_matrix_enable(dev); default: return -ENOTSUP; diff --git a/app/src/kscan_sideband_behaviors.c b/app/src/kscan_sideband_behaviors.c index f3992ebc512..602cae12af4 100644 --- a/app/src/kscan_sideband_behaviors.c +++ b/app/src/kscan_sideband_behaviors.c @@ -26,6 +26,7 @@ struct ksbb_entry { struct ksbb_config { const struct device *kscan; + bool auto_enable; struct ksbb_entry *entries; size_t entries_len; }; @@ -93,34 +94,65 @@ void ksbb_inner_kscan_callback(const struct device *dev, uint32_t row, uint32_t } static int ksbb_configure(const struct device *dev, kscan_callback_t callback) { - const struct ksbb_config *cfg = dev->config; struct ksbb_data *data = dev->data; data->callback = callback; -#if IS_ENABLED(CONFIG_PM_DEVICE) - if (pm_device_wakeup_is_enabled(dev) && pm_device_wakeup_is_capable(cfg->kscan)) { - pm_device_wakeup_enable(cfg->kscan, true); - } -#endif // IS_ENABLED(CONFIG_PM_DEVICE) - return 0; } static int ksbb_enable(const struct device *dev) { struct ksbb_data *data = dev->data; + const struct ksbb_config *config = dev->config; data->enabled = true; +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + if (!pm_device_runtime_is_enabled(dev) && pm_device_runtime_is_enabled(config->kscan)) { + pm_device_runtime_get(config->kscan); + } +#elif IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_action_run(config->kscan, PM_DEVICE_ACTION_RESUME); +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + + kscan_config(config->kscan, &ksbb_inner_kscan_callback); + kscan_enable_callback(config->kscan); + return 0; } static int ksbb_disable(const struct device *dev) { struct ksbb_data *data = dev->data; + const struct ksbb_config *config = dev->config; data->enabled = false; + kscan_disable_callback(config->kscan); + +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + if (!pm_device_runtime_is_enabled(dev) && pm_device_runtime_is_enabled(config->kscan)) { + pm_device_runtime_put(config->kscan); + } +#elif IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_action_run(config->kscan, PM_DEVICE_ACTION_SUSPEND); +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + return 0; } +#if IS_ENABLED(CONFIG_PM_DEVICE) + +static int ksbb_pm_action(const struct device *dev, enum pm_device_action action) { + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + return ksbb_disable(dev); + case PM_DEVICE_ACTION_RESUME: + return ksbb_enable(dev); + default: + return -ENOTSUP; + } +} + +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + static int ksbb_init(const struct device *dev) { const struct ksbb_config *config = dev->config; @@ -129,8 +161,16 @@ static int ksbb_init(const struct device *dev) { return -ENODEV; } - kscan_config(config->kscan, &ksbb_inner_kscan_callback); - kscan_enable_callback(config->kscan); + if (config->auto_enable) { +#if !IS_ENABLED(CONFIG_PM_DEVICE) + kscan_config(config->kscan, &ksbb_inner_kscan_callback); + kscan_enable_callback(config->kscan); +#else + ksbb_pm_action(dev, PM_DEVICE_ACTION_RESUME); + } else { + pm_device_init_suspended(dev); +#endif + } return 0; } @@ -141,21 +181,6 @@ static const struct kscan_driver_api ksbb_api = { .disable_callback = ksbb_disable, }; -#if IS_ENABLED(CONFIG_PM_DEVICE) - -static int ksbb_pm_action(const struct device *dev, enum pm_device_action action) { - switch (action) { - case PM_DEVICE_ACTION_SUSPEND: - return ksbb_disable(dev); - case PM_DEVICE_ACTION_RESUME: - return ksbb_disable(dev); - default: - return -ENOTSUP; - } -} - -#endif // IS_ENABLED(CONFIG_PM_DEVICE) - #define ENTRY(e) \ { \ .row = DT_PROP(e, row), .column = DT_PROP(e, column), \ @@ -167,13 +192,14 @@ static int ksbb_pm_action(const struct device *dev, enum pm_device_action action DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(n, ENTRY, (, ))}; \ const struct ksbb_config ksbb_config_##n = { \ .kscan = DEVICE_DT_GET(DT_INST_PHANDLE(n, kscan)), \ + .auto_enable = DT_INST_PROP_OR(n, auto_enable, false), \ .entries = entries_##n, \ .entries_len = ARRAY_SIZE(entries_##n), \ }; \ struct ksbb_data ksbb_data_##n = {}; \ PM_DEVICE_DT_INST_DEFINE(n, ksbb_pm_action); \ DEVICE_DT_INST_DEFINE(n, ksbb_init, PM_DEVICE_DT_INST_GET(n), &ksbb_data_##n, \ - &ksbb_config_##n, APPLICATION, \ + &ksbb_config_##n, POST_KERNEL, \ CONFIG_ZMK_KSCAN_SIDEBAND_BEHAVIORS_INIT_PRIORITY, &ksbb_api); DT_INST_FOREACH_STATUS_OKAY(KSBB_INST) diff --git a/docs/docs/features/soft-off.md b/docs/docs/features/soft-off.md index 7018afa08f2..207bb13f723 100644 --- a/docs/docs/features/soft-off.md +++ b/docs/docs/features/soft-off.md @@ -121,6 +121,7 @@ With that in place, the kscan sideband behavior will wrap the new driver: compatible = "zmk,kscan-sideband-behaviors"; kscan = <&soft_off_direct_scan>; + auto-enable; wakeup-source; soft_off { From 74f7fe921ba71b2da7c2177473e4bb5d4e3dd386 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 1 May 2024 14:06:28 -0700 Subject: [PATCH 1108/1130] fix(splits): Increase split notify stack size. --- app/src/split/bluetooth/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/split/bluetooth/Kconfig b/app/src/split/bluetooth/Kconfig index 4da50528343..7f362fdedc1 100644 --- a/app/src/split/bluetooth/Kconfig +++ b/app/src/split/bluetooth/Kconfig @@ -76,7 +76,7 @@ if !ZMK_SPLIT_ROLE_CENTRAL config ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE int "BLE split peripheral notify thread stack size" - default 650 + default 756 config ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY int "BLE split peripheral notify thread priority" From 5fcf09290177843db58f870bec29f0db5b1b8fec Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 1 May 2024 14:07:48 -0700 Subject: [PATCH 1109/1130] refactor(shields): Set ZMK Uno physical layouts. * Add physical layout definitions for uno and split uno shields. --- app/boards/shields/zmk_uno/zmk_uno.dtsi | 3 -- app/boards/shields/zmk_uno/zmk_uno.keymap | 6 +-- app/boards/shields/zmk_uno/zmk_uno.overlay | 35 ++++++++++++- app/boards/shields/zmk_uno/zmk_uno_split.dtsi | 49 +++++++++++++++++-- .../shields/zmk_uno/zmk_uno_split.keymap | 7 +-- .../zmk_uno/zmk_uno_split_right.overlay | 2 +- 6 files changed, 82 insertions(+), 20 deletions(-) diff --git a/app/boards/shields/zmk_uno/zmk_uno.dtsi b/app/boards/shields/zmk_uno/zmk_uno.dtsi index ba1d3b5da80..9ea625a420f 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno.dtsi @@ -40,10 +40,8 @@ nice_view_spi: &arduino_spi { / { chosen { - zmk,kscan = &kscan_matrix; zmk,backlight = &backlight; zmk,underglow = &led_strip; - zmk,matrix-transform = &matrix_transform; }; // Commented out until we add more powerful power domain support @@ -109,7 +107,6 @@ nice_view_spi: &arduino_spi { kscan_direct: kscan_direct { compatible = "zmk,kscan-gpio-direct"; wakeup-source; - status = "disabled"; input-gpios = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> diff --git a/app/boards/shields/zmk_uno/zmk_uno.keymap b/app/boards/shields/zmk_uno/zmk_uno.keymap index a7f6a2675d5..186cdb60a38 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno.keymap @@ -13,13 +13,9 @@ // Uncomment the following lines if using the "Direct Wire" jumper to switch the matrix to a direct wire. -// &kscan_direct { status = "okay"; }; -// &kscan_matrix { status = "disabled"; }; - // / { // chosen { -// zmk,matrix-transform = &direct_matrix_transform; -// zmk,kscan = &kscan_direct; +// zmk,physical-layout = &direct_physical_layout; // }; // }; diff --git a/app/boards/shields/zmk_uno/zmk_uno.overlay b/app/boards/shields/zmk_uno/zmk_uno.overlay index 6948112b8b0..2a8eb26635a 100644 --- a/app/boards/shields/zmk_uno/zmk_uno.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno.overlay @@ -7,13 +7,15 @@ #include "zmk_uno.dtsi" #include +#include #include #include / { chosen { - zmk,matrix-transform = &matrix_transform; + zmk,physical-layout = &matrix_physical_layout; }; + sensors: sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; @@ -58,4 +60,35 @@ }; }; + matrix_physical_layout: matrix_physical_layout { + compatible = "zmk,physical-layout"; + display-name = "Matrix Layout"; + + kscan = <&kscan_matrix>; + transform = <&matrix_transform>; + + keys + = <&key_physical_attrs 100 100 0 0 0 0 0> + , <&key_physical_attrs 100 100 100 0 0 0 0> + , <&key_physical_attrs 100 100 0 100 0 0 0> + , <&key_physical_attrs 100 100 100 100 0 0 0> + ; + }; + + direct_physical_layout: direct_physical_layout { + compatible = "zmk,physical-layout"; + + display-name = "Direct Wire Layout"; + + kscan = <&kscan_direct>; + transform = <&direct_matrix_transform>; + + keys + = <&key_physical_attrs 100 100 0 0 0 0 0> + , <&key_physical_attrs 100 100 100 0 0 0 0> + , <&key_physical_attrs 100 100 0 100 0 0 0> + , <&key_physical_attrs 100 100 100 100 0 0 0> + ; + }; + }; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi index dac6fc3e4ee..9afbf79a4ae 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.dtsi +++ b/app/boards/shields/zmk_uno/zmk_uno_split.dtsi @@ -6,13 +6,15 @@ #include "zmk_uno.dtsi" + #include + left_encoder: &encoder { status = "disabled"; }; / { chosen { - zmk,matrix-transform = &split_matrix_transform; + zmk,physical-layout = &matrix_physical_layout; }; split_matrix_transform: split_matrix_transform { @@ -31,18 +33,57 @@ split_direct_matrix_transform: split_direct_matrix_transform { compatible = "zmk,matrix-transform"; - rows = <3>; + rows = <2>; columns = <4>; map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) - RC(2,0) RC(2,1) - RC(2,2) RC(2,3) + RC(1,0) RC(1,1) + RC(1,2) RC(1,3) >; }; + matrix_physical_layout: matrix_physical_layout { + compatible = "zmk,physical-layout"; + display-name = "Matrix Layout"; + + kscan = <&kscan_matrix>; + transform = <&split_matrix_transform>; + + keys + = <&key_physical_attrs 100 100 0 0 0 0 0> + , <&key_physical_attrs 100 100 100 0 0 0 0> + , <&key_physical_attrs 100 100 0 100 0 0 0> + , <&key_physical_attrs 100 100 100 100 0 0 0> + , <&key_physical_attrs 100 100 0 200 0 0 0> + , <&key_physical_attrs 100 100 100 200 0 0 0> + , <&key_physical_attrs 100 100 0 300 0 0 0> + , <&key_physical_attrs 100 100 100 300 0 0 0> + ; + }; + + direct_physical_layout: direct_physical_layout { + compatible = "zmk,physical-layout"; + + display-name = "Direct Wire Layout"; + + kscan = <&kscan_direct>; + transform = <&split_direct_matrix_transform>; + + keys + = <&key_physical_attrs 100 100 0 0 0 0 0> + , <&key_physical_attrs 100 100 100 0 0 0 0> + , <&key_physical_attrs 100 100 0 100 0 0 0> + , <&key_physical_attrs 100 100 100 100 0 0 0> + , <&key_physical_attrs 100 100 0 200 0 0 0> + , <&key_physical_attrs 100 100 100 200 0 0 0> + , <&key_physical_attrs 100 100 0 300 0 0 0> + , <&key_physical_attrs 100 100 100 300 0 0 0> + ; + }; + right_encoder: right_encoder { steps = <80>; status = "disabled"; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split.keymap b/app/boards/shields/zmk_uno/zmk_uno_split.keymap index 0e50a2833f0..d2daa6ead65 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split.keymap +++ b/app/boards/shields/zmk_uno/zmk_uno_split.keymap @@ -14,14 +14,9 @@ // Uncomment the following lines if using the "Direct Wire" jumper to switch the matrix to a direct wire. - -// &kscan_direct { status = "okay"; }; -// &kscan_matrix { status = "disabled"; }; - // / { // chosen { -// zmk,matrix-transform = &split_direct_matrix_transform; -// zmk,kscan = &kscan_direct; +// zmk,physical-layout = &direct_physical_layout; // }; // }; diff --git a/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay b/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay index 9c2e7d7f2ee..acfad5a24f2 100644 --- a/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay +++ b/app/boards/shields/zmk_uno/zmk_uno_split_right.overlay @@ -11,7 +11,7 @@ }; &split_direct_matrix_transform { - row-offset = <2>; + row-offset = <1>; }; &right_encoder { From b4f9081b090ac8116476e078439b177eb9487e62 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 3 Jul 2024 13:58:08 -0600 Subject: [PATCH 1110/1130] docs: Updated new shield documentation for physical layouts. * Document how to define one or more physical layouts and assign the chosen one. Co-authored-by: Cem Aksoylar --- docs/docs/development/new-shield.mdx | 70 +++++++++++++++++++++------- 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index d48e0d1de97..3d0c45c13ee 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -19,7 +19,8 @@ The high level steps are: - Create a new shield directory. - Add the base Kconfig files. - Add the shield overlay file to define the KSCAN driver for detecting key press/release. -- (Optional) Add the matrix transform for mapping KSCAN row/column values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. +- Add the matrix transform for mapping KSCAN row/column values to key positions in the keymap. +- Add a physical layout definition to select the matrix transform and KSCAN instance. - Add a default keymap, which users can override in their own configs as needed. - Add a `.zmk.yml` metadata file to document the high level details of your shield, and the features it supports. - Update the `build.yaml` file from the repository template to have some sample builds of the firmware to test. @@ -318,7 +319,7 @@ The shared configuration in `my_awesome_split_board.conf` is only applied when y
    -## (Optional) Matrix Transform +## Matrix Transform Internally ZMK translates all row/column events into "key position" events to maintain a consistent model that works no matter what any possible GPIO matrix may look like for a certain keyboard. This is particularly helpful when: @@ -328,15 +329,7 @@ Internally ZMK translates all row/column events into "key position" events to ma A "key position" is the numeric index (zero-based) of a given key, which identifies the logical key location as perceived by the end user. All _keymap_ mappings actually bind behaviors to _key positions_, not to row/column values. -_Without_ a matrix transform, that intentionally map each key position to the row/column pair that position corresponds to, the default equation to determine that is: - -```c -($row * NUMBER_OF_COLUMNS) + $column -``` - -Which effectively amounts to numbering the key positions by traversing each row from top to bottom and assigning numerically incrementing key positions. - -Whenever that default key position mapping is insufficient, the `.overlay` file should _also_ include a matrix transform. +The `.overlay` must include a matrix transform that defines this mapping from row/column values to key positions. Here is an example for the [nice60](https://github.com/Nicell/nice60), which uses an efficient 8x8 GPIO matrix, and uses a transform: @@ -344,11 +337,6 @@ Here is an example for the [nice60](https://github.com/Nicell/nice60), which use #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix-transform = &default_transform; - }; - /* define kscan node with label `kscan0`... */ default_transform: keymap_transform_0 { @@ -377,10 +365,58 @@ Some important things to note: - The `#include ` is critical. The `RC` macro is used to generate the internal storage in the matrix transform, and is actually replaced by a C preprocessor before the final devicetree is compiled into ZMK. - `RC(row, column)` is placed sequentially to define what row and column values that position corresponds to. -- If you have a keyboard with options for `2u` keys in certain positions, or break away portions, it is a good idea to set the chosen `zmk,matrix-transform` to the default arrangement, and include _other_ possible matrix transform nodes in the devicetree that users can select in their user config by overriding the chosen node. +- If you have a keyboard with options for `2u` keys in certain positions, ANSI vs. ISO layouts, or break away portions, define one matrix transform for each possible arrangement to be used in the physical layouts. This will allow the users to select the right layout in their keymap files. See the [matrix transform section](../config/kscan.md#matrix-transform) in the Keyboard Scan configuration documentation for details and more examples of matrix transforms. +## Physical Layout + +The physical layout is the top level entity that aggregates all details about a certain possible layout for a keyboard: the matrix transform that defines the set of key positions and what row/column they correspond to, what kscan driver is used for that layout, etc. +For keyboards that support multiple layouts, setting a `chosen` node to a defined physical layout in your keymap will allow selecting the specific layout that you've built. + +A physical layout is very basic, e.g.: + +``` +/ { + default_layout: default_layout { + compatible = "zmk,physical-layout"; + transform = <&default_transform>; + kscan = <&kscan0>; + }; +}; +``` + +When supporting multiple layouts, define the multiple layout nodes and then set a `chosen` for the default: + +``` +/ { + chosen { + zmk,physical-layout = &default_layout; + ... + }; + + default_layout: default_layout { + compatible = "zmk,physical-layout"; + transform = <&default_transform>; + kscan = <&kscan0>; + }; + + alt_layout: alt_layout { + compatible = "zmk,physical-layout"; + transform = <&alt_transform>; + kscan = <&alt_kscan0>; + }; +}; +``` + +This way, users can select a different layout by overriding the `zmk,physical-layout` chosen node in their keymap file. + +:::note +Some keyboards use different GPIO pins for different layouts, and need different kscan nodes created for each layout. +However, if all of your physical layouts use the same `kscan` node under the hood, you can skip setting the `kscan` property on each +layout and instead assign the `zmk,kscan` chosen node to your single kscan instance. +::: + ## Default Keymap Each keyboard should provide a default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `boards/shields//.keymap` file. The keymap is configured as an additional devicetree overlay that includes the following: From 82eed0f5ddb05fc244385e0ac05704fbdec0c3ee Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Wed, 5 Jun 2024 01:21:34 -0700 Subject: [PATCH 1111/1130] feat(boards): Add flash/settings to XIAO RP2040. * Add storage partition. * Default necessacy Kconfig symbols for flash/settings. --- app/boards/seeeduino_xiao_rp2040.conf | 7 +++++++ app/boards/seeeduino_xiao_rp2040.overlay | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/boards/seeeduino_xiao_rp2040.conf b/app/boards/seeeduino_xiao_rp2040.conf index 21c1893d91f..714e715cc83 100644 --- a/app/boards/seeeduino_xiao_rp2040.conf +++ b/app/boards/seeeduino_xiao_rp2040.conf @@ -2,3 +2,10 @@ CONFIG_CONSOLE=n CONFIG_SERIAL=n CONFIG_UART_CONSOLE=n CONFIG_ZMK_USB=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y diff --git a/app/boards/seeeduino_xiao_rp2040.overlay b/app/boards/seeeduino_xiao_rp2040.overlay index b5d2cdb2fd1..e6ba8136498 100644 --- a/app/boards/seeeduino_xiao_rp2040.overlay +++ b/app/boards/seeeduino_xiao_rp2040.overlay @@ -5,3 +5,18 @@ */ &xiao_serial { status = "disabled"; }; + +&code_partition { + reg = <0x100 (DT_SIZE_M(2) - 0x100 - DT_SIZE_K(512))>; +}; + +&flash0 { + reg = <0x10000000 DT_SIZE_M(2)>; + + partitions { + storage_partition: partition@180000 { + reg = <0x180000 DT_SIZE_K(512)>; + read-only; + }; + }; +}; From e01f13f9f00c0646bbadffd89dae4c3cd7d00a58 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Thu, 4 Jul 2024 18:26:27 +0000 Subject: [PATCH 1112/1130] fix: Fix external power settings load issue. * Because settings load is delayed now, enable external power on init, and let it be disabled on settings load later, to ensure power is on early for other peripheral initialization. Fixes: #2361 --- app/src/ext_power_generic.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/ext_power_generic.c b/app/src/ext_power_generic.c index 5a9cc5b86a9..17b3ba64026 100644 --- a/app/src/ext_power_generic.c +++ b/app/src/ext_power_generic.c @@ -151,11 +151,11 @@ static int ext_power_generic_init(const struct device *dev) { #if IS_ENABLED(CONFIG_SETTINGS) k_work_init_delayable(&ext_power_save_work, ext_power_save_state_work); -#else - // Default to the ext_power being open when no settings - ext_power_enable(dev); #endif + // Enable by default. We may get disabled again once settings load. + ext_power_enable(dev); + if (config->init_delay_ms) { k_msleep(config->init_delay_ms); } From 3694ff85a039fa49722655b0f656219623a01d3a Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Jul 2024 12:56:33 -0600 Subject: [PATCH 1113/1130] fix: Fix up layer metadata, move to layer IDs. * Studio will use stable layer IDs to refer to layers, so that layer reordering doesn't affect behavior bindings, so update to match. * Fix a few layer metadata entries that missed being refactored. --- app/include/drivers/behavior.h | 2 +- app/src/behavior.c | 2 +- app/src/behaviors/behavior_momentary_layer.c | 2 +- app/src/behaviors/behavior_to_layer.c | 3 +-- app/src/behaviors/behavior_toggle_layer.c | 3 +-- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/include/drivers/behavior.h b/app/include/drivers/behavior.h index 0b814ff2828..7c99f04ed74 100644 --- a/app/include/drivers/behavior.h +++ b/app/include/drivers/behavior.h @@ -39,7 +39,7 @@ struct behavior_parameter_value_metadata { BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE = 1, BEHAVIOR_PARAMETER_VALUE_TYPE_RANGE = 2, BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE = 3, - BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_INDEX = 4, + BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_ID = 4, } type; }; diff --git a/app/src/behavior.c b/app/src/behavior.c index 0d9a4cdf38f..e69cdf88702 100644 --- a/app/src/behavior.c +++ b/app/src/behavior.c @@ -99,7 +99,7 @@ static int check_param_matches_value(const struct behavior_parameter_value_metad } break; - case BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_INDEX: + case BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_ID: if (param >= 0 && param < ZMK_KEYMAP_LEN) { return PARAM_MATCHES; } diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index e27889df96f..b781a953771 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -20,7 +20,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static const struct behavior_parameter_value_metadata param_values[] = { { .display_name = "Layer", - .type = BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_INDEX, + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_ID, }, }; diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index d260087efce..f739ec8debf 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -37,8 +37,7 @@ static int to_keymap_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_parameter_value_metadata param_values[] = { { .display_name = "Layer", - .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, - .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_LAYER_INDEX, + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_ID, }, }; diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index df261ed3a34..ea46c79faa4 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -39,8 +39,7 @@ static int tog_keymap_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_parameter_value_metadata param_values[] = { { .display_name = "Layer", - .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, - .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_LAYER_INDEX, + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_LAYER_ID, }, }; From 8c6bda260ace119b3c22a21bdcdd6d17a83fc5eb Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 5 Jul 2024 15:30:44 -0600 Subject: [PATCH 1114/1130] fix: Proper behavior metadata for key repeat/toggle --- app/src/behaviors/behavior_key_repeat.c | 23 +---------------------- app/src/behaviors/behavior_key_toggle.c | 3 +-- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index f2cd569f635..21343ae8142 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -19,27 +19,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) -#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) - -static const struct behavior_parameter_value_metadata param_values[] = { - { - .display_name = "Key", - .type = BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE, - }, -}; - -static const struct behavior_parameter_metadata_set param_metadata_set[] = {{ - .param1_values = param_values, - .param1_values_len = ARRAY_SIZE(param_values), -}}; - -static const struct behavior_parameter_metadata metadata = { - .sets_len = ARRAY_SIZE(param_metadata_set), - .sets = param_metadata_set, -}; - -#endif - struct behavior_key_repeat_config { uint8_t index; uint8_t usage_pages_count; @@ -89,7 +68,7 @@ static const struct behavior_driver_api behavior_key_repeat_driver_api = { .binding_pressed = on_key_repeat_binding_pressed, .binding_released = on_key_repeat_binding_released, #if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) - .parameter_metadata = &metadata, + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, #endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) }; diff --git a/app/src/behaviors/behavior_key_toggle.c b/app/src/behaviors/behavior_key_toggle.c index d967af0146b..72f2570b4d7 100644 --- a/app/src/behaviors/behavior_key_toggle.c +++ b/app/src/behaviors/behavior_key_toggle.c @@ -36,8 +36,7 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding, static const struct behavior_parameter_value_metadata param_values[] = { { .display_name = "Key", - .type = BEHAVIOR_PARAMETER_VALUE_TYPE_STANDARD, - .standard = BEHAVIOR_PARAMETER_STANDARD_DOMAIN_HID_USAGE, + .type = BEHAVIOR_PARAMETER_VALUE_TYPE_HID_USAGE, }, }; From 7bd74a6b0fcd9891dec1c6960bf49a0bf73a010e Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sat, 13 Jul 2024 17:31:07 -0700 Subject: [PATCH 1115/1130] fix(docs): Add required display-name in physical layout examples --- docs/docs/development/new-shield.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 3d0c45c13ee..60299abf92e 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -380,6 +380,7 @@ A physical layout is very basic, e.g.: / { default_layout: default_layout { compatible = "zmk,physical-layout"; + display-name = "Default Layout"; transform = <&default_transform>; kscan = <&kscan0>; }; @@ -397,12 +398,14 @@ When supporting multiple layouts, define the multiple layout nodes and then set default_layout: default_layout { compatible = "zmk,physical-layout"; + display-name = "Default Layout"; transform = <&default_transform>; kscan = <&kscan0>; }; alt_layout: alt_layout { compatible = "zmk,physical-layout"; + display-name = "Alternate Layout"; transform = <&alt_transform>; kscan = <&alt_kscan0>; }; From fd152baff08cdb643f694b9d1b1343193562325d Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:00:22 +0200 Subject: [PATCH 1116/1130] feat(docs): Add troubleshooting notes on experimental bluetooth options (#2387) Co-authored-by: Cem Aksoylar --- docs/docs/config/bluetooth.md | 14 ++++++------- .../troubleshooting/connection-issues.mdx | 21 ++++++++++++++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/docs/docs/config/bluetooth.md b/docs/docs/config/bluetooth.md index 02d203510dd..83fb9ec09d8 100644 --- a/docs/docs/config/bluetooth.md +++ b/docs/docs/config/bluetooth.md @@ -9,10 +9,10 @@ See [Configuration Overview](index.md) for instructions on how to change these s ## Kconfig -| Option | Type | Description | Default | -| -------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK to improve connection stability. This includes changes to timing on BLE pairing initiation, restores use of the updated/new LLCP implementation, and disables 2M PHY support. | n | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC` | bool | Enables a combination of settings that are planned to be officially supported in the future. This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from previously paired hosts. | n | -| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Aggregate config that enables both `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` and `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC`. | n | -| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts.) | n | -| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | +| Option | Type | Description | Default | +| -------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` | bool | Enables a combination of settings that are planned to be default in future versions of ZMK to improve connection stability. Currently this only disables 2M PHY support. | n | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC` | bool | Enables a combination of settings that are planned to be officially supported in the future. This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from previously paired hosts. | n | +| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Aggregate config that enables both `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` and `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC`. | n | +| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts.) | n | +| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y | diff --git a/docs/docs/troubleshooting/connection-issues.mdx b/docs/docs/troubleshooting/connection-issues.mdx index 5fdd1c836a0..f077702c5bb 100644 --- a/docs/docs/troubleshooting/connection-issues.mdx +++ b/docs/docs/troubleshooting/connection-issues.mdx @@ -91,6 +91,20 @@ The settings reset firmware has Bluetooth disabled to prevent the two sides from ::: +## Unable to Connect to Device + +### Additional Bluetooth Options + +Some devices and operating systems may have additional restrictions that they require be met before allowing a bluetooth peripheral to pair with them. If your keyboard is visible to your host but you are having issues trouble connecting or no input is registered, this might be the cause. Some of ZMK's [experimental bluetooth settings](../config/bluetooth.md) may suffice to resolve the issue. In particular: + +- Disabling PHY 2Mbps ([`CONFIG_BT_CTLR_PHY_2M=n`](https://docs.zephyrproject.org/3.5.0/kconfig.html#CONFIG_BT_CTLR_PHY_2M)) helps to pair and connect for certain wireless chipset firmware versions, particularly on Windows (Realtek and Intel chips) and older Intel Macs with Broadcom chipsets. +- Enabling passkey entry ([`CONFIG_ZMK_BLE_PASSKEY_ENTRY=y`](../config/bluetooth.md)) helps for certain Windows computers (work-managed ones in particular). This may also manifest in not sending keystrokes. + +### Issues With Dual Boot Setups + +Since ZMK associates pairing/bond keys with hardware addresses of hosts, you cannot pair to two different operating systems in a dual boot system at the same time. +While you can find [documented workarounds](https://wiki.archlinux.org/title/bluetooth#Dual_boot_pairing) that involve copying pairing keys across operating systems and use both OS with a single profile, they can be fairly involved and should be followed with caution. + ## Issues While Connected ### Unreliable/Weak Connection @@ -111,11 +125,6 @@ This setting can also improve the connection strength between the keyboard halve If you want to test Bluetooth output on your keyboard and are powering it through the USB connection rather than a battery, you will be able to pair with a host device but may not see keystrokes sent. In this case you need to use the [output selection behavior](../behaviors/outputs.md) to prefer sending keystrokes over Bluetooth rather than USB. This might be necessary even if you are not powering from a device capable of receiving USB inputs, such as a USB charger. -### Issues With Dual Boot Setups - -Since ZMK associates pairing/bond keys with hardware addresses of hosts, you cannot pair to two different operating systems in a dual boot system at the same time. -While you can find [documented workarounds](https://wiki.archlinux.org/title/bluetooth#Dual_boot_pairing) that involve copying pairing keys across operating systems and use both OS with a single profile, they can be fairly involved and should be followed with caution. - ### macOS Connected but Not Working If you attempt to pair a ZMK keyboard from macOS in a way that causes a bonding issue, macOS may report the keyboard as connected, but fail to actually work. If this occurs: @@ -138,3 +147,5 @@ If this doesn't help, try following the procedure above but replace step 3 with - Restart the Windows device - Open "Device Manager," turn on "Show hidden devices" from the "View" menu, then find and delete the keyboard under the "Bluetooth" item + +Some Windows devices may also require passkey entry, described under ["Unable to Connect to Device"](#unable-to-connect-to-device). From 97294aa341508e7f243f1abed670188c3596e673 Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:00:55 +0200 Subject: [PATCH 1117/1130] chore: Add a recommended extension for .mdx files (#2381) --- .vscode/extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 0819f71e7a0..7a1eac2aa5c 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,7 @@ "ms-python.python", "ms-vscode.cpptools", "plorefice.devicetree", - "twxs.cmake" + "twxs.cmake", + "unifiedjs.vscode-mdx" ] } From f92dce43e9c76bdba76359ec1f90e606cd609ee0 Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:08:08 +0200 Subject: [PATCH 1118/1130] feat(docs): Add modules feature page (#2380) Co-authored-by: Cem Aksoylar --- docs/docs/config/index.md | 16 +- docs/docs/development/build-flash.mdx | 4 + docs/docs/development/new-shield.mdx | 7 + docs/docs/features/beta-testing.mdx | 100 ---------- docs/docs/features/modules.mdx | 194 +++++++++++++++++++ docs/sidebars.js | 260 ++++++++++++++------------ 6 files changed, 360 insertions(+), 221 deletions(-) delete mode 100644 docs/docs/features/beta-testing.mdx create mode 100644 docs/docs/features/modules.mdx diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index d542d435f1e..666cf4d9a68 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -28,12 +28,14 @@ When using a split keyboard, you can use a single file without the `_left` or `_ ### Board Folder -ZMK will search for config files in either of: +ZMK will search for config files in: - [`zmk/app/boards/arm/`](https://github.com/zmkfirmware/zmk/tree/main/app/boards/arm) -- `zmk-config/config/boards/arm/` +- `zmk-config/boards/arm/` +- `/boards/arm/` +- `zmk-config/config/boards/arm/` (For backwards compatibility only, do not use.) -...where `` is the name of the board. These files describe the hardware of the board. +...where `` is the name of the board and `` is the root directory of any [included module](../features/modules.mdx). These files describe the hardware of the board. ZMK will search the board folder for the following config files: @@ -48,12 +50,14 @@ For more documentation on creating and configuring a new board, see [Zephyr's bo ### Shield Folder -When building with a shield, ZMK will search for config files in either of: +When building with a shield, ZMK will search for config files in: - [`zmk/app/boards/shields/`](https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields) -- `zmk-config/config/boards/shields/` +- `zmk-config/boards/shields/` +- `/boards/shields/` +- `zmk-config/config/boards/shields/` (For backwards compatibility only, do not use.) -...where `` is the name of the shield. These files describe the hardware of the shield that the board is plugged into. +...where `` is the name of the shield and `` is the root directory of any [included module](../features/modules.mdx). These files describe the hardware of the shield that the board is plugged into. ZMK will search the shield folder for the following config files: diff --git a/docs/docs/development/build-flash.mdx b/docs/docs/development/build-flash.mdx index 20e9e20a34c..cfcb39ee312 100644 --- a/docs/docs/development/build-flash.mdx +++ b/docs/docs/development/build-flash.mdx @@ -108,6 +108,10 @@ west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Doc The above command must still be invoked from the `zmk/app` directory as noted above, rather than the config directory. Otherwise, you will encounter errors such as `ERROR: source directory "." does not contain a CMakeLists.txt; is this really what you want to build?`. Alternatively you can add the `-s /path/to/zmk/app` flag to your `west` command. ::: +:::warning +If your config is also a [module](../features/modules.mdx), then you should also add the root (the folder in which the `zephyr` folder is found) of your `zmk-config` as an [external module to build with](#building-with-external-modules). +::: + In order to make your `zmk-config` folder available when building within the VSCode Remote Container, you need to create a docker volume named `zmk-config` by binding it to the full path of your config directory. If you have run the VSCode Remote Container before, it is likely that docker has created this volume automatically -- we need to delete the default volume before binding it to the correct path. Follow the following steps: diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index 60299abf92e..ae97f6afe75 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -51,6 +51,13 @@ Follow these steps to create your new repository: - Select Public or Private, depending on your preference. - Click the green "Create repository" button +The repository is a combination of the directories and files required of a ZMK config, and those required of a shield module. To create a shield module, the following components are needed: + +- The `boards/shields` directory, where the keyboard's files will go +- The `zephyr/module.yml` file, which identifies and describes the module. See the [Zephyr documentation](https://docs.zephyrproject.org/3.5.0/develop/modules.html#module-yaml-file-description) for details on customising this file. For the purposes of creating a shield module, the default found in the template can be left untouched. + +Neither of these should be moved out of their parent directory. The other files and directories such as `config` are not necessary for the purposes of a shield module, but rather intended to be used for user configuration and testing. + ## New Shield Directory :::note diff --git a/docs/docs/features/beta-testing.mdx b/docs/docs/features/beta-testing.mdx deleted file mode 100644 index 1a8d28633cb..00000000000 --- a/docs/docs/features/beta-testing.mdx +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Beta Testing -sidebar_label: Beta Testing ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -You may find that ZMK does not support a feature or keyboard that you are interesting in using. You may find that someone -has already taken the time to submit the feature you need as a [Pull Request](https://github.com/zmkfirmware/zmk/pulls). If you find the feature you need as a pull request, -this page is for you! - -## Developer Repositories and Branches - -For a developer to submit a pull request to ZMK, they must first clone the original ZMK repository. After they have a copy -of the source code, they may create a feature branch to work within. When they have finished, they will publish the feature -branch and create the pull request. - -### Finding the Repository Page from the Pull Request - -![PR Repository](../assets/features/beta-testing/pr-repo-branch.png) - -### Finding the Repository URL - -![Repository URL](../assets/features/beta-testing/repo-url.png) - -### Finding the Repository Branch - -![Repository URL](../assets/features/beta-testing/repo-branch.png) - -## Testing Features - -Testing features will require you to modify the `west.yml` file. You will need to add a new remote for the pull request you -would like to test, and change the selected remote and revision (or branch) for the `zmk` project. - -### Examples - - - - -```yaml -manifest: - remotes: - - name: zmkfirmware - url-base: https://github.com/zmkfirmware - projects: - - name: zmk - remote: zmkfirmware - revision: main - import: app/west.yml - self: - path: config -``` - - - - -```yaml -manifest: - remotes: - - name: zmkfirmware - url-base: https://github.com/zmkfirmware - - name: okke-formsma - url-base: https://github.com/okke-formsma - projects: - - name: zmk - remote: okke-formsma - revision: macros - import: app/west.yml - self: - path: config -``` - - - - -```yaml -manifest: - remotes: - - name: zmkfirmware - url-base: https://github.com/zmkfirmware - - name: mcrosson - url-base: https://github.com/mcrosson - projects: - - name: zmk - remote: mcrosson - revision: feat-behavior-sleep - import: app/west.yml - self: - path: config -``` - - - diff --git a/docs/docs/features/modules.mdx b/docs/docs/features/modules.mdx new file mode 100644 index 00000000000..e25bc72aecc --- /dev/null +++ b/docs/docs/features/modules.mdx @@ -0,0 +1,194 @@ +--- +title: Modules +sidebar_label: Modules +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +ZMK makes use of [Zephyr modules](https://docs.zephyrproject.org/3.5.0/develop/modules.html) to include additional source code or configuration files into its build. You can think of them as similar to plugins or themes. The most common uses of this feature are: + +- Building firmware for a keyboard external to ZMK's tree +- Adding functionality to ZMK, such as a driver or a behavior + +A common ZMK setup thus consists of the following separate components, commonly housed in their respective Git repositories: + +- A single ZMK config maintained by the user, containing the `.conf` and `.keymap` files for one or multiple keyboards. This is also where files from ZMK or modules should be overridden/modified, if there is a need. +- Any number of ZMK modules, maintained by the module's owner. Some modules may contain multiple keyboards or functionalities. If all of your keyboards and functionalities are internal to ZMK's tree, then no modules are necessary. +- The ZMK firmware itself, maintained by its contributors. + +:::note +The shift to using modules for keyboards is a relatively recent one, and not all designs may be properly configured to be used as a module. If this is the case for your keyboard, then we would strongly suggest asking your vendor or designer to rectify this. +::: + +## Building With Modules + +### GitHub Actions + +When [using GitHub Actions to build ZMK](../user-setup.mdx), adding modules is as simple as modifying the `west.yml` found in your `zmk-config`'s `config` directory. The recommended way of doing so is: + +1. Find the URL base (the parent URL) for the module and add it as an entry to the [remotes](https://docs.zephyrproject.org/3.5.0/develop/west/manifest.html#remotes). +2. Add the module as an entry to the [projects](https://docs.zephyrproject.org/3.5.0/develop/west/manifest.html#projects). + Aside from the mandatory `name`, `remote`, and the commonly used `revision` properties, take note of the `import` property under `projects`. Some modules may have other modules as dependencies. This property allows the specifying of an additional west manifest file found in the tree of the module, which will automatically import all dependencies. + +For more information on `west.yml`, see [West Manifests](https://docs.zephyrproject.org/3.5.0/develop/west/manifest.html). + +#### Examples + + + + +```yaml +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + projects: + - name: zmk + remote: zmkfirmware + revision: main + import: app/west.yml + self: + path: config +``` + + + + +```yaml +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: module_a_base + url-base: https://github.com/alice + projects: + - name: zmk + remote: zmkfirmware + revision: main + import: app/west.yml + - name: module_a + remote: module_a_base + revision: main + self: + path: config +``` + + + + +```yaml +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: module_a_base + url-base: https://github.com/alice + - name: module_b_base + url-base: https://github.com/bob + projects: + - name: zmk + remote: zmkfirmware + revision: main + import: app/west.yml + - name: module_a + remote: module_a_base + revision: main + - name: module_b + remote: module_b_base + revision: main + import: west.yml + self: + path: config +``` + + + + +### Building Locally + +To add a module to your build when building locally, you will need to clone/copy said module into your local file tree. You can then build using the module as described in [Building with External Modules](../development/build-flash.mdx#building-with-external-modules). + +## Beta Testing + +You may find that there are some features which you desire for which there is a [Pull Request](https://github.com/zmkfirmware/zmk/pulls), but no module. If this is the case, you can still make use of the feature. + +### Developer Repositories and Branches + +For a developer to submit a pull request to ZMK, they must first clone the original ZMK repository. After they have a copy +of the source code, they may create a feature branch to work within. When they have finished, they will publish the feature +branch and create the pull request. + +#### Finding the repository page from the Pull Request + +![PR Repository](../assets/features/beta-testing/pr-repo-branch.png) + +#### Finding the repository URL + +![Repository URL](../assets/features/beta-testing/repo-url.png) + +#### Finding the repository branch + +![Repository URL](../assets/features/beta-testing/repo-branch.png) + +## Testing Features + +### GitHub Actions + +When [using GitHub Actions to build ZMK](../user-setup.mdx), once you have obtained the correct URL, you'll need to modify the `west.yml` file similarly to [Building With Modules](#building-with-modules). Add the remote for the branch like in said section. The difference is that you will need to change the selected remote and revision (or branch) for the `zmk` project. + +#### Example + + + + +```yaml +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + projects: + - name: zmk + remote: zmkfirmware + revision: main + import: app/west.yml + self: + path: config +``` + + + + +```yaml +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + - name: forkedzmk + url-base: https://github.com/forkedzmk + projects: + - name: zmk + remote: forkedzmk + revision: specificpr + import: app/west.yml + self: + path: config +``` + + + + +### Building Locally + +When building from a pull request locally, you'll need to [perform the local user setup](../development/setup/index.md), but using the repository of the pull request rather than the official ZMK repository. You can then [build and flash](../development/build-flash.mdx) as usual. diff --git a/docs/sidebars.js b/docs/sidebars.js index e8c715c8c76..1233ccf1b42 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,120 +1,150 @@ module.exports = { - docs: { - "Getting Started": [ - "intro", - "hardware", - "faq", - "user-setup", - "customization", - { - type: "category", - label: "Troubleshooting", - link: { - type: "doc", - id: "troubleshooting/index", - }, - collapsed: true, - items: [ - "troubleshooting/building-issues", - "troubleshooting/flashing-issues", - "troubleshooting/connection-issues", - ], + docs: [ + { + type: "category", + label: "Getting Started", + link: { + type: "doc", + id: "intro", }, - ], - Features: [ - "features/keymaps", - "features/bluetooth", - "features/combos", - "features/conditional-layers", - "features/debouncing", - "features/displays", - "features/encoders", - "features/underglow", - "features/backlight", - "features/battery", - "features/soft-off", - "features/beta-testing", - ], - Behaviors: [ - "behaviors/index", - "behaviors/key-press", - "behaviors/layers", - "behaviors/misc", - "behaviors/hold-tap", - "behaviors/mod-tap", - "behaviors/mod-morph", - "behaviors/macros", - "behaviors/key-toggle", - "behaviors/sticky-key", - "behaviors/sticky-layer", - "behaviors/tap-dance", - "behaviors/caps-word", - "behaviors/key-repeat", - "behaviors/sensor-rotate", - "behaviors/mouse-emulation", - "behaviors/reset", - "behaviors/bluetooth", - "behaviors/outputs", - "behaviors/underglow", - "behaviors/backlight", - "behaviors/power", - "behaviors/soft-off", - ], - Codes: [ - "codes/index", - "codes/keyboard-keypad", - "codes/modifiers", - "codes/editing", - "codes/media", - "codes/applications", - "codes/input-assist", - "codes/power", - ], - Configuration: [ - "config/index", - "config/backlight", - "config/battery", - "config/behaviors", - "config/bluetooth", - "config/combos", - "config/displays", - "config/encoders", - "config/keymap", - "config/kscan", - "config/power", - "config/underglow", - "config/system", - ], - Development: [ - "development/clean-room", - "development/pre-commit", - "development/documentation", - { - type: "category", - label: "Setup", - collapsed: true, - items: [ - "development/setup/index", - "development/setup/docker", - "development/setup/native", - ], + collapsed: false, + items: [ + "hardware", + "faq", + "user-setup", + "customization", + { + type: "category", + label: "Troubleshooting", + link: { + type: "doc", + id: "troubleshooting/index", + }, + collapsed: true, + items: [ + "troubleshooting/building-issues", + "troubleshooting/flashing-issues", + "troubleshooting/connection-issues", + ], + }, + ], + }, + { + Features: [ + "features/keymaps", + "features/bluetooth", + "features/combos", + "features/conditional-layers", + "features/debouncing", + "features/displays", + "features/encoders", + "features/modules", + "features/underglow", + "features/backlight", + "features/battery", + "features/soft-off", + ], + }, + { + type: "category", + label: "Behaviors", + link: { + type: "doc", + id: "behaviors/index", }, - "development/build-flash", - "development/boards-shields-keymaps", - "development/posix-board", - "development/tests", - "development/usb-logging", - "development/ide-integration", - { - type: "category", - label: "Guides", - collapsed: false, - items: [ - "development/new-shield", - "development/hardware-metadata-files", - "development/new-behavior", - ], + collapsed: true, + items: [ + "behaviors/key-press", + "behaviors/layers", + "behaviors/misc", + "behaviors/hold-tap", + "behaviors/mod-tap", + "behaviors/mod-morph", + "behaviors/macros", + "behaviors/key-toggle", + "behaviors/sticky-key", + "behaviors/sticky-layer", + "behaviors/tap-dance", + "behaviors/caps-word", + "behaviors/key-repeat", + "behaviors/sensor-rotate", + "behaviors/mouse-emulation", + "behaviors/reset", + "behaviors/bluetooth", + "behaviors/outputs", + "behaviors/underglow", + "behaviors/backlight", + "behaviors/power", + "behaviors/soft-off", + ], + }, + { + Codes: [ + "codes/index", + "codes/keyboard-keypad", + "codes/modifiers", + "codes/editing", + "codes/media", + "codes/applications", + "codes/input-assist", + "codes/power", + ], + }, + { + type: "category", + label: "Configuration", + link: { + type: "doc", + id: "config/index", }, - ], - }, + collapsed: true, + items: [ + "config/backlight", + "config/battery", + "config/behaviors", + "config/bluetooth", + "config/combos", + "config/displays", + "config/encoders", + "config/keymap", + "config/kscan", + "config/power", + "config/underglow", + "config/system", + ], + }, + { + Development: [ + "development/clean-room", + "development/pre-commit", + "development/documentation", + { + type: "category", + label: "Setup", + collapsed: true, + items: [ + "development/setup/index", + "development/setup/docker", + "development/setup/native", + ], + }, + "development/build-flash", + "development/boards-shields-keymaps", + "development/posix-board", + "development/tests", + "development/usb-logging", + "development/ide-integration", + { + type: "category", + label: "Guides", + collapsed: false, + items: [ + "development/new-shield", + "development/hardware-metadata-files", + "development/new-behavior", + ], + }, + ], + }, + ], }; From 9e7fcde868d4ea0d4bd51fcae0afba0349a2bd81 Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> Date: Thu, 1 Aug 2024 05:53:36 +0200 Subject: [PATCH 1119/1130] feat(docs): Improve the layers-related documentation (#2390) Fixes #1284 --- docs/docs/behaviors/layers.md | 4 +++ docs/docs/features/keymaps.mdx | 61 ++++++++++++++++++++++++++-------- docs/docs/keymap-example.md | 36 +++++++++++++------- 3 files changed, 75 insertions(+), 26 deletions(-) diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index 511fbe08b7a..d0e8067916e 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -8,6 +8,10 @@ sidebar_label: Layers Often, you may want a certain key position to alter which layers are enabled, change the default layer, etc. Some of those behaviors are still in the works; the ones that are working now are documented here. +:::note +Multiple layers can be active at the same time and activating a layer will not deactivate layers higher up in the "layer stack". See [Layers](../features/keymaps.mdx#layers) for more information. +::: + ## Defines to Refer to Layers When working with layers, you may have several different key positions with bindings that enable/disable those layers. diff --git a/docs/docs/features/keymaps.mdx b/docs/docs/features/keymaps.mdx index 95df3e86842..c1608204c0f 100644 --- a/docs/docs/features/keymaps.mdx +++ b/docs/docs/features/keymaps.mdx @@ -4,7 +4,6 @@ sidebar_label: Keymaps --- import KeymapExample from "../keymap-example.md"; -import KeymapExampleFile from "../keymap-example-file.md"; ZMK uses a declarative approach to keymaps instead of using C code for all keymap configuration. Right now, ZMK uses the devicetree syntax to declare those keymaps; future work is envisioned for @@ -38,21 +37,24 @@ For the full set of possible behaviors, see the [overview page for behaviors](.. ## Layers Like many mechanical keyboard firmwares, ZMK keymaps are composed of a collection of layers, with a -minimum of at least one layer that is the default, usually near the bottom of the "stack". Each layer +minimum of at least one layer that is the default, usually near the bottom of the "layer stack". Each layer in ZMK contains a set of bindings that bind a certain behavior to a certain key position in that layer. | ![Diagram of three layers](../assets/features/keymaps/layer-diagram.png) | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | _A simplified diagram showing three layers. The layout of each layer is the same (they all contain four keys), but the behavior bindings within each layer can be different._ | -In addition to the base default layer (which can be changed), certain bound behaviors may also -enable/disable additional layers "on top" of the default layer. +All layers are assigned and referred to by a natural number, with the base layer being layer `0`. It is common to [use the C preprocessor to "name" layers](../behaviors/layers.md#defines-to-refer-to-layers), making them more legible. -When a key location is pressed/released, the stack of all active layers from "top to bottom" is used, -and the event is sent to the behavior bound at that position in each layer, for it to perform whatever -actions it wants to in reaction to the event. Those behaviors can choose to "handle" the event, and stop -it from being passed to any lower layers, or may choose to "pass it along", and let the next layer -in the stack _also_ get the event. +The default layer (the base layer with index 0) is always enabled. Certain bound behaviors may enable/disable additional layers. + +When a key location is pressed/released, the _highest-valued currently active_ layer is used. The press/release event is sent to the behavior bound at that position in said layer, for it to perform whatever actions it wants to in reaction to the event. The behavior can choose to "consume" the event, or "pass it along" and let the next highest-valued active layer _also_ get the event (whose behavior may continue "passing it along"). + +Note that the _activation_ order isn't relevant for determining the priority of active layers, it is determined _only_ by the definition order. + +:::tip +If you wish to use multiple base layers (with a [toggle](../behaviors/layers.md#toggle-layer)), e.g. one for QWERTY and another for Colemak layouts, you will want these layers to have the lowest value possible. In other words, one should be layer `0`, and the other should be layer `1`. This allows other momentary layers activated on top of them to work with both. +::: ## Behavior Bindings @@ -121,18 +123,49 @@ Nested under the devicetree root, is the keymap node. The node _name_ itself is ### Layers -Each layer of your keymap will be nested under the keymap node. Here is a sample -that defines just one layer for this keymap: +Each layer of your keymap will be nested under the keymap node. Here is an example of a layer in a 6-key macropad. - +```dts + keymap { + compatible = "zmk,keymap"; + + default_layer { // Layer 0 +// ---------------------------------------------- +// | Z | M | K | +// | A | B | C | + bindings = < + &kp Z &kp M &kp K + &kp A &kp B &kp C + >; + }; + }; +``` Each layer should have: 1. A `bindings` property this will be a list of [behavior bindings](../behaviors/index.mdx), one for each key position for the keyboard. 1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way) +### Multiple Layers + +Layers are numbered in the order that they appear in keymap node - the first layer is `0`, the second layer is `1`, etc. + +Here is an example of a trio of layers for a simple 6-key macropad: + + + +:::note +Even if layer `1` was to be activated after `2`, layer `2` would still have priority as it is higher valued. Behaviors such as [To Layer (`&to`)](../behaviors/layers.md#to-layer) can be used to enable one layer _and disable all other non-default layers_, though. +::: + ### Complete Example -Putting this all together, a complete [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) looks like: +Some examples of complete keymaps for a keyboard are: - +- [`corne.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/corne/corne.keymap) +- [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) +- [`lily58.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/lily58/lily58.keymap) + +:::tip +Every keyboard comes with a "default keymap". For additional examples, the [ZMK tree's `app/boards` folder](https://github.com/zmkfirmware/zmk/blob/main/app/boards) can be browsed. +::: diff --git a/docs/docs/keymap-example.md b/docs/docs/keymap-example.md index e526d5427a9..57f40762ea4 100644 --- a/docs/docs/keymap-example.md +++ b/docs/docs/keymap-example.md @@ -2,20 +2,32 @@ keymap { compatible = "zmk,keymap"; - default_layer { -// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- -// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | -// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | -// | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | + default_layer { // Layer 0 +// ---------------------------------------------- +// | Z | M | K | +// | &mo 1 | LEFT SHIFT | &mo 2 | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL - &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + &kp Z &kp M &kp K + &mo 1 &kp LSHIFT &mo 2 + >; + }; + abc { // Layer 1 +// ---------------------------------------------- +// | A | B | C | +// | &trans | &trans | &trans | + bindings = < + &kp A &kp B &kp C + &trans &trans &trans + >; + }; + xyz { // Layer 2 +// ---------------------------------------------- +// | X | Y | Z | +// | LEFT CTRL | LEFT ALT | &trans | + bindings = < + &kp X &kp Y &kp Z + &kp LCTRL &kp LALT &trans >; - - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; }; }; ``` From b080befebb8114cf0d539eeeb0f2d415c694800c Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Mon, 29 Jul 2024 10:40:16 -0700 Subject: [PATCH 1120/1130] fix(docs): Fix link for matrix transform --- docs/docs/config/kscan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 4fb0cf168ad..097165be64f 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -342,7 +342,7 @@ Transforms should be used any time the physical layout of a keyboard's keys does Transforms can also be used for keyboards with multiple layouts. You can define multiple matrix transform nodes, one for each layout, and users can select which one they want from the `/chosen` node in their keymaps. -See the [new shield guide](../development/new-shield.mdx#optional-matrix-transform) for more documentation on how to define a matrix transform. +See the [new shield guide](../development/new-shield.mdx#matrix-transform) for more documentation on how to define a matrix transform. ### Devicetree From b9a025c76ec77417aca11b38f4dd9da60884e9a4 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 2 Aug 2024 09:57:15 -0700 Subject: [PATCH 1121/1130] fix(docs): Document number of peripherals Kconfig (#2389) Fixes #2373 --- docs/docs/config/system.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index 5d63ca529f4..fef9f53a5b5 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -125,6 +125,7 @@ Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](htt | `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` | bool | `y` for central device, `n` for peripheral | | | `CONFIG_ZMK_SPLIT_PERIPHERAL_HID_INDICATORS` | bool | Enable split keyboard support for passing indicator state to peripherals | n | | `CONFIG_ZMK_SPLIT_BLE` | bool | Use BLE to communicate between split keyboard halves | y | +| `CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS` | int | Number of peripherals that will connect to the central | 1 | | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING` | bool | Enable fetching split peripheral battery levels to the central side | n | | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY` | bool | Enable central reporting of split battery levels to hosts | n | | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_QUEUE_SIZE` | int | Max number of battery level events to queue when received from peripherals | `CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS` | From 47a6715aa6d380b97c505e40a581e7efb3bed042 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Fri, 26 Jul 2024 14:27:25 -0700 Subject: [PATCH 1122/1130] fix(docs): Fix toggle layer docs --- docs/docs/behaviors/layers.md | 43 +++-------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/docs/docs/behaviors/layers.md b/docs/docs/behaviors/layers.md index d0e8067916e..7c95246d0d5 100644 --- a/docs/docs/behaviors/layers.md +++ b/docs/docs/behaviors/layers.md @@ -37,7 +37,7 @@ again. ### Behavior Binding - Reference: `&mo` -- Parameter: The layer number to enable/disable, e.g. `1` +- Parameter: The layer number to enable while held, e.g. `1` Example: @@ -52,7 +52,7 @@ The "layer-tap" behavior enables a layer when a key is held, and outputs a [keyp ### Behavior Binding - Reference: `<` -- Parameter: The layer number to enable when held, e.g. `1` +- Parameter: The layer number to enable while held, e.g. `1` - Parameter: The keycode to send when tapped, e.g. `A` Example: @@ -103,7 +103,7 @@ Example: ## Toggle Layer -The "toggle layer" behavior enables a layer until the layer is manually disabled. +The "toggle layer" behavior enables a layer if it is currently disabled, or disables it if enabled. ### Behavior Binding @@ -116,43 +116,6 @@ Example: &tog LOWER ``` -"Toggle layer" for a : - -```dts -#define DEFAULT 0 -#define NAVI 1 - -#define NONE 0 - -/ { - keymap { - compatible = "zmk,keymap"; - - default_layer { - bindings = < - &tog NAVI &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS - &kp NUMBER_7 &kp NUMBER_8 &kp NUMBER_9 &kp KP_PLUS - &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 &kp KP_PLUS - &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_3 &kp RETURN - &kp NUMBER_0 &kp NUMBER_0 &kp DOT &kp RETURN - >; - }; - - nav_layer { - bindings = < - &tog NAVI &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS - &kp HOME &kp UP &kp PAGE_UP &kp KP_PLUS - &kp LEFT &none &kp RIGHT &kp KP_PLUS - &kp END &kp DOWN &kp PAGE_DOWN &kp RETURN - &kp INSERT &kp INSERT &kp DEL &kp RETURN - >; - }; - }; -}; -``` - -It is possible to use "toggle layer" to have keys that raise and lower the layers as well. - ## Conditional Layers The "conditional layers" feature enables a particular layer when all layers in a specified set are active. From 78ed721c36115efeba877b7a419139bade905f65 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 2 Aug 2024 17:26:56 -0600 Subject: [PATCH 1123/1130] fix(pm): Properly configure a wakeup as input. * Other drivers properly disconnect/de-config pins now, so we need to be sure the wakeup trigger connects the wake pin as input. --- app/src/gpio_key_wakeup_trigger.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/gpio_key_wakeup_trigger.c b/app/src/gpio_key_wakeup_trigger.c index 308c4973d67..d22523a4930 100644 --- a/app/src/gpio_key_wakeup_trigger.c +++ b/app/src/gpio_key_wakeup_trigger.c @@ -36,7 +36,12 @@ static int zmk_gpio_key_wakeup_trigger_init(const struct device *dev) { static int gpio_key_wakeup_trigger_pm_resume(const struct device *dev) { const struct gpio_key_wakeup_trigger_config *config = dev->config; - int ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_LEVEL_ACTIVE); + int ret = gpio_pin_configure_dt(&config->trigger, GPIO_INPUT); + if (ret < 0) { + LOG_ERR("Failed to configure wakeup trigger key GPIO pin as input (%d)", ret); + return ret; + } + ret = gpio_pin_interrupt_configure_dt(&config->trigger, GPIO_INT_LEVEL_ACTIVE); if (ret < 0) { LOG_ERR("Failed to configure wakeup trigger key GPIO pin interrupt (%d)", ret); return ret; From cd25c12ce99d1ee708d76854a79980c7fb48a331 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Sat, 3 Aug 2024 14:00:31 -0600 Subject: [PATCH 1124/1130] fix: Proper device PM support for composite kscan. * Clean up composite kscan to allow multiple instances properly. * Implement PM hook and properly suspend/resume the child devices. Fixes: #2388 --- app/module/drivers/kscan/kscan_composite.c | 107 ++++++++++++++++----- 1 file changed, 82 insertions(+), 25 deletions(-) diff --git a/app/module/drivers/kscan/kscan_composite.c b/app/module/drivers/kscan/kscan_composite.c index 2a3643245c5..a064903a745 100644 --- a/app/module/drivers/kscan/kscan_composite.c +++ b/app/module/drivers/kscan/kscan_composite.c @@ -7,6 +7,7 @@ #define DT_DRV_COMPAT zmk_kscan_composite #include +#include #include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -26,10 +27,10 @@ struct kscan_composite_child_config { .row_offset = DT_PROP(inst, row_offset), \ .column_offset = DT_PROP(inst, column_offset)}, -const struct kscan_composite_child_config kscan_composite_children[] = { - DT_FOREACH_CHILD(MATRIX_NODE_ID, CHILD_CONFIG)}; - -struct kscan_composite_config {}; +struct kscan_composite_config { + const struct kscan_composite_child_config *children; + size_t children_len; +}; struct kscan_composite_data { kscan_callback_t callback; @@ -38,51 +39,80 @@ struct kscan_composite_data { }; static int kscan_composite_enable_callback(const struct device *dev) { - for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { - const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + const struct kscan_composite_config *cfg = dev->config; + + for (int i = 0; i < cfg->children_len; i++) { + const struct kscan_composite_child_config *child_cfg = &cfg->children[i]; + +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + if (!pm_device_runtime_is_enabled(dev) && pm_device_runtime_is_enabled(child_cfg->child)) { + pm_device_runtime_get(child_cfg->child); + } +#elif IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_action_run(child_cfg->child, PM_DEVICE_ACTION_RESUME); +#endif // IS_ENABLED(CONFIG_PM_DEVICE) - kscan_enable_callback(cfg->child); + kscan_enable_callback(child_cfg->child); } return 0; } static int kscan_composite_disable_callback(const struct device *dev) { - for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { - const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + const struct kscan_composite_config *cfg = dev->config; + for (int i = 0; i < cfg->children_len; i++) { + const struct kscan_composite_child_config *child_cfg = &cfg->children[i]; + + kscan_disable_callback(child_cfg->child); - kscan_disable_callback(cfg->child); +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) + if (!pm_device_runtime_is_enabled(dev) && pm_device_runtime_is_enabled(child_cfg->child)) { + pm_device_runtime_put(child_cfg->child); + } +#elif IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_action_run(child_cfg->child, PM_DEVICE_ACTION_SUSPEND); +#endif // IS_ENABLED(CONFIG_PM_DEVICE) } return 0; } +#define KSCAN_COMP_INST_DEV(n) DEVICE_DT_GET(DT_DRV_INST(n)), + +static const struct device *all_instances[] = {DT_INST_FOREACH_STATUS_OKAY(KSCAN_COMP_INST_DEV)}; + static void kscan_composite_child_callback(const struct device *child_dev, uint32_t row, uint32_t column, bool pressed) { // TODO: Ideally we can get this passed into our callback! - const struct device *dev = DEVICE_DT_GET(DT_DRV_INST(0)); - struct kscan_composite_data *data = dev->data; + for (int i = 0; i < ARRAY_SIZE(all_instances); i++) { - for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { - const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + const struct device *dev = all_instances[i]; + const struct kscan_composite_config *cfg = dev->config; + struct kscan_composite_data *data = dev->data; - if (cfg->child != child_dev) { - continue; - } + for (int c = 0; c < cfg->children_len; c++) { + const struct kscan_composite_child_config *child_cfg = &cfg->children[c]; + + if (child_cfg->child != child_dev) { + continue; + } - data->callback(dev, row + cfg->row_offset, column + cfg->column_offset, pressed); + data->callback(dev, row + child_cfg->row_offset, column + child_cfg->column_offset, + pressed); + } } } static int kscan_composite_configure(const struct device *dev, kscan_callback_t callback) { + const struct kscan_composite_config *cfg = dev->config; struct kscan_composite_data *data = dev->data; if (!callback) { return -EINVAL; } - for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { - const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + for (int i = 0; i < cfg->children_len; i++) { + const struct kscan_composite_child_config *child_cfg = &cfg->children[i]; - kscan_config(cfg->child, &kscan_composite_child_callback); + kscan_config(child_cfg->child, &kscan_composite_child_callback); } data->callback = callback; @@ -95,6 +125,10 @@ static int kscan_composite_init(const struct device *dev) { data->dev = dev; +#if IS_ENABLED(CONFIG_PM_DEVICE) + pm_device_init_suspended(dev); +#endif + return 0; } @@ -104,9 +138,32 @@ static const struct kscan_driver_api mock_driver_api = { .disable_callback = kscan_composite_disable_callback, }; -static const struct kscan_composite_config kscan_composite_config = {}; +#if IS_ENABLED(CONFIG_PM_DEVICE) -static struct kscan_composite_data kscan_composite_data; +static int kscan_composite_pm_action(const struct device *dev, enum pm_device_action action) { + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + return kscan_composite_disable_callback(dev); + case PM_DEVICE_ACTION_RESUME: + return kscan_composite_enable_callback(dev); + default: + return -ENOTSUP; + } +} -DEVICE_DT_INST_DEFINE(0, kscan_composite_init, NULL, &kscan_composite_data, &kscan_composite_config, - POST_KERNEL, CONFIG_ZMK_KSCAN_COMPOSITE_INIT_PRIORITY, &mock_driver_api); +#endif // IS_ENABLED(CONFIG_PM_DEVICE) + +#define KSCAN_COMP_DEV(n) \ + static const struct kscan_composite_child_config kscan_composite_children_##n[] = { \ + DT_INST_FOREACH_CHILD(n, CHILD_CONFIG)}; \ + static const struct kscan_composite_config kscan_composite_config_##n = { \ + .children = kscan_composite_children_##n, \ + .children_len = ARRAY_SIZE(kscan_composite_children_##n), \ + }; \ + static struct kscan_composite_data kscan_composite_data_##n; \ + PM_DEVICE_DT_INST_DEFINE(n, kscan_composite_pm_action); \ + DEVICE_DT_INST_DEFINE(n, kscan_composite_init, PM_DEVICE_DT_INST_GET(n), \ + &kscan_composite_data_##n, &kscan_composite_config_##n, POST_KERNEL, \ + CONFIG_ZMK_KSCAN_COMPOSITE_INIT_PRIORITY, &mock_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KSCAN_COMP_DEV) From d75e38859356ab2cd7de034700a5d4f32a9800ad Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 4 Aug 2024 22:43:01 -0700 Subject: [PATCH 1125/1130] feat(docs): Add split keyboards feature page Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com> --- docs/docs/features/split-keyboards.md | 92 +++++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 93 insertions(+) create mode 100644 docs/docs/features/split-keyboards.md diff --git a/docs/docs/features/split-keyboards.md b/docs/docs/features/split-keyboards.md new file mode 100644 index 00000000000..96af347235f --- /dev/null +++ b/docs/docs/features/split-keyboards.md @@ -0,0 +1,92 @@ +--- +title: Split Keyboards +sidebar_label: Split Keyboards +--- + +ZMK supports setups where a keyboard is split into two or more physical parts (also called "sides" or "halves" when split in two), each with their own controller running ZMK. The parts communicate with each other to work as a single keyboard device. + +:::note[Split communication protocols] +Currently ZMK only supports split keyboards that communicate with each other wirelessly over BLE. +As such, only controllers that support BLE can be used with ZMK split keyboards. + +Supporting split communication over wired protocols is planned, allowing for ZMK split keyboards using non-wireless controllers. +::: + +## Central and Peripheral Roles + +In split keyboards running ZMK, one part is assigned the "central" role which receives key position and sensor events from the other parts that are called "peripherals." +The central runs the necessary keymap logic to convert received events into HID events such as keycodes and then communicates with the connected host devices, e.g. over USB or bluetooth. + +The internal keyboard state (like active layers) is handled exclusively by the central. +Peripherals _cannot_ communicate with host devices on their own, since they can only communicate with the central. +They will not present as keyboard devices when connected over USB and will not advertise as pairable BLE keyboards. + +By convention, for a keyboard split into two "halves" the left half is set as the central and the right as a peripheral. + +### Configuration + +The [new shield guide](../development/new-shield.mdx) details how to define a split keyboard shield with two parts, enabling the split feature and setting up the necessary roles for each part. + +Also see the reference section on [split keyboards configuration](../config/system.md#split-keyboards) where the relevant symbols include `CONFIG_ZMK_SPLIT` that enables the feature, `CONFIG_ZMK_SPLIT_ROLE_CENTRAL` which sets the central role and `CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS` that sets the number of peripherals. + +### Latency Considerations + +Since peripherals communicate through centrals, the key and sensor events originating from them will naturally have a larger latency, especially with a wireless split communication protocol. +For the currently used BLE-based transport, split communication increases the average latency by 3.75ms with a worst case increase of 7.5ms. + +## Building and Flashing Firmware + +ZMK split keyboards require building and flashing different firmware files for each split part. +For instance when [using the GitHub workflow](../user-setup.mdx) to build two part split keyboards, two firmware files that typically contain `_left` and `_right` in the file names will be produced. +These files need to be flashed to the respective controllers of the two halves. + +:::tip[Updating your keymap] +Since the keymap processing is primarily done on the central side, for keymap changes it will typically be enough to flash the controller of the central half. +However if you make changes to [config files](../config/index.md) that should apply to all parts, you need to flash to all parts. +Any changes in ZMK related to split keyboard features might also necessitate doing this. +::: + +## Pairing for Wireless Split Keyboards + +Split keyboards with BLE-based split communications (i.e. all officially supported split keyboards) have an internal pairing procedure between the central and each peripheral. +When the central has an open slot for a peripheral, it will advertise for connections (which will not be visible to non-ZMK devices). +Then, any peripheral that has not yet bonded to a peripheral will pair to it. +Similar to how [bluetooth profiles](bluetooth.md) are managed between the keyboard and host devices, the bonding information will be stored with the corresponding hardware addresses of the other keyboard part, on both the central and peripheral. + +In practice, this means that your split keyboard parts will automatically pair and work the first time they are all on at the same time. +However, if this process somehow went wrong or you used controllers in a different split keyboard configuration before, you will need to explicitly clear the stored bond information so that the parts can pair properly. +For this, please follow [the specified procedure](../troubleshooting/connection-issues.mdx#split-keyboard-halves-unable-to-pair) in the troubleshooting section. + +:::warning +If the central keyboard part is either advertising for a pairing or waiting for disconnected peripherals, it will consume more power and drain batteries faster. +::: + +## Behaviors with Locality + +Most ZMK [behaviors](../behaviors/index.mdx) are processed exclusively on the central of the split keyboard as it handles the keymap state and any communication with the host devices. +However, certain behaviors have "global" or "source" localities, where they can affect the peripherals when invoked. + +### Global Locality Behaviors + +These are behaviors that affect all keyboard parts, such as changing lighting effects. +Currently these are the following behaviors: + +- [RGB underglow behaviors](../behaviors/underglow.md) +- [Backlight behaviors](../behaviors/backlight.md) +- [Power management behaviors](../behaviors/power.md) +- [Soft off behavior](../behaviors/soft-off.md) + +### Source Locality Behaviors + +These behaviors only affect the keyboard part that they are invoked from, given that they were invoked from a plain behavior binding (i.e. not nested inside another behavior) on a keymap layer. These behaviors include: + +- [Reset behaviors](../behaviors/reset.md) + +:::note[Peripheral invocation] +Peripherals must be paired and connected to the central in order to be able to activate these behaviors, even if it is possible to trigger the behavior using only keys on a particular peripheral. +This is because the key bindings are processed on the central side which would then instruct the peripheral side to run the behavior's effect. +::: + +:::note[Combos] +[Combos](combos.md) always invoke behaviors with source locality on the central. +::: diff --git a/docs/sidebars.js b/docs/sidebars.js index 1233ccf1b42..1c718e518cc 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -33,6 +33,7 @@ module.exports = { Features: [ "features/keymaps", "features/bluetooth", + "features/split-keyboards", "features/combos", "features/conditional-layers", "features/debouncing", From 2501f1f548128ad1a5ead0807006f315254faa39 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Sun, 4 Aug 2024 22:48:17 -0700 Subject: [PATCH 1126/1130] feat(docs): Add references to new split keyboards page --- docs/docs/behaviors/backlight.md | 2 +- docs/docs/behaviors/power.md | 2 +- docs/docs/behaviors/reset.md | 6 +----- docs/docs/behaviors/underglow.md | 2 +- docs/docs/config/index.md | 2 +- docs/docs/config/system.md | 2 +- docs/docs/customization.md | 2 +- docs/docs/development/new-behavior.mdx | 2 +- docs/docs/development/new-shield.mdx | 2 +- docs/docs/features/battery.md | 2 +- docs/docs/features/bluetooth.md | 2 +- docs/docs/features/combos.md | 4 ++-- docs/docs/troubleshooting/connection-issues.mdx | 2 +- docs/docs/user-setup.mdx | 2 ++ 14 files changed, 16 insertions(+), 18 deletions(-) diff --git a/docs/docs/behaviors/backlight.md b/docs/docs/behaviors/backlight.md index 12ed01f19f3..040bb7b7950 100644 --- a/docs/docs/behaviors/backlight.md +++ b/docs/docs/behaviors/backlight.md @@ -58,4 +58,4 @@ However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNC ## Split Keyboards -Backlight behaviors are global: This means that when triggered, they affect both the central and peripheral side of split keyboards. +Backlight behaviors are [global](../features/split-keyboards.md#global-locality-behaviors): This means that when triggered, they affect both the central and peripheral side of split keyboards. diff --git a/docs/docs/behaviors/power.md b/docs/docs/behaviors/power.md index dce7b1555d3..53110f9591b 100644 --- a/docs/docs/behaviors/power.md +++ b/docs/docs/behaviors/power.md @@ -70,4 +70,4 @@ However it will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE`](../con ## Split Keyboards -Power management behaviors are global: This means that when triggered, they affects both the central and peripheral side of split keyboards. +Power management behaviors are [global](../features/split-keyboards.md#global-locality-behaviors): This means that when triggered, they affects both the central and peripheral side of split keyboards. diff --git a/docs/docs/behaviors/reset.md b/docs/docs/behaviors/reset.md index 60e694313d6..1e2110b94fa 100644 --- a/docs/docs/behaviors/reset.md +++ b/docs/docs/behaviors/reset.md @@ -44,8 +44,4 @@ Example: ## Split Keyboards -Both basic and bootloader reset behaviors are source-specific: This means that it affects the side of the keyboard that contains the behavior binding for split keyboards. For example if you press a key with the `&sys_reset` binding on the left half of the keyboard, the left half will be reset. If you want to be able to reset both sides you can put the bindings on both sides of the keyboard and activate it on the side you would like to reset. - -:::note[Peripheral invocation] -The peripheral side of the keyboard has to be paired and connected to the central side in order to be able to activate these behaviors, even if it is possible to trigger the behavior using only keys on that side. This is because the key bindings are processed on the central side which would then instruct the peripheral side to reset. -::: +Both basic and bootloader reset behaviors are [source-specific](../features/split-keyboards.md##source-locality-behaviors): This means that it affects the side of the keyboard that contains the behavior binding for split keyboards. For example if you press a key with the `&sys_reset` binding on the left half of the keyboard, the left half will be reset. If you want to be able to reset both sides you can put the bindings on both sides of the keyboard and activate it on the side you would like to reset. diff --git a/docs/docs/behaviors/underglow.md b/docs/docs/behaviors/underglow.md index 490789a71be..bd549395ae3 100644 --- a/docs/docs/behaviors/underglow.md +++ b/docs/docs/behaviors/underglow.md @@ -77,4 +77,4 @@ However the settings will only be saved after [`CONFIG_ZMK_SETTINGS_SAVE_DEBOUNC ## Split Keyboards -RGB underglow behaviors are global: This means that when triggered, they affect both the central and peripheral side of split keyboards. +RGB underglow behaviors are [global](../features/split-keyboards.md#global-locality-behaviors): This means that when triggered, they affect both the central and peripheral side of split keyboards. diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 666cf4d9a68..a7c89b7ba95 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -24,7 +24,7 @@ When building with a `zmk-config` folder, ZMK will search the `zmk-config/config These files hold your personal settings for the keyboard. All files are optional. If present, they override any configuration set in the board or shield folders. Otherwise, the default configuration and/or keymap is used. -When using a split keyboard, you can use a single file without the `_left` or `_right` suffix to configure both sides. For example, `corne.conf` and `corne.keymap` will apply to both `corne_left` and `corne_right`. If a shared config file exists, any left or right files will be ignored. +When using a [split keyboard](../features/split-keyboards.md), you can use a single file without the `_left` or `_right` suffix to configure both sides. For example, `corne.conf` and `corne.keymap` will apply to both `corne_left` and `corne_right`. If a shared config file exists, any left or right files will be ignored. ### Board Folder diff --git a/docs/docs/config/system.md b/docs/docs/config/system.md index fef9f53a5b5..1a5306bda5f 100644 --- a/docs/docs/config/system.md +++ b/docs/docs/config/system.md @@ -117,7 +117,7 @@ Note that `CONFIG_BT_MAX_CONN` and `CONFIG_BT_MAX_PAIRED` should be set to the s ### Split keyboards -Following split keyboard settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/bluetooth/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). +Following [split keyboard](../features/split-keyboards.md) settings are defined in [zmk/app/src/split/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/Kconfig) (generic) and [zmk/app/src/split/bluetooth/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/split/bluetooth/Kconfig) (bluetooth). | Config | Type | Description | Default | | ------------------------------------------------------- | ---- | -------------------------------------------------------------------------- | ------------------------------------------ | diff --git a/docs/docs/customization.md b/docs/docs/customization.md index 87d78a22b1c..5b02003d2f3 100644 --- a/docs/docs/customization.md +++ b/docs/docs/customization.md @@ -49,7 +49,7 @@ It is also possible to build firmware locally on your computer by following the For normal keyboards, follow the same flashing instructions as before to flash your updated firmware. -For split keyboards, only the central (left) side will need to be reflashed if you are just updating your keymap. +For [split keyboards](features/split-keyboards.md#building-and-flashing-firmware), only the central (left) side will need to be reflashed if you are just updating your keymap. More troubleshooting information for split keyboards can be found [here](troubleshooting/connection-issues.mdx#split-keyboard-halves-unable-to-pair). ## Building Additional Keyboards diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index dca19288dc0..113ddf0a3b3 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -346,7 +346,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) endif() ``` -For behaviors that do not require central locality, the following options for updating `app/CmakeLists.txt` also exist: +For behaviors that do not require [central locality](../features/split-keyboards.md#behaviors-with-locality), the following options for updating `app/CMakeLists.txt` also exist: - Behavior applies to unibody, or central or peripheral half of keyboard: place `target_sources(app PRIVATE .c)` line _before_ `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` - Behavior applies to _only_ central half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT AND CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` diff --git a/docs/docs/development/new-shield.mdx b/docs/docs/development/new-shield.mdx index ae97f6afe75..5234e13eec9 100644 --- a/docs/docs/development/new-shield.mdx +++ b/docs/docs/development/new-shield.mdx @@ -29,7 +29,7 @@ The high level steps are: It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/3.5.0/hardware/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. :::note -ZMK support for split keyboards requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. +ZMK support for [split keyboards](../features/split-keyboards.md) requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. ::: ## New Zephyr Module Repository diff --git a/docs/docs/features/battery.md b/docs/docs/features/battery.md index 29142eedc01..14dd6661d69 100644 --- a/docs/docs/features/battery.md +++ b/docs/docs/features/battery.md @@ -5,7 +5,7 @@ sidebar_label: Battery Level If your keyboard has a battery sensor, ZMK will report its battery level to the connected bluetooth host and show it on the keyboard's display, if it has one. -For split keyboards, only the battery level of the central (usually left) side is reported over bluetooth by default. ZMK can be [configured to report the battery levels for peripherals](../config/battery.md#peripheral-battery-monitoring), but not many host systems will display this information without additional configuration or the use of third party utilities. +For [split keyboards](split-keyboards.md), only the battery level of the central (usually left) side is reported over bluetooth by default. ZMK can be [configured to report the battery levels for peripherals](../config/battery.md#peripheral-battery-monitoring), but not many host systems will display this information without additional configuration or the use of third party utilities. :::note diff --git a/docs/docs/features/bluetooth.md b/docs/docs/features/bluetooth.md index d148acd82db..79af22b4c1a 100644 --- a/docs/docs/features/bluetooth.md +++ b/docs/docs/features/bluetooth.md @@ -3,7 +3,7 @@ title: Bluetooth sidebar_label: Bluetooth --- -ZMK's bluetooth functionality allows users to connect their keyboards to hosts using Bluetooth Low Energy (BLE) technology. It also is used for split keyboards to connect the two halves wirelessly. +ZMK's bluetooth functionality allows users to connect their keyboards to hosts using Bluetooth Low Energy (BLE) technology. It also is used for [split keyboards](split-keyboards.md) to connect the two halves wirelessly. :::note diff --git a/docs/docs/features/combos.md b/docs/docs/features/combos.md index 63c57c38cc3..ad24d61f93a 100644 --- a/docs/docs/features/combos.md +++ b/docs/docs/features/combos.md @@ -45,7 +45,7 @@ Key positions are numbered like the keys in your keymap, starting at 0. So, if t - You are not limited to `&kp` bindings. You can use all ZMK behaviors there, like `&mo`, `&bt`, `&mt`, `<` etc. :::note[Source-specific behaviors on split keyboards] -Invoking a source-specific behavior such as one of the [reset behaviors](behaviors/reset.md) using a combo will always trigger it on the central side of the keyboard, regardless of the side that the keys corresponding to `key-positions` are on. +Invoking a [source-specific behavior](split-keyboards.md#source-locality-behaviors) such as one of the [reset behaviors](behaviors/reset.md) using a combo will always trigger it on the central side of the keyboard, regardless of the side that the keys corresponding to `key-positions` are on. ::: -See [combo configuration](/docs/config/combos) for advanced configuration options. +See [combo configuration](../config/combos.md) for advanced configuration options. diff --git a/docs/docs/troubleshooting/connection-issues.mdx b/docs/docs/troubleshooting/connection-issues.mdx index f077702c5bb..fe80326bf23 100644 --- a/docs/docs/troubleshooting/connection-issues.mdx +++ b/docs/docs/troubleshooting/connection-issues.mdx @@ -24,7 +24,7 @@ export const Uf2Tabs = (props) => ( ## Split Keyboard Halves Unable to Pair -Split keyboard halves will automatically pair with one another, but there are some cases where this breaks, and the pairing needs to be reset, for example: +[Split keyboard](../features/split-keyboards.md) halves will automatically pair with one another, but there are some cases where this breaks, and the pairing needs to be reset, for example: - Switching which halves are the central/peripheral. - Replacing the controller for one of the halves. diff --git a/docs/docs/user-setup.mdx b/docs/docs/user-setup.mdx index f6cb5eb2717..a79a2956054 100644 --- a/docs/docs/user-setup.mdx +++ b/docs/docs/user-setup.mdx @@ -209,6 +209,7 @@ connect to it wirelessly. For split keyboards, only the central half (typically the left side) will send keyboard outputs over USB or advertise to other devices over bluetooth. Peripheral half will only send keystrokes to the central once they are paired and connected. For this reason it is recommended to test the left half of a split keyboard first. +Please refer to [split keyboards documentation](features/split-keyboards.md) for more information. ::: @@ -221,6 +222,7 @@ ZMK supports multiple BLE “profiles”, which allows you to connect to and swi ### Connecting Split Keyboard Halves For split keyboards, after flashing each half individually you can connect them together by resetting them at the same time. Within a few seconds of resetting, both halves should automatically connect to each other. +Please refer to [the pairing section in the split keyboards documentation](features/split-keyboards.md#pairing-for-wireless-split-keyboards) for more information. :::note From 2a0708d1fc58dd59616e55e120020308db7406f1 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Tue, 6 Aug 2024 17:21:53 -0700 Subject: [PATCH 1127/1130] feat(docs): Add locality warning for nested behaviors --- docs/docs/features/split-keyboards.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/docs/features/split-keyboards.md b/docs/docs/features/split-keyboards.md index 96af347235f..fd8ce16c3ea 100644 --- a/docs/docs/features/split-keyboards.md +++ b/docs/docs/features/split-keyboards.md @@ -68,8 +68,7 @@ However, certain behaviors have "global" or "source" localities, where they can ### Global Locality Behaviors -These are behaviors that affect all keyboard parts, such as changing lighting effects. -Currently these are the following behaviors: +These are behaviors that affect all keyboard parts, such as changing lighting effects: - [RGB underglow behaviors](../behaviors/underglow.md) - [Backlight behaviors](../behaviors/backlight.md) @@ -78,10 +77,15 @@ Currently these are the following behaviors: ### Source Locality Behaviors -These behaviors only affect the keyboard part that they are invoked from, given that they were invoked from a plain behavior binding (i.e. not nested inside another behavior) on a keymap layer. These behaviors include: +These behaviors only affect the keyboard part that they are invoked from: - [Reset behaviors](../behaviors/reset.md) +:::warning[Nesting behaviors with locality] +Currently there is [an issue](https://github.com/zmkfirmware/zmk/issues/1494) preventing both global and source locality behaviors from working as expected if they are invoked from another behavior, such as a hold-tap, tap dance or a mod-morph. +For this reason it is recommended that these behaviors are placed directly on a keymap layer. +::: + :::note[Peripheral invocation] Peripherals must be paired and connected to the central in order to be able to activate these behaviors, even if it is possible to trigger the behavior using only keys on a particular peripheral. This is because the key bindings are processed on the central side which would then instruct the peripheral side to run the behavior's effect. From 2eff266f5b55677ea5a50ed8c79ff25c54674bc0 Mon Sep 17 00:00:00 2001 From: Cem Aksoylar Date: Wed, 7 Aug 2024 23:47:27 -0700 Subject: [PATCH 1128/1130] feat(docs): Add battery life remark for split keyboards --- docs/docs/features/split-keyboards.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/features/split-keyboards.md b/docs/docs/features/split-keyboards.md index fd8ce16c3ea..aae61090988 100644 --- a/docs/docs/features/split-keyboards.md +++ b/docs/docs/features/split-keyboards.md @@ -23,6 +23,11 @@ They will not present as keyboard devices when connected over USB and will not a By convention, for a keyboard split into two "halves" the left half is set as the central and the right as a peripheral. +:::info[Battery life impact] +For BLE-based split keyboards, the central uses significantly more power than the peripherals because its radio needs to periodically wake up to check for incoming transmissions. +You can refer to the [power profiler](/power-profiler) to see battery life estimates for different roles. +::: + ### Configuration The [new shield guide](../development/new-shield.mdx) details how to define a split keyboard shield with two parts, enabling the split feature and setting up the necessary roles for each part. From 3fec690def0af2e012fce3eeaee0292698d9d261 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Mon, 12 Aug 2024 11:57:56 -0600 Subject: [PATCH 1129/1130] feat: Add config settings for sticky keys/hold-tap * Add new Kconfig symbols to config max held sticky-keys/hold-taps and for max captured events during hold-tap resolution. --- app/CMakeLists.txt | 4 +-- app/Kconfig.behaviors | 38 +++++++++++++++++++++++++ app/src/behaviors/behavior_hold_tap.c | 4 +-- app/src/behaviors/behavior_sticky_key.c | 2 +- docs/docs/config/behaviors.md | 13 +++++++++ 5 files changed, 56 insertions(+), 5 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ab2e1502ac4..5e19713a110 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -47,8 +47,8 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) - target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) - target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STICKY_KEY app PRIVATE src/behaviors/behavior_sticky_key.c) target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) target_sources(app PRIVATE src/behaviors/behavior_key_repeat.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MACRO app PRIVATE src/behaviors/behavior_macro.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index d3f4537ec22..adada062a07 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -40,6 +40,29 @@ endchoice endif + +config ZMK_BEHAVIOR_HOLD_TAP + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_HOLD_TAP_ENABLED + +if ZMK_BEHAVIOR_HOLD_TAP + +config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD + int "Hold Tap Max Held" + default 10 + help + Max number of simultaneously held hold-taps + + +config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS + int "Hold Tap Max Captured Events" + default 40 + help + Max number of captured system events while waiting to resolve hold taps + +endif + config ZMK_BEHAVIOR_KEY_TOGGLE bool default y @@ -51,6 +74,21 @@ config ZMK_BEHAVIOR_MOUSE_KEY_PRESS depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED imply ZMK_MOUSE +config ZMK_BEHAVIOR_STICKY_KEY + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_STICKY_KEY_ENABLED + +if ZMK_BEHAVIOR_STICKY_KEY + +config ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD + int "Sticky Key Max Held" + default 10 + help + Max number of simultaneously held sticky keys + +endif + config ZMK_BEHAVIOR_SOFT_OFF bool default y diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 1c050c44fe5..c45ee803f53 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -24,8 +24,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) -#define ZMK_BHV_HOLD_TAP_MAX_HELD 10 -#define ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS 40 +#define ZMK_BHV_HOLD_TAP_MAX_HELD CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD +#define ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS // increase if you have keyboard with more keys. #define ZMK_BHV_HOLD_TAP_POSITION_NOT_USED 9999 diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index d1299c78d7f..6016fc2d8ee 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -26,7 +26,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define KEY_PRESS DEVICE_DT_NAME(DT_INST(0, zmk_behavior_key_press)) -#define ZMK_BHV_STICKY_KEY_MAX_HELD 10 +#define ZMK_BHV_STICKY_KEY_MAX_HELD CONFIG_ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD #define ZMK_BHV_STICKY_KEY_POSITION_FREE UINT32_MAX diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 28abdf2722a..11ad0002068 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -51,6 +51,13 @@ Creates a custom behavior that triggers one behavior when a key is held or a dif See the [hold-tap behavior](../behaviors/hold-tap.mdx) documentation for more details and examples. +### Kconfig + +| Config | Type | Description | Default | +| -------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD` | int | Maximum number of simultaneous held hold-taps. | 10 | +| `CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS` | int | Maximum number of system events to capture while deferring a hold or tap decision resolution. | 40 | + ### Devicetree Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-hold-tap.yaml) @@ -227,6 +234,12 @@ Creates a custom behavior that triggers a behavior and keeps it pressed it until See the [sticky key behavior](../behaviors/sticky-key.md) and [sticky layer behavior](../behaviors/sticky-layer.md) documentation for more details and examples. +### Kconfig + +| Config | Type | Description | Default | +| ----------------------------------------- | ---- | ------------------------------------------------ | ------- | +| `CONFIG_ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD` | int | Maximum number of simultaneous held sticky keys. | 10 | + ### Devicetree Definition file: [zmk/app/dts/bindings/behaviors/zmk,behavior-sticky-key.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/behaviors/zmk%2Cbehavior-sticky-key.yaml) From 6d50ba555383f86b6cde68dabd48abd5f3877967 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 12 Aug 2024 19:11:16 -0400 Subject: [PATCH 1130/1130] chore: Docs review tweaks. Co-authored-by: Cem Aksoylar --- app/Kconfig.behaviors | 1 - docs/docs/config/behaviors.md | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index adada062a07..96609b930bd 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -54,7 +54,6 @@ config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD help Max number of simultaneously held hold-taps - config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS int "Hold Tap Max Captured Events" default 40 diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index 11ad0002068..a422e599cfe 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -53,10 +53,10 @@ See the [hold-tap behavior](../behaviors/hold-tap.mdx) documentation for more de ### Kconfig -| Config | Type | Description | Default | -| -------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------- | ------- | -| `CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD` | int | Maximum number of simultaneous held hold-taps. | 10 | -| `CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS` | int | Maximum number of system events to capture while deferring a hold or tap decision resolution. | 40 | +| Config | Type | Description | Default | +| -------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------- | ------- | +| `CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD` | int | Maximum number of simultaneous held hold-taps | 10 | +| `CONFIG_ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS` | int | Maximum number of system events to capture while deferring a hold or tap decision resolution | 40 | ### Devicetree @@ -236,9 +236,9 @@ See the [sticky key behavior](../behaviors/sticky-key.md) and [sticky layer beha ### Kconfig -| Config | Type | Description | Default | -| ----------------------------------------- | ---- | ------------------------------------------------ | ------- | -| `CONFIG_ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD` | int | Maximum number of simultaneous held sticky keys. | 10 | +| Config | Type | Description | Default | +| ----------------------------------------- | ---- | ----------------------------------------------- | ------- | +| `CONFIG_ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD` | int | Maximum number of simultaneous held sticky keys | 10 | ### Devicetree